@kong-ui-public/dashboard-renderer 8.15.1 → 8.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
- (function(D,o){typeof exports=="object"&&typeof module<"u"?o(exports,require("vue"),require("@kong-ui-public/analytics-utilities"),require("@kong-ui-public/analytics-chart"),require("@kong-ui-public/analytics-metric-provider"),require("@kong-ui-public/table-data-grid"),require("@kong-ui-public/analytics-config-store"),require("@kong/icons"),require("swrv"),require("axios"),require("@kong-ui-public/i18n"),require("@kong-ui-public/analytics-geo-map")):typeof define=="function"&&define.amd?define(["exports","vue","@kong-ui-public/analytics-utilities","@kong-ui-public/analytics-chart","@kong-ui-public/analytics-metric-provider","@kong-ui-public/table-data-grid","@kong-ui-public/analytics-config-store","@kong/icons","swrv","axios","@kong-ui-public/i18n","@kong-ui-public/analytics-geo-map"],o):(D=typeof globalThis<"u"?globalThis:D||self,o(D["kong-ui-public-dashboard-renderer"]={},D.Vue,D["kong-ui-public-analytics-utilities"],D["kong-ui-public-analytics-chart"],D["kong-ui-public-analytics-metric-provider"],D["kong-ui-public-table-data-grid"],D["kong-ui-public-analytics-config-store"],D.KongIcons,D.swrv,D.axios,D["kong-ui-public-i18n"],D["kong-ui-public-analytics-geo-map"]))})(this,(function(D,o,I,ye,Ge,Bt,ne,le,It,Cn,Ue,Ve){"use strict";var Ye=(r=>(r.VALIDATING="VALIDATING",r.VALIDATING_HAS_DATA="VALIDATING_HAS_DATA",r.PENDING="PENDING",r.SUCCESS="SUCCESS",r.SUCCESS_HAS_DATA="SUCCESS_HAS_DATA",r.ERROR="ERROR",r.STALE_IF_ERROR="STALE_IF_ERROR",r))(Ye||{});const Ft=r=>r?!!(Object.keys(r)?.length||r.data?.length||r.data?.data?.length||!r.data?.data&&typeof r.data=="object"&&Object.keys(r?.data).length):!1;function Wt(r=o.ref({}),e,t,i=Ft){const s=o.ref("PENDING");return o.watchEffect(()=>{const n=i(r.value);if(r.value&&n&&t.value){s.value="VALIDATING_HAS_DATA";return}if(r.value&&t.value){s.value="VALIDATING";return}if(r.value&&e.value){s.value="STALE_IF_ERROR";return}if(r.value===void 0&&!e.value){s.value="PENDING";return}if(r.value&&!e.value&&n){s.value="SUCCESS_HAS_DATA";return}if(r.value&&!e.value){s.value="SUCCESS";return}r.value===void 0&&e&&(s.value="ERROR")}),{state:s,swrvState:Ye}}const $t={renderer:{not_configured:{title:"Chart is not fully configured",description:"Begin by choosing at least one metric"},noQueryBridge:"No query bridge provided. Unable to render dashboard.",unexpectedError:"An unexpected error has occurred.",trendRange:{"24h":"Last 24-hour summary","7d":"Last 7-day summary","30d":"Last 30-day summary"},edit:"Edit",duplicateTile:"Duplicate",exit_fullscreen:"Exit fullscreen",fullscreen:"Fullscreen",remove:"Remove",delete:"Delete",as_of_today:"As of today"},pdfExport:{branding:"Kong Konnect",generated:"Generated {timestamp}",dashboardNote:"For a live, interactive experience, open this dashboard in Konnect",pageOf:"{page} / {total}"},csvExport:{defaultFilename:"Chart export",exportAsCsv:"Export as CSV"},chartLabels:{control_plane:"Control plane",data_plane_node_version:"Data plane node version",env:"Environment",gateway_service:"Gateway service",hostname:"Hostname",plugin:"Plugin",plugin_name:"Plugin name",plugin_scope:"Plugin scope",region:"Region",request_count:"Request count",route:"Route",status_code:"Status code",team:"Team",name:"Name"},jumpToExplore:"Explore",jumpToRequests:"View requests",query_aged_out_warning:"This tile was configured with {savedGranularity} granularity, which is no longer available. It now shows {currentGranularity} data, the closest available granularity.",granularities:{daily:"1 day",fiveMinutely:"5 minutes",hourly:"1 hour",minutely:"1 minute",tenMinutely:"10 minutes",tenSecondly:"10 seconds",thirtyMinutely:"30 minutes",thirtySecondly:"30 seconds",twelveHourly:"12 hours",twoHourly:"2 hours",weekly:"1 week",unknown:"Unknown"}};function Ke(){const r=Ue.createI18n("en-us",$t);return{i18n:r,i18nT:Ue.i18nTComponent(r)}}const fe=170,Ce=6,X="analytics-query-provider",qe="{entity-id}",je="{cp-id}",Qe="{timeframe}",Xe=30*1e3,Ze=3e5,Je=36e5;function Gt(){const r=o.inject(X);return{evaluateFeatureFlag:(t,i)=>r?r.evaluateFeatureFlagFn(t,i):i}}function Ut(r){return r&&r.__esModule&&Object.prototype.hasOwnProperty.call(r,"default")?r.default:r}var Ae={exports:{}},et;function Vt(){return et||(et=1,(function(r){var e=Object.prototype.hasOwnProperty,t="~";function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(t=!1));function s(u,c,d){this.fn=u,this.context=c,this.once=d||!1}function n(u,c,d,h,m){if(typeof d!="function")throw new TypeError("The listener must be a function");var g=new s(d,h||u,m),p=t?t+c:c;return u._events[p]?u._events[p].fn?u._events[p]=[u._events[p],g]:u._events[p].push(g):(u._events[p]=g,u._eventsCount++),u}function l(u,c){--u._eventsCount===0?u._events=new i:delete u._events[c]}function a(){this._events=new i,this._eventsCount=0}a.prototype.eventNames=function(){var c=[],d,h;if(this._eventsCount===0)return c;for(h in d=this._events)e.call(d,h)&&c.push(t?h.slice(1):h);return Object.getOwnPropertySymbols?c.concat(Object.getOwnPropertySymbols(d)):c},a.prototype.listeners=function(c){var d=t?t+c:c,h=this._events[d];if(!h)return[];if(h.fn)return[h.fn];for(var m=0,g=h.length,p=new Array(g);m<g;m++)p[m]=h[m].fn;return p},a.prototype.listenerCount=function(c){var d=t?t+c:c,h=this._events[d];return h?h.fn?1:h.length:0},a.prototype.emit=function(c,d,h,m,g,p){var b=t?t+c:c;if(!this._events[b])return!1;var y=this._events[b],k=arguments.length,E,w;if(y.fn){switch(y.once&&this.removeListener(c,y.fn,void 0,!0),k){case 1:return y.fn.call(y.context),!0;case 2:return y.fn.call(y.context,d),!0;case 3:return y.fn.call(y.context,d,h),!0;case 4:return y.fn.call(y.context,d,h,m),!0;case 5:return y.fn.call(y.context,d,h,m,g),!0;case 6:return y.fn.call(y.context,d,h,m,g,p),!0}for(w=1,E=new Array(k-1);w<k;w++)E[w-1]=arguments[w];y.fn.apply(y.context,E)}else{var M=y.length,T;for(w=0;w<M;w++)switch(y[w].once&&this.removeListener(c,y[w].fn,void 0,!0),k){case 1:y[w].fn.call(y[w].context);break;case 2:y[w].fn.call(y[w].context,d);break;case 3:y[w].fn.call(y[w].context,d,h);break;case 4:y[w].fn.call(y[w].context,d,h,m);break;default:if(!E)for(T=1,E=new Array(k-1);T<k;T++)E[T-1]=arguments[T];y[w].fn.apply(y[w].context,E)}}return!0},a.prototype.on=function(c,d,h){return n(this,c,d,h,!1)},a.prototype.once=function(c,d,h){return n(this,c,d,h,!0)},a.prototype.removeListener=function(c,d,h,m){var g=t?t+c:c;if(!this._events[g])return this;if(!d)return l(this,g),this;var p=this._events[g];if(p.fn)p.fn===d&&(!m||p.once)&&(!h||p.context===h)&&l(this,g);else{for(var b=0,y=[],k=p.length;b<k;b++)(p[b].fn!==d||m&&!p[b].once||h&&p[b].context!==h)&&y.push(p[b]);y.length?this._events[g]=y.length===1?y[0]:y:l(this,g)}return this},a.prototype.removeAllListeners=function(c){var d;return c?(d=t?t+c:c,this._events[d]&&l(this,d)):(this._events=new i,this._eventsCount=0),this},a.prototype.off=a.prototype.removeListener,a.prototype.addListener=a.prototype.on,a.prefixed=t,a.EventEmitter=a,r.exports=a})(Ae)),Ae.exports}var Yt=Vt();const Kt=Ut(Yt);class tt extends Error{constructor(e){super(e),this.name="TimeoutError"}}class jt extends Error{constructor(e){super(),this.name="AbortError",this.message=e}}const it=r=>globalThis.DOMException===void 0?new jt(r):new DOMException(r),st=r=>{const e=r.reason===void 0?it("This operation was aborted."):r.reason;return e instanceof Error?e:it(e)};function Qt(r,e){const{milliseconds:t,fallback:i,message:s,customTimers:n={setTimeout,clearTimeout}}=e;let l,a;const c=new Promise((d,h)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){const{signal:g}=e;g.aborted&&h(st(g)),a=()=>{h(st(g))},g.addEventListener("abort",a,{once:!0})}if(t===Number.POSITIVE_INFINITY){r.then(d,h);return}const m=new tt;l=n.setTimeout.call(void 0,()=>{if(i){try{d(i())}catch(g){h(g)}return}typeof r.cancel=="function"&&r.cancel(),s===!1?d():s instanceof Error?h(s):(m.message=s??`Promise timed out after ${t} milliseconds`,h(m))},t),(async()=>{try{d(await r)}catch(g){h(g)}})()}).finally(()=>{c.clear(),a&&e.signal&&e.signal.removeEventListener("abort",a)});return c.clear=()=>{n.clearTimeout.call(void 0,l),l=void 0},c}function Xt(r,e,t){let i=0,s=r.length;for(;s>0;){const n=Math.trunc(s/2);let l=i+n;t(r[l],e)<=0?(i=++l,s-=n+1):s=n}return i}class Zt{#e=[];enqueue(e,t){t={priority:0,...t};const i={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(i);return}const s=Xt(this.#e,i,(n,l)=>l.priority-n.priority);this.#e.splice(s,0,i)}setPriority(e,t){const i=this.#e.findIndex(n=>n.id===e);if(i===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);const[s]=this.#e.splice(i,1);this.enqueue(s.run,{priority:t,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}}class Jt extends Kt{#e;#o;#r=0;#f;#a;#m=0;#i;#l;#t;#g;#s=0;#c;#n;#p;#w=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Zt,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#o=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#f=e.intervalCap,this.#a=e.interval,this.#t=new e.queueClass,this.#g=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#p=e.throwOnTimeout===!0,this.#n=e.autoStart===!1}get#_(){return this.#o||this.#r<this.#f}get#v(){return this.#s<this.#c}#E(){this.#s--,this.#d(),this.emit("next")}#x(){this.#b(),this.#y(),this.#l=void 0}get#C(){const e=Date.now();if(this.#i===void 0){const t=this.#m-e;if(t<0)this.#r=this.#e?this.#s:0;else return this.#l===void 0&&(this.#l=setTimeout(()=>{this.#x()},t)),!0}return!1}#d(){if(this.#t.size===0)return this.#i&&clearInterval(this.#i),this.#i=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#n){const e=!this.#C;if(this.#_&&this.#v){const t=this.#t.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#o||this.#i!==void 0||(this.#i=setInterval(()=>{this.#b()},this.#a),this.#m=Date.now()+this.#a)}#b(){this.#r===0&&this.#s===0&&this.#i&&(clearInterval(this.#i),this.#i=void 0),this.#r=this.#e?this.#s:0,this.#u()}#u(){for(;this.#d(););}get concurrency(){return this.#c}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#c=e,this.#u()}async#k(e){return new Promise((t,i)=>{e.addEventListener("abort",()=>{i(e.reason)},{once:!0})})}setPriority(e,t){this.#t.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#w++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#p,...t},new Promise((i,s)=>{this.#t.enqueue(async()=>{this.#s++;try{t.signal?.throwIfAborted(),this.#r++;let n=e({signal:t.signal});t.timeout&&(n=Qt(Promise.resolve(n),{milliseconds:t.timeout})),t.signal&&(n=Promise.race([n,this.#k(t.signal)]));const l=await n;i(l),this.emit("completed",l)}catch(n){if(n instanceof tt&&!t.throwOnTimeout){i();return}s(n),this.emit("error",n)}finally{this.#E()}},t),this.emit("add"),this.#d()})}async addAll(e,t){return Promise.all(e.map(async i=>this.add(i,t)))}start(){return this.#n?(this.#n=!1,this.#u(),this):this}pause(){this.#n=!0}clear(){this.#t=new this.#g}async onEmpty(){this.#t.size!==0&&await this.#h("empty")}async onSizeLessThan(e){this.#t.size<e||await this.#h("next",()=>this.#t.size<e)}async onIdle(){this.#s===0&&this.#t.size===0||await this.#h("idle")}async#h(e,t){return new Promise(i=>{const s=()=>{t&&!t()||(this.off(e,s),i())};this.on(e,s)})}get size(){return this.#t.size}sizeBy(e){return this.#t.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#n}}const ei=()=>{const r=ne.useAnalyticsConfigStore(),e=o.inject(X);if(!e)return;if(e.queryFnOverride){console.warn("Detected incorrect use of useRequestQueue. This composable should not be used in nested components. Please discuss with team-data or report an issue if you feel you have a use case.");return}const t=new Jt({carryoverConcurrencyCount:!0,concurrency:r.maxParallelRequests,interval:r.requestInterval,intervalCap:r.requestIntervalCap}),i={...e,queryFnOverride:!0,queryFn:(s,n)=>t.add(()=>e.queryFn(s,n),{throwOnTimeout:!0})};o.provide(X,i)};const ti=typeof window<"u";let nt;process.env.NODE_ENV;const rt=process.env.NODE_ENV!=="production"?Symbol("pinia"):Symbol();var ot;(function(r){r.direct="direct",r.patchObject="patch object",r.patchFunction="patch function"})(ot||(ot={})),process.env.NODE_ENV;function be(r){const e=o.toRaw(r),t={};for(const i in e){const s=e[i];s.effect?t[i]=o.computed({get:()=>r[i],set(n){r[i]=n}}):(o.isRef(s)||o.isReactive(s))&&(t[i]=o.toRef(r,i))}return t}const G=r=>r?.chart.type==="table",ii=["basic","api_usage","llm_usage","agentic_usage","platform","platform_usage",void 0],si=r=>ii.includes(r);function ni({queryBridge:r,context:e,definition:t,chartData:i}){const s=o.ref(""),n=o.ref(""),l=o.ref(void 0),a=o.ref(void 0),u=ne.useAnalyticsConfigStore(),c=ne.useDatasourceConfigStore(),{stripUnknownFilters:d,loading:h}=be(c),m=o.computed(()=>G(t.value));o.onMounted(async()=>{s.value=await r?.exploreBaseUrl?.()??"",n.value=await r?.requestsBaseUrl?.()??""});const g=o.computed(()=>u.analytics&&u.percentiles),p=o.computed(()=>{const x=t.value.chart.type;return["golden_signals","gauge"].includes(x)?!1:x==="top_n"?e.value.editable||e.value.showTileActions:!0}),b=o.computed(()=>n.value&&t.value.query&&!m.value&&t.value.query.datasource!=="llm_usage"&&!I.isPlatformDatasource(t.value.query.datasource)&&g.value&&!h.value),y=o.computed(()=>s.value&&t.value.query&&si(t.value.query.datasource)&&g.value&&!h.value),k=o.computed(()=>i.value?I.msToGranularity(i.value.meta.granularity_ms):void 0),E=o.computed(()=>{const x=t.value,q=[...e.value.filters,...x.query.filters??[]],L="metrics"in x.query?x.query.metrics:void 0,F=x.query?.datasource??"api_usage";return d.value({datasource:F,filters:q,queryFields:L})}),w=o.computed(()=>{if(!y.value||!p.value)return"";const x=t.value;if(G(x))return K({...x.query,filters:E.value});const q=x.query.time_range||e.value.timeSpec,L=ee(q,E.value);return K(L)}),M=o.computed(()=>{if(!b.value||!p.value)return"";const x=E.value,q=t.value;if(G(q))return"";const L=Y(q.query.time_range||e.value.timeSpec,x);return T(L)}),T=x=>b.value?`${n.value}?q=${JSON.stringify(x)}`:"",Y=(x,q)=>{const L=i.value?.meta?.start?new Date(i.value.meta.start):void 0,F=i.value?.meta?.end?new Date(i.value.meta.end):void 0;return{filter:q,timeframe:{timePeriodsKey:x.type==="relative"?x.time_range:"custom",start:x.type==="absolute"?L:void 0,end:x.type==="absolute"?F:void 0}}},te=(x,q)=>({filter:q,timeframe:{timePeriodsKey:x.type==="relative"?x.time_range:"custom",start:x.type==="absolute"?x.start:void 0,end:x.type==="absolute"?x.end:void 0}}),ee=(x,q)=>{const L=t.value;if(G(L))throw new Error("Cannot build a chart explore query for table chart definitions");const F=[...L.query.dimensions??[]],ie=[...L.query.metrics??[]];return{filters:q,metrics:ie,dimensions:F,time_range:x,granularity:L.query.granularity||k.value||void 0}},K=x=>{if(!y.value)return"";const q=t.value.query.datasource&&t.value.query.datasource!=="basic"?t.value.query.datasource:"api_usage";return`${s.value}?q=${JSON.stringify(x)}&d=${q}&c=${t.value.chart.type}`};return o.watch([b,y],([x,q])=>{x&&(l.value={href:""}),q&&(a.value={href:""})}),{exploreLinkKebabMenu:w,requestsLinkKebabMenu:M,canShowKebabMenu:p,canGenerateRequestsLink:b,canGenerateExploreLink:y,requestsLinkZoomActions:l,exploreLinkZoomActions:a,buildExploreQuery:ee,buildRequestsQueryZoomActions:te,buildExploreLink:K,buildRequestLink:T}}function ri(){const r=o.inject(X),e=ne.useDatasourceConfigStore(),{stripUnknownFilters:t}=be(e);let i=null;return o.onUnmounted(()=>{i?.abort()}),{issueQuery:async(n,l,a)=>{if(!r)throw new Error("Query bridge is not defined");i?.abort();const u=new AbortController;i=u,await e.isReady();const{datasource:c,limit:d,...h}=n,m=c||"basic",g=t.value({datasource:m,filters:[...n.filters??[],...l.filters],queryFields:n.metrics});let p=n.time_range;p?p.tz||(p={...p,tz:l.tz}):p={...l.timeSpec,tz:l.tz};const b={datasource:m,query:{...h,time_range:p,filters:g,limit:a??d}};return r.queryFn(b,u)}}}function oi({context:r,globalFilters:e=o.ref([]),isFullscreen:t=o.ref(!1),preview:i=o.ref(!1)}){const s=ne.useAnalyticsConfigStore(),n=ne.useDatasourceConfigStore(),{loading:l}=be(s),{loading:a}=be(n),u=o.computed(()=>r.value.timeSpec?r.value.timeSpec:{type:"relative",time_range:s.defaultQueryTimeForOrg}),c=o.computed(()=>{let{tz:h,refreshInterval:m,editable:g,showTileActions:p}=r.value;const b=[...r.value.filters??[],...e.value];if(h||(h=new Intl.DateTimeFormat().resolvedOptions().timeZone),m===void 0&&(m=Xe),t.value){let k=!1;if(u.value.type==="relative")k=["15m","1h","6h","12h","24h"].includes(u.value.time_range);else{const M=u.value.start.getTime(),T=u.value.end.getTime();k=Math.abs(T-M)<=864e5}const E=new Date().getTime();u.value.type==="absolute"&&u.value.end.getTime()<E||u.value.type==="relative"&&["previous_week","previous_month"].includes(u.value.time_range)?m=0:k?m=Ze:m=Je}(g===void 0||i.value)&&(g=!1),p===void 0&&(p=!0);const y=!i.value&&!!o.getCurrentInstance()?.vnode?.props?.onTileTimeRangeZoom;return{filters:b,tz:h,timeSpec:u.value,refreshInterval:m,editable:g,showTileActions:p&&!i.value,showTileZoomActions:!i.value,zoomable:y}}),d=o.computed(()=>!!r.value.timeSpec||!l.value&&!a.value);return{internalContext:c,queryReady:d}}const at=6048e5,ai=864e5,lt=Symbol.for("constructDateFrom");function re(r,e){return typeof r=="function"?r(e):r&&typeof r=="object"&&lt in r?r[lt](e):r instanceof Date?new r.constructor(e):new Date(e)}function U(r,e){return re(e||r,r)}let li={};function ke(){return li}function we(r,e){const t=ke(),i=e?.weekStartsOn??e?.locale?.options?.weekStartsOn??t.weekStartsOn??t.locale?.options?.weekStartsOn??0,s=U(r,e?.in),n=s.getDay(),l=(n<i?7:0)+n-i;return s.setDate(s.getDate()-l),s.setHours(0,0,0,0),s}function Re(r,e){return we(r,{...e,weekStartsOn:1})}function ct(r,e){const t=U(r,e?.in),i=t.getFullYear(),s=re(t,0);s.setFullYear(i+1,0,4),s.setHours(0,0,0,0);const n=Re(s),l=re(t,0);l.setFullYear(i,0,4),l.setHours(0,0,0,0);const a=Re(l);return t.getTime()>=n.getTime()?i+1:t.getTime()>=a.getTime()?i:i-1}function dt(r){const e=U(r),t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()));return t.setUTCFullYear(e.getFullYear()),+r-+t}function ci(r,...e){const t=re.bind(null,e.find(i=>typeof i=="object"));return e.map(t)}function ut(r,e){const t=U(r,e?.in);return t.setHours(0,0,0,0),t}function di(r,e,t){const[i,s]=ci(t?.in,r,e),n=ut(i),l=ut(s),a=+n-dt(n),u=+l-dt(l);return Math.round((a-u)/ai)}function ui(r,e){const t=ct(r,e),i=re(r,0);return i.setFullYear(t,0,4),i.setHours(0,0,0,0),Re(i)}function hi(r){return r instanceof Date||typeof r=="object"&&Object.prototype.toString.call(r)==="[object Date]"}function fi(r){return!(!hi(r)&&typeof r!="number"||isNaN(+U(r)))}function mi(r,e){const t=U(r,e?.in);return t.setFullYear(t.getFullYear(),0,1),t.setHours(0,0,0,0),t}const gi={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},pi=(r,e,t)=>{let i;const s=gi[r];return typeof s=="string"?i=s:e===1?i=s.one:i=s.other.replace("{{count}}",e.toString()),t?.addSuffix?t.comparison&&t.comparison>0?"in "+i:i+" ago":i};function Pe(r){return(e={})=>{const t=e.width?String(e.width):r.defaultWidth;return r.formats[t]||r.formats[r.defaultWidth]}}const yi={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},bi={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},wi={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},_i={date:Pe({formats:yi,defaultWidth:"full"}),time:Pe({formats:bi,defaultWidth:"full"}),dateTime:Pe({formats:wi,defaultWidth:"full"})},vi={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Ei=(r,e,t,i)=>vi[r];function _e(r){return(e,t)=>{const i=t?.context?String(t.context):"standalone";let s;if(i==="formatting"&&r.formattingValues){const l=r.defaultFormattingWidth||r.defaultWidth,a=t?.width?String(t.width):l;s=r.formattingValues[a]||r.formattingValues[l]}else{const l=r.defaultWidth,a=t?.width?String(t.width):r.defaultWidth;s=r.values[a]||r.values[l]}const n=r.argumentCallback?r.argumentCallback(e):e;return s[n]}}const xi={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},Ci={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},ki={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Ri={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},Ti={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},Si={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},Di={ordinalNumber:(r,e)=>{const t=Number(r),i=t%100;if(i>20||i<10)switch(i%10){case 1:return t+"st";case 2:return t+"nd";case 3:return t+"rd"}return t+"th"},era:_e({values:xi,defaultWidth:"wide"}),quarter:_e({values:Ci,defaultWidth:"wide",argumentCallback:r=>r-1}),month:_e({values:ki,defaultWidth:"wide"}),day:_e({values:Ri,defaultWidth:"wide"}),dayPeriod:_e({values:Ti,defaultWidth:"wide",formattingValues:Si,defaultFormattingWidth:"wide"})};function ve(r){return(e,t={})=>{const i=t.width,s=i&&r.matchPatterns[i]||r.matchPatterns[r.defaultMatchWidth],n=e.match(s);if(!n)return null;const l=n[0],a=i&&r.parsePatterns[i]||r.parsePatterns[r.defaultParseWidth],u=Array.isArray(a)?Oi(a,h=>h.test(l)):Ni(a,h=>h.test(l));let c;c=r.valueCallback?r.valueCallback(u):u,c=t.valueCallback?t.valueCallback(c):c;const d=e.slice(l.length);return{value:c,rest:d}}}function Ni(r,e){for(const t in r)if(Object.prototype.hasOwnProperty.call(r,t)&&e(r[t]))return t}function Oi(r,e){for(let t=0;t<r.length;t++)if(e(r[t]))return t}function zi(r){return(e,t={})=>{const i=e.match(r.matchPattern);if(!i)return null;const s=i[0],n=e.match(r.parsePattern);if(!n)return null;let l=r.valueCallback?r.valueCallback(n[0]):n[0];l=t.valueCallback?t.valueCallback(l):l;const a=e.slice(s.length);return{value:l,rest:a}}}const Mi=/^(\d+)(th|st|nd|rd)?/i,Li=/\d+/i,qi={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},Ai={any:[/^b/i,/^(a|c)/i]},Pi={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},Hi={any:[/1/i,/2/i,/3/i,/4/i]},Bi={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},Ii={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},Fi={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},Wi={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},$i={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},Gi={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},Ui={ordinalNumber:zi({matchPattern:Mi,parsePattern:Li,valueCallback:r=>parseInt(r,10)}),era:ve({matchPatterns:qi,defaultMatchWidth:"wide",parsePatterns:Ai,defaultParseWidth:"any"}),quarter:ve({matchPatterns:Pi,defaultMatchWidth:"wide",parsePatterns:Hi,defaultParseWidth:"any",valueCallback:r=>r+1}),month:ve({matchPatterns:Bi,defaultMatchWidth:"wide",parsePatterns:Ii,defaultParseWidth:"any"}),day:ve({matchPatterns:Fi,defaultMatchWidth:"wide",parsePatterns:Wi,defaultParseWidth:"any"}),dayPeriod:ve({matchPatterns:$i,defaultMatchWidth:"any",parsePatterns:Gi,defaultParseWidth:"any"})},Vi={code:"en-US",formatDistance:pi,formatLong:_i,formatRelative:Ei,localize:Di,match:Ui,options:{weekStartsOn:0,firstWeekContainsDate:1}};function Yi(r,e){const t=U(r,e?.in);return di(t,mi(t))+1}function Ki(r,e){const t=U(r,e?.in),i=+Re(t)-+ui(t);return Math.round(i/at)+1}function ht(r,e){const t=U(r,e?.in),i=t.getFullYear(),s=ke(),n=e?.firstWeekContainsDate??e?.locale?.options?.firstWeekContainsDate??s.firstWeekContainsDate??s.locale?.options?.firstWeekContainsDate??1,l=re(e?.in||r,0);l.setFullYear(i+1,0,n),l.setHours(0,0,0,0);const a=we(l,e),u=re(e?.in||r,0);u.setFullYear(i,0,n),u.setHours(0,0,0,0);const c=we(u,e);return+t>=+a?i+1:+t>=+c?i:i-1}function ji(r,e){const t=ke(),i=e?.firstWeekContainsDate??e?.locale?.options?.firstWeekContainsDate??t.firstWeekContainsDate??t.locale?.options?.firstWeekContainsDate??1,s=ht(r,e),n=re(e?.in||r,0);return n.setFullYear(s,0,i),n.setHours(0,0,0,0),we(n,e)}function Qi(r,e){const t=U(r,e?.in),i=+we(t,e)-+ji(t,e);return Math.round(i/at)+1}function N(r,e){const t=r<0?"-":"",i=Math.abs(r).toString().padStart(e,"0");return t+i}const oe={y(r,e){const t=r.getFullYear(),i=t>0?t:1-t;return N(e==="yy"?i%100:i,e.length)},M(r,e){const t=r.getMonth();return e==="M"?String(t+1):N(t+1,2)},d(r,e){return N(r.getDate(),e.length)},a(r,e){const t=r.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return t.toUpperCase();case"aaa":return t;case"aaaaa":return t[0];default:return t==="am"?"a.m.":"p.m."}},h(r,e){return N(r.getHours()%12||12,e.length)},H(r,e){return N(r.getHours(),e.length)},m(r,e){return N(r.getMinutes(),e.length)},s(r,e){return N(r.getSeconds(),e.length)},S(r,e){const t=e.length,i=r.getMilliseconds(),s=Math.trunc(i*Math.pow(10,t-3));return N(s,e.length)}},me={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},ft={G:function(r,e,t){const i=r.getFullYear()>0?1:0;switch(e){case"G":case"GG":case"GGG":return t.era(i,{width:"abbreviated"});case"GGGGG":return t.era(i,{width:"narrow"});default:return t.era(i,{width:"wide"})}},y:function(r,e,t){if(e==="yo"){const i=r.getFullYear(),s=i>0?i:1-i;return t.ordinalNumber(s,{unit:"year"})}return oe.y(r,e)},Y:function(r,e,t,i){const s=ht(r,i),n=s>0?s:1-s;if(e==="YY"){const l=n%100;return N(l,2)}return e==="Yo"?t.ordinalNumber(n,{unit:"year"}):N(n,e.length)},R:function(r,e){const t=ct(r);return N(t,e.length)},u:function(r,e){const t=r.getFullYear();return N(t,e.length)},Q:function(r,e,t){const i=Math.ceil((r.getMonth()+1)/3);switch(e){case"Q":return String(i);case"QQ":return N(i,2);case"Qo":return t.ordinalNumber(i,{unit:"quarter"});case"QQQ":return t.quarter(i,{width:"abbreviated",context:"formatting"});case"QQQQQ":return t.quarter(i,{width:"narrow",context:"formatting"});default:return t.quarter(i,{width:"wide",context:"formatting"})}},q:function(r,e,t){const i=Math.ceil((r.getMonth()+1)/3);switch(e){case"q":return String(i);case"qq":return N(i,2);case"qo":return t.ordinalNumber(i,{unit:"quarter"});case"qqq":return t.quarter(i,{width:"abbreviated",context:"standalone"});case"qqqqq":return t.quarter(i,{width:"narrow",context:"standalone"});default:return t.quarter(i,{width:"wide",context:"standalone"})}},M:function(r,e,t){const i=r.getMonth();switch(e){case"M":case"MM":return oe.M(r,e);case"Mo":return t.ordinalNumber(i+1,{unit:"month"});case"MMM":return t.month(i,{width:"abbreviated",context:"formatting"});case"MMMMM":return t.month(i,{width:"narrow",context:"formatting"});default:return t.month(i,{width:"wide",context:"formatting"})}},L:function(r,e,t){const i=r.getMonth();switch(e){case"L":return String(i+1);case"LL":return N(i+1,2);case"Lo":return t.ordinalNumber(i+1,{unit:"month"});case"LLL":return t.month(i,{width:"abbreviated",context:"standalone"});case"LLLLL":return t.month(i,{width:"narrow",context:"standalone"});default:return t.month(i,{width:"wide",context:"standalone"})}},w:function(r,e,t,i){const s=Qi(r,i);return e==="wo"?t.ordinalNumber(s,{unit:"week"}):N(s,e.length)},I:function(r,e,t){const i=Ki(r);return e==="Io"?t.ordinalNumber(i,{unit:"week"}):N(i,e.length)},d:function(r,e,t){return e==="do"?t.ordinalNumber(r.getDate(),{unit:"date"}):oe.d(r,e)},D:function(r,e,t){const i=Yi(r);return e==="Do"?t.ordinalNumber(i,{unit:"dayOfYear"}):N(i,e.length)},E:function(r,e,t){const i=r.getDay();switch(e){case"E":case"EE":case"EEE":return t.day(i,{width:"abbreviated",context:"formatting"});case"EEEEE":return t.day(i,{width:"narrow",context:"formatting"});case"EEEEEE":return t.day(i,{width:"short",context:"formatting"});default:return t.day(i,{width:"wide",context:"formatting"})}},e:function(r,e,t,i){const s=r.getDay(),n=(s-i.weekStartsOn+8)%7||7;switch(e){case"e":return String(n);case"ee":return N(n,2);case"eo":return t.ordinalNumber(n,{unit:"day"});case"eee":return t.day(s,{width:"abbreviated",context:"formatting"});case"eeeee":return t.day(s,{width:"narrow",context:"formatting"});case"eeeeee":return t.day(s,{width:"short",context:"formatting"});default:return t.day(s,{width:"wide",context:"formatting"})}},c:function(r,e,t,i){const s=r.getDay(),n=(s-i.weekStartsOn+8)%7||7;switch(e){case"c":return String(n);case"cc":return N(n,e.length);case"co":return t.ordinalNumber(n,{unit:"day"});case"ccc":return t.day(s,{width:"abbreviated",context:"standalone"});case"ccccc":return t.day(s,{width:"narrow",context:"standalone"});case"cccccc":return t.day(s,{width:"short",context:"standalone"});default:return t.day(s,{width:"wide",context:"standalone"})}},i:function(r,e,t){const i=r.getDay(),s=i===0?7:i;switch(e){case"i":return String(s);case"ii":return N(s,e.length);case"io":return t.ordinalNumber(s,{unit:"day"});case"iii":return t.day(i,{width:"abbreviated",context:"formatting"});case"iiiii":return t.day(i,{width:"narrow",context:"formatting"});case"iiiiii":return t.day(i,{width:"short",context:"formatting"});default:return t.day(i,{width:"wide",context:"formatting"})}},a:function(r,e,t){const s=r.getHours()/12>=1?"pm":"am";switch(e){case"a":case"aa":return t.dayPeriod(s,{width:"abbreviated",context:"formatting"});case"aaa":return t.dayPeriod(s,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return t.dayPeriod(s,{width:"narrow",context:"formatting"});default:return t.dayPeriod(s,{width:"wide",context:"formatting"})}},b:function(r,e,t){const i=r.getHours();let s;switch(i===12?s=me.noon:i===0?s=me.midnight:s=i/12>=1?"pm":"am",e){case"b":case"bb":return t.dayPeriod(s,{width:"abbreviated",context:"formatting"});case"bbb":return t.dayPeriod(s,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return t.dayPeriod(s,{width:"narrow",context:"formatting"});default:return t.dayPeriod(s,{width:"wide",context:"formatting"})}},B:function(r,e,t){const i=r.getHours();let s;switch(i>=17?s=me.evening:i>=12?s=me.afternoon:i>=4?s=me.morning:s=me.night,e){case"B":case"BB":case"BBB":return t.dayPeriod(s,{width:"abbreviated",context:"formatting"});case"BBBBB":return t.dayPeriod(s,{width:"narrow",context:"formatting"});default:return t.dayPeriod(s,{width:"wide",context:"formatting"})}},h:function(r,e,t){if(e==="ho"){let i=r.getHours()%12;return i===0&&(i=12),t.ordinalNumber(i,{unit:"hour"})}return oe.h(r,e)},H:function(r,e,t){return e==="Ho"?t.ordinalNumber(r.getHours(),{unit:"hour"}):oe.H(r,e)},K:function(r,e,t){const i=r.getHours()%12;return e==="Ko"?t.ordinalNumber(i,{unit:"hour"}):N(i,e.length)},k:function(r,e,t){let i=r.getHours();return i===0&&(i=24),e==="ko"?t.ordinalNumber(i,{unit:"hour"}):N(i,e.length)},m:function(r,e,t){return e==="mo"?t.ordinalNumber(r.getMinutes(),{unit:"minute"}):oe.m(r,e)},s:function(r,e,t){return e==="so"?t.ordinalNumber(r.getSeconds(),{unit:"second"}):oe.s(r,e)},S:function(r,e){return oe.S(r,e)},X:function(r,e,t){const i=r.getTimezoneOffset();if(i===0)return"Z";switch(e){case"X":return gt(i);case"XXXX":case"XX":return ce(i);default:return ce(i,":")}},x:function(r,e,t){const i=r.getTimezoneOffset();switch(e){case"x":return gt(i);case"xxxx":case"xx":return ce(i);default:return ce(i,":")}},O:function(r,e,t){const i=r.getTimezoneOffset();switch(e){case"O":case"OO":case"OOO":return"GMT"+mt(i,":");default:return"GMT"+ce(i,":")}},z:function(r,e,t){const i=r.getTimezoneOffset();switch(e){case"z":case"zz":case"zzz":return"GMT"+mt(i,":");default:return"GMT"+ce(i,":")}},t:function(r,e,t){const i=Math.trunc(+r/1e3);return N(i,e.length)},T:function(r,e,t){return N(+r,e.length)}};function mt(r,e=""){const t=r>0?"-":"+",i=Math.abs(r),s=Math.trunc(i/60),n=i%60;return n===0?t+String(s):t+String(s)+e+N(n,2)}function gt(r,e){return r%60===0?(r>0?"-":"+")+N(Math.abs(r)/60,2):ce(r,e)}function ce(r,e=""){const t=r>0?"-":"+",i=Math.abs(r),s=N(Math.trunc(i/60),2),n=N(i%60,2);return t+s+e+n}const pt=(r,e)=>{switch(r){case"P":return e.date({width:"short"});case"PP":return e.date({width:"medium"});case"PPP":return e.date({width:"long"});default:return e.date({width:"full"})}},yt=(r,e)=>{switch(r){case"p":return e.time({width:"short"});case"pp":return e.time({width:"medium"});case"ppp":return e.time({width:"long"});default:return e.time({width:"full"})}},Xi={p:yt,P:(r,e)=>{const t=r.match(/(P+)(p+)?/)||[],i=t[1],s=t[2];if(!s)return pt(r,e);let n;switch(i){case"P":n=e.dateTime({width:"short"});break;case"PP":n=e.dateTime({width:"medium"});break;case"PPP":n=e.dateTime({width:"long"});break;default:n=e.dateTime({width:"full"});break}return n.replace("{{date}}",pt(i,e)).replace("{{time}}",yt(s,e))}},Zi=/^D+$/,Ji=/^Y+$/,es=["D","DD","YY","YYYY"];function ts(r){return Zi.test(r)}function is(r){return Ji.test(r)}function ss(r,e,t){const i=ns(r,e,t);if(console.warn(i),es.includes(r))throw new RangeError(i)}function ns(r,e,t){const i=r[0]==="Y"?"years":"days of the month";return`Use \`${r.toLowerCase()}\` instead of \`${r}\` (in \`${e}\`) for formatting ${i} to the input \`${t}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const rs=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,os=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,as=/^'([^]*?)'?$/,ls=/''/g,cs=/[a-zA-Z]/;function ds(r,e,t){const i=ke(),s=i.locale??Vi,n=i.firstWeekContainsDate??i.locale?.options?.firstWeekContainsDate??1,l=i.weekStartsOn??i.locale?.options?.weekStartsOn??0,a=U(r,t?.in);if(!fi(a))throw new RangeError("Invalid time value");let u=e.match(os).map(d=>{const h=d[0];if(h==="p"||h==="P"){const m=Xi[h];return m(d,s.formatLong)}return d}).join("").match(rs).map(d=>{if(d==="''")return{isToken:!1,value:"'"};const h=d[0];if(h==="'")return{isToken:!1,value:us(d)};if(ft[h])return{isToken:!0,value:d};if(h.match(cs))throw new RangeError("Format string contains an unescaped latin alphabet character `"+h+"`");return{isToken:!1,value:d}});s.localize.preprocessor&&(u=s.localize.preprocessor(a,u));const c={firstWeekContainsDate:n,weekStartsOn:l,locale:s};return u.map(d=>{if(!d.isToken)return d.value;const h=d.value;(is(h)||ts(h))&&ss(h,e,String(r));const m=ft[h[0]];return m(a,h,s.localize,c)}).join("")}function us(r){const e=r.match(as);return e?e[1].replace(ls,"'"):r}const hs=6,bt=6,wt=4;function fs(r){return r.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}function ms(r,e,t){const i=r||e&&fs(e)||"dashboard-export",s=ds(t,"yyyy-MM-dd");return`${i}-${s}.pdf`}function gs(r,e){const{pageWidth:t,pageHeight:i,margin:s}=e,n=s+1,l=s+e.headerHeight-3,a=i-s-bt+3,u=a+4;e.title&&(r.setFont("helvetica","bold"),r.setFontSize(11),r.setTextColor(60),r.text(e.title,s,n)),r.setFont("helvetica","normal"),r.setFontSize(8),r.setTextColor(120),r.text(e.generatedAt,t-s,n,{align:"right"}),e.subtitle&&r.text(e.subtitle,s,n+wt),r.setDrawColor(220),r.line(s,l,t-s,l),r.line(s,a,t-s,a),r.setFont("helvetica","bold"),r.setTextColor(60),r.text(e.branding,s,u);const c=r.getTextWidth(e.branding);r.setFont("helvetica","normal");const d=` ${e.dashboardNote}`;e.dashboardUrl?(r.setTextColor(0,68,204),r.textWithLink(d,s+c,u,{url:e.dashboardUrl})):(r.setTextColor(120),r.text(d,s+c,u)),r.setTextColor(120),r.text(e.pageLabel,t-s,u,{align:"right"})}function ps(r){const e=r.querySelector(".kong-ui-public-grid-layout, .grid-stack");if(!e)return[];const t=e.querySelectorAll(":scope > .grid-cell:not(.empty-cell), :scope > .grid-stack-item");if(!t.length)return[];const i=r.getBoundingClientRect().top,s=new Map;return t.forEach(n=>{const l=n.getBoundingClientRect(),a=Math.round(l.top-i),u=Math.round(l.bottom-i),c=s.get(a);s.set(a,c!==void 0?Math.max(c,u):u)}),[...s.entries()].map(([n,l])=>({top:n,bottom:l})).sort((n,l)=>n.top-l.top)}function ys(r,e,t,i){if(!r.length){const l=[];let a=0;for(;a<e;){const u=Math.min(t,e-a);l.push({startY:a,height:u}),a+=u}return l}const s=[];let n=0;for(const l of r){const a=l.top*i,u=l.bottom*i;u-n>t&&(a>n?(s.push({startY:n,height:a-n}),n=a):(s.push({startY:n,height:u-n}),n=u))}return n<e&&s.push({startY:n,height:e-n}),s}function bs(r){const{i18n:e}=Ke(),t=o.ref({status:"idle"});async function i(s={}){const{filename:n,title:l,subtitle:a,dashboardUrl:u,orientation:c="landscape",pageSize:d="letter",margin:h=4,scale:m=2,exclude:g=[".tile-actions",".tooltip",".popover",".dropdown-popover"],output:p="download",onBeforeCapture:b,onAfterCapture:y}=s,k=r.value;if(!k){t.value={status:"error",error:new Error("Dashboard layout container not found.")};return}try{t.value={status:"preparing"},await b?.();const[{snapdom:E},{jsPDF:w}]=await Promise.all([import("@zumer/snapdom"),import("jspdf")]);t.value={status:"capturing"};const M={name:"kong-webgl-snapshot",beforeClone:()=>I.prepareForCapture(),afterClone:()=>I.restoreAfterCapture()},T=await E.toCanvas(k,{scale:m,exclude:g,plugins:[M]}),Y=ps(k),te=k.getBoundingClientRect().width,ee=te?T.width/te:m;t.value={status:"generating"};const K=new Date,x=new w({orientation:c,unit:"mm",format:d}),q=x.internal.pageSize.getWidth(),L=x.internal.pageSize.getHeight(),F=hs+(a?wt:0),ie=q-h*2,j=L-h*2-F-bt,ge=T.width/ie,R=j*ge,S=ys(Y,T.height,R,ee),A={title:l,subtitle:a,dashboardUrl:u,generatedAt:e.t("pdfExport.generated",{timestamp:K.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}),branding:e.t("pdfExport.branding"),dashboardNote:e.t("pdfExport.dashboardNote"),pageWidth:q,pageHeight:L,headerHeight:F,margin:h};for(let z=0;z<S.length;z++){z>0&&x.addPage();const{startY:P,height:Q}=S[z],se=document.createElement("canvas");se.width=T.width,se.height=Q,se.getContext("2d").drawImage(T,0,P,T.width,Q,0,0,T.width,Q),x.addImage(se.toDataURL("image/png"),"PNG",h,h+F,ie,Q/ge),gs(x,{...A,pageLabel:e.t("pdfExport.pageOf",{page:String(z+1),total:String(S.length)})})}if(p==="blob"){const z=x.output("blob");return t.value={status:"complete",pageCount:S.length},z}x.save(ms(n,l,K)),t.value={status:"complete",pageCount:S.length}}catch(E){t.value={status:"error",error:E}}finally{I.restoreAfterCapture(),await y?.()}}return{exportPdf:i,exportState:o.readonly(t)}}const W={useContextLinks:ni,useDashboardInternalContext:oi,useEvaluateFeatureFlag:Gt,useExportPdf:bs,useI18n:Ke,useIssueQuery:ri,useRequestQueue:ei},Te=o.defineComponent({__name:"QueryDataProvider",props:{context:{},limitOverride:{},query:{},queryReady:{type:Boolean},refreshCounter:{}},emits:["chart-data","query-complete"],setup(r,{emit:e}){const t=r,i=e,{i18n:s}=W.useI18n(),{issueQuery:n}=W.useIssueQuery(),l=o.inject(X),a=()=>t.queryReady&&l?JSON.stringify([t.query,t.context,t.refreshCounter]):null,{data:u,error:c,isValidating:d}=It(a,async()=>{const E=a();try{const w=await n(t.query,t.context,t.limitOverride);return a()!==E?void 0:(g.value=null,w)}catch(w){if(a()!==E)return;throw g.value=ye.handleQueryError(w),w}finally{a()===E&&i("query-complete")}},{refreshInterval:t.context.refreshInterval,revalidateOnFocus:!1,shouldRetryOnError:!1}),{state:h,swrvState:m}=Wt(u,c,d),g=o.ref(null),p=o.computed(()=>h.value===m.ERROR||!!g.value),b=o.computed(()=>!t.queryReady||h.value===m.PENDING),y=o.ref(),k=o.computed(()=>u.value??(t.queryReady&&h.value===m.PENDING?y.value:void 0));return o.watch([()=>u.value,()=>h.value],([E,w])=>{E&&(w==="SUCCESS_HAS_DATA"||w==="SUCCESS")&&E!==y.value&&(y.value=E,i("chart-data",E))}),(E,w)=>{const M=o.resolveComponent("KSkeleton"),T=o.resolveComponent("KEmptyState");return(b.value||!o.unref(u)&&!p.value)&&!k.value?(o.openBlock(),o.createBlock(M,{key:0,class:"chart-skeleton",type:"table"})):p.value&&!b.value?(o.openBlock(),o.createBlock(T,{key:1,"action-button-visible":!1,"data-testid":"chart-empty-state"},o.createSlots({icon:o.withCtx(()=>[g.value?.type==="forbidden"?(o.openBlock(),o.createBlock(o.unref(le.VisibilityOffIcon),{key:0})):(o.openBlock(),o.createBlock(o.unref(le.WarningOutlineIcon),{key:1}))]),title:o.withCtx(()=>[o.createElementVNode("p",null,o.toDisplayString(g.value?.message||o.unref(s).t("renderer.unexpectedError")),1)]),_:2},[g.value?.details?{name:"default",fn:o.withCtx(()=>[o.createElementVNode("p",null,o.toDisplayString(g.value.details),1)]),key:"0"}:void 0]),1024)):k.value?o.renderSlot(E.$slots,"default",{key:2,data:k.value}):o.createCommentVNode("",!0)}}}),ws=o.defineComponent({__name:"SimpleChartRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},setup(r){const e=r,t=o.computed(()=>e.chartOptions.type==="single_value");return(i,s)=>(o.openBlock(),o.createBlock(Te,{context:r.context,query:r.query,"query-ready":r.queryReady,"refresh-counter":r.refreshCounter},{default:o.withCtx(({data:n})=>[o.createElementVNode("div",{class:o.normalizeClass(["analytics-chart",{"single-value":t.value}]),style:o.normalizeStyle(t.value?void 0:{height:`${r.height}px`})},[o.createVNode(o.unref(ye.SimpleChart),{"chart-data":n,"chart-options":r.chartOptions,"synthetics-data-key":t.value?void 0:r.chartOptions.synthetics_data_key},null,8,["chart-data","chart-options","synthetics-data-key"])],6)]),_:1},8,["context","query","query-ready","refresh-counter"]))}}),ae=(r,e)=>{const t=r.__vccOpts||r;for(const[i,s]of e)t[i]=s;return t},_t=ae(ws,[["__scopeId","data-v-2cbfac70"]]),_s={class:"analytics-chart"},He=ae(o.defineComponent({__name:"BaseAnalyticsChartRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{},extraProps:{}},emits:["edit-tile","chart-data","zoom-time-range","view-requests","select-chart-range"],setup(r,{emit:e}){const t=r,i=e,{i18n:s}=W.useI18n(),n=o.computed(()=>({type:t.chartOptions.type,stacked:t.chartOptions.stacked??!1,chartDatasetColors:t.chartOptions.chart_dataset_colors,threshold:t.chartOptions.threshold,hideTruncationWarning:t.query.limit!==void 0&&t.query.limit>0})),l=o.computed(()=>t.context.zoomable),a=()=>{i("edit-tile")},u=c=>{i("chart-data",c)};return(c,d)=>{const h=o.resolveComponent("KDropdownItem");return o.openBlock(),o.createBlock(Te,{context:r.context,query:r.query,"query-ready":r.queryReady,"refresh-counter":r.refreshCounter,onChartData:u},{default:o.withCtx(({data:m})=>[o.createElementVNode("div",_s,[o.createVNode(o.unref(ye.AnalyticsChart),o.mergeProps({"chart-data":m,"chart-options":n.value,"explore-link":r.exploreLink,"legend-position":"bottom","requests-link":r.requestsLink,"synthetics-data-key":r.chartOptions.synthetics_data_key,"timeseries-zoom":l.value,"tooltip-title":""},r.extraProps,{onSelectChartRange:d[0]||(d[0]=g=>i("select-chart-range",g)),onZoomTimeRange:d[1]||(d[1]=g=>i("zoom-time-range",g))}),o.createSlots({_:2},[r.context.editable?{name:"menu-items",fn:o.withCtx(()=>[o.createVNode(h,{onClick:a},{default:o.withCtx(()=>[o.createTextVNode(o.toDisplayString(o.unref(s).t("renderer.edit")),1)]),_:1})]),key:"0"}:void 0]),1040,["chart-data","chart-options","explore-link","requests-link","synthetics-data-key","timeseries-zoom"])])]),_:1},8,["context","query","query-ready","refresh-counter"])}}}),[["__scopeId","data-v-e1e7f610"]]),vt=o.defineComponent({__name:"BarChartRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},setup(r){return(e,t)=>(o.openBlock(),o.createBlock(He,{"chart-options":r.chartOptions,context:r.context,"extra-props":{showAnnotations:!1},height:r.height,query:r.query,"query-ready":r.queryReady,"refresh-counter":r.refreshCounter},null,8,["chart-options","context","height","query","query-ready","refresh-counter"]))}}),Et=o.defineComponent({__name:"TimeseriesChartRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},emits:["zoom-time-range","select-chart-range"],setup(r,{emit:e}){const t=e;return(i,s)=>(o.openBlock(),o.createBlock(He,{"chart-options":r.chartOptions,context:r.context,"explore-link":r.exploreLink,height:r.height,query:r.query,"query-ready":r.queryReady,"refresh-counter":r.refreshCounter,"requests-link":r.requestsLink,onSelectChartRange:s[0]||(s[0]=n=>t("select-chart-range",n)),onZoomTimeRange:s[1]||(s[1]=n=>t("zoom-time-range",n))},null,8,["chart-options","context","explore-link","height","query","query-ready","refresh-counter","requests-link"]))}}),vs=ae(o.defineComponent({__name:"GoldenSignalsRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},setup(r){const e=r,t=o.computed(()=>{const i=e.query?.datasource;if(i&&i!=="api_usage"&&i!=="basic")throw new Error(`Invalid datasource value: ${i}`);return{datasource:e.query?.datasource,overrideTimeRange:e.context.timeSpec,additionalFilter:e.context.filters,longCardTitles:e.chartOptions.long_card_titles,percentileLatency:e.chartOptions.percentile_latency,refreshInterval:e.context.refreshInterval,queryReady:e.queryReady,refreshCounter:e.refreshCounter}});return(i,s)=>(o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(["metric-card-tile-wrapper",{titled:!!e.chartOptions.chart_title}])},[o.createVNode(o.unref(Ge.MetricsProvider),o.normalizeProps(o.guardReactiveProps(t.value)),{default:o.withCtx(()=>[o.createVNode(o.unref(Ge.MetricsConsumer))]),_:1},16)],2))}}),[["__scopeId","data-v-b77f52b8"]]),Es={class:"fallback-entity-link","data-testid":"entity-link-parent"},xt=o.defineComponent({__name:"FallbackEntityLink",props:{entityLinkData:{}},setup(r){return(e,t)=>(o.openBlock(),o.createElementBlock("div",Es,o.toDisplayString(r.entityLinkData.label),1))}}),xs={key:0},Cs={key:1},ks=o.defineComponent({__name:"TopNTableRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},setup(r){const e=r,t=o.inject(X),i=o.defineAsyncComponent(async()=>{if(t?.fetchComponent)try{return await t.fetchComponent("EntityLink")}catch{return xt}return xt}),s=o.computed(()=>!!e.chartOptions.entity_link||!!Object.keys(e.chartOptions.entity_links||{}).length),n=c=>{const d=e.chartOptions.entity_links;return d&&(d[c]||Object.entries(d).find(([h])=>h.toLowerCase()===c.toLowerCase())?.[1])||""},l=c=>{const d=c.dimensions?.[0]?.dimension;return!d||d===c.dimension},a=c=>n(c.dimension)||l(c)&&e.chartOptions.entity_link||"",u=c=>{const d=a(c);if(d)if(c.id.includes(":")){const[h,m]=c.id.split(":");return d.replace(je,h).replace(qe,m)}else return d.replace(qe,c.id);return""};return(c,d)=>(o.openBlock(),o.createBlock(Te,{context:r.context,query:r.query,"query-ready":r.queryReady,"refresh-counter":r.refreshCounter},{default:o.withCtx(({data:h})=>[o.createVNode(o.unref(ye.TopNTable),{data:h,"synthetics-data-key":r.chartOptions.synthetics_data_key},o.createSlots({_:2},[s.value?{name:"name",fn:o.withCtx(({record:m})=>[!m.isEmpty&&a(m)?(o.openBlock(),o.createBlock(o.unref(i),{key:0,"entity-link-data":{id:m.id,label:m.name,deleted:m.deleted},"external-link":u(m)},null,8,["entity-link-data","external-link"])):(o.openBlock(),o.createElementBlock(o.Fragment,{key:1},[m.name==="empty"?(o.openBlock(),o.createElementBlock("i",xs,o.toDisplayString(m.name),1)):(o.openBlock(),o.createElementBlock("span",Cs,o.toDisplayString(m.name),1))],64))]),key:"0"}:void 0]),1032,["data","synthetics-data-key"])]),_:1},8,["context","query","query-ready","refresh-counter"]))}}),Rs=r=>r.records.map(e=>{const t={...e};return Object.entries(e).forEach(([i,s])=>{if(s===null)return;const n=r.meta.display?.[i]?.[String(s)]?.name;n&&(t[i]=n)}),t}),Ct=({canTranslate:r,columns:e,translate:t})=>e.map(i=>{const s=`chartLabels.${i}`;return{key:i,label:r(s)?t(s):i}}),Ts={platform:Ct,platform_usage:Ct},kt=async({abortController:r,context:e,cursor:t,pageSize:i,query:s,onResponseColumns:n,stripUnknownFilters:l,tabularQueryFn:a})=>{if(!a)throw new Error("AnalyticsBridge.tabularQueryFn is not defined");const u=s.query,c=l({datasource:s.datasource,filters:[...u.filters??[],...e.filters],queryFields:u.entity===void 0?void 0:[u.entity]}),d=await a({datasource:s.datasource,query:{columns:u.columns,cursor:t===void 0?u.cursor:String(t),entity:u.entity,filters:c,page_size:i}},r);return d.meta.columns?.length&&n?.(d.meta.columns),{data:Rs(d),cursor:d.meta.cursor,hasMore:!!d.meta.cursor}},Ss={platform:kt,platform_usage:kt},Ds=ae(o.defineComponent({__name:"TableDataGridRenderer",props:{query:{},context:{},queryReady:{type:Boolean},height:{},refreshCounter:{}},emits:["loading-change"],setup(r,{emit:e}){const t=r,i=e,s=o.inject(X),n=ne.useDatasourceConfigStore(),{i18n:l}=W.useI18n(),a=new AbortController,u=o.ref([]),c=o.ref(!1),d=o.computed(()=>t.height===void 0?void 0:{height:`${t.height}px`}),h=o.computed(()=>({datasource:t.query.datasource,query:{columns:t.query.columns,cursor:t.query.cursor,entity:t.query.entity,filters:t.query.filters,page_size:t.query.page_size}})),m=o.computed(()=>JSON.stringify({refreshCounter:t.refreshCounter,query:{columns:t.query.columns,datasource:t.query.datasource,entity:t.query.entity,filters:t.query.filters,page_size:t.query.page_size},context:{filters:t.context.filters,timeSpec:t.context.timeSpec,tz:t.context.tz}}));o.onUnmounted(()=>{a.abort()});const g=o.computed(()=>Ts[t.query.datasource]({columns:t.query.columns?.length?t.query.columns:u.value,translate:y=>l.t(y),canTranslate:y=>l.te(y)})),p=o.computed(()=>async({cursor:y,pageSize:k})=>{try{await n.isReady();const E=Ss[h.value.datasource];if(!E)throw new Error(`No table data grid fetcher found for datasource: ${h.value.datasource}`);const w=await E({abortController:a,context:t.context,cursor:y,pageSize:k,query:h.value,onResponseColumns:M=>{u.value=M},stripUnknownFilters:n.stripUnknownFilters,tabularQueryFn:s?.tabularQueryFn});return c.value=!1,w}catch(E){throw c.value=!0,E}}),b=y=>{y.state==="error"&&(c.value=!0),i("loading-change",y.state==="loading")};return(y,k)=>{const E=o.resolveComponent("KSkeleton");return o.openBlock(),o.createElementBlock("div",{class:"table-data-grid-renderer",style:o.normalizeStyle(d.value)},[r.queryReady?(o.openBlock(),o.createBlock(o.unref(Bt.TableDataGrid),{key:1,error:c.value,fetcher:p.value,headers:g.value,"page-size":r.query.page_size,"refresh-key":m.value,onState:b},null,8,["error","fetcher","headers","page-size","refresh-key"])):(o.openBlock(),o.createBlock(E,{key:0,"data-testid":"table-skeleton",type:"table"}))],4)}}}),[["__scopeId","data-v-c49ff2eb"]]),Rt="#6c7489",Ns="12px",Tt="20px",St="32px",Dt="20px",Os=o.defineComponent({__name:"DonutChartRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},setup(r){return(e,t)=>(o.openBlock(),o.createBlock(He,{"chart-options":r.chartOptions,context:r.context,height:r.height,query:r.query,"query-ready":r.queryReady,"refresh-counter":r.refreshCounter},null,8,["chart-options","context","height","query","query-ready","refresh-counter"]))}}),zs=["data-testid"],Ms={key:0,class:"tile-header"},Ls={class:"badge-container"},qs={class:"badge-text"},As={key:0},Ps=["data-testid"],Hs=["data-testid"],Bs={class:"delete-option"},Is=["data-testid"],Fs=["data-testid"],Nt=ae(o.defineComponent({__name:"DashboardTile",props:o.mergeModels({context:{},definition:{},height:{default:fe},isFullscreen:{type:Boolean},hideActions:{type:Boolean,default:!1},hideZoomActions:{type:Boolean,default:!1},queryReady:{type:Boolean},showRefresh:{type:Boolean,default:!1},tileId:{},tileType:{default:"chart"}},{refreshCounter:{default:0},refreshCounterModifiers:{}}),emits:o.mergeModels(["chart-data","tile-loaded","edit-tile","duplicate-tile","remove-tile","tile-time-range-zoom","tile-bounds-change"],["update:refreshCounter"]),setup(r,{expose:e,emit:t}){o.useCssVars(C=>({v6ce74284:`${C.height}px`}));const i=parseInt(Dt,10),s=r,n=o.useModel(r,"refreshCounter"),l=()=>{E.value=!0,n.value++},a=t,u=o.defineAsyncComponent(()=>Promise.resolve().then(()=>on)),c=o.inject(X),d=ne.useDatasourceConfigStore(),{stripUnknownFilters:h}=be(d),{i18n:m}=W.useI18n(),g=o.ref(),p=o.ref({status:"loading"}),b=o.ref(!1),y=o.ref(),k=o.ref(!1),E=o.ref(!0),w=o.computed(()=>s.definition.chart),M=o.computed(()=>"chart_title"in w.value?w.value.chart_title:void 0),T=o.computed(()=>"description"in w.value?w.value.description:void 0),Y=o.computed(()=>w.value.type==="slottable"),te=o.computed(()=>G(s.definition)?!1:!("allow_csv_export"in w.value)||w.value.allow_csv_export!==!1),{exploreLinkKebabMenu:ee,requestsLinkKebabMenu:K,canShowKebabMenu:x,canGenerateRequestsLink:q,canGenerateExploreLink:L,requestsLinkZoomActions:F,exploreLinkZoomActions:ie,buildExploreQuery:j,buildExploreLink:ge,buildRequestLink:R,buildRequestsQueryZoomActions:S}=W.useContextLinks({queryBridge:c,chartData:o.readonly(g),definition:o.toRef(s,"definition"),context:o.readonly(o.toRef(s,"context"))}),{issueQuery:A}=W.useIssueQuery();o.watch(()=>s.definition,async(C,O)=>{await o.nextTick(),y.value&&(k.value=y.value.scrollWidth>y.value.clientWidth);try{JSON.stringify(C?.query)!==JSON.stringify(O?.query)&&(E.value=!0)}catch{}},{immediate:!0,deep:!0});const z=o.computed(()=>m.t("csvExport.defaultFilename")),P=o.computed(()=>!!ee.value||te.value||s.context.editable),Q=o.computed(()=>!s.hideActions&&x.value&&P.value),se=o.computed(()=>Q.value&&P.value&&!s.isFullscreen),Fe=o.computed(()=>w.value.type==="golden_signals"&&!!T.value),Le={timeseries_line:Et,timeseries_bar:Et,horizontal_bar:vt,vertical_bar:vt,gauge:_t,donut:Os,golden_signals:vs,top_n:ks,table:Ds,slottable:void 0,single_value:_t,choropleth_map:u},an=o.computed(()=>({...de.value?.rendererEvents.supportsRequests?{"select-chart-range":vn}:{},...de.value?.rendererEvents.supportsZoom?{"zoom-time-range":wn}:{},...de.value?.rendererEvents.supportsBounds?{"bounds-change":_n}:{},...de.value?.rendererEvents.supportsLoadingChange?{"loading-change":pn}:{}})),de=o.computed(()=>{const C=s.definition,O=Le[C.chart.type],B=G(C),ue=!!O?.emits?.includes("select-chart-range"),pe=!!O?.emits?.includes("zoom-time-range"),he=C.chart.type==="choropleth_map",$e=!!O?.emits?.includes("loading-change"),En={query:C.query,context:s.context,queryReady:s.queryReady,height:s.height-i*2,refreshCounter:n.value},xn={chartOptions:C.chart,requestsLink:s.hideZoomActions?void 0:F.value,exploreLink:s.hideZoomActions?void 0:ie.value};return O&&{component:O,rendererProps:{...En,...B?{}:xn},rendererEvents:{supportsRequests:ue,supportsZoom:pe,supportsBounds:he,supportsLoadingChange:$e}}}),We=o.computed(()=>{if(G(s.definition))return null;const C=s.definition.query,O=C?.time_range;if(I.isPlatformDatasource(C?.datasource)&&!C.dimensions?.includes("time"))return m.t("renderer.as_of_today");if(O?.type==="relative"){const B=I.TimePeriods.get(I.TIMEFRAME_LOOKUP[O.time_range]);return B?B.display:(console.warn("Did not recognize the given relative time range:",O.time_range),O.time_range)}else if(O?.type==="absolute"){const B=O.tz||"Etc/UTC";return`${I.formatTime(O.start,{short:!0,tz:B})} - ${I.formatTime(O.end,{short:!0,tz:B})}`}return null}),qt=o.computed(()=>Y.value?!1:[!!M.value,se.value,!!We.value,Fe.value,s.showRefresh].some(Boolean)),At=o.computed(()=>g.value?I.msToGranularity(g.value.meta.granularity_ms):void 0),ln=o.computed(()=>["timeseries_line","timeseries_bar"].includes(w.value.type)),Pt=o.computed(()=>{if(G(s.definition)||!ln.value||!s.queryReady||E.value)return!1;const C=s.definition.query.granularity;return!C||!At.value?!1:C!==At.value}),cn=o.computed(()=>{const C=I.msToGranularity(g.value?.meta.granularity_ms??0)??"unknown",O=G(s.definition)?"unknown":s.definition.query.granularity??"unknown";return m.t("query_aged_out_warning",{currentGranularity:m.t(`granularities.${C}`),savedGranularity:m.t(`granularities.${O}`)})}),dn=o.computed(()=>{const C=s.definition,O=[...s.context.filters,...C.query.filters??[]],B="metrics"in C.query?C.query.metrics:void 0,ue=C.query.datasource??"api_usage";return h.value({datasource:ue,filters:O,queryFields:B})}),un=()=>{a("edit-tile",s.definition)},hn=()=>{a("duplicate-tile",s.definition)},fn=()=>{a("remove-tile",s.definition)},mn=C=>{g.value=C,E.value=!1,a("chart-data",C),a("tile-loaded")},gn=()=>{E.value=!1,a("tile-loaded")},pn=C=>{E.value=C,C||a("tile-loaded")},yn=()=>{b.value=!1},Ht=()=>{const C=s.definition.query.datasource?.startsWith("goap");return c?.staticConfig?.increaseCsvExportLimit!==!1&&!C?A(s.definition.query,s.context,I.EXPORT_RECORD_LIMIT):g.value?Promise.resolve(g.value):new Promise(B=>{const ue=o.watch(g,pe=>{pe&&(B(pe),ue())})})},bn=async()=>{b.value=!0,p.value={status:"loading"};try{const C=await Ht();p.value={status:"success",chartData:C}}catch(C){p.value={status:"error",error:C}}},wn=C=>{const O={tileId:s.tileId.toString(),timeRange:C};a("tile-time-range-zoom",O)},_n=C=>{const O={tileId:s.tileId.toString(),bounds:C};a("tile-bounds-change",O)},vn=C=>{const O=dn.value,B=j(C,O);ie.value=L.value?{href:ge(B)}:void 0,F.value=q.value?{href:R(S(C,O))}:void 0};return e({getExportData:Ht}),(C,O)=>{const B=o.resolveComponent("KTooltip"),ue=o.resolveComponent("KBadge"),pe=o.resolveComponent("KButton"),he=o.resolveComponent("KDropdownItem"),$e=o.resolveComponent("KDropdown");return o.openBlock(),o.createElementBlock("div",{class:o.normalizeClass(["tile-boundary",{editable:r.context.editable,headless:!qt.value}]),"data-testid":`tile-${r.tileId}`},[qt.value&&!Y.value?(o.openBlock(),o.createElementBlock("div",Ms,[o.createVNode(B,{class:"title-tooltip",disabled:!k.value,"max-width":"500",text:M.value},{default:o.withCtx(()=>[o.createElementVNode("div",{ref_key:"titleRef",ref:y,class:"title"},o.toDisplayString(M.value),513)]),_:1},8,["disabled","text"]),o.createElementVNode("div",Ls,[We.value?(o.openBlock(),o.createBlock(ue,{key:0,"data-testid":"time-range-badge",tooltip:Pt.value?cn.value:void 0,"tooltip-attributes":{maxWidth:"320px"}},o.createSlots({default:o.withCtx(()=>[o.createElementVNode("span",qs,o.toDisplayString(We.value),1)]),_:2},[Pt.value?{name:"icon",fn:o.withCtx(()=>[o.createVNode(o.unref(le.WarningIcon),{size:`var(--kui-icon-size-20, ${o.unref(Ns)})`},null,8,["size"])]),key:"0"}:void 0]),1032,["tooltip"])):o.createCommentVNode("",!0)]),r.showRefresh?(o.openBlock(),o.createElementBlock("div",As,[o.createVNode(pe,{appearance:"secondary",class:"refresh-button","data-testid":`tile-refresh-button-${r.tileId}`,disabled:E.value,icon:"",size:"small",onClick:l},{default:o.withCtx(()=>[E.value?(o.openBlock(),o.createBlock(o.unref(le.ProgressIcon),{key:0,role:"button",size:`var(--kui-icon-size-60, ${o.unref(St)})`,tabindex:"0"},null,8,["size"])):(o.openBlock(),o.createBlock(o.unref(le.RefreshIcon),{key:1,role:"button",size:`var(--kui-icon-size-60, ${o.unref(St)})`,tabindex:"0"},null,8,["size"]))]),_:1},8,["data-testid","disabled"])])):o.createCommentVNode("",!0),Q.value?(o.openBlock(),o.createElementBlock("div",{key:1,class:"tile-actions","data-testid":`tile-actions-${r.tileId}`},[Q.value&&r.context.editable&&!r.isFullscreen?(o.openBlock(),o.createBlock(o.unref(le.EditIcon),{key:0,class:"edit-icon",color:`var(--kui-color-text-neutral, ${o.unref(Rt)})`,"data-testid":`edit-tile-${r.tileId}`,size:`var(--kui-icon-size-40, ${o.unref(Tt)})`,onClick:un},null,8,["color","data-testid","size"])):o.createCommentVNode("",!0),Q.value&&P.value&&!r.isFullscreen?(o.openBlock(),o.createBlock($e,{key:1,class:"dropdown","data-testid":`chart-action-menu-${r.tileId}`,"kpop-attributes":{placement:"bottom-end"}},{items:o.withCtx(()=>[o.unref(ee)?(o.openBlock(),o.createBlock(he,{key:0,"data-testid":`chart-jump-to-explore-${r.tileId}`,item:{label:o.unref(m).t("jumpToExplore"),to:o.unref(ee)}},null,8,["data-testid","item"])):o.createCommentVNode("",!0),!o.unref(G)(r.definition)&&o.unref(K)?(o.openBlock(),o.createBlock(he,{key:1,"data-testid":`chart-jump-to-requests-${r.tileId}`,item:{label:o.unref(m).t("jumpToRequests"),to:o.unref(K)}},null,8,["data-testid","item"])):o.createCommentVNode("",!0),te.value?(o.openBlock(),o.createBlock(he,{key:2,class:"chart-export-button","data-testid":`chart-csv-export-${r.tileId}`,onClick:bn},{default:o.withCtx(()=>[o.createElementVNode("span",{class:"chart-export-trigger","data-testid":`csv-export-button-${r.tileId}`},o.toDisplayString(o.unref(m).t("csvExport.exportAsCsv")),9,Hs)]),_:1},8,["data-testid"])):o.createCommentVNode("",!0),r.context.editable?(o.openBlock(),o.createBlock(he,{key:3,"data-testid":`duplicate-tile-${r.tileId}`,onClick:hn},{default:o.withCtx(()=>[o.createTextVNode(o.toDisplayString(o.unref(m).t("renderer.duplicateTile")),1)]),_:1},8,["data-testid"])):o.createCommentVNode("",!0),r.context.editable?(o.openBlock(),o.createBlock(he,{key:4,"data-testid":`remove-tile-${r.tileId}`,onClick:fn},{default:o.withCtx(()=>[o.createElementVNode("span",Bs,o.toDisplayString(o.unref(m).t("renderer.delete")),1)]),_:1},8,["data-testid"])):o.createCommentVNode("",!0)]),default:o.withCtx(()=>[o.createVNode(o.unref(le.MoreIcon),{class:"kebab-action-menu",color:`var(--kui-color-text-neutral, ${o.unref(Rt)})`,"data-testid":`kebab-action-menu-${r.tileId}`,size:`var(--kui-icon-size-40, ${o.unref(Tt)})`},null,8,["color","data-testid","size"])]),_:1},8,["data-testid"])):o.createCommentVNode("",!0)],8,Ps)):T.value?(o.openBlock(),o.createElementBlock("div",{key:2,class:"header-description","data-testid":`tile-description-${r.tileId}`},o.toDisplayString(T.value),9,Is)):o.createCommentVNode("",!0),b.value?(o.openBlock(),o.createBlock(o.unref(ye.CsvExportModal),{key:3,"data-testid":`csv-export-modal-${r.tileId}`,"export-state":p.value,filename:z.value,onCloseModal:yn},null,8,["data-testid","export-state","filename"])):o.createCommentVNode("",!0)])):o.createCommentVNode("",!0),o.createElementVNode("div",{class:o.normalizeClass(["tile-content",`type-${r.tileType}-${w.value.type}`]),"data-testid":`tile-content-${r.tileId}`},[de.value?(o.openBlock(),o.createBlock(o.resolveDynamicComponent(de.value.component),o.mergeProps({key:0},de.value.rendererProps,o.toHandlers(an.value),{onChartData:mn,onQueryComplete:gn}),null,16)):o.createCommentVNode("",!0)],10,Fs)],10,zs)}}}),[["__scopeId","data-v-fb1aa747"]]),Ws=(r,e)=>{let t=0;const i=new Map;e.forEach(n=>{const l=n.layout.position.row,a=i.get(l),u=n.layout.size.rows===1&&!!n.layout.size.fit_to_content;t=Math.max(t,l+n.layout.size.rows),a===void 0?i.set(l,u):i.set(l,a&&u)});const s=[];for(let n=0;n<t;n++)i.get(n)?s.push("auto"):s.push(`${r}px`);return s},Ot=ae(o.defineComponent({__name:"GridLayout",props:{tileHeight:{type:Number,required:!1,default:()=>fe},columns:{type:Number,required:!1,default:()=>Ce},tiles:{type:Array,required:!0}},setup(r){o.useCssVars(a=>({v821fda82:e.columns,v0870d42d:n.value}));const e=r,t=o.ref(null),i=o.ref(0),s=new ResizeObserver(a=>{window.requestAnimationFrame(()=>{!Array.isArray(a)||!a.length||(i.value=a[0].contentRect.width)})});o.onMounted(()=>{t.value&&s.observe(t.value)}),o.onUnmounted(()=>{t.value&&s.unobserve(t.value)});const n=o.computed(()=>Ws(e.tileHeight,e.tiles).join(" ")),l=o.computed(()=>e.tiles.map((a,u)=>({key:`tile-${u}`,tile:a,style:{"grid-column-start":a.layout.position.col+1,"grid-column-end":a.layout.position.col+1+a.layout.size.cols,"grid-row-start":a.layout.position.row+1,"grid-row-end":a.layout.position.row+1+a.layout.size.rows}})));return(a,u)=>(o.openBlock(),o.createElementBlock("div",{ref_key:"gridContainer",ref:t,class:"kong-ui-public-grid-layout"},[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(l.value,c=>(o.openBlock(),o.createElementBlock("div",{key:c.key,class:o.normalizeClass(["grid-cell",{"empty-cell":!c.tile}]),style:o.normalizeStyle(c.style)},[o.renderSlot(a.$slots,"tile",{style:o.normalizeStyle(c.style),tile:c.tile},void 0,!0)],6))),128))],512))}}),[["__scopeId","data-v-0271a8b9"]]);function $s(r,e,t,i,s){const n=(...l)=>(console.warn("gridstack.js: Function `"+t+"` is deprecated in "+s+" and has been replaced with `"+i+"`. It will be **removed** in a future release"),e.apply(r,l));return n.prototype=e.prototype,n}class f{static getElements(e,t=document){if(typeof e=="string"){const i="getElementById"in t?t:void 0;if(i&&!isNaN(+e[0])){const n=i.getElementById(e);return n?[n]:[]}let s=t.querySelectorAll(e);return!s.length&&e[0]!=="."&&e[0]!=="#"&&(s=t.querySelectorAll("."+e),s.length||(s=t.querySelectorAll("#"+e))),Array.from(s)}return[e]}static getElement(e,t=document){if(typeof e=="string"){const i="getElementById"in t?t:void 0;if(!e.length)return null;if(i&&e[0]==="#")return i.getElementById(e.substring(1));if(e[0]==="#"||e[0]==="."||e[0]==="[")return t.querySelector(e);if(i&&!isNaN(+e[0]))return i.getElementById(e);let s=t.querySelector(e);return i&&!s&&(s=i.getElementById(e)),s||(s=t.querySelector("."+e)),s}return e}static lazyLoad(e){return e.lazyLoad||e.grid?.opts?.lazyLoad&&e.lazyLoad!==!1}static createDiv(e,t){const i=document.createElement("div");return e.forEach(s=>{s&&i.classList.add(s)}),t?.appendChild(i),i}static shouldSizeToContent(e,t=!1){return e?.grid&&(t?e.sizeToContent===!0||e.grid.opts.sizeToContent===!0&&e.sizeToContent===void 0:!!e.sizeToContent||e.grid.opts.sizeToContent&&e.sizeToContent!==!1)}static isIntercepted(e,t){return!(e.y>=t.y+t.h||e.y+e.h<=t.y||e.x+e.w<=t.x||e.x>=t.x+t.w)}static isTouching(e,t){return f.isIntercepted(e,{x:t.x-.5,y:t.y-.5,w:t.w+1,h:t.h+1})}static areaIntercept(e,t){const i=e.x>t.x?e.x:t.x,s=e.x+e.w<t.x+t.w?e.x+e.w:t.x+t.w;if(s<=i)return 0;const n=e.y>t.y?e.y:t.y,l=e.y+e.h<t.y+t.h?e.y+e.h:t.y+t.h;return l<=n?0:(s-i)*(l-n)}static area(e){return e.w*e.h}static sort(e,t=1){return e.sort((s,n)=>{const l=t*((s.y??1e4)-(n.y??1e4));return l===0?t*((s.x??1e4)-(n.x??1e4)):l})}static find(e,t){return t?e.find(i=>i.id===t):void 0}static createStylesheet(e,t,i){const s=document.createElement("style"),n=i?.nonce;return n&&(s.nonce=n),s.setAttribute("type","text/css"),s.setAttribute("gs-style-id",e),s.styleSheet?s.styleSheet.cssText="":s.appendChild(document.createTextNode("")),t?t.insertBefore(s,t.firstChild):(t=document.getElementsByTagName("head")[0],t.appendChild(s)),s}static removeStylesheet(e,t){const s=(t||document).querySelector("STYLE[gs-style-id="+e+"]");s&&s.parentNode&&s.remove()}static addCSSRule(e,t,i){e.textContent+=`${t} { ${i} } `}static toBool(e){return typeof e=="boolean"?e:typeof e=="string"?(e=e.toLowerCase(),!(e===""||e==="no"||e==="false"||e==="0")):!!e}static toNumber(e){return e===null||e.length===0?void 0:Number(e)}static parseHeight(e){let t,i="px";if(typeof e=="string")if(e==="auto"||e==="")t=0;else{const s=e.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw|%|cm|mm)?$/);if(!s)throw new Error(`Invalid height val = ${e}`);i=s[2]||"px",t=parseFloat(s[1])}else t=e;return{h:t,unit:i}}static defaults(e,...t){return t.forEach(i=>{for(const s in i){if(!i.hasOwnProperty(s))return;e[s]===null||e[s]===void 0?e[s]=i[s]:typeof i[s]=="object"&&typeof e[s]=="object"&&this.defaults(e[s],i[s])}}),e}static same(e,t){if(typeof e!="object")return e==t;if(typeof e!=typeof t||Object.keys(e).length!==Object.keys(t).length)return!1;for(const i in e)if(e[i]!==t[i])return!1;return!0}static copyPos(e,t,i=!1){return t.x!==void 0&&(e.x=t.x),t.y!==void 0&&(e.y=t.y),t.w!==void 0&&(e.w=t.w),t.h!==void 0&&(e.h=t.h),i&&(t.minW&&(e.minW=t.minW),t.minH&&(e.minH=t.minH),t.maxW&&(e.maxW=t.maxW),t.maxH&&(e.maxH=t.maxH)),e}static samePos(e,t){return e&&t&&e.x===t.x&&e.y===t.y&&(e.w||1)===(t.w||1)&&(e.h||1)===(t.h||1)}static sanitizeMinMax(e){e.minW||delete e.minW,e.minH||delete e.minH,e.maxW||delete e.maxW,e.maxH||delete e.maxH}static removeInternalAndSame(e,t){if(!(typeof e!="object"||typeof t!="object"))for(let i in e){const s=e[i],n=t[i];i[0]==="_"||s===n?delete e[i]:s&&typeof s=="object"&&n!==void 0&&(f.removeInternalAndSame(s,n),Object.keys(s).length||delete e[i])}}static removeInternalForSave(e,t=!0){for(let i in e)(i[0]==="_"||e[i]===null||e[i]===void 0)&&delete e[i];delete e.grid,t&&delete e.el,e.autoPosition||delete e.autoPosition,e.noResize||delete e.noResize,e.noMove||delete e.noMove,e.locked||delete e.locked,(e.w===1||e.w===e.minW)&&delete e.w,(e.h===1||e.h===e.minH)&&delete e.h}static throttle(e,t){let i=!1;return(...s)=>{i||(i=!0,setTimeout(()=>{e(...s),i=!1},t))}}static removePositioningStyles(e){const t=e.style;t.position&&t.removeProperty("position"),t.left&&t.removeProperty("left"),t.top&&t.removeProperty("top"),t.width&&t.removeProperty("width"),t.height&&t.removeProperty("height")}static getScrollElement(e){if(!e)return document.scrollingElement||document.documentElement;const t=getComputedStyle(e);return/(auto|scroll)/.test(t.overflow+t.overflowY)?e:this.getScrollElement(e.parentElement)}static updateScrollPosition(e,t,i){const s=e.getBoundingClientRect(),n=window.innerHeight||document.documentElement.clientHeight;if(s.top<0||s.bottom>n){const l=s.bottom-n,a=s.top,u=this.getScrollElement(e);if(u!==null){const c=u.scrollTop;s.top<0&&i<0?e.offsetHeight>n?u.scrollTop+=i:u.scrollTop+=Math.abs(a)>Math.abs(i)?i:a:i>0&&(e.offsetHeight>n?u.scrollTop+=i:u.scrollTop+=l>i?i:l),t.top+=u.scrollTop-c}}}static updateScrollResize(e,t,i){const s=this.getScrollElement(t),n=s.clientHeight,l=s===this.getScrollElement()?0:s.getBoundingClientRect().top,a=e.clientY-l,u=a<i,c=a>n-i;u?s.scrollBy({behavior:"smooth",top:a-i}):c&&s.scrollBy({behavior:"smooth",top:i-(n-a)})}static clone(e){return e==null||typeof e!="object"?e:e instanceof Array?[...e]:{...e}}static cloneDeep(e){const t=["parentGrid","el","grid","subGrid","engine"],i=f.clone(e);for(const s in i)i.hasOwnProperty(s)&&typeof i[s]=="object"&&s.substring(0,2)!=="__"&&!t.find(n=>n===s)&&(i[s]=f.cloneDeep(e[s]));return i}static cloneNode(e){const t=e.cloneNode(!0);return t.removeAttribute("id"),t}static appendTo(e,t){let i;typeof t=="string"?i=f.getElement(t):i=t,i&&i.appendChild(e)}static addElStyles(e,t){if(t instanceof Object)for(const i in t)t.hasOwnProperty(i)&&(Array.isArray(t[i])?t[i].forEach(s=>{e.style[i]=s}):e.style[i]=t[i])}static initEvent(e,t){const i={type:t.type},s={button:0,which:0,buttons:1,bubbles:!0,cancelable:!0,target:t.target?t.target:e.target};return["altKey","ctrlKey","metaKey","shiftKey"].forEach(n=>i[n]=e[n]),["pageX","pageY","clientX","clientY","screenX","screenY"].forEach(n=>i[n]=e[n]),{...i,...s}}static simulateMouseEvent(e,t,i){const s=e,n=new MouseEvent(t,{bubbles:!0,composed:!0,cancelable:!0,view:window,detail:1,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY,ctrlKey:s.ctrlKey??!1,altKey:s.altKey??!1,shiftKey:s.shiftKey??!1,metaKey:s.metaKey??!1,button:0,relatedTarget:e.target});(i||e.target).dispatchEvent(n)}static getValuesFromTransformedElement(e){const t=document.createElement("div");f.addElStyles(t,{opacity:"0",position:"fixed",top:"0px",left:"0px",width:"1px",height:"1px",zIndex:"-999999"}),e.appendChild(t);const i=t.getBoundingClientRect();return e.removeChild(t),t.remove(),{xScale:1/i.width,yScale:1/i.height,xOffset:i.left,yOffset:i.top}}static swap(e,t,i){if(!e)return;const s=e[t];e[t]=e[i],e[i]=s}static canBeRotated(e){return!(!e||e.w===e.h||e.locked||e.noResize||e.grid?.opts.disableResize||e.minW&&e.minW===e.maxW||e.minH&&e.minH===e.maxH)}}class Z{constructor(e={}){this.addedNodes=[],this.removedNodes=[],this.defaultColumn=12,this.column=e.column||this.defaultColumn,this.column>this.defaultColumn&&(this.defaultColumn=this.column),this.maxRow=e.maxRow,this._float=e.float,this.nodes=e.nodes||[],this.onChange=e.onChange}batchUpdate(e=!0,t=!0){return!!this.batchMode===e?this:(this.batchMode=e,e?(this._prevFloat=this._float,this._float=!0,this.cleanNodes(),this.saveInitial()):(this._float=this._prevFloat,delete this._prevFloat,t&&this._packNodes(),this._notify()),this)}_useEntireRowArea(e,t){return(!this.float||this.batchMode&&!this._prevFloat)&&!this._hasLocked&&(!e._moving||e._skipDown||t.y<=e.y)}_fixCollisions(e,t=e,i,s={}){if(this.sortNodes(-1),i=i||this.collide(e,t),!i)return!1;if(e._moving&&!s.nested&&!this.float&&this.swap(e,i))return!0;let n=t;!this._loading&&this._useEntireRowArea(e,t)&&(n={x:0,w:this.column,y:t.y,h:t.h},i=this.collide(e,n,s.skip));let l=!1;const a={nested:!0,pack:!1};let u=0;for(;i=i||this.collide(e,n,s.skip);){if(u++>this.nodes.length*2)throw new Error("Infinite collide check");let c;if(i.locked||this._loading||e._moving&&!e._skipDown&&t.y>e.y&&!this.float&&(!this.collide(i,{...i,y:e.y},e)||!this.collide(i,{...i,y:t.y-i.h},e))){e._skipDown=e._skipDown||t.y>e.y;const d={...t,y:i.y+i.h,...a};c=this._loading&&f.samePos(e,d)?!0:this.moveNode(e,d),(i.locked||this._loading)&&c?f.copyPos(t,e):!i.locked&&c&&s.pack&&(this._packNodes(),t.y=i.y+i.h,f.copyPos(e,t)),l=l||c}else c=this.moveNode(i,{...i,y:t.y+t.h,skip:e,...a});if(!c)return l;i=void 0}return l}collide(e,t=e,i){const s=e._id,n=i?._id;return this.nodes.find(l=>l._id!==s&&l._id!==n&&f.isIntercepted(l,t))}collideAll(e,t=e,i){const s=e._id,n=i?._id;return this.nodes.filter(l=>l._id!==s&&l._id!==n&&f.isIntercepted(l,t))}directionCollideCoverage(e,t,i){if(!t.rect||!e._rect)return;const s=e._rect,n={...t.rect};n.y>s.y?(n.h+=n.y-s.y,n.y=s.y):n.h+=s.y-n.y,n.x>s.x?(n.w+=n.x-s.x,n.x=s.x):n.w+=s.x-n.x;let l,a=.5;for(let u of i){if(u.locked||!u._rect)break;const c=u._rect;let d=Number.MAX_VALUE,h=Number.MAX_VALUE;s.y<c.y?d=(n.y+n.h-c.y)/c.h:s.y+s.h>c.y+c.h&&(d=(c.y+c.h-n.y)/c.h),s.x<c.x?h=(n.x+n.w-c.x)/c.w:s.x+s.w>c.x+c.w&&(h=(c.x+c.w-n.x)/c.w);const m=Math.min(h,d);m>a&&(a=m,l=u)}return t.collide=l,l}cacheRects(e,t,i,s,n,l){return this.nodes.forEach(a=>a._rect={y:a.y*t+i,x:a.x*e+l,w:a.w*e-l-s,h:a.h*t-i-n}),this}swap(e,t){if(!t||t.locked||!e||e.locked)return!1;function i(){const n=t.x,l=t.y;return t.x=e.x,t.y=e.y,e.h!=t.h?(e.x=n,e.y=t.y+t.h):e.w!=t.w?(e.x=t.x+t.w,e.y=l):(e.x=n,e.y=l),e._dirty=t._dirty=!0,!0}let s;if(e.w===t.w&&e.h===t.h&&(e.x===t.x||e.y===t.y)&&(s=f.isTouching(e,t)))return i();if(s!==!1){if(e.w===t.w&&e.x===t.x&&(s||(s=f.isTouching(e,t)))){if(t.y<e.y){const n=e;e=t,t=n}return i()}if(s!==!1){if(e.h===t.h&&e.y===t.y&&(s||(s=f.isTouching(e,t)))){if(t.x<e.x){const n=e;e=t,t=n}return i()}return!1}}}isAreaEmpty(e,t,i,s){const n={x:e||0,y:t||0,w:i||1,h:s||1};return!this.collide(n)}compact(e="compact",t=!0){if(this.nodes.length===0)return this;t&&this.sortNodes();const i=this.batchMode;i||this.batchUpdate();const s=this._inColumnResize;s||(this._inColumnResize=!0);const n=this.nodes;return this.nodes=[],n.forEach((l,a,u)=>{let c;l.locked||(l.autoPosition=!0,e==="list"&&a&&(c=u[a-1])),this.addNode(l,!1,c)}),s||delete this._inColumnResize,i||this.batchUpdate(!1),this}set float(e){this._float!==e&&(this._float=e||!1,e||this._packNodes()._notify())}get float(){return this._float||!1}sortNodes(e=1){return this.nodes=f.sort(this.nodes,e),this}_packNodes(){return this.batchMode?this:(this.sortNodes(),this.float?this.nodes.forEach(e=>{if(e._updating||e._orig===void 0||e.y===e._orig.y)return;let t=e.y;for(;t>e._orig.y;)--t,this.collide(e,{x:e.x,y:t,w:e.w,h:e.h})||(e._dirty=!0,e.y=t)}):this.nodes.forEach((e,t)=>{if(!e.locked)for(;e.y>0;){const i=t===0?0:e.y-1;if(!(t===0||!this.collide(e,{x:e.x,y:i,w:e.w,h:e.h})))break;e._dirty=e.y!==i,e.y=i}}),this)}prepareNode(e,t){e._id=e._id??Z._idSeq++;const i=e.id;if(i){let n=1;for(;this.nodes.find(l=>l.id===e.id&&l!==e);)e.id=i+"_"+n++}(e.x===void 0||e.y===void 0||e.x===null||e.y===null)&&(e.autoPosition=!0);const s={x:0,y:0,w:1,h:1};return f.defaults(e,s),e.autoPosition||delete e.autoPosition,e.noResize||delete e.noResize,e.noMove||delete e.noMove,f.sanitizeMinMax(e),typeof e.x=="string"&&(e.x=Number(e.x)),typeof e.y=="string"&&(e.y=Number(e.y)),typeof e.w=="string"&&(e.w=Number(e.w)),typeof e.h=="string"&&(e.h=Number(e.h)),isNaN(e.x)&&(e.x=s.x,e.autoPosition=!0),isNaN(e.y)&&(e.y=s.y,e.autoPosition=!0),isNaN(e.w)&&(e.w=s.w),isNaN(e.h)&&(e.h=s.h),this.nodeBoundFix(e,t),e}nodeBoundFix(e,t){const i=e._orig||f.copyPos({},e);if(e.maxW&&(e.w=Math.min(e.w||1,e.maxW)),e.maxH&&(e.h=Math.min(e.h||1,e.maxH)),e.minW&&(e.w=Math.max(e.w||1,e.minW)),e.minH&&(e.h=Math.max(e.h||1,e.minH)),(e.x||0)+(e.w||1)>this.column&&this.column<this.defaultColumn&&!this._inColumnResize&&!this.skipCacheUpdate&&e._id&&this.findCacheLayout(e,this.defaultColumn)===-1){const n={...e};n.autoPosition||n.x===void 0?(delete n.x,delete n.y):n.x=Math.min(this.defaultColumn-1,n.x),n.w=Math.min(this.defaultColumn,n.w||1),this.cacheOneLayout(n,this.defaultColumn)}return e.w>this.column?e.w=this.column:e.w<1&&(e.w=1),this.maxRow&&e.h>this.maxRow?e.h=this.maxRow:e.h<1&&(e.h=1),e.x<0&&(e.x=0),e.y<0&&(e.y=0),e.x+e.w>this.column&&(t?e.w=this.column-e.x:e.x=this.column-e.w),this.maxRow&&e.y+e.h>this.maxRow&&(t?e.h=this.maxRow-e.y:e.y=this.maxRow-e.h),f.samePos(e,i)||(e._dirty=!0),this}getDirtyNodes(e){return e?this.nodes.filter(t=>t._dirty&&!f.samePos(t,t._orig)):this.nodes.filter(t=>t._dirty)}_notify(e){if(this.batchMode||!this.onChange)return this;const t=(e||[]).concat(this.getDirtyNodes());return this.onChange(t),this}cleanNodes(){return this.batchMode?this:(this.nodes.forEach(e=>{delete e._dirty,delete e._lastTried}),this)}saveInitial(){return this.nodes.forEach(e=>{e._orig=f.copyPos({},e),delete e._dirty}),this._hasLocked=this.nodes.some(e=>e.locked),this}restoreInitial(){return this.nodes.forEach(e=>{!e._orig||f.samePos(e,e._orig)||(f.copyPos(e,e._orig),e._dirty=!0)}),this._notify(),this}findEmptyPosition(e,t=this.nodes,i=this.column,s){const n=s?s.y*i+(s.x+s.w):0;let l=!1;for(let a=n;!l;++a){const u=a%i,c=Math.floor(a/i);if(u+e.w>i)continue;const d={x:u,y:c,w:e.w,h:e.h};t.find(h=>f.isIntercepted(d,h))||((e.x!==u||e.y!==c)&&(e._dirty=!0),e.x=u,e.y=c,delete e.autoPosition,l=!0)}return l}addNode(e,t=!1,i){const s=this.nodes.find(l=>l._id===e._id);if(s)return s;this._inColumnResize?this.nodeBoundFix(e):this.prepareNode(e),delete e._temporaryRemoved,delete e._removeDOM;let n;return e.autoPosition&&this.findEmptyPosition(e,this.nodes,this.column,i)&&(delete e.autoPosition,n=!0),this.nodes.push(e),t&&this.addedNodes.push(e),n||this._fixCollisions(e),this.batchMode||this._packNodes()._notify(),e}removeNode(e,t=!0,i=!1){return this.nodes.find(s=>s._id===e._id)?(i&&this.removedNodes.push(e),t&&(e._removeDOM=!0),this.nodes=this.nodes.filter(s=>s._id!==e._id),e._isAboutToRemove||this._packNodes(),this._notify([e]),this):this}removeAll(e=!0,t=!0){if(delete this._layouts,!this.nodes.length)return this;e&&this.nodes.forEach(s=>s._removeDOM=!0);const i=this.nodes;return this.removedNodes=t?i:[],this.nodes=[],this._notify(i)}moveNodeCheck(e,t){if(!this.changedPosConstrain(e,t))return!1;if(t.pack=!0,!this.maxRow)return this.moveNode(e,t);let i;const s=new Z({column:this.column,float:this.float,nodes:this.nodes.map(l=>l._id===e._id?(i={...l},i):{...l})});if(!i)return!1;const n=s.moveNode(i,t)&&s.getRow()<=Math.max(this.getRow(),this.maxRow);if(!n&&!t.resizing&&t.collide){const l=t.collide.el.gridstackNode;if(this.swap(e,l))return this._notify(),!0}return n?(s.nodes.filter(l=>l._dirty).forEach(l=>{const a=this.nodes.find(u=>u._id===l._id);a&&(f.copyPos(a,l),a._dirty=!0)}),this._notify(),!0):!1}willItFit(e){if(delete e._willFitPos,!this.maxRow)return!0;const t=new Z({column:this.column,float:this.float,nodes:this.nodes.map(s=>({...s}))}),i={...e};return this.cleanupNode(i),delete i.el,delete i._id,delete i.content,delete i.grid,t.addNode(i),t.getRow()<=this.maxRow?(e._willFitPos=f.copyPos({},i),!0):!1}changedPosConstrain(e,t){return t.w=t.w||e.w,t.h=t.h||e.h,e.x!==t.x||e.y!==t.y?!0:(e.maxW&&(t.w=Math.min(t.w,e.maxW)),e.maxH&&(t.h=Math.min(t.h,e.maxH)),e.minW&&(t.w=Math.max(t.w,e.minW)),e.minH&&(t.h=Math.max(t.h,e.minH)),e.w!==t.w||e.h!==t.h)}moveNode(e,t){if(!e||!t)return!1;let i;t.pack===void 0&&!this.batchMode&&(i=t.pack=!0),typeof t.x!="number"&&(t.x=e.x),typeof t.y!="number"&&(t.y=e.y),typeof t.w!="number"&&(t.w=e.w),typeof t.h!="number"&&(t.h=e.h);const s=e.w!==t.w||e.h!==t.h,n=f.copyPos({},e,!0);if(f.copyPos(n,t),this.nodeBoundFix(n,s),f.copyPos(t,n),!t.forceCollide&&f.samePos(e,t))return!1;const l=f.copyPos({},e),a=this.collideAll(e,n,t.skip);let u=!0;if(a.length){const c=e._moving&&!t.nested;let d=c?this.directionCollideCoverage(e,t,a):a[0];if(c&&d&&e.grid?.opts?.subGridDynamic&&!e.grid._isTemp){const h=f.areaIntercept(t.rect,d._rect),m=f.area(t.rect),g=f.area(d._rect);h/(m<g?m:g)>.8&&(d.grid.makeSubGrid(d.el,void 0,e),d=void 0)}d?u=!this._fixCollisions(e,n,d,t):(u=!1,i&&delete t.pack)}return u&&!f.samePos(e,n)&&(e._dirty=!0,f.copyPos(e,n)),t.pack&&this._packNodes()._notify(),!f.samePos(e,l)}getRow(){return this.nodes.reduce((e,t)=>Math.max(e,t.y+t.h),0)}beginUpdate(e){return e._updating||(e._updating=!0,delete e._skipDown,this.batchMode||this.saveInitial()),this}endUpdate(){const e=this.nodes.find(t=>t._updating);return e&&(delete e._updating,delete e._skipDown),this}save(e=!0,t){const i=this._layouts?.length,s=i&&this.column!==i-1?this._layouts[i-1]:null,n=[];return this.sortNodes(),this.nodes.forEach(l=>{const a=s?.find(c=>c._id===l._id),u={...l,...a||{}};f.removeInternalForSave(u,!e),t&&t(l,u),n.push(u)}),n}layoutsNodesChange(e){return!this._layouts||this._inColumnResize?this:(this._layouts.forEach((t,i)=>{if(!t||i===this.column)return this;if(i<this.column)this._layouts[i]=void 0;else{const s=i/this.column;e.forEach(n=>{if(!n._orig)return;const l=t.find(a=>a._id===n._id);l&&(l.y>=0&&n.y!==n._orig.y&&(l.y+=n.y-n._orig.y),n.x!==n._orig.x&&(l.x=Math.round(n.x*s)),n.w!==n._orig.w&&(l.w=Math.round(n.w*s)))})}}),this)}columnChanged(e,t,i="moveScale"){if(!this.nodes.length||!t||e===t)return this;const s=i==="compact"||i==="list";s&&this.sortNodes(1),t<e&&this.cacheLayout(this.nodes,e),this.batchUpdate();let n=[],l=s?this.nodes:f.sort(this.nodes,-1);if(t>e&&this._layouts){const a=this._layouts[t]||[],u=this._layouts.length-1;!a.length&&e!==u&&this._layouts[u]?.length&&(e=u,this._layouts[u].forEach(c=>{const d=l.find(h=>h._id===c._id);d&&(!s&&!c.autoPosition&&(d.x=c.x??d.x,d.y=c.y??d.y),d.w=c.w??d.w,(c.x==null||c.y===void 0)&&(d.autoPosition=!0))})),a.forEach(c=>{const d=l.findIndex(h=>h._id===c._id);if(d!==-1){const h=l[d];if(s){h.w=c.w;return}(c.autoPosition||isNaN(c.x)||isNaN(c.y))&&this.findEmptyPosition(c,n),c.autoPosition||(h.x=c.x??h.x,h.y=c.y??h.y,h.w=c.w??h.w,n.push(h)),l.splice(d,1)}})}if(s)this.compact(i,!1);else{if(l.length)if(typeof i=="function")i(t,e,n,l);else{const a=s||i==="none"?1:t/e,u=i==="move"||i==="moveScale",c=i==="scale"||i==="moveScale";l.forEach(d=>{d.x=t===1?0:u?Math.round(d.x*a):Math.min(d.x,t-1),d.w=t===1||e===1?1:c?Math.round(d.w*a)||1:Math.min(d.w,t),n.push(d)}),l=[]}n=f.sort(n,-1),this._inColumnResize=!0,this.nodes=[],n.forEach(a=>{this.addNode(a,!1),delete a._orig})}return this.nodes.forEach(a=>delete a._orig),this.batchUpdate(!1,!s),delete this._inColumnResize,this}cacheLayout(e,t,i=!1){const s=[];return e.forEach((n,l)=>{if(n._id===void 0){const a=n.id?this.nodes.find(u=>u.id===n.id):void 0;n._id=a?._id??Z._idSeq++}s[l]={x:n.x,y:n.y,w:n.w,_id:n._id}}),this._layouts=i?[]:this._layouts||[],this._layouts[t]=s,this}cacheOneLayout(e,t){e._id=e._id??Z._idSeq++;const i={x:e.x,y:e.y,w:e.w,_id:e._id};(e.autoPosition||e.x===void 0)&&(delete i.x,delete i.y,e.autoPosition&&(i.autoPosition=!0)),this._layouts=this._layouts||[],this._layouts[t]=this._layouts[t]||[];const s=this.findCacheLayout(e,t);return s===-1?this._layouts[t].push(i):this._layouts[t][s]=i,this}findCacheLayout(e,t){return this._layouts?.[t]?.findIndex(i=>i._id===e._id)??-1}removeNodeFromLayoutCache(e){if(this._layouts)for(let t=0;t<this._layouts.length;t++){const i=this.findCacheLayout(e,t);i!==-1&&this._layouts[t].splice(i,1)}}cleanupNode(e){for(const t in e)t[0]==="_"&&t!=="_id"&&delete e[t];return this}}Z._idSeq=0;const $={alwaysShowResizeHandle:"mobile",animate:!0,auto:!0,cellHeight:"auto",cellHeightThrottle:100,cellHeightUnit:"px",column:12,draggable:{handle:".grid-stack-item-content",appendTo:"body",scroll:!0},handle:".grid-stack-item-content",itemClass:"grid-stack-item",margin:10,marginUnit:"px",maxRow:0,minRow:0,placeholderClass:"grid-stack-placeholder",placeholderText:"",removableOptions:{accept:"grid-stack-item",decline:"grid-stack-non-removable"},resizable:{handles:"se"},rtl:"auto"};class v{}const V=typeof window<"u"&&typeof document<"u"&&("ontouchstart"in document||"ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0);class J{}function Se(r,e){r.touches.length>1||(r.cancelable&&r.preventDefault(),f.simulateMouseEvent(r.changedTouches[0],e))}function zt(r,e){r.cancelable&&r.preventDefault(),f.simulateMouseEvent(r,e)}function De(r){J.touchHandled||(J.touchHandled=!0,Se(r,"mousedown"))}function Ne(r){J.touchHandled&&Se(r,"mousemove")}function Oe(r){if(!J.touchHandled)return;J.pointerLeaveTimeout&&(window.clearTimeout(J.pointerLeaveTimeout),delete J.pointerLeaveTimeout);const e=!!v.dragElement;Se(r,"mouseup"),e||Se(r,"click"),J.touchHandled=!1}function ze(r){r.pointerType!=="mouse"&&r.target.releasePointerCapture(r.pointerId)}function Mt(r){v.dragElement&&r.pointerType!=="mouse"&&zt(r,"mouseenter")}function Lt(r){v.dragElement&&r.pointerType!=="mouse"&&(J.pointerLeaveTimeout=window.setTimeout(()=>{delete J.pointerLeaveTimeout,zt(r,"mouseleave")},10))}class Me{constructor(e,t,i){this.host=e,this.dir=t,this.option=i,this.moving=!1,this._mouseDown=this._mouseDown.bind(this),this._mouseMove=this._mouseMove.bind(this),this._mouseUp=this._mouseUp.bind(this),this._keyEvent=this._keyEvent.bind(this),this._init()}_init(){const e=this.el=document.createElement("div");return e.classList.add("ui-resizable-handle"),e.classList.add(`${Me.prefix}${this.dir}`),e.style.zIndex="100",e.style.userSelect="none",this.host.appendChild(this.el),this.el.addEventListener("mousedown",this._mouseDown),V&&(this.el.addEventListener("touchstart",De),this.el.addEventListener("pointerdown",ze)),this}destroy(){return this.moving&&this._mouseUp(this.mouseDownEvent),this.el.removeEventListener("mousedown",this._mouseDown),V&&(this.el.removeEventListener("touchstart",De),this.el.removeEventListener("pointerdown",ze)),this.host.removeChild(this.el),delete this.el,delete this.host,this}_mouseDown(e){this.mouseDownEvent=e,document.addEventListener("mousemove",this._mouseMove,{capture:!0,passive:!0}),document.addEventListener("mouseup",this._mouseUp,!0),V&&(this.el.addEventListener("touchmove",Ne),this.el.addEventListener("touchend",Oe)),e.stopPropagation(),e.preventDefault()}_mouseMove(e){const t=this.mouseDownEvent;this.moving?this._triggerEvent("move",e):Math.abs(e.x-t.x)+Math.abs(e.y-t.y)>2&&(this.moving=!0,this._triggerEvent("start",this.mouseDownEvent),this._triggerEvent("move",e),document.addEventListener("keydown",this._keyEvent)),e.stopPropagation()}_mouseUp(e){this.moving&&(this._triggerEvent("stop",e),document.removeEventListener("keydown",this._keyEvent)),document.removeEventListener("mousemove",this._mouseMove,!0),document.removeEventListener("mouseup",this._mouseUp,!0),V&&(this.el.removeEventListener("touchmove",Ne),this.el.removeEventListener("touchend",Oe)),delete this.moving,delete this.mouseDownEvent,e.stopPropagation(),e.preventDefault()}_keyEvent(e){e.key==="Escape"&&(this.host.gridstackNode?.grid?.engine.restoreInitial(),this._mouseUp(this.mouseDownEvent))}_triggerEvent(e,t){return this.option[e]&&this.option[e](t),this}}Me.prefix="ui-resizable-";class Be{constructor(){this._eventRegister={}}get disabled(){return this._disabled}on(e,t){this._eventRegister[e]=t}off(e){delete this._eventRegister[e]}enable(){this._disabled=!1}disable(){this._disabled=!0}destroy(){delete this._eventRegister}triggerEvent(e,t){if(!this.disabled&&this._eventRegister&&this._eventRegister[e])return this._eventRegister[e](t)}}class Ee extends Be{constructor(e,t={}){super(),this.el=e,this.option=t,this.rectScale={x:1,y:1},this._ui=()=>{const s=this.el.parentElement.getBoundingClientRect(),n={width:this.originalRect.width,height:this.originalRect.height+this.scrolled,left:this.originalRect.left,top:this.originalRect.top-this.scrolled},l=this.temporalRect||n;return{position:{left:(l.left-s.left)*this.rectScale.x,top:(l.top-s.top)*this.rectScale.y},size:{width:l.width*this.rectScale.x,height:l.height*this.rectScale.y}}},this._mouseOver=this._mouseOver.bind(this),this._mouseOut=this._mouseOut.bind(this),this.enable(),this._setupAutoHide(this.option.autoHide),this._setupHandlers()}on(e,t){super.on(e,t)}off(e){super.off(e)}enable(){super.enable(),this.el.classList.remove("ui-resizable-disabled"),this._setupAutoHide(this.option.autoHide)}disable(){super.disable(),this.el.classList.add("ui-resizable-disabled"),this._setupAutoHide(!1)}destroy(){this._removeHandlers(),this._setupAutoHide(!1),delete this.el,super.destroy()}updateOption(e){const t=e.handles&&e.handles!==this.option.handles,i=e.autoHide&&e.autoHide!==this.option.autoHide;return Object.keys(e).forEach(s=>this.option[s]=e[s]),t&&(this._removeHandlers(),this._setupHandlers()),i&&this._setupAutoHide(this.option.autoHide),this}_setupAutoHide(e){return e?(this.el.classList.add("ui-resizable-autohide"),this.el.addEventListener("mouseover",this._mouseOver),this.el.addEventListener("mouseout",this._mouseOut)):(this.el.classList.remove("ui-resizable-autohide"),this.el.removeEventListener("mouseover",this._mouseOver),this.el.removeEventListener("mouseout",this._mouseOut),v.overResizeElement===this&&delete v.overResizeElement),this}_mouseOver(e){v.overResizeElement||v.dragElement||(v.overResizeElement=this,this.el.classList.remove("ui-resizable-autohide"))}_mouseOut(e){v.overResizeElement===this&&(delete v.overResizeElement,this.el.classList.add("ui-resizable-autohide"))}_setupHandlers(){return this.handlers=this.option.handles.split(",").map(e=>e.trim()).map(e=>new Me(this.el,e,{start:t=>{this._resizeStart(t)},stop:t=>{this._resizeStop(t)},move:t=>{this._resizing(t,e)}})),this}_resizeStart(e){this.sizeToContent=f.shouldSizeToContent(this.el.gridstackNode,!0),this.originalRect=this.el.getBoundingClientRect(),this.scrollEl=f.getScrollElement(this.el),this.scrollY=this.scrollEl.scrollTop,this.scrolled=0,this.startEvent=e,this._setupHelper(),this._applyChange();const t=f.initEvent(e,{type:"resizestart",target:this.el});return this.option.start&&this.option.start(t,this._ui()),this.el.classList.add("ui-resizable-resizing"),this.triggerEvent("resizestart",t),this}_resizing(e,t){this.scrolled=this.scrollEl.scrollTop-this.scrollY,this.temporalRect=this._getChange(e,t),this._applyChange();const i=f.initEvent(e,{type:"resize",target:this.el});return this.option.resize&&this.option.resize(i,this._ui()),this.triggerEvent("resize",i),this}_resizeStop(e){const t=f.initEvent(e,{type:"resizestop",target:this.el});return this.option.stop&&this.option.stop(t),this.el.classList.remove("ui-resizable-resizing"),this.triggerEvent("resizestop",t),this._cleanHelper(),delete this.startEvent,delete this.originalRect,delete this.temporalRect,delete this.scrollY,delete this.scrolled,this}_setupHelper(){this.elOriginStyleVal=Ee._originStyleProp.map(i=>this.el.style[i]),this.parentOriginStylePosition=this.el.parentElement.style.position;const e=this.el.parentElement,t=f.getValuesFromTransformedElement(e);return this.rectScale={x:t.xScale,y:t.yScale},getComputedStyle(this.el.parentElement).position.match(/static/)&&(this.el.parentElement.style.position="relative"),this.el.style.position="absolute",this.el.style.opacity="0.8",this}_cleanHelper(){return Ee._originStyleProp.forEach((e,t)=>{this.el.style[e]=this.elOriginStyleVal[t]||null}),this.el.parentElement.style.position=this.parentOriginStylePosition||null,this}_getChange(e,t){const i=this.startEvent,s={width:this.originalRect.width,height:this.originalRect.height+this.scrolled,left:this.originalRect.left,top:this.originalRect.top-this.scrolled},n=e.clientX-i.clientX,l=this.sizeToContent?0:e.clientY-i.clientY;let a,u;t.indexOf("e")>-1?s.width+=n:t.indexOf("w")>-1&&(s.width-=n,s.left+=n,a=!0),t.indexOf("s")>-1?s.height+=l:t.indexOf("n")>-1&&(s.height-=l,s.top+=l,u=!0);const c=this._constrainSize(s.width,s.height,a,u);return Math.round(s.width)!==Math.round(c.width)&&(t.indexOf("w")>-1&&(s.left+=s.width-c.width),s.width=c.width),Math.round(s.height)!==Math.round(c.height)&&(t.indexOf("n")>-1&&(s.top+=s.height-c.height),s.height=c.height),s}_constrainSize(e,t,i,s){const n=this.option,l=(i?n.maxWidthMoveLeft:n.maxWidth)||Number.MAX_SAFE_INTEGER,a=n.minWidth/this.rectScale.x||e,u=(s?n.maxHeightMoveUp:n.maxHeight)||Number.MAX_SAFE_INTEGER,c=n.minHeight/this.rectScale.y||t,d=Math.min(l,Math.max(a,e)),h=Math.min(u,Math.max(c,t));return{width:d,height:h}}_applyChange(){let e={left:0,top:0,width:0,height:0};if(this.el.style.position==="absolute"){const t=this.el.parentElement,{left:i,top:s}=t.getBoundingClientRect();e={left:i,top:s,width:0,height:0}}return this.temporalRect?(Object.keys(this.temporalRect).forEach(t=>{const i=this.temporalRect[t],s=t==="width"||t==="left"?this.rectScale.x:t==="height"||t==="top"?this.rectScale.y:1;this.el.style[t]=(i-e[t])*s+"px"}),this):this}_removeHandlers(){return this.handlers.forEach(e=>e.destroy()),delete this.handlers,this}}Ee._originStyleProp=["width","height","position","left","top","opacity","zIndex"];const Gs='input,textarea,button,select,option,[contenteditable="true"],.ui-resizable-handle';class xe extends Be{constructor(e,t={}){super(),this.el=e,this.option=t,this.dragTransform={xScale:1,yScale:1,xOffset:0,yOffset:0};const i=t?.handle?.substring(1),s=e.gridstackNode;this.dragEls=!i||e.classList.contains(i)?[e]:s?.subGrid?[e.querySelector(t.handle)||e]:Array.from(e.querySelectorAll(t.handle)),this.dragEls.length===0&&(this.dragEls=[e]),this._mouseDown=this._mouseDown.bind(this),this._mouseMove=this._mouseMove.bind(this),this._mouseUp=this._mouseUp.bind(this),this._keyEvent=this._keyEvent.bind(this),this.enable()}on(e,t){super.on(e,t)}off(e){super.off(e)}enable(){this.disabled!==!1&&(super.enable(),this.dragEls.forEach(e=>{e.addEventListener("mousedown",this._mouseDown),V&&(e.addEventListener("touchstart",De),e.addEventListener("pointerdown",ze))}),this.el.classList.remove("ui-draggable-disabled"))}disable(e=!1){this.disabled!==!0&&(super.disable(),this.dragEls.forEach(t=>{t.removeEventListener("mousedown",this._mouseDown),V&&(t.removeEventListener("touchstart",De),t.removeEventListener("pointerdown",ze))}),e||this.el.classList.add("ui-draggable-disabled"))}destroy(){this.dragTimeout&&window.clearTimeout(this.dragTimeout),delete this.dragTimeout,this.mouseDownEvent&&this._mouseUp(this.mouseDownEvent),this.disable(!0),delete this.el,delete this.helper,delete this.option,super.destroy()}updateOption(e){return Object.keys(e).forEach(t=>this.option[t]=e[t]),this}_mouseDown(e){if(!v.mouseHandled)return e.button!==0||!this.dragEls.find(t=>t===e.target)&&e.target.closest(Gs)||this.option.cancel&&e.target.closest(this.option.cancel)||(this.mouseDownEvent=e,delete this.dragging,delete v.dragElement,delete v.dropElement,document.addEventListener("mousemove",this._mouseMove,{capture:!0,passive:!0}),document.addEventListener("mouseup",this._mouseUp,!0),V&&(e.currentTarget.addEventListener("touchmove",Ne),e.currentTarget.addEventListener("touchend",Oe)),e.preventDefault(),document.activeElement&&document.activeElement.blur(),v.mouseHandled=!0),!0}_callDrag(e){if(!this.dragging)return;const t=f.initEvent(e,{target:this.el,type:"drag"});this.option.drag&&this.option.drag(t,this.ui()),this.triggerEvent("drag",t)}_mouseMove(e){const t=this.mouseDownEvent;if(this.lastDrag=e,this.dragging)if(this._dragFollow(e),v.pauseDrag){const i=Number.isInteger(v.pauseDrag)?v.pauseDrag:100;this.dragTimeout&&window.clearTimeout(this.dragTimeout),this.dragTimeout=window.setTimeout(()=>this._callDrag(e),i)}else this._callDrag(e);else if(Math.abs(e.x-t.x)+Math.abs(e.y-t.y)>3){this.dragging=!0,v.dragElement=this;const i=this.el.gridstackNode?.grid;i?v.dropElement=i.el.ddElement.ddDroppable:delete v.dropElement,this.helper=this._createHelper(),this._setupHelperContainmentStyle(),this.dragTransform=f.getValuesFromTransformedElement(this.helperContainment),this.dragOffset=this._getDragOffset(e,this.el,this.helperContainment),this._setupHelperStyle(e);const s=f.initEvent(e,{target:this.el,type:"dragstart"});this.option.start&&this.option.start(s,this.ui()),this.triggerEvent("dragstart",s),document.addEventListener("keydown",this._keyEvent)}return!0}_mouseUp(e){if(document.removeEventListener("mousemove",this._mouseMove,!0),document.removeEventListener("mouseup",this._mouseUp,!0),V&&e.currentTarget&&(e.currentTarget.removeEventListener("touchmove",Ne,!0),e.currentTarget.removeEventListener("touchend",Oe,!0)),this.dragging){delete this.dragging,delete this.el.gridstackNode?._origRotate,document.removeEventListener("keydown",this._keyEvent),v.dropElement?.el===this.el.parentElement&&delete v.dropElement,this.helperContainment.style.position=this.parentOriginStylePosition||null,this.helper!==this.el&&this.helper.remove(),this._removeHelperStyle();const t=f.initEvent(e,{target:this.el,type:"dragstop"});this.option.stop&&this.option.stop(t),this.triggerEvent("dragstop",t),v.dropElement&&v.dropElement.drop(e)}delete this.helper,delete this.mouseDownEvent,delete v.dragElement,delete v.dropElement,delete v.mouseHandled,e.preventDefault()}_keyEvent(e){const t=this.el.gridstackNode,i=t?.grid||v.dropElement?.el?.gridstack;if(e.key==="Escape")t&&t._origRotate&&(t._orig=t._origRotate,delete t._origRotate),i?.cancelDrag(),this._mouseUp(this.mouseDownEvent);else if(t&&i&&(e.key==="r"||e.key==="R")){if(!f.canBeRotated(t))return;t._origRotate=t._origRotate||{...t._orig},delete t._moving,i.setAnimation(!1).rotate(t.el,{top:-this.dragOffset.offsetTop,left:-this.dragOffset.offsetLeft}).setAnimation(),t._moving=!0,this.dragOffset=this._getDragOffset(this.lastDrag,t.el,this.helperContainment),this.helper.style.width=this.dragOffset.width+"px",this.helper.style.height=this.dragOffset.height+"px",f.swap(t._orig,"w","h"),delete t._rect,this._mouseMove(this.lastDrag)}}_createHelper(){let e=this.el;return typeof this.option.helper=="function"?e=this.option.helper(this.el):this.option.helper==="clone"&&(e=f.cloneNode(this.el)),e.parentElement||f.appendTo(e,this.option.appendTo==="parent"?this.el.parentElement:this.option.appendTo),this.dragElementOriginStyle=xe.originStyleProp.map(t=>this.el.style[t]),e}_setupHelperStyle(e){this.helper.classList.add("ui-draggable-dragging");const t=this.helper.style;return t.pointerEvents="none",t.width=this.dragOffset.width+"px",t.height=this.dragOffset.height+"px",t.willChange="left, top",t.position="fixed",this._dragFollow(e),t.transition="none",setTimeout(()=>{this.helper&&(t.transition=null)},0),this}_removeHelperStyle(){if(this.helper.classList.remove("ui-draggable-dragging"),!this.helper?.gridstackNode?._isAboutToRemove&&this.dragElementOriginStyle){const t=this.helper,i=this.dragElementOriginStyle.transition||null;t.style.transition=this.dragElementOriginStyle.transition="none",xe.originStyleProp.forEach(s=>t.style[s]=this.dragElementOriginStyle[s]||null),setTimeout(()=>t.style.transition=i,50)}return delete this.dragElementOriginStyle,this}_dragFollow(e){const t={left:0,top:0},i=this.helper.style,s=this.dragOffset;i.left=(e.clientX+s.offsetLeft-t.left)*this.dragTransform.xScale+"px",i.top=(e.clientY+s.offsetTop-t.top)*this.dragTransform.yScale+"px"}_setupHelperContainmentStyle(){return this.helperContainment=this.helper.parentElement,this.helper.style.position!=="fixed"&&(this.parentOriginStylePosition=this.helperContainment.style.position,getComputedStyle(this.helperContainment).position.match(/static/)&&(this.helperContainment.style.position="relative")),this}_getDragOffset(e,t,i){let s=0,n=0;i&&(s=this.dragTransform.xOffset,n=this.dragTransform.yOffset);const l=t.getBoundingClientRect();return{left:l.left,top:l.top,offsetLeft:-e.clientX+l.left-s,offsetTop:-e.clientY+l.top-n,width:l.width*this.dragTransform.xScale,height:l.height*this.dragTransform.yScale}}ui(){const t=this.el.parentElement.getBoundingClientRect(),i=this.helper.getBoundingClientRect();return{position:{top:(i.top-t.top)*this.dragTransform.yScale,left:(i.left-t.left)*this.dragTransform.xScale}}}}xe.originStyleProp=["width","height","transform","transform-origin","transition","pointerEvents","position","left","top","minWidth","willChange"];class Us extends Be{constructor(e,t={}){super(),this.el=e,this.option=t,this._mouseEnter=this._mouseEnter.bind(this),this._mouseLeave=this._mouseLeave.bind(this),this.enable(),this._setupAccept()}on(e,t){super.on(e,t)}off(e){super.off(e)}enable(){this.disabled!==!1&&(super.enable(),this.el.classList.add("ui-droppable"),this.el.classList.remove("ui-droppable-disabled"),this.el.addEventListener("mouseenter",this._mouseEnter),this.el.addEventListener("mouseleave",this._mouseLeave),V&&(this.el.addEventListener("pointerenter",Mt),this.el.addEventListener("pointerleave",Lt)))}disable(e=!1){this.disabled!==!0&&(super.disable(),this.el.classList.remove("ui-droppable"),e||this.el.classList.add("ui-droppable-disabled"),this.el.removeEventListener("mouseenter",this._mouseEnter),this.el.removeEventListener("mouseleave",this._mouseLeave),V&&(this.el.removeEventListener("pointerenter",Mt),this.el.removeEventListener("pointerleave",Lt)))}destroy(){this.disable(!0),this.el.classList.remove("ui-droppable"),this.el.classList.remove("ui-droppable-disabled"),super.destroy()}updateOption(e){return Object.keys(e).forEach(t=>this.option[t]=e[t]),this._setupAccept(),this}_mouseEnter(e){if(!v.dragElement||!this._canDrop(v.dragElement.el))return;e.preventDefault(),e.stopPropagation(),v.dropElement&&v.dropElement!==this&&v.dropElement._mouseLeave(e,!0),v.dropElement=this;const t=f.initEvent(e,{target:this.el,type:"dropover"});this.option.over&&this.option.over(t,this._ui(v.dragElement)),this.triggerEvent("dropover",t),this.el.classList.add("ui-droppable-over")}_mouseLeave(e,t=!1){if(!v.dragElement||v.dropElement!==this)return;e.preventDefault(),e.stopPropagation();const i=f.initEvent(e,{target:this.el,type:"dropout"});if(this.option.out&&this.option.out(i,this._ui(v.dragElement)),this.triggerEvent("dropout",i),v.dropElement===this&&(delete v.dropElement,!t)){let s,n=this.el.parentElement;for(;!s&&n;)s=n.ddElement?.ddDroppable,n=n.parentElement;s&&s._mouseEnter(e)}}drop(e){e.preventDefault();const t=f.initEvent(e,{target:this.el,type:"drop"});this.option.drop&&this.option.drop(t,this._ui(v.dragElement)),this.triggerEvent("drop",t)}_canDrop(e){return e&&(!this.accept||this.accept(e))}_setupAccept(){return this.option.accept?(typeof this.option.accept=="string"?this.accept=e=>e.classList.contains(this.option.accept)||e.matches(this.option.accept):this.accept=this.option.accept,this):this}_ui(e){return{draggable:e.el,...e.ui()}}}class Ie{static init(e){return e.ddElement||(e.ddElement=new Ie(e)),e.ddElement}constructor(e){this.el=e}on(e,t){return this.ddDraggable&&["drag","dragstart","dragstop"].indexOf(e)>-1?this.ddDraggable.on(e,t):this.ddDroppable&&["drop","dropover","dropout"].indexOf(e)>-1?this.ddDroppable.on(e,t):this.ddResizable&&["resizestart","resize","resizestop"].indexOf(e)>-1&&this.ddResizable.on(e,t),this}off(e){return this.ddDraggable&&["drag","dragstart","dragstop"].indexOf(e)>-1?this.ddDraggable.off(e):this.ddDroppable&&["drop","dropover","dropout"].indexOf(e)>-1?this.ddDroppable.off(e):this.ddResizable&&["resizestart","resize","resizestop"].indexOf(e)>-1&&this.ddResizable.off(e),this}setupDraggable(e){return this.ddDraggable?this.ddDraggable.updateOption(e):this.ddDraggable=new xe(this.el,e),this}cleanDraggable(){return this.ddDraggable&&(this.ddDraggable.destroy(),delete this.ddDraggable),this}setupResizable(e){return this.ddResizable?this.ddResizable.updateOption(e):this.ddResizable=new Ee(this.el,e),this}cleanResizable(){return this.ddResizable&&(this.ddResizable.destroy(),delete this.ddResizable),this}setupDroppable(e){return this.ddDroppable?this.ddDroppable.updateOption(e):this.ddDroppable=new Us(this.el,e),this}cleanDroppable(){return this.ddDroppable&&(this.ddDroppable.destroy(),delete this.ddDroppable),this}}class Vs{resizable(e,t,i,s){return this._getDDElements(e,t).forEach(n=>{if(t==="disable"||t==="enable")n.ddResizable&&n.ddResizable[t]();else if(t==="destroy")n.ddResizable&&n.cleanResizable();else if(t==="option")n.setupResizable({[i]:s});else{const a=n.el.gridstackNode.grid;let u=n.el.getAttribute("gs-resize-handles")||a.opts.resizable.handles||"e,s,se";u==="all"&&(u="n,e,s,w,se,sw,ne,nw");const c=!a.opts.alwaysShowResizeHandle;n.setupResizable({...a.opts.resizable,handles:u,autoHide:c,start:t.start,stop:t.stop,resize:t.resize})}}),this}draggable(e,t,i,s){return this._getDDElements(e,t).forEach(n=>{if(t==="disable"||t==="enable")n.ddDraggable&&n.ddDraggable[t]();else if(t==="destroy")n.ddDraggable&&n.cleanDraggable();else if(t==="option")n.setupDraggable({[i]:s});else{const l=n.el.gridstackNode.grid;n.setupDraggable({...l.opts.draggable,start:t.start,stop:t.stop,drag:t.drag})}}),this}dragIn(e,t){return this._getDDElements(e).forEach(i=>i.setupDraggable(t)),this}droppable(e,t,i,s){return typeof t.accept=="function"&&!t._accept&&(t._accept=t.accept,t.accept=n=>t._accept(n)),this._getDDElements(e,t).forEach(n=>{t==="disable"||t==="enable"?n.ddDroppable&&n.ddDroppable[t]():t==="destroy"?n.ddDroppable&&n.cleanDroppable():t==="option"?n.setupDroppable({[i]:s}):n.setupDroppable(t)}),this}isDroppable(e){return!!(e?.ddElement?.ddDroppable&&!e.ddElement.ddDroppable.disabled)}isDraggable(e){return!!(e?.ddElement?.ddDraggable&&!e.ddElement.ddDraggable.disabled)}isResizable(e){return!!(e?.ddElement?.ddResizable&&!e.ddElement.ddResizable.disabled)}on(e,t,i){return this._getDDElements(e).forEach(s=>s.on(t,n=>{i(n,v.dragElement?v.dragElement.el:n.target,v.dragElement?v.dragElement.helper:null)})),this}off(e,t){return this._getDDElements(e).forEach(i=>i.off(t)),this}_getDDElements(e,t){const i=e.gridstack||t!=="destroy"&&t!=="disable",s=f.getElements(e);return s.length?s.map(l=>l.ddElement||(i?Ie.init(l):null)).filter(l=>l):[]}}const H=new Vs;class _{static init(e={},t=".grid-stack"){if(typeof document>"u")return null;const i=_.getGridElement(t);return i?(i.gridstack||(i.gridstack=new _(i,f.cloneDeep(e))),i.gridstack):(console.error(typeof t=="string"?'GridStack.initAll() no grid was found with selector "'+t+`" - element missing or wrong selector ?
2
- Note: ".grid-stack" is required for proper CSS styling and drag/drop, and is the default selector.`:"GridStack.init() no grid element was passed."),null)}static initAll(e={},t=".grid-stack"){const i=[];return typeof document>"u"||(_.getGridElements(t).forEach(s=>{s.gridstack||(s.gridstack=new _(s,f.cloneDeep(e))),i.push(s.gridstack)}),i.length===0&&console.error('GridStack.initAll() no grid was found with selector "'+t+`" - element missing or wrong selector ?
3
- Note: ".grid-stack" is required for proper CSS styling and drag/drop, and is the default selector.`)),i}static addGrid(e,t={}){if(!e)return null;let i=e;if(i.gridstack){const l=i.gridstack;return t&&(l.opts={...l.opts,...t}),t.children!==void 0&&l.load(t.children),l}return(!e.classList.contains("grid-stack")||_.addRemoveCB)&&(_.addRemoveCB?i=_.addRemoveCB(e,t,!0,!0):i=f.createDiv(["grid-stack",t.class],e)),_.init(t,i)}static registerEngine(e){_.engineClass=e}get placeholder(){if(!this._placeholder){this._placeholder=f.createDiv([this.opts.placeholderClass,$.itemClass,this.opts.itemClass]);const e=f.createDiv(["placeholder-content"],this._placeholder);this.opts.placeholderText&&(e.textContent=this.opts.placeholderText)}return this._placeholder}constructor(e,t={}){this.el=e,this.opts=t,this.animationDelay=310,this._gsEventHandler={},this._extraDragRow=0,this.dragTransform={xScale:1,yScale:1,xOffset:0,yOffset:0},e.gridstack=this,this.opts=t=t||{},e.classList.contains("grid-stack")||this.el.classList.add("grid-stack"),t.row&&(t.minRow=t.maxRow=t.row,delete t.row);const i=f.toNumber(e.getAttribute("gs-row"));t.column==="auto"&&delete t.column,t.alwaysShowResizeHandle!==void 0&&(t._alwaysShowResizeHandle=t.alwaysShowResizeHandle);let s=t.columnOpts?.breakpoints;const n=t;if(n.oneColumnModeDomSort&&(delete n.oneColumnModeDomSort,console.log("warning: Gridstack oneColumnModeDomSort no longer supported. Use GridStackOptions.columnOpts instead.")),n.oneColumnSize||n.disableOneColumnMode===!1){const h=n.oneColumnSize||768;delete n.oneColumnSize,delete n.disableOneColumnMode,t.columnOpts=t.columnOpts||{},s=t.columnOpts.breakpoints=t.columnOpts.breakpoints||[];let m=s.find(g=>g.c===1);m?m.w=h:(m={c:1,w:h},s.push(m,{c:12,w:h+1}))}const l=t.columnOpts;l&&(!l.columnWidth&&!l.breakpoints?.length?(delete t.columnOpts,s=void 0):l.columnMax=l.columnMax||12),s?.length>1&&s.sort((h,m)=>(m.w||0)-(h.w||0));const a={...f.cloneDeep($),column:f.toNumber(e.getAttribute("gs-column"))||$.column,minRow:i||f.toNumber(e.getAttribute("gs-min-row"))||$.minRow,maxRow:i||f.toNumber(e.getAttribute("gs-max-row"))||$.maxRow,staticGrid:f.toBool(e.getAttribute("gs-static"))||$.staticGrid,sizeToContent:f.toBool(e.getAttribute("gs-size-to-content"))||void 0,draggable:{handle:(t.handleClass?"."+t.handleClass:t.handle?t.handle:"")||$.draggable.handle},removableOptions:{accept:t.itemClass||$.removableOptions.accept,decline:$.removableOptions.decline}};e.getAttribute("gs-animate")&&(a.animate=f.toBool(e.getAttribute("gs-animate"))),t=f.defaults(t,a),this._initMargin(),this.checkDynamicColumn(),this.el.classList.add("gs-"+t.column),t.rtl==="auto"&&(t.rtl=e.style.direction==="rtl"),t.rtl&&this.el.classList.add("grid-stack-rtl");const c=this.el.closest("."+$.itemClass)?.gridstackNode;c&&(c.subGrid=this,this.parentGridNode=c,this.el.classList.add("grid-stack-nested"),c.el.classList.add("grid-stack-sub-grid")),this._isAutoCellHeight=t.cellHeight==="auto",this._isAutoCellHeight||t.cellHeight==="initial"?this.cellHeight(void 0,!1):(typeof t.cellHeight=="number"&&t.cellHeightUnit&&t.cellHeightUnit!==$.cellHeightUnit&&(t.cellHeight=t.cellHeight+t.cellHeightUnit,delete t.cellHeightUnit),this.cellHeight(t.cellHeight,!1)),t.alwaysShowResizeHandle==="mobile"&&(t.alwaysShowResizeHandle=V),this._styleSheetClass="gs-id-"+Z._idSeq++,this.el.classList.add(this._styleSheetClass),this._setStaticClass();const d=t.engineClass||_.engineClass||Z;if(this.engine=new d({column:this.getColumn(),float:t.float,maxRow:t.maxRow,onChange:h=>{let m=0;this.engine.nodes.forEach(g=>{m=Math.max(m,g.y+g.h)}),h.forEach(g=>{const p=g.el;p&&(g._removeDOM?(p&&p.remove(),delete g._removeDOM):this._writePosAttr(p,g))}),this._updateStyles(!1,m)}}),this._updateStyles(!1,0),t.auto&&(this.batchUpdate(),this.engine._loading=!0,this.getGridItems().forEach(h=>this._prepareElement(h)),delete this.engine._loading,this.batchUpdate(!1)),t.children){const h=t.children;delete t.children,h.length&&this.load(h)}this.setAnimation(),t.subGridDynamic&&!v.pauseDrag&&(v.pauseDrag=!0),t.draggable?.pause!==void 0&&(v.pauseDrag=t.draggable.pause),this._setupRemoveDrop(),this._setupAcceptWidget(),this._updateResizeEvent()}addWidget(e){if(typeof e=="string"){console.error("V11: GridStack.addWidget() does not support string anymore. see #2736");return}if(e.ELEMENT_NODE)return console.error("V11: GridStack.addWidget() does not support HTMLElement anymore. use makeWidget()"),this.makeWidget(e);let t,i=e;if(i.grid=this,i?.el?t=i.el:_.addRemoveCB?t=_.addRemoveCB(this.el,e,!0,!1):t=this.createWidgetDivs(i),!t)return;if(i=t.gridstackNode,i&&t.parentElement===this.el&&this.engine.nodes.find(n=>n._id===i._id))return t;const s=this._readAttr(t);return f.defaults(e,s),this.engine.prepareNode(e),this.el.appendChild(t),this.makeWidget(t,e),t}createWidgetDivs(e){const t=f.createDiv(["grid-stack-item",this.opts.itemClass]),i=f.createDiv(["grid-stack-item-content"],t);return f.lazyLoad(e)?e.visibleObservable||(e.visibleObservable=new IntersectionObserver(([s])=>{s.isIntersecting&&(e.visibleObservable?.disconnect(),delete e.visibleObservable,_.renderCB(i,e),e.grid?.prepareDragDrop(e.el))}),window.setTimeout(()=>e.visibleObservable?.observe(t))):_.renderCB(i,e),t}makeSubGrid(e,t,i,s=!0){let n=e.gridstackNode;if(n||(n=this.makeWidget(e).gridstackNode),n.subGrid?.el)return n.subGrid;let l,a=this;for(;a&&!l;)l=a.opts?.subGridOpts,a=a.parentGridNode?.grid;t=f.cloneDeep({...this.opts,id:void 0,children:void 0,column:"auto",columnOpts:void 0,layout:"list",subGridOpts:void 0,...l||{},...t||n.subGridOpts||{}}),n.subGridOpts=t;let u;t.column==="auto"&&(u=!0,t.column=Math.max(n.w||1,i?.w||1),delete t.columnOpts);let c=n.el.querySelector(".grid-stack-item-content"),d,h;if(s&&(this._removeDD(n.el),h={...n,x:0,y:0},f.removeInternalForSave(h),delete h.subGridOpts,n.content&&(h.content=n.content,delete n.content),_.addRemoveCB?d=_.addRemoveCB(this.el,h,!0,!1):(d=f.createDiv(["grid-stack-item"]),d.appendChild(c),c=f.createDiv(["grid-stack-item-content"],n.el)),this.prepareDragDrop(n.el)),i){const g=u?t.column:n.w,p=n.h+i.h,b=n.el.style;b.transition="none",this.update(n.el,{w:g,h:p}),setTimeout(()=>b.transition=null)}const m=n.subGrid=_.addGrid(c,t);return i?._moving&&(m._isTemp=!0),u&&(m._autoColumn=!0),s&&m.makeWidget(d,h),i&&(i._moving?window.setTimeout(()=>f.simulateMouseEvent(i._event,"mouseenter",m.el),0):m.makeWidget(n.el,n)),this.resizeToContentCheck(!1,n),m}removeAsSubGrid(e){const t=this.parentGridNode?.grid;t&&(t.batchUpdate(),t.removeWidget(this.parentGridNode.el,!0,!0),this.engine.nodes.forEach(i=>{i.x+=this.parentGridNode.x,i.y+=this.parentGridNode.y,t.makeWidget(i.el,i)}),t.batchUpdate(!1),this.parentGridNode&&delete this.parentGridNode.subGrid,delete this.parentGridNode,e&&window.setTimeout(()=>f.simulateMouseEvent(e._event,"mouseenter",t.el),0))}save(e=!0,t=!1,i=_.saveCB){const s=this.engine.save(e,i);if(s.forEach(n=>{if(e&&n.el&&!n.subGrid&&!i){const l=n.el.querySelector(".grid-stack-item-content");n.content=l?.innerHTML,n.content||delete n.content}else if(!e&&!i&&delete n.content,n.subGrid?.el){const l=n.subGrid.save(e,t,i);n.subGridOpts=t?l:{children:l},delete n.subGrid}delete n.el}),t){const n=f.cloneDeep(this.opts);n.marginBottom===n.marginTop&&n.marginRight===n.marginLeft&&n.marginTop===n.marginRight&&(n.margin=n.marginTop,delete n.marginTop,delete n.marginRight,delete n.marginBottom,delete n.marginLeft),n.rtl===(this.el.style.direction==="rtl")&&(n.rtl="auto"),this._isAutoCellHeight&&(n.cellHeight="auto"),this._autoColumn&&(n.column="auto");const l=n._alwaysShowResizeHandle;return delete n._alwaysShowResizeHandle,l!==void 0?n.alwaysShowResizeHandle=l:delete n.alwaysShowResizeHandle,f.removeInternalAndSame(n,$),n.children=s,n}return s}load(e,t=_.addRemoveCB||!0){e=f.cloneDeep(e);const i=this.getColumn();e.forEach(c=>{c.w=c.w||1,c.h=c.h||1}),e=f.sort(e),this.engine.skipCacheUpdate=this._ignoreLayoutsNodeChange=!0;let s=0;e.forEach(c=>{s=Math.max(s,(c.x||0)+c.w)}),s>this.engine.defaultColumn&&(this.engine.defaultColumn=s),s>i&&this.engine.cacheLayout(e,s,!0);const n=_.addRemoveCB;typeof t=="function"&&(_.addRemoveCB=t);const l=[];this.batchUpdate();const a=!this.engine.nodes.length;a&&this.setAnimation(!1),!a&&t&&[...this.engine.nodes].forEach(d=>{if(!d.id)return;f.find(e,d.id)||(_.addRemoveCB&&_.addRemoveCB(this.el,d,!1,!1),l.push(d),this.removeWidget(d.el,!0,!1))}),this.engine._loading=!0;const u=[];return this.engine.nodes=this.engine.nodes.filter(c=>f.find(e,c.id)?(u.push(c),!1):!0),e.forEach(c=>{const d=f.find(u,c.id);if(d){if(f.shouldSizeToContent(d)&&(c.h=d.h),this.engine.nodeBoundFix(c),(c.autoPosition||c.x===void 0||c.y===void 0)&&(c.w=c.w||d.w,c.h=c.h||d.h,this.engine.findEmptyPosition(c)),this.engine.nodes.push(d),f.samePos(d,c)&&this.engine.nodes.length>1&&(this.moveNode(d,{...c,forceCollide:!0}),f.copyPos(c,d)),this.update(d.el,c),c.subGridOpts?.children){const h=d.el.querySelector(".grid-stack");h&&h.gridstack&&h.gridstack.load(c.subGridOpts.children)}}else t&&this.addWidget(c)}),delete this.engine._loading,this.engine.removedNodes=l,this.batchUpdate(!1),delete this._ignoreLayoutsNodeChange,delete this.engine.skipCacheUpdate,n?_.addRemoveCB=n:delete _.addRemoveCB,a&&this.opts?.animate&&this.setAnimation(this.opts.animate,!0),this}batchUpdate(e=!0){return this.engine.batchUpdate(e),e||(this._updateContainerHeight(),this._triggerRemoveEvent(),this._triggerAddEvent(),this._triggerChangeEvent()),this}getCellHeight(e=!1){if(this.opts.cellHeight&&this.opts.cellHeight!=="auto"&&(!e||!this.opts.cellHeightUnit||this.opts.cellHeightUnit==="px"))return this.opts.cellHeight;if(this.opts.cellHeightUnit==="rem")return this.opts.cellHeight*parseFloat(getComputedStyle(document.documentElement).fontSize);if(this.opts.cellHeightUnit==="em")return this.opts.cellHeight*parseFloat(getComputedStyle(this.el).fontSize);if(this.opts.cellHeightUnit==="cm")return this.opts.cellHeight*(96/2.54);if(this.opts.cellHeightUnit==="mm")return this.opts.cellHeight*(96/2.54)/10;const t=this.el.querySelector("."+this.opts.itemClass);if(t){const s=f.toNumber(t.getAttribute("gs-h"))||1;return Math.round(t.offsetHeight/s)}const i=parseInt(this.el.getAttribute("gs-current-row"));return i?Math.round(this.el.getBoundingClientRect().height/i):this.opts.cellHeight}cellHeight(e,t=!0){if(t&&e!==void 0&&this._isAutoCellHeight!==(e==="auto")&&(this._isAutoCellHeight=e==="auto",this._updateResizeEvent()),(e==="initial"||e==="auto")&&(e=void 0),e===void 0){const s=-this.opts.marginRight-this.opts.marginLeft+this.opts.marginTop+this.opts.marginBottom;e=this.cellWidth()+s}const i=f.parseHeight(e);return this.opts.cellHeightUnit===i.unit&&this.opts.cellHeight===i.h?this:(this.opts.cellHeightUnit=i.unit,this.opts.cellHeight=i.h,this.resizeToContentCheck(),t&&this._updateStyles(!0),this)}cellWidth(){return this._widthOrContainer()/this.getColumn()}_widthOrContainer(e=!1){return e&&this.opts.columnOpts?.breakpointForWindow?window.innerWidth:this.el.clientWidth||this.el.parentElement.clientWidth||window.innerWidth}checkDynamicColumn(){const e=this.opts.columnOpts;if(!e||!e.columnWidth&&!e.breakpoints?.length)return!1;const t=this.getColumn();let i=t;const s=this._widthOrContainer(!0);if(e.columnWidth)i=Math.min(Math.round(s/e.columnWidth)||1,e.columnMax);else{i=e.columnMax;let n=0;for(;n<e.breakpoints.length&&s<=e.breakpoints[n].w;)i=e.breakpoints[n++].c||t}if(i!==t){const n=e.breakpoints?.find(l=>l.c===i);return this.column(i,n?.layout||e.layout),!0}return!1}compact(e="compact",t=!0){return this.engine.compact(e,t),this._triggerChangeEvent(),this}column(e,t="moveScale"){if(!e||e<1||this.opts.column===e)return this;const i=this.getColumn();return this.opts.column=e,this.engine?(this.engine.column=e,this.el.classList.remove("gs-"+i),this.el.classList.add("gs-"+e),this.engine.columnChanged(i,e,t),this._isAutoCellHeight&&this.cellHeight(),this.resizeToContentCheck(!0),this._ignoreLayoutsNodeChange=!0,this._triggerChangeEvent(),delete this._ignoreLayoutsNodeChange,this):this}getColumn(){return this.opts.column}getGridItems(){return Array.from(this.el.children).filter(e=>e.matches("."+this.opts.itemClass)&&!e.matches("."+this.opts.placeholderClass))}isIgnoreChangeCB(){return this._ignoreLayoutsNodeChange}destroy(e=!0){if(this.el)return this.offAll(),this._updateResizeEvent(!0),this.setStatic(!0,!1),this.setAnimation(!1),e?this.el.parentNode.removeChild(this.el):(this.removeAll(e),this.el.classList.remove(this._styleSheetClass),this.el.removeAttribute("gs-current-row")),this._removeStylesheet(),delete this.parentGridNode?.subGrid,delete this.parentGridNode,delete this.opts,delete this._placeholder?.gridstackNode,delete this._placeholder,delete this.engine,delete this.el.gridstack,delete this.el,this}float(e){return this.opts.float!==e&&(this.opts.float=this.engine.float=e,this._triggerChangeEvent()),this}getFloat(){return this.engine.float}getCellFromPixel(e,t=!1){const i=this.el.getBoundingClientRect();let s;t?s={top:i.top+document.documentElement.scrollTop,left:i.left}:s={top:this.el.offsetTop,left:this.el.offsetLeft};const n=e.left-s.left,l=e.top-s.top,a=i.width/this.getColumn(),u=i.height/parseInt(this.el.getAttribute("gs-current-row"));return{x:Math.floor(n/a),y:Math.floor(l/u)}}getRow(){return Math.max(this.engine.getRow(),this.opts.minRow)}isAreaEmpty(e,t,i,s){return this.engine.isAreaEmpty(e,t,i,s)}makeWidget(e,t){const i=_.getElement(e);if(!i)return;i.parentElement||this.el.appendChild(i),this._prepareElement(i,!0,t);const s=i.gridstackNode;this._updateContainerHeight(),s.subGridOpts&&this.makeSubGrid(i,s.subGridOpts,void 0,!1);let n;return this.opts.column===1&&!this._ignoreLayoutsNodeChange&&(n=this._ignoreLayoutsNodeChange=!0),this._triggerAddEvent(),this._triggerChangeEvent(),n&&delete this._ignoreLayoutsNodeChange,i}on(e,t){return e.indexOf(" ")!==-1?(e.split(" ").forEach(s=>this.on(s,t)),this):(e==="change"||e==="added"||e==="removed"||e==="enable"||e==="disable"?(e==="enable"||e==="disable"?this._gsEventHandler[e]=s=>t(s):this._gsEventHandler[e]=s=>{s.detail&&t(s,s.detail)},this.el.addEventListener(e,this._gsEventHandler[e])):e==="drag"||e==="dragstart"||e==="dragstop"||e==="resizestart"||e==="resize"||e==="resizestop"||e==="dropped"||e==="resizecontent"?this._gsEventHandler[e]=t:console.error("GridStack.on("+e+") event not supported"),this)}off(e){return e.indexOf(" ")!==-1?(e.split(" ").forEach(i=>this.off(i)),this):((e==="change"||e==="added"||e==="removed"||e==="enable"||e==="disable")&&this._gsEventHandler[e]&&this.el.removeEventListener(e,this._gsEventHandler[e]),delete this._gsEventHandler[e],this)}offAll(){return Object.keys(this._gsEventHandler).forEach(e=>this.off(e)),this}removeWidget(e,t=!0,i=!0){return e?(_.getElements(e).forEach(s=>{if(s.parentElement&&s.parentElement!==this.el)return;let n=s.gridstackNode;n||(n=this.engine.nodes.find(l=>s===l.el)),n&&(t&&_.addRemoveCB&&_.addRemoveCB(this.el,n,!1,!1),delete s.gridstackNode,this._removeDD(s),this.engine.removeNode(n,t,i),t&&s.parentElement&&s.remove())}),i&&(this._triggerRemoveEvent(),this._triggerChangeEvent()),this):(console.error("Error: GridStack.removeWidget(undefined) called"),this)}removeAll(e=!0,t=!0){return this.engine.nodes.forEach(i=>{e&&_.addRemoveCB&&_.addRemoveCB(this.el,i,!1,!1),delete i.el.gridstackNode,this.opts.staticGrid||this._removeDD(i.el)}),this.engine.removeAll(e,t),t&&this._triggerRemoveEvent(),this}setAnimation(e=this.opts.animate,t){return t?setTimeout(()=>{this.opts&&this.setAnimation(e)}):e?this.el.classList.add("grid-stack-animate"):this.el.classList.remove("grid-stack-animate"),this}hasAnimationCSS(){return this.el.classList.contains("grid-stack-animate")}setStatic(e,t=!0,i=!0){return!!this.opts.staticGrid===e?this:(e?this.opts.staticGrid=!0:delete this.opts.staticGrid,this._setupRemoveDrop(),this._setupAcceptWidget(),this.engine.nodes.forEach(s=>{this.prepareDragDrop(s.el),s.subGrid&&i&&s.subGrid.setStatic(e,t,i)}),t&&this._setStaticClass(),this)}updateOptions(e){const t=this.opts;return e.acceptWidgets!==void 0&&this._setupAcceptWidget(),e.animate!==void 0&&this.setAnimation(),e.cellHeight&&(this.cellHeight(e.cellHeight,!0),delete e.cellHeight),e.class&&e.class!==t.class&&(t.class&&this.el.classList.remove(t.class),this.el.classList.add(e.class)),typeof e.column=="number"&&!e.columnOpts&&(this.column(e.column),delete e.column),e.margin!==void 0&&this.margin(e.margin),e.staticGrid!==void 0&&this.setStatic(e.staticGrid),e.disableDrag!==void 0&&!e.staticGrid&&this.enableMove(!e.disableDrag),e.disableResize!==void 0&&!e.staticGrid&&this.enableResize(!e.disableResize),e.float!==void 0&&this.float(e.float),e.row!==void 0&&(t.minRow=t.maxRow=e.row),e.children?.length&&(this.load(e.children),delete e.children),this.opts={...this.opts,...e},this}update(e,t){return _.getElements(e).forEach(i=>{const s=i?.gridstackNode;if(!s)return;const n={...f.copyPos({},s),...f.cloneDeep(t)};this.engine.nodeBoundFix(n),delete n.autoPosition;const l=["x","y","w","h"];let a;if(l.some(d=>n[d]!==void 0&&n[d]!==s[d])&&(a={},l.forEach(d=>{a[d]=n[d]!==void 0?n[d]:s[d],delete n[d]})),!a&&(n.minW||n.minH||n.maxW||n.maxH)&&(a={}),n.content!==void 0){const d=i.querySelector(".grid-stack-item-content");d&&d.textContent!==n.content&&(s.content=n.content,_.renderCB(d,n),s.subGrid?.el&&(d.appendChild(s.subGrid.el),s.subGrid.opts.styleInHead||s.subGrid._updateStyles(!0))),delete n.content}let u=!1,c=!1;for(const d in n)d[0]!=="_"&&s[d]!==n[d]&&(s[d]=n[d],u=!0,c=c||!this.opts.staticGrid&&(d==="noResize"||d==="noMove"||d==="locked"));if(f.sanitizeMinMax(s),a){const d=a.w!==void 0&&a.w!==s.w;this.moveNode(s,a),d&&s.subGrid?s.subGrid.onResize(this.hasAnimationCSS()?s.w:void 0):this.resizeToContentCheck(d,s),delete s._orig}(a||u)&&this._writeAttr(i,s),c&&this.prepareDragDrop(s.el)}),this}moveNode(e,t){const i=e._updating;i||this.engine.cleanNodes().beginUpdate(e),this.engine.moveNode(e,t),this._updateContainerHeight(),i||(this._triggerChangeEvent(),this.engine.endUpdate())}resizeToContent(e){if(!e||(e.classList.remove("size-to-content-max"),!e.clientHeight))return;const t=e.gridstackNode;if(!t)return;const i=t.grid;if(!i||e.parentElement!==i.el)return;const s=i.getCellHeight(!0);if(!s)return;let n=t.h?t.h*s:e.clientHeight,l;if(t.resizeToContentParent&&(l=e.querySelector(t.resizeToContentParent)),l||(l=e.querySelector(_.resizeToContentParent)),!l)return;const a=e.clientHeight-l.clientHeight,u=t.h?t.h*s-a:l.clientHeight;let c;if(t.subGrid){c=t.subGrid.getRow()*t.subGrid.getCellHeight(!0);const m=t.subGrid.el.getBoundingClientRect(),g=t.subGrid.el.parentElement.getBoundingClientRect();c+=m.top-g.top}else{if(t.subGridOpts?.children?.length)return;{const m=l.firstElementChild;if(!m){console.error(`Error: GridStack.resizeToContent() widget id:${t.id} '${_.resizeToContentParent}'.firstElementChild is null, make sure to have a div like container. Skipping sizing.`);return}c=m.getBoundingClientRect().height||u}}if(u===c)return;n+=c-u;let d=Math.ceil(n/s);const h=Number.isInteger(t.sizeToContent)?t.sizeToContent:0;h&&d>h&&(d=h,e.classList.add("size-to-content-max")),t.minH&&d<t.minH?d=t.minH:t.maxH&&d>t.maxH&&(d=t.maxH),d!==t.h&&(i._ignoreLayoutsNodeChange=!0,i.moveNode(t,{h:d}),delete i._ignoreLayoutsNodeChange)}resizeToContentCBCheck(e){_.resizeToContentCB?_.resizeToContentCB(e):this.resizeToContent(e)}rotate(e,t){return _.getElements(e).forEach(i=>{const s=i.gridstackNode;if(!f.canBeRotated(s))return;const n={w:s.h,h:s.w,minH:s.minW,minW:s.minH,maxH:s.maxW,maxW:s.maxH};if(t){const a=t.left>0?Math.floor(t.left/this.cellWidth()):0,u=t.top>0?Math.floor(t.top/this.opts.cellHeight):0;n.x=s.x+a-(s.h-(u+1)),n.y=s.y+u-a}Object.keys(n).forEach(a=>{n[a]===void 0&&delete n[a]});const l=s._orig;this.update(i,n),s._orig=l}),this}margin(e){if(!(typeof e=="string"&&e.split(" ").length>1)){const i=f.parseHeight(e);if(this.opts.marginUnit===i.unit&&this.opts.margin===i.h)return}return this.opts.margin=e,this.opts.marginTop=this.opts.marginBottom=this.opts.marginLeft=this.opts.marginRight=void 0,this._initMargin(),this._updateStyles(!0),this}getMargin(){return this.opts.margin}willItFit(e){if(arguments.length>1){console.warn("gridstack.ts: `willItFit(x,y,w,h,autoPosition)` is deprecated. Use `willItFit({x, y,...})`. It will be removed soon");const t=arguments;let i=0,s={x:t[i++],y:t[i++],w:t[i++],h:t[i++],autoPosition:t[i++]};return this.willItFit(s)}return this.engine.willItFit(e)}_triggerChangeEvent(){if(this.engine.batchMode)return this;const e=this.engine.getDirtyNodes(!0);return e&&e.length&&(this._ignoreLayoutsNodeChange||this.engine.layoutsNodesChange(e),this._triggerEvent("change",e)),this.engine.saveInitial(),this}_triggerAddEvent(){if(this.engine.batchMode)return this;if(this.engine.addedNodes?.length){this._ignoreLayoutsNodeChange||this.engine.layoutsNodesChange(this.engine.addedNodes),this.engine.addedNodes.forEach(t=>{delete t._dirty});const e=[...this.engine.addedNodes];this.engine.addedNodes=[],this._triggerEvent("added",e)}return this}_triggerRemoveEvent(){if(this.engine.batchMode)return this;if(this.engine.removedNodes?.length){const e=[...this.engine.removedNodes];this.engine.removedNodes=[],this._triggerEvent("removed",e)}return this}_triggerEvent(e,t){const i=t?new CustomEvent(e,{bubbles:!1,detail:t}):new Event(e);return this.el.dispatchEvent(i),this}_removeStylesheet(){if(this._styles){const e=this.opts.styleInHead?void 0:this.el.parentNode;f.removeStylesheet(this._styleSheetClass,e),delete this._styles}return this}_updateStyles(e=!1,t){if(e&&this._removeStylesheet(),t===void 0&&(t=this.getRow()),this._updateContainerHeight(),this.opts.cellHeight===0)return this;const i=this.opts.cellHeight,s=this.opts.cellHeightUnit,n=`.${this._styleSheetClass} > .${this.opts.itemClass}`;if(!this._styles){const l=this.opts.styleInHead?void 0:this.el.parentNode;if(this._styles=f.createStylesheet(this._styleSheetClass,l,{nonce:this.opts.nonce}),!this._styles)return this;this._styles._max=0,f.addCSSRule(this._styles,n,`height: ${i}${s}`);const a=this.opts.marginTop+this.opts.marginUnit,u=this.opts.marginBottom+this.opts.marginUnit,c=this.opts.marginRight+this.opts.marginUnit,d=this.opts.marginLeft+this.opts.marginUnit,h=`${n} > .grid-stack-item-content`,m=`.${this._styleSheetClass} > .grid-stack-placeholder > .placeholder-content`;f.addCSSRule(this._styles,h,`top: ${a}; right: ${c}; bottom: ${u}; left: ${d};`),f.addCSSRule(this._styles,m,`top: ${a}; right: ${c}; bottom: ${u}; left: ${d};`),f.addCSSRule(this._styles,`${n} > .ui-resizable-n`,`top: ${a};`),f.addCSSRule(this._styles,`${n} > .ui-resizable-s`,`bottom: ${u}`),f.addCSSRule(this._styles,`${n} > .ui-resizable-ne`,`right: ${c}; top: ${a}`),f.addCSSRule(this._styles,`${n} > .ui-resizable-e`,`right: ${c}`),f.addCSSRule(this._styles,`${n} > .ui-resizable-se`,`right: ${c}; bottom: ${u}`),f.addCSSRule(this._styles,`${n} > .ui-resizable-nw`,`left: ${d}; top: ${a}`),f.addCSSRule(this._styles,`${n} > .ui-resizable-w`,`left: ${d}`),f.addCSSRule(this._styles,`${n} > .ui-resizable-sw`,`left: ${d}; bottom: ${u}`)}if(t=t||this._styles._max,t>this._styles._max){const l=a=>i*a+s;for(let a=this._styles._max+1;a<=t;a++)f.addCSSRule(this._styles,`${n}[gs-y="${a}"]`,`top: ${l(a)}`),f.addCSSRule(this._styles,`${n}[gs-h="${a+1}"]`,`height: ${l(a+1)}`);this._styles._max=t}return this}_updateContainerHeight(){if(!this.engine||this.engine.batchMode)return this;const e=this.parentGridNode;let t=this.getRow()+this._extraDragRow;const i=this.opts.cellHeight,s=this.opts.cellHeightUnit;if(!i)return this;if(!e){const n=f.parseHeight(getComputedStyle(this.el).minHeight);if(n.h>0&&n.unit===s){const l=Math.floor(n.h/i);t<l&&(t=l)}}return this.el.setAttribute("gs-current-row",String(t)),this.el.style.removeProperty("min-height"),this.el.style.removeProperty("height"),t&&(this.el.style[e?"minHeight":"height"]=t*i+s),e&&!e.grid.engine.batchMode&&f.shouldSizeToContent(e)&&e.grid.resizeToContentCBCheck(e.el),this}_prepareElement(e,t=!1,i){i=i||this._readAttr(e),e.gridstackNode=i,i.el=e,i.grid=this,i=this.engine.addNode(i,t),this._writeAttr(e,i),e.classList.add($.itemClass,this.opts.itemClass);const s=f.shouldSizeToContent(i);return s?e.classList.add("size-to-content"):e.classList.remove("size-to-content"),s&&this.resizeToContentCheck(!1,i),f.lazyLoad(i)||this.prepareDragDrop(i.el),this}_writePosAttr(e,t){return t.x!==void 0&&t.x!==null&&e.setAttribute("gs-x",String(t.x)),t.y!==void 0&&t.y!==null&&e.setAttribute("gs-y",String(t.y)),t.w>1?e.setAttribute("gs-w",String(t.w)):e.removeAttribute("gs-w"),t.h>1?e.setAttribute("gs-h",String(t.h)):e.removeAttribute("gs-h"),this}_writeAttr(e,t){if(!t)return this;this._writePosAttr(e,t);const i={noResize:"gs-no-resize",noMove:"gs-no-move",locked:"gs-locked",id:"gs-id",sizeToContent:"gs-size-to-content"};for(const s in i)t[s]?e.setAttribute(i[s],String(t[s])):e.removeAttribute(i[s]);return this}_readAttr(e,t=!0){const i={};i.x=f.toNumber(e.getAttribute("gs-x")),i.y=f.toNumber(e.getAttribute("gs-y")),i.w=f.toNumber(e.getAttribute("gs-w")),i.h=f.toNumber(e.getAttribute("gs-h")),i.autoPosition=f.toBool(e.getAttribute("gs-auto-position")),i.noResize=f.toBool(e.getAttribute("gs-no-resize")),i.noMove=f.toBool(e.getAttribute("gs-no-move")),i.locked=f.toBool(e.getAttribute("gs-locked"));const s=e.getAttribute("gs-size-to-content");s&&(s==="true"||s==="false"?i.sizeToContent=f.toBool(s):i.sizeToContent=parseInt(s,10)),i.id=e.getAttribute("gs-id"),i.maxW=f.toNumber(e.getAttribute("gs-max-w")),i.minW=f.toNumber(e.getAttribute("gs-min-w")),i.maxH=f.toNumber(e.getAttribute("gs-max-h")),i.minH=f.toNumber(e.getAttribute("gs-min-h")),t&&(i.w===1&&e.removeAttribute("gs-w"),i.h===1&&e.removeAttribute("gs-h"),i.maxW&&e.removeAttribute("gs-max-w"),i.minW&&e.removeAttribute("gs-min-w"),i.maxH&&e.removeAttribute("gs-max-h"),i.minH&&e.removeAttribute("gs-min-h"));for(const n in i){if(!i.hasOwnProperty(n))return;!i[n]&&i[n]!==0&&n!=="gs-size-to-content"&&delete i[n]}return i}_setStaticClass(){const e=["grid-stack-static"];return this.opts.staticGrid?(this.el.classList.add(...e),this.el.setAttribute("gs-static","true")):(this.el.classList.remove(...e),this.el.removeAttribute("gs-static")),this}onResize(e=this.el?.clientWidth){if(!e||this.prevWidth===e)return;this.prevWidth=e,this.batchUpdate();let t=!1;return this._autoColumn&&this.parentGridNode?this.opts.column!==this.parentGridNode.w&&(this.column(this.parentGridNode.w,this.opts.layout||"list"),t=!0):t=this.checkDynamicColumn(),this._isAutoCellHeight&&this.cellHeight(),this.engine.nodes.forEach(i=>{i.subGrid&&i.subGrid.onResize()}),this._skipInitialResize||this.resizeToContentCheck(t),delete this._skipInitialResize,this.batchUpdate(!1),this}resizeToContentCheck(e=!1,t=void 0){if(this.engine){if(e&&this.hasAnimationCSS())return setTimeout(()=>this.resizeToContentCheck(!1,t),this.animationDelay);if(t)f.shouldSizeToContent(t)&&this.resizeToContentCBCheck(t.el);else if(this.engine.nodes.some(i=>f.shouldSizeToContent(i))){const i=[...this.engine.nodes];this.batchUpdate(),i.forEach(s=>{f.shouldSizeToContent(s)&&this.resizeToContentCBCheck(s.el)}),this.batchUpdate(!1)}this._gsEventHandler.resizecontent&&this._gsEventHandler.resizecontent(null,t?[t]:this.engine.nodes)}}_updateResizeEvent(e=!1){const t=!this.parentGridNode&&(this._isAutoCellHeight||this.opts.sizeToContent||this.opts.columnOpts||this.engine.nodes.find(i=>i.sizeToContent));return!e&&t&&!this.resizeObserver?(this._sizeThrottle=f.throttle(()=>this.onResize(),this.opts.cellHeightThrottle),this.resizeObserver=new ResizeObserver(()=>this._sizeThrottle()),this.resizeObserver.observe(this.el),this._skipInitialResize=!0):(e||!t)&&this.resizeObserver&&(this.resizeObserver.disconnect(),delete this.resizeObserver,delete this._sizeThrottle),this}static getElement(e=".grid-stack-item"){return f.getElement(e)}static getElements(e=".grid-stack-item"){return f.getElements(e)}static getGridElement(e){return _.getElement(e)}static getGridElements(e){return f.getElements(e)}_initMargin(){let e,t=0,i=[];return typeof this.opts.margin=="string"&&(i=this.opts.margin.split(" ")),i.length===2?(this.opts.marginTop=this.opts.marginBottom=i[0],this.opts.marginLeft=this.opts.marginRight=i[1]):i.length===4?(this.opts.marginTop=i[0],this.opts.marginRight=i[1],this.opts.marginBottom=i[2],this.opts.marginLeft=i[3]):(e=f.parseHeight(this.opts.margin),this.opts.marginUnit=e.unit,t=this.opts.margin=e.h),this.opts.marginTop===void 0?this.opts.marginTop=t:(e=f.parseHeight(this.opts.marginTop),this.opts.marginTop=e.h,delete this.opts.margin),this.opts.marginBottom===void 0?this.opts.marginBottom=t:(e=f.parseHeight(this.opts.marginBottom),this.opts.marginBottom=e.h,delete this.opts.margin),this.opts.marginRight===void 0?this.opts.marginRight=t:(e=f.parseHeight(this.opts.marginRight),this.opts.marginRight=e.h,delete this.opts.margin),this.opts.marginLeft===void 0?this.opts.marginLeft=t:(e=f.parseHeight(this.opts.marginLeft),this.opts.marginLeft=e.h,delete this.opts.margin),this.opts.marginUnit=e.unit,this.opts.marginTop===this.opts.marginBottom&&this.opts.marginLeft===this.opts.marginRight&&this.opts.marginTop===this.opts.marginRight&&(this.opts.margin=this.opts.marginTop),this}static getDD(){return H}static setupDragIn(e,t,i,s=document){t?.pause!==void 0&&(v.pauseDrag=t.pause),t={appendTo:"body",helper:"clone",...t||{}},(typeof e=="string"?f.getElements(e,s):e).forEach((l,a)=>{H.isDraggable(l)||H.dragIn(l,t),i?.[a]&&(l.gridstackNode=i[a])})}movable(e,t){return this.opts.staticGrid?this:(_.getElements(e).forEach(i=>{const s=i.gridstackNode;s&&(t?delete s.noMove:s.noMove=!0,this.prepareDragDrop(s.el))}),this)}resizable(e,t){return this.opts.staticGrid?this:(_.getElements(e).forEach(i=>{const s=i.gridstackNode;s&&(t?delete s.noResize:s.noResize=!0,this.prepareDragDrop(s.el))}),this)}disable(e=!0){if(!this.opts.staticGrid)return this.enableMove(!1,e),this.enableResize(!1,e),this._triggerEvent("disable"),this}enable(e=!0){if(!this.opts.staticGrid)return this.enableMove(!0,e),this.enableResize(!0,e),this._triggerEvent("enable"),this}enableMove(e,t=!0){return this.opts.staticGrid?this:(e?delete this.opts.disableDrag:this.opts.disableDrag=!0,this.engine.nodes.forEach(i=>{this.prepareDragDrop(i.el),i.subGrid&&t&&i.subGrid.enableMove(e,t)}),this)}enableResize(e,t=!0){return this.opts.staticGrid?this:(e?delete this.opts.disableResize:this.opts.disableResize=!0,this.engine.nodes.forEach(i=>{this.prepareDragDrop(i.el),i.subGrid&&t&&i.subGrid.enableResize(e,t)}),this)}cancelDrag(){const e=this._placeholder?.gridstackNode;e&&(e._isExternal?(e._isAboutToRemove=!0,this.engine.removeNode(e)):e._isAboutToRemove&&_._itemRemoving(e.el,!1),this.engine.restoreInitial())}_removeDD(e){return H.draggable(e,"destroy").resizable(e,"destroy"),e.gridstackNode&&delete e.gridstackNode._initDD,delete e.ddElement,this}_setupAcceptWidget(){if(this.opts.staticGrid||!this.opts.acceptWidgets&&!this.opts.removable)return H.droppable(this.el,"destroy"),this;let e,t;const i=(s,n,l)=>{l=l||n;const a=l.gridstackNode;if(!a)return;if(!a.grid?.el){l.style.transform=`scale(${1/this.dragTransform.xScale},${1/this.dragTransform.yScale})`;const m=l.getBoundingClientRect();l.style.left=m.x+(this.dragTransform.xScale-1)*(s.clientX-m.x)/this.dragTransform.xScale+"px",l.style.top=m.y+(this.dragTransform.yScale-1)*(s.clientY-m.y)/this.dragTransform.yScale+"px",l.style.transformOrigin="0px 0px"}let{top:u,left:c}=l.getBoundingClientRect();const d=this.el.getBoundingClientRect();c-=d.left,u-=d.top;const h={position:{top:u*this.dragTransform.xScale,left:c*this.dragTransform.yScale}};if(a._temporaryRemoved){if(a.x=Math.max(0,Math.round(c/t)),a.y=Math.max(0,Math.round(u/e)),delete a.autoPosition,this.engine.nodeBoundFix(a),!this.engine.willItFit(a)){if(a.autoPosition=!0,!this.engine.willItFit(a)){H.off(n,"drag");return}a._willFitPos&&(f.copyPos(a,a._willFitPos),delete a._willFitPos)}this._onStartMoving(l,s,h,a,t,e)}else this._dragOrResize(l,s,h,a,t,e)};return H.droppable(this.el,{accept:s=>{const n=s.gridstackNode||this._readAttr(s,!1);if(n?.grid===this)return!0;if(!this.opts.acceptWidgets)return!1;let l=!0;if(typeof this.opts.acceptWidgets=="function")l=this.opts.acceptWidgets(s);else{const a=this.opts.acceptWidgets===!0?".grid-stack-item":this.opts.acceptWidgets;l=s.matches(a)}if(l&&n&&this.opts.maxRow){const a={w:n.w,h:n.h,minW:n.minW,minH:n.minH};l=this.engine.willItFit(a)}return l}}).on(this.el,"dropover",(s,n,l)=>{let a=l?.gridstackNode||n.gridstackNode;if(a?.grid===this&&!a._temporaryRemoved)return!1;if(a?._sidebarOrig&&(a.w=a._sidebarOrig.w,a.h=a._sidebarOrig.h),a?.grid&&a.grid!==this&&!a._temporaryRemoved&&a.grid._leave(n,l),l=l||n,t=this.cellWidth(),e=this.getCellHeight(!0),!a){const d=l.getAttribute("data-gs-widget")||l.getAttribute("gridstacknode");if(d){try{a=JSON.parse(d)}catch{console.error("Gridstack dropover: Bad JSON format: ",d)}l.removeAttribute("data-gs-widget"),l.removeAttribute("gridstacknode")}a||(a=this._readAttr(l)),a._sidebarOrig={w:a.w,h:a.h}}a.grid||(a.el||(a={...a}),a._isExternal=!0,l.gridstackNode=a);const u=a.w||Math.round(l.offsetWidth/t)||1,c=a.h||Math.round(l.offsetHeight/e)||1;return a.grid&&a.grid!==this?(n._gridstackNodeOrig||(n._gridstackNodeOrig=a),n.gridstackNode=a={...a,w:u,h:c,grid:this},delete a.x,delete a.y,this.engine.cleanupNode(a).nodeBoundFix(a),a._initDD=a._isExternal=a._temporaryRemoved=!0):(a.w=u,a.h=c,a._temporaryRemoved=!0),_._itemRemoving(a.el,!1),H.on(n,"drag",i),i(s,n,l),!1}).on(this.el,"dropout",(s,n,l)=>{const a=l?.gridstackNode||n.gridstackNode;return a&&(!a.grid||a.grid===this)&&(this._leave(n,l),this._isTemp&&this.removeAsSubGrid(a)),!1}).on(this.el,"drop",(s,n,l)=>{const a=l?.gridstackNode||n.gridstackNode;if(a?.grid===this&&!a._isExternal)return!1;const u=!!this.placeholder.parentElement,c=n!==l;this.placeholder.remove(),delete this.placeholder.gridstackNode;const d=u&&this.opts.animate;d&&this.setAnimation(!1);const h=n._gridstackNodeOrig;if(delete n._gridstackNodeOrig,u&&h?.grid&&h.grid!==this){const g=h.grid;g.engine.removeNodeFromLayoutCache(h),g.engine.removedNodes.push(h),g._triggerRemoveEvent()._triggerChangeEvent(),g.parentGridNode&&!g.engine.nodes.length&&g.opts.subGridDynamic&&g.removeAsSubGrid()}if(!a||(u&&(this.engine.cleanupNode(a),a.grid=this),delete a.grid?._isTemp,H.off(n,"drag"),l!==n?(l.remove(),n=l):n.remove(),this._removeDD(n),!u))return!1;const m=a.subGrid?.el?.gridstack;return f.copyPos(a,this._readAttr(this.placeholder)),f.removePositioningStyles(n),c&&(a.content||a.subGridOpts||_.addRemoveCB)?(delete a.el,n=this.addWidget(a)):(this._prepareElement(n,!0,a),this.el.appendChild(n),this.resizeToContentCheck(!1,a),m&&(m.parentGridNode=a,m.opts.styleInHead||m._updateStyles(!0)),this._updateContainerHeight()),this.engine.addedNodes.push(a),this._triggerAddEvent(),this._triggerChangeEvent(),this.engine.endUpdate(),this._gsEventHandler.dropped&&this._gsEventHandler.dropped({...s,type:"dropped"},h&&h.grid?h:void 0,a),d&&this.setAnimation(this.opts.animate,!0),!1}),this}static _itemRemoving(e,t){if(!e)return;const i=e?e.gridstackNode:void 0;!i?.grid||e.classList.contains(i.grid.opts.removableOptions.decline)||(t?i._isAboutToRemove=!0:delete i._isAboutToRemove,t?e.classList.add("grid-stack-item-removing"):e.classList.remove("grid-stack-item-removing"))}_setupRemoveDrop(){if(typeof this.opts.removable!="string")return this;const e=document.querySelector(this.opts.removable);return e?(!this.opts.staticGrid&&!H.isDroppable(e)&&H.droppable(e,this.opts.removableOptions).on(e,"dropover",(t,i)=>_._itemRemoving(i,!0)).on(e,"dropout",(t,i)=>_._itemRemoving(i,!1)),this):this}prepareDragDrop(e,t=!1){const i=e?.gridstackNode;if(!i)return;const s=i.noMove||this.opts.disableDrag,n=i.noResize||this.opts.disableResize,l=this.opts.staticGrid||s&&n;if((t||l)&&(i._initDD&&(this._removeDD(e),delete i._initDD),l&&e.classList.add("ui-draggable-disabled","ui-resizable-disabled"),!t))return this;if(!i._initDD){let a,u;const c=(m,g)=>{this._gsEventHandler[m.type]&&this._gsEventHandler[m.type](m,m.target),a=this.cellWidth(),u=this.getCellHeight(!0),this._onStartMoving(e,m,g,i,a,u)},d=(m,g)=>{this._dragOrResize(e,m,g,i,a,u)},h=m=>{this.placeholder.remove(),delete this.placeholder.gridstackNode,delete i._moving,delete i._event,delete i._lastTried;const g=i.w!==i._orig.w,p=m.target;if(!(!p.gridstackNode||p.gridstackNode.grid!==this)){if(i.el=p,i._isAboutToRemove){const b=e.gridstackNode.grid;b._gsEventHandler[m.type]&&b._gsEventHandler[m.type](m,p),b.engine.nodes.push(i),b.removeWidget(e,!0,!0)}else f.removePositioningStyles(p),i._temporaryRemoved?(f.copyPos(i,i._orig),this._writePosAttr(p,i),this.engine.addNode(i)):this._writePosAttr(p,i),this._gsEventHandler[m.type]&&this._gsEventHandler[m.type](m,p);this._extraDragRow=0,this._updateContainerHeight(),this._triggerChangeEvent(),this.engine.endUpdate(),m.type==="resizestop"&&(Number.isInteger(i.sizeToContent)&&(i.sizeToContent=i.h),this.resizeToContentCheck(g,i))}};H.draggable(e,{start:c,stop:h,drag:d}).resizable(e,{start:c,stop:h,resize:d}),i._initDD=!0}return H.draggable(e,s?"disable":"enable").resizable(e,n?"disable":"enable"),this}_onStartMoving(e,t,i,s,n,l){if(this.engine.cleanNodes().beginUpdate(s),this._writePosAttr(this.placeholder,s),this.el.appendChild(this.placeholder),this.placeholder.gridstackNode=s,s.grid?.el)this.dragTransform=f.getValuesFromTransformedElement(e);else if(this.placeholder&&this.placeholder.closest(".grid-stack")){const a=this.placeholder.closest(".grid-stack");this.dragTransform=f.getValuesFromTransformedElement(a)}else this.dragTransform={xScale:1,xOffset:0,yScale:1,yOffset:0};if(s.el=this.placeholder,s._lastUiPosition=i.position,s._prevYPix=i.position.top,s._moving=t.type==="dragstart",delete s._lastTried,t.type==="dropover"&&s._temporaryRemoved&&(this.engine.addNode(s),s._moving=!0),this.engine.cacheRects(n,l,this.opts.marginTop,this.opts.marginRight,this.opts.marginBottom,this.opts.marginLeft),t.type==="resizestart"){const a=this.getColumn()-s.x,u=(this.opts.maxRow||Number.MAX_SAFE_INTEGER)-s.y;H.resizable(e,"option","minWidth",n*Math.min(s.minW||1,a)).resizable(e,"option","minHeight",l*Math.min(s.minH||1,u)).resizable(e,"option","maxWidth",n*Math.min(s.maxW||Number.MAX_SAFE_INTEGER,a)).resizable(e,"option","maxWidthMoveLeft",n*Math.min(s.maxW||Number.MAX_SAFE_INTEGER,s.x+s.w)).resizable(e,"option","maxHeight",l*Math.min(s.maxH||Number.MAX_SAFE_INTEGER,u)).resizable(e,"option","maxHeightMoveUp",l*Math.min(s.maxH||Number.MAX_SAFE_INTEGER,s.y+s.h))}}_dragOrResize(e,t,i,s,n,l){const a={...s._orig};let u,c=this.opts.marginLeft,d=this.opts.marginRight,h=this.opts.marginTop,m=this.opts.marginBottom;const g=Math.round(l*.1),p=Math.round(n*.1);if(c=Math.min(c,p),d=Math.min(d,p),h=Math.min(h,g),m=Math.min(m,g),t.type==="drag"){if(s._temporaryRemoved)return;const y=i.position.top-s._prevYPix;s._prevYPix=i.position.top,this.opts.draggable.scroll!==!1&&f.updateScrollPosition(e,i.position,y);const k=i.position.left+(i.position.left>s._lastUiPosition.left?-d:c),E=i.position.top+(i.position.top>s._lastUiPosition.top?-m:h);a.x=Math.round(k/n),a.y=Math.round(E/l);const w=this._extraDragRow;if(this.engine.collide(s,a)){const M=this.getRow();let T=Math.max(0,a.y+s.h-M);this.opts.maxRow&&M+T>this.opts.maxRow&&(T=Math.max(0,this.opts.maxRow-M)),this._extraDragRow=T}else this._extraDragRow=0;if(this._extraDragRow!==w&&this._updateContainerHeight(),s.x===a.x&&s.y===a.y)return}else if(t.type==="resize"){if(a.x<0||(f.updateScrollResize(t,e,l),a.w=Math.round((i.size.width-c)/n),a.h=Math.round((i.size.height-h)/l),s.w===a.w&&s.h===a.h)||s._lastTried&&s._lastTried.w===a.w&&s._lastTried.h===a.h)return;const y=i.position.left+c,k=i.position.top+h;a.x=Math.round(y/n),a.y=Math.round(k/l),u=!0}s._event=t,s._lastTried=a;const b={x:i.position.left+c,y:i.position.top+h,w:(i.size?i.size.width:s.w*n)-c-d,h:(i.size?i.size.height:s.h*l)-h-m};if(this.engine.moveNodeCheck(s,{...a,cellWidth:n,cellHeight:l,rect:b,resizing:u})){s._lastUiPosition=i.position,this.engine.cacheRects(n,l,h,d,m,c),delete s._skipDown,u&&s.subGrid&&s.subGrid.onResize(),this._extraDragRow=0,this._updateContainerHeight();const y=t.target;s._sidebarOrig||this._writePosAttr(y,s),this._gsEventHandler[t.type]&&this._gsEventHandler[t.type](t,y)}}_leave(e,t){t=t||e;const i=t.gridstackNode;if(!i||(t.style.transform=t.style.transformOrigin=null,H.off(e,"drag"),i._temporaryRemoved))return;i._temporaryRemoved=!0,this.engine.removeNode(i),i.el=i._isExternal&&t?t:e;const s=i._sidebarOrig;i._isExternal&&this.engine.cleanupNode(i),i._sidebarOrig=s,this.opts.removable===!0&&_._itemRemoving(e,!0),e._gridstackNodeOrig?(e.gridstackNode=e._gridstackNodeOrig,delete e._gridstackNodeOrig):i._isExternal&&this.engine.restoreInitial()}commit(){return $s(this,this.batchUpdate(!1),"commit","batchUpdate","5.2"),this}}_.renderCB=(r,e)=>{r&&e?.content&&(r.textContent=e.content)},_.resizeToContentParent=".grid-stack-item-content",_.Utils=f,_.Engine=Z,_.GDRev="11.5.1";const Ys=["data-id","data-testid","gs-h","gs-w","gs-x","gs-y"],Ks={class:"grid-stack-item-content"},js=ae(o.defineComponent({__name:"DraggableGridLayout",props:{tiles:{},tileHeight:{default:fe},columns:{default:Ce}},emits:["update-tiles"],setup(r,{expose:e,emit:t}){const i=r,s=t,n=o.ref(null),l=o.ref(new Map(i.tiles.map(g=>[`${g.id}`,g])));let a=null;const u=g=>`[data-id="${g}"]`,c=g=>g.map(p=>{const b=l.value.get(`${p.el?.getAttribute("data-id")}`);if(b)return{...b,layout:{position:{col:Number(p.x),row:Number(p.y)},size:{cols:Number(p.w),rows:Number(p.h)}}}}).filter(p=>p!==void 0),d=(g,p)=>{a&&(c(p).forEach(y=>{l.value.set(`${y.id}`,y)}),s("update-tiles",Array.from(l.value.values())))},h=(g,p)=>{p.forEach(b=>{l.value.delete(`${b.el?.getAttribute("data-id")}`)}),s("update-tiles",Array.from(l.value.values()))};o.onMounted(()=>{n.value&&(a=_.init({margin:10,column:i.columns,cellHeight:i.tileHeight,resizable:{handles:"se, sw"},handle:".tile-header"},n.value),a.on("change",d),a.on("added",d),a.on("removed",h))}),o.onUnmounted(()=>{a&&a.destroy(!1)});const m=g=>{if(a&&n.value){const p=n.value.querySelector(u(g));p&&a.removeWidget(p)}};return o.watch(()=>i.tiles.length,async(g,p)=>{if(g>p&&a){const b=i.tiles.slice(p);for(const y of b)l.value.set(`${y.id}`,y),await o.nextTick(),a.makeWidget(u(y.id),{autoPosition:!0,w:y.layout.size.cols,h:y.layout.size.rows})}}),o.watchEffect(()=>{i.tiles.forEach(g=>{l.value.set(`${g.id}`,g)})}),e({removeWidget:m}),(g,p)=>(o.openBlock(),o.createElementBlock("div",{ref_key:"gridContainer",ref:n,class:"grid-stack"},[(o.openBlock(!0),o.createElementBlock(o.Fragment,null,o.renderList(i.tiles,b=>(o.openBlock(),o.createElementBlock("div",{key:b.id,class:"grid-stack-item","data-id":`${b.id}`,"data-testid":`grid-stack-item-${b.id}`,"gs-h":b.layout.size.rows,"gs-lazy-load":!0,"gs-w":b.layout.size.cols,"gs-x":b.layout.position.col,"gs-y":b.layout.position.row},[o.createElementVNode("div",Ks,[o.renderSlot(g.$slots,"tile",{tile:b},void 0,!0)])],8,Ys))),128))],512))}}),[["__scopeId","data-v-1fdec94c"]]),Qs=r=>{const e={...r.meta,chart:{...r.meta.chart}};return"chart_title"in e.chart&&(e.chart.chart_title=e.chart.chart_title?`Copy of ${e.chart.chart_title}`:""),{id:crypto.randomUUID(),type:"chart",definition:e,layout:{position:{col:0,row:0},size:r.layout.size}}},Xs={key:0,class:"fullscreen-header"},Zs={key:0,class:"tile-container slottable-tile"},Js=ae(o.defineComponent({__name:"DashboardRenderer",props:o.mergeModels({context:{},preview:{type:Boolean,default:!1}},{modelValue:{required:!0},modelModifiers:{}}),emits:o.mergeModels(["edit-tile","tile-time-range-zoom","tiles-loaded"],["update:modelValue"]),setup(r,{expose:e,emit:t}){o.useCssVars(R=>({v021bbed1:d.value}));const i=t,s=o.useModel(r,"modelValue"),{i18n:n}=W.useI18n(),l=o.ref(0),a=o.ref(null),u=o.ref(),c=o.ref(),d=o.ref("scale(1)"),h=new Set,m=o.inject(X);m||(console.warn("Analytics dashboards require a query bridge supplied via provide / inject."),console.warn("Please ensure your application has a query bridge provided under the key 'analytics-query-provider', as described in"),console.warn("https://github.com/Kong/public-ui-components/blob/main/packages/analytics/dashboard-renderer/README.md#requirements")),W.useRequestQueue();const{exportPdf:g,exportState:p}=W.useExportPdf(c),b=R=>{h.add(R.id);const S=k.value.filter(A=>!w(A)).length;h.size>=S&&i("tiles-loaded",!0)},y=(R,S)=>{const A=R.layout.position.row-S.layout.position.row;return A!==0?A:R.layout.position.col-S.layout.position.col},k=o.computed(()=>s.value.tiles.map(R=>{let S=R.definition;const A=R.type??"chart",z=S.chart;if(A==="chart"&&"description"in z){const P=S,Q=z.description?.replace(Qe,()=>{const{timeSpec:se}=j.value,Le=`renderer.trendRange.${se.type==="absolute"?"custom":se.time_range}`;return n.te(Le)?n.t(Le):""});S={...P,chart:{...z,description:Q}}}return j.value.editable&&!R.id&&console.warn("No id provided for tile. One will be generated automatically,","however tracking changes to this tile may not work as expected.",R),{layout:R.layout,meta:S,type:A,id:R.id??crypto.randomUUID()}})),E=R=>{i("edit-tile",R)},w=R=>R.type==="chart"&&R.meta.chart.type==="slottable",M=R=>R.type==="slottable",T=R=>{const S=R.meta.chart;return M(S)?S.id:void 0},Y=R=>{try{const S=Qs(R);s.value.tiles.push(JSON.parse(JSON.stringify(S)))}catch(S){console.warn(S)}},te=R=>{a.value&&a.value.removeWidget(R.id),h.delete(R.id)},ee=()=>{h.clear(),l.value++},K=R=>{const S=R.map(A=>({id:A.id,type:A.type,layout:A.layout,definition:A.meta}));s.value.tiles=S.sort(y)},x=async()=>{if(d.value="scale(1)",await o.nextTick(),c.value){const{availWidth:R,availHeight:S}=window.screen,{width:A,height:z}=c.value.getBoundingClientRect(),P=Math.min(S/z,R/A);d.value=`scale(${P})`}},q=()=>{u.value&&(document.fullscreenElement?document.exitFullscreen():u.value.requestFullscreen())},L=o.ref(!1),F=()=>{L.value=document.fullscreenElement!==null,L.value&&x()},ie=o.computed(()=>s.value.preset_filters??[]),{internalContext:j,queryReady:ge}=W.useDashboardInternalContext({globalFilters:ie,context:o.computed(()=>r.context),isFullscreen:L,preview:o.computed(()=>r.preview)});return e({refresh:ee,toggleFullscreen:q,exportPdf:g,pdfExportState:p}),(R,S)=>{const A=o.resolveComponent("KAlert");return o.openBlock(),o.createElementBlock("div",{ref_key:"dashboardContainer",ref:u,class:o.normalizeClass(["kong-ui-public-dashboard-renderer",{"is-fullscreen":L.value}]),onFullscreenchange:F},[o.createElementVNode("div",{ref_key:"layoutContainer",ref:c,class:"layout"},[o.unref(m)&&L.value?(o.openBlock(),o.createElementBlock("div",Xs,[o.renderSlot(R.$slots,"fullscreenHeader",{},void 0,!0)])):o.createCommentVNode("",!0),o.unref(m)?(o.openBlock(),o.createBlock(o.resolveDynamicComponent(o.unref(j).editable&&!L.value?js:Ot),{key:2,ref_key:"gridLayoutRef",ref:a,columns:s.value.columns,"tile-height":s.value.tile_height,tiles:k.value,onUpdateTiles:K},{tile:o.withCtx(({tile:z})=>[w(z)?(o.openBlock(),o.createElementBlock("div",Zs,[o.renderSlot(R.$slots,T(z),{},void 0,!0)])):(o.openBlock(),o.createBlock(Nt,{key:L.value?`${z.id}-tile`:`${z.id}-tile-fullscreen`,"refresh-counter":l.value,"onUpdate:refreshCounter":S[0]||(S[0]=P=>l.value=P),class:"tile-container",context:o.unref(j),definition:z.meta,height:z.layout.size.rows*(s.value.tile_height||o.unref(fe))+parseInt(o.unref(Dt),10),"hide-actions":!o.unref(j).showTileActions,"hide-zoom-actions":!o.unref(j).showTileZoomActions,"is-fullscreen":L.value,"query-ready":o.unref(ge),"tile-id":z.id,"tile-type":z.type,onDuplicateTile:P=>Y(z),onEditTile:P=>E(z),onRemoveTile:P=>te(z),onTileLoaded:P=>b(z),onTileTimeRangeZoom:S[1]||(S[1]=P=>i("tile-time-range-zoom",P))},null,8,["refresh-counter","context","definition","height","hide-actions","hide-zoom-actions","is-fullscreen","query-ready","tile-id","tile-type","onDuplicateTile","onEditTile","onRemoveTile","onTileLoaded"]))]),_:3},40,["columns","tile-height","tiles"])):(o.openBlock(),o.createBlock(A,{key:1,appearance:"danger"},{default:o.withCtx(()=>[o.createTextVNode(o.toDisplayString(o.unref(n).t("renderer.noQueryBridge")),1)]),_:1}))],512)],34)}}}),[["__scopeId","data-v-f028130a"]]),en=o.defineComponent({__name:"DashboardTilePreview",props:{context:{},definition:{},globalFilters:{default:()=>[]},preview:{type:Boolean,default:!1}},emits:["chart-data","tile-time-range-zoom","tile-bounds-change"],setup(r,{expose:e,emit:t}){const i=o.useTemplateRef("root"),s=o.useTemplateRef("dashboard-tile"),n=crypto.randomUUID(),l=t,a=w=>{l("tile-time-range-zoom",w)},u=w=>{l("chart-data",w)},c=w=>{l("tile-bounds-change",w)},{i18n:d}=W.useI18n(),{internalContext:h,queryReady:m}=W.useDashboardInternalContext({globalFilters:o.toRef(()=>r.globalFilters),context:o.toRef(()=>r.context),preview:o.computed(()=>r.preview)}),g=o.computed(()=>G(r.definition)),p=o.computed(()=>g.value?"columns"in r.definition.query&&!r.definition.query.columns?.length:!("metrics"in r.definition.query)||!r.definition.query.metrics||r.definition.query.metrics.length===0),b=o.ref(fe);let y;o.onMounted(()=>{const w=i.value?.parentElement;w&&(b.value=w.getBoundingClientRect().height,y=new ResizeObserver(([M])=>{const{height:T}=M.contentRect;b.value=T}),y.observe(w))}),o.onUnmounted(()=>y?.disconnect());const k=o.ref(0);return e({refresh:()=>{k.value++},getExportData:()=>s.value?.getExportData()}),(w,M)=>{const T=o.resolveComponent("KEmptyState");return o.openBlock(),o.createElementBlock("div",{ref_key:"root",ref:i,"data-testid":"dashboard-tile-preview-root"},[p.value?(o.openBlock(),o.createBlock(T,{key:0,"action-button-visible":!1,"data-testid":"chart-not-configured-empty-state"},{title:o.withCtx(()=>[o.createElementVNode("p",null,o.toDisplayString(o.unref(d).t("renderer.not_configured.title")),1)]),default:o.withCtx(()=>[o.createElementVNode("p",null,o.toDisplayString(o.unref(d).t("renderer.not_configured.description")),1)]),_:1})):(o.openBlock(),o.createBlock(Nt,{key:1,ref:"dashboard-tile","refresh-counter":k.value,"onUpdate:refreshCounter":M[0]||(M[0]=Y=>k.value=Y),context:{...o.unref(h),editable:!1},definition:r.definition,height:b.value,"hide-actions":"","query-ready":o.unref(m),"show-refresh":"","tile-id":o.unref(n),onChartData:u,onTileBoundsChange:c,onTileTimeRangeZoom:a},null,8,["refresh-counter","context","definition","height","query-ready","tile-id"]))],512)}}}),tn=r=>{const e=r.definition?.query;if(!e)return r;if(e.datasource==="api_usage"){console.warn("[@kong-ui-public/dashboard-renderer] A tile was filtered out for the Basic Tier",r);return}return r},sn=r=>{if(G(r.definition))return r;const e=r.definition?.query;if(!e)return r;const t={...e,datasource:e.datasource==="basic"?"api_usage":e.datasource};return{...r,definition:{...r.definition,query:t}}},nn=(r,e=Ce)=>{if(!r.length)return[];let t=0,i=0,s=0;const n=[];for(const l of r){const a=l.layout?.size?.cols??1,u=l.layout?.size?.rows??1;i+a>e&&(t+=s,i=0,s=0);const c={...l,layout:{...l.layout,position:{...l.layout?.position??{},col:i,row:t}}};n.push(c),i+=a,s=Math.max(s,u)}return n},rn=(r,e)=>{if(e){const s=r.tiles.map(sn);return{...r,tiles:s}}const t=r.tiles.map(tn).filter(s=>s!==void 0),i=nn(t,r.columns);return{...r,tiles:i}},on=Object.freeze(Object.defineProperty({__proto__:null,default:o.defineComponent({__name:"GeoMapRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},emits:["bounds-change"],setup(r,{emit:e}){const t=r,i=o.ref(void 0),s=o.computed(()=>i.value?Ve.exploreResultToCountryMetrics(i.value):{}),n=o.computed(()=>i.value?i.value?.meta.metric_names&&i.value.meta.metric_names[0]:""),l=o.computed(()=>t.query.limit!==void 0&&t.query.limit>0?t.query.limit:I.COUNTRIES.length),a=o.computed(()=>{if(!t.query.filters?.find(({field:g,operator:p})=>g==="country_code"&&(p==="not_empty"||p==="empty"||p==="in"))){const g={field:"country_code",operator:"not_empty"};return{...t.query,filters:[...t.query.filters||[],g]}}return t.query}),u=o.computed(()=>{if(!i.value)return"";const m=i?.value?.meta.metric_units,g=i?.value?.meta?.metric_names;return m&&g&&m[g[0]]}),c=m=>{i.value=m},d=e,h=m=>{d("bounds-change",m)};return(m,g)=>(o.openBlock(),o.createBlock(Te,{context:r.context,"limit-override":l.value,query:a.value,"query-ready":r.queryReady,"refresh-counter":r.refreshCounter,onChartData:c},{default:o.withCtx(()=>[o.createVNode(o.unref(Ve.AnalyticsGeoMap),{bounds:r.chartOptions.bounds,"country-metrics":s.value,"fit-to-country":r.chartOptions.fit_to_country,metric:n.value,"metric-unit":u.value,"with-legend":r.chartOptions.legend||!1,onBoundsChange:h},null,8,["bounds","country-metrics","fit-to-country","metric","metric-unit","with-legend"])]),_:1},8,["context","limit-override","query","query-ready","refresh-counter"]))}})},Symbol.toStringTag,{value:"Module"}));D.CP_ID_TOKEN=je,D.DASHBOARD_COLS=Ce,D.DEFAULT_TILE_HEIGHT=fe,D.DEFAULT_TILE_REFRESH_INTERVAL_MS=Xe,D.DashboardRenderer=Js,D.DashboardTilePreview=en,D.ENTITY_ID_TOKEN=qe,D.FULLSCREEN_LONG_REFRESH_INTERVAL_MS=Je,D.FULLSCREEN_SHORT_REFRESH_INTERVAL_MS=Ze,D.GridLayout=Ot,D.INJECT_QUERY_PROVIDER=X,D.TIMEFRAME_TOKEN=Qe,D.configureAllowedDefinition=rn,Object.defineProperty(D,Symbol.toStringTag,{value:"Module"})}));
1
+ (function(D,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("vue"),require("@kong-ui-public/analytics-utilities"),require("@kong-ui-public/analytics-chart"),require("@kong-ui-public/analytics-metric-provider"),require("@kong-ui-public/table-data-grid"),require("@kong-ui-public/analytics-config-store"),require("@kong/icons"),require("swrv"),require("axios"),require("@kong-ui-public/i18n"),require("@kong-ui-public/analytics-geo-map")):typeof define=="function"&&define.amd?define(["exports","vue","@kong-ui-public/analytics-utilities","@kong-ui-public/analytics-chart","@kong-ui-public/analytics-metric-provider","@kong-ui-public/table-data-grid","@kong-ui-public/analytics-config-store","@kong/icons","swrv","axios","@kong-ui-public/i18n","@kong-ui-public/analytics-geo-map"],n):(D=typeof globalThis<"u"?globalThis:D||self,n(D["kong-ui-public-dashboard-renderer"]={},D.Vue,D["kong-ui-public-analytics-utilities"],D["kong-ui-public-analytics-chart"],D["kong-ui-public-analytics-metric-provider"],D["kong-ui-public-table-data-grid"],D["kong-ui-public-analytics-config-store"],D.KongIcons,D.swrv,D.axios,D["kong-ui-public-i18n"],D["kong-ui-public-analytics-geo-map"]))})(this,(function(D,n,M,he,Le,pt,ie,re,yt,Ki,Ae,Oe){"use strict";var qe=(l=>(l.VALIDATING="VALIDATING",l.VALIDATING_HAS_DATA="VALIDATING_HAS_DATA",l.PENDING="PENDING",l.SUCCESS="SUCCESS",l.SUCCESS_HAS_DATA="SUCCESS_HAS_DATA",l.ERROR="ERROR",l.STALE_IF_ERROR="STALE_IF_ERROR",l))(qe||{});const _t=l=>l?!!(Object.keys(l)?.length||l.data?.length||l.data?.data?.length||!l.data?.data&&typeof l.data=="object"&&Object.keys(l?.data).length):!1;function bt(l=n.ref({}),e,t,i=_t){const s=n.ref("PENDING");return n.watchEffect(()=>{const r=i(l.value);if(l.value&&r&&t.value){s.value="VALIDATING_HAS_DATA";return}if(l.value&&t.value){s.value="VALIDATING";return}if(l.value&&e.value){s.value="STALE_IF_ERROR";return}if(l.value===void 0&&!e.value){s.value="PENDING";return}if(l.value&&!e.value&&r){s.value="SUCCESS_HAS_DATA";return}if(l.value&&!e.value){s.value="SUCCESS";return}l.value===void 0&&e&&(s.value="ERROR")}),{state:s,swrvState:qe}}const vt={renderer:{not_configured:{title:"Chart is not fully configured",description:"Begin by choosing at least one metric"},noQueryBridge:"No query bridge provided. Unable to render dashboard.",unexpectedError:"An unexpected error has occurred.",trendRange:{"24h":"Last 24-hour summary","7d":"Last 7-day summary","30d":"Last 30-day summary"},edit:"Edit",duplicateTile:"Duplicate",exit_fullscreen:"Exit fullscreen",fullscreen:"Fullscreen",remove:"Remove",delete:"Delete",as_of_today:"As of today"},pdfExport:{branding:"Kong Konnect",generated:"Generated {timestamp}",dashboardNote:"For a live, interactive experience, open this dashboard in Konnect",pageOf:"{page} / {total}"},csvExport:{defaultFilename:"Chart export",exportAsCsv:"Export as CSV"},chartLabels:{control_plane:"Control plane",data_plane_node_version:"Data plane node version",env:"Environment",gateway_service:"Gateway service",hostname:"Hostname",plugin:"Plugin",plugin_name:"Plugin name",plugin_scope:"Plugin scope",region:"Region",request_count:"Request count",route:"Route",status_code:"Status code",team:"Team",name:"Name"},jumpToExplore:"Explore",jumpToRequests:"View requests",query_aged_out_warning:"This tile was configured with {savedGranularity} granularity, which is no longer available. It now shows {currentGranularity} data, the closest available granularity.",granularities:{daily:"1 day",fiveMinutely:"5 minutes",hourly:"1 hour",minutely:"1 minute",tenMinutely:"10 minutes",tenSecondly:"10 seconds",thirtyMinutely:"30 minutes",thirtySecondly:"30 seconds",twelveHourly:"12 hours",twoHourly:"2 hours",weekly:"1 week",unknown:"Unknown"}};function He(){const l=Ae.createI18n("en-us",vt);return{i18n:l,i18nT:Ae.i18nTComponent(l)}}const le=170,ge=6,j="analytics-query-provider",Ce="{entity-id}",Be="{cp-id}",Ie="{timeframe}",Me=30*1e3,Pe=3e5,$e=36e5;function wt(){const l=n.inject(j);return{evaluateFeatureFlag:(t,i)=>l?l.evaluateFeatureFlagFn(t,i):i}}function Et(l){return l&&l.__esModule&&Object.prototype.hasOwnProperty.call(l,"default")?l.default:l}var ke={exports:{}},Fe;function xt(){return Fe||(Fe=1,(function(l){var e=Object.prototype.hasOwnProperty,t="~";function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(t=!1));function s(h,c,d){this.fn=h,this.context=c,this.once=d||!1}function r(h,c,d,u,m){if(typeof d!="function")throw new TypeError("The listener must be a function");var g=new s(d,u||h,m),p=t?t+c:c;return h._events[p]?h._events[p].fn?h._events[p]=[h._events[p],g]:h._events[p].push(g):(h._events[p]=g,h._eventsCount++),h}function a(h,c){--h._eventsCount===0?h._events=new i:delete h._events[c]}function o(){this._events=new i,this._eventsCount=0}o.prototype.eventNames=function(){var c=[],d,u;if(this._eventsCount===0)return c;for(u in d=this._events)e.call(d,u)&&c.push(t?u.slice(1):u);return Object.getOwnPropertySymbols?c.concat(Object.getOwnPropertySymbols(d)):c},o.prototype.listeners=function(c){var d=t?t+c:c,u=this._events[d];if(!u)return[];if(u.fn)return[u.fn];for(var m=0,g=u.length,p=new Array(g);m<g;m++)p[m]=u[m].fn;return p},o.prototype.listenerCount=function(c){var d=t?t+c:c,u=this._events[d];return u?u.fn?1:u.length:0},o.prototype.emit=function(c,d,u,m,g,p){var _=t?t+c:c;if(!this._events[_])return!1;var y=this._events[_],k=arguments.length,E,b;if(y.fn){switch(y.once&&this.removeListener(c,y.fn,void 0,!0),k){case 1:return y.fn.call(y.context),!0;case 2:return y.fn.call(y.context,d),!0;case 3:return y.fn.call(y.context,d,u),!0;case 4:return y.fn.call(y.context,d,u,m),!0;case 5:return y.fn.call(y.context,d,u,m,g),!0;case 6:return y.fn.call(y.context,d,u,m,g,p),!0}for(b=1,E=new Array(k-1);b<k;b++)E[b-1]=arguments[b];y.fn.apply(y.context,E)}else{var L=y.length,T;for(b=0;b<L;b++)switch(y[b].once&&this.removeListener(c,y[b].fn,void 0,!0),k){case 1:y[b].fn.call(y[b].context);break;case 2:y[b].fn.call(y[b].context,d);break;case 3:y[b].fn.call(y[b].context,d,u);break;case 4:y[b].fn.call(y[b].context,d,u,m);break;default:if(!E)for(T=1,E=new Array(k-1);T<k;T++)E[T-1]=arguments[T];y[b].fn.apply(y[b].context,E)}}return!0},o.prototype.on=function(c,d,u){return r(this,c,d,u,!1)},o.prototype.once=function(c,d,u){return r(this,c,d,u,!0)},o.prototype.removeListener=function(c,d,u,m){var g=t?t+c:c;if(!this._events[g])return this;if(!d)return a(this,g),this;var p=this._events[g];if(p.fn)p.fn===d&&(!m||p.once)&&(!u||p.context===u)&&a(this,g);else{for(var _=0,y=[],k=p.length;_<k;_++)(p[_].fn!==d||m&&!p[_].once||u&&p[_].context!==u)&&y.push(p[_]);y.length?this._events[g]=y.length===1?y[0]:y:a(this,g)}return this},o.prototype.removeAllListeners=function(c){var d;return c?(d=t?t+c:c,this._events[d]&&a(this,d)):(this._events=new i,this._eventsCount=0),this},o.prototype.off=o.prototype.removeListener,o.prototype.addListener=o.prototype.on,o.prefixed=t,o.EventEmitter=o,l.exports=o})(ke)),ke.exports}var Ct=xt();const kt=Et(Ct);class Ge extends Error{constructor(e){super(e),this.name="TimeoutError"}}class Rt extends Error{constructor(e){super(),this.name="AbortError",this.message=e}}const Ue=l=>globalThis.DOMException===void 0?new Rt(l):new DOMException(l),We=l=>{const e=l.reason===void 0?Ue("This operation was aborted."):l.reason;return e instanceof Error?e:Ue(e)};function Tt(l,e){const{milliseconds:t,fallback:i,message:s,customTimers:r={setTimeout,clearTimeout}}=e;let a,o;const c=new Promise((d,u)=>{if(typeof t!="number"||Math.sign(t)!==1)throw new TypeError(`Expected \`milliseconds\` to be a positive number, got \`${t}\``);if(e.signal){const{signal:g}=e;g.aborted&&u(We(g)),o=()=>{u(We(g))},g.addEventListener("abort",o,{once:!0})}if(t===Number.POSITIVE_INFINITY){l.then(d,u);return}const m=new Ge;a=r.setTimeout.call(void 0,()=>{if(i){try{d(i())}catch(g){u(g)}return}typeof l.cancel=="function"&&l.cancel(),s===!1?d():s instanceof Error?u(s):(m.message=s??`Promise timed out after ${t} milliseconds`,u(m))},t),(async()=>{try{d(await l)}catch(g){u(g)}})()}).finally(()=>{c.clear(),o&&e.signal&&e.signal.removeEventListener("abort",o)});return c.clear=()=>{r.clearTimeout.call(void 0,a),a=void 0},c}function St(l,e,t){let i=0,s=l.length;for(;s>0;){const r=Math.trunc(s/2);let a=i+r;t(l[a],e)<=0?(i=++a,s-=r+1):s=r}return i}class Dt{#e=[];enqueue(e,t){t={priority:0,...t};const i={priority:t.priority,id:t.id,run:e};if(this.size===0||this.#e[this.size-1].priority>=t.priority){this.#e.push(i);return}const s=St(this.#e,i,(r,a)=>a.priority-r.priority);this.#e.splice(s,0,i)}setPriority(e,t){const i=this.#e.findIndex(r=>r.id===e);if(i===-1)throw new ReferenceError(`No promise function with the id "${e}" exists in the queue.`);const[s]=this.#e.splice(i,1);this.enqueue(s.run,{priority:t,id:e})}dequeue(){return this.#e.shift()?.run}filter(e){return this.#e.filter(t=>t.priority===e.priority).map(t=>t.run)}get size(){return this.#e.length}}class zt extends kt{#e;#o;#n=0;#f;#a;#m=0;#i;#l;#t;#g;#s=0;#c;#r;#p;#b=1n;timeout;constructor(e){if(super(),e={carryoverConcurrencyCount:!1,intervalCap:Number.POSITIVE_INFINITY,interval:0,concurrency:Number.POSITIVE_INFINITY,autoStart:!0,queueClass:Dt,...e},!(typeof e.intervalCap=="number"&&e.intervalCap>=1))throw new TypeError(`Expected \`intervalCap\` to be a number from 1 and up, got \`${e.intervalCap?.toString()??""}\` (${typeof e.intervalCap})`);if(e.interval===void 0||!(Number.isFinite(e.interval)&&e.interval>=0))throw new TypeError(`Expected \`interval\` to be a finite number >= 0, got \`${e.interval?.toString()??""}\` (${typeof e.interval})`);this.#e=e.carryoverConcurrencyCount,this.#o=e.intervalCap===Number.POSITIVE_INFINITY||e.interval===0,this.#f=e.intervalCap,this.#a=e.interval,this.#t=new e.queueClass,this.#g=e.queueClass,this.concurrency=e.concurrency,this.timeout=e.timeout,this.#p=e.throwOnTimeout===!0,this.#r=e.autoStart===!1}get#v(){return this.#o||this.#n<this.#f}get#w(){return this.#s<this.#c}#E(){this.#s--,this.#d(),this.emit("next")}#x(){this.#_(),this.#y(),this.#l=void 0}get#C(){const e=Date.now();if(this.#i===void 0){const t=this.#m-e;if(t<0)this.#n=this.#e?this.#s:0;else return this.#l===void 0&&(this.#l=setTimeout(()=>{this.#x()},t)),!0}return!1}#d(){if(this.#t.size===0)return this.#i&&clearInterval(this.#i),this.#i=void 0,this.emit("empty"),this.#s===0&&this.emit("idle"),!1;if(!this.#r){const e=!this.#C;if(this.#v&&this.#w){const t=this.#t.dequeue();return t?(this.emit("active"),t(),e&&this.#y(),!0):!1}}return!1}#y(){this.#o||this.#i!==void 0||(this.#i=setInterval(()=>{this.#_()},this.#a),this.#m=Date.now()+this.#a)}#_(){this.#n===0&&this.#s===0&&this.#i&&(clearInterval(this.#i),this.#i=void 0),this.#n=this.#e?this.#s:0,this.#h()}#h(){for(;this.#d(););}get concurrency(){return this.#c}set concurrency(e){if(!(typeof e=="number"&&e>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${e}\` (${typeof e})`);this.#c=e,this.#h()}async#k(e){return new Promise((t,i)=>{e.addEventListener("abort",()=>{i(e.reason)},{once:!0})})}setPriority(e,t){this.#t.setPriority(e,t)}async add(e,t={}){return t.id??=(this.#b++).toString(),t={timeout:this.timeout,throwOnTimeout:this.#p,...t},new Promise((i,s)=>{this.#t.enqueue(async()=>{this.#s++;try{t.signal?.throwIfAborted(),this.#n++;let r=e({signal:t.signal});t.timeout&&(r=Tt(Promise.resolve(r),{milliseconds:t.timeout})),t.signal&&(r=Promise.race([r,this.#k(t.signal)]));const a=await r;i(a),this.emit("completed",a)}catch(r){if(r instanceof Ge&&!t.throwOnTimeout){i();return}s(r),this.emit("error",r)}finally{this.#E()}},t),this.emit("add"),this.#d()})}async addAll(e,t){return Promise.all(e.map(async i=>this.add(i,t)))}start(){return this.#r?(this.#r=!1,this.#h(),this):this}pause(){this.#r=!0}clear(){this.#t=new this.#g}async onEmpty(){this.#t.size!==0&&await this.#u("empty")}async onSizeLessThan(e){this.#t.size<e||await this.#u("next",()=>this.#t.size<e)}async onIdle(){this.#s===0&&this.#t.size===0||await this.#u("idle")}async#u(e,t){return new Promise(i=>{const s=()=>{t&&!t()||(this.off(e,s),i())};this.on(e,s)})}get size(){return this.#t.size}sizeBy(e){return this.#t.filter(e).length}get pending(){return this.#s}get isPaused(){return this.#r}}const Nt=()=>{const l=ie.useAnalyticsConfigStore(),e=n.inject(j);if(!e)return;if(e.queryFnOverride){console.warn("Detected incorrect use of useRequestQueue. This composable should not be used in nested components. Please discuss with team-data or report an issue if you feel you have a use case.");return}const t=new zt({carryoverConcurrencyCount:!0,concurrency:l.maxParallelRequests,interval:l.requestInterval,intervalCap:l.requestIntervalCap}),i={...e,queryFnOverride:!0,queryFn:(s,r)=>t.add(()=>e.queryFn(s,r),{throwOnTimeout:!0})};n.provide(j,i)};const Lt=typeof window<"u";let Ve;process.env.NODE_ENV;const Ke=process.env.NODE_ENV!=="production"?Symbol("pinia"):Symbol();var je;(function(l){l.direct="direct",l.patchObject="patch object",l.patchFunction="patch function"})(je||(je={})),process.env.NODE_ENV;function ue(l){const e=n.toRaw(l),t={};for(const i in e){const s=e[i];s.effect?t[i]=n.computed({get:()=>l[i],set(r){l[i]=r}}):(n.isRef(s)||n.isReactive(s))&&(t[i]=n.toRef(l,i))}return t}const G=l=>l?.chart.type==="table",At=["basic","api_usage","llm_usage","agentic_usage","platform","platform_usage",void 0],Ot=l=>At.includes(l);function qt({queryBridge:l,context:e,definition:t,chartData:i}){const s=n.ref(""),r=n.ref(""),a=n.ref(void 0),o=n.ref(void 0),h=ie.useAnalyticsConfigStore(),c=ie.useDatasourceConfigStore(),{stripUnknownFilters:d,loading:u}=ue(c),m=n.computed(()=>G(t.value));n.onMounted(async()=>{s.value=await l?.exploreBaseUrl?.()??"",r.value=await l?.requestsBaseUrl?.()??""});const g=n.computed(()=>h.analytics&&h.percentiles),p=n.computed(()=>{const x=t.value.chart.type;return["golden_signals","gauge"].includes(x)?!1:x==="top_n"?e.value.editable||e.value.showTileActions:!0}),_=n.computed(()=>r.value&&t.value.query&&!m.value&&t.value.query.datasource!=="llm_usage"&&!M.isPlatformDatasource(t.value.query.datasource)&&g.value&&!u.value),y=n.computed(()=>s.value&&t.value.query&&Ot(t.value.query.datasource)&&g.value&&!u.value),k=n.computed(()=>i.value?M.msToGranularity(i.value.meta.granularity_ms):void 0),E=n.computed(()=>{const x=t.value,O=[...e.value.filters,...x.query.filters??[]],A="metrics"in x.query?x.query.metrics:void 0,P=x.query?.datasource??"api_usage";return d.value({datasource:P,filters:O,queryFields:A})}),b=n.computed(()=>{if(!y.value||!p.value)return"";const x=t.value;if(G(x))return Z({...x.query,filters:E.value});const O=x.query.time_range||e.value.timeSpec,A=X(O,E.value);return Z(A)}),L=n.computed(()=>{if(!_.value||!p.value)return"";const x=E.value,O=t.value;if(G(O))return"";const A=W(O.query.time_range||e.value.timeSpec,x);return T(A)}),T=x=>_.value?`${r.value}?q=${JSON.stringify(x)}`:"",W=(x,O)=>{const A=i.value?.meta?.start?new Date(i.value.meta.start):void 0,P=i.value?.meta?.end?new Date(i.value.meta.end):void 0;return{filter:O,timeframe:{timePeriodsKey:x.type==="relative"?x.time_range:"custom",start:x.type==="absolute"?A:void 0,end:x.type==="absolute"?P:void 0}}},J=(x,O)=>({filter:O,timeframe:{timePeriodsKey:x.type==="relative"?x.time_range:"custom",start:x.type==="absolute"?x.start:void 0,end:x.type==="absolute"?x.end:void 0}}),X=(x,O)=>{const A=t.value;if(G(A))throw new Error("Cannot build a chart explore query for table chart definitions");const P=[...A.query.dimensions??[]],ee=[...A.query.metrics??[]];return{filters:O,metrics:ee,dimensions:P,time_range:x,granularity:A.query.granularity||k.value||void 0}},Z=x=>{if(!y.value)return"";const O=t.value.query.datasource&&t.value.query.datasource!=="basic"?t.value.query.datasource:"api_usage";return`${s.value}?q=${JSON.stringify(x)}&d=${O}&c=${t.value.chart.type}`};return n.watch([_,y],([x,O])=>{x&&(a.value={href:""}),O&&(o.value={href:""})}),{exploreLinkKebabMenu:b,requestsLinkKebabMenu:L,canShowKebabMenu:p,canGenerateRequestsLink:_,canGenerateExploreLink:y,requestsLinkZoomActions:a,exploreLinkZoomActions:o,buildExploreQuery:X,buildRequestsQueryZoomActions:J,buildExploreLink:Z,buildRequestLink:T}}function Ht(){const l=n.inject(j),e=ie.useDatasourceConfigStore(),{stripUnknownFilters:t}=ue(e);let i=null;return n.onUnmounted(()=>{i?.abort()}),{issueQuery:async(r,a,o)=>{if(!l)throw new Error("Query bridge is not defined");i?.abort();const h=new AbortController;i=h,await e.isReady();const{datasource:c,limit:d,...u}=r,m=c||"basic",g=t.value({datasource:m,filters:[...r.filters??[],...a.filters],queryFields:r.metrics});let p=r.time_range;p?p.tz||(p={...p,tz:a.tz}):p={...a.timeSpec,tz:a.tz};const _={datasource:m,query:{...u,time_range:p,filters:g,limit:o??d}};return l.queryFn(_,h)}}}function Bt({context:l,globalFilters:e=n.ref([]),isFullscreen:t=n.ref(!1),preview:i=n.ref(!1)}){const s=ie.useAnalyticsConfigStore(),r=ie.useDatasourceConfigStore(),{loading:a}=ue(s),{loading:o}=ue(r),h=n.computed(()=>l.value.timeSpec?l.value.timeSpec:{type:"relative",time_range:s.defaultQueryTimeForOrg}),c=n.computed(()=>{let{tz:u,refreshInterval:m,editable:g,showTileActions:p}=l.value;const _=[...l.value.filters??[],...e.value];if(u||(u=new Intl.DateTimeFormat().resolvedOptions().timeZone),m===void 0&&(m=Me),t.value){let k=!1;if(h.value.type==="relative")k=["15m","1h","6h","12h","24h"].includes(h.value.time_range);else{const L=h.value.start.getTime(),T=h.value.end.getTime();k=Math.abs(T-L)<=864e5}const E=new Date().getTime();h.value.type==="absolute"&&h.value.end.getTime()<E||h.value.type==="relative"&&["previous_week","previous_month"].includes(h.value.time_range)?m=0:k?m=Pe:m=$e}(g===void 0||i.value)&&(g=!1),p===void 0&&(p=!0);const y=!i.value&&!!n.getCurrentInstance()?.vnode?.props?.onTileTimeRangeZoom;return{filters:_,tz:u,timeSpec:h.value,refreshInterval:m,editable:g,showTileActions:p&&!i.value,showTileZoomActions:!i.value,zoomable:y}}),d=n.computed(()=>!!l.value.timeSpec||!a.value&&!o.value);return{internalContext:c,queryReady:d}}const It=6,Qe=6,Ye=4;function Mt(l,e){const{pageWidth:t,pageHeight:i,margin:s}=e,r=s+1,a=s+e.headerHeight-3,o=i-s-Qe+3,h=o+4;e.title&&(l.setFont("helvetica","bold"),l.setFontSize(11),l.setTextColor(60),l.text(e.title,s,r)),l.setFont("helvetica","normal"),l.setFontSize(8),l.setTextColor(120),l.text(e.generatedAt,t-s,r,{align:"right"}),e.subtitle&&l.text(e.subtitle,s,r+Ye),l.setDrawColor(220),l.line(s,a,t-s,a),l.line(s,o,t-s,o),l.setFont("helvetica","bold"),l.setTextColor(60),l.text(e.branding,s,h);const c=l.getTextWidth(e.branding);l.setFont("helvetica","normal");const d=` ${e.dashboardNote}`;e.dashboardUrl?(l.setTextColor(0,68,204),l.textWithLink(d,s+c,h,{url:e.dashboardUrl})):(l.setTextColor(120),l.text(d,s+c,h)),l.setTextColor(120),l.text(e.pageLabel,t-s,h,{align:"right"})}function Pt(l){const e=l.querySelector(".kong-ui-public-grid-layout, .grid-stack");if(!e)return[];const t=e.querySelectorAll(":scope > .grid-cell:not(.empty-cell), :scope > .grid-stack-item");if(!t.length)return[];const i=l.getBoundingClientRect().top,s=new Map;return t.forEach(r=>{const a=r.getBoundingClientRect(),o=Math.round(a.top-i),h=Math.round(a.bottom-i),c=s.get(o);s.set(o,c!==void 0?Math.max(c,h):h)}),[...s.entries()].map(([r,a])=>({top:r,bottom:a})).sort((r,a)=>r.top-a.top)}function $t(l,e,t,i){if(!l.length){const a=[];let o=0;for(;o<e;){const h=Math.min(t,e-o);a.push({startY:o,height:h}),o+=h}return a}const s=[];let r=0;for(const a of l){const o=a.top*i,h=a.bottom*i;h-r>t&&(o>r?(s.push({startY:r,height:o-r}),r=o):(s.push({startY:r,height:h-r}),r=h))}return r<e&&s.push({startY:r,height:e-r}),s}function Ft(l){const{i18n:e}=He(),t=n.ref({status:"idle"});async function i(s={}){const{filename:r="dashboard-export",title:a,subtitle:o,dashboardUrl:h,orientation:c="landscape",pageSize:d="letter",margin:u=4,scale:m=2,exclude:g=[".tile-actions",".tooltip",".popover",".dropdown-popover"],output:p="download",onBeforeCapture:_,onAfterCapture:y}=s,k=l.value;if(!k){t.value={status:"error",error:new Error("Dashboard layout container not found.")};return}try{t.value={status:"preparing"},await _?.();const[{snapdom:E},{jsPDF:b}]=await Promise.all([import("@zumer/snapdom"),import("jspdf")]);t.value={status:"capturing"};const L={name:"kong-webgl-snapshot",beforeClone:()=>M.prepareForCapture(),afterClone:()=>M.restoreAfterCapture()},T=await E.toCanvas(k,{scale:m,exclude:g,plugins:[L]}),W=Pt(k),J=k.getBoundingClientRect().width,X=J?T.width/J:m;t.value={status:"generating"};const Z=new Date,x=new b({orientation:c,unit:"mm",format:d}),O=x.internal.pageSize.getWidth(),A=x.internal.pageSize.getHeight(),P=It+(o?Ye:0),ee=O-u*2,V=A-u*2-P-Qe,ce=T.width/ee,R=V*ce,S=$t(W,T.height,R,X),q={title:a,subtitle:o,dashboardUrl:h,generatedAt:e.t("pdfExport.generated",{timestamp:Z.toLocaleString(void 0,{dateStyle:"medium",timeStyle:"short"})}),branding:e.t("pdfExport.branding"),dashboardNote:e.t("pdfExport.dashboardNote"),pageWidth:O,pageHeight:A,headerHeight:P,margin:u};for(let N=0;N<S.length;N++){N>0&&x.addPage();const{startY:H,height:K}=S[N],te=document.createElement("canvas");te.width=T.width,te.height=K,te.getContext("2d").drawImage(T,0,H,T.width,K,0,0,T.width,K),x.addImage(te.toDataURL("image/png"),"PNG",u,u+P,ee,K/ce),Mt(x,{...q,pageLabel:e.t("pdfExport.pageOf",{page:String(N+1),total:String(S.length)})})}if(p==="blob"){const N=x.output("blob");return t.value={status:"complete",pageCount:S.length},N}x.save(r),t.value={status:"complete",pageCount:S.length}}catch(E){t.value={status:"error",error:E}}finally{M.restoreAfterCapture(),await y?.()}}return{exportPdf:i,exportState:n.readonly(t)}}const $={useContextLinks:qt,useDashboardInternalContext:Bt,useEvaluateFeatureFlag:wt,useExportPdf:Ft,useI18n:He,useIssueQuery:Ht,useRequestQueue:Nt},pe=n.defineComponent({__name:"QueryDataProvider",props:{context:{},limitOverride:{},query:{},queryReady:{type:Boolean},refreshCounter:{}},emits:["chart-data","query-complete"],setup(l,{emit:e}){const t=l,i=e,{i18n:s}=$.useI18n(),{issueQuery:r}=$.useIssueQuery(),a=n.inject(j),o=()=>t.queryReady&&a?JSON.stringify([t.query,t.context,t.refreshCounter]):null,{data:h,error:c,isValidating:d}=yt(o,async()=>{const E=o();try{const b=await r(t.query,t.context,t.limitOverride);return o()!==E?void 0:(g.value=null,b)}catch(b){if(o()!==E)return;throw g.value=he.handleQueryError(b),b}finally{o()===E&&i("query-complete")}},{refreshInterval:t.context.refreshInterval,revalidateOnFocus:!1,shouldRetryOnError:!1}),{state:u,swrvState:m}=bt(h,c,d),g=n.ref(null),p=n.computed(()=>u.value===m.ERROR||!!g.value),_=n.computed(()=>!t.queryReady||u.value===m.PENDING),y=n.ref(),k=n.computed(()=>h.value??(t.queryReady&&u.value===m.PENDING?y.value:void 0));return n.watch([()=>h.value,()=>u.value],([E,b])=>{E&&(b==="SUCCESS_HAS_DATA"||b==="SUCCESS")&&E!==y.value&&(y.value=E,i("chart-data",E))}),(E,b)=>{const L=n.resolveComponent("KSkeleton"),T=n.resolveComponent("KEmptyState");return(_.value||!n.unref(h)&&!p.value)&&!k.value?(n.openBlock(),n.createBlock(L,{key:0,class:"chart-skeleton",type:"table"})):p.value&&!_.value?(n.openBlock(),n.createBlock(T,{key:1,"action-button-visible":!1,"data-testid":"chart-empty-state"},n.createSlots({icon:n.withCtx(()=>[g.value?.type==="forbidden"?(n.openBlock(),n.createBlock(n.unref(re.VisibilityOffIcon),{key:0})):(n.openBlock(),n.createBlock(n.unref(re.WarningOutlineIcon),{key:1}))]),title:n.withCtx(()=>[n.createElementVNode("p",null,n.toDisplayString(g.value?.message||n.unref(s).t("renderer.unexpectedError")),1)]),_:2},[g.value?.details?{name:"default",fn:n.withCtx(()=>[n.createElementVNode("p",null,n.toDisplayString(g.value.details),1)]),key:"0"}:void 0]),1024)):k.value?n.renderSlot(E.$slots,"default",{key:2,data:k.value}):n.createCommentVNode("",!0)}}}),Gt=n.defineComponent({__name:"SimpleChartRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},setup(l){const e=l,t=n.computed(()=>e.chartOptions.type==="single_value");return(i,s)=>(n.openBlock(),n.createBlock(pe,{context:l.context,query:l.query,"query-ready":l.queryReady,"refresh-counter":l.refreshCounter},{default:n.withCtx(({data:r})=>[n.createElementVNode("div",{class:n.normalizeClass(["analytics-chart",{"single-value":t.value}]),style:n.normalizeStyle(t.value?void 0:{height:`${l.height}px`})},[n.createVNode(n.unref(he.SimpleChart),{"chart-data":r,"chart-options":l.chartOptions,"synthetics-data-key":t.value?void 0:l.chartOptions.synthetics_data_key},null,8,["chart-data","chart-options","synthetics-data-key"])],6)]),_:1},8,["context","query","query-ready","refresh-counter"]))}}),se=(l,e)=>{const t=l.__vccOpts||l;for(const[i,s]of e)t[i]=s;return t},Xe=se(Gt,[["__scopeId","data-v-2cbfac70"]]),Ut={class:"analytics-chart"},Re=se(n.defineComponent({__name:"BaseAnalyticsChartRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{},extraProps:{}},emits:["edit-tile","chart-data","zoom-time-range","view-requests","select-chart-range"],setup(l,{emit:e}){const t=l,i=e,{i18n:s}=$.useI18n(),r=n.computed(()=>({type:t.chartOptions.type,stacked:t.chartOptions.stacked??!1,chartDatasetColors:t.chartOptions.chart_dataset_colors,threshold:t.chartOptions.threshold,hideTruncationWarning:t.query.limit!==void 0&&t.query.limit>0})),a=n.computed(()=>t.context.zoomable),o=()=>{i("edit-tile")},h=c=>{i("chart-data",c)};return(c,d)=>{const u=n.resolveComponent("KDropdownItem");return n.openBlock(),n.createBlock(pe,{context:l.context,query:l.query,"query-ready":l.queryReady,"refresh-counter":l.refreshCounter,onChartData:h},{default:n.withCtx(({data:m})=>[n.createElementVNode("div",Ut,[n.createVNode(n.unref(he.AnalyticsChart),n.mergeProps({"chart-data":m,"chart-options":r.value,"explore-link":l.exploreLink,"legend-position":"bottom","requests-link":l.requestsLink,"synthetics-data-key":l.chartOptions.synthetics_data_key,"timeseries-zoom":a.value,"tooltip-title":""},l.extraProps,{onSelectChartRange:d[0]||(d[0]=g=>i("select-chart-range",g)),onZoomTimeRange:d[1]||(d[1]=g=>i("zoom-time-range",g))}),n.createSlots({_:2},[l.context.editable?{name:"menu-items",fn:n.withCtx(()=>[n.createVNode(u,{onClick:o},{default:n.withCtx(()=>[n.createTextVNode(n.toDisplayString(n.unref(s).t("renderer.edit")),1)]),_:1})]),key:"0"}:void 0]),1040,["chart-data","chart-options","explore-link","requests-link","synthetics-data-key","timeseries-zoom"])])]),_:1},8,["context","query","query-ready","refresh-counter"])}}}),[["__scopeId","data-v-e1e7f610"]]),Ze=n.defineComponent({__name:"BarChartRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},setup(l){return(e,t)=>(n.openBlock(),n.createBlock(Re,{"chart-options":l.chartOptions,context:l.context,"extra-props":{showAnnotations:!1},height:l.height,query:l.query,"query-ready":l.queryReady,"refresh-counter":l.refreshCounter},null,8,["chart-options","context","height","query","query-ready","refresh-counter"]))}}),Je=n.defineComponent({__name:"TimeseriesChartRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},emits:["zoom-time-range","select-chart-range"],setup(l,{emit:e}){const t=e;return(i,s)=>(n.openBlock(),n.createBlock(Re,{"chart-options":l.chartOptions,context:l.context,"explore-link":l.exploreLink,height:l.height,query:l.query,"query-ready":l.queryReady,"refresh-counter":l.refreshCounter,"requests-link":l.requestsLink,onSelectChartRange:s[0]||(s[0]=r=>t("select-chart-range",r)),onZoomTimeRange:s[1]||(s[1]=r=>t("zoom-time-range",r))},null,8,["chart-options","context","explore-link","height","query","query-ready","refresh-counter","requests-link"]))}}),Wt=se(n.defineComponent({__name:"GoldenSignalsRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},setup(l){const e=l,t=n.computed(()=>{const i=e.query?.datasource;if(i&&i!=="api_usage"&&i!=="basic")throw new Error(`Invalid datasource value: ${i}`);return{datasource:e.query?.datasource,overrideTimeRange:e.context.timeSpec,additionalFilter:e.context.filters,longCardTitles:e.chartOptions.long_card_titles,percentileLatency:e.chartOptions.percentile_latency,refreshInterval:e.context.refreshInterval,queryReady:e.queryReady,refreshCounter:e.refreshCounter}});return(i,s)=>(n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["metric-card-tile-wrapper",{titled:!!e.chartOptions.chart_title}])},[n.createVNode(n.unref(Le.MetricsProvider),n.normalizeProps(n.guardReactiveProps(t.value)),{default:n.withCtx(()=>[n.createVNode(n.unref(Le.MetricsConsumer))]),_:1},16)],2))}}),[["__scopeId","data-v-b77f52b8"]]),Vt={class:"fallback-entity-link","data-testid":"entity-link-parent"},et=n.defineComponent({__name:"FallbackEntityLink",props:{entityLinkData:{}},setup(l){return(e,t)=>(n.openBlock(),n.createElementBlock("div",Vt,n.toDisplayString(l.entityLinkData.label),1))}}),Kt={key:0},jt={key:1},Qt=n.defineComponent({__name:"TopNTableRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},setup(l){const e=l,t=n.inject(j),i=n.defineAsyncComponent(async()=>{if(t?.fetchComponent)try{return await t.fetchComponent("EntityLink")}catch{return et}return et}),s=n.computed(()=>!!e.chartOptions.entity_link||!!Object.keys(e.chartOptions.entity_links||{}).length),r=c=>{const d=e.chartOptions.entity_links;return d&&(d[c]||Object.entries(d).find(([u])=>u.toLowerCase()===c.toLowerCase())?.[1])||""},a=c=>{const d=c.dimensions?.[0]?.dimension;return!d||d===c.dimension},o=c=>r(c.dimension)||a(c)&&e.chartOptions.entity_link||"",h=c=>{const d=o(c);if(d)if(c.id.includes(":")){const[u,m]=c.id.split(":");return d.replace(Be,u).replace(Ce,m)}else return d.replace(Ce,c.id);return""};return(c,d)=>(n.openBlock(),n.createBlock(pe,{context:l.context,query:l.query,"query-ready":l.queryReady,"refresh-counter":l.refreshCounter},{default:n.withCtx(({data:u})=>[n.createVNode(n.unref(he.TopNTable),{data:u,"synthetics-data-key":l.chartOptions.synthetics_data_key},n.createSlots({_:2},[s.value?{name:"name",fn:n.withCtx(({record:m})=>[!m.isEmpty&&o(m)?(n.openBlock(),n.createBlock(n.unref(i),{key:0,"entity-link-data":{id:m.id,label:m.name,deleted:m.deleted},"external-link":h(m)},null,8,["entity-link-data","external-link"])):(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[m.name==="empty"?(n.openBlock(),n.createElementBlock("i",Kt,n.toDisplayString(m.name),1)):(n.openBlock(),n.createElementBlock("span",jt,n.toDisplayString(m.name),1))],64))]),key:"0"}:void 0]),1032,["data","synthetics-data-key"])]),_:1},8,["context","query","query-ready","refresh-counter"]))}}),Yt=l=>l.records.map(e=>{const t={...e};return Object.entries(e).forEach(([i,s])=>{if(s===null)return;const r=l.meta.display?.[i]?.[String(s)]?.name;r&&(t[i]=r)}),t}),tt=({canTranslate:l,columns:e,translate:t})=>e.map(i=>{const s=`chartLabels.${i}`;return{key:i,label:l(s)?t(s):i}}),Xt={platform:tt,platform_usage:tt},it=async({abortController:l,context:e,cursor:t,pageSize:i,query:s,onResponseColumns:r,stripUnknownFilters:a,tabularQueryFn:o})=>{if(!o)throw new Error("AnalyticsBridge.tabularQueryFn is not defined");const h=s.query,c=a({datasource:s.datasource,filters:[...h.filters??[],...e.filters],queryFields:h.entity===void 0?void 0:[h.entity]}),d=await o({datasource:s.datasource,query:{columns:h.columns,cursor:t===void 0?h.cursor:String(t),entity:h.entity,filters:c,page_size:i}},l);return d.meta.columns?.length&&r?.(d.meta.columns),{data:Yt(d),cursor:d.meta.cursor,hasMore:!!d.meta.cursor}},Zt={platform:it,platform_usage:it},Jt=se(n.defineComponent({__name:"TableDataGridRenderer",props:{query:{},context:{},queryReady:{type:Boolean},height:{},refreshCounter:{}},emits:["loading-change"],setup(l,{emit:e}){const t=l,i=e,s=n.inject(j),r=ie.useDatasourceConfigStore(),{i18n:a}=$.useI18n(),o=new AbortController,h=n.ref([]),c=n.ref(!1),d=n.computed(()=>t.height===void 0?void 0:{height:`${t.height}px`}),u=n.computed(()=>({datasource:t.query.datasource,query:{columns:t.query.columns,cursor:t.query.cursor,entity:t.query.entity,filters:t.query.filters,page_size:t.query.page_size}})),m=n.computed(()=>JSON.stringify({refreshCounter:t.refreshCounter,query:{columns:t.query.columns,datasource:t.query.datasource,entity:t.query.entity,filters:t.query.filters,page_size:t.query.page_size},context:{filters:t.context.filters,timeSpec:t.context.timeSpec,tz:t.context.tz}}));n.onUnmounted(()=>{o.abort()});const g=n.computed(()=>Xt[t.query.datasource]({columns:t.query.columns?.length?t.query.columns:h.value,translate:y=>a.t(y),canTranslate:y=>a.te(y)})),p=n.computed(()=>async({cursor:y,pageSize:k})=>{try{await r.isReady();const E=Zt[u.value.datasource];if(!E)throw new Error(`No table data grid fetcher found for datasource: ${u.value.datasource}`);const b=await E({abortController:o,context:t.context,cursor:y,pageSize:k,query:u.value,onResponseColumns:L=>{h.value=L},stripUnknownFilters:r.stripUnknownFilters,tabularQueryFn:s?.tabularQueryFn});return c.value=!1,b}catch(E){throw c.value=!0,E}}),_=y=>{y.state==="error"&&(c.value=!0),i("loading-change",y.state==="loading")};return(y,k)=>{const E=n.resolveComponent("KSkeleton");return n.openBlock(),n.createElementBlock("div",{class:"table-data-grid-renderer",style:n.normalizeStyle(d.value)},[l.queryReady?(n.openBlock(),n.createBlock(n.unref(pt.TableDataGrid),{key:1,error:c.value,fetcher:p.value,headers:g.value,"page-size":l.query.page_size,"refresh-key":m.value,onState:_},null,8,["error","fetcher","headers","page-size","refresh-key"])):(n.openBlock(),n.createBlock(E,{key:0,"data-testid":"table-skeleton",type:"table"}))],4)}}}),[["__scopeId","data-v-c49ff2eb"]]),st="#6c7489",ei="12px",rt="20px",nt="32px",ot="20px",ti=n.defineComponent({__name:"DonutChartRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},setup(l){return(e,t)=>(n.openBlock(),n.createBlock(Re,{"chart-options":l.chartOptions,context:l.context,height:l.height,query:l.query,"query-ready":l.queryReady,"refresh-counter":l.refreshCounter},null,8,["chart-options","context","height","query","query-ready","refresh-counter"]))}}),ii=["data-testid"],si={key:0,class:"tile-header"},ri={class:"badge-container"},ni={class:"badge-text"},oi={key:0},ai=["data-testid"],li=["data-testid"],ci={class:"delete-option"},di=["data-testid"],hi=["data-testid"],at=se(n.defineComponent({__name:"DashboardTile",props:n.mergeModels({context:{},definition:{},height:{default:le},isFullscreen:{type:Boolean},hideActions:{type:Boolean,default:!1},hideZoomActions:{type:Boolean,default:!1},queryReady:{type:Boolean},showRefresh:{type:Boolean,default:!1},tileId:{},tileType:{default:"chart"}},{refreshCounter:{default:0},refreshCounterModifiers:{}}),emits:n.mergeModels(["chart-data","tile-loaded","edit-tile","duplicate-tile","remove-tile","tile-time-range-zoom","tile-bounds-change"],["update:refreshCounter"]),setup(l,{expose:e,emit:t}){n.useCssVars(C=>({v6ce74284:`${C.height}px`}));const i=parseInt(ot,10),s=l,r=n.useModel(l,"refreshCounter"),a=()=>{E.value=!0,r.value++},o=t,h=n.defineAsyncComponent(()=>Promise.resolve().then(()=>Di)),c=n.inject(j),d=ie.useDatasourceConfigStore(),{stripUnknownFilters:u}=ue(d),{i18n:m}=$.useI18n(),g=n.ref(),p=n.ref({status:"loading"}),_=n.ref(!1),y=n.ref(),k=n.ref(!1),E=n.ref(!0),b=n.computed(()=>s.definition.chart),L=n.computed(()=>"chart_title"in b.value?b.value.chart_title:void 0),T=n.computed(()=>"description"in b.value?b.value.description:void 0),W=n.computed(()=>b.value.type==="slottable"),J=n.computed(()=>G(s.definition)?!1:!("allow_csv_export"in b.value)||b.value.allow_csv_export!==!1),{exploreLinkKebabMenu:X,requestsLinkKebabMenu:Z,canShowKebabMenu:x,canGenerateRequestsLink:O,canGenerateExploreLink:A,requestsLinkZoomActions:P,exploreLinkZoomActions:ee,buildExploreQuery:V,buildExploreLink:ce,buildRequestLink:R,buildRequestsQueryZoomActions:S}=$.useContextLinks({queryBridge:c,chartData:n.readonly(g),definition:n.toRef(s,"definition"),context:n.readonly(n.toRef(s,"context"))}),{issueQuery:q}=$.useIssueQuery();n.watch(()=>s.definition,async(C,z)=>{await n.nextTick(),y.value&&(k.value=y.value.scrollWidth>y.value.clientWidth);try{JSON.stringify(C?.query)!==JSON.stringify(z?.query)&&(E.value=!0)}catch{}},{immediate:!0,deep:!0});const N=n.computed(()=>m.t("csvExport.defaultFilename")),H=n.computed(()=>!!X.value||J.value||s.context.editable),K=n.computed(()=>!s.hideActions&&x.value&&H.value),te=n.computed(()=>K.value&&H.value&&!s.isFullscreen),De=n.computed(()=>b.value.type==="golden_signals"&&!!T.value),xe={timeseries_line:Je,timeseries_bar:Je,horizontal_bar:Ze,vertical_bar:Ze,gauge:Xe,donut:ti,golden_signals:Wt,top_n:Qt,table:Jt,slottable:void 0,single_value:Xe,choropleth_map:h},zi=n.computed(()=>({...ne.value?.rendererEvents.supportsRequests?{"select-chart-range":Ui}:{},...ne.value?.rendererEvents.supportsZoom?{"zoom-time-range":Fi}:{},...ne.value?.rendererEvents.supportsBounds?{"bounds-change":Gi}:{},...ne.value?.rendererEvents.supportsLoadingChange?{"loading-change":Mi}:{}})),ne=n.computed(()=>{const C=s.definition,z=xe[C.chart.type],I=G(C),oe=!!z?.emits?.includes("select-chart-range"),de=!!z?.emits?.includes("zoom-time-range"),ae=C.chart.type==="choropleth_map",Ne=!!z?.emits?.includes("loading-change"),Wi={query:C.query,context:s.context,queryReady:s.queryReady,height:s.height-i*2,refreshCounter:r.value},Vi={chartOptions:C.chart,requestsLink:s.hideZoomActions?void 0:P.value,exploreLink:s.hideZoomActions?void 0:ee.value};return z&&{component:z,rendererProps:{...Wi,...I?{}:Vi},rendererEvents:{supportsRequests:oe,supportsZoom:de,supportsBounds:ae,supportsLoadingChange:Ne}}}),ze=n.computed(()=>{if(G(s.definition))return null;const C=s.definition.query,z=C?.time_range;if(M.isPlatformDatasource(C?.datasource)&&!C.dimensions?.includes("time"))return m.t("renderer.as_of_today");if(z?.type==="relative"){const I=M.TimePeriods.get(M.TIMEFRAME_LOOKUP[z.time_range]);return I?I.display:(console.warn("Did not recognize the given relative time range:",z.time_range),z.time_range)}else if(z?.type==="absolute"){const I=z.tz||"Etc/UTC";return`${M.formatTime(z.start,{short:!0,tz:I})} - ${M.formatTime(z.end,{short:!0,tz:I})}`}return null}),ut=n.computed(()=>W.value?!1:[!!L.value,te.value,!!ze.value,De.value,s.showRefresh].some(Boolean)),ft=n.computed(()=>g.value?M.msToGranularity(g.value.meta.granularity_ms):void 0),Ni=n.computed(()=>["timeseries_line","timeseries_bar"].includes(b.value.type)),mt=n.computed(()=>{if(G(s.definition)||!Ni.value||!s.queryReady||E.value)return!1;const C=s.definition.query.granularity;return!C||!ft.value?!1:C!==ft.value}),Li=n.computed(()=>{const C=M.msToGranularity(g.value?.meta.granularity_ms??0)??"unknown",z=G(s.definition)?"unknown":s.definition.query.granularity??"unknown";return m.t("query_aged_out_warning",{currentGranularity:m.t(`granularities.${C}`),savedGranularity:m.t(`granularities.${z}`)})}),Ai=n.computed(()=>{const C=s.definition,z=[...s.context.filters,...C.query.filters??[]],I="metrics"in C.query?C.query.metrics:void 0,oe=C.query.datasource??"api_usage";return u.value({datasource:oe,filters:z,queryFields:I})}),Oi=()=>{o("edit-tile",s.definition)},qi=()=>{o("duplicate-tile",s.definition)},Hi=()=>{o("remove-tile",s.definition)},Bi=C=>{g.value=C,E.value=!1,o("chart-data",C),o("tile-loaded")},Ii=()=>{E.value=!1,o("tile-loaded")},Mi=C=>{E.value=C,C||o("tile-loaded")},Pi=()=>{_.value=!1},gt=()=>{const C=s.definition.query.datasource?.startsWith("goap");return c?.staticConfig?.increaseCsvExportLimit!==!1&&!C?q(s.definition.query,s.context,M.EXPORT_RECORD_LIMIT):g.value?Promise.resolve(g.value):new Promise(I=>{const oe=n.watch(g,de=>{de&&(I(de),oe())})})},$i=async()=>{_.value=!0,p.value={status:"loading"};try{const C=await gt();p.value={status:"success",chartData:C}}catch(C){p.value={status:"error",error:C}}},Fi=C=>{const z={tileId:s.tileId.toString(),timeRange:C};o("tile-time-range-zoom",z)},Gi=C=>{const z={tileId:s.tileId.toString(),bounds:C};o("tile-bounds-change",z)},Ui=C=>{const z=Ai.value,I=V(C,z);ee.value=A.value?{href:ce(I)}:void 0,P.value=O.value?{href:R(S(C,z))}:void 0};return e({getExportData:gt}),(C,z)=>{const I=n.resolveComponent("KTooltip"),oe=n.resolveComponent("KBadge"),de=n.resolveComponent("KButton"),ae=n.resolveComponent("KDropdownItem"),Ne=n.resolveComponent("KDropdown");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["tile-boundary",{editable:l.context.editable,headless:!ut.value}]),"data-testid":`tile-${l.tileId}`},[ut.value&&!W.value?(n.openBlock(),n.createElementBlock("div",si,[n.createVNode(I,{class:"title-tooltip",disabled:!k.value,"max-width":"500",text:L.value},{default:n.withCtx(()=>[n.createElementVNode("div",{ref_key:"titleRef",ref:y,class:"title"},n.toDisplayString(L.value),513)]),_:1},8,["disabled","text"]),n.createElementVNode("div",ri,[ze.value?(n.openBlock(),n.createBlock(oe,{key:0,"data-testid":"time-range-badge",tooltip:mt.value?Li.value:void 0,"tooltip-attributes":{maxWidth:"320px"}},n.createSlots({default:n.withCtx(()=>[n.createElementVNode("span",ni,n.toDisplayString(ze.value),1)]),_:2},[mt.value?{name:"icon",fn:n.withCtx(()=>[n.createVNode(n.unref(re.WarningIcon),{size:`var(--kui-icon-size-20, ${n.unref(ei)})`},null,8,["size"])]),key:"0"}:void 0]),1032,["tooltip"])):n.createCommentVNode("",!0)]),l.showRefresh?(n.openBlock(),n.createElementBlock("div",oi,[n.createVNode(de,{appearance:"secondary",class:"refresh-button","data-testid":`tile-refresh-button-${l.tileId}`,disabled:E.value,icon:"",size:"small",onClick:a},{default:n.withCtx(()=>[E.value?(n.openBlock(),n.createBlock(n.unref(re.ProgressIcon),{key:0,role:"button",size:`var(--kui-icon-size-60, ${n.unref(nt)})`,tabindex:"0"},null,8,["size"])):(n.openBlock(),n.createBlock(n.unref(re.RefreshIcon),{key:1,role:"button",size:`var(--kui-icon-size-60, ${n.unref(nt)})`,tabindex:"0"},null,8,["size"]))]),_:1},8,["data-testid","disabled"])])):n.createCommentVNode("",!0),K.value?(n.openBlock(),n.createElementBlock("div",{key:1,class:"tile-actions","data-testid":`tile-actions-${l.tileId}`},[K.value&&l.context.editable&&!l.isFullscreen?(n.openBlock(),n.createBlock(n.unref(re.EditIcon),{key:0,class:"edit-icon",color:`var(--kui-color-text-neutral, ${n.unref(st)})`,"data-testid":`edit-tile-${l.tileId}`,size:`var(--kui-icon-size-40, ${n.unref(rt)})`,onClick:Oi},null,8,["color","data-testid","size"])):n.createCommentVNode("",!0),K.value&&H.value&&!l.isFullscreen?(n.openBlock(),n.createBlock(Ne,{key:1,class:"dropdown","data-testid":`chart-action-menu-${l.tileId}`,"kpop-attributes":{placement:"bottom-end"}},{items:n.withCtx(()=>[n.unref(X)?(n.openBlock(),n.createBlock(ae,{key:0,"data-testid":`chart-jump-to-explore-${l.tileId}`,item:{label:n.unref(m).t("jumpToExplore"),to:n.unref(X)}},null,8,["data-testid","item"])):n.createCommentVNode("",!0),!n.unref(G)(l.definition)&&n.unref(Z)?(n.openBlock(),n.createBlock(ae,{key:1,"data-testid":`chart-jump-to-requests-${l.tileId}`,item:{label:n.unref(m).t("jumpToRequests"),to:n.unref(Z)}},null,8,["data-testid","item"])):n.createCommentVNode("",!0),J.value?(n.openBlock(),n.createBlock(ae,{key:2,class:"chart-export-button","data-testid":`chart-csv-export-${l.tileId}`,onClick:$i},{default:n.withCtx(()=>[n.createElementVNode("span",{class:"chart-export-trigger","data-testid":`csv-export-button-${l.tileId}`},n.toDisplayString(n.unref(m).t("csvExport.exportAsCsv")),9,li)]),_:1},8,["data-testid"])):n.createCommentVNode("",!0),l.context.editable?(n.openBlock(),n.createBlock(ae,{key:3,"data-testid":`duplicate-tile-${l.tileId}`,onClick:qi},{default:n.withCtx(()=>[n.createTextVNode(n.toDisplayString(n.unref(m).t("renderer.duplicateTile")),1)]),_:1},8,["data-testid"])):n.createCommentVNode("",!0),l.context.editable?(n.openBlock(),n.createBlock(ae,{key:4,"data-testid":`remove-tile-${l.tileId}`,onClick:Hi},{default:n.withCtx(()=>[n.createElementVNode("span",ci,n.toDisplayString(n.unref(m).t("renderer.delete")),1)]),_:1},8,["data-testid"])):n.createCommentVNode("",!0)]),default:n.withCtx(()=>[n.createVNode(n.unref(re.MoreIcon),{class:"kebab-action-menu",color:`var(--kui-color-text-neutral, ${n.unref(st)})`,"data-testid":`kebab-action-menu-${l.tileId}`,size:`var(--kui-icon-size-40, ${n.unref(rt)})`},null,8,["color","data-testid","size"])]),_:1},8,["data-testid"])):n.createCommentVNode("",!0)],8,ai)):T.value?(n.openBlock(),n.createElementBlock("div",{key:2,class:"header-description","data-testid":`tile-description-${l.tileId}`},n.toDisplayString(T.value),9,di)):n.createCommentVNode("",!0),_.value?(n.openBlock(),n.createBlock(n.unref(he.CsvExportModal),{key:3,"data-testid":`csv-export-modal-${l.tileId}`,"export-state":p.value,filename:N.value,onCloseModal:Pi},null,8,["data-testid","export-state","filename"])):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),n.createElementVNode("div",{class:n.normalizeClass(["tile-content",`type-${l.tileType}-${b.value.type}`]),"data-testid":`tile-content-${l.tileId}`},[ne.value?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(ne.value.component),n.mergeProps({key:0},ne.value.rendererProps,n.toHandlers(zi.value),{onChartData:Bi,onQueryComplete:Ii}),null,16)):n.createCommentVNode("",!0)],10,hi)],10,ii)}}}),[["__scopeId","data-v-fb1aa747"]]),ui=(l,e)=>{let t=0;const i=new Map;e.forEach(r=>{const a=r.layout.position.row,o=i.get(a),h=r.layout.size.rows===1&&!!r.layout.size.fit_to_content;t=Math.max(t,a+r.layout.size.rows),o===void 0?i.set(a,h):i.set(a,o&&h)});const s=[];for(let r=0;r<t;r++)i.get(r)?s.push("auto"):s.push(`${l}px`);return s},lt=se(n.defineComponent({__name:"GridLayout",props:{tileHeight:{type:Number,required:!1,default:()=>le},columns:{type:Number,required:!1,default:()=>ge},tiles:{type:Array,required:!0}},setup(l){n.useCssVars(o=>({v821fda82:e.columns,v0870d42d:r.value}));const e=l,t=n.ref(null),i=n.ref(0),s=new ResizeObserver(o=>{window.requestAnimationFrame(()=>{!Array.isArray(o)||!o.length||(i.value=o[0].contentRect.width)})});n.onMounted(()=>{t.value&&s.observe(t.value)}),n.onUnmounted(()=>{t.value&&s.unobserve(t.value)});const r=n.computed(()=>ui(e.tileHeight,e.tiles).join(" ")),a=n.computed(()=>e.tiles.map((o,h)=>({key:`tile-${h}`,tile:o,style:{"grid-column-start":o.layout.position.col+1,"grid-column-end":o.layout.position.col+1+o.layout.size.cols,"grid-row-start":o.layout.position.row+1,"grid-row-end":o.layout.position.row+1+o.layout.size.rows}})));return(o,h)=>(n.openBlock(),n.createElementBlock("div",{ref_key:"gridContainer",ref:t,class:"kong-ui-public-grid-layout"},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(a.value,c=>(n.openBlock(),n.createElementBlock("div",{key:c.key,class:n.normalizeClass(["grid-cell",{"empty-cell":!c.tile}]),style:n.normalizeStyle(c.style)},[n.renderSlot(o.$slots,"tile",{style:n.normalizeStyle(c.style),tile:c.tile},void 0,!0)],6))),128))],512))}}),[["__scopeId","data-v-0271a8b9"]]);function fi(l,e,t,i,s){const r=(...a)=>(console.warn("gridstack.js: Function `"+t+"` is deprecated in "+s+" and has been replaced with `"+i+"`. It will be **removed** in a future release"),e.apply(l,a));return r.prototype=e.prototype,r}class f{static getElements(e,t=document){if(typeof e=="string"){const i="getElementById"in t?t:void 0;if(i&&!isNaN(+e[0])){const r=i.getElementById(e);return r?[r]:[]}let s=t.querySelectorAll(e);return!s.length&&e[0]!=="."&&e[0]!=="#"&&(s=t.querySelectorAll("."+e),s.length||(s=t.querySelectorAll("#"+e))),Array.from(s)}return[e]}static getElement(e,t=document){if(typeof e=="string"){const i="getElementById"in t?t:void 0;if(!e.length)return null;if(i&&e[0]==="#")return i.getElementById(e.substring(1));if(e[0]==="#"||e[0]==="."||e[0]==="[")return t.querySelector(e);if(i&&!isNaN(+e[0]))return i.getElementById(e);let s=t.querySelector(e);return i&&!s&&(s=i.getElementById(e)),s||(s=t.querySelector("."+e)),s}return e}static lazyLoad(e){return e.lazyLoad||e.grid?.opts?.lazyLoad&&e.lazyLoad!==!1}static createDiv(e,t){const i=document.createElement("div");return e.forEach(s=>{s&&i.classList.add(s)}),t?.appendChild(i),i}static shouldSizeToContent(e,t=!1){return e?.grid&&(t?e.sizeToContent===!0||e.grid.opts.sizeToContent===!0&&e.sizeToContent===void 0:!!e.sizeToContent||e.grid.opts.sizeToContent&&e.sizeToContent!==!1)}static isIntercepted(e,t){return!(e.y>=t.y+t.h||e.y+e.h<=t.y||e.x+e.w<=t.x||e.x>=t.x+t.w)}static isTouching(e,t){return f.isIntercepted(e,{x:t.x-.5,y:t.y-.5,w:t.w+1,h:t.h+1})}static areaIntercept(e,t){const i=e.x>t.x?e.x:t.x,s=e.x+e.w<t.x+t.w?e.x+e.w:t.x+t.w;if(s<=i)return 0;const r=e.y>t.y?e.y:t.y,a=e.y+e.h<t.y+t.h?e.y+e.h:t.y+t.h;return a<=r?0:(s-i)*(a-r)}static area(e){return e.w*e.h}static sort(e,t=1){return e.sort((s,r)=>{const a=t*((s.y??1e4)-(r.y??1e4));return a===0?t*((s.x??1e4)-(r.x??1e4)):a})}static find(e,t){return t?e.find(i=>i.id===t):void 0}static createStylesheet(e,t,i){const s=document.createElement("style"),r=i?.nonce;return r&&(s.nonce=r),s.setAttribute("type","text/css"),s.setAttribute("gs-style-id",e),s.styleSheet?s.styleSheet.cssText="":s.appendChild(document.createTextNode("")),t?t.insertBefore(s,t.firstChild):(t=document.getElementsByTagName("head")[0],t.appendChild(s)),s}static removeStylesheet(e,t){const s=(t||document).querySelector("STYLE[gs-style-id="+e+"]");s&&s.parentNode&&s.remove()}static addCSSRule(e,t,i){e.textContent+=`${t} { ${i} } `}static toBool(e){return typeof e=="boolean"?e:typeof e=="string"?(e=e.toLowerCase(),!(e===""||e==="no"||e==="false"||e==="0")):!!e}static toNumber(e){return e===null||e.length===0?void 0:Number(e)}static parseHeight(e){let t,i="px";if(typeof e=="string")if(e==="auto"||e==="")t=0;else{const s=e.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw|%|cm|mm)?$/);if(!s)throw new Error(`Invalid height val = ${e}`);i=s[2]||"px",t=parseFloat(s[1])}else t=e;return{h:t,unit:i}}static defaults(e,...t){return t.forEach(i=>{for(const s in i){if(!i.hasOwnProperty(s))return;e[s]===null||e[s]===void 0?e[s]=i[s]:typeof i[s]=="object"&&typeof e[s]=="object"&&this.defaults(e[s],i[s])}}),e}static same(e,t){if(typeof e!="object")return e==t;if(typeof e!=typeof t||Object.keys(e).length!==Object.keys(t).length)return!1;for(const i in e)if(e[i]!==t[i])return!1;return!0}static copyPos(e,t,i=!1){return t.x!==void 0&&(e.x=t.x),t.y!==void 0&&(e.y=t.y),t.w!==void 0&&(e.w=t.w),t.h!==void 0&&(e.h=t.h),i&&(t.minW&&(e.minW=t.minW),t.minH&&(e.minH=t.minH),t.maxW&&(e.maxW=t.maxW),t.maxH&&(e.maxH=t.maxH)),e}static samePos(e,t){return e&&t&&e.x===t.x&&e.y===t.y&&(e.w||1)===(t.w||1)&&(e.h||1)===(t.h||1)}static sanitizeMinMax(e){e.minW||delete e.minW,e.minH||delete e.minH,e.maxW||delete e.maxW,e.maxH||delete e.maxH}static removeInternalAndSame(e,t){if(!(typeof e!="object"||typeof t!="object"))for(let i in e){const s=e[i],r=t[i];i[0]==="_"||s===r?delete e[i]:s&&typeof s=="object"&&r!==void 0&&(f.removeInternalAndSame(s,r),Object.keys(s).length||delete e[i])}}static removeInternalForSave(e,t=!0){for(let i in e)(i[0]==="_"||e[i]===null||e[i]===void 0)&&delete e[i];delete e.grid,t&&delete e.el,e.autoPosition||delete e.autoPosition,e.noResize||delete e.noResize,e.noMove||delete e.noMove,e.locked||delete e.locked,(e.w===1||e.w===e.minW)&&delete e.w,(e.h===1||e.h===e.minH)&&delete e.h}static throttle(e,t){let i=!1;return(...s)=>{i||(i=!0,setTimeout(()=>{e(...s),i=!1},t))}}static removePositioningStyles(e){const t=e.style;t.position&&t.removeProperty("position"),t.left&&t.removeProperty("left"),t.top&&t.removeProperty("top"),t.width&&t.removeProperty("width"),t.height&&t.removeProperty("height")}static getScrollElement(e){if(!e)return document.scrollingElement||document.documentElement;const t=getComputedStyle(e);return/(auto|scroll)/.test(t.overflow+t.overflowY)?e:this.getScrollElement(e.parentElement)}static updateScrollPosition(e,t,i){const s=e.getBoundingClientRect(),r=window.innerHeight||document.documentElement.clientHeight;if(s.top<0||s.bottom>r){const a=s.bottom-r,o=s.top,h=this.getScrollElement(e);if(h!==null){const c=h.scrollTop;s.top<0&&i<0?e.offsetHeight>r?h.scrollTop+=i:h.scrollTop+=Math.abs(o)>Math.abs(i)?i:o:i>0&&(e.offsetHeight>r?h.scrollTop+=i:h.scrollTop+=a>i?i:a),t.top+=h.scrollTop-c}}}static updateScrollResize(e,t,i){const s=this.getScrollElement(t),r=s.clientHeight,a=s===this.getScrollElement()?0:s.getBoundingClientRect().top,o=e.clientY-a,h=o<i,c=o>r-i;h?s.scrollBy({behavior:"smooth",top:o-i}):c&&s.scrollBy({behavior:"smooth",top:i-(r-o)})}static clone(e){return e==null||typeof e!="object"?e:e instanceof Array?[...e]:{...e}}static cloneDeep(e){const t=["parentGrid","el","grid","subGrid","engine"],i=f.clone(e);for(const s in i)i.hasOwnProperty(s)&&typeof i[s]=="object"&&s.substring(0,2)!=="__"&&!t.find(r=>r===s)&&(i[s]=f.cloneDeep(e[s]));return i}static cloneNode(e){const t=e.cloneNode(!0);return t.removeAttribute("id"),t}static appendTo(e,t){let i;typeof t=="string"?i=f.getElement(t):i=t,i&&i.appendChild(e)}static addElStyles(e,t){if(t instanceof Object)for(const i in t)t.hasOwnProperty(i)&&(Array.isArray(t[i])?t[i].forEach(s=>{e.style[i]=s}):e.style[i]=t[i])}static initEvent(e,t){const i={type:t.type},s={button:0,which:0,buttons:1,bubbles:!0,cancelable:!0,target:t.target?t.target:e.target};return["altKey","ctrlKey","metaKey","shiftKey"].forEach(r=>i[r]=e[r]),["pageX","pageY","clientX","clientY","screenX","screenY"].forEach(r=>i[r]=e[r]),{...i,...s}}static simulateMouseEvent(e,t,i){const s=e,r=new MouseEvent(t,{bubbles:!0,composed:!0,cancelable:!0,view:window,detail:1,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY,ctrlKey:s.ctrlKey??!1,altKey:s.altKey??!1,shiftKey:s.shiftKey??!1,metaKey:s.metaKey??!1,button:0,relatedTarget:e.target});(i||e.target).dispatchEvent(r)}static getValuesFromTransformedElement(e){const t=document.createElement("div");f.addElStyles(t,{opacity:"0",position:"fixed",top:"0px",left:"0px",width:"1px",height:"1px",zIndex:"-999999"}),e.appendChild(t);const i=t.getBoundingClientRect();return e.removeChild(t),t.remove(),{xScale:1/i.width,yScale:1/i.height,xOffset:i.left,yOffset:i.top}}static swap(e,t,i){if(!e)return;const s=e[t];e[t]=e[i],e[i]=s}static canBeRotated(e){return!(!e||e.w===e.h||e.locked||e.noResize||e.grid?.opts.disableResize||e.minW&&e.minW===e.maxW||e.minH&&e.minH===e.maxH)}}class Q{constructor(e={}){this.addedNodes=[],this.removedNodes=[],this.defaultColumn=12,this.column=e.column||this.defaultColumn,this.column>this.defaultColumn&&(this.defaultColumn=this.column),this.maxRow=e.maxRow,this._float=e.float,this.nodes=e.nodes||[],this.onChange=e.onChange}batchUpdate(e=!0,t=!0){return!!this.batchMode===e?this:(this.batchMode=e,e?(this._prevFloat=this._float,this._float=!0,this.cleanNodes(),this.saveInitial()):(this._float=this._prevFloat,delete this._prevFloat,t&&this._packNodes(),this._notify()),this)}_useEntireRowArea(e,t){return(!this.float||this.batchMode&&!this._prevFloat)&&!this._hasLocked&&(!e._moving||e._skipDown||t.y<=e.y)}_fixCollisions(e,t=e,i,s={}){if(this.sortNodes(-1),i=i||this.collide(e,t),!i)return!1;if(e._moving&&!s.nested&&!this.float&&this.swap(e,i))return!0;let r=t;!this._loading&&this._useEntireRowArea(e,t)&&(r={x:0,w:this.column,y:t.y,h:t.h},i=this.collide(e,r,s.skip));let a=!1;const o={nested:!0,pack:!1};let h=0;for(;i=i||this.collide(e,r,s.skip);){if(h++>this.nodes.length*2)throw new Error("Infinite collide check");let c;if(i.locked||this._loading||e._moving&&!e._skipDown&&t.y>e.y&&!this.float&&(!this.collide(i,{...i,y:e.y},e)||!this.collide(i,{...i,y:t.y-i.h},e))){e._skipDown=e._skipDown||t.y>e.y;const d={...t,y:i.y+i.h,...o};c=this._loading&&f.samePos(e,d)?!0:this.moveNode(e,d),(i.locked||this._loading)&&c?f.copyPos(t,e):!i.locked&&c&&s.pack&&(this._packNodes(),t.y=i.y+i.h,f.copyPos(e,t)),a=a||c}else c=this.moveNode(i,{...i,y:t.y+t.h,skip:e,...o});if(!c)return a;i=void 0}return a}collide(e,t=e,i){const s=e._id,r=i?._id;return this.nodes.find(a=>a._id!==s&&a._id!==r&&f.isIntercepted(a,t))}collideAll(e,t=e,i){const s=e._id,r=i?._id;return this.nodes.filter(a=>a._id!==s&&a._id!==r&&f.isIntercepted(a,t))}directionCollideCoverage(e,t,i){if(!t.rect||!e._rect)return;const s=e._rect,r={...t.rect};r.y>s.y?(r.h+=r.y-s.y,r.y=s.y):r.h+=s.y-r.y,r.x>s.x?(r.w+=r.x-s.x,r.x=s.x):r.w+=s.x-r.x;let a,o=.5;for(let h of i){if(h.locked||!h._rect)break;const c=h._rect;let d=Number.MAX_VALUE,u=Number.MAX_VALUE;s.y<c.y?d=(r.y+r.h-c.y)/c.h:s.y+s.h>c.y+c.h&&(d=(c.y+c.h-r.y)/c.h),s.x<c.x?u=(r.x+r.w-c.x)/c.w:s.x+s.w>c.x+c.w&&(u=(c.x+c.w-r.x)/c.w);const m=Math.min(u,d);m>o&&(o=m,a=h)}return t.collide=a,a}cacheRects(e,t,i,s,r,a){return this.nodes.forEach(o=>o._rect={y:o.y*t+i,x:o.x*e+a,w:o.w*e-a-s,h:o.h*t-i-r}),this}swap(e,t){if(!t||t.locked||!e||e.locked)return!1;function i(){const r=t.x,a=t.y;return t.x=e.x,t.y=e.y,e.h!=t.h?(e.x=r,e.y=t.y+t.h):e.w!=t.w?(e.x=t.x+t.w,e.y=a):(e.x=r,e.y=a),e._dirty=t._dirty=!0,!0}let s;if(e.w===t.w&&e.h===t.h&&(e.x===t.x||e.y===t.y)&&(s=f.isTouching(e,t)))return i();if(s!==!1){if(e.w===t.w&&e.x===t.x&&(s||(s=f.isTouching(e,t)))){if(t.y<e.y){const r=e;e=t,t=r}return i()}if(s!==!1){if(e.h===t.h&&e.y===t.y&&(s||(s=f.isTouching(e,t)))){if(t.x<e.x){const r=e;e=t,t=r}return i()}return!1}}}isAreaEmpty(e,t,i,s){const r={x:e||0,y:t||0,w:i||1,h:s||1};return!this.collide(r)}compact(e="compact",t=!0){if(this.nodes.length===0)return this;t&&this.sortNodes();const i=this.batchMode;i||this.batchUpdate();const s=this._inColumnResize;s||(this._inColumnResize=!0);const r=this.nodes;return this.nodes=[],r.forEach((a,o,h)=>{let c;a.locked||(a.autoPosition=!0,e==="list"&&o&&(c=h[o-1])),this.addNode(a,!1,c)}),s||delete this._inColumnResize,i||this.batchUpdate(!1),this}set float(e){this._float!==e&&(this._float=e||!1,e||this._packNodes()._notify())}get float(){return this._float||!1}sortNodes(e=1){return this.nodes=f.sort(this.nodes,e),this}_packNodes(){return this.batchMode?this:(this.sortNodes(),this.float?this.nodes.forEach(e=>{if(e._updating||e._orig===void 0||e.y===e._orig.y)return;let t=e.y;for(;t>e._orig.y;)--t,this.collide(e,{x:e.x,y:t,w:e.w,h:e.h})||(e._dirty=!0,e.y=t)}):this.nodes.forEach((e,t)=>{if(!e.locked)for(;e.y>0;){const i=t===0?0:e.y-1;if(!(t===0||!this.collide(e,{x:e.x,y:i,w:e.w,h:e.h})))break;e._dirty=e.y!==i,e.y=i}}),this)}prepareNode(e,t){e._id=e._id??Q._idSeq++;const i=e.id;if(i){let r=1;for(;this.nodes.find(a=>a.id===e.id&&a!==e);)e.id=i+"_"+r++}(e.x===void 0||e.y===void 0||e.x===null||e.y===null)&&(e.autoPosition=!0);const s={x:0,y:0,w:1,h:1};return f.defaults(e,s),e.autoPosition||delete e.autoPosition,e.noResize||delete e.noResize,e.noMove||delete e.noMove,f.sanitizeMinMax(e),typeof e.x=="string"&&(e.x=Number(e.x)),typeof e.y=="string"&&(e.y=Number(e.y)),typeof e.w=="string"&&(e.w=Number(e.w)),typeof e.h=="string"&&(e.h=Number(e.h)),isNaN(e.x)&&(e.x=s.x,e.autoPosition=!0),isNaN(e.y)&&(e.y=s.y,e.autoPosition=!0),isNaN(e.w)&&(e.w=s.w),isNaN(e.h)&&(e.h=s.h),this.nodeBoundFix(e,t),e}nodeBoundFix(e,t){const i=e._orig||f.copyPos({},e);if(e.maxW&&(e.w=Math.min(e.w||1,e.maxW)),e.maxH&&(e.h=Math.min(e.h||1,e.maxH)),e.minW&&(e.w=Math.max(e.w||1,e.minW)),e.minH&&(e.h=Math.max(e.h||1,e.minH)),(e.x||0)+(e.w||1)>this.column&&this.column<this.defaultColumn&&!this._inColumnResize&&!this.skipCacheUpdate&&e._id&&this.findCacheLayout(e,this.defaultColumn)===-1){const r={...e};r.autoPosition||r.x===void 0?(delete r.x,delete r.y):r.x=Math.min(this.defaultColumn-1,r.x),r.w=Math.min(this.defaultColumn,r.w||1),this.cacheOneLayout(r,this.defaultColumn)}return e.w>this.column?e.w=this.column:e.w<1&&(e.w=1),this.maxRow&&e.h>this.maxRow?e.h=this.maxRow:e.h<1&&(e.h=1),e.x<0&&(e.x=0),e.y<0&&(e.y=0),e.x+e.w>this.column&&(t?e.w=this.column-e.x:e.x=this.column-e.w),this.maxRow&&e.y+e.h>this.maxRow&&(t?e.h=this.maxRow-e.y:e.y=this.maxRow-e.h),f.samePos(e,i)||(e._dirty=!0),this}getDirtyNodes(e){return e?this.nodes.filter(t=>t._dirty&&!f.samePos(t,t._orig)):this.nodes.filter(t=>t._dirty)}_notify(e){if(this.batchMode||!this.onChange)return this;const t=(e||[]).concat(this.getDirtyNodes());return this.onChange(t),this}cleanNodes(){return this.batchMode?this:(this.nodes.forEach(e=>{delete e._dirty,delete e._lastTried}),this)}saveInitial(){return this.nodes.forEach(e=>{e._orig=f.copyPos({},e),delete e._dirty}),this._hasLocked=this.nodes.some(e=>e.locked),this}restoreInitial(){return this.nodes.forEach(e=>{!e._orig||f.samePos(e,e._orig)||(f.copyPos(e,e._orig),e._dirty=!0)}),this._notify(),this}findEmptyPosition(e,t=this.nodes,i=this.column,s){const r=s?s.y*i+(s.x+s.w):0;let a=!1;for(let o=r;!a;++o){const h=o%i,c=Math.floor(o/i);if(h+e.w>i)continue;const d={x:h,y:c,w:e.w,h:e.h};t.find(u=>f.isIntercepted(d,u))||((e.x!==h||e.y!==c)&&(e._dirty=!0),e.x=h,e.y=c,delete e.autoPosition,a=!0)}return a}addNode(e,t=!1,i){const s=this.nodes.find(a=>a._id===e._id);if(s)return s;this._inColumnResize?this.nodeBoundFix(e):this.prepareNode(e),delete e._temporaryRemoved,delete e._removeDOM;let r;return e.autoPosition&&this.findEmptyPosition(e,this.nodes,this.column,i)&&(delete e.autoPosition,r=!0),this.nodes.push(e),t&&this.addedNodes.push(e),r||this._fixCollisions(e),this.batchMode||this._packNodes()._notify(),e}removeNode(e,t=!0,i=!1){return this.nodes.find(s=>s._id===e._id)?(i&&this.removedNodes.push(e),t&&(e._removeDOM=!0),this.nodes=this.nodes.filter(s=>s._id!==e._id),e._isAboutToRemove||this._packNodes(),this._notify([e]),this):this}removeAll(e=!0,t=!0){if(delete this._layouts,!this.nodes.length)return this;e&&this.nodes.forEach(s=>s._removeDOM=!0);const i=this.nodes;return this.removedNodes=t?i:[],this.nodes=[],this._notify(i)}moveNodeCheck(e,t){if(!this.changedPosConstrain(e,t))return!1;if(t.pack=!0,!this.maxRow)return this.moveNode(e,t);let i;const s=new Q({column:this.column,float:this.float,nodes:this.nodes.map(a=>a._id===e._id?(i={...a},i):{...a})});if(!i)return!1;const r=s.moveNode(i,t)&&s.getRow()<=Math.max(this.getRow(),this.maxRow);if(!r&&!t.resizing&&t.collide){const a=t.collide.el.gridstackNode;if(this.swap(e,a))return this._notify(),!0}return r?(s.nodes.filter(a=>a._dirty).forEach(a=>{const o=this.nodes.find(h=>h._id===a._id);o&&(f.copyPos(o,a),o._dirty=!0)}),this._notify(),!0):!1}willItFit(e){if(delete e._willFitPos,!this.maxRow)return!0;const t=new Q({column:this.column,float:this.float,nodes:this.nodes.map(s=>({...s}))}),i={...e};return this.cleanupNode(i),delete i.el,delete i._id,delete i.content,delete i.grid,t.addNode(i),t.getRow()<=this.maxRow?(e._willFitPos=f.copyPos({},i),!0):!1}changedPosConstrain(e,t){return t.w=t.w||e.w,t.h=t.h||e.h,e.x!==t.x||e.y!==t.y?!0:(e.maxW&&(t.w=Math.min(t.w,e.maxW)),e.maxH&&(t.h=Math.min(t.h,e.maxH)),e.minW&&(t.w=Math.max(t.w,e.minW)),e.minH&&(t.h=Math.max(t.h,e.minH)),e.w!==t.w||e.h!==t.h)}moveNode(e,t){if(!e||!t)return!1;let i;t.pack===void 0&&!this.batchMode&&(i=t.pack=!0),typeof t.x!="number"&&(t.x=e.x),typeof t.y!="number"&&(t.y=e.y),typeof t.w!="number"&&(t.w=e.w),typeof t.h!="number"&&(t.h=e.h);const s=e.w!==t.w||e.h!==t.h,r=f.copyPos({},e,!0);if(f.copyPos(r,t),this.nodeBoundFix(r,s),f.copyPos(t,r),!t.forceCollide&&f.samePos(e,t))return!1;const a=f.copyPos({},e),o=this.collideAll(e,r,t.skip);let h=!0;if(o.length){const c=e._moving&&!t.nested;let d=c?this.directionCollideCoverage(e,t,o):o[0];if(c&&d&&e.grid?.opts?.subGridDynamic&&!e.grid._isTemp){const u=f.areaIntercept(t.rect,d._rect),m=f.area(t.rect),g=f.area(d._rect);u/(m<g?m:g)>.8&&(d.grid.makeSubGrid(d.el,void 0,e),d=void 0)}d?h=!this._fixCollisions(e,r,d,t):(h=!1,i&&delete t.pack)}return h&&!f.samePos(e,r)&&(e._dirty=!0,f.copyPos(e,r)),t.pack&&this._packNodes()._notify(),!f.samePos(e,a)}getRow(){return this.nodes.reduce((e,t)=>Math.max(e,t.y+t.h),0)}beginUpdate(e){return e._updating||(e._updating=!0,delete e._skipDown,this.batchMode||this.saveInitial()),this}endUpdate(){const e=this.nodes.find(t=>t._updating);return e&&(delete e._updating,delete e._skipDown),this}save(e=!0,t){const i=this._layouts?.length,s=i&&this.column!==i-1?this._layouts[i-1]:null,r=[];return this.sortNodes(),this.nodes.forEach(a=>{const o=s?.find(c=>c._id===a._id),h={...a,...o||{}};f.removeInternalForSave(h,!e),t&&t(a,h),r.push(h)}),r}layoutsNodesChange(e){return!this._layouts||this._inColumnResize?this:(this._layouts.forEach((t,i)=>{if(!t||i===this.column)return this;if(i<this.column)this._layouts[i]=void 0;else{const s=i/this.column;e.forEach(r=>{if(!r._orig)return;const a=t.find(o=>o._id===r._id);a&&(a.y>=0&&r.y!==r._orig.y&&(a.y+=r.y-r._orig.y),r.x!==r._orig.x&&(a.x=Math.round(r.x*s)),r.w!==r._orig.w&&(a.w=Math.round(r.w*s)))})}}),this)}columnChanged(e,t,i="moveScale"){if(!this.nodes.length||!t||e===t)return this;const s=i==="compact"||i==="list";s&&this.sortNodes(1),t<e&&this.cacheLayout(this.nodes,e),this.batchUpdate();let r=[],a=s?this.nodes:f.sort(this.nodes,-1);if(t>e&&this._layouts){const o=this._layouts[t]||[],h=this._layouts.length-1;!o.length&&e!==h&&this._layouts[h]?.length&&(e=h,this._layouts[h].forEach(c=>{const d=a.find(u=>u._id===c._id);d&&(!s&&!c.autoPosition&&(d.x=c.x??d.x,d.y=c.y??d.y),d.w=c.w??d.w,(c.x==null||c.y===void 0)&&(d.autoPosition=!0))})),o.forEach(c=>{const d=a.findIndex(u=>u._id===c._id);if(d!==-1){const u=a[d];if(s){u.w=c.w;return}(c.autoPosition||isNaN(c.x)||isNaN(c.y))&&this.findEmptyPosition(c,r),c.autoPosition||(u.x=c.x??u.x,u.y=c.y??u.y,u.w=c.w??u.w,r.push(u)),a.splice(d,1)}})}if(s)this.compact(i,!1);else{if(a.length)if(typeof i=="function")i(t,e,r,a);else{const o=s||i==="none"?1:t/e,h=i==="move"||i==="moveScale",c=i==="scale"||i==="moveScale";a.forEach(d=>{d.x=t===1?0:h?Math.round(d.x*o):Math.min(d.x,t-1),d.w=t===1||e===1?1:c?Math.round(d.w*o)||1:Math.min(d.w,t),r.push(d)}),a=[]}r=f.sort(r,-1),this._inColumnResize=!0,this.nodes=[],r.forEach(o=>{this.addNode(o,!1),delete o._orig})}return this.nodes.forEach(o=>delete o._orig),this.batchUpdate(!1,!s),delete this._inColumnResize,this}cacheLayout(e,t,i=!1){const s=[];return e.forEach((r,a)=>{if(r._id===void 0){const o=r.id?this.nodes.find(h=>h.id===r.id):void 0;r._id=o?._id??Q._idSeq++}s[a]={x:r.x,y:r.y,w:r.w,_id:r._id}}),this._layouts=i?[]:this._layouts||[],this._layouts[t]=s,this}cacheOneLayout(e,t){e._id=e._id??Q._idSeq++;const i={x:e.x,y:e.y,w:e.w,_id:e._id};(e.autoPosition||e.x===void 0)&&(delete i.x,delete i.y,e.autoPosition&&(i.autoPosition=!0)),this._layouts=this._layouts||[],this._layouts[t]=this._layouts[t]||[];const s=this.findCacheLayout(e,t);return s===-1?this._layouts[t].push(i):this._layouts[t][s]=i,this}findCacheLayout(e,t){return this._layouts?.[t]?.findIndex(i=>i._id===e._id)??-1}removeNodeFromLayoutCache(e){if(this._layouts)for(let t=0;t<this._layouts.length;t++){const i=this.findCacheLayout(e,t);i!==-1&&this._layouts[t].splice(i,1)}}cleanupNode(e){for(const t in e)t[0]==="_"&&t!=="_id"&&delete e[t];return this}}Q._idSeq=0;const F={alwaysShowResizeHandle:"mobile",animate:!0,auto:!0,cellHeight:"auto",cellHeightThrottle:100,cellHeightUnit:"px",column:12,draggable:{handle:".grid-stack-item-content",appendTo:"body",scroll:!0},handle:".grid-stack-item-content",itemClass:"grid-stack-item",margin:10,marginUnit:"px",maxRow:0,minRow:0,placeholderClass:"grid-stack-placeholder",placeholderText:"",removableOptions:{accept:"grid-stack-item",decline:"grid-stack-non-removable"},resizable:{handles:"se"},rtl:"auto"};class w{}const U=typeof window<"u"&&typeof document<"u"&&("ontouchstart"in document||"ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0);class Y{}function ye(l,e){l.touches.length>1||(l.cancelable&&l.preventDefault(),f.simulateMouseEvent(l.changedTouches[0],e))}function ct(l,e){l.cancelable&&l.preventDefault(),f.simulateMouseEvent(l,e)}function _e(l){Y.touchHandled||(Y.touchHandled=!0,ye(l,"mousedown"))}function be(l){Y.touchHandled&&ye(l,"mousemove")}function ve(l){if(!Y.touchHandled)return;Y.pointerLeaveTimeout&&(window.clearTimeout(Y.pointerLeaveTimeout),delete Y.pointerLeaveTimeout);const e=!!w.dragElement;ye(l,"mouseup"),e||ye(l,"click"),Y.touchHandled=!1}function we(l){l.pointerType!=="mouse"&&l.target.releasePointerCapture(l.pointerId)}function dt(l){w.dragElement&&l.pointerType!=="mouse"&&ct(l,"mouseenter")}function ht(l){w.dragElement&&l.pointerType!=="mouse"&&(Y.pointerLeaveTimeout=window.setTimeout(()=>{delete Y.pointerLeaveTimeout,ct(l,"mouseleave")},10))}class Ee{constructor(e,t,i){this.host=e,this.dir=t,this.option=i,this.moving=!1,this._mouseDown=this._mouseDown.bind(this),this._mouseMove=this._mouseMove.bind(this),this._mouseUp=this._mouseUp.bind(this),this._keyEvent=this._keyEvent.bind(this),this._init()}_init(){const e=this.el=document.createElement("div");return e.classList.add("ui-resizable-handle"),e.classList.add(`${Ee.prefix}${this.dir}`),e.style.zIndex="100",e.style.userSelect="none",this.host.appendChild(this.el),this.el.addEventListener("mousedown",this._mouseDown),U&&(this.el.addEventListener("touchstart",_e),this.el.addEventListener("pointerdown",we)),this}destroy(){return this.moving&&this._mouseUp(this.mouseDownEvent),this.el.removeEventListener("mousedown",this._mouseDown),U&&(this.el.removeEventListener("touchstart",_e),this.el.removeEventListener("pointerdown",we)),this.host.removeChild(this.el),delete this.el,delete this.host,this}_mouseDown(e){this.mouseDownEvent=e,document.addEventListener("mousemove",this._mouseMove,{capture:!0,passive:!0}),document.addEventListener("mouseup",this._mouseUp,!0),U&&(this.el.addEventListener("touchmove",be),this.el.addEventListener("touchend",ve)),e.stopPropagation(),e.preventDefault()}_mouseMove(e){const t=this.mouseDownEvent;this.moving?this._triggerEvent("move",e):Math.abs(e.x-t.x)+Math.abs(e.y-t.y)>2&&(this.moving=!0,this._triggerEvent("start",this.mouseDownEvent),this._triggerEvent("move",e),document.addEventListener("keydown",this._keyEvent)),e.stopPropagation()}_mouseUp(e){this.moving&&(this._triggerEvent("stop",e),document.removeEventListener("keydown",this._keyEvent)),document.removeEventListener("mousemove",this._mouseMove,!0),document.removeEventListener("mouseup",this._mouseUp,!0),U&&(this.el.removeEventListener("touchmove",be),this.el.removeEventListener("touchend",ve)),delete this.moving,delete this.mouseDownEvent,e.stopPropagation(),e.preventDefault()}_keyEvent(e){e.key==="Escape"&&(this.host.gridstackNode?.grid?.engine.restoreInitial(),this._mouseUp(this.mouseDownEvent))}_triggerEvent(e,t){return this.option[e]&&this.option[e](t),this}}Ee.prefix="ui-resizable-";class Te{constructor(){this._eventRegister={}}get disabled(){return this._disabled}on(e,t){this._eventRegister[e]=t}off(e){delete this._eventRegister[e]}enable(){this._disabled=!1}disable(){this._disabled=!0}destroy(){delete this._eventRegister}triggerEvent(e,t){if(!this.disabled&&this._eventRegister&&this._eventRegister[e])return this._eventRegister[e](t)}}class fe extends Te{constructor(e,t={}){super(),this.el=e,this.option=t,this.rectScale={x:1,y:1},this._ui=()=>{const s=this.el.parentElement.getBoundingClientRect(),r={width:this.originalRect.width,height:this.originalRect.height+this.scrolled,left:this.originalRect.left,top:this.originalRect.top-this.scrolled},a=this.temporalRect||r;return{position:{left:(a.left-s.left)*this.rectScale.x,top:(a.top-s.top)*this.rectScale.y},size:{width:a.width*this.rectScale.x,height:a.height*this.rectScale.y}}},this._mouseOver=this._mouseOver.bind(this),this._mouseOut=this._mouseOut.bind(this),this.enable(),this._setupAutoHide(this.option.autoHide),this._setupHandlers()}on(e,t){super.on(e,t)}off(e){super.off(e)}enable(){super.enable(),this.el.classList.remove("ui-resizable-disabled"),this._setupAutoHide(this.option.autoHide)}disable(){super.disable(),this.el.classList.add("ui-resizable-disabled"),this._setupAutoHide(!1)}destroy(){this._removeHandlers(),this._setupAutoHide(!1),delete this.el,super.destroy()}updateOption(e){const t=e.handles&&e.handles!==this.option.handles,i=e.autoHide&&e.autoHide!==this.option.autoHide;return Object.keys(e).forEach(s=>this.option[s]=e[s]),t&&(this._removeHandlers(),this._setupHandlers()),i&&this._setupAutoHide(this.option.autoHide),this}_setupAutoHide(e){return e?(this.el.classList.add("ui-resizable-autohide"),this.el.addEventListener("mouseover",this._mouseOver),this.el.addEventListener("mouseout",this._mouseOut)):(this.el.classList.remove("ui-resizable-autohide"),this.el.removeEventListener("mouseover",this._mouseOver),this.el.removeEventListener("mouseout",this._mouseOut),w.overResizeElement===this&&delete w.overResizeElement),this}_mouseOver(e){w.overResizeElement||w.dragElement||(w.overResizeElement=this,this.el.classList.remove("ui-resizable-autohide"))}_mouseOut(e){w.overResizeElement===this&&(delete w.overResizeElement,this.el.classList.add("ui-resizable-autohide"))}_setupHandlers(){return this.handlers=this.option.handles.split(",").map(e=>e.trim()).map(e=>new Ee(this.el,e,{start:t=>{this._resizeStart(t)},stop:t=>{this._resizeStop(t)},move:t=>{this._resizing(t,e)}})),this}_resizeStart(e){this.sizeToContent=f.shouldSizeToContent(this.el.gridstackNode,!0),this.originalRect=this.el.getBoundingClientRect(),this.scrollEl=f.getScrollElement(this.el),this.scrollY=this.scrollEl.scrollTop,this.scrolled=0,this.startEvent=e,this._setupHelper(),this._applyChange();const t=f.initEvent(e,{type:"resizestart",target:this.el});return this.option.start&&this.option.start(t,this._ui()),this.el.classList.add("ui-resizable-resizing"),this.triggerEvent("resizestart",t),this}_resizing(e,t){this.scrolled=this.scrollEl.scrollTop-this.scrollY,this.temporalRect=this._getChange(e,t),this._applyChange();const i=f.initEvent(e,{type:"resize",target:this.el});return this.option.resize&&this.option.resize(i,this._ui()),this.triggerEvent("resize",i),this}_resizeStop(e){const t=f.initEvent(e,{type:"resizestop",target:this.el});return this.option.stop&&this.option.stop(t),this.el.classList.remove("ui-resizable-resizing"),this.triggerEvent("resizestop",t),this._cleanHelper(),delete this.startEvent,delete this.originalRect,delete this.temporalRect,delete this.scrollY,delete this.scrolled,this}_setupHelper(){this.elOriginStyleVal=fe._originStyleProp.map(i=>this.el.style[i]),this.parentOriginStylePosition=this.el.parentElement.style.position;const e=this.el.parentElement,t=f.getValuesFromTransformedElement(e);return this.rectScale={x:t.xScale,y:t.yScale},getComputedStyle(this.el.parentElement).position.match(/static/)&&(this.el.parentElement.style.position="relative"),this.el.style.position="absolute",this.el.style.opacity="0.8",this}_cleanHelper(){return fe._originStyleProp.forEach((e,t)=>{this.el.style[e]=this.elOriginStyleVal[t]||null}),this.el.parentElement.style.position=this.parentOriginStylePosition||null,this}_getChange(e,t){const i=this.startEvent,s={width:this.originalRect.width,height:this.originalRect.height+this.scrolled,left:this.originalRect.left,top:this.originalRect.top-this.scrolled},r=e.clientX-i.clientX,a=this.sizeToContent?0:e.clientY-i.clientY;let o,h;t.indexOf("e")>-1?s.width+=r:t.indexOf("w")>-1&&(s.width-=r,s.left+=r,o=!0),t.indexOf("s")>-1?s.height+=a:t.indexOf("n")>-1&&(s.height-=a,s.top+=a,h=!0);const c=this._constrainSize(s.width,s.height,o,h);return Math.round(s.width)!==Math.round(c.width)&&(t.indexOf("w")>-1&&(s.left+=s.width-c.width),s.width=c.width),Math.round(s.height)!==Math.round(c.height)&&(t.indexOf("n")>-1&&(s.top+=s.height-c.height),s.height=c.height),s}_constrainSize(e,t,i,s){const r=this.option,a=(i?r.maxWidthMoveLeft:r.maxWidth)||Number.MAX_SAFE_INTEGER,o=r.minWidth/this.rectScale.x||e,h=(s?r.maxHeightMoveUp:r.maxHeight)||Number.MAX_SAFE_INTEGER,c=r.minHeight/this.rectScale.y||t,d=Math.min(a,Math.max(o,e)),u=Math.min(h,Math.max(c,t));return{width:d,height:u}}_applyChange(){let e={left:0,top:0,width:0,height:0};if(this.el.style.position==="absolute"){const t=this.el.parentElement,{left:i,top:s}=t.getBoundingClientRect();e={left:i,top:s,width:0,height:0}}return this.temporalRect?(Object.keys(this.temporalRect).forEach(t=>{const i=this.temporalRect[t],s=t==="width"||t==="left"?this.rectScale.x:t==="height"||t==="top"?this.rectScale.y:1;this.el.style[t]=(i-e[t])*s+"px"}),this):this}_removeHandlers(){return this.handlers.forEach(e=>e.destroy()),delete this.handlers,this}}fe._originStyleProp=["width","height","position","left","top","opacity","zIndex"];const mi='input,textarea,button,select,option,[contenteditable="true"],.ui-resizable-handle';class me extends Te{constructor(e,t={}){super(),this.el=e,this.option=t,this.dragTransform={xScale:1,yScale:1,xOffset:0,yOffset:0};const i=t?.handle?.substring(1),s=e.gridstackNode;this.dragEls=!i||e.classList.contains(i)?[e]:s?.subGrid?[e.querySelector(t.handle)||e]:Array.from(e.querySelectorAll(t.handle)),this.dragEls.length===0&&(this.dragEls=[e]),this._mouseDown=this._mouseDown.bind(this),this._mouseMove=this._mouseMove.bind(this),this._mouseUp=this._mouseUp.bind(this),this._keyEvent=this._keyEvent.bind(this),this.enable()}on(e,t){super.on(e,t)}off(e){super.off(e)}enable(){this.disabled!==!1&&(super.enable(),this.dragEls.forEach(e=>{e.addEventListener("mousedown",this._mouseDown),U&&(e.addEventListener("touchstart",_e),e.addEventListener("pointerdown",we))}),this.el.classList.remove("ui-draggable-disabled"))}disable(e=!1){this.disabled!==!0&&(super.disable(),this.dragEls.forEach(t=>{t.removeEventListener("mousedown",this._mouseDown),U&&(t.removeEventListener("touchstart",_e),t.removeEventListener("pointerdown",we))}),e||this.el.classList.add("ui-draggable-disabled"))}destroy(){this.dragTimeout&&window.clearTimeout(this.dragTimeout),delete this.dragTimeout,this.mouseDownEvent&&this._mouseUp(this.mouseDownEvent),this.disable(!0),delete this.el,delete this.helper,delete this.option,super.destroy()}updateOption(e){return Object.keys(e).forEach(t=>this.option[t]=e[t]),this}_mouseDown(e){if(!w.mouseHandled)return e.button!==0||!this.dragEls.find(t=>t===e.target)&&e.target.closest(mi)||this.option.cancel&&e.target.closest(this.option.cancel)||(this.mouseDownEvent=e,delete this.dragging,delete w.dragElement,delete w.dropElement,document.addEventListener("mousemove",this._mouseMove,{capture:!0,passive:!0}),document.addEventListener("mouseup",this._mouseUp,!0),U&&(e.currentTarget.addEventListener("touchmove",be),e.currentTarget.addEventListener("touchend",ve)),e.preventDefault(),document.activeElement&&document.activeElement.blur(),w.mouseHandled=!0),!0}_callDrag(e){if(!this.dragging)return;const t=f.initEvent(e,{target:this.el,type:"drag"});this.option.drag&&this.option.drag(t,this.ui()),this.triggerEvent("drag",t)}_mouseMove(e){const t=this.mouseDownEvent;if(this.lastDrag=e,this.dragging)if(this._dragFollow(e),w.pauseDrag){const i=Number.isInteger(w.pauseDrag)?w.pauseDrag:100;this.dragTimeout&&window.clearTimeout(this.dragTimeout),this.dragTimeout=window.setTimeout(()=>this._callDrag(e),i)}else this._callDrag(e);else if(Math.abs(e.x-t.x)+Math.abs(e.y-t.y)>3){this.dragging=!0,w.dragElement=this;const i=this.el.gridstackNode?.grid;i?w.dropElement=i.el.ddElement.ddDroppable:delete w.dropElement,this.helper=this._createHelper(),this._setupHelperContainmentStyle(),this.dragTransform=f.getValuesFromTransformedElement(this.helperContainment),this.dragOffset=this._getDragOffset(e,this.el,this.helperContainment),this._setupHelperStyle(e);const s=f.initEvent(e,{target:this.el,type:"dragstart"});this.option.start&&this.option.start(s,this.ui()),this.triggerEvent("dragstart",s),document.addEventListener("keydown",this._keyEvent)}return!0}_mouseUp(e){if(document.removeEventListener("mousemove",this._mouseMove,!0),document.removeEventListener("mouseup",this._mouseUp,!0),U&&e.currentTarget&&(e.currentTarget.removeEventListener("touchmove",be,!0),e.currentTarget.removeEventListener("touchend",ve,!0)),this.dragging){delete this.dragging,delete this.el.gridstackNode?._origRotate,document.removeEventListener("keydown",this._keyEvent),w.dropElement?.el===this.el.parentElement&&delete w.dropElement,this.helperContainment.style.position=this.parentOriginStylePosition||null,this.helper!==this.el&&this.helper.remove(),this._removeHelperStyle();const t=f.initEvent(e,{target:this.el,type:"dragstop"});this.option.stop&&this.option.stop(t),this.triggerEvent("dragstop",t),w.dropElement&&w.dropElement.drop(e)}delete this.helper,delete this.mouseDownEvent,delete w.dragElement,delete w.dropElement,delete w.mouseHandled,e.preventDefault()}_keyEvent(e){const t=this.el.gridstackNode,i=t?.grid||w.dropElement?.el?.gridstack;if(e.key==="Escape")t&&t._origRotate&&(t._orig=t._origRotate,delete t._origRotate),i?.cancelDrag(),this._mouseUp(this.mouseDownEvent);else if(t&&i&&(e.key==="r"||e.key==="R")){if(!f.canBeRotated(t))return;t._origRotate=t._origRotate||{...t._orig},delete t._moving,i.setAnimation(!1).rotate(t.el,{top:-this.dragOffset.offsetTop,left:-this.dragOffset.offsetLeft}).setAnimation(),t._moving=!0,this.dragOffset=this._getDragOffset(this.lastDrag,t.el,this.helperContainment),this.helper.style.width=this.dragOffset.width+"px",this.helper.style.height=this.dragOffset.height+"px",f.swap(t._orig,"w","h"),delete t._rect,this._mouseMove(this.lastDrag)}}_createHelper(){let e=this.el;return typeof this.option.helper=="function"?e=this.option.helper(this.el):this.option.helper==="clone"&&(e=f.cloneNode(this.el)),e.parentElement||f.appendTo(e,this.option.appendTo==="parent"?this.el.parentElement:this.option.appendTo),this.dragElementOriginStyle=me.originStyleProp.map(t=>this.el.style[t]),e}_setupHelperStyle(e){this.helper.classList.add("ui-draggable-dragging");const t=this.helper.style;return t.pointerEvents="none",t.width=this.dragOffset.width+"px",t.height=this.dragOffset.height+"px",t.willChange="left, top",t.position="fixed",this._dragFollow(e),t.transition="none",setTimeout(()=>{this.helper&&(t.transition=null)},0),this}_removeHelperStyle(){if(this.helper.classList.remove("ui-draggable-dragging"),!this.helper?.gridstackNode?._isAboutToRemove&&this.dragElementOriginStyle){const t=this.helper,i=this.dragElementOriginStyle.transition||null;t.style.transition=this.dragElementOriginStyle.transition="none",me.originStyleProp.forEach(s=>t.style[s]=this.dragElementOriginStyle[s]||null),setTimeout(()=>t.style.transition=i,50)}return delete this.dragElementOriginStyle,this}_dragFollow(e){const t={left:0,top:0},i=this.helper.style,s=this.dragOffset;i.left=(e.clientX+s.offsetLeft-t.left)*this.dragTransform.xScale+"px",i.top=(e.clientY+s.offsetTop-t.top)*this.dragTransform.yScale+"px"}_setupHelperContainmentStyle(){return this.helperContainment=this.helper.parentElement,this.helper.style.position!=="fixed"&&(this.parentOriginStylePosition=this.helperContainment.style.position,getComputedStyle(this.helperContainment).position.match(/static/)&&(this.helperContainment.style.position="relative")),this}_getDragOffset(e,t,i){let s=0,r=0;i&&(s=this.dragTransform.xOffset,r=this.dragTransform.yOffset);const a=t.getBoundingClientRect();return{left:a.left,top:a.top,offsetLeft:-e.clientX+a.left-s,offsetTop:-e.clientY+a.top-r,width:a.width*this.dragTransform.xScale,height:a.height*this.dragTransform.yScale}}ui(){const t=this.el.parentElement.getBoundingClientRect(),i=this.helper.getBoundingClientRect();return{position:{top:(i.top-t.top)*this.dragTransform.yScale,left:(i.left-t.left)*this.dragTransform.xScale}}}}me.originStyleProp=["width","height","transform","transform-origin","transition","pointerEvents","position","left","top","minWidth","willChange"];class gi extends Te{constructor(e,t={}){super(),this.el=e,this.option=t,this._mouseEnter=this._mouseEnter.bind(this),this._mouseLeave=this._mouseLeave.bind(this),this.enable(),this._setupAccept()}on(e,t){super.on(e,t)}off(e){super.off(e)}enable(){this.disabled!==!1&&(super.enable(),this.el.classList.add("ui-droppable"),this.el.classList.remove("ui-droppable-disabled"),this.el.addEventListener("mouseenter",this._mouseEnter),this.el.addEventListener("mouseleave",this._mouseLeave),U&&(this.el.addEventListener("pointerenter",dt),this.el.addEventListener("pointerleave",ht)))}disable(e=!1){this.disabled!==!0&&(super.disable(),this.el.classList.remove("ui-droppable"),e||this.el.classList.add("ui-droppable-disabled"),this.el.removeEventListener("mouseenter",this._mouseEnter),this.el.removeEventListener("mouseleave",this._mouseLeave),U&&(this.el.removeEventListener("pointerenter",dt),this.el.removeEventListener("pointerleave",ht)))}destroy(){this.disable(!0),this.el.classList.remove("ui-droppable"),this.el.classList.remove("ui-droppable-disabled"),super.destroy()}updateOption(e){return Object.keys(e).forEach(t=>this.option[t]=e[t]),this._setupAccept(),this}_mouseEnter(e){if(!w.dragElement||!this._canDrop(w.dragElement.el))return;e.preventDefault(),e.stopPropagation(),w.dropElement&&w.dropElement!==this&&w.dropElement._mouseLeave(e,!0),w.dropElement=this;const t=f.initEvent(e,{target:this.el,type:"dropover"});this.option.over&&this.option.over(t,this._ui(w.dragElement)),this.triggerEvent("dropover",t),this.el.classList.add("ui-droppable-over")}_mouseLeave(e,t=!1){if(!w.dragElement||w.dropElement!==this)return;e.preventDefault(),e.stopPropagation();const i=f.initEvent(e,{target:this.el,type:"dropout"});if(this.option.out&&this.option.out(i,this._ui(w.dragElement)),this.triggerEvent("dropout",i),w.dropElement===this&&(delete w.dropElement,!t)){let s,r=this.el.parentElement;for(;!s&&r;)s=r.ddElement?.ddDroppable,r=r.parentElement;s&&s._mouseEnter(e)}}drop(e){e.preventDefault();const t=f.initEvent(e,{target:this.el,type:"drop"});this.option.drop&&this.option.drop(t,this._ui(w.dragElement)),this.triggerEvent("drop",t)}_canDrop(e){return e&&(!this.accept||this.accept(e))}_setupAccept(){return this.option.accept?(typeof this.option.accept=="string"?this.accept=e=>e.classList.contains(this.option.accept)||e.matches(this.option.accept):this.accept=this.option.accept,this):this}_ui(e){return{draggable:e.el,...e.ui()}}}class Se{static init(e){return e.ddElement||(e.ddElement=new Se(e)),e.ddElement}constructor(e){this.el=e}on(e,t){return this.ddDraggable&&["drag","dragstart","dragstop"].indexOf(e)>-1?this.ddDraggable.on(e,t):this.ddDroppable&&["drop","dropover","dropout"].indexOf(e)>-1?this.ddDroppable.on(e,t):this.ddResizable&&["resizestart","resize","resizestop"].indexOf(e)>-1&&this.ddResizable.on(e,t),this}off(e){return this.ddDraggable&&["drag","dragstart","dragstop"].indexOf(e)>-1?this.ddDraggable.off(e):this.ddDroppable&&["drop","dropover","dropout"].indexOf(e)>-1?this.ddDroppable.off(e):this.ddResizable&&["resizestart","resize","resizestop"].indexOf(e)>-1&&this.ddResizable.off(e),this}setupDraggable(e){return this.ddDraggable?this.ddDraggable.updateOption(e):this.ddDraggable=new me(this.el,e),this}cleanDraggable(){return this.ddDraggable&&(this.ddDraggable.destroy(),delete this.ddDraggable),this}setupResizable(e){return this.ddResizable?this.ddResizable.updateOption(e):this.ddResizable=new fe(this.el,e),this}cleanResizable(){return this.ddResizable&&(this.ddResizable.destroy(),delete this.ddResizable),this}setupDroppable(e){return this.ddDroppable?this.ddDroppable.updateOption(e):this.ddDroppable=new gi(this.el,e),this}cleanDroppable(){return this.ddDroppable&&(this.ddDroppable.destroy(),delete this.ddDroppable),this}}class pi{resizable(e,t,i,s){return this._getDDElements(e,t).forEach(r=>{if(t==="disable"||t==="enable")r.ddResizable&&r.ddResizable[t]();else if(t==="destroy")r.ddResizable&&r.cleanResizable();else if(t==="option")r.setupResizable({[i]:s});else{const o=r.el.gridstackNode.grid;let h=r.el.getAttribute("gs-resize-handles")||o.opts.resizable.handles||"e,s,se";h==="all"&&(h="n,e,s,w,se,sw,ne,nw");const c=!o.opts.alwaysShowResizeHandle;r.setupResizable({...o.opts.resizable,handles:h,autoHide:c,start:t.start,stop:t.stop,resize:t.resize})}}),this}draggable(e,t,i,s){return this._getDDElements(e,t).forEach(r=>{if(t==="disable"||t==="enable")r.ddDraggable&&r.ddDraggable[t]();else if(t==="destroy")r.ddDraggable&&r.cleanDraggable();else if(t==="option")r.setupDraggable({[i]:s});else{const a=r.el.gridstackNode.grid;r.setupDraggable({...a.opts.draggable,start:t.start,stop:t.stop,drag:t.drag})}}),this}dragIn(e,t){return this._getDDElements(e).forEach(i=>i.setupDraggable(t)),this}droppable(e,t,i,s){return typeof t.accept=="function"&&!t._accept&&(t._accept=t.accept,t.accept=r=>t._accept(r)),this._getDDElements(e,t).forEach(r=>{t==="disable"||t==="enable"?r.ddDroppable&&r.ddDroppable[t]():t==="destroy"?r.ddDroppable&&r.cleanDroppable():t==="option"?r.setupDroppable({[i]:s}):r.setupDroppable(t)}),this}isDroppable(e){return!!(e?.ddElement?.ddDroppable&&!e.ddElement.ddDroppable.disabled)}isDraggable(e){return!!(e?.ddElement?.ddDraggable&&!e.ddElement.ddDraggable.disabled)}isResizable(e){return!!(e?.ddElement?.ddResizable&&!e.ddElement.ddResizable.disabled)}on(e,t,i){return this._getDDElements(e).forEach(s=>s.on(t,r=>{i(r,w.dragElement?w.dragElement.el:r.target,w.dragElement?w.dragElement.helper:null)})),this}off(e,t){return this._getDDElements(e).forEach(i=>i.off(t)),this}_getDDElements(e,t){const i=e.gridstack||t!=="destroy"&&t!=="disable",s=f.getElements(e);return s.length?s.map(a=>a.ddElement||(i?Se.init(a):null)).filter(a=>a):[]}}const B=new pi;class v{static init(e={},t=".grid-stack"){if(typeof document>"u")return null;const i=v.getGridElement(t);return i?(i.gridstack||(i.gridstack=new v(i,f.cloneDeep(e))),i.gridstack):(console.error(typeof t=="string"?'GridStack.initAll() no grid was found with selector "'+t+`" - element missing or wrong selector ?
2
+ Note: ".grid-stack" is required for proper CSS styling and drag/drop, and is the default selector.`:"GridStack.init() no grid element was passed."),null)}static initAll(e={},t=".grid-stack"){const i=[];return typeof document>"u"||(v.getGridElements(t).forEach(s=>{s.gridstack||(s.gridstack=new v(s,f.cloneDeep(e))),i.push(s.gridstack)}),i.length===0&&console.error('GridStack.initAll() no grid was found with selector "'+t+`" - element missing or wrong selector ?
3
+ Note: ".grid-stack" is required for proper CSS styling and drag/drop, and is the default selector.`)),i}static addGrid(e,t={}){if(!e)return null;let i=e;if(i.gridstack){const a=i.gridstack;return t&&(a.opts={...a.opts,...t}),t.children!==void 0&&a.load(t.children),a}return(!e.classList.contains("grid-stack")||v.addRemoveCB)&&(v.addRemoveCB?i=v.addRemoveCB(e,t,!0,!0):i=f.createDiv(["grid-stack",t.class],e)),v.init(t,i)}static registerEngine(e){v.engineClass=e}get placeholder(){if(!this._placeholder){this._placeholder=f.createDiv([this.opts.placeholderClass,F.itemClass,this.opts.itemClass]);const e=f.createDiv(["placeholder-content"],this._placeholder);this.opts.placeholderText&&(e.textContent=this.opts.placeholderText)}return this._placeholder}constructor(e,t={}){this.el=e,this.opts=t,this.animationDelay=310,this._gsEventHandler={},this._extraDragRow=0,this.dragTransform={xScale:1,yScale:1,xOffset:0,yOffset:0},e.gridstack=this,this.opts=t=t||{},e.classList.contains("grid-stack")||this.el.classList.add("grid-stack"),t.row&&(t.minRow=t.maxRow=t.row,delete t.row);const i=f.toNumber(e.getAttribute("gs-row"));t.column==="auto"&&delete t.column,t.alwaysShowResizeHandle!==void 0&&(t._alwaysShowResizeHandle=t.alwaysShowResizeHandle);let s=t.columnOpts?.breakpoints;const r=t;if(r.oneColumnModeDomSort&&(delete r.oneColumnModeDomSort,console.log("warning: Gridstack oneColumnModeDomSort no longer supported. Use GridStackOptions.columnOpts instead.")),r.oneColumnSize||r.disableOneColumnMode===!1){const u=r.oneColumnSize||768;delete r.oneColumnSize,delete r.disableOneColumnMode,t.columnOpts=t.columnOpts||{},s=t.columnOpts.breakpoints=t.columnOpts.breakpoints||[];let m=s.find(g=>g.c===1);m?m.w=u:(m={c:1,w:u},s.push(m,{c:12,w:u+1}))}const a=t.columnOpts;a&&(!a.columnWidth&&!a.breakpoints?.length?(delete t.columnOpts,s=void 0):a.columnMax=a.columnMax||12),s?.length>1&&s.sort((u,m)=>(m.w||0)-(u.w||0));const o={...f.cloneDeep(F),column:f.toNumber(e.getAttribute("gs-column"))||F.column,minRow:i||f.toNumber(e.getAttribute("gs-min-row"))||F.minRow,maxRow:i||f.toNumber(e.getAttribute("gs-max-row"))||F.maxRow,staticGrid:f.toBool(e.getAttribute("gs-static"))||F.staticGrid,sizeToContent:f.toBool(e.getAttribute("gs-size-to-content"))||void 0,draggable:{handle:(t.handleClass?"."+t.handleClass:t.handle?t.handle:"")||F.draggable.handle},removableOptions:{accept:t.itemClass||F.removableOptions.accept,decline:F.removableOptions.decline}};e.getAttribute("gs-animate")&&(o.animate=f.toBool(e.getAttribute("gs-animate"))),t=f.defaults(t,o),this._initMargin(),this.checkDynamicColumn(),this.el.classList.add("gs-"+t.column),t.rtl==="auto"&&(t.rtl=e.style.direction==="rtl"),t.rtl&&this.el.classList.add("grid-stack-rtl");const c=this.el.closest("."+F.itemClass)?.gridstackNode;c&&(c.subGrid=this,this.parentGridNode=c,this.el.classList.add("grid-stack-nested"),c.el.classList.add("grid-stack-sub-grid")),this._isAutoCellHeight=t.cellHeight==="auto",this._isAutoCellHeight||t.cellHeight==="initial"?this.cellHeight(void 0,!1):(typeof t.cellHeight=="number"&&t.cellHeightUnit&&t.cellHeightUnit!==F.cellHeightUnit&&(t.cellHeight=t.cellHeight+t.cellHeightUnit,delete t.cellHeightUnit),this.cellHeight(t.cellHeight,!1)),t.alwaysShowResizeHandle==="mobile"&&(t.alwaysShowResizeHandle=U),this._styleSheetClass="gs-id-"+Q._idSeq++,this.el.classList.add(this._styleSheetClass),this._setStaticClass();const d=t.engineClass||v.engineClass||Q;if(this.engine=new d({column:this.getColumn(),float:t.float,maxRow:t.maxRow,onChange:u=>{let m=0;this.engine.nodes.forEach(g=>{m=Math.max(m,g.y+g.h)}),u.forEach(g=>{const p=g.el;p&&(g._removeDOM?(p&&p.remove(),delete g._removeDOM):this._writePosAttr(p,g))}),this._updateStyles(!1,m)}}),this._updateStyles(!1,0),t.auto&&(this.batchUpdate(),this.engine._loading=!0,this.getGridItems().forEach(u=>this._prepareElement(u)),delete this.engine._loading,this.batchUpdate(!1)),t.children){const u=t.children;delete t.children,u.length&&this.load(u)}this.setAnimation(),t.subGridDynamic&&!w.pauseDrag&&(w.pauseDrag=!0),t.draggable?.pause!==void 0&&(w.pauseDrag=t.draggable.pause),this._setupRemoveDrop(),this._setupAcceptWidget(),this._updateResizeEvent()}addWidget(e){if(typeof e=="string"){console.error("V11: GridStack.addWidget() does not support string anymore. see #2736");return}if(e.ELEMENT_NODE)return console.error("V11: GridStack.addWidget() does not support HTMLElement anymore. use makeWidget()"),this.makeWidget(e);let t,i=e;if(i.grid=this,i?.el?t=i.el:v.addRemoveCB?t=v.addRemoveCB(this.el,e,!0,!1):t=this.createWidgetDivs(i),!t)return;if(i=t.gridstackNode,i&&t.parentElement===this.el&&this.engine.nodes.find(r=>r._id===i._id))return t;const s=this._readAttr(t);return f.defaults(e,s),this.engine.prepareNode(e),this.el.appendChild(t),this.makeWidget(t,e),t}createWidgetDivs(e){const t=f.createDiv(["grid-stack-item",this.opts.itemClass]),i=f.createDiv(["grid-stack-item-content"],t);return f.lazyLoad(e)?e.visibleObservable||(e.visibleObservable=new IntersectionObserver(([s])=>{s.isIntersecting&&(e.visibleObservable?.disconnect(),delete e.visibleObservable,v.renderCB(i,e),e.grid?.prepareDragDrop(e.el))}),window.setTimeout(()=>e.visibleObservable?.observe(t))):v.renderCB(i,e),t}makeSubGrid(e,t,i,s=!0){let r=e.gridstackNode;if(r||(r=this.makeWidget(e).gridstackNode),r.subGrid?.el)return r.subGrid;let a,o=this;for(;o&&!a;)a=o.opts?.subGridOpts,o=o.parentGridNode?.grid;t=f.cloneDeep({...this.opts,id:void 0,children:void 0,column:"auto",columnOpts:void 0,layout:"list",subGridOpts:void 0,...a||{},...t||r.subGridOpts||{}}),r.subGridOpts=t;let h;t.column==="auto"&&(h=!0,t.column=Math.max(r.w||1,i?.w||1),delete t.columnOpts);let c=r.el.querySelector(".grid-stack-item-content"),d,u;if(s&&(this._removeDD(r.el),u={...r,x:0,y:0},f.removeInternalForSave(u),delete u.subGridOpts,r.content&&(u.content=r.content,delete r.content),v.addRemoveCB?d=v.addRemoveCB(this.el,u,!0,!1):(d=f.createDiv(["grid-stack-item"]),d.appendChild(c),c=f.createDiv(["grid-stack-item-content"],r.el)),this.prepareDragDrop(r.el)),i){const g=h?t.column:r.w,p=r.h+i.h,_=r.el.style;_.transition="none",this.update(r.el,{w:g,h:p}),setTimeout(()=>_.transition=null)}const m=r.subGrid=v.addGrid(c,t);return i?._moving&&(m._isTemp=!0),h&&(m._autoColumn=!0),s&&m.makeWidget(d,u),i&&(i._moving?window.setTimeout(()=>f.simulateMouseEvent(i._event,"mouseenter",m.el),0):m.makeWidget(r.el,r)),this.resizeToContentCheck(!1,r),m}removeAsSubGrid(e){const t=this.parentGridNode?.grid;t&&(t.batchUpdate(),t.removeWidget(this.parentGridNode.el,!0,!0),this.engine.nodes.forEach(i=>{i.x+=this.parentGridNode.x,i.y+=this.parentGridNode.y,t.makeWidget(i.el,i)}),t.batchUpdate(!1),this.parentGridNode&&delete this.parentGridNode.subGrid,delete this.parentGridNode,e&&window.setTimeout(()=>f.simulateMouseEvent(e._event,"mouseenter",t.el),0))}save(e=!0,t=!1,i=v.saveCB){const s=this.engine.save(e,i);if(s.forEach(r=>{if(e&&r.el&&!r.subGrid&&!i){const a=r.el.querySelector(".grid-stack-item-content");r.content=a?.innerHTML,r.content||delete r.content}else if(!e&&!i&&delete r.content,r.subGrid?.el){const a=r.subGrid.save(e,t,i);r.subGridOpts=t?a:{children:a},delete r.subGrid}delete r.el}),t){const r=f.cloneDeep(this.opts);r.marginBottom===r.marginTop&&r.marginRight===r.marginLeft&&r.marginTop===r.marginRight&&(r.margin=r.marginTop,delete r.marginTop,delete r.marginRight,delete r.marginBottom,delete r.marginLeft),r.rtl===(this.el.style.direction==="rtl")&&(r.rtl="auto"),this._isAutoCellHeight&&(r.cellHeight="auto"),this._autoColumn&&(r.column="auto");const a=r._alwaysShowResizeHandle;return delete r._alwaysShowResizeHandle,a!==void 0?r.alwaysShowResizeHandle=a:delete r.alwaysShowResizeHandle,f.removeInternalAndSame(r,F),r.children=s,r}return s}load(e,t=v.addRemoveCB||!0){e=f.cloneDeep(e);const i=this.getColumn();e.forEach(c=>{c.w=c.w||1,c.h=c.h||1}),e=f.sort(e),this.engine.skipCacheUpdate=this._ignoreLayoutsNodeChange=!0;let s=0;e.forEach(c=>{s=Math.max(s,(c.x||0)+c.w)}),s>this.engine.defaultColumn&&(this.engine.defaultColumn=s),s>i&&this.engine.cacheLayout(e,s,!0);const r=v.addRemoveCB;typeof t=="function"&&(v.addRemoveCB=t);const a=[];this.batchUpdate();const o=!this.engine.nodes.length;o&&this.setAnimation(!1),!o&&t&&[...this.engine.nodes].forEach(d=>{if(!d.id)return;f.find(e,d.id)||(v.addRemoveCB&&v.addRemoveCB(this.el,d,!1,!1),a.push(d),this.removeWidget(d.el,!0,!1))}),this.engine._loading=!0;const h=[];return this.engine.nodes=this.engine.nodes.filter(c=>f.find(e,c.id)?(h.push(c),!1):!0),e.forEach(c=>{const d=f.find(h,c.id);if(d){if(f.shouldSizeToContent(d)&&(c.h=d.h),this.engine.nodeBoundFix(c),(c.autoPosition||c.x===void 0||c.y===void 0)&&(c.w=c.w||d.w,c.h=c.h||d.h,this.engine.findEmptyPosition(c)),this.engine.nodes.push(d),f.samePos(d,c)&&this.engine.nodes.length>1&&(this.moveNode(d,{...c,forceCollide:!0}),f.copyPos(c,d)),this.update(d.el,c),c.subGridOpts?.children){const u=d.el.querySelector(".grid-stack");u&&u.gridstack&&u.gridstack.load(c.subGridOpts.children)}}else t&&this.addWidget(c)}),delete this.engine._loading,this.engine.removedNodes=a,this.batchUpdate(!1),delete this._ignoreLayoutsNodeChange,delete this.engine.skipCacheUpdate,r?v.addRemoveCB=r:delete v.addRemoveCB,o&&this.opts?.animate&&this.setAnimation(this.opts.animate,!0),this}batchUpdate(e=!0){return this.engine.batchUpdate(e),e||(this._updateContainerHeight(),this._triggerRemoveEvent(),this._triggerAddEvent(),this._triggerChangeEvent()),this}getCellHeight(e=!1){if(this.opts.cellHeight&&this.opts.cellHeight!=="auto"&&(!e||!this.opts.cellHeightUnit||this.opts.cellHeightUnit==="px"))return this.opts.cellHeight;if(this.opts.cellHeightUnit==="rem")return this.opts.cellHeight*parseFloat(getComputedStyle(document.documentElement).fontSize);if(this.opts.cellHeightUnit==="em")return this.opts.cellHeight*parseFloat(getComputedStyle(this.el).fontSize);if(this.opts.cellHeightUnit==="cm")return this.opts.cellHeight*(96/2.54);if(this.opts.cellHeightUnit==="mm")return this.opts.cellHeight*(96/2.54)/10;const t=this.el.querySelector("."+this.opts.itemClass);if(t){const s=f.toNumber(t.getAttribute("gs-h"))||1;return Math.round(t.offsetHeight/s)}const i=parseInt(this.el.getAttribute("gs-current-row"));return i?Math.round(this.el.getBoundingClientRect().height/i):this.opts.cellHeight}cellHeight(e,t=!0){if(t&&e!==void 0&&this._isAutoCellHeight!==(e==="auto")&&(this._isAutoCellHeight=e==="auto",this._updateResizeEvent()),(e==="initial"||e==="auto")&&(e=void 0),e===void 0){const s=-this.opts.marginRight-this.opts.marginLeft+this.opts.marginTop+this.opts.marginBottom;e=this.cellWidth()+s}const i=f.parseHeight(e);return this.opts.cellHeightUnit===i.unit&&this.opts.cellHeight===i.h?this:(this.opts.cellHeightUnit=i.unit,this.opts.cellHeight=i.h,this.resizeToContentCheck(),t&&this._updateStyles(!0),this)}cellWidth(){return this._widthOrContainer()/this.getColumn()}_widthOrContainer(e=!1){return e&&this.opts.columnOpts?.breakpointForWindow?window.innerWidth:this.el.clientWidth||this.el.parentElement.clientWidth||window.innerWidth}checkDynamicColumn(){const e=this.opts.columnOpts;if(!e||!e.columnWidth&&!e.breakpoints?.length)return!1;const t=this.getColumn();let i=t;const s=this._widthOrContainer(!0);if(e.columnWidth)i=Math.min(Math.round(s/e.columnWidth)||1,e.columnMax);else{i=e.columnMax;let r=0;for(;r<e.breakpoints.length&&s<=e.breakpoints[r].w;)i=e.breakpoints[r++].c||t}if(i!==t){const r=e.breakpoints?.find(a=>a.c===i);return this.column(i,r?.layout||e.layout),!0}return!1}compact(e="compact",t=!0){return this.engine.compact(e,t),this._triggerChangeEvent(),this}column(e,t="moveScale"){if(!e||e<1||this.opts.column===e)return this;const i=this.getColumn();return this.opts.column=e,this.engine?(this.engine.column=e,this.el.classList.remove("gs-"+i),this.el.classList.add("gs-"+e),this.engine.columnChanged(i,e,t),this._isAutoCellHeight&&this.cellHeight(),this.resizeToContentCheck(!0),this._ignoreLayoutsNodeChange=!0,this._triggerChangeEvent(),delete this._ignoreLayoutsNodeChange,this):this}getColumn(){return this.opts.column}getGridItems(){return Array.from(this.el.children).filter(e=>e.matches("."+this.opts.itemClass)&&!e.matches("."+this.opts.placeholderClass))}isIgnoreChangeCB(){return this._ignoreLayoutsNodeChange}destroy(e=!0){if(this.el)return this.offAll(),this._updateResizeEvent(!0),this.setStatic(!0,!1),this.setAnimation(!1),e?this.el.parentNode.removeChild(this.el):(this.removeAll(e),this.el.classList.remove(this._styleSheetClass),this.el.removeAttribute("gs-current-row")),this._removeStylesheet(),delete this.parentGridNode?.subGrid,delete this.parentGridNode,delete this.opts,delete this._placeholder?.gridstackNode,delete this._placeholder,delete this.engine,delete this.el.gridstack,delete this.el,this}float(e){return this.opts.float!==e&&(this.opts.float=this.engine.float=e,this._triggerChangeEvent()),this}getFloat(){return this.engine.float}getCellFromPixel(e,t=!1){const i=this.el.getBoundingClientRect();let s;t?s={top:i.top+document.documentElement.scrollTop,left:i.left}:s={top:this.el.offsetTop,left:this.el.offsetLeft};const r=e.left-s.left,a=e.top-s.top,o=i.width/this.getColumn(),h=i.height/parseInt(this.el.getAttribute("gs-current-row"));return{x:Math.floor(r/o),y:Math.floor(a/h)}}getRow(){return Math.max(this.engine.getRow(),this.opts.minRow)}isAreaEmpty(e,t,i,s){return this.engine.isAreaEmpty(e,t,i,s)}makeWidget(e,t){const i=v.getElement(e);if(!i)return;i.parentElement||this.el.appendChild(i),this._prepareElement(i,!0,t);const s=i.gridstackNode;this._updateContainerHeight(),s.subGridOpts&&this.makeSubGrid(i,s.subGridOpts,void 0,!1);let r;return this.opts.column===1&&!this._ignoreLayoutsNodeChange&&(r=this._ignoreLayoutsNodeChange=!0),this._triggerAddEvent(),this._triggerChangeEvent(),r&&delete this._ignoreLayoutsNodeChange,i}on(e,t){return e.indexOf(" ")!==-1?(e.split(" ").forEach(s=>this.on(s,t)),this):(e==="change"||e==="added"||e==="removed"||e==="enable"||e==="disable"?(e==="enable"||e==="disable"?this._gsEventHandler[e]=s=>t(s):this._gsEventHandler[e]=s=>{s.detail&&t(s,s.detail)},this.el.addEventListener(e,this._gsEventHandler[e])):e==="drag"||e==="dragstart"||e==="dragstop"||e==="resizestart"||e==="resize"||e==="resizestop"||e==="dropped"||e==="resizecontent"?this._gsEventHandler[e]=t:console.error("GridStack.on("+e+") event not supported"),this)}off(e){return e.indexOf(" ")!==-1?(e.split(" ").forEach(i=>this.off(i)),this):((e==="change"||e==="added"||e==="removed"||e==="enable"||e==="disable")&&this._gsEventHandler[e]&&this.el.removeEventListener(e,this._gsEventHandler[e]),delete this._gsEventHandler[e],this)}offAll(){return Object.keys(this._gsEventHandler).forEach(e=>this.off(e)),this}removeWidget(e,t=!0,i=!0){return e?(v.getElements(e).forEach(s=>{if(s.parentElement&&s.parentElement!==this.el)return;let r=s.gridstackNode;r||(r=this.engine.nodes.find(a=>s===a.el)),r&&(t&&v.addRemoveCB&&v.addRemoveCB(this.el,r,!1,!1),delete s.gridstackNode,this._removeDD(s),this.engine.removeNode(r,t,i),t&&s.parentElement&&s.remove())}),i&&(this._triggerRemoveEvent(),this._triggerChangeEvent()),this):(console.error("Error: GridStack.removeWidget(undefined) called"),this)}removeAll(e=!0,t=!0){return this.engine.nodes.forEach(i=>{e&&v.addRemoveCB&&v.addRemoveCB(this.el,i,!1,!1),delete i.el.gridstackNode,this.opts.staticGrid||this._removeDD(i.el)}),this.engine.removeAll(e,t),t&&this._triggerRemoveEvent(),this}setAnimation(e=this.opts.animate,t){return t?setTimeout(()=>{this.opts&&this.setAnimation(e)}):e?this.el.classList.add("grid-stack-animate"):this.el.classList.remove("grid-stack-animate"),this}hasAnimationCSS(){return this.el.classList.contains("grid-stack-animate")}setStatic(e,t=!0,i=!0){return!!this.opts.staticGrid===e?this:(e?this.opts.staticGrid=!0:delete this.opts.staticGrid,this._setupRemoveDrop(),this._setupAcceptWidget(),this.engine.nodes.forEach(s=>{this.prepareDragDrop(s.el),s.subGrid&&i&&s.subGrid.setStatic(e,t,i)}),t&&this._setStaticClass(),this)}updateOptions(e){const t=this.opts;return e.acceptWidgets!==void 0&&this._setupAcceptWidget(),e.animate!==void 0&&this.setAnimation(),e.cellHeight&&(this.cellHeight(e.cellHeight,!0),delete e.cellHeight),e.class&&e.class!==t.class&&(t.class&&this.el.classList.remove(t.class),this.el.classList.add(e.class)),typeof e.column=="number"&&!e.columnOpts&&(this.column(e.column),delete e.column),e.margin!==void 0&&this.margin(e.margin),e.staticGrid!==void 0&&this.setStatic(e.staticGrid),e.disableDrag!==void 0&&!e.staticGrid&&this.enableMove(!e.disableDrag),e.disableResize!==void 0&&!e.staticGrid&&this.enableResize(!e.disableResize),e.float!==void 0&&this.float(e.float),e.row!==void 0&&(t.minRow=t.maxRow=e.row),e.children?.length&&(this.load(e.children),delete e.children),this.opts={...this.opts,...e},this}update(e,t){return v.getElements(e).forEach(i=>{const s=i?.gridstackNode;if(!s)return;const r={...f.copyPos({},s),...f.cloneDeep(t)};this.engine.nodeBoundFix(r),delete r.autoPosition;const a=["x","y","w","h"];let o;if(a.some(d=>r[d]!==void 0&&r[d]!==s[d])&&(o={},a.forEach(d=>{o[d]=r[d]!==void 0?r[d]:s[d],delete r[d]})),!o&&(r.minW||r.minH||r.maxW||r.maxH)&&(o={}),r.content!==void 0){const d=i.querySelector(".grid-stack-item-content");d&&d.textContent!==r.content&&(s.content=r.content,v.renderCB(d,r),s.subGrid?.el&&(d.appendChild(s.subGrid.el),s.subGrid.opts.styleInHead||s.subGrid._updateStyles(!0))),delete r.content}let h=!1,c=!1;for(const d in r)d[0]!=="_"&&s[d]!==r[d]&&(s[d]=r[d],h=!0,c=c||!this.opts.staticGrid&&(d==="noResize"||d==="noMove"||d==="locked"));if(f.sanitizeMinMax(s),o){const d=o.w!==void 0&&o.w!==s.w;this.moveNode(s,o),d&&s.subGrid?s.subGrid.onResize(this.hasAnimationCSS()?s.w:void 0):this.resizeToContentCheck(d,s),delete s._orig}(o||h)&&this._writeAttr(i,s),c&&this.prepareDragDrop(s.el)}),this}moveNode(e,t){const i=e._updating;i||this.engine.cleanNodes().beginUpdate(e),this.engine.moveNode(e,t),this._updateContainerHeight(),i||(this._triggerChangeEvent(),this.engine.endUpdate())}resizeToContent(e){if(!e||(e.classList.remove("size-to-content-max"),!e.clientHeight))return;const t=e.gridstackNode;if(!t)return;const i=t.grid;if(!i||e.parentElement!==i.el)return;const s=i.getCellHeight(!0);if(!s)return;let r=t.h?t.h*s:e.clientHeight,a;if(t.resizeToContentParent&&(a=e.querySelector(t.resizeToContentParent)),a||(a=e.querySelector(v.resizeToContentParent)),!a)return;const o=e.clientHeight-a.clientHeight,h=t.h?t.h*s-o:a.clientHeight;let c;if(t.subGrid){c=t.subGrid.getRow()*t.subGrid.getCellHeight(!0);const m=t.subGrid.el.getBoundingClientRect(),g=t.subGrid.el.parentElement.getBoundingClientRect();c+=m.top-g.top}else{if(t.subGridOpts?.children?.length)return;{const m=a.firstElementChild;if(!m){console.error(`Error: GridStack.resizeToContent() widget id:${t.id} '${v.resizeToContentParent}'.firstElementChild is null, make sure to have a div like container. Skipping sizing.`);return}c=m.getBoundingClientRect().height||h}}if(h===c)return;r+=c-h;let d=Math.ceil(r/s);const u=Number.isInteger(t.sizeToContent)?t.sizeToContent:0;u&&d>u&&(d=u,e.classList.add("size-to-content-max")),t.minH&&d<t.minH?d=t.minH:t.maxH&&d>t.maxH&&(d=t.maxH),d!==t.h&&(i._ignoreLayoutsNodeChange=!0,i.moveNode(t,{h:d}),delete i._ignoreLayoutsNodeChange)}resizeToContentCBCheck(e){v.resizeToContentCB?v.resizeToContentCB(e):this.resizeToContent(e)}rotate(e,t){return v.getElements(e).forEach(i=>{const s=i.gridstackNode;if(!f.canBeRotated(s))return;const r={w:s.h,h:s.w,minH:s.minW,minW:s.minH,maxH:s.maxW,maxW:s.maxH};if(t){const o=t.left>0?Math.floor(t.left/this.cellWidth()):0,h=t.top>0?Math.floor(t.top/this.opts.cellHeight):0;r.x=s.x+o-(s.h-(h+1)),r.y=s.y+h-o}Object.keys(r).forEach(o=>{r[o]===void 0&&delete r[o]});const a=s._orig;this.update(i,r),s._orig=a}),this}margin(e){if(!(typeof e=="string"&&e.split(" ").length>1)){const i=f.parseHeight(e);if(this.opts.marginUnit===i.unit&&this.opts.margin===i.h)return}return this.opts.margin=e,this.opts.marginTop=this.opts.marginBottom=this.opts.marginLeft=this.opts.marginRight=void 0,this._initMargin(),this._updateStyles(!0),this}getMargin(){return this.opts.margin}willItFit(e){if(arguments.length>1){console.warn("gridstack.ts: `willItFit(x,y,w,h,autoPosition)` is deprecated. Use `willItFit({x, y,...})`. It will be removed soon");const t=arguments;let i=0,s={x:t[i++],y:t[i++],w:t[i++],h:t[i++],autoPosition:t[i++]};return this.willItFit(s)}return this.engine.willItFit(e)}_triggerChangeEvent(){if(this.engine.batchMode)return this;const e=this.engine.getDirtyNodes(!0);return e&&e.length&&(this._ignoreLayoutsNodeChange||this.engine.layoutsNodesChange(e),this._triggerEvent("change",e)),this.engine.saveInitial(),this}_triggerAddEvent(){if(this.engine.batchMode)return this;if(this.engine.addedNodes?.length){this._ignoreLayoutsNodeChange||this.engine.layoutsNodesChange(this.engine.addedNodes),this.engine.addedNodes.forEach(t=>{delete t._dirty});const e=[...this.engine.addedNodes];this.engine.addedNodes=[],this._triggerEvent("added",e)}return this}_triggerRemoveEvent(){if(this.engine.batchMode)return this;if(this.engine.removedNodes?.length){const e=[...this.engine.removedNodes];this.engine.removedNodes=[],this._triggerEvent("removed",e)}return this}_triggerEvent(e,t){const i=t?new CustomEvent(e,{bubbles:!1,detail:t}):new Event(e);return this.el.dispatchEvent(i),this}_removeStylesheet(){if(this._styles){const e=this.opts.styleInHead?void 0:this.el.parentNode;f.removeStylesheet(this._styleSheetClass,e),delete this._styles}return this}_updateStyles(e=!1,t){if(e&&this._removeStylesheet(),t===void 0&&(t=this.getRow()),this._updateContainerHeight(),this.opts.cellHeight===0)return this;const i=this.opts.cellHeight,s=this.opts.cellHeightUnit,r=`.${this._styleSheetClass} > .${this.opts.itemClass}`;if(!this._styles){const a=this.opts.styleInHead?void 0:this.el.parentNode;if(this._styles=f.createStylesheet(this._styleSheetClass,a,{nonce:this.opts.nonce}),!this._styles)return this;this._styles._max=0,f.addCSSRule(this._styles,r,`height: ${i}${s}`);const o=this.opts.marginTop+this.opts.marginUnit,h=this.opts.marginBottom+this.opts.marginUnit,c=this.opts.marginRight+this.opts.marginUnit,d=this.opts.marginLeft+this.opts.marginUnit,u=`${r} > .grid-stack-item-content`,m=`.${this._styleSheetClass} > .grid-stack-placeholder > .placeholder-content`;f.addCSSRule(this._styles,u,`top: ${o}; right: ${c}; bottom: ${h}; left: ${d};`),f.addCSSRule(this._styles,m,`top: ${o}; right: ${c}; bottom: ${h}; left: ${d};`),f.addCSSRule(this._styles,`${r} > .ui-resizable-n`,`top: ${o};`),f.addCSSRule(this._styles,`${r} > .ui-resizable-s`,`bottom: ${h}`),f.addCSSRule(this._styles,`${r} > .ui-resizable-ne`,`right: ${c}; top: ${o}`),f.addCSSRule(this._styles,`${r} > .ui-resizable-e`,`right: ${c}`),f.addCSSRule(this._styles,`${r} > .ui-resizable-se`,`right: ${c}; bottom: ${h}`),f.addCSSRule(this._styles,`${r} > .ui-resizable-nw`,`left: ${d}; top: ${o}`),f.addCSSRule(this._styles,`${r} > .ui-resizable-w`,`left: ${d}`),f.addCSSRule(this._styles,`${r} > .ui-resizable-sw`,`left: ${d}; bottom: ${h}`)}if(t=t||this._styles._max,t>this._styles._max){const a=o=>i*o+s;for(let o=this._styles._max+1;o<=t;o++)f.addCSSRule(this._styles,`${r}[gs-y="${o}"]`,`top: ${a(o)}`),f.addCSSRule(this._styles,`${r}[gs-h="${o+1}"]`,`height: ${a(o+1)}`);this._styles._max=t}return this}_updateContainerHeight(){if(!this.engine||this.engine.batchMode)return this;const e=this.parentGridNode;let t=this.getRow()+this._extraDragRow;const i=this.opts.cellHeight,s=this.opts.cellHeightUnit;if(!i)return this;if(!e){const r=f.parseHeight(getComputedStyle(this.el).minHeight);if(r.h>0&&r.unit===s){const a=Math.floor(r.h/i);t<a&&(t=a)}}return this.el.setAttribute("gs-current-row",String(t)),this.el.style.removeProperty("min-height"),this.el.style.removeProperty("height"),t&&(this.el.style[e?"minHeight":"height"]=t*i+s),e&&!e.grid.engine.batchMode&&f.shouldSizeToContent(e)&&e.grid.resizeToContentCBCheck(e.el),this}_prepareElement(e,t=!1,i){i=i||this._readAttr(e),e.gridstackNode=i,i.el=e,i.grid=this,i=this.engine.addNode(i,t),this._writeAttr(e,i),e.classList.add(F.itemClass,this.opts.itemClass);const s=f.shouldSizeToContent(i);return s?e.classList.add("size-to-content"):e.classList.remove("size-to-content"),s&&this.resizeToContentCheck(!1,i),f.lazyLoad(i)||this.prepareDragDrop(i.el),this}_writePosAttr(e,t){return t.x!==void 0&&t.x!==null&&e.setAttribute("gs-x",String(t.x)),t.y!==void 0&&t.y!==null&&e.setAttribute("gs-y",String(t.y)),t.w>1?e.setAttribute("gs-w",String(t.w)):e.removeAttribute("gs-w"),t.h>1?e.setAttribute("gs-h",String(t.h)):e.removeAttribute("gs-h"),this}_writeAttr(e,t){if(!t)return this;this._writePosAttr(e,t);const i={noResize:"gs-no-resize",noMove:"gs-no-move",locked:"gs-locked",id:"gs-id",sizeToContent:"gs-size-to-content"};for(const s in i)t[s]?e.setAttribute(i[s],String(t[s])):e.removeAttribute(i[s]);return this}_readAttr(e,t=!0){const i={};i.x=f.toNumber(e.getAttribute("gs-x")),i.y=f.toNumber(e.getAttribute("gs-y")),i.w=f.toNumber(e.getAttribute("gs-w")),i.h=f.toNumber(e.getAttribute("gs-h")),i.autoPosition=f.toBool(e.getAttribute("gs-auto-position")),i.noResize=f.toBool(e.getAttribute("gs-no-resize")),i.noMove=f.toBool(e.getAttribute("gs-no-move")),i.locked=f.toBool(e.getAttribute("gs-locked"));const s=e.getAttribute("gs-size-to-content");s&&(s==="true"||s==="false"?i.sizeToContent=f.toBool(s):i.sizeToContent=parseInt(s,10)),i.id=e.getAttribute("gs-id"),i.maxW=f.toNumber(e.getAttribute("gs-max-w")),i.minW=f.toNumber(e.getAttribute("gs-min-w")),i.maxH=f.toNumber(e.getAttribute("gs-max-h")),i.minH=f.toNumber(e.getAttribute("gs-min-h")),t&&(i.w===1&&e.removeAttribute("gs-w"),i.h===1&&e.removeAttribute("gs-h"),i.maxW&&e.removeAttribute("gs-max-w"),i.minW&&e.removeAttribute("gs-min-w"),i.maxH&&e.removeAttribute("gs-max-h"),i.minH&&e.removeAttribute("gs-min-h"));for(const r in i){if(!i.hasOwnProperty(r))return;!i[r]&&i[r]!==0&&r!=="gs-size-to-content"&&delete i[r]}return i}_setStaticClass(){const e=["grid-stack-static"];return this.opts.staticGrid?(this.el.classList.add(...e),this.el.setAttribute("gs-static","true")):(this.el.classList.remove(...e),this.el.removeAttribute("gs-static")),this}onResize(e=this.el?.clientWidth){if(!e||this.prevWidth===e)return;this.prevWidth=e,this.batchUpdate();let t=!1;return this._autoColumn&&this.parentGridNode?this.opts.column!==this.parentGridNode.w&&(this.column(this.parentGridNode.w,this.opts.layout||"list"),t=!0):t=this.checkDynamicColumn(),this._isAutoCellHeight&&this.cellHeight(),this.engine.nodes.forEach(i=>{i.subGrid&&i.subGrid.onResize()}),this._skipInitialResize||this.resizeToContentCheck(t),delete this._skipInitialResize,this.batchUpdate(!1),this}resizeToContentCheck(e=!1,t=void 0){if(this.engine){if(e&&this.hasAnimationCSS())return setTimeout(()=>this.resizeToContentCheck(!1,t),this.animationDelay);if(t)f.shouldSizeToContent(t)&&this.resizeToContentCBCheck(t.el);else if(this.engine.nodes.some(i=>f.shouldSizeToContent(i))){const i=[...this.engine.nodes];this.batchUpdate(),i.forEach(s=>{f.shouldSizeToContent(s)&&this.resizeToContentCBCheck(s.el)}),this.batchUpdate(!1)}this._gsEventHandler.resizecontent&&this._gsEventHandler.resizecontent(null,t?[t]:this.engine.nodes)}}_updateResizeEvent(e=!1){const t=!this.parentGridNode&&(this._isAutoCellHeight||this.opts.sizeToContent||this.opts.columnOpts||this.engine.nodes.find(i=>i.sizeToContent));return!e&&t&&!this.resizeObserver?(this._sizeThrottle=f.throttle(()=>this.onResize(),this.opts.cellHeightThrottle),this.resizeObserver=new ResizeObserver(()=>this._sizeThrottle()),this.resizeObserver.observe(this.el),this._skipInitialResize=!0):(e||!t)&&this.resizeObserver&&(this.resizeObserver.disconnect(),delete this.resizeObserver,delete this._sizeThrottle),this}static getElement(e=".grid-stack-item"){return f.getElement(e)}static getElements(e=".grid-stack-item"){return f.getElements(e)}static getGridElement(e){return v.getElement(e)}static getGridElements(e){return f.getElements(e)}_initMargin(){let e,t=0,i=[];return typeof this.opts.margin=="string"&&(i=this.opts.margin.split(" ")),i.length===2?(this.opts.marginTop=this.opts.marginBottom=i[0],this.opts.marginLeft=this.opts.marginRight=i[1]):i.length===4?(this.opts.marginTop=i[0],this.opts.marginRight=i[1],this.opts.marginBottom=i[2],this.opts.marginLeft=i[3]):(e=f.parseHeight(this.opts.margin),this.opts.marginUnit=e.unit,t=this.opts.margin=e.h),this.opts.marginTop===void 0?this.opts.marginTop=t:(e=f.parseHeight(this.opts.marginTop),this.opts.marginTop=e.h,delete this.opts.margin),this.opts.marginBottom===void 0?this.opts.marginBottom=t:(e=f.parseHeight(this.opts.marginBottom),this.opts.marginBottom=e.h,delete this.opts.margin),this.opts.marginRight===void 0?this.opts.marginRight=t:(e=f.parseHeight(this.opts.marginRight),this.opts.marginRight=e.h,delete this.opts.margin),this.opts.marginLeft===void 0?this.opts.marginLeft=t:(e=f.parseHeight(this.opts.marginLeft),this.opts.marginLeft=e.h,delete this.opts.margin),this.opts.marginUnit=e.unit,this.opts.marginTop===this.opts.marginBottom&&this.opts.marginLeft===this.opts.marginRight&&this.opts.marginTop===this.opts.marginRight&&(this.opts.margin=this.opts.marginTop),this}static getDD(){return B}static setupDragIn(e,t,i,s=document){t?.pause!==void 0&&(w.pauseDrag=t.pause),t={appendTo:"body",helper:"clone",...t||{}},(typeof e=="string"?f.getElements(e,s):e).forEach((a,o)=>{B.isDraggable(a)||B.dragIn(a,t),i?.[o]&&(a.gridstackNode=i[o])})}movable(e,t){return this.opts.staticGrid?this:(v.getElements(e).forEach(i=>{const s=i.gridstackNode;s&&(t?delete s.noMove:s.noMove=!0,this.prepareDragDrop(s.el))}),this)}resizable(e,t){return this.opts.staticGrid?this:(v.getElements(e).forEach(i=>{const s=i.gridstackNode;s&&(t?delete s.noResize:s.noResize=!0,this.prepareDragDrop(s.el))}),this)}disable(e=!0){if(!this.opts.staticGrid)return this.enableMove(!1,e),this.enableResize(!1,e),this._triggerEvent("disable"),this}enable(e=!0){if(!this.opts.staticGrid)return this.enableMove(!0,e),this.enableResize(!0,e),this._triggerEvent("enable"),this}enableMove(e,t=!0){return this.opts.staticGrid?this:(e?delete this.opts.disableDrag:this.opts.disableDrag=!0,this.engine.nodes.forEach(i=>{this.prepareDragDrop(i.el),i.subGrid&&t&&i.subGrid.enableMove(e,t)}),this)}enableResize(e,t=!0){return this.opts.staticGrid?this:(e?delete this.opts.disableResize:this.opts.disableResize=!0,this.engine.nodes.forEach(i=>{this.prepareDragDrop(i.el),i.subGrid&&t&&i.subGrid.enableResize(e,t)}),this)}cancelDrag(){const e=this._placeholder?.gridstackNode;e&&(e._isExternal?(e._isAboutToRemove=!0,this.engine.removeNode(e)):e._isAboutToRemove&&v._itemRemoving(e.el,!1),this.engine.restoreInitial())}_removeDD(e){return B.draggable(e,"destroy").resizable(e,"destroy"),e.gridstackNode&&delete e.gridstackNode._initDD,delete e.ddElement,this}_setupAcceptWidget(){if(this.opts.staticGrid||!this.opts.acceptWidgets&&!this.opts.removable)return B.droppable(this.el,"destroy"),this;let e,t;const i=(s,r,a)=>{a=a||r;const o=a.gridstackNode;if(!o)return;if(!o.grid?.el){a.style.transform=`scale(${1/this.dragTransform.xScale},${1/this.dragTransform.yScale})`;const m=a.getBoundingClientRect();a.style.left=m.x+(this.dragTransform.xScale-1)*(s.clientX-m.x)/this.dragTransform.xScale+"px",a.style.top=m.y+(this.dragTransform.yScale-1)*(s.clientY-m.y)/this.dragTransform.yScale+"px",a.style.transformOrigin="0px 0px"}let{top:h,left:c}=a.getBoundingClientRect();const d=this.el.getBoundingClientRect();c-=d.left,h-=d.top;const u={position:{top:h*this.dragTransform.xScale,left:c*this.dragTransform.yScale}};if(o._temporaryRemoved){if(o.x=Math.max(0,Math.round(c/t)),o.y=Math.max(0,Math.round(h/e)),delete o.autoPosition,this.engine.nodeBoundFix(o),!this.engine.willItFit(o)){if(o.autoPosition=!0,!this.engine.willItFit(o)){B.off(r,"drag");return}o._willFitPos&&(f.copyPos(o,o._willFitPos),delete o._willFitPos)}this._onStartMoving(a,s,u,o,t,e)}else this._dragOrResize(a,s,u,o,t,e)};return B.droppable(this.el,{accept:s=>{const r=s.gridstackNode||this._readAttr(s,!1);if(r?.grid===this)return!0;if(!this.opts.acceptWidgets)return!1;let a=!0;if(typeof this.opts.acceptWidgets=="function")a=this.opts.acceptWidgets(s);else{const o=this.opts.acceptWidgets===!0?".grid-stack-item":this.opts.acceptWidgets;a=s.matches(o)}if(a&&r&&this.opts.maxRow){const o={w:r.w,h:r.h,minW:r.minW,minH:r.minH};a=this.engine.willItFit(o)}return a}}).on(this.el,"dropover",(s,r,a)=>{let o=a?.gridstackNode||r.gridstackNode;if(o?.grid===this&&!o._temporaryRemoved)return!1;if(o?._sidebarOrig&&(o.w=o._sidebarOrig.w,o.h=o._sidebarOrig.h),o?.grid&&o.grid!==this&&!o._temporaryRemoved&&o.grid._leave(r,a),a=a||r,t=this.cellWidth(),e=this.getCellHeight(!0),!o){const d=a.getAttribute("data-gs-widget")||a.getAttribute("gridstacknode");if(d){try{o=JSON.parse(d)}catch{console.error("Gridstack dropover: Bad JSON format: ",d)}a.removeAttribute("data-gs-widget"),a.removeAttribute("gridstacknode")}o||(o=this._readAttr(a)),o._sidebarOrig={w:o.w,h:o.h}}o.grid||(o.el||(o={...o}),o._isExternal=!0,a.gridstackNode=o);const h=o.w||Math.round(a.offsetWidth/t)||1,c=o.h||Math.round(a.offsetHeight/e)||1;return o.grid&&o.grid!==this?(r._gridstackNodeOrig||(r._gridstackNodeOrig=o),r.gridstackNode=o={...o,w:h,h:c,grid:this},delete o.x,delete o.y,this.engine.cleanupNode(o).nodeBoundFix(o),o._initDD=o._isExternal=o._temporaryRemoved=!0):(o.w=h,o.h=c,o._temporaryRemoved=!0),v._itemRemoving(o.el,!1),B.on(r,"drag",i),i(s,r,a),!1}).on(this.el,"dropout",(s,r,a)=>{const o=a?.gridstackNode||r.gridstackNode;return o&&(!o.grid||o.grid===this)&&(this._leave(r,a),this._isTemp&&this.removeAsSubGrid(o)),!1}).on(this.el,"drop",(s,r,a)=>{const o=a?.gridstackNode||r.gridstackNode;if(o?.grid===this&&!o._isExternal)return!1;const h=!!this.placeholder.parentElement,c=r!==a;this.placeholder.remove(),delete this.placeholder.gridstackNode;const d=h&&this.opts.animate;d&&this.setAnimation(!1);const u=r._gridstackNodeOrig;if(delete r._gridstackNodeOrig,h&&u?.grid&&u.grid!==this){const g=u.grid;g.engine.removeNodeFromLayoutCache(u),g.engine.removedNodes.push(u),g._triggerRemoveEvent()._triggerChangeEvent(),g.parentGridNode&&!g.engine.nodes.length&&g.opts.subGridDynamic&&g.removeAsSubGrid()}if(!o||(h&&(this.engine.cleanupNode(o),o.grid=this),delete o.grid?._isTemp,B.off(r,"drag"),a!==r?(a.remove(),r=a):r.remove(),this._removeDD(r),!h))return!1;const m=o.subGrid?.el?.gridstack;return f.copyPos(o,this._readAttr(this.placeholder)),f.removePositioningStyles(r),c&&(o.content||o.subGridOpts||v.addRemoveCB)?(delete o.el,r=this.addWidget(o)):(this._prepareElement(r,!0,o),this.el.appendChild(r),this.resizeToContentCheck(!1,o),m&&(m.parentGridNode=o,m.opts.styleInHead||m._updateStyles(!0)),this._updateContainerHeight()),this.engine.addedNodes.push(o),this._triggerAddEvent(),this._triggerChangeEvent(),this.engine.endUpdate(),this._gsEventHandler.dropped&&this._gsEventHandler.dropped({...s,type:"dropped"},u&&u.grid?u:void 0,o),d&&this.setAnimation(this.opts.animate,!0),!1}),this}static _itemRemoving(e,t){if(!e)return;const i=e?e.gridstackNode:void 0;!i?.grid||e.classList.contains(i.grid.opts.removableOptions.decline)||(t?i._isAboutToRemove=!0:delete i._isAboutToRemove,t?e.classList.add("grid-stack-item-removing"):e.classList.remove("grid-stack-item-removing"))}_setupRemoveDrop(){if(typeof this.opts.removable!="string")return this;const e=document.querySelector(this.opts.removable);return e?(!this.opts.staticGrid&&!B.isDroppable(e)&&B.droppable(e,this.opts.removableOptions).on(e,"dropover",(t,i)=>v._itemRemoving(i,!0)).on(e,"dropout",(t,i)=>v._itemRemoving(i,!1)),this):this}prepareDragDrop(e,t=!1){const i=e?.gridstackNode;if(!i)return;const s=i.noMove||this.opts.disableDrag,r=i.noResize||this.opts.disableResize,a=this.opts.staticGrid||s&&r;if((t||a)&&(i._initDD&&(this._removeDD(e),delete i._initDD),a&&e.classList.add("ui-draggable-disabled","ui-resizable-disabled"),!t))return this;if(!i._initDD){let o,h;const c=(m,g)=>{this._gsEventHandler[m.type]&&this._gsEventHandler[m.type](m,m.target),o=this.cellWidth(),h=this.getCellHeight(!0),this._onStartMoving(e,m,g,i,o,h)},d=(m,g)=>{this._dragOrResize(e,m,g,i,o,h)},u=m=>{this.placeholder.remove(),delete this.placeholder.gridstackNode,delete i._moving,delete i._event,delete i._lastTried;const g=i.w!==i._orig.w,p=m.target;if(!(!p.gridstackNode||p.gridstackNode.grid!==this)){if(i.el=p,i._isAboutToRemove){const _=e.gridstackNode.grid;_._gsEventHandler[m.type]&&_._gsEventHandler[m.type](m,p),_.engine.nodes.push(i),_.removeWidget(e,!0,!0)}else f.removePositioningStyles(p),i._temporaryRemoved?(f.copyPos(i,i._orig),this._writePosAttr(p,i),this.engine.addNode(i)):this._writePosAttr(p,i),this._gsEventHandler[m.type]&&this._gsEventHandler[m.type](m,p);this._extraDragRow=0,this._updateContainerHeight(),this._triggerChangeEvent(),this.engine.endUpdate(),m.type==="resizestop"&&(Number.isInteger(i.sizeToContent)&&(i.sizeToContent=i.h),this.resizeToContentCheck(g,i))}};B.draggable(e,{start:c,stop:u,drag:d}).resizable(e,{start:c,stop:u,resize:d}),i._initDD=!0}return B.draggable(e,s?"disable":"enable").resizable(e,r?"disable":"enable"),this}_onStartMoving(e,t,i,s,r,a){if(this.engine.cleanNodes().beginUpdate(s),this._writePosAttr(this.placeholder,s),this.el.appendChild(this.placeholder),this.placeholder.gridstackNode=s,s.grid?.el)this.dragTransform=f.getValuesFromTransformedElement(e);else if(this.placeholder&&this.placeholder.closest(".grid-stack")){const o=this.placeholder.closest(".grid-stack");this.dragTransform=f.getValuesFromTransformedElement(o)}else this.dragTransform={xScale:1,xOffset:0,yScale:1,yOffset:0};if(s.el=this.placeholder,s._lastUiPosition=i.position,s._prevYPix=i.position.top,s._moving=t.type==="dragstart",delete s._lastTried,t.type==="dropover"&&s._temporaryRemoved&&(this.engine.addNode(s),s._moving=!0),this.engine.cacheRects(r,a,this.opts.marginTop,this.opts.marginRight,this.opts.marginBottom,this.opts.marginLeft),t.type==="resizestart"){const o=this.getColumn()-s.x,h=(this.opts.maxRow||Number.MAX_SAFE_INTEGER)-s.y;B.resizable(e,"option","minWidth",r*Math.min(s.minW||1,o)).resizable(e,"option","minHeight",a*Math.min(s.minH||1,h)).resizable(e,"option","maxWidth",r*Math.min(s.maxW||Number.MAX_SAFE_INTEGER,o)).resizable(e,"option","maxWidthMoveLeft",r*Math.min(s.maxW||Number.MAX_SAFE_INTEGER,s.x+s.w)).resizable(e,"option","maxHeight",a*Math.min(s.maxH||Number.MAX_SAFE_INTEGER,h)).resizable(e,"option","maxHeightMoveUp",a*Math.min(s.maxH||Number.MAX_SAFE_INTEGER,s.y+s.h))}}_dragOrResize(e,t,i,s,r,a){const o={...s._orig};let h,c=this.opts.marginLeft,d=this.opts.marginRight,u=this.opts.marginTop,m=this.opts.marginBottom;const g=Math.round(a*.1),p=Math.round(r*.1);if(c=Math.min(c,p),d=Math.min(d,p),u=Math.min(u,g),m=Math.min(m,g),t.type==="drag"){if(s._temporaryRemoved)return;const y=i.position.top-s._prevYPix;s._prevYPix=i.position.top,this.opts.draggable.scroll!==!1&&f.updateScrollPosition(e,i.position,y);const k=i.position.left+(i.position.left>s._lastUiPosition.left?-d:c),E=i.position.top+(i.position.top>s._lastUiPosition.top?-m:u);o.x=Math.round(k/r),o.y=Math.round(E/a);const b=this._extraDragRow;if(this.engine.collide(s,o)){const L=this.getRow();let T=Math.max(0,o.y+s.h-L);this.opts.maxRow&&L+T>this.opts.maxRow&&(T=Math.max(0,this.opts.maxRow-L)),this._extraDragRow=T}else this._extraDragRow=0;if(this._extraDragRow!==b&&this._updateContainerHeight(),s.x===o.x&&s.y===o.y)return}else if(t.type==="resize"){if(o.x<0||(f.updateScrollResize(t,e,a),o.w=Math.round((i.size.width-c)/r),o.h=Math.round((i.size.height-u)/a),s.w===o.w&&s.h===o.h)||s._lastTried&&s._lastTried.w===o.w&&s._lastTried.h===o.h)return;const y=i.position.left+c,k=i.position.top+u;o.x=Math.round(y/r),o.y=Math.round(k/a),h=!0}s._event=t,s._lastTried=o;const _={x:i.position.left+c,y:i.position.top+u,w:(i.size?i.size.width:s.w*r)-c-d,h:(i.size?i.size.height:s.h*a)-u-m};if(this.engine.moveNodeCheck(s,{...o,cellWidth:r,cellHeight:a,rect:_,resizing:h})){s._lastUiPosition=i.position,this.engine.cacheRects(r,a,u,d,m,c),delete s._skipDown,h&&s.subGrid&&s.subGrid.onResize(),this._extraDragRow=0,this._updateContainerHeight();const y=t.target;s._sidebarOrig||this._writePosAttr(y,s),this._gsEventHandler[t.type]&&this._gsEventHandler[t.type](t,y)}}_leave(e,t){t=t||e;const i=t.gridstackNode;if(!i||(t.style.transform=t.style.transformOrigin=null,B.off(e,"drag"),i._temporaryRemoved))return;i._temporaryRemoved=!0,this.engine.removeNode(i),i.el=i._isExternal&&t?t:e;const s=i._sidebarOrig;i._isExternal&&this.engine.cleanupNode(i),i._sidebarOrig=s,this.opts.removable===!0&&v._itemRemoving(e,!0),e._gridstackNodeOrig?(e.gridstackNode=e._gridstackNodeOrig,delete e._gridstackNodeOrig):i._isExternal&&this.engine.restoreInitial()}commit(){return fi(this,this.batchUpdate(!1),"commit","batchUpdate","5.2"),this}}v.renderCB=(l,e)=>{l&&e?.content&&(l.textContent=e.content)},v.resizeToContentParent=".grid-stack-item-content",v.Utils=f,v.Engine=Q,v.GDRev="11.5.1";const yi=["data-id","data-testid","gs-h","gs-w","gs-x","gs-y"],_i={class:"grid-stack-item-content"},bi=se(n.defineComponent({__name:"DraggableGridLayout",props:{tiles:{},tileHeight:{default:le},columns:{default:ge}},emits:["update-tiles"],setup(l,{expose:e,emit:t}){const i=l,s=t,r=n.ref(null),a=n.ref(new Map(i.tiles.map(g=>[`${g.id}`,g])));let o=null;const h=g=>`[data-id="${g}"]`,c=g=>g.map(p=>{const _=a.value.get(`${p.el?.getAttribute("data-id")}`);if(_)return{..._,layout:{position:{col:Number(p.x),row:Number(p.y)},size:{cols:Number(p.w),rows:Number(p.h)}}}}).filter(p=>p!==void 0),d=(g,p)=>{o&&(c(p).forEach(y=>{a.value.set(`${y.id}`,y)}),s("update-tiles",Array.from(a.value.values())))},u=(g,p)=>{p.forEach(_=>{a.value.delete(`${_.el?.getAttribute("data-id")}`)}),s("update-tiles",Array.from(a.value.values()))};n.onMounted(()=>{r.value&&(o=v.init({margin:10,column:i.columns,cellHeight:i.tileHeight,resizable:{handles:"se, sw"},handle:".tile-header"},r.value),o.on("change",d),o.on("added",d),o.on("removed",u))}),n.onUnmounted(()=>{o&&o.destroy(!1)});const m=g=>{if(o&&r.value){const p=r.value.querySelector(h(g));p&&o.removeWidget(p)}};return n.watch(()=>i.tiles.length,async(g,p)=>{if(g>p&&o){const _=i.tiles.slice(p);for(const y of _)a.value.set(`${y.id}`,y),await n.nextTick(),o.makeWidget(h(y.id),{autoPosition:!0,w:y.layout.size.cols,h:y.layout.size.rows})}}),n.watchEffect(()=>{i.tiles.forEach(g=>{a.value.set(`${g.id}`,g)})}),e({removeWidget:m}),(g,p)=>(n.openBlock(),n.createElementBlock("div",{ref_key:"gridContainer",ref:r,class:"grid-stack"},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(i.tiles,_=>(n.openBlock(),n.createElementBlock("div",{key:_.id,class:"grid-stack-item","data-id":`${_.id}`,"data-testid":`grid-stack-item-${_.id}`,"gs-h":_.layout.size.rows,"gs-lazy-load":!0,"gs-w":_.layout.size.cols,"gs-x":_.layout.position.col,"gs-y":_.layout.position.row},[n.createElementVNode("div",_i,[n.renderSlot(g.$slots,"tile",{tile:_},void 0,!0)])],8,yi))),128))],512))}}),[["__scopeId","data-v-1fdec94c"]]),vi=l=>{const e={...l.meta,chart:{...l.meta.chart}};return"chart_title"in e.chart&&(e.chart.chart_title=e.chart.chart_title?`Copy of ${e.chart.chart_title}`:""),{id:crypto.randomUUID(),type:"chart",definition:e,layout:{position:{col:0,row:0},size:l.layout.size}}},wi={key:0,class:"fullscreen-header"},Ei={key:0,class:"tile-container slottable-tile"},xi=se(n.defineComponent({__name:"DashboardRenderer",props:n.mergeModels({context:{},preview:{type:Boolean,default:!1}},{modelValue:{required:!0},modelModifiers:{}}),emits:n.mergeModels(["edit-tile","tile-time-range-zoom","tiles-loaded"],["update:modelValue"]),setup(l,{expose:e,emit:t}){n.useCssVars(R=>({v021bbed1:d.value}));const i=t,s=n.useModel(l,"modelValue"),{i18n:r}=$.useI18n(),a=n.ref(0),o=n.ref(null),h=n.ref(),c=n.ref(),d=n.ref("scale(1)"),u=new Set,m=n.inject(j);m||(console.warn("Analytics dashboards require a query bridge supplied via provide / inject."),console.warn("Please ensure your application has a query bridge provided under the key 'analytics-query-provider', as described in"),console.warn("https://github.com/Kong/public-ui-components/blob/main/packages/analytics/dashboard-renderer/README.md#requirements")),$.useRequestQueue();const{exportPdf:g,exportState:p}=$.useExportPdf(c),_=R=>{u.add(R.id);const S=k.value.filter(q=>!b(q)).length;u.size>=S&&i("tiles-loaded",!0)},y=(R,S)=>{const q=R.layout.position.row-S.layout.position.row;return q!==0?q:R.layout.position.col-S.layout.position.col},k=n.computed(()=>s.value.tiles.map(R=>{let S=R.definition;const q=R.type??"chart",N=S.chart;if(q==="chart"&&"description"in N){const H=S,K=N.description?.replace(Ie,()=>{const{timeSpec:te}=V.value,xe=`renderer.trendRange.${te.type==="absolute"?"custom":te.time_range}`;return r.te(xe)?r.t(xe):""});S={...H,chart:{...N,description:K}}}return V.value.editable&&!R.id&&console.warn("No id provided for tile. One will be generated automatically,","however tracking changes to this tile may not work as expected.",R),{layout:R.layout,meta:S,type:q,id:R.id??crypto.randomUUID()}})),E=R=>{i("edit-tile",R)},b=R=>R.type==="chart"&&R.meta.chart.type==="slottable",L=R=>R.type==="slottable",T=R=>{const S=R.meta.chart;return L(S)?S.id:void 0},W=R=>{try{const S=vi(R);s.value.tiles.push(JSON.parse(JSON.stringify(S)))}catch(S){console.warn(S)}},J=R=>{o.value&&o.value.removeWidget(R.id),u.delete(R.id)},X=()=>{u.clear(),a.value++},Z=R=>{const S=R.map(q=>({id:q.id,type:q.type,layout:q.layout,definition:q.meta}));s.value.tiles=S.sort(y)},x=async()=>{if(d.value="scale(1)",await n.nextTick(),c.value){const{availWidth:R,availHeight:S}=window.screen,{width:q,height:N}=c.value.getBoundingClientRect(),H=Math.min(S/N,R/q);d.value=`scale(${H})`}},O=()=>{h.value&&(document.fullscreenElement?document.exitFullscreen():h.value.requestFullscreen())},A=n.ref(!1),P=()=>{A.value=document.fullscreenElement!==null,A.value&&x()},ee=n.computed(()=>s.value.preset_filters??[]),{internalContext:V,queryReady:ce}=$.useDashboardInternalContext({globalFilters:ee,context:n.computed(()=>l.context),isFullscreen:A,preview:n.computed(()=>l.preview)});return e({refresh:X,toggleFullscreen:O,exportPdf:g,pdfExportState:p}),(R,S)=>{const q=n.resolveComponent("KAlert");return n.openBlock(),n.createElementBlock("div",{ref_key:"dashboardContainer",ref:h,class:n.normalizeClass(["kong-ui-public-dashboard-renderer",{"is-fullscreen":A.value}]),onFullscreenchange:P},[n.createElementVNode("div",{ref_key:"layoutContainer",ref:c,class:"layout"},[n.unref(m)&&A.value?(n.openBlock(),n.createElementBlock("div",wi,[n.renderSlot(R.$slots,"fullscreenHeader",{},void 0,!0)])):n.createCommentVNode("",!0),n.unref(m)?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(n.unref(V).editable&&!A.value?bi:lt),{key:2,ref_key:"gridLayoutRef",ref:o,columns:s.value.columns,"tile-height":s.value.tile_height,tiles:k.value,onUpdateTiles:Z},{tile:n.withCtx(({tile:N})=>[b(N)?(n.openBlock(),n.createElementBlock("div",Ei,[n.renderSlot(R.$slots,T(N),{},void 0,!0)])):(n.openBlock(),n.createBlock(at,{key:A.value?`${N.id}-tile`:`${N.id}-tile-fullscreen`,"refresh-counter":a.value,"onUpdate:refreshCounter":S[0]||(S[0]=H=>a.value=H),class:"tile-container",context:n.unref(V),definition:N.meta,height:N.layout.size.rows*(s.value.tile_height||n.unref(le))+parseInt(n.unref(ot),10),"hide-actions":!n.unref(V).showTileActions,"hide-zoom-actions":!n.unref(V).showTileZoomActions,"is-fullscreen":A.value,"query-ready":n.unref(ce),"tile-id":N.id,"tile-type":N.type,onDuplicateTile:H=>W(N),onEditTile:H=>E(N),onRemoveTile:H=>J(N),onTileLoaded:H=>_(N),onTileTimeRangeZoom:S[1]||(S[1]=H=>i("tile-time-range-zoom",H))},null,8,["refresh-counter","context","definition","height","hide-actions","hide-zoom-actions","is-fullscreen","query-ready","tile-id","tile-type","onDuplicateTile","onEditTile","onRemoveTile","onTileLoaded"]))]),_:3},40,["columns","tile-height","tiles"])):(n.openBlock(),n.createBlock(q,{key:1,appearance:"danger"},{default:n.withCtx(()=>[n.createTextVNode(n.toDisplayString(n.unref(r).t("renderer.noQueryBridge")),1)]),_:1}))],512)],34)}}}),[["__scopeId","data-v-f028130a"]]),Ci=n.defineComponent({__name:"DashboardTilePreview",props:{context:{},definition:{},globalFilters:{default:()=>[]},preview:{type:Boolean,default:!1}},emits:["chart-data","tile-time-range-zoom","tile-bounds-change"],setup(l,{expose:e,emit:t}){const i=n.useTemplateRef("root"),s=n.useTemplateRef("dashboard-tile"),r=crypto.randomUUID(),a=t,o=b=>{a("tile-time-range-zoom",b)},h=b=>{a("chart-data",b)},c=b=>{a("tile-bounds-change",b)},{i18n:d}=$.useI18n(),{internalContext:u,queryReady:m}=$.useDashboardInternalContext({globalFilters:n.toRef(()=>l.globalFilters),context:n.toRef(()=>l.context),preview:n.computed(()=>l.preview)}),g=n.computed(()=>G(l.definition)),p=n.computed(()=>g.value?"columns"in l.definition.query&&!l.definition.query.columns?.length:!("metrics"in l.definition.query)||!l.definition.query.metrics||l.definition.query.metrics.length===0),_=n.ref(le);let y;n.onMounted(()=>{const b=i.value?.parentElement;b&&(_.value=b.getBoundingClientRect().height,y=new ResizeObserver(([L])=>{const{height:T}=L.contentRect;_.value=T}),y.observe(b))}),n.onUnmounted(()=>y?.disconnect());const k=n.ref(0);return e({refresh:()=>{k.value++},getExportData:()=>s.value?.getExportData()}),(b,L)=>{const T=n.resolveComponent("KEmptyState");return n.openBlock(),n.createElementBlock("div",{ref_key:"root",ref:i,"data-testid":"dashboard-tile-preview-root"},[p.value?(n.openBlock(),n.createBlock(T,{key:0,"action-button-visible":!1,"data-testid":"chart-not-configured-empty-state"},{title:n.withCtx(()=>[n.createElementVNode("p",null,n.toDisplayString(n.unref(d).t("renderer.not_configured.title")),1)]),default:n.withCtx(()=>[n.createElementVNode("p",null,n.toDisplayString(n.unref(d).t("renderer.not_configured.description")),1)]),_:1})):(n.openBlock(),n.createBlock(at,{key:1,ref:"dashboard-tile","refresh-counter":k.value,"onUpdate:refreshCounter":L[0]||(L[0]=W=>k.value=W),context:{...n.unref(u),editable:!1},definition:l.definition,height:_.value,"hide-actions":"","query-ready":n.unref(m),"show-refresh":"","tile-id":n.unref(r),onChartData:h,onTileBoundsChange:c,onTileTimeRangeZoom:o},null,8,["refresh-counter","context","definition","height","query-ready","tile-id"]))],512)}}}),ki=l=>{const e=l.definition?.query;if(!e)return l;if(e.datasource==="api_usage"){console.warn("[@kong-ui-public/dashboard-renderer] A tile was filtered out for the Basic Tier",l);return}return l},Ri=l=>{if(G(l.definition))return l;const e=l.definition?.query;if(!e)return l;const t={...e,datasource:e.datasource==="basic"?"api_usage":e.datasource};return{...l,definition:{...l.definition,query:t}}},Ti=(l,e=ge)=>{if(!l.length)return[];let t=0,i=0,s=0;const r=[];for(const a of l){const o=a.layout?.size?.cols??1,h=a.layout?.size?.rows??1;i+o>e&&(t+=s,i=0,s=0);const c={...a,layout:{...a.layout,position:{...a.layout?.position??{},col:i,row:t}}};r.push(c),i+=o,s=Math.max(s,h)}return r},Si=(l,e)=>{if(e){const s=l.tiles.map(Ri);return{...l,tiles:s}}const t=l.tiles.map(ki).filter(s=>s!==void 0),i=Ti(t,l.columns);return{...l,tiles:i}},Di=Object.freeze(Object.defineProperty({__proto__:null,default:n.defineComponent({__name:"GeoMapRenderer",props:{query:{},context:{},queryReady:{type:Boolean},chartOptions:{},height:{},refreshCounter:{},requestsLink:{},exploreLink:{}},emits:["bounds-change"],setup(l,{emit:e}){const t=l,i=n.ref(void 0),s=n.computed(()=>i.value?Oe.exploreResultToCountryMetrics(i.value):{}),r=n.computed(()=>i.value?i.value?.meta.metric_names&&i.value.meta.metric_names[0]:""),a=n.computed(()=>t.query.limit!==void 0&&t.query.limit>0?t.query.limit:M.COUNTRIES.length),o=n.computed(()=>{if(!t.query.filters?.find(({field:g,operator:p})=>g==="country_code"&&(p==="not_empty"||p==="empty"||p==="in"))){const g={field:"country_code",operator:"not_empty"};return{...t.query,filters:[...t.query.filters||[],g]}}return t.query}),h=n.computed(()=>{if(!i.value)return"";const m=i?.value?.meta.metric_units,g=i?.value?.meta?.metric_names;return m&&g&&m[g[0]]}),c=m=>{i.value=m},d=e,u=m=>{d("bounds-change",m)};return(m,g)=>(n.openBlock(),n.createBlock(pe,{context:l.context,"limit-override":a.value,query:o.value,"query-ready":l.queryReady,"refresh-counter":l.refreshCounter,onChartData:c},{default:n.withCtx(()=>[n.createVNode(n.unref(Oe.AnalyticsGeoMap),{bounds:l.chartOptions.bounds,"country-metrics":s.value,"fit-to-country":l.chartOptions.fit_to_country,metric:r.value,"metric-unit":h.value,"with-legend":l.chartOptions.legend||!1,onBoundsChange:u},null,8,["bounds","country-metrics","fit-to-country","metric","metric-unit","with-legend"])]),_:1},8,["context","limit-override","query","query-ready","refresh-counter"]))}})},Symbol.toStringTag,{value:"Module"}));D.CP_ID_TOKEN=Be,D.DASHBOARD_COLS=ge,D.DEFAULT_TILE_HEIGHT=le,D.DEFAULT_TILE_REFRESH_INTERVAL_MS=Me,D.DashboardRenderer=xi,D.DashboardTilePreview=Ci,D.ENTITY_ID_TOKEN=Ce,D.FULLSCREEN_LONG_REFRESH_INTERVAL_MS=$e,D.FULLSCREEN_SHORT_REFRESH_INTERVAL_MS=Pe,D.GridLayout=lt,D.INJECT_QUERY_PROVIDER=j,D.TIMEFRAME_TOKEN=Ie,D.configureAllowedDefinition=Si,Object.defineProperty(D,Symbol.toStringTag,{value:"Module"})}));