@opengis/bi 1.2.30 → 1.2.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bi.js +1 -1
- package/dist/bi.umd.cjs +1 -1
- package/dist/{import-file-B4o9p2_2.js → import-file-BPICIF0w.js} +7 -7
- package/dist/{vs-funnel-bar-BOWwPnjW.js → vs-funnel-bar-C4T5wkBI.js} +1 -1
- package/dist/{vs-list-D8jGusRT.js → vs-list-DpQecJFZ.js} +1 -1
- package/dist/{vs-map-BGplOwpB.js → vs-map-Dv0Zxj3b.js} +2 -2
- package/dist/{vs-map-cluster-CHQJV2As.js → vs-map-cluster-BZoSRi6v.js} +2 -2
- package/dist/{vs-number-jPqxFQ6d.js → vs-number-CRdeu_TC.js} +1 -1
- package/dist/{vs-table-BDgIvJbY.js → vs-table-BMs9Rxrh.js} +1 -1
- package/dist/{vs-text-DcHOffy9.js → vs-text-B46_k-vY.js} +1 -1
- package/package.json +1 -1
package/dist/bi.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { j as t, l as V, R as e, U as i, V as P, t as d, v as g, k as l, o as p, r as E, n as b, s as m, q as n, p as B, u as D } from "./import-file-
|
|
1
|
+
import { j as t, l as V, R as e, U as i, V as P, t as d, v as g, k as l, o as p, r as E, n as b, s as m, q as n, p as B, u as D } from "./import-file-BPICIF0w.js";
|
|
2
2
|
import "vue";
|
|
3
3
|
import "vue-router";
|
|
4
4
|
export {
|
package/dist/bi.umd.cjs
CHANGED
|
@@ -188,7 +188,7 @@ ${t}</tr>
|
|
|
188
188
|
`}tablecell(t){const s=this.parser.parseInline(t.tokens),n=t.header?"th":"td";return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+s+`</${n}>
|
|
189
189
|
`}strong({tokens:t}){return`<strong>${this.parser.parseInline(t)}</strong>`}em({tokens:t}){return`<em>${this.parser.parseInline(t)}</em>`}codespan({text:t}){return`<code>${t}</code>`}br(t){return"<br>"}del({tokens:t}){return`<del>${this.parser.parseInline(t)}</del>`}link({href:t,title:s,tokens:n}){const o=this.parser.parseInline(n),l=ct(t);if(l===null)return o;t=l;let a='<a href="'+t+'"';return s&&(a+=' title="'+s+'"'),a+=">"+o+"</a>",a}image({href:t,title:s,text:n}){const o=ct(t);if(o===null)return n;t=o;let l=`<img src="${t}" alt="${n}"`;return s&&(l+=` title="${s}"`),l+=">",l}text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):t.text}}class je{strong({text:t}){return t}em({text:t}){return t}codespan({text:t}){return t}del({text:t}){return t}html({text:t}){return t}text({text:t}){return t}link({text:t}){return""+t}image({text:t}){return""+t}br(){return""}}class X{constructor(t){F(this,"options");F(this,"renderer");F(this,"textRenderer");this.options=t||ne,this.options.renderer=this.options.renderer||new Ve,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new je}static parse(t,s){return new X(s).parse(t)}static parseInline(t,s){return new X(s).parseInline(t)}parse(t,s=!0){let n="";for(let o=0;o<t.length;o++){const l=t[o];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[l.type]){const i=l,c=this.options.extensions.renderers[i.type].call({parser:this},i);if(c!==!1||!["space","hr","heading","code","table","blockquote","list","html","paragraph","text"].includes(i.type)){n+=c||"";continue}}const a=l;switch(a.type){case"space":{n+=this.renderer.space(a);continue}case"hr":{n+=this.renderer.hr(a);continue}case"heading":{n+=this.renderer.heading(a);continue}case"code":{n+=this.renderer.code(a);continue}case"table":{n+=this.renderer.table(a);continue}case"blockquote":{n+=this.renderer.blockquote(a);continue}case"list":{n+=this.renderer.list(a);continue}case"html":{n+=this.renderer.html(a);continue}case"paragraph":{n+=this.renderer.paragraph(a);continue}case"text":{let i=a,c=this.renderer.text(i);for(;o+1<t.length&&t[o+1].type==="text";)i=t[++o],c+=`
|
|
190
190
|
`+this.renderer.text(i);s?n+=this.renderer.paragraph({type:"paragraph",raw:c,text:c,tokens:[{type:"text",raw:c,text:c}]}):n+=c;continue}default:{const i='Token with "'+a.type+'" type was not found.';if(this.options.silent)return console.error(i),"";throw new Error(i)}}}return n}parseInline(t,s){s=s||this.renderer;let n="";for(let o=0;o<t.length;o++){const l=t[o];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[l.type]){const i=this.options.extensions.renderers[l.type].call({parser:this},l);if(i!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(l.type)){n+=i||"";continue}}const a=l;switch(a.type){case"escape":{n+=s.text(a);break}case"html":{n+=s.html(a);break}case"link":{n+=s.link(a);break}case"image":{n+=s.image(a);break}case"strong":{n+=s.strong(a);break}case"em":{n+=s.em(a);break}case"codespan":{n+=s.codespan(a);break}case"br":{n+=s.br(a);break}case"del":{n+=s.del(a);break}case"text":{n+=s.text(a);break}default:{const i='Token with "'+a.type+'" type was not found.';if(this.options.silent)return console.error(i),"";throw new Error(i)}}}return n}}class be{constructor(t){F(this,"options");F(this,"block");this.options=t||ne}preprocess(t){return t}postprocess(t){return t}processAllTokens(t){return t}provideLexer(){return this.block?Q.lex:Q.lexInline}provideParser(){return this.block?X.parse:X.parseInline}}F(be,"passThroughHooks",new Set(["preprocess","postprocess","processAllTokens"]));class on{constructor(...t){F(this,"defaults",Le());F(this,"options",this.setOptions);F(this,"parse",this.parseMarkdown(!0));F(this,"parseInline",this.parseMarkdown(!1));F(this,"Parser",X);F(this,"Renderer",Ve);F(this,"TextRenderer",je);F(this,"Lexer",Q);F(this,"Tokenizer",_e);F(this,"Hooks",be);this.use(...t)}walkTokens(t,s){var o,l;let n=[];for(const a of t)switch(n=n.concat(s.call(this,a)),a.type){case"table":{const i=a;for(const c of i.header)n=n.concat(this.walkTokens(c.tokens,s));for(const c of i.rows)for(const d of c)n=n.concat(this.walkTokens(d.tokens,s));break}case"list":{const i=a;n=n.concat(this.walkTokens(i.items,s));break}default:{const i=a;(l=(o=this.defaults.extensions)==null?void 0:o.childTokens)!=null&&l[i.type]?this.defaults.extensions.childTokens[i.type].forEach(c=>{const d=i[c].flat(1/0);n=n.concat(this.walkTokens(d,s))}):i.tokens&&(n=n.concat(this.walkTokens(i.tokens,s)))}}return n}use(...t){const s=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(n=>{const o={...n};if(o.async=this.defaults.async||o.async||!1,n.extensions&&(n.extensions.forEach(l=>{if(!l.name)throw new Error("extension name required");if("renderer"in l){const a=s.renderers[l.name];a?s.renderers[l.name]=function(...i){let c=l.renderer.apply(this,i);return c===!1&&(c=a.apply(this,i)),c}:s.renderers[l.name]=l.renderer}if("tokenizer"in l){if(!l.level||l.level!=="block"&&l.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");const a=s[l.level];a?a.unshift(l.tokenizer):s[l.level]=[l.tokenizer],l.start&&(l.level==="block"?s.startBlock?s.startBlock.push(l.start):s.startBlock=[l.start]:l.level==="inline"&&(s.startInline?s.startInline.push(l.start):s.startInline=[l.start]))}"childTokens"in l&&l.childTokens&&(s.childTokens[l.name]=l.childTokens)}),o.extensions=s),n.renderer){const l=this.defaults.renderer||new Ve(this.defaults);for(const a in n.renderer){if(!(a in l))throw new Error(`renderer '${a}' does not exist`);if(["options","parser"].includes(a))continue;const i=a,c=n.renderer[i],d=l[i];l[i]=(...p)=>{let h=c.apply(l,p);return h===!1&&(h=d.apply(l,p)),h||""}}o.renderer=l}if(n.tokenizer){const l=this.defaults.tokenizer||new _e(this.defaults);for(const a in n.tokenizer){if(!(a in l))throw new Error(`tokenizer '${a}' does not exist`);if(["options","rules","lexer"].includes(a))continue;const i=a,c=n.tokenizer[i],d=l[i];l[i]=(...p)=>{let h=c.apply(l,p);return h===!1&&(h=d.apply(l,p)),h}}o.tokenizer=l}if(n.hooks){const l=this.defaults.hooks||new be;for(const a in n.hooks){if(!(a in l))throw new Error(`hook '${a}' does not exist`);if(["options","block"].includes(a))continue;const i=a,c=n.hooks[i],d=l[i];be.passThroughHooks.has(a)?l[i]=p=>{if(this.defaults.async)return Promise.resolve(c.call(l,p)).then(b=>d.call(l,b));const h=c.call(l,p);return d.call(l,h)}:l[i]=(...p)=>{let h=c.apply(l,p);return h===!1&&(h=d.apply(l,p)),h}}o.hooks=l}if(n.walkTokens){const l=this.defaults.walkTokens,a=n.walkTokens;o.walkTokens=function(i){let c=[];return c.push(a.call(this,i)),l&&(c=c.concat(l.call(this,i))),c}}this.defaults={...this.defaults,...o}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,s){return Q.lex(t,s??this.defaults)}parser(t,s){return X.parse(t,s??this.defaults)}parseMarkdown(t){return(n,o)=>{const l={...o},a={...this.defaults,...l},i=this.onError(!!a.silent,!!a.async);if(this.defaults.async===!0&&l.async===!1)return i(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof n>"u"||n===null)return i(new Error("marked(): input parameter is undefined or null"));if(typeof n!="string")return i(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected"));a.hooks&&(a.hooks.options=a,a.hooks.block=t);const c=a.hooks?a.hooks.provideLexer():t?Q.lex:Q.lexInline,d=a.hooks?a.hooks.provideParser():t?X.parse:X.parseInline;if(a.async)return Promise.resolve(a.hooks?a.hooks.preprocess(n):n).then(p=>c(p,a)).then(p=>a.hooks?a.hooks.processAllTokens(p):p).then(p=>a.walkTokens?Promise.all(this.walkTokens(p,a.walkTokens)).then(()=>p):p).then(p=>d(p,a)).then(p=>a.hooks?a.hooks.postprocess(p):p).catch(i);try{a.hooks&&(n=a.hooks.preprocess(n));let p=c(n,a);a.hooks&&(p=a.hooks.processAllTokens(p)),a.walkTokens&&this.walkTokens(p,a.walkTokens);let h=d(p,a);return a.hooks&&(h=a.hooks.postprocess(h)),h}catch(p){return i(p)}}}onError(t,s){return n=>{if(n.message+=`
|
|
191
|
-
Please report this to https://github.com/markedjs/marked.`,t){const o="<p>An error occurred:</p><pre>"+H(n.message+"",!0)+"</pre>";return s?Promise.resolve(o):o}if(s)return Promise.reject(n);throw n}}}const oe=new on;function T(r,t){return oe.parse(r,t)}T.options=T.setOptions=function(r){return oe.setOptions(r),T.defaults=oe.defaults,ot(T.defaults),T},T.getDefaults=Le,T.defaults=ne,T.use=function(...r){return oe.use(...r),T.defaults=oe.defaults,ot(T.defaults),T},T.walkTokens=function(r,t){return oe.walkTokens(r,t)},T.parseInline=oe.parseInline,T.Parser=X,T.parser=X.parse,T.Renderer=Ve,T.TextRenderer=je,T.Lexer=Q,T.lexer=Q.lex,T.Tokenizer=_e,T.Hooks=be,T.parse=T,T.options,T.setOptions,T.use,T.walkTokens,T.parseInline,X.parse,Q.lex;const an={class:"space-y-4"},ln={__name:"vs-editor-form-data",props:{widgetName:{type:String},dashboardId:{type:String,default:""},data:{type:Object,default:()=>{}},columns:{type:Array,default:null}},emits:["update-dashboard"],setup(r,{expose:t,emit:s}){var V,_,y,E,N,S,O,G,Z,C,B,z,j,Y,ee,R,K,se,Wt,qt,vt,Ut,Ht,Gt,Zt,Qt,Xt,Jt,Kt,Yt,er,tr,rr,sr,nr,or,ar,lr;const n=e.defineAsyncComponent(()=>import("@opengis/form")),{$notify:o}=e.getCurrentInstance().proxy,l=s,a=r,i=typeof window<"u"?new URLSearchParams(window.top.location.search):null,c=e.ref((i==null?void 0:i.get("dashboard"))||null),d=e.ref([]),p=e.computed(()=>{const D=a.columns??[];return D.length?D:d.value}),h=e.computed(()=>a.dashboardId||c.value);async function b(){if(a.columns!==null)return;const D=h.value;if(!(p.value.length||!D||!a.widgetName))try{const L=await A.get(`/bi-data?dashboard=${D}&widget=${a.widgetName}`);Array.isArray(L==null?void 0:L.columns)&&L.columns.length&&(d.value=L.columns)}catch{}}const g=D=>(D==null?void 0:D.name)!=null?{id:D.name,text:D.title||D.name}:null,m=D=>Array.isArray(D)?[...D].sort((L,te)=>{const ie=L.text&&L.text!==L.id,ir=te.text&&te.text!==te.id;return ie&&!ir?-1:!ie&&ir?1:(L.text||"").localeCompare(te.text||"",void 0,{sensitivity:"base"})}):D,k=e.computed(()=>{const D=(p.value??[]).filter(L=>(L==null?void 0:L.type)=="text"||(L==null?void 0:L.type)==="date"||(L==null?void 0:L.type)==="timestamp without time zone"||(L==null?void 0:L.type)==="boolean"||(L==null?void 0:L.type)==="integer").map(g).filter(Boolean);return m(D)}),x=e.computed(()=>`${a.widgetName}-${k.value.length}-${(p.value??[]).length}`),$=e.computed(()=>({text:{type:"Text",label:"Текст",conditions:["type","==","text"]},x:{type:"select",label:"Вісь X",style:{size:"xs"},conditions:["type","not_in",["text","table","map"]],options:[...k.value]},cls:{label:"Классифікатор вісі X",type:"text",conditions:["type","not_in",["text","table","map","cluster"]]},y_type:{label:"Тип вісі Y",type:"select",options:[{id:"columns",text:"columns"},{id:"function",text:"function"}],conditions:["type","not_in",["text","table","map","number","cluster"]]},tableSQL:{label:"Таблиця SQL",type:"text",hidden:!0},metric:{type:"select",label:"Вісь Y",conditions:[["type","not_in",["text","table","map","cluster"]],["y_type","!=","function"]],options:[{id:"count",text:"count"},...m(p.value.filter(D=>(D==null?void 0:D.type)==="numeric"||(D==null?void 0:D.type)==="double precision").map(g).filter(Boolean))]},fx:{type:"text",label:"Функція",conditions:[["y_type","==","function"]]},query:{label:"Запит (query)",type:"text",conditions:["type","not_in",["text","table","map","number"]]},groupby:{type:"select",label:"Групування",view:"buttons",style:{size:"xs"},options:[{id:"null",text:"null"},...m(p.value.filter(D=>(D==null?void 0:D.type)=="text"||(D==null?void 0:D.type)==="boolean"||(D==null?void 0:D.type)==="integer").map(g).filter(Boolean))],conditions:["type","==","bar"]},columns:{type:"checkbox",label:"Колонки",style:{size:"xs"},options:m((p.value??[]).map(g).filter(Boolean)),conditions:["type","in",["table","map"]]},granularity:{type:"radio",label:"Гранулярність",options:[{id:"year",text:"year"},{id:"quarter",text:"quarter"},{id:"month",text:"month"},{id:"week",text:"week"}],conditions:["x.type","==","date"]},type:{type:"Text",hidden:!0}})),f=e.ref({x:((_=(V=a.data)==null?void 0:V.data)==null?void 0:_.x)||((y=a.data)==null?void 0:y.x)||null,metric:((N=(E=a.data)==null?void 0:E.data)==null?void 0:N.metric)||((S=a.data)==null?void 0:S.metric)||null,columns:((G=(O=a.data)==null?void 0:O.data)==null?void 0:G.columns)||((Z=a.data)==null?void 0:Z.columns)||null,granularity:((B=(C=a.data)==null?void 0:C.data)==null?void 0:B.granularity)||((z=a.data)==null?void 0:z.granularity)||null,type:((Y=(j=a.data)==null?void 0:j.data)==null?void 0:Y.type)||((ee=a.data)==null?void 0:ee.type)||null,groupby:((K=(R=a.data)==null?void 0:R.data)==null?void 0:K.groupby)||a.data.groupby||null,fx:((Wt=(se=a.data)==null?void 0:se.data)==null?void 0:Wt.fx)||((qt=a.data)==null?void 0:qt.fx)||null,query:((Ut=(vt=a.data)==null?void 0:vt.data)==null?void 0:Ut.query)||((Ht=a.data)==null?void 0:Ht.query)||null,y_type:((Zt=(Gt=a.data)==null?void 0:Gt.data)==null?void 0:Zt.y_type)||((Qt=a.data)==null?void 0:Qt.y_type)||null,tableSQL:((Jt=(Xt=a.data)==null?void 0:Xt.data)==null?void 0:Jt.tableSQL)||((Kt=a.data)==null?void 0:Kt.tableSQL)||null,cls:((er=(Yt=a.data)==null?void 0:Yt.data)==null?void 0:er.cls)||((tr=a.data)==null?void 0:tr.cls)||null,text:((sr=(rr=a.data)==null?void 0:rr.data)==null?void 0:sr.text)||((nr=a.data)==null?void 0:nr.text)||null,table:((ar=(or=a.data)==null?void 0:or.data)==null?void 0:ar.table)||((lr=a.data)==null?void 0:lr.table)||null}),u=async()=>{try{await A.put(`/bi-dashboard/${h.value}/${a.widgetName}`,{data:f.value});let D=`/bi-data?dashboard=${h.value}&widget=${a.widgetName}`;Object.entries(f.value).forEach(([te,ie])=>{D+=`&${te}=${ie}`});const L=new CustomEvent(`update-data-${a.widgetName}`);L.filterUrl=D,window.dispatchEvent(L),l("update-dashboard"),o({type:"success",title:"Успішно!",message:"Дані успішно оновлено"})}catch{o({type:"error",title:"Помилка!",message:"При спробі оновити данні сталася помилка"})}},w=async()=>{try{let D=`/bi-data?dashboard=${h.value}&widget=${a.widgetName}`;Object.entries(f.value).forEach(([te,ie])=>{D+=`&${te}=${ie}`});const L=new CustomEvent(`update-data-${a.widgetName}`);L.filterUrl=D,window.dispatchEvent(L),l("update-dashboard")}catch{await o({type:"error",title:"Помилка!",message:"При спробі оновити данні сталася помилка"})}};return e.watch(f,()=>{w()},{deep:!0}),e.watch(()=>[a.widgetName,a.dashboardId,c.value],()=>{d.value=[],b()},{immediate:!0}),t({requestUpdateWidget:u}),(D,L)=>(e.openBlock(),e.createElementBlock("div",an,[(e.openBlock(),e.createBlock(e.unref(n),{key:x.value,schema:$.value,values:f.value,"onUpdate:values":L[0]||(L[0]=te=>f.value=te)},null,8,["schema","values"]))]))}},cn={class:"space-y-4"},dn={__name:"vs-editor-form-yaml",props:{yamlValue:{type:null,default:()=>""},widgetName:{type:String},dashboardId:{type:String,default:""},data:{type:Object}},emits:["update-dashboard"],setup(r,{expose:t,emit:s}){const n=typeof window<"u"?window.echarts:null,o=e.defineAsyncComponent(()=>import("@opengis/form").then(m=>m.VsInputMonaco)),l=e.ref(null),a=e.computed(()=>d.dashboardId||l.value),{$notify:i}=e.getCurrentInstance().proxy,c=s,d=r,p=(m,{dimensions:k,source:x})=>{const $=m.getOption(),{data:f,...u}=($==null?void 0:$.series)[0],[,...w]=k||[],V=w.map((_,y)=>({...($==null?void 0:$.series[y])||{},data:x.map(E=>E[y+1]),name:_}));m==null||m.setOption({...$||{},dataset:{dimensions:k,source:x},series:V,xAxis:{type:"category"},yAxis:{}},!0)},h=m=>{const k=document.getElementById(m);if(!k)return null;const x=n==null?void 0:n.getInstanceByDom(k);return x||null},b=e.ref(d.yamlValue),g=async()=>{try{await A.put(`/bi-dashboard/${a.value}/${d.widgetName}`,{yml:b.value});const m=h(d.widgetName);if(m){const k=await A.get(`/bi-data?dashboard=${l.value}&widget=${d.widgetName}`);p(m,k)}c("update-dashboard"),i({type:"success",title:"Успішно!",message:"Дані успішно оновлено"})}catch{i({type:"error",title:"Помилка!",message:"При спробі оновити данні сталася помилка"})}};return e.onMounted(()=>{const m=new URLSearchParams(window.top.location.search);l.value=m.get("dashboard")}),t({requestUpdateWidget:g}),(m,k)=>(e.openBlock(),e.createElementBlock("div",cn,[e.createVNode(e.unref(o),{modelValue:b.value,"onUpdate:modelValue":k[0]||(k[0]=x=>b.value=x),syntax:"yaml",theme:"vs-light",height:400,minimap:!1},null,8,["modelValue"])]))}},pn={class:"pt-[10px]"},kt={"vs-editor-form-style":Cs,"vs-editor-form-data":ln,"vs-editor-form-yaml":dn,"vs-editor-form-controls":{__name:"vs-editor-form-controls",props:{widgetName:{type:String},controls:{type:Object,default:()=>{}},columns:{type:Array,default:()=>[]}},emits:["update-dashboard"],setup(r,{emit:t}){var p;const s=e.defineAsyncComponent(()=>import("@opengis/form")),{$notify:n}=e.getCurrentInstance().proxy,o=t,l=r,a=e.ref(null),i={granularity:{ua:"Granularity",type:"checkbox",options:["week","month","quarter","year"]},export:{ua:"Export",type:"Switcher"},groupby:{ua:"Groupby",type:"checkbox",options:(p=l.columns)==null?void 0:p.map(({name:h})=>h)}},c=e.ref(l.controls||{}),d=async()=>{try{await A.put(`/bi-dashboard/${a.value}/${l.widgetName}`,{controls:c.value}),await n({type:"success",title:"Успішно!",message:"Дані успішно оновлено"}),staticTypes!=null&&staticTypes.includes(c.value.type)&&o("update-dashboard")}catch{await n({type:"error",title:"Помилка!",message:"При спробі оновити данні сталася помилка"})}};return e.onMounted(()=>{const h=new URLSearchParams(window.top.location.search);a.value=h.get("dashboard")}),(h,b)=>{const g=e.resolveComponent("VsButton");return e.openBlock(),e.createElementBlock("div",pn,[e.createVNode(g,{class:"ml-[10px] mb-[10px]",type:"plain",onClick:d},{default:e.withCtx(()=>[...b[1]||(b[1]=[e.createTextVNode(" Зберегти ",-1)])]),_:1}),e.createVNode(e.unref(s),{schema:i,values:c.value,"onUpdate:values":b[0]||(b[0]=m=>c.value=m)},null,8,["values"])])}}}},hn={key:0,class:"p-4 text-sm text-amber-700 bg-amber-50 rounded-lg"},wt={__name:"editor-tab-error-boundary",props:{tabComponent:{type:Object,default:null},tabKey:{type:[String,Number],default:""}},emits:["update-dashboard"],setup(r,{expose:t}){const s=r,n=e.ref(null);function o(){var a,i;(i=(a=n.value)==null?void 0:a.requestUpdateWidget)==null||i.call(a)}t({save:o});const l=e.ref(!1);return e.onErrorCaptured((a,i,c)=>(console.error("Editor tab error:",a,c),l.value=!0,!1)),e.watch(()=>s.tabComponent,()=>{l.value=!1},{immediate:!0}),(a,i)=>l.value?(e.openBlock(),e.createElementBlock("div",hn," Помилка завантаження вмісту. Переключіть таб або оновіть сторінку. ")):(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.tabComponent),e.mergeProps({ref_key:"tabRef",ref:n,key:r.tabKey||"tab"},a.$attrs,{onUpdateDashboard:i[0]||(i[0]=c=>a.$emit("update-dashboard"))}),null,16))}},un={class:"h-full flex flex-col bg-white shrink-0 !w-[400px] border rounded-xl overflow-hidden border-gray-200"},mn={key:0,class:"flex flex-col min-h-0 flex-1"},fn={class:"flex items-center border-b border-gray-200 bg-white shrink-0 px-4 h-[49px]"},gn={class:"flex items-center gap-6 min-w-0 -mb-[14px]"},bn=["onClick"],yn={key:0,class:"absolute bottom-0 left-0 right-0 h-0.5 bg-blue-600 rounded-full"},xn={class:"flex items-center gap-1 ml-auto shrink-0"},kn={key:1,class:"flex-1 min-h-0 overflow-auto px-4 py-4 [&::-webkit-scrollbar]:h-2 [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-track]:bg-stone-100 [&::-webkit-scrollbar-thumb]:bg-stone-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500"},wn={key:0},_n={key:1},$n={class:"p-4"},En={class:"flex justify-end mt-4 gap-x-3"},Bn={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},Vn={__name:"vs-editor-forms",props:e.mergeModels({selectedWidgetData:{type:Object,required:!1,default:null},selectedDashboard:{type:String,default:()=>""},currentWidgetData:{type:Object,default:()=>""}},{selectedWidget:{},selectedWidgetModifiers:{}}),emits:e.mergeModels(["update-data"],["update:selectedWidget"]),setup(r,{emit:t}){var w,V;const s=e.defineAsyncComponent(()=>import("@opengis/form")),n=(V=(w=e.getCurrentInstance())==null?void 0:w.proxy)==null?void 0:V.$notify,o=U.useRouter(),l=t,a=e.ref(null),i=r,c=e.ref(!1),d=e.ref(!0),p=e.ref(!1),h=e.ref({}),b=e.useModel(r,"selectedWidget"),g=["table","text","number","stat","progress","listbar","map","pivot"],m=e.ref("data"),k=async()=>{try{await A.delete(`/bi-dashboard/${i.selectedDashboard}/${i.selectedWidgetData.name}`),c.value=!1,l("update-data"),o.hasRoute(q.EditorDashboard)?await o.push({name:q.EditorDashboard,params:{dashboardId:i.selectedDashboard}}):b.value="",n({type:"success",title:"Успішно!",message:"Віджет успішно видалено"})}catch(_){console.error(_),n({type:"error",title:"Помилка!",message:"При спробі видалити віджет виникла помилка"})}},x=e.computed(()=>{const _=[{id:"data",label:"Дані"},{id:"style",label:"Стилі"},{id:"yaml",label:"{ }"}];return _==null?void 0:_.filter(y=>{var E,N,S;return y.id==="style"?!(g!=null&&g.includes(((E=i.selectedWidgetData)==null?void 0:E.type)||((S=(N=i.selectedWidgetData)==null?void 0:N.data)==null?void 0:S.type))):!0})}),$=()=>{var _,y,E,N,S,O,G,Z,C;h.value={title:(_=i.selectedWidgetData)==null?void 0:_.title,type:(y=i.selectedWidgetData)==null?void 0:y.type,table:(E=i.selectedWidgetData)==null?void 0:E.table_name,query:(S=(N=i.selectedWidgetData)==null?void 0:N.data)==null?void 0:S.query,x:(G=(O=i.selectedWidgetData)==null?void 0:O.data)==null?void 0:G.x,cls:(C=(Z=i.selectedWidgetData)==null?void 0:Z.data)==null?void 0:C.cls},p.value=!0},f=async()=>{try{await A.put(`/bi-dashboard/${i.selectedDashboard}/${i.selectedWidgetData.name}`,h.value),n({type:"success",title:"Успішно!",message:"Дані успішно змінено"}),await l("update-data"),p.value=!1}catch{n({type:"error",title:"Помилка!",message:"При спробі внести зміни виникла помилка"})}};e.watch(b,()=>{d.value=!1,setTimeout(()=>d.value=!0)});const u={title:{type:"text",ua:"Заголовок",placeholder:"Заголовок",validators:["required"]},type:{type:"select",view:"buttons",label:"Тип віджета",validators:["required"],options:[{label:"Bar",id:"bar"},{label:"Funnel",id:"funnel"},{label:"Line",id:"line"},{label:"List bar",id:"listbar"},{label:"Number",id:"number"},{label:"Pie",id:"pie"},{label:"Donut",id:"donut"},{label:"Pivot",id:"pivot"},{label:"Table",id:"table"},{label:"Progress",id:"progress"},{label:"Stat",id:"stat"},{label:"Text",id:"text"},{label:"Map",id:"map"}]},table:{type:"text",ua:"Таблиця",placeholder:"Таблиця"},query:{type:"Text",ua:"Запит (query)",placeholder:"Query"},x:{type:"Text",ua:"Вісь X",placeholder:"X Axis"},cls:{type:"Text",ua:"Клас (cls)",placeholder:"Cls"}};return(_,y)=>{var N,S,O,G,Z,C,B,z,j,Y,ee;const E=e.resolveComponent("VsPopover");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",un,[r.selectedWidgetData?(e.openBlock(),e.createElementBlock("div",mn,[e.createElementVNode("div",fn,[e.createElementVNode("nav",gn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.value,R=>(e.openBlock(),e.createElementBlock("button",{key:R.id,type:"button",class:e.normalizeClass(["relative pb-3 pt-1 text-sm font-medium transition-colors whitespace-nowrap",m.value===R.id?"text-blue-600":"text-gray-600 hover:text-gray-900"]),onClick:K=>m.value=R.id},[e.createTextVNode(e.toDisplayString(R.label)+" ",1),m.value===R.id?(e.openBlock(),e.createElementBlock("span",yn)):e.createCommentVNode("",!0)],10,bn))),128))]),e.createElementVNode("div",xn,[e.createVNode(E,{placement:"left",trigger:"hover"},{reference:e.withCtx(()=>[e.createElementVNode("button",{type:"button",class:"h-8 w-8 flex items-center justify-center rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors",title:"Зберегти",onClick:y[0]||(y[0]=R=>{var K,se;return(se=(K=a.value)==null?void 0:K.save)==null?void 0:se.call(K)})},[e.createVNode(e.unref(Vr),{class:"h-4 w-4"})])]),default:e.withCtx(()=>[y[9]||(y[9]=e.createTextVNode(" Зберегти ",-1))]),_:1}),e.createVNode(E,{placement:"left",trigger:"hover"},{reference:e.withCtx(()=>[e.createElementVNode("button",{type:"button",class:"h-8 w-8 flex items-center justify-center rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors",onClick:$},[e.createVNode(nt,{class:"h-4 w-4"})])]),default:e.withCtx(()=>[y[10]||(y[10]=e.createTextVNode(" Редагувати віджет ",-1))]),_:1}),e.createVNode(E,{placement:"left",trigger:"hover"},{reference:e.withCtx(()=>[e.createElementVNode("button",{type:"button",class:"h-8 w-8 flex items-center justify-center rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors",onClick:y[1]||(y[1]=R=>c.value=!0)},[e.createVNode(e.unref(st),{class:"h-4 w-4"})])]),default:e.withCtx(()=>[y[11]||(y[11]=e.createTextVNode(" Видалити віджет ",-1))]),_:1})])]),(N=r.currentWidgetData)!=null&&N.status?(e.openBlock(),e.createBlock(we,{key:0,title:(S=r.currentWidgetData)==null?void 0:S.title,text:(O=r.currentWidgetData)==null?void 0:O.message},null,8,["title","text"])):(e.openBlock(),e.createElementBlock("div",kn,[d.value&&r.currentWidgetData?(e.openBlock(),e.createElementBlock("div",wn,[e.createVNode(wt,{ref_key:"tabPanelRef",ref:a,"tab-key":m.value,"tab-component":e.unref(kt)["vs-editor-form-"+m.value],widgetName:(G=r.selectedWidgetData)==null?void 0:G.name,dashboardId:r.selectedDashboard,yamlValue:((Z=r.selectedWidgetData)==null?void 0:Z.yml)||"",data:r.selectedWidgetData,controls:(C=r.selectedWidgetData)==null?void 0:C.controls,columns:(B=r.currentWidgetData)==null?void 0:B.columns,onUpdateDashboard:y[2]||(y[2]=R=>_.$emit("update-data"))},null,8,["tab-key","tab-component","widgetName","dashboardId","yamlValue","data","controls","columns"])])):(e.openBlock(),e.createElementBlock("div",_n,[e.createVNode(wt,{ref_key:"tabPanelRef",ref:a,"tab-key":m.value,"tab-component":e.unref(kt)["vs-editor-form-"+m.value],widgetName:(z=r.selectedWidgetData)==null?void 0:z.name,dashboardId:r.selectedDashboard,yamlValue:((j=r.selectedWidgetData)==null?void 0:j.yml)||"",data:r.selectedWidgetData,controls:(Y=r.selectedWidgetData)==null?void 0:Y.controls,columns:(ee=r.currentWidgetData)==null?void 0:ee.columns,onUpdateDashboard:y[3]||(y[3]=R=>_.$emit("update-data"))},null,8,["tab-key","tab-component","widgetName","dashboardId","yamlValue","data","controls","columns"])])),e.createVNode(pe,{teleport:"#modal",visible:c.value,title:"Ви впевнені?",onClose:y[5]||(y[5]=R=>c.value=!1)},{default:e.withCtx(()=>[e.createElementVNode("div",$n,[y[12]||(y[12]=e.createElementVNode("p",{class:"mt-1 text-gray-500 dark:text-neutral-500"}," Ви впевнені, що хочете видалити цей віджет? ",-1)),e.createElementVNode("div",En,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center px-3 py-2 text-sm font-medium text-gray-800 bg-white border border-gray-200 rounded-lg shadow-sm gap-x-2 hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-50 dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700",onClick:y[4]||(y[4]=R=>c.value=!1)}," Скасувати "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center px-3 py-2 text-sm font-semibold text-white bg-red-500 border border-transparent rounded-lg gap-x-2 hover:bg-red-600 disabled:opacity-50 disabled:pointer-events-none",onClick:k}," Так, я впевнена(ий) ")])])]),_:1},8,["visible"])]))])):(e.openBlock(),e.createBlock(we,{key:1,title:"Оберіть один з віджетів",text:"",class:"p-4"}))]),e.createVNode(pe,{teleport:"#modal",visible:p.value,title:"Редагувати віджет",onClose:y[8]||(y[8]=R=>p.value=!1)},{footer:e.withCtx(()=>[e.createElementVNode("div",Bn,[e.createElementVNode("button",{style:{border:"1px solid #000"},onClick:y[7]||(y[7]=R=>p.value=!1),class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border-gray-200 rounded-lg hover:bg-gray-100 duration-300"}," Скасувати "),e.createElementVNode("button",{onClick:f,class:"py-2 px-3 inline-flex items-center gap-x-2 text-[14px] font-[400] whitespace-nowrap text-white bg-blue-500 rounded-lg hover:bg-blue-700 duration-300"}," Зберегти ")])]),default:e.withCtx(()=>[u?(e.openBlock(),e.createBlock(e.unref(s),{key:0,schema:u,values:h.value,"onUpdate:values":y[6]||(y[6]=R=>h.value=R)},null,8,["values"])):e.createCommentVNode("",!0)]),_:1},8,["visible"])],64)}}},Cn={class:"overflow-hidden flex flex-col min-h-[480px]"},Nn={class:"flex-1 flex min-h-0 gap-4"},Dn={class:"flex-1 min-w-0 pb-4 overflow-auto bg-gray-50/50"},Sn={key:1,class:"flex items-center justify-center h-full"},zn={class:"w-[400px] shrink-0 flex flex-col"},Ln={__name:"vs-widget-editor-panel",props:{selectedWidget:{type:String,default:""},selectedWidgetData:{type:Object,default:null},currentWidgetData:{type:Object,default:null},selectedDashboard:{type:String,default:""},dashboardWidgets:{type:Array,default:()=>[]}},emits:["update:selectedWidget","update-data"],setup(r,{emit:t}){const s=r,n=t,o=e.ref(null);async function l(){if(!(!s.selectedDashboard||!s.selectedWidget))try{o.value=await A.get(`/bi-data?dashboard=${s.selectedDashboard}&widget=${s.selectedWidget}`)}catch(c){console.error(c)}}function a(){n("update-data")}e.watch(()=>[s.selectedDashboard,s.selectedWidget],()=>{l()},{immediate:!0});const i=e.computed({get:()=>s.selectedWidget,set:c=>n("update:selectedWidget",c)});return(c,d)=>(e.openBlock(),e.createElementBlock("div",Cn,[e.createElementVNode("div",Nn,[e.createElementVNode("div",Dn,[o.value?(e.openBlock(),e.createBlock(de,{key:0,dashboard:r.selectedDashboard,widget:r.selectedWidget,"selected-widget":r.selectedWidget,"dashboard-widgets":r.dashboardWidgets,"prefetched-data":o.value,"filter-u-rl":void 0,class:"max-h-full"},null,8,["dashboard","widget","selected-widget","dashboard-widgets","prefetched-data"])):(e.openBlock(),e.createElementBlock("div",Sn,[...d[1]||(d[1]=[e.createElementVNode("span",{class:"text-sm text-gray-400"},"Завантаження...",-1)])]))]),e.createElementVNode("div",zn,[e.createVNode(Vn,{selectedWidget:i.value,"onUpdate:selectedWidget":d[0]||(d[0]=p=>i.value=p),selectedWidgetData:r.selectedWidgetData,currentWidgetData:o.value||r.currentWidgetData||{columns:[]},selectedDashboard:r.selectedDashboard,onUpdateData:a},null,8,["selectedWidget","selectedWidgetData","currentWidgetData","selectedDashboard"])])])]))}},_t={__name:"icon-grid",setup(r){return(t,s)=>(e.openBlock(),e.createBlock(e.unref(_r),e.mergeProps(t.$attrs,{size:24}),null,16))}},$t={__name:"icon-table",setup(r){return(t,s)=>(e.openBlock(),e.createBlock(e.unref(Cr),e.mergeProps(t.$attrs,{size:24}),null,16))}},Tn={__name:"icon-more",setup(r){return(t,s)=>(e.openBlock(),e.createBlock(e.unref(br),e.mergeProps(t.$attrs,{size:24}),null,16))}},In=e.defineAsyncComponent(()=>import("@opengis/form")),Mn={components:{VsModal:pe,VForm:In,deleteIcon:st,editIcon:nt,IconGrid:_t,IconMore:Tn,IconTable:$t},watch:{dashboardData:{handler(r){var s,n;if(this.formEditValue={title:r==null?void 0:r.title,description:r==null?void 0:r.description,table_name:r==null?void 0:r.table_name,db:r==null?void 0:r.db,public:r==null?void 0:r.public,words:r==null?void 0:r.words},!((s=r==null?void 0:r.panels)!=null&&s.length)){this.formGridValue={panels:[]};return}const t=(n=r==null?void 0:r.panels)==null?void 0:n.map(o=>{var i,c;const{title:l="",type:a=""}=((c=(i=r==null?void 0:r.widgets)==null?void 0:i.find(d=>(d==null?void 0:d.name)===(o==null?void 0:o.widget)))==null?void 0:c.data)||{};return{title:l,type:a,...o}});this.formGridValue={panels:t}},immediate:!0}},data(){return{isDeleteConfirm:!1,isFormEdit:!1,isFormGrid:!1,isVisibleTableColumns:!1,formEditValue:{},formGridValue:{},editDashboardScheme:[{type:"Text",key:"title",label:"Заголовок",validators:["required"]},{type:"Text",key:"description",label:"Опис"},{type:"Select",key:"table_name",validators:["required"],data:"pg.table_name",label:"Назва таблиці"},{type:"Text",key:"words",label:"Ключові слова"},{type:"Text",key:"db",label:"База даних",original:{type:"Text",ua:"Назва",col:8}},{type:"Switcher",key:"public",label:"Публічний",original:{type:"Text",ua:"Назва",col:8}}],editGridScheme:[{type:"DataTable",ua:"Панелі",key:"panels",actions:["search"],editable:!1,addition:!1,colModel:[{name:"title",ua:"Назва",type:"Text",key:"title"},{name:"type",ua:"Тип",type:"Text",key:"type",disabled:!0},{name:"widget",type:"Text",ua:"Віджет",key:"widget",hiddenCol:!0,disabled:!0},{name:"col",ua:"Кількість стовпчиків",type:"Text",key:"col"},{name:"height",ua:"Висота",type:"Text",key:"height"},{name:"category",ua:"Категорія",type:"Text",key:"category"}]}]}},props:{selected:{type:String,default:()=>""},dashboardData:{type:Object,default:()=>{}},selectedWidgetData:{type:Object,default:()=>{}},columns:{type:Array}},methods:{async editDashboard(){var r,t;try{const s=(t=(r=this.$refs)==null?void 0:r.formEdit)==null?void 0:t.validate();typeof s=="function"&&await s(),await A.put(`/bi-dashboard/${this.selected}`,this.formEditValue),await this.$notify({title:"Успішно!",type:"success",message:"Дані успішно оновлено"}),this.isFormEdit=!1,await this.$emit("update-editor")}catch{this.$notify({title:"Помилка!",type:"error",message:"при спробі оновити дані виникла помилка"})}},async editDashboardGrid(){var r,t;try{(t=(r=this.$refs)==null?void 0:r.formGrid)==null||t.doValidation(),await A.put(`/bi-dashboard/${this.selected}`,{...this.formEditValue,...this.formGridValue}),await this.$notify({title:"Успішно!",type:"success",message:"Дані успішно оновлено"}),this.isFormGrid=!1,await this.$emit("update-editor")}catch{this.$notify({title:"Помилка!",type:"error",message:"При спробі оновити дані виникла помилка"})}},async deleteDashboard(){try{await A.delete(`/bi-dashboard/${this.selected}`),this.isDeleteConfirm=!1,this.$emit("update:selected",""),this.$emit("update-editor"),this.$notify({title:"Успішно!",type:"success",message:"Дашборд видалено успішно"})}catch{this.$notify({title:"Помилка!",type:"error",message:"При спробі видалити дашборд виникла помилка"})}},closePopover(){document.body.click()}}},Pn={key:0,class:"flex items-center gap-4"},Fn={class:"h-[30px] w-[30px] flex items-center justify-center"},Rn={class:"flex flex-col items-start -ml-2 -mr-2"},jn={class:"p-4"},On={class:"flex justify-end mt-4 gap-x-3"},An={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},Wn={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"};function qn(r,t,s,n,o,l){const a=e.resolveComponent("IconGrid"),i=e.resolveComponent("VsPopover"),c=e.resolveComponent("IconMore"),d=e.resolveComponent("VsModal"),p=e.resolveComponent("VForm");return e.openBlock(),e.createElementBlock("div",null,[s.selected?(e.openBlock(),e.createElementBlock("div",Pn,[e.createVNode(i,{placement:"left",trigger:"hover"},{reference:e.withCtx(()=>[e.createElementVNode("button",{class:"h-[30px] w-[30px] flex items-center justify-center",onClick:t[0]||(t[0]=h=>o.isFormGrid=!0)},[e.createVNode(a,{class:"h-[20px] text-gray-500"})])]),default:e.withCtx(()=>[t[14]||(t[14]=e.createTextVNode(" Редагувати структуру дашборду ",-1))]),_:1}),e.createVNode(i,{placement:"left",trigger:"hover"},{reference:e.withCtx(()=>[e.createVNode(i,{placement:"bottom-left"},{reference:e.withCtx(()=>[e.createElementVNode("button",Fn,[e.createVNode(c,{class:"h-[20px]"})])]),default:e.withCtx(()=>[e.createElementVNode("div",Rn,[e.createElementVNode("button",{onClick:t[1]||(t[1]=h=>{l.closePopover(),o.isFormEdit=!0}),class:"px-[8px] py-[4px] hover:bg-gray-100 w-full text-start rounded-lg"}," Редагувати дашборд "),e.createElementVNode("button",{onClick:t[2]||(t[2]=h=>{l.closePopover(),o.isDeleteConfirm=!0}),class:"px-[8px] py-[4px] hover:bg-gray-100 w-full text-start rounded-lg"}," Видалити дашборд ")])]),_:1})]),default:e.withCtx(()=>[t[15]||(t[15]=e.createTextVNode(" Керування дашбордом ",-1))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(d,{teleport:"#modal",visible:o.isDeleteConfirm,size:"small",title:"Ви впевнені?",onClose:t[5]||(t[5]=h=>o.isDeleteConfirm=!1)},{default:e.withCtx(()=>[e.createElementVNode("div",jn,[t[16]||(t[16]=e.createElementVNode("p",{class:"mt-1 text-gray-500 dark:text-neutral-500"}," Ви впевнені, що хочете видалити цей дашборд? ",-1)),e.createElementVNode("div",On,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center px-3 py-2 text-sm font-medium text-gray-800 bg-white border border-gray-200 rounded-lg shadow-sm gap-x-2 hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-50 dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700",onClick:t[3]||(t[3]=h=>o.isDeleteConfirm=!1)}," Скасувати "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center px-3 py-2 text-sm font-semibold text-white bg-red-500 border border-transparent rounded-lg gap-x-2 hover:bg-red-600 disabled:opacity-50 disabled:pointer-events-none",onClick:t[4]||(t[4]=(...h)=>l.deleteDashboard&&l.deleteDashboard(...h))}," Так, я впевнена(ий) ")])])]),_:1},8,["visible"]),e.createVNode(d,{teleport:"#modal",visible:o.isFormEdit,title:"Редагувати дашборд",onClose:t[9]||(t[9]=h=>o.isFormEdit=!1)},{footer:e.withCtx(()=>[e.createElementVNode("div",An,[e.createElementVNode("button",{style:{border:"1px solid #000"},onClick:t[7]||(t[7]=h=>o.isFormEdit=!1),class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border-gray-200 rounded-lg !border-gray-200 hover:bg-gray-100 duration-300"}," Скасувати "),e.createElementVNode("button",{onClick:t[8]||(t[8]=(...h)=>l.editDashboard&&l.editDashboard(...h)),class:"py-2 px-3 inline-flex items-center gap-x-2 text-[14px] font-[400] whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300"}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(p,{ref:"formEdit",schema:o.editDashboardScheme,values:o.formEditValue,"onUpdate:values":t[6]||(t[6]=h=>o.formEditValue=h)},null,8,["schema","values"])]),_:1},8,["visible"]),e.createVNode(d,{teleport:"#modal",visible:o.isFormGrid,title:"Редагувати структуру дашборду",onClose:t[13]||(t[13]=h=>o.isFormGrid=!1)},{footer:e.withCtx(()=>[e.createElementVNode("div",Wn,[e.createElementVNode("button",{style:{border:"1px solid #000"},onClick:t[11]||(t[11]=h=>o.isFormGrid=!1),class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border-gray-200 rounded-lg !border-gray-200 hover:bg-gray-100 duration-300"}," Скасувати "),e.createElementVNode("button",{onClick:t[12]||(t[12]=(...h)=>l.editDashboardGrid&&l.editDashboardGrid(...h)),class:"py-2 px-3 inline-flex items-center gap-x-2 text-[14px] font-[400] whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300"}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(p,{ref:"formgrid",schema:o.editGridScheme,values:o.formGridValue,"onUpdate:values":t[10]||(t[10]=h=>o.formGridValue=h)},null,8,["schema","values"])]),_:1},8,["visible"])])}const vn=M(Mn,[["render",qn]]),Un={class:"flex-1 min-w-0 flex flex-col overflow-auto"},Hn={class:"max-w-7xl mx-auto px-6 w-full flex flex-col min-h-0 flex-1"},Gn={class:"relative z-10 shrink-0 mt-4 mb-6"},Zn={class:"flex items-center text-sm text-gray-600"},Qn={key:0,class:"flex items-center justify-between gap-4 mt-3"},Xn={class:"min-w-0"},Jn={class:"text-2xl font-bold text-gray-900"},Kn={key:0,class:"mt-1.5 text-sm text-gray-600"},Yn={class:"flex items-center shrink-0"},eo={key:1,class:"grid flex-grow w-full grid-cols-12 gap-4 py-4 pr-[15px] min-h-0 overflow-auto [&::-webkit-scrollbar]:h-2 [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-track]:bg-stone-100 [&::-webkit-scrollbar-thumb]:bg-stone-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500"},to=M({__name:"vs-editor",props:{prefix:String,customClass:{type:String,default:()=>"w-screen h-screen"},initialDashboardId:{type:String,default:""},initialWidgetId:{type:String,default:""}},emits:["back"],setup(r,{emit:t}){const s=r;xe(s.prefix||"/api");const n=t,o=U.useRouter(),l=e.computed(()=>o.hasRoute(q.EditorWidget)),a=e.inject("biClearDashboard",null),i=e.ref(s.initialDashboardId||""),c=e.ref(s.initialWidgetId||""),d=e.ref(null),p=e.ref(null),h=e.ref(null);e.watch(()=>s.initialWidgetId,f=>{c.value=f||""});const b=async()=>{if(!i.value){d.value=null;return}try{const f=await A.get(`/bi-dashboard/${i.value}`);d.value=f}catch(f){console.error(f)}},g=e.computed(()=>{var f,u,w;return(w=Array.isArray((f=d.value)==null?void 0:f.widgets)?(u=d.value)==null?void 0:u.widgets:[])==null?void 0:w.find(V=>(V==null?void 0:V.name)===c.value)});function m(f){l.value?o.push({name:q.EditorWidget,params:{dashboardId:i.value,widgetId:f}}):c.value=f}function k(){l.value?o.push({name:q.EditorDashboard,params:{dashboardId:i.value}}):c.value=""}function x(){l.value?o.push({name:q.Editor}):(typeof a=="function"&&a(),n("back"))}const $=e.computed(()=>{var w,V,_,y,E;const u=[l.value?{label:"Дашборди",to:{name:q.Editor}}:{label:"Дашборди",onClick:x}];if((w=d.value)!=null&&w.title||i.value){const N=((V=d.value)==null?void 0:V.title)||i.value||"Редактор";!!c.value?u.push(l.value?{label:N,to:{name:q.EditorDashboard,params:{dashboardId:i.value}}}:{label:N,onClick:()=>{c.value=""}}):u.push({label:N})}else u.push({label:"Редактор"});if(c.value&&g.value){const N=((y=(_=g.value)==null?void 0:_.data)==null?void 0:y.title)||((E=g.value)==null?void 0:E.title)||c.value;u.push({label:N})}return u});return e.watch(i,(f,u)=>{u&&(c.value=""),f?b():(d.value=null,x())}),e.onMounted(()=>{b()}),(f,u)=>{var w,V;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["flex w-full h-full",[r.customClass]])},[e.createElementVNode("div",Un,[e.createElementVNode("div",Hn,[e.createElementVNode("div",Gn,[e.createElementVNode("div",Zn,[e.createVNode(et,{items:$.value,compact:""},null,8,["items"])]),i.value&&d.value?(e.openBlock(),e.createElementBlock("div",Qn,[e.createElementVNode("div",Xn,[e.createElementVNode("h1",Jn,e.toDisplayString(d.value.title||i.value),1),d.value.description?(e.openBlock(),e.createElementBlock("p",Kn,e.toDisplayString(d.value.description),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Yn,[c.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center gap-1.5 px-3 py-1.5 text-sm text-gray-600 hover:text-gray-900 hover:bg-gray-100 rounded-lg transition-colors",onClick:k},[e.createVNode(e.unref(Je),{class:"w-4 h-4"}),u[5]||(u[5]=e.createTextVNode(" Закрити ",-1))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(vn,{selected:i.value,"onUpdate:selected":u[0]||(u[0]=_=>i.value=_),dashboardData:d.value,columns:(w=d.value)==null?void 0:w.columns,selectedWidgetData:g.value,prefix:r.prefix,onUpdateEditor:b},null,8,["selected","dashboardData","columns","selectedWidgetData","prefix"]),e.createElementVNode("button",{type:"button",class:"ml-4 flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors shadow-sm font-medium",onClick:u[1]||(u[1]=_=>{var y,E;return(E=(y=h.value)==null?void 0:y.open)==null?void 0:E.call(y)})},[...u[6]||(u[6]=[e.createElementVNode("span",{class:"leading-none"},"+",-1),e.createTextVNode(" Створити віджет ",-1)])]),i.value?(e.openBlock(),e.createBlock(Bs,{key:0,ref_key:"createWidgetRef",ref:h,inline:"",columns:(V=d.value)==null?void 0:V.columns,selectedDashboard:i.value,onUpdateData:b},null,8,["columns","selectedDashboard"])):e.createCommentVNode("",!0)],64))])])):e.createCommentVNode("",!0)]),c.value&&d.value?(e.openBlock(),e.createBlock(Ln,{key:0,"selected-widget":c.value,"onUpdate:selectedWidget":u[2]||(u[2]=_=>c.value=_),"selected-widget-data":g.value,"current-widget-data":p.value,"selected-dashboard":i.value,"dashboard-widgets":d.value.widgets||[],onUpdateData:b},null,8,["selected-widget","selected-widget-data","current-widget-data","selected-dashboard","dashboard-widgets"])):(e.openBlock(),e.createElementBlock("div",eo,[d.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(d.value.panels,(_,y)=>{var E,N;return e.openBlock(),e.createElementBlock("div",{key:_.widget||((E=_.widgets)==null?void 0:E.join("-"))||y,class:e.normalizeClass([`md:col-span-${_.col||12} col-span-12`,"flex flex-col gap-[10px]"])},[(N=_.widgets)!=null&&N.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(_.widgets,S=>(e.openBlock(),e.createBlock(de,{onClick:O=>m(S),"onUpdate:currentWidgetData":u[3]||(u[3]=O=>p.value=O),key:S,dashboard:i.value,widget:S,selectedWidget:c.value,"dashboard-widgets":d.value.widgets,height:Number(_.height??480),class:e.normalizeClass({"border border-blue-500":c.value===S})},null,8,["onClick","dashboard","widget","selectedWidget","dashboard-widgets","height","class"]))),128)):(e.openBlock(),e.createBlock(de,{key:1,onClick:S=>m(_.widget),"onUpdate:currentWidgetData":u[4]||(u[4]=S=>p.value=S),class:e.normalizeClass(["flex flex-col",{"border border-blue-500":c.value===_.widget}]),dashboard:i.value,widget:_.widget,selectedWidget:c.value,"dashboard-widgets":d.value.widgets,height:Number(_.height??480)},null,8,["onClick","class","dashboard","widget","selectedWidget","dashboard-widgets","height"]))],2)}),128)):(e.openBlock(),e.createBlock(we,{key:0,class:"col-span-12"}))]))])])],2)}}},[["__scopeId","data-v-330ef797"]]),ro={class:"w-full h-screen"},Et=e.defineComponent({__name:"vs-editor-page",props:{prefix:{default:"/api"},dashboardId:{default:""},widgetId:{default:""}},emits:["back"],setup(r){return(t,s)=>(e.openBlock(),e.createElementBlock("div",ro,[e.createVNode(to,{customClass:"h-full w-full",prefix:r.prefix,"initial-dashboard-id":r.dashboardId,"initial-widget-id":r.widgetId,onBack:s[0]||(s[0]=n=>t.$emit("back"))},null,8,["prefix","initial-dashboard-id","initial-widget-id"])]))}}),re=(r,t)=>{const s=r.__vccOpts||r;for(const[n,o]of t)s[n]=o;return s},so={},no={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"size-6 text-green-600"};function oo(r,t){return e.openBlock(),e.createElementBlock("svg",no,[...t[0]||(t[0]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])}const ao=re(so,[["render",oo]]),lo={},io={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"orange",class:"size-6 text-orange-600"};function co(r,t){return e.openBlock(),e.createElementBlock("svg",io,[...t[0]||(t[0]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 9v3m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])}const po=re(lo,[["render",co]]),ho={},uo={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"size-6 text-blue-600"};function mo(r,t){return e.openBlock(),e.createElementBlock("svg",uo,[...t[0]||(t[0]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z"},null,-1)])])}const fo=re(ho,[["render",mo]]),go={},bo={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"red",class:"size-6 text-red-600"};function yo(r,t){return e.openBlock(),e.createElementBlock("svg",bo,[...t[0]||(t[0]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18L18 6M6 6l12 12"},null,-1)])])}const xo=re(go,[["render",yo]]),ko={class:"rounded-md border border-gray-300 bg-white p-4 shadow-sm"},wo={class:"flex items-start gap-4 opacity-100 scale-5 transition-all duration-300"},_o={class:"flex-1"},$o={class:"font-medium text-gray-900"},Eo={class:"mt-0.5 text-sm text-gray-700"},Bo=e.defineComponent({__name:"vs-notify",props:{type:{},title:{},message:{}},setup(r){const t={success:ao,warning:po,error:xo,info:fo};return(s,n)=>(e.openBlock(),e.createElementBlock("div",ko,[e.createElementVNode("div",wo,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t[s.type]))),e.createElementVNode("div",_o,[e.createElementVNode("strong",$o,e.toDisplayString(s.title),1),e.createElementVNode("p",Eo,e.toDisplayString(s.message),1)]),n[0]||(n[0]=e.createElementVNode("button",{class:"m-3 rounded-full p-1.5 text-gray-500 transition-colors hover:bg-gray-50 hover:text-gray-700",type:"button","aria-label":"Dismiss notify"},[e.createElementVNode("span",{class:"sr-only"},"Dismiss popup"),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"size-5"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18L18 6M6 6l12 12"})])],-1))])]))}}),Ce={top:"top-4 left-1/2 transform -translate-x-1/2","left-bottom":"bottom-4 left-4 transform","right-bottom":"bottom-4 right-4 transform",bottom:"bottom-4 left-1/2 transform -translate-x-1/2"},Vo=r=>{var c;const{type:t="info",title:s,message:n,position:o="right-bottom"}=r||{};let l=document.querySelector("#notify-root");l||(l=document.createElement("div"),l.id="notify-root",l.className=`fixed z-[2000] flex flex-col gap-3 ${Ce[o]} p-6 max-w-md mx-auto font-sans antialiased`,document.body.appendChild(l)),l.className.includes(Ce[o])||(Object.values(Ce).forEach(d=>{l.classList.remove(...d.split(" "))}),l.classList.add(...Ce[o].split(" ")));const a=document.createElement("div");l.appendChild(a);const i=e.createApp({render(){return e.h(Bo,{type:t,title:s,message:n,onClose:()=>{i.unmount(),a.remove()}})}});i.mount(a),(c=a.querySelector("button"))==null||c.addEventListener("click",()=>{a.classList.add("opacity-0","scale-95","transition-all","duration-300"),setTimeout(()=>{i.unmount(),a.remove()},350)}),setTimeout(()=>{a.classList.add("opacity-0","scale-95","transition-all","duration-300"),setTimeout(()=>{i.unmount(),a.remove()},350)},3500)};e.defineComponent({name:"Copy",props:{text:{type:String,default:""},width:{type:[String,Number],default:null},notify:{type:Boolean,default:!0},notifyOptions:{type:Object,default:()=>({})}},emits:["copied","copy-error"],data(){return{slotText:""}},computed:{rootClasses(){return["vs-copy inline-flex items-center gap-2 cursor-pointer select-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500"]},containerStyle(){return!this.width&&this.width!==0?{}:{width:typeof this.width=="number"?`${this.width}px`:this.width.trim()}},displayText(){return this.text||this.slotText}},mounted(){this.updateSlotText()},updated(){this.updateSlotText()},methods:{updateSlotText(){var t,s;const r=((s=(t=this.$refs.text)==null?void 0:t.textContent)==null?void 0:s.trim())||"";r!==this.slotText&&(this.slotText=r)},async handleCopy(){const r=this.displayText;if(r)try{await this.copyToClipboard(r),this.$emit("copied",r),this.showNotify(r)}catch(t){this.$emit("copy-error",t)}},async copyToClipboard(r){var s;if((s=navigator.clipboard)!=null&&s.writeText){await navigator.clipboard.writeText(r);return}const t=document.createElement("textarea");t.value=r,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t),t.select();try{if(!document.execCommand("copy"))throw new Error("Copy command was unsuccessful")}finally{document.body.removeChild(t)}},showNotify(r){var s,n,o,l;if(!this.notify)return;const t={type:((s=this.notifyOptions)==null?void 0:s.type)??"success",title:((n=this.notifyOptions)==null?void 0:n.title)??"Copied",message:((o=this.notifyOptions)==null?void 0:o.message)??r,position:(l=this.notifyOptions)==null?void 0:l.position};Vo(t)}}}),e.defineComponent({props:{modelValue:{type:Boolean,default:()=>!1},title:{type:String,default:()=>""},disabled:{type:Boolean,default:()=>!1}},data(){return{}},mounted(){this.modelValue||this.$emit("update:modelValue",!1)},computed:{modelState:{get(){return this.modelValue},set(r){this.$emit("update:modelValue",r)}},labelCursorClasses(){return[{"cursor-not-allowed":this.disabled},{"cursor-pointer":!this.disabled}]}},methods:{handleEnterDown(r){const{keyCode:t}=r;t===13&&(this.modelState=!this.modelState)},addKeyHandler(){window.addEventListener("keydown",this.handleEnterDown)},removeKeyHandler(){window.removeEventListener("keydown",this.handleEnterDown)}}});const Co={},No={xmlns:"http://www.w3.org/2000/svg",class:"w-6 h-6",viewBox:"0 0 20 20",fill:"currentColor"};function Do(r,t){return e.openBlock(),e.createElementBlock("svg",No,[...t[0]||(t[0]=[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z","clip-rule":"evenodd"},null,-1)])])}const So=re(Co,[["render",Do]]),zo={},Lo={xmlns:"http://www.w3.org/2000/svg",class:"w-6 h-6",viewBox:"0 0 20 20",fill:"currentColor"};function To(r,t){return e.openBlock(),e.createElementBlock("svg",Lo,[...t[0]||(t[0]=[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z","clip-rule":"evenodd"},null,-1)])])}const Io=re(zo,[["render",To]]),Mo={},Po={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-chevron-down",height:"16",width:"16"};function Fo(r,t){return e.openBlock(),e.createElementBlock("svg",Po,[...t[0]||(t[0]=[e.createElementVNode("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e.createElementVNode("path",{d:"M6 9l6 6l6 -6"},null,-1)])])}const Ro=re(Mo,[["render",Fo]]),jo={},Oo={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"4","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-check text-blue-600",width:"14",height:"14"};function Ao(r,t){return e.openBlock(),e.createElementBlock("svg",Oo,[...t[0]||(t[0]=[e.createElementVNode("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e.createElementVNode("path",{d:"M5 12l5 5l10 -10"},null,-1)])])}const Wo=re(jo,[["render",Ao]]),qo={class:"flex items-center justify-between w-full"},vo={class:"m-0 flex list-none justify-center gap-1 p-0 text-gray-900"},Uo=["onClick"],Ho={key:1,class:"flex size-7 items-center justify-center px-1 text-gray-500 select-none","aria-hidden":"true"},Go={key:1},Zo={for:"Page"},Qo=["value","max"],Xo={key:2,class:"text-sm/8 font-medium tracking-widest"},Jo={key:0,class:"flex justify-center items-center gap-x-5 ml-3"},Ko={class:"hs-dropdown-menu z-50 bg-white shadow-md rounded-lg p-1 space-y-0.5 dark:bg-neutral-800 dark:border dark:border-neutral-700 right-0 dark:divide-neutral-700 absolute bottom-[100%]",role:"menu","aria-orientation":"vertical","aria-labelledby":"dropdown-button"},Yo=["onClick"],ea=e.defineComponent({__name:"vs-pagination",props:{pageSize:{},page:{},total:{},view:{default:"button"},pageSizes:{default:()=>[10,20,30]},showPageSizes:{type:Boolean,default:!0},pageRange:{default:7},size:{default:7},color:{default:"teal"}},emits:["update:page","pageChange","pageSizeChange"],setup(r,{emit:t}){const s=r,n=t,o=e.ref(s.page),l=e.computed(()=>Math.ceil(s.total/s.pageSize)),a=e.computed(()=>{const x=Math.floor(s.pageRange/2);let $=o.value-x,f=o.value+x;$<1&&(f+=1-$,$=1),f>l.value&&($-=f-l.value,f=l.value),$=Math.max(1,$);const u=[];for(let w=$;w<=f;w+=1)u.push(w);return u}),i=e.computed(()=>{const x=a.value,$=l.value;if($<=1)return x.map(V=>({type:"page",value:V}));const f=x.length>0&&x[0]>1,u=x.length>0&&x[x.length-1]<$,w=[];return f&&(w.push({type:"page",value:1}),w.push({type:"ellipsis"})),x.forEach(V=>w.push({type:"page",value:V})),u&&(w.push({type:"ellipsis"}),w.push({type:"page",value:$})),w}),c=x=>{o.value=x,n("update:page",x),n("pageChange",x)},d=()=>{o.value>1&&c(o.value-1)},p=()=>{o.value<l.value&&c(o.value+1)};e.watch(()=>s.page,x=>{o.value=x});const h=e.ref(s.pageSize),b=e.ref(!1),g=e.ref(null);e.watch(()=>s.pageSize,x=>{h.value=x});const m=(x=h.value)=>{h.value=x,b.value=!1,o.value=1,n("update:page",o.value),n("pageSizeChange",h.value)},k=x=>{if(!b.value)return;const $=x.target;g.value&&$&&!g.value.contains($)&&(b.value=!1)};return e.onMounted(()=>{document.addEventListener("click",k)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k)}),(x,$)=>(e.openBlock(),e.createElementBlock("div",qo,[e.createElementVNode("ul",vo,[e.createElementVNode("li",null,[e.createElementVNode("button",{class:e.normalizeClass(["grid size-7 cursor-pointer place-content-center rounded border border-gray-200 transition-colors hover:bg-gray-50 rtl:rotate-180",{"opacity-50 pointer-events-none":o.value===1}]),"aria-label":"Previous page",onClick:d},[e.createVNode(So)],2)]),x.view==="button"?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,(f,u)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.type==="page"?f.value:`ellipsis-${u}`},[f.type==="page"?(e.openBlock(),e.createElementBlock("li",{key:0,class:e.normalizeClass([[`size-${s.size} text-sm/${s.size} px-1.5`,f.value===o.value&&x.color?`bg-[${x.color}]`:"",f.value===o.value?`block rounded border border-${x.color}-600 text-center font-medium text-white`:"block rounded border border-gray-200 text-center font-medium transition-colors hover:bg-gray-50"],"cursor-pointer"]),onClick:w=>c(f.value)},e.toDisplayString(f.value),11,Uo)):(e.openBlock(),e.createElementBlock("li",Ho," … "))],64))),128)):x.view==="input"?(e.openBlock(),e.createElementBlock("li",Go,[e.createElementVNode("label",Zo,[$[2]||($[2]=e.createElementVNode("span",{class:"sr-only"}," Page ",-1)),e.createElementVNode("input",{type:"number",id:"Page",value:o.value,min:"1",max:l.value,onInput:$[0]||($[0]=f=>c(Number(f))),class:"pagination-input block h-8 w-16 rounded border border-gray-300 px-3 py-2 text-base leading-6 shadow-sm focus:border-indigo-500 focus:ring-indigo-500"},null,40,Qo)])])):x.view==="xy"?(e.openBlock(),e.createElementBlock("li",Xo,e.toDisplayString(o.value)+"/"+e.toDisplayString(l.value),1)):e.createCommentVNode("",!0),e.createElementVNode("li",null,[e.createElementVNode("button",{onClick:p,class:e.normalizeClass(["grid size-7 cursor-pointer place-content-center rounded border border-gray-200 transition-colors hover:bg-gray-50 rtl:rotate-180",{"opacity-50 pointer-events-none":o.value===l.value}]),"aria-label":"Next page"},[e.createVNode(Io)],2)])]),x.showPageSizes?(e.openBlock(),e.createElementBlock("div",Jo,[e.createElementVNode("div",{class:"relative",ref_key:"dropdownRef",ref:g},[e.withDirectives(e.createElementVNode("div",Ko,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.pageSizes,f=>(e.openBlock(),e.createElementBlock("button",{type:"button",key:f,onClick:u=>m(f),class:"flex w-full items-center gap-x-3.5 rounded-lg px-3 py-2 text-sm text-gray-800 hover:bg-gray-100 focus:bg-gray-100 focus:outline-none dark:text-neutral-400 dark:hover:bg-neutral-700 dark:hover:text-neutral-300 dark:focus:bg-neutral-700"},[e.createTextVNode(e.toDisplayString(f)+" ",1),h.value===f?(e.openBlock(),e.createBlock(Wo,{key:0})):e.createCommentVNode("",!0)],8,Yo))),128))],512),[[e.vShow,b.value]]),e.createElementVNode("button",{type:"button",class:"inline-flex min-w-[32px] text-sm/7 items-center gap-x-1 rounded-md border border-gray-200 px-1.5 h-[1.75rem] text-base text-gray-800 shadow-sm hover:bg-gray-50 focus:bg-gray-100 focus:outline-none disabled:pointer-events-none disabled:opacity-50 dark:border-neutral-700 dark:text-white dark:hover:bg-neutral-700 dark:focus:bg-neutral-700","aria-haspopup":"menu","aria-expanded":"false","aria-label":"Dropdown",onClick:$[1]||($[1]=f=>b.value=!b.value)},[e.createTextVNode(e.toDisplayString(h.value)+" ",1),e.createVNode(Ro)])],512)])):e.createCommentVNode("",!0)]))}}),ta=re(ea,[["__scopeId","data-v-36d0267f"]]);e.reactive({visible:!0});const ra={class:"relative group h-full"},sa={class:"flex items-start gap-3 flex-1 min-h-0"},na={class:"p-2 bg-blue-50 rounded-lg group-hover:bg-blue-100 transition-colors shrink-0"},oa={class:"flex-1 min-w-0 flex flex-col min-h-0"},aa={class:"font-semibold text-gray-900 mb-1 truncate"},la={key:0,class:"text-sm text-gray-600 mb-2 line-clamp-2 min-h-10"},ia={key:1,class:"text-sm text-gray-600 mb-2 line-clamp-2 min-h-10 invisible","aria-hidden":"true"},ca={key:2,class:"text-sm text-gray-400 mt-1 shrink-0"},da=M({__name:"dashboard-card",props:{title:String,description:String,modified:String,name:String,widgetCount:Number,reserveLines:Number,dashboardRouteName:String,onOpenEditor:Function},setup(r){const t=r,s=U.useRouter(),n=e.ref(!1);function o(){t.dashboardRouteName&&(s.hasRoute(q.EditorDashboard)?s.push({name:q.EditorDashboard,params:{dashboardId:t.dashboardRouteName}}):t.onOpenEditor?t.onOpenEditor(t.dashboardRouteName):s.push({path:"/editor",query:{dashboard:t.dashboardRouteName}}))}function l(a){a.target.closest(".dashboard-card-menu")||(n.value=!1)}return e.onMounted(()=>document.addEventListener("click",l)),e.onUnmounted(()=>document.removeEventListener("click",l)),(a,i)=>(e.openBlock(),e.createElementBlock("div",ra,[e.createElementVNode("button",{type:"button",class:"w-full h-full bg-white border border-gray-200 rounded-lg p-6 hover:shadow-md hover:border-blue-200 transition-all text-left animate-fade-in flex flex-col",onClick:o},[e.createElementVNode("div",sa,[e.createElementVNode("div",na,[e.createVNode(e.unref(wr),{size:24,class:"w-5 h-5 text-blue-600"})]),e.createElementVNode("div",oa,[e.createElementVNode("h3",aa,e.toDisplayString(r.title),1),r.description?(e.openBlock(),e.createElementBlock("p",la,e.toDisplayString(r.description),1)):(e.openBlock(),e.createElementBlock("p",ia," ")),r.widgetCount!=null?(e.openBlock(),e.createElementBlock("p",ca,e.toDisplayString(r.widgetCount)+" віджетів ",1)):e.createCommentVNode("",!0)])])])]))}},[["__scopeId","data-v-716ced89"]]),pa=[{type:"Text",key:"name",label:"Назва",validators:["required"],original:{type:"Text",ua:"Назва",col:8}},{type:"Text",key:"title",label:"Заголовок",validators:["required"],original:{type:"Text",ua:"Титул",col:8}},{type:"Text",key:"description",label:"Опис",original:{type:"Text",ua:"Назва",col:8}},{type:"Text",key:"words",label:"Ключові слова",original:{type:"Text",ua:"Назва",col:8}},{type:"Select",data:"pg.table_name",key:"table_name",validators:["required"],label:"Назва таблиці",original:{type:"select",ua:"Назва",col:8,data:"pg.table_name"}},{type:"Text",key:"db",label:"База даних",original:{type:"Text",ua:"Назва",col:8}},{type:"Text",key:"category",label:"Категорія",original:{type:"Text",ua:"Категорія",col:8}},{type:"Switcher",key:"public",label:"Публічний",original:{type:"Text",ua:"Назва",col:8}}];function ha(r){return!Array.isArray(r)||r.length===0?{}:r.reduce((t,s)=>{if(!s||s.key==null)return t;const{key:n,...o}=s;return t[n]=o,t},{})}const ua={class:"flex-1 bg-gray-50"},ma={class:"max-w-7xl mx-auto px-6 py-8"},fa={class:"mb-6"},ga={class:"flex items-center justify-between mb-6"},ba={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},ya={class:"flex items-center space-x-4"},xa={class:"flex-1 relative"},ka={class:"relative"},wa={class:"relative min-h-[280px]"},_a={key:0,class:"absolute inset-0 z-10 flex items-center justify-center rounded-xl bg-white/55 backdrop-blur-[2px]","aria-busy":"true","aria-live":"polite"},$a={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"},Ea={class:"mt-[20px]"},Ba={key:2,class:"flex flex-col items-center justify-center py-20 text-center"},Va={class:"mt-1 text-sm text-gray-400"},Ca={class:"font-medium text-gray-500"},Bt=e.defineComponent({__name:"all-dashboards-page",props:{prefix:{}},setup(r){const t=e.defineAsyncComponent(()=>import("@opengis/form")),s=ha(pa),n=e.ref([]),o=e.ref([]),l=U.useRouter(),a=U.useRoute();function i(C){const B=Array.isArray(C)?C[0]:C,z=typeof B=="string"?parseInt(B,10):NaN;return!Number.isNaN(z)&&z>=1?z:1}function c(C){const B=Array.isArray(C)?C[0]:C;return typeof B=="string"?B:""}function d(C){const B=C.trim().toLowerCase();return B?B.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"):""}const p=e.inject("biSetDashboard",void 0),h=r,b=e.ref(null),g=e.ref(!1),m=e.ref({}),k=e.ref(""),x=e.ref("title-asc"),$=e.ref(20),f=e.ref(0),u=e.ref(1),w=e.ref(!1),V=e.computed(()=>{const C=x.value==="title-asc"?1:-1;return[...n.value].sort((B,z)=>C*B.title.localeCompare(z.title,"uk"))});async function _(){w.value=!0;try{const C=d(k.value),B=await A.get("/bi-dashboard",{params:{type:"db",page:u.value,limit:$.value,...C?{search:C}:{}}}),z=Array.isArray(B==null?void 0:B.rows)?B.rows:[];f.value=(B==null?void 0:B.filtered)||(B==null?void 0:B.total)||0,o.value=z,n.value=z.map(j=>({routeName:String(j.name??""),title:j.title??j.name??"Без назви",description:j.description??null,modified:"-",name:"-"}))}catch(C){console.error("Failed to load dashboards",C),o.value=[],n.value=[]}finally{w.value=!1}}async function y(){var B,z,j;const C=(z=(B=e.getCurrentInstance())==null?void 0:B.proxy)==null?void 0:z.$notify;try{const Y=(j=b.value)==null?void 0:j.validate();typeof Y=="function"&&await Y();const{name:ee,title:R,table_name:K}=m.value;if(!ee||!R||!K){C==null||C({type:"error",title:"Помилка!",message:"Заповніть усі обов'язкові поля"});return}await A.post("/bi-dashboard",m.value),g.value=!1,m.value={},C==null||C({type:"success",title:"Успішно!",message:"Дашборд створено успішно"}),l.hasRoute(q.EditorDashboard)?l.push({name:q.EditorDashboard,params:{dashboardId:ee}}):p?p(ee):await _()}catch{C==null||C({type:"error",title:"Помилка!",message:"При спробі створити дашборд виникла помилка"})}}let E=null;e.onMounted(()=>{xe(h.prefix||"/api"),u.value=i(a.query.page),k.value=c(a.query.search),_()}),e.watch(k,C=>{E&&clearTimeout(E),E=setTimeout(()=>{E=null;const B=C.trim(),z=c(a.query.search);if(B===z)return;const j={...a.query};B?j.search=B:delete j.search,delete j.page,l.replace({query:j})},300)}),e.watch(()=>[a.query.page,a.query.search],()=>{const C=i(a.query.page),B=c(a.query.search);u.value=C,k.value=B,_()});const N=e.ref(1),S=()=>{const C=window.innerWidth;N.value=C>=1024?3:C>=768?2:1};e.onMounted(()=>{S(),window.addEventListener("resize",S)}),e.onUnmounted(()=>{E&&clearTimeout(E),window.removeEventListener("resize",S)});const O=C=>C?C.trim().length>70?2:1:0,G=C=>{const B=N.value||1,j=Math.floor(C/B)*B,Y=j+B,ee=V.value.slice(j,Y);let R=0;for(const K of ee){const se=O(K.description??null);if(se>R&&(R=se),R===2)break}return R},Z=C=>{const B={...a.query};C===1?delete B.page:B.page=String(C),l.push({query:B})};return(C,B)=>(e.openBlock(),e.createElementBlock("div",ua,[e.createElementVNode("div",ma,[e.createElementVNode("div",fa,[e.createElementVNode("div",ga,[B[7]||(B[7]=e.createElementVNode("div",null,[e.createElementVNode("h1",{class:"text-3xl font-bold text-gray-900"},"Дашборди"),e.createElementVNode("p",{class:"mt-2 text-gray-600"}," Керуйте та переглядайте свої аналітичні дашборди ")],-1)),e.createElementVNode("button",{type:"button",class:"flex items-center gap-2 px-4 py-2.5 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors shadow-sm font-medium",onClick:B[0]||(B[0]=z=>g.value=!0)},[e.createVNode(e.unref(Qe),{size:24,class:"w-4 h-4"}),B[6]||(B[6]=e.createElementVNode("span",null,"Новий дашборд",-1))])]),e.createVNode(pe,{teleport:"#modal",visible:g.value,title:"Створити дашборд",onClose:B[3]||(B[3]=z=>g.value=!1)},{footer:e.withCtx(()=>[e.createElementVNode("div",ba,[e.createElementVNode("button",{type:"button",class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border border-gray-200 rounded-lg hover:bg-gray-100 duration-300",onClick:B[2]||(B[2]=z=>g.value=!1)}," Скасувати "),e.createElementVNode("button",{type:"button",class:"py-2 px-3 inline-flex items-center gap-x-2 text-[14px] font-[400] whitespace-nowrap text-white bg-blue-500 rounded-lg hover:bg-blue-700 duration-300",onClick:y}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(t),{ref_key:"createFormRef",ref:b,schema:e.unref(s),values:m.value,"onUpdate:values":B[1]||(B[1]=z=>m.value=z)},null,8,["schema","values"])]),_:1},8,["visible"]),e.createElementVNode("div",ya,[e.createElementVNode("div",xa,[e.createVNode(e.unref(Xe),{size:24,class:"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400"}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":B[4]||(B[4]=z=>k.value=z),type:"text",placeholder:"Пошук дашбордів...",class:"w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"},null,512),[[e.vModelText,k.value]])]),e.createElementVNode("div",ka,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":B[5]||(B[5]=z=>x.value=z),class:"appearance-none pl-3 pr-8 py-2 border border-gray-300 rounded-lg bg-white text-sm text-gray-700 cursor-pointer focus:outline-none focus:ring-2 focus:ring-blue-500"},[...B[8]||(B[8]=[e.createElementVNode("option",{value:"title-asc"},"Назва (А → Я)",-1),e.createElementVNode("option",{value:"title-desc"},"Назва (Я → А)",-1)])],512),[[e.vModelSelect,x.value]]),e.createVNode(e.unref(mr),{size:16,class:"absolute right-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 pointer-events-none"})])])]),e.createElementVNode("div",wa,[w.value?(e.openBlock(),e.createElementBlock("div",_a,[...B[9]||(B[9]=[e.createElementVNode("div",{class:"h-11 w-11 animate-spin rounded-full border-[3px] border-blue-100 border-t-blue-600 shadow-sm",role:"status"},null,-1)])])):e.createCommentVNode("",!0),V.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",$a,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,(z,j)=>(e.openBlock(),e.createElementBlock("div",{key:z.routeName,class:"cursor-pointer h-full"},[e.createVNode(da,{title:z.title,description:z.description,modified:z.modified,name:z.name,reserveLines:G(j),"dashboard-route-name":z.routeName,"on-open-editor":e.unref(p)},null,8,["title","description","modified","name","reserveLines","dashboard-route-name","on-open-editor"])]))),128))]),e.createElementVNode("div",Ea,[e.createVNode(e.unref(ta),{total:f.value,showPageSizes:!1,page:u.value,pageSize:$.value,"onUpdate:page":Z,color:"#2563eb"},null,8,["total","page","pageSize"])])],64)):w.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Ba,[e.createVNode(e.unref(Xe),{size:48,class:"text-gray-300 mb-4"}),B[12]||(B[12]=e.createElementVNode("p",{class:"text-lg font-medium text-gray-500"},"Дашбордів не знайдено",-1)),e.createElementVNode("p",Va,[B[10]||(B[10]=e.createTextVNode(" За запитом «",-1)),e.createElementVNode("span",Ca,e.toDisplayString(k.value),1),B[11]||(B[11]=e.createTextVNode("» нічого не знайдено. Спробуйте змінити пошуковий запит. ",-1))])]))])])]))}}),Na=e.defineComponent({__name:"editor-root-page",props:{prefix:{default:"/api"}},setup(r){const t=r,s=e.computed(()=>t.prefix),n=U.useRouter(),o=U.useRoute(),l=e.computed(()=>n.hasRoute(q.EditorDashboard)),a=e.ref("");e.onMounted(()=>{var c;if(!l.value){const d=(c=o==null?void 0:o.query)==null?void 0:c.dashboard;d!=null&&typeof d=="string"&&(a.value=d.trim())}});const i=e.computed(()=>a.value.length>0);return e.provide("biSetDashboard",c=>{a.value=c||""}),e.provide("biClearDashboard",()=>{a.value=""}),e.provide("biSelectedDashboardId",e.readonly(a)),(c,d)=>{const p=e.resolveComponent("router-view");return l.value?(e.openBlock(),e.createBlock(p,{key:0})):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[i.value?(e.openBlock(),e.createBlock(Et,{key:`editor-${a.value}`,prefix:s.value,"dashboard-id":a.value,onBack:d[0]||(d[0]=h=>a.value="")},null,8,["prefix","dashboard-id"])):(e.openBlock(),e.createBlock(Bt,{key:0,prefix:s.value},null,8,["prefix"]))],64))}}});function J(r,t){const s=r&&typeof r=="object"&&"value"in r?r.value:r;if(s==null)return"";const n=Number(s);return Number.isNaN(n)?String(s):new Intl.NumberFormat("en",t??{notation:"compact"}).format(n)}function ye(r){if(!(r!=null&&r.includes("T")))return r??"";const[t,s,n]=r.split("T")[0].split("-");return`${n}.${s}.${t}`}function Da(r){return Intl.NumberFormat("en").format(r??0)}class Sa{static getTooltipOptions(t=!0){return{show:t,confine:!0,appendToBody:!1,axisPointer:{type:"cross",label:{backgroundColor:"#6a7985"}}}}}const za={show_label:!1,show_legend:!1,label:null,legend:{position:null},colors:null,color:null,title:null};function La(){const r="0123456789ABCDEF";let t="#";for(let s=0;s<6;s+=1)t+=r[Math.floor(Math.random()*16)];return t}function ae(r=za){var s,n,o;const t={label:{show:((s=r==null?void 0:r.label)==null?void 0:s.show)??(r==null?void 0:r.show_label)??!1,formatter:(r==null?void 0:r.formatter)??(l=>J(l)),...(r==null?void 0:r.label)||{}},legend:{...(r==null?void 0:r.legend)||{},[((n=r==null?void 0:r.legend)==null?void 0:n.position)||"bottom"]:"0",show:((o=r==null?void 0:r.legend)==null?void 0:o.show)??(r==null?void 0:r.show_legend)??!1},barWidth:"70%",grid:{borderColor:"#e5e7eb"},title:{...(r==null?void 0:r.title)||{}}};return(r!=null&&r.colors||r!=null&&r.color)&&(t.color=(r==null?void 0:r.colors)||(r==null?void 0:r.color)||null),t}function Vt(r){return{color:"#9ca3af",fontSize:10,fontFamily:"Inter, ui-sans-serif, system-ui",fontWeight:400,label:r==null?void 0:r.label,show:!0,formatter:(r==null?void 0:r.formatter)??(t=>J(t)),margin:(r==null?void 0:r.margin)??7,interval:(r==null?void 0:r.interval)??"auto",rotate:(r==null?void 0:r.rotate)??0}}const Ct=["#d3c7e6","#bedae3","#f8e9cb","#ff8c8c","#c5d8be","#ffc6c6","#ffc39a","#fff7c5","#d8ffc0","#d4f7ff"];class Ne{static getLabelOptions(t={}){return{show:(t==null?void 0:t.show_label)||(t==null?void 0:t.show)||!1,fontSize:"10",position:(t==null?void 0:t.position)||"inside",formatter:(t==null?void 0:t.formatter)||"{d}%",...t}}static getLegendOpions(t={}){return{...t,position:(t==null?void 0:t.position)||"bottom"}}}const le=typeof window<"u"?window.echarts:null,v={props:["source","style","widget","dashboard","title","currentWidget","widgetData","prefix","prefetchedData"],data(){return{sourceData:null,styleData:null,widgetName:"",dimensions:[],dashboardName:"",titleCharts:"",widgetInstance:null}},mounted(){window.addEventListener("resize",this.handleResize),window.addEventListener(`update-data-${this.widget}`,this.checkCustomEvent),window.addEventListener(`update-style-${this.widget}`,this.checkCustomStyleEvent)},unmounted(){window.removeEventListener(`update-data-${this.widget}`,this.checkCustomEvent),window.removeEventListener(`update-style-${this.widget}`,this.checkCustomStyleEvent)},watch:{sourceData:{async handler(){setTimeout(()=>{this==null||this.onChangedData()},0)}}},methods:{checkCustomStyleEvent(r){this.changeOptionsByName(r.chartId,r.options)},checkCustomEvent({filterUrl:r}){this.getDataFromURL(r)},handleResize(){this.widgetInstance&&this.widgetInstance.resize()},async getDataFromURL(r){try{const t=await A.get(r);this.applyResponse(t)}catch(t){const s={message:"Дані не знайдено",title:"Помилка!",type:"error",status:400,id:this.widgetName};(t==null?void 0:t.status)=="404"&&(s.status=404,s.message="Дані не знайдено"),(t==null?void 0:t.status)=="400"&&(s.message="Перевірте налаштування або зверніться до адміністратора"),(t==null?void 0:t.status)=="500"&&(s.message="Сталася помилка сервера"),this.$emit("update:widgetData",s)}},getValues(){return this.sourceData.map(r=>{var t;return parseFloat(r[(t=this.columns)==null?void 0:t[1]])})},formatDate(r){const t=new Date(r);if(isNaN(t))return r;const s=String(t.getDate()).padStart(2,"0"),o=["січня","лютого","березня","квітня","травня","червня","липня","серпня","вересня","жовтня","листопада","грудня"][t.getMonth()],l=t.getFullYear();return`${s} ${o} ${l}`},applyResponse(r){var t;this.sourceData=(r==null?void 0:r.source)||[],this.$emit("update:widgetData",r),this.dimensions=Object.keys(((t=this.sourceData)==null?void 0:t[0])||{}),this.titleCharts=this.style?this.style:(r==null?void 0:r.title)||"",this.styleData=(r==null?void 0:r.style)||{}},async getData(){var r;try{if(this.source)this.sourceData=[...this.source],this.styleData=this.style,this.titleCharts=this.title,this.dimensions=Object.keys(((r=this.sourceData)==null?void 0:r[0])||{});else if(this.prefetchedData)this.widgetName=this.widget,this.dashboardName=this.dashboard,this.applyResponse(this.prefetchedData);else{this.widgetName=this.widget,this.dashboardName=this.dashboard;const t=this.dashboardName?`${this.prefix||""}/bi-data?dashboard=${this.dashboardName}&widget=${this.widgetName}`:`${this.prefix||""}/bi-data?&widget=${this.widgetName}`;await this.getDataFromURL(t)}}catch(t){console.error(t)}},async initChart(r,t,s){var n,o,l,a,i,c,d,p,h;this.widgetInstance&&this.widgetInstance.clear();try{const b=this.$refs.chart,g=le==null?void 0:le.init(b);if(!g)return;const m={tooltip:{show:((o=(n=this.styleData)==null?void 0:n.tooltip)==null?void 0:o.show)!==!1,trigger:"axis",confine:!0,appendToBody:!1,axisPointer:{type:"shadow"},backgroundColor:"transparent",shadowColor:"transparent",padding:[0,0,0,0],borderWidth:0,position:(k,x,$,f,u)=>{const[w,V]=k,[_,y]=u.contentSize,[E,N]=u.viewSize;let S=w+14,O=V-y/2;return S+_>E&&(S=w-_-14),S<0&&(S=0),O+y>N&&(O=N-y),O<0&&(O=0),[S,O]},formatter:k=>{var y;const $=(y=k[0])==null?void 0:y.axisValue,f=$?this.formatDate($):"N/A",u=[...k].filter(E=>{var N;return parseFloat(E==null?void 0:E.data)||((N=E==null?void 0:E.data)==null?void 0:N.value)}).sort((E,N)=>{var G,Z;const S=parseFloat(((G=E==null?void 0:E.data)==null?void 0:G.value)??(E==null?void 0:E.data))||0;return(parseFloat(((Z=N==null?void 0:N.data)==null?void 0:Z.value)??(N==null?void 0:N.data))||0)-S}),w=u.slice(0,8),V=u.length-w.length;let _=`
|
|
191
|
+
Please report this to https://github.com/markedjs/marked.`,t){const o="<p>An error occurred:</p><pre>"+H(n.message+"",!0)+"</pre>";return s?Promise.resolve(o):o}if(s)return Promise.reject(n);throw n}}}const oe=new on;function T(r,t){return oe.parse(r,t)}T.options=T.setOptions=function(r){return oe.setOptions(r),T.defaults=oe.defaults,ot(T.defaults),T},T.getDefaults=Le,T.defaults=ne,T.use=function(...r){return oe.use(...r),T.defaults=oe.defaults,ot(T.defaults),T},T.walkTokens=function(r,t){return oe.walkTokens(r,t)},T.parseInline=oe.parseInline,T.Parser=X,T.parser=X.parse,T.Renderer=Ve,T.TextRenderer=je,T.Lexer=Q,T.lexer=Q.lex,T.Tokenizer=_e,T.Hooks=be,T.parse=T,T.options,T.setOptions,T.use,T.walkTokens,T.parseInline,X.parse,Q.lex;const an={class:"space-y-4"},ln={__name:"vs-editor-form-data",props:{widgetName:{type:String},dashboardId:{type:String,default:""},data:{type:Object,default:()=>{}},columns:{type:Array,default:null}},emits:["update-dashboard"],setup(r,{expose:t,emit:s}){var V,_,y,E,N,S,O,G,Z,C,B,z,j,Y,ee,R,K,se,Wt,qt,vt,Ut,Ht,Gt,Zt,Qt,Xt,Jt,Kt,Yt,er,tr,rr,sr,nr,or,ar,lr;const n=e.defineAsyncComponent(()=>import("@opengis/form")),{$notify:o}=e.getCurrentInstance().proxy,l=s,a=r,i=typeof window<"u"?new URLSearchParams(window.top.location.search):null,c=e.ref((i==null?void 0:i.get("dashboard"))||null),d=e.ref([]),p=e.computed(()=>{const D=a.columns??[];return D.length?D:d.value}),h=e.computed(()=>a.dashboardId||c.value);async function b(){if(a.columns!==null)return;const D=h.value;if(!(p.value.length||!D||!a.widgetName))try{const L=await A.get(`/bi-data?dashboard=${D}&widget=${a.widgetName}`);Array.isArray(L==null?void 0:L.columns)&&L.columns.length&&(d.value=L.columns)}catch{}}const g=D=>(D==null?void 0:D.name)!=null?{id:D.name,text:D.title||D.name}:null,m=D=>Array.isArray(D)?[...D].sort((L,te)=>{const ie=L.text&&L.text!==L.id,ir=te.text&&te.text!==te.id;return ie&&!ir?-1:!ie&&ir?1:(L.text||"").localeCompare(te.text||"",void 0,{sensitivity:"base"})}):D,k=e.computed(()=>{const D=(p.value??[]).filter(L=>(L==null?void 0:L.type)=="text"||(L==null?void 0:L.type)==="date"||(L==null?void 0:L.type)==="timestamp without time zone"||(L==null?void 0:L.type)==="boolean"||(L==null?void 0:L.type)==="integer").map(g).filter(Boolean);return m(D)}),x=e.computed(()=>`${a.widgetName}-${k.value.length}-${(p.value??[]).length}`),$=e.computed(()=>({text:{type:"Text",label:"Текст",conditions:["type","==","text"]},x:{type:"select",label:"Вісь X",style:{size:"xs"},conditions:["type","not_in",["text","table","map"]],options:[...k.value]},cls:{label:"Классифікатор вісі X",type:"text",conditions:["type","not_in",["text","table","map","cluster"]]},y_type:{label:"Тип вісі Y",type:"select",options:[{id:"columns",text:"columns"},{id:"function",text:"function"}],conditions:["type","not_in",["text","table","map","number","cluster"]]},tableSQL:{label:"Таблиця SQL",type:"text",hidden:!0},metric:{type:"select",label:"Вісь Y",conditions:[["type","not_in",["text","table","map","cluster"]],["y_type","!=","function"]],options:[{id:"count",text:"count"},...m(p.value.filter(D=>(D==null?void 0:D.type)==="numeric"||(D==null?void 0:D.type)==="double precision").map(g).filter(Boolean))]},fx:{type:"text",label:"Функція",conditions:[["y_type","==","function"]]},query:{label:"Запит (query)",type:"text",conditions:["type","not_in",["text","table","map","number"]]},groupby:{type:"select",label:"Групування",view:"buttons",style:{size:"xs"},options:[{id:"null",text:"null"},...m(p.value.filter(D=>(D==null?void 0:D.type)=="text"||(D==null?void 0:D.type)==="boolean"||(D==null?void 0:D.type)==="integer").map(g).filter(Boolean))],conditions:["type","==","bar"]},columns:{type:"checkbox",label:"Колонки",style:{size:"xs"},options:m((p.value??[]).map(g).filter(Boolean)),conditions:["type","in",["table","map"]]},granularity:{type:"radio",label:"Гранулярність",options:[{id:"year",text:"year"},{id:"quarter",text:"quarter"},{id:"month",text:"month"},{id:"week",text:"week"}],conditions:["x.type","==","date"]},type:{type:"Text",hidden:!0}})),f=e.ref({x:((_=(V=a.data)==null?void 0:V.data)==null?void 0:_.x)||((y=a.data)==null?void 0:y.x)||null,metric:((N=(E=a.data)==null?void 0:E.data)==null?void 0:N.metric)||((S=a.data)==null?void 0:S.metric)||null,columns:((G=(O=a.data)==null?void 0:O.data)==null?void 0:G.columns)||((Z=a.data)==null?void 0:Z.columns)||null,granularity:((B=(C=a.data)==null?void 0:C.data)==null?void 0:B.granularity)||((z=a.data)==null?void 0:z.granularity)||null,type:((Y=(j=a.data)==null?void 0:j.data)==null?void 0:Y.type)||((ee=a.data)==null?void 0:ee.type)||null,groupby:((K=(R=a.data)==null?void 0:R.data)==null?void 0:K.groupby)||a.data.groupby||null,fx:((Wt=(se=a.data)==null?void 0:se.data)==null?void 0:Wt.fx)||((qt=a.data)==null?void 0:qt.fx)||null,query:((Ut=(vt=a.data)==null?void 0:vt.data)==null?void 0:Ut.query)||((Ht=a.data)==null?void 0:Ht.query)||null,y_type:((Zt=(Gt=a.data)==null?void 0:Gt.data)==null?void 0:Zt.y_type)||((Qt=a.data)==null?void 0:Qt.y_type)||null,tableSQL:((Jt=(Xt=a.data)==null?void 0:Xt.data)==null?void 0:Jt.tableSQL)||((Kt=a.data)==null?void 0:Kt.tableSQL)||null,cls:((er=(Yt=a.data)==null?void 0:Yt.data)==null?void 0:er.cls)||((tr=a.data)==null?void 0:tr.cls)||null,text:((sr=(rr=a.data)==null?void 0:rr.data)==null?void 0:sr.text)||((nr=a.data)==null?void 0:nr.text)||null,table:((ar=(or=a.data)==null?void 0:or.data)==null?void 0:ar.table)||((lr=a.data)==null?void 0:lr.table)||null}),u=async()=>{try{await A.put(`/bi-dashboard/${h.value}/${a.widgetName}`,{data:f.value});let D=`/bi-data?dashboard=${h.value}&widget=${a.widgetName}`;Object.entries(f.value).forEach(([te,ie])=>{D+=`&${te}=${ie}`});const L=new CustomEvent(`update-data-${a.widgetName}`);L.filterUrl=D,window.dispatchEvent(L),l("update-dashboard"),o({type:"success",title:"Успішно!",message:"Дані успішно оновлено"})}catch{o({type:"error",title:"Помилка!",message:"При спробі оновити данні сталася помилка"})}},w=async()=>{try{let D=`/bi-data?dashboard=${h.value}&widget=${a.widgetName}`;Object.entries(f.value).forEach(([te,ie])=>{D+=`&${te}=${ie}`});const L=new CustomEvent(`update-data-${a.widgetName}`);L.filterUrl=D,window.dispatchEvent(L),l("update-dashboard")}catch{await o({type:"error",title:"Помилка!",message:"При спробі оновити данні сталася помилка"})}};return e.watch(f,()=>{w()},{deep:!0}),e.watch(()=>[a.widgetName,a.dashboardId,c.value],()=>{d.value=[],b()},{immediate:!0}),t({requestUpdateWidget:u}),(D,L)=>(e.openBlock(),e.createElementBlock("div",an,[(e.openBlock(),e.createBlock(e.unref(n),{key:x.value,schema:$.value,values:f.value,"onUpdate:values":L[0]||(L[0]=te=>f.value=te)},null,8,["schema","values"]))]))}},cn={class:"space-y-4"},dn={__name:"vs-editor-form-yaml",props:{yamlValue:{type:null,default:()=>""},widgetName:{type:String},dashboardId:{type:String,default:""},data:{type:Object}},emits:["update-dashboard"],setup(r,{expose:t,emit:s}){const n=typeof window<"u"?window.echarts:null,o=e.defineAsyncComponent(()=>import("@opengis/form").then(m=>m.VsInputMonaco)),l=e.ref(null),a=e.computed(()=>d.dashboardId||l.value),{$notify:i}=e.getCurrentInstance().proxy,c=s,d=r,p=(m,{dimensions:k,source:x})=>{const $=m.getOption(),{data:f,...u}=($==null?void 0:$.series)[0],[,...w]=k||[],V=w.map((_,y)=>({...($==null?void 0:$.series[y])||{},data:x.map(E=>E[y+1]),name:_}));m==null||m.setOption({...$||{},dataset:{dimensions:k,source:x},series:V,xAxis:{type:"category"},yAxis:{}},!0)},h=m=>{const k=document.getElementById(m);if(!k)return null;const x=n==null?void 0:n.getInstanceByDom(k);return x||null},b=e.ref(d.yamlValue),g=async()=>{try{await A.put(`/bi-dashboard/${a.value}/${d.widgetName}`,{yml:b.value});const m=h(d.widgetName);if(m){const k=await A.get(`/bi-data?dashboard=${l.value}&widget=${d.widgetName}`);p(m,k)}c("update-dashboard"),i({type:"success",title:"Успішно!",message:"Дані успішно оновлено"})}catch{i({type:"error",title:"Помилка!",message:"При спробі оновити данні сталася помилка"})}};return e.onMounted(()=>{const m=new URLSearchParams(window.top.location.search);l.value=m.get("dashboard")}),t({requestUpdateWidget:g}),(m,k)=>(e.openBlock(),e.createElementBlock("div",cn,[e.createVNode(e.unref(o),{modelValue:b.value,"onUpdate:modelValue":k[0]||(k[0]=x=>b.value=x),syntax:"yaml",theme:"vs-light",height:400,minimap:!1},null,8,["modelValue"])]))}},pn={class:"pt-[10px]"},kt={"vs-editor-form-style":Cs,"vs-editor-form-data":ln,"vs-editor-form-yaml":dn,"vs-editor-form-controls":{__name:"vs-editor-form-controls",props:{widgetName:{type:String},controls:{type:Object,default:()=>{}},columns:{type:Array,default:()=>[]}},emits:["update-dashboard"],setup(r,{emit:t}){var p;const s=e.defineAsyncComponent(()=>import("@opengis/form")),{$notify:n}=e.getCurrentInstance().proxy,o=t,l=r,a=e.ref(null),i={granularity:{ua:"Granularity",type:"checkbox",options:["week","month","quarter","year"]},export:{ua:"Export",type:"Switcher"},groupby:{ua:"Groupby",type:"checkbox",options:(p=l.columns)==null?void 0:p.map(({name:h})=>h)}},c=e.ref(l.controls||{}),d=async()=>{try{await A.put(`/bi-dashboard/${a.value}/${l.widgetName}`,{controls:c.value}),await n({type:"success",title:"Успішно!",message:"Дані успішно оновлено"}),staticTypes!=null&&staticTypes.includes(c.value.type)&&o("update-dashboard")}catch{await n({type:"error",title:"Помилка!",message:"При спробі оновити данні сталася помилка"})}};return e.onMounted(()=>{const h=new URLSearchParams(window.top.location.search);a.value=h.get("dashboard")}),(h,b)=>{const g=e.resolveComponent("VsButton");return e.openBlock(),e.createElementBlock("div",pn,[e.createVNode(g,{class:"ml-[10px] mb-[10px]",type:"plain",onClick:d},{default:e.withCtx(()=>[...b[1]||(b[1]=[e.createTextVNode(" Зберегти ",-1)])]),_:1}),e.createVNode(e.unref(s),{schema:i,values:c.value,"onUpdate:values":b[0]||(b[0]=m=>c.value=m)},null,8,["values"])])}}}},hn={key:0,class:"p-4 text-sm text-amber-700 bg-amber-50 rounded-lg"},wt={__name:"editor-tab-error-boundary",props:{tabComponent:{type:Object,default:null},tabKey:{type:[String,Number],default:""}},emits:["update-dashboard"],setup(r,{expose:t}){const s=r,n=e.ref(null);function o(){var a,i;(i=(a=n.value)==null?void 0:a.requestUpdateWidget)==null||i.call(a)}t({save:o});const l=e.ref(!1);return e.onErrorCaptured((a,i,c)=>(console.error("Editor tab error:",a,c),l.value=!0,!1)),e.watch(()=>s.tabComponent,()=>{l.value=!1},{immediate:!0}),(a,i)=>l.value?(e.openBlock(),e.createElementBlock("div",hn," Помилка завантаження вмісту. Переключіть таб або оновіть сторінку. ")):(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.tabComponent),e.mergeProps({ref_key:"tabRef",ref:n,key:r.tabKey||"tab"},a.$attrs,{onUpdateDashboard:i[0]||(i[0]=c=>a.$emit("update-dashboard"))}),null,16))}},un={class:"h-full flex flex-col bg-white shrink-0 !w-[400px] border rounded-xl overflow-hidden border-gray-200"},mn={key:0,class:"flex flex-col min-h-0 flex-1"},fn={class:"flex items-center border-b border-gray-200 bg-white shrink-0 px-4 h-[49px]"},gn={class:"flex items-center gap-6 min-w-0 -mb-[14px]"},bn=["onClick"],yn={key:0,class:"absolute bottom-0 left-0 right-0 h-0.5 bg-blue-600 rounded-full"},xn={class:"flex items-center gap-1 ml-auto shrink-0"},kn={key:1,class:"flex-1 min-h-0 overflow-auto px-4 py-4 [&::-webkit-scrollbar]:h-2 [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-track]:bg-stone-100 [&::-webkit-scrollbar-thumb]:bg-stone-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500"},wn={key:0},_n={key:1},$n={class:"p-4"},En={class:"flex justify-end mt-4 gap-x-3"},Bn={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},Vn={__name:"vs-editor-forms",props:e.mergeModels({selectedWidgetData:{type:Object,required:!1,default:null},selectedDashboard:{type:String,default:()=>""},currentWidgetData:{type:Object,default:()=>""}},{selectedWidget:{},selectedWidgetModifiers:{}}),emits:e.mergeModels(["update-data"],["update:selectedWidget"]),setup(r,{emit:t}){var w,V;const s=e.defineAsyncComponent(()=>import("@opengis/form")),n=(V=(w=e.getCurrentInstance())==null?void 0:w.proxy)==null?void 0:V.$notify,o=U.useRouter(),l=t,a=e.ref(null),i=r,c=e.ref(!1),d=e.ref(!0),p=e.ref(!1),h=e.ref({}),b=e.useModel(r,"selectedWidget"),g=["table","text","number","stat","progress","listbar","map","pivot"],m=e.ref("data"),k=async()=>{try{await A.delete(`/bi-dashboard/${i.selectedDashboard}/${i.selectedWidgetData.name}`),c.value=!1,l("update-data"),o.hasRoute(q.EditorDashboard)?await o.push({name:q.EditorDashboard,params:{dashboardId:i.selectedDashboard}}):b.value="",n({type:"success",title:"Успішно!",message:"Віджет успішно видалено"})}catch(_){console.error(_),n({type:"error",title:"Помилка!",message:"При спробі видалити віджет виникла помилка"})}},x=e.computed(()=>{const _=[{id:"data",label:"Дані"},{id:"style",label:"Стилі"},{id:"yaml",label:"{ }"}];return _==null?void 0:_.filter(y=>{var E,N,S;return y.id==="style"?!(g!=null&&g.includes(((E=i.selectedWidgetData)==null?void 0:E.type)||((S=(N=i.selectedWidgetData)==null?void 0:N.data)==null?void 0:S.type))):!0})}),$=()=>{var _,y,E,N,S,O,G,Z,C;h.value={title:(_=i.selectedWidgetData)==null?void 0:_.title,type:(y=i.selectedWidgetData)==null?void 0:y.type,table:(E=i.selectedWidgetData)==null?void 0:E.table_name,query:(S=(N=i.selectedWidgetData)==null?void 0:N.data)==null?void 0:S.query,x:(G=(O=i.selectedWidgetData)==null?void 0:O.data)==null?void 0:G.x,cls:(C=(Z=i.selectedWidgetData)==null?void 0:Z.data)==null?void 0:C.cls},p.value=!0},f=async()=>{try{await A.put(`/bi-dashboard/${i.selectedDashboard}/${i.selectedWidgetData.name}`,h.value),n({type:"success",title:"Успішно!",message:"Дані успішно змінено"}),await l("update-data"),p.value=!1}catch{n({type:"error",title:"Помилка!",message:"При спробі внести зміни виникла помилка"})}};e.watch(b,()=>{d.value=!1,setTimeout(()=>d.value=!0)});const u={title:{type:"text",ua:"Заголовок",placeholder:"Заголовок",validators:["required"]},type:{type:"select",view:"buttons",label:"Тип віджета",validators:["required"],options:[{label:"Bar",id:"bar"},{label:"Funnel",id:"funnel"},{label:"Line",id:"line"},{label:"List bar",id:"listbar"},{label:"Number",id:"number"},{label:"Pie",id:"pie"},{label:"Donut",id:"donut"},{label:"Pivot",id:"pivot"},{label:"Table",id:"table"},{label:"Progress",id:"progress"},{label:"Stat",id:"stat"},{label:"Text",id:"text"},{label:"Map",id:"map"}]},table:{type:"text",ua:"Таблиця",placeholder:"Таблиця"},query:{type:"Text",ua:"Запит (query)",placeholder:"Query"},x:{type:"Text",ua:"Вісь X",placeholder:"X Axis"},cls:{type:"Text",ua:"Клас (cls)",placeholder:"Cls"}};return(_,y)=>{var N,S,O,G,Z,C,B,z,j,Y,ee;const E=e.resolveComponent("VsPopover");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("div",un,[r.selectedWidgetData?(e.openBlock(),e.createElementBlock("div",mn,[e.createElementVNode("div",fn,[e.createElementVNode("nav",gn,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.value,R=>(e.openBlock(),e.createElementBlock("button",{key:R.id,type:"button",class:e.normalizeClass(["relative pb-3 pt-1 text-sm font-medium transition-colors whitespace-nowrap",m.value===R.id?"text-blue-600":"text-gray-600 hover:text-gray-900"]),onClick:K=>m.value=R.id},[e.createTextVNode(e.toDisplayString(R.label)+" ",1),m.value===R.id?(e.openBlock(),e.createElementBlock("span",yn)):e.createCommentVNode("",!0)],10,bn))),128))]),e.createElementVNode("div",xn,[e.createVNode(E,{placement:"left",trigger:"hover"},{reference:e.withCtx(()=>[e.createElementVNode("button",{type:"button",class:"h-8 w-8 flex items-center justify-center rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors",title:"Зберегти",onClick:y[0]||(y[0]=R=>{var K,se;return(se=(K=a.value)==null?void 0:K.save)==null?void 0:se.call(K)})},[e.createVNode(e.unref(Vr),{class:"h-4 w-4"})])]),default:e.withCtx(()=>[y[9]||(y[9]=e.createTextVNode(" Зберегти ",-1))]),_:1}),e.createVNode(E,{placement:"left",trigger:"hover"},{reference:e.withCtx(()=>[e.createElementVNode("button",{type:"button",class:"h-8 w-8 flex items-center justify-center rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors",onClick:$},[e.createVNode(nt,{class:"h-4 w-4"})])]),default:e.withCtx(()=>[y[10]||(y[10]=e.createTextVNode(" Редагувати віджет ",-1))]),_:1}),e.createVNode(E,{placement:"left",trigger:"hover"},{reference:e.withCtx(()=>[e.createElementVNode("button",{type:"button",class:"h-8 w-8 flex items-center justify-center rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors",onClick:y[1]||(y[1]=R=>c.value=!0)},[e.createVNode(e.unref(st),{class:"h-4 w-4"})])]),default:e.withCtx(()=>[y[11]||(y[11]=e.createTextVNode(" Видалити віджет ",-1))]),_:1})])]),(N=r.currentWidgetData)!=null&&N.status?(e.openBlock(),e.createBlock(we,{key:0,title:(S=r.currentWidgetData)==null?void 0:S.title,text:(O=r.currentWidgetData)==null?void 0:O.message},null,8,["title","text"])):(e.openBlock(),e.createElementBlock("div",kn,[d.value&&r.currentWidgetData?(e.openBlock(),e.createElementBlock("div",wn,[e.createVNode(wt,{ref_key:"tabPanelRef",ref:a,"tab-key":m.value,"tab-component":e.unref(kt)["vs-editor-form-"+m.value],widgetName:(G=r.selectedWidgetData)==null?void 0:G.name,dashboardId:r.selectedDashboard,yamlValue:((Z=r.selectedWidgetData)==null?void 0:Z.yml)||"",data:r.selectedWidgetData,controls:(C=r.selectedWidgetData)==null?void 0:C.controls,columns:(B=r.currentWidgetData)==null?void 0:B.columns,onUpdateDashboard:y[2]||(y[2]=R=>_.$emit("update-data"))},null,8,["tab-key","tab-component","widgetName","dashboardId","yamlValue","data","controls","columns"])])):(e.openBlock(),e.createElementBlock("div",_n,[e.createVNode(wt,{ref_key:"tabPanelRef",ref:a,"tab-key":m.value,"tab-component":e.unref(kt)["vs-editor-form-"+m.value],widgetName:(z=r.selectedWidgetData)==null?void 0:z.name,dashboardId:r.selectedDashboard,yamlValue:((j=r.selectedWidgetData)==null?void 0:j.yml)||"",data:r.selectedWidgetData,controls:(Y=r.selectedWidgetData)==null?void 0:Y.controls,columns:(ee=r.currentWidgetData)==null?void 0:ee.columns,onUpdateDashboard:y[3]||(y[3]=R=>_.$emit("update-data"))},null,8,["tab-key","tab-component","widgetName","dashboardId","yamlValue","data","controls","columns"])])),e.createVNode(pe,{teleport:"#modal",visible:c.value,title:"Ви впевнені?",onClose:y[5]||(y[5]=R=>c.value=!1)},{default:e.withCtx(()=>[e.createElementVNode("div",$n,[y[12]||(y[12]=e.createElementVNode("p",{class:"mt-1 text-gray-500 dark:text-neutral-500"}," Ви впевнені, що хочете видалити цей віджет? ",-1)),e.createElementVNode("div",En,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center px-3 py-2 text-sm font-medium text-gray-800 bg-white border border-gray-200 rounded-lg shadow-sm gap-x-2 hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-50 dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700",onClick:y[4]||(y[4]=R=>c.value=!1)}," Скасувати "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center px-3 py-2 text-sm font-semibold text-white bg-red-500 border border-transparent rounded-lg gap-x-2 hover:bg-red-600 disabled:opacity-50 disabled:pointer-events-none",onClick:k}," Так, я впевнена(ий) ")])])]),_:1},8,["visible"])]))])):(e.openBlock(),e.createBlock(we,{key:1,title:"Оберіть один з віджетів",text:"",class:"p-4"}))]),e.createVNode(pe,{teleport:"#modal",visible:p.value,title:"Редагувати віджет",onClose:y[8]||(y[8]=R=>p.value=!1)},{footer:e.withCtx(()=>[e.createElementVNode("div",Bn,[e.createElementVNode("button",{style:{border:"1px solid #000"},onClick:y[7]||(y[7]=R=>p.value=!1),class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border-gray-200 rounded-lg hover:bg-gray-100 duration-300"}," Скасувати "),e.createElementVNode("button",{onClick:f,class:"py-2 px-3 inline-flex items-center gap-x-2 text-[14px] font-[400] whitespace-nowrap text-white bg-blue-500 rounded-lg hover:bg-blue-700 duration-300"}," Зберегти ")])]),default:e.withCtx(()=>[u?(e.openBlock(),e.createBlock(e.unref(s),{key:0,schema:u,values:h.value,"onUpdate:values":y[6]||(y[6]=R=>h.value=R)},null,8,["values"])):e.createCommentVNode("",!0)]),_:1},8,["visible"])],64)}}},Cn={class:"overflow-hidden flex flex-col min-h-[480px]"},Nn={class:"flex-1 flex min-h-0 gap-4"},Dn={class:"flex-1 min-w-0 pb-4 overflow-auto bg-gray-50/50"},Sn={key:1,class:"flex items-center justify-center h-full"},zn={class:"w-[400px] shrink-0 flex flex-col"},Ln={__name:"vs-widget-editor-panel",props:{selectedWidget:{type:String,default:""},selectedWidgetData:{type:Object,default:null},currentWidgetData:{type:Object,default:null},selectedDashboard:{type:String,default:""},dashboardWidgets:{type:Array,default:()=>[]}},emits:["update:selectedWidget","update-data"],setup(r,{emit:t}){const s=r,n=t,o=e.ref(null);async function l(){if(!(!s.selectedDashboard||!s.selectedWidget))try{o.value=await A.get(`/bi-data?dashboard=${s.selectedDashboard}&widget=${s.selectedWidget}`)}catch(c){console.error(c)}}function a(){n("update-data")}e.watch(()=>[s.selectedDashboard,s.selectedWidget],()=>{l()},{immediate:!0});const i=e.computed({get:()=>s.selectedWidget,set:c=>n("update:selectedWidget",c)});return(c,d)=>(e.openBlock(),e.createElementBlock("div",Cn,[e.createElementVNode("div",Nn,[e.createElementVNode("div",Dn,[o.value?(e.openBlock(),e.createBlock(de,{key:0,dashboard:r.selectedDashboard,widget:r.selectedWidget,"selected-widget":r.selectedWidget,"dashboard-widgets":r.dashboardWidgets,"prefetched-data":o.value,"filter-u-rl":void 0,class:"max-h-full"},null,8,["dashboard","widget","selected-widget","dashboard-widgets","prefetched-data"])):(e.openBlock(),e.createElementBlock("div",Sn,[...d[1]||(d[1]=[e.createElementVNode("span",{class:"text-sm text-gray-400"},"Завантаження...",-1)])]))]),e.createElementVNode("div",zn,[e.createVNode(Vn,{selectedWidget:i.value,"onUpdate:selectedWidget":d[0]||(d[0]=p=>i.value=p),selectedWidgetData:r.selectedWidgetData,currentWidgetData:o.value||r.currentWidgetData||{columns:[]},selectedDashboard:r.selectedDashboard,onUpdateData:a},null,8,["selectedWidget","selectedWidgetData","currentWidgetData","selectedDashboard"])])])]))}},_t={__name:"icon-grid",setup(r){return(t,s)=>(e.openBlock(),e.createBlock(e.unref(_r),e.mergeProps(t.$attrs,{size:24}),null,16))}},$t={__name:"icon-table",setup(r){return(t,s)=>(e.openBlock(),e.createBlock(e.unref(Cr),e.mergeProps(t.$attrs,{size:24}),null,16))}},Tn={__name:"icon-more",setup(r){return(t,s)=>(e.openBlock(),e.createBlock(e.unref(br),e.mergeProps(t.$attrs,{size:24}),null,16))}},In=e.defineAsyncComponent(()=>import("@opengis/form")),Mn={components:{VsModal:pe,VForm:In,deleteIcon:st,editIcon:nt,IconGrid:_t,IconMore:Tn,IconTable:$t},watch:{dashboardData:{handler(r){var s,n;if(this.formEditValue={title:r==null?void 0:r.title,description:r==null?void 0:r.description,table_name:r==null?void 0:r.table_name,db:r==null?void 0:r.db,public:r==null?void 0:r.public,words:r==null?void 0:r.words},!((s=r==null?void 0:r.panels)!=null&&s.length)){this.formGridValue={panels:[]};return}const t=(n=r==null?void 0:r.panels)==null?void 0:n.map(o=>{var i,c;const{title:l="",type:a=""}=((c=(i=r==null?void 0:r.widgets)==null?void 0:i.find(d=>(d==null?void 0:d.name)===(o==null?void 0:o.widget)))==null?void 0:c.data)||{};return{title:l,type:a,...o}});this.formGridValue={panels:t}},immediate:!0}},data(){return{isDeleteConfirm:!1,isFormEdit:!1,isFormGrid:!1,isVisibleTableColumns:!1,formEditValue:{},formGridValue:{},editDashboardScheme:[{type:"Text",key:"title",label:"Заголовок",validators:["required"]},{type:"Text",key:"description",label:"Опис"},{type:"Select",key:"table_name",validators:["required"],data:"pg.table_name",label:"Назва таблиці"},{type:"Text",key:"words",label:"Ключові слова"},{type:"Text",key:"db",label:"База даних",original:{type:"Text",ua:"Назва",col:8}},{type:"Switcher",key:"public",label:"Публічний",original:{type:"Text",ua:"Назва",col:8}}],editGridScheme:[{type:"DataTable",ua:"Панелі",key:"panels",actions:["search"],editable:!1,addition:!1,colModel:[{name:"title",ua:"Назва",type:"Text",key:"title"},{name:"type",ua:"Тип",type:"Text",key:"type",disabled:!0},{name:"widget",type:"Text",ua:"Віджет",key:"widget",hiddenCol:!0,disabled:!0},{name:"col",ua:"Кількість стовпчиків",type:"Text",key:"col"},{name:"height",ua:"Висота",type:"Text",key:"height"},{name:"category",ua:"Категорія",type:"Text",key:"category"}]}]}},props:{selected:{type:String,default:()=>""},dashboardData:{type:Object,default:()=>{}},selectedWidgetData:{type:Object,default:()=>{}},columns:{type:Array}},methods:{async editDashboard(){var r,t;try{const s=(t=(r=this.$refs)==null?void 0:r.formEdit)==null?void 0:t.validate();typeof s=="function"&&await s(),await A.put(`/bi-dashboard/${this.selected}`,this.formEditValue),await this.$notify({title:"Успішно!",type:"success",message:"Дані успішно оновлено"}),this.isFormEdit=!1,await this.$emit("update-editor")}catch{this.$notify({title:"Помилка!",type:"error",message:"при спробі оновити дані виникла помилка"})}},async editDashboardGrid(){var r,t;try{(t=(r=this.$refs)==null?void 0:r.formGrid)==null||t.doValidation(),await A.put(`/bi-dashboard/${this.selected}`,{...this.formEditValue,...this.formGridValue}),await this.$notify({title:"Успішно!",type:"success",message:"Дані успішно оновлено"}),this.isFormGrid=!1,await this.$emit("update-editor")}catch{this.$notify({title:"Помилка!",type:"error",message:"При спробі оновити дані виникла помилка"})}},async deleteDashboard(){try{await A.delete(`/bi-dashboard/${this.selected}`),this.isDeleteConfirm=!1,this.$emit("update:selected",""),this.$emit("update-editor"),this.$notify({title:"Успішно!",type:"success",message:"Дашборд видалено успішно"})}catch{this.$notify({title:"Помилка!",type:"error",message:"При спробі видалити дашборд виникла помилка"})}},closePopover(){document.body.click()}}},Pn={key:0,class:"flex items-center gap-4"},Fn={class:"h-[30px] w-[30px] flex items-center justify-center"},Rn={class:"flex flex-col items-start -ml-2 -mr-2"},jn={class:"p-4"},On={class:"flex justify-end mt-4 gap-x-3"},An={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},Wn={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"};function qn(r,t,s,n,o,l){const a=e.resolveComponent("IconGrid"),i=e.resolveComponent("VsPopover"),c=e.resolveComponent("IconMore"),d=e.resolveComponent("VsModal"),p=e.resolveComponent("VForm");return e.openBlock(),e.createElementBlock("div",null,[s.selected?(e.openBlock(),e.createElementBlock("div",Pn,[e.createVNode(i,{placement:"left",trigger:"hover"},{reference:e.withCtx(()=>[e.createElementVNode("button",{class:"h-[30px] w-[30px] flex items-center justify-center",onClick:t[0]||(t[0]=h=>o.isFormGrid=!0)},[e.createVNode(a,{class:"h-[20px] text-gray-500"})])]),default:e.withCtx(()=>[t[14]||(t[14]=e.createTextVNode(" Редагувати структуру дашборду ",-1))]),_:1}),e.createVNode(i,{placement:"left",trigger:"hover"},{reference:e.withCtx(()=>[e.createVNode(i,{placement:"bottom-left"},{reference:e.withCtx(()=>[e.createElementVNode("button",Fn,[e.createVNode(c,{class:"h-[20px]"})])]),default:e.withCtx(()=>[e.createElementVNode("div",Rn,[e.createElementVNode("button",{onClick:t[1]||(t[1]=h=>{l.closePopover(),o.isFormEdit=!0}),class:"px-[8px] py-[4px] hover:bg-gray-100 w-full text-start rounded-lg"}," Редагувати дашборд "),e.createElementVNode("button",{onClick:t[2]||(t[2]=h=>{l.closePopover(),o.isDeleteConfirm=!0}),class:"px-[8px] py-[4px] hover:bg-gray-100 w-full text-start rounded-lg"}," Видалити дашборд ")])]),_:1})]),default:e.withCtx(()=>[t[15]||(t[15]=e.createTextVNode(" Керування дашбордом ",-1))]),_:1})])):e.createCommentVNode("",!0),e.createVNode(d,{teleport:"#modal",visible:o.isDeleteConfirm,size:"small",title:"Ви впевнені?",onClose:t[5]||(t[5]=h=>o.isDeleteConfirm=!1)},{default:e.withCtx(()=>[e.createElementVNode("div",jn,[t[16]||(t[16]=e.createElementVNode("p",{class:"mt-1 text-gray-500 dark:text-neutral-500"}," Ви впевнені, що хочете видалити цей дашборд? ",-1)),e.createElementVNode("div",On,[e.createElementVNode("button",{type:"button",class:"inline-flex items-center px-3 py-2 text-sm font-medium text-gray-800 bg-white border border-gray-200 rounded-lg shadow-sm gap-x-2 hover:bg-gray-50 disabled:opacity-50 disabled:pointer-events-none focus:outline-none focus:bg-gray-50 dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-300 dark:hover:bg-neutral-700 dark:focus:bg-neutral-700",onClick:t[3]||(t[3]=h=>o.isDeleteConfirm=!1)}," Скасувати "),e.createElementVNode("button",{type:"button",class:"inline-flex items-center px-3 py-2 text-sm font-semibold text-white bg-red-500 border border-transparent rounded-lg gap-x-2 hover:bg-red-600 disabled:opacity-50 disabled:pointer-events-none",onClick:t[4]||(t[4]=(...h)=>l.deleteDashboard&&l.deleteDashboard(...h))}," Так, я впевнена(ий) ")])])]),_:1},8,["visible"]),e.createVNode(d,{teleport:"#modal",visible:o.isFormEdit,title:"Редагувати дашборд",onClose:t[9]||(t[9]=h=>o.isFormEdit=!1)},{footer:e.withCtx(()=>[e.createElementVNode("div",An,[e.createElementVNode("button",{style:{border:"1px solid #000"},onClick:t[7]||(t[7]=h=>o.isFormEdit=!1),class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border-gray-200 rounded-lg !border-gray-200 hover:bg-gray-100 duration-300"}," Скасувати "),e.createElementVNode("button",{onClick:t[8]||(t[8]=(...h)=>l.editDashboard&&l.editDashboard(...h)),class:"py-2 px-3 inline-flex items-center gap-x-2 text-[14px] font-[400] whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300"}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(p,{ref:"formEdit",schema:o.editDashboardScheme,values:o.formEditValue,"onUpdate:values":t[6]||(t[6]=h=>o.formEditValue=h)},null,8,["schema","values"])]),_:1},8,["visible"]),e.createVNode(d,{teleport:"#modal",visible:o.isFormGrid,title:"Редагувати структуру дашборду",onClose:t[13]||(t[13]=h=>o.isFormGrid=!1)},{footer:e.withCtx(()=>[e.createElementVNode("div",Wn,[e.createElementVNode("button",{style:{border:"1px solid #000"},onClick:t[11]||(t[11]=h=>o.isFormGrid=!1),class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border-gray-200 rounded-lg !border-gray-200 hover:bg-gray-100 duration-300"}," Скасувати "),e.createElementVNode("button",{onClick:t[12]||(t[12]=(...h)=>l.editDashboardGrid&&l.editDashboardGrid(...h)),class:"py-2 px-3 inline-flex items-center gap-x-2 text-[14px] font-[400] whitespace-nowrap text-white bg-blue-500 rounded-lg !border-gray-200 hover:bg-blue-700 duration-300"}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(p,{ref:"formgrid",schema:o.editGridScheme,values:o.formGridValue,"onUpdate:values":t[10]||(t[10]=h=>o.formGridValue=h)},null,8,["schema","values"])]),_:1},8,["visible"])])}const vn=M(Mn,[["render",qn]]),Un={class:"flex-1 min-w-0 flex flex-col overflow-auto"},Hn={class:"max-w-7xl mx-auto px-6 w-full flex flex-col min-h-0 flex-1"},Gn={class:"relative z-10 shrink-0 mt-4 mb-6"},Zn={class:"flex items-center text-sm text-gray-600"},Qn={key:0,class:"flex items-center justify-between gap-4 mt-3"},Xn={class:"min-w-0"},Jn={class:"text-2xl font-bold text-gray-900"},Kn={key:0,class:"mt-1.5 text-sm text-gray-600"},Yn={class:"flex items-center shrink-0"},eo={key:1,class:"grid flex-grow w-full grid-cols-12 gap-4 py-4 pr-[15px] min-h-0 overflow-auto [&::-webkit-scrollbar]:h-2 [&::-webkit-scrollbar]:w-2 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-track]:bg-stone-100 [&::-webkit-scrollbar-thumb]:bg-stone-300 dark:[&::-webkit-scrollbar-track]:bg-neutral-700 dark:[&::-webkit-scrollbar-thumb]:bg-neutral-500"},to=M({__name:"vs-editor",props:{prefix:String,customClass:{type:String,default:()=>"w-screen h-screen"},initialDashboardId:{type:String,default:""},initialWidgetId:{type:String,default:""}},emits:["back"],setup(r,{emit:t}){const s=r;xe(s.prefix||"/api");const n=t,o=U.useRouter(),l=e.computed(()=>o.hasRoute(q.EditorWidget)),a=e.inject("biClearDashboard",null),i=e.ref(s.initialDashboardId||""),c=e.ref(s.initialWidgetId||""),d=e.ref(null),p=e.ref(null),h=e.ref(null);e.watch(()=>s.initialWidgetId,f=>{c.value=f||""});const b=async()=>{if(!i.value){d.value=null;return}try{const f=await A.get(`/bi-dashboard/${i.value}`);d.value=f}catch(f){console.error(f)}},g=e.computed(()=>{var f,u,w;return(w=Array.isArray((f=d.value)==null?void 0:f.widgets)?(u=d.value)==null?void 0:u.widgets:[])==null?void 0:w.find(V=>(V==null?void 0:V.name)===c.value)});function m(f){l.value?o.push({name:q.EditorWidget,params:{dashboardId:i.value,widgetId:f}}):c.value=f}function k(){l.value?o.push({name:q.EditorDashboard,params:{dashboardId:i.value}}):c.value=""}function x(){l.value?o.push({name:q.Editor}):(typeof a=="function"&&a(),n("back"))}const $=e.computed(()=>{var w,V,_,y,E;const u=[l.value?{label:"Дашборди",to:{name:q.Editor}}:{label:"Дашборди",onClick:x}];if((w=d.value)!=null&&w.title||i.value){const N=((V=d.value)==null?void 0:V.title)||i.value||"Редактор";!!c.value?u.push(l.value?{label:N,to:{name:q.EditorDashboard,params:{dashboardId:i.value}}}:{label:N,onClick:()=>{c.value=""}}):u.push({label:N})}else u.push({label:"Редактор"});if(c.value&&g.value){const N=((y=(_=g.value)==null?void 0:_.data)==null?void 0:y.title)||((E=g.value)==null?void 0:E.title)||c.value;u.push({label:N})}return u});return e.watch(i,(f,u)=>{u&&(c.value=""),f?b():(d.value=null,x())}),e.onMounted(()=>{b()}),(f,u)=>{var w,V;return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["flex w-full h-full",[r.customClass]])},[e.createElementVNode("div",Un,[e.createElementVNode("div",Hn,[e.createElementVNode("div",Gn,[e.createElementVNode("div",Zn,[e.createVNode(et,{items:$.value,compact:""},null,8,["items"])]),i.value&&d.value?(e.openBlock(),e.createElementBlock("div",Qn,[e.createElementVNode("div",Xn,[e.createElementVNode("h1",Jn,e.toDisplayString(d.value.title||i.value),1),d.value.description?(e.openBlock(),e.createElementBlock("p",Kn,e.toDisplayString(d.value.description),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Yn,[c.value?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"flex items-center gap-1.5 px-3 py-1.5 text-sm text-gray-600 hover:text-gray-900 hover:bg-gray-100 rounded-lg transition-colors",onClick:k},[e.createVNode(e.unref(Je),{class:"w-4 h-4"}),u[5]||(u[5]=e.createTextVNode(" Закрити ",-1))])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createVNode(vn,{selected:i.value,"onUpdate:selected":u[0]||(u[0]=_=>i.value=_),dashboardData:d.value,columns:(w=d.value)==null?void 0:w.columns,selectedWidgetData:g.value,prefix:r.prefix,onUpdateEditor:b},null,8,["selected","dashboardData","columns","selectedWidgetData","prefix"]),e.createElementVNode("button",{type:"button",class:"ml-4 flex items-center gap-2 px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors shadow-sm font-medium",onClick:u[1]||(u[1]=_=>{var y,E;return(E=(y=h.value)==null?void 0:y.open)==null?void 0:E.call(y)})},[...u[6]||(u[6]=[e.createElementVNode("span",{class:"leading-none"},"+",-1),e.createTextVNode(" Створити віджет ",-1)])]),i.value?(e.openBlock(),e.createBlock(Bs,{key:0,ref_key:"createWidgetRef",ref:h,inline:"",columns:(V=d.value)==null?void 0:V.columns,selectedDashboard:i.value,onUpdateData:b},null,8,["columns","selectedDashboard"])):e.createCommentVNode("",!0)],64))])])):e.createCommentVNode("",!0)]),c.value&&d.value?(e.openBlock(),e.createBlock(Ln,{key:0,"selected-widget":c.value,"onUpdate:selectedWidget":u[2]||(u[2]=_=>c.value=_),"selected-widget-data":g.value,"current-widget-data":p.value,"selected-dashboard":i.value,"dashboard-widgets":d.value.widgets||[],onUpdateData:b},null,8,["selected-widget","selected-widget-data","current-widget-data","selected-dashboard","dashboard-widgets"])):(e.openBlock(),e.createElementBlock("div",eo,[d.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(d.value.panels,(_,y)=>{var E,N;return e.openBlock(),e.createElementBlock("div",{key:_.widget||((E=_.widgets)==null?void 0:E.join("-"))||y,class:e.normalizeClass([`md:col-span-${_.col||12} col-span-12`,"flex flex-col gap-[10px]"])},[(N=_.widgets)!=null&&N.length?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(_.widgets,S=>(e.openBlock(),e.createBlock(de,{onClick:O=>m(S),"onUpdate:currentWidgetData":u[3]||(u[3]=O=>p.value=O),key:S,dashboard:i.value,widget:S,selectedWidget:c.value,"dashboard-widgets":d.value.widgets,height:Number(_.height??480),class:e.normalizeClass({"border border-blue-500":c.value===S})},null,8,["onClick","dashboard","widget","selectedWidget","dashboard-widgets","height","class"]))),128)):(e.openBlock(),e.createBlock(de,{key:1,onClick:S=>m(_.widget),"onUpdate:currentWidgetData":u[4]||(u[4]=S=>p.value=S),class:e.normalizeClass(["flex flex-col",{"border border-blue-500":c.value===_.widget}]),dashboard:i.value,widget:_.widget,selectedWidget:c.value,"dashboard-widgets":d.value.widgets,height:Number(_.height??480)},null,8,["onClick","class","dashboard","widget","selectedWidget","dashboard-widgets","height"]))],2)}),128)):(e.openBlock(),e.createBlock(we,{key:0,class:"col-span-12"}))]))])])],2)}}},[["__scopeId","data-v-330ef797"]]),ro={class:"w-full h-screen"},Et=e.defineComponent({__name:"vs-editor-page",props:{prefix:{default:"/api"},dashboardId:{default:""},widgetId:{default:""}},emits:["back"],setup(r){return(t,s)=>(e.openBlock(),e.createElementBlock("div",ro,[e.createVNode(to,{customClass:"h-full w-full",prefix:r.prefix,"initial-dashboard-id":r.dashboardId,"initial-widget-id":r.widgetId,onBack:s[0]||(s[0]=n=>t.$emit("back"))},null,8,["prefix","initial-dashboard-id","initial-widget-id"])]))}}),re=(r,t)=>{const s=r.__vccOpts||r;for(const[n,o]of t)s[n]=o;return s},so={},no={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"size-6 text-green-600"};function oo(r,t){return e.openBlock(),e.createElementBlock("svg",no,[...t[0]||(t[0]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M9 12.75L11.25 15 15 9.75M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])}const ao=re(so,[["render",oo]]),lo={},io={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"orange",class:"size-6 text-orange-600"};function co(r,t){return e.openBlock(),e.createElementBlock("svg",io,[...t[0]||(t[0]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M12 9v3m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"},null,-1)])])}const po=re(lo,[["render",co]]),ho={},uo={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"size-6 text-blue-600"};function mo(r,t){return e.openBlock(),e.createElementBlock("svg",uo,[...t[0]||(t[0]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z"},null,-1)])])}const fo=re(ho,[["render",mo]]),go={},bo={xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"red",class:"size-6 text-red-600"};function yo(r,t){return e.openBlock(),e.createElementBlock("svg",bo,[...t[0]||(t[0]=[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18L18 6M6 6l12 12"},null,-1)])])}const xo=re(go,[["render",yo]]),ko={class:"rounded-md border border-gray-300 bg-white p-4 shadow-sm"},wo={class:"flex items-start gap-4 opacity-100 scale-5 transition-all duration-300"},_o={class:"flex-1"},$o={class:"font-medium text-gray-900"},Eo={class:"mt-0.5 text-sm text-gray-700"},Bo=e.defineComponent({__name:"vs-notify",props:{type:{},title:{},message:{}},setup(r){const t={success:ao,warning:po,error:xo,info:fo};return(s,n)=>(e.openBlock(),e.createElementBlock("div",ko,[e.createElementVNode("div",wo,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(t[s.type]))),e.createElementVNode("div",_o,[e.createElementVNode("strong",$o,e.toDisplayString(s.title),1),e.createElementVNode("p",Eo,e.toDisplayString(s.message),1)]),n[0]||(n[0]=e.createElementVNode("button",{class:"m-3 rounded-full p-1.5 text-gray-500 transition-colors hover:bg-gray-50 hover:text-gray-700",type:"button","aria-label":"Dismiss notify"},[e.createElementVNode("span",{class:"sr-only"},"Dismiss popup"),e.createElementVNode("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24","stroke-width":"1.5",stroke:"currentColor",class:"size-5"},[e.createElementVNode("path",{"stroke-linecap":"round","stroke-linejoin":"round",d:"M6 18L18 6M6 6l12 12"})])],-1))])]))}}),Ce={top:"top-4 left-1/2 transform -translate-x-1/2","left-bottom":"bottom-4 left-4 transform","right-bottom":"bottom-4 right-4 transform",bottom:"bottom-4 left-1/2 transform -translate-x-1/2"},Vo=r=>{var c;const{type:t="info",title:s,message:n,position:o="right-bottom"}=r||{};let l=document.querySelector("#notify-root");l||(l=document.createElement("div"),l.id="notify-root",l.className=`fixed z-[2000] flex flex-col gap-3 ${Ce[o]} p-6 max-w-md mx-auto font-sans antialiased`,document.body.appendChild(l)),l.className.includes(Ce[o])||(Object.values(Ce).forEach(d=>{l.classList.remove(...d.split(" "))}),l.classList.add(...Ce[o].split(" ")));const a=document.createElement("div");l.appendChild(a);const i=e.createApp({render(){return e.h(Bo,{type:t,title:s,message:n,onClose:()=>{i.unmount(),a.remove()}})}});i.mount(a),(c=a.querySelector("button"))==null||c.addEventListener("click",()=>{a.classList.add("opacity-0","scale-95","transition-all","duration-300"),setTimeout(()=>{i.unmount(),a.remove()},350)}),setTimeout(()=>{a.classList.add("opacity-0","scale-95","transition-all","duration-300"),setTimeout(()=>{i.unmount(),a.remove()},350)},3500)};e.defineComponent({name:"Copy",props:{text:{type:String,default:""},width:{type:[String,Number],default:null},notify:{type:Boolean,default:!0},notifyOptions:{type:Object,default:()=>({})}},emits:["copied","copy-error"],data(){return{slotText:""}},computed:{rootClasses(){return["vs-copy inline-flex items-center gap-2 cursor-pointer select-none focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-500"]},containerStyle(){return!this.width&&this.width!==0?{}:{width:typeof this.width=="number"?`${this.width}px`:this.width.trim()}},displayText(){return this.text||this.slotText}},mounted(){this.updateSlotText()},updated(){this.updateSlotText()},methods:{updateSlotText(){var t,s;const r=((s=(t=this.$refs.text)==null?void 0:t.textContent)==null?void 0:s.trim())||"";r!==this.slotText&&(this.slotText=r)},async handleCopy(){const r=this.displayText;if(r)try{await this.copyToClipboard(r),this.$emit("copied",r),this.showNotify(r)}catch(t){this.$emit("copy-error",t)}},async copyToClipboard(r){var s;if((s=navigator.clipboard)!=null&&s.writeText){await navigator.clipboard.writeText(r);return}const t=document.createElement("textarea");t.value=r,t.setAttribute("readonly",""),t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t),t.select();try{if(!document.execCommand("copy"))throw new Error("Copy command was unsuccessful")}finally{document.body.removeChild(t)}},showNotify(r){var s,n,o,l;if(!this.notify)return;const t={type:((s=this.notifyOptions)==null?void 0:s.type)??"success",title:((n=this.notifyOptions)==null?void 0:n.title)??"Copied",message:((o=this.notifyOptions)==null?void 0:o.message)??r,position:(l=this.notifyOptions)==null?void 0:l.position};Vo(t)}}}),e.defineComponent({props:{modelValue:{type:Boolean,default:()=>!1},title:{type:String,default:()=>""},disabled:{type:Boolean,default:()=>!1}},data(){return{}},mounted(){this.modelValue||this.$emit("update:modelValue",!1)},computed:{modelState:{get(){return this.modelValue},set(r){this.$emit("update:modelValue",r)}},labelCursorClasses(){return[{"cursor-not-allowed":this.disabled},{"cursor-pointer":!this.disabled}]}},methods:{handleEnterDown(r){const{keyCode:t}=r;t===13&&(this.modelState=!this.modelState)},addKeyHandler(){window.addEventListener("keydown",this.handleEnterDown)},removeKeyHandler(){window.removeEventListener("keydown",this.handleEnterDown)}}});const Co={},No={xmlns:"http://www.w3.org/2000/svg",class:"w-6 h-6",viewBox:"0 0 20 20",fill:"currentColor"};function Do(r,t){return e.openBlock(),e.createElementBlock("svg",No,[...t[0]||(t[0]=[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z","clip-rule":"evenodd"},null,-1)])])}const So=re(Co,[["render",Do]]),zo={},Lo={xmlns:"http://www.w3.org/2000/svg",class:"w-6 h-6",viewBox:"0 0 20 20",fill:"currentColor"};function To(r,t){return e.openBlock(),e.createElementBlock("svg",Lo,[...t[0]||(t[0]=[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z","clip-rule":"evenodd"},null,-1)])])}const Io=re(zo,[["render",To]]),Mo={},Po={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-chevron-down",height:"16",width:"16"};function Fo(r,t){return e.openBlock(),e.createElementBlock("svg",Po,[...t[0]||(t[0]=[e.createElementVNode("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e.createElementVNode("path",{d:"M6 9l6 6l6 -6"},null,-1)])])}const Ro=re(Mo,[["render",Fo]]),jo={},Oo={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"4","stroke-linecap":"round","stroke-linejoin":"round",class:"icon icon-tabler icons-tabler-outline icon-tabler-check text-blue-600",width:"14",height:"14"};function Ao(r,t){return e.openBlock(),e.createElementBlock("svg",Oo,[...t[0]||(t[0]=[e.createElementVNode("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"},null,-1),e.createElementVNode("path",{d:"M5 12l5 5l10 -10"},null,-1)])])}const Wo=re(jo,[["render",Ao]]),qo={class:"flex items-center justify-between w-full"},vo={class:"m-0 flex list-none justify-center gap-1 p-0 text-gray-900"},Uo=["onClick"],Ho={key:1,class:"flex size-7 items-center justify-center px-1 text-gray-500 select-none","aria-hidden":"true"},Go={key:1},Zo={for:"Page"},Qo=["value","max"],Xo={key:2,class:"text-sm/8 font-medium tracking-widest"},Jo={key:0,class:"flex justify-center items-center gap-x-5 ml-3"},Ko={class:"hs-dropdown-menu z-50 bg-white shadow-md rounded-lg p-1 space-y-0.5 dark:bg-neutral-800 dark:border dark:border-neutral-700 right-0 dark:divide-neutral-700 absolute bottom-[100%]",role:"menu","aria-orientation":"vertical","aria-labelledby":"dropdown-button"},Yo=["onClick"],ea=e.defineComponent({__name:"vs-pagination",props:{pageSize:{},page:{},total:{},view:{default:"button"},pageSizes:{default:()=>[10,20,30]},showPageSizes:{type:Boolean,default:!0},pageRange:{default:7},size:{default:7},color:{default:"teal"}},emits:["update:page","pageChange","pageSizeChange"],setup(r,{emit:t}){const s=r,n=t,o=e.ref(s.page),l=e.computed(()=>Math.ceil(s.total/s.pageSize)),a=e.computed(()=>{const x=Math.floor(s.pageRange/2);let $=o.value-x,f=o.value+x;$<1&&(f+=1-$,$=1),f>l.value&&($-=f-l.value,f=l.value),$=Math.max(1,$);const u=[];for(let w=$;w<=f;w+=1)u.push(w);return u}),i=e.computed(()=>{const x=a.value,$=l.value;if($<=1)return x.map(V=>({type:"page",value:V}));const f=x.length>0&&x[0]>1,u=x.length>0&&x[x.length-1]<$,w=[];return f&&(w.push({type:"page",value:1}),w.push({type:"ellipsis"})),x.forEach(V=>w.push({type:"page",value:V})),u&&(w.push({type:"ellipsis"}),w.push({type:"page",value:$})),w}),c=x=>{o.value=x,n("update:page",x),n("pageChange",x)},d=()=>{o.value>1&&c(o.value-1)},p=()=>{o.value<l.value&&c(o.value+1)};e.watch(()=>s.page,x=>{o.value=x});const h=e.ref(s.pageSize),b=e.ref(!1),g=e.ref(null);e.watch(()=>s.pageSize,x=>{h.value=x});const m=(x=h.value)=>{h.value=x,b.value=!1,o.value=1,n("update:page",o.value),n("pageSizeChange",h.value)},k=x=>{if(!b.value)return;const $=x.target;g.value&&$&&!g.value.contains($)&&(b.value=!1)};return e.onMounted(()=>{document.addEventListener("click",k)}),e.onBeforeUnmount(()=>{document.removeEventListener("click",k)}),(x,$)=>(e.openBlock(),e.createElementBlock("div",qo,[e.createElementVNode("ul",vo,[e.createElementVNode("li",null,[e.createElementVNode("button",{class:e.normalizeClass(["grid size-7 cursor-pointer place-content-center rounded border border-gray-200 transition-colors hover:bg-gray-50 rtl:rotate-180",{"opacity-50 pointer-events-none":o.value===1}]),"aria-label":"Previous page",onClick:d},[e.createVNode(So)],2)]),x.view==="button"?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(i.value,(f,u)=>(e.openBlock(),e.createElementBlock(e.Fragment,{key:f.type==="page"?f.value:`ellipsis-${u}`},[f.type==="page"?(e.openBlock(),e.createElementBlock("li",{key:0,class:e.normalizeClass([[`size-${s.size} text-sm/${s.size} px-1.5`,f.value===o.value&&x.color?`bg-[${x.color}]`:"",f.value===o.value?`block rounded border border-${x.color}-600 text-center font-medium text-white`:"block rounded border border-gray-200 text-center font-medium transition-colors hover:bg-gray-50"],"cursor-pointer"]),onClick:w=>c(f.value)},e.toDisplayString(f.value),11,Uo)):(e.openBlock(),e.createElementBlock("li",Ho," … "))],64))),128)):x.view==="input"?(e.openBlock(),e.createElementBlock("li",Go,[e.createElementVNode("label",Zo,[$[2]||($[2]=e.createElementVNode("span",{class:"sr-only"}," Page ",-1)),e.createElementVNode("input",{type:"number",id:"Page",value:o.value,min:"1",max:l.value,onInput:$[0]||($[0]=f=>c(Number(f))),class:"pagination-input block h-8 w-16 rounded border border-gray-300 px-3 py-2 text-base leading-6 shadow-sm focus:border-indigo-500 focus:ring-indigo-500"},null,40,Qo)])])):x.view==="xy"?(e.openBlock(),e.createElementBlock("li",Xo,e.toDisplayString(o.value)+"/"+e.toDisplayString(l.value),1)):e.createCommentVNode("",!0),e.createElementVNode("li",null,[e.createElementVNode("button",{onClick:p,class:e.normalizeClass(["grid size-7 cursor-pointer place-content-center rounded border border-gray-200 transition-colors hover:bg-gray-50 rtl:rotate-180",{"opacity-50 pointer-events-none":o.value===l.value}]),"aria-label":"Next page"},[e.createVNode(Io)],2)])]),x.showPageSizes?(e.openBlock(),e.createElementBlock("div",Jo,[e.createElementVNode("div",{class:"relative",ref_key:"dropdownRef",ref:g},[e.withDirectives(e.createElementVNode("div",Ko,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(x.pageSizes,f=>(e.openBlock(),e.createElementBlock("button",{type:"button",key:f,onClick:u=>m(f),class:"flex w-full items-center gap-x-3.5 rounded-lg px-3 py-2 text-sm text-gray-800 hover:bg-gray-100 focus:bg-gray-100 focus:outline-none dark:text-neutral-400 dark:hover:bg-neutral-700 dark:hover:text-neutral-300 dark:focus:bg-neutral-700"},[e.createTextVNode(e.toDisplayString(f)+" ",1),h.value===f?(e.openBlock(),e.createBlock(Wo,{key:0})):e.createCommentVNode("",!0)],8,Yo))),128))],512),[[e.vShow,b.value]]),e.createElementVNode("button",{type:"button",class:"inline-flex min-w-[32px] text-sm/7 items-center gap-x-1 rounded-md border border-gray-200 px-1.5 h-[1.75rem] text-base text-gray-800 shadow-sm hover:bg-gray-50 focus:bg-gray-100 focus:outline-none disabled:pointer-events-none disabled:opacity-50 dark:border-neutral-700 dark:text-white dark:hover:bg-neutral-700 dark:focus:bg-neutral-700","aria-haspopup":"menu","aria-expanded":"false","aria-label":"Dropdown",onClick:$[1]||($[1]=f=>b.value=!b.value)},[e.createTextVNode(e.toDisplayString(h.value)+" ",1),e.createVNode(Ro)])],512)])):e.createCommentVNode("",!0)]))}}),ta=re(ea,[["__scopeId","data-v-36d0267f"]]);e.reactive({visible:!0});const ra={class:"relative group h-full"},sa={class:"flex items-start gap-3 flex-1 min-h-0"},na={class:"p-2 bg-blue-50 rounded-lg group-hover:bg-blue-100 transition-colors shrink-0"},oa={class:"flex-1 min-w-0 flex flex-col min-h-0"},aa={class:"font-semibold text-gray-900 mb-1 truncate"},la={key:0,class:"text-sm text-gray-600 mb-2 line-clamp-2 min-h-10"},ia={key:1,class:"text-sm text-gray-600 mb-2 line-clamp-2 min-h-10 invisible","aria-hidden":"true"},ca={key:2,class:"text-sm text-gray-400 mt-1 shrink-0"},da=M({__name:"dashboard-card",props:{title:String,description:String,modified:String,name:String,widgetCount:Number,reserveLines:Number,dashboardRouteName:String,onOpenEditor:Function},setup(r){const t=r,s=U.useRouter(),n=e.ref(!1);function o(){t.dashboardRouteName&&(s.hasRoute(q.EditorDashboard)?s.push({name:q.EditorDashboard,params:{dashboardId:t.dashboardRouteName}}):t.onOpenEditor?t.onOpenEditor(t.dashboardRouteName):s.push({path:"/editor",query:{dashboard:t.dashboardRouteName}}))}function l(a){a.target.closest(".dashboard-card-menu")||(n.value=!1)}return e.onMounted(()=>document.addEventListener("click",l)),e.onUnmounted(()=>document.removeEventListener("click",l)),(a,i)=>(e.openBlock(),e.createElementBlock("div",ra,[e.createElementVNode("button",{type:"button",class:"w-full h-full bg-white border border-gray-200 rounded-lg p-6 hover:shadow-md hover:border-blue-200 transition-all text-left animate-fade-in flex flex-col",onClick:o},[e.createElementVNode("div",sa,[e.createElementVNode("div",na,[e.createVNode(e.unref(wr),{size:24,class:"w-5 h-5 text-blue-600"})]),e.createElementVNode("div",oa,[e.createElementVNode("h3",aa,e.toDisplayString(r.title),1),r.description?(e.openBlock(),e.createElementBlock("p",la,e.toDisplayString(r.description),1)):(e.openBlock(),e.createElementBlock("p",ia," ")),r.widgetCount!=null?(e.openBlock(),e.createElementBlock("p",ca,e.toDisplayString(r.widgetCount)+" віджетів ",1)):e.createCommentVNode("",!0)])])])]))}},[["__scopeId","data-v-716ced89"]]),pa=[{type:"Text",key:"name",label:"Назва",validators:["required"],original:{type:"Text",ua:"Назва",col:8}},{type:"Text",key:"title",label:"Заголовок",validators:["required"],original:{type:"Text",ua:"Титул",col:8}},{type:"Text",key:"description",label:"Опис",original:{type:"Text",ua:"Назва",col:8}},{type:"Text",key:"words",label:"Ключові слова",original:{type:"Text",ua:"Назва",col:8}},{type:"Select",data:"pg.table_name",key:"table_name",validators:["required"],label:"Назва таблиці",original:{type:"select",ua:"Назва",col:8,data:"pg.table_name"}},{type:"Text",key:"db",label:"База даних",original:{type:"Text",ua:"Назва",col:8}},{type:"Text",key:"category",label:"Категорія",original:{type:"Text",ua:"Категорія",col:8}},{type:"Switcher",key:"public",label:"Публічний",original:{type:"Text",ua:"Назва",col:8}}];function ha(r){return!Array.isArray(r)||r.length===0?{}:r.reduce((t,s)=>{if(!s||s.key==null)return t;const{key:n,...o}=s;return t[n]=o,t},{})}const ua={class:"flex-1 bg-gray-50"},ma={class:"max-w-7xl mx-auto px-6 py-8"},fa={class:"mb-6"},ga={class:"flex items-center justify-between mb-6"},ba={class:"flex justify-end p-[20px] gap-[10px] border-t w-full"},ya={class:"flex items-center space-x-4"},xa={class:"flex-1 relative"},ka={class:"relative"},wa={class:"relative min-h-[280px]"},_a={key:0,class:"absolute inset-0 z-10 flex items-center justify-center rounded-xl bg-white/55 backdrop-blur-[2px]","aria-busy":"true","aria-live":"polite"},$a={class:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6"},Ea={class:"mt-[20px]"},Ba={key:2,class:"flex flex-col items-center justify-center py-20 text-center"},Va={class:"mt-1 text-sm text-gray-400"},Ca={class:"font-medium text-gray-500"},Bt=e.defineComponent({__name:"all-dashboards-page",props:{prefix:{}},setup(r){const t=e.defineAsyncComponent(()=>import("@opengis/form")),s=ha(pa),n=e.ref([]),o=e.ref([]),l=U.useRouter(),a=U.useRoute();function i(C){const B=Array.isArray(C)?C[0]:C,z=typeof B=="string"?parseInt(B,10):NaN;return!Number.isNaN(z)&&z>=1?z:1}function c(C){const B=Array.isArray(C)?C[0]:C;return typeof B=="string"?B:""}function d(C){const B=C.trim().toLowerCase();return B?B.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"):""}const p=e.inject("biSetDashboard",void 0),h=r,b=e.ref(null),g=e.ref(!1),m=e.ref({}),k=e.ref(""),x=e.ref("title-asc"),$=e.ref(21),f=e.ref(0),u=e.ref(1),w=e.ref(!1),V=e.computed(()=>{const C=x.value==="title-asc"?1:-1;return[...n.value].sort((B,z)=>C*B.title.localeCompare(z.title,"uk"))});async function _(){w.value=!0;try{const C=d(k.value),B=await A.get("/bi-dashboard",{params:{type:"db",page:u.value,limit:$.value,...C?{search:C}:{}}}),z=Array.isArray(B==null?void 0:B.rows)?B.rows:[];f.value=(B==null?void 0:B.filtered)||(B==null?void 0:B.total)||0,o.value=z,n.value=z.map(j=>({routeName:String(j.name??""),title:j.title??j.name??"Без назви",description:j.description??null,modified:"-",name:"-"}))}catch(C){console.error("Failed to load dashboards",C),o.value=[],n.value=[]}finally{w.value=!1}}async function y(){var B,z,j;const C=(z=(B=e.getCurrentInstance())==null?void 0:B.proxy)==null?void 0:z.$notify;try{const Y=(j=b.value)==null?void 0:j.validate();typeof Y=="function"&&await Y();const{name:ee,title:R,table_name:K}=m.value;if(!ee||!R||!K){C==null||C({type:"error",title:"Помилка!",message:"Заповніть усі обов'язкові поля"});return}await A.post("/bi-dashboard",m.value),g.value=!1,m.value={},C==null||C({type:"success",title:"Успішно!",message:"Дашборд створено успішно"}),l.hasRoute(q.EditorDashboard)?l.push({name:q.EditorDashboard,params:{dashboardId:ee}}):p?p(ee):await _()}catch{C==null||C({type:"error",title:"Помилка!",message:"При спробі створити дашборд виникла помилка"})}}let E=null;e.onMounted(()=>{xe(h.prefix||"/api"),u.value=i(a.query.page),k.value=c(a.query.search),_()}),e.watch(k,C=>{E&&clearTimeout(E),E=setTimeout(()=>{E=null;const B=C.trim(),z=c(a.query.search);if(B===z)return;const j={...a.query};B?j.search=B:delete j.search,delete j.page,l.replace({query:j})},300)}),e.watch(()=>[a.query.page,a.query.search],()=>{const C=i(a.query.page),B=c(a.query.search);u.value=C,k.value=B,_()});const N=e.ref(1),S=()=>{const C=window.innerWidth;N.value=C>=1024?3:C>=768?2:1};e.onMounted(()=>{S(),window.addEventListener("resize",S)}),e.onUnmounted(()=>{E&&clearTimeout(E),window.removeEventListener("resize",S)});const O=C=>C?C.trim().length>70?2:1:0,G=C=>{const B=N.value||1,j=Math.floor(C/B)*B,Y=j+B,ee=V.value.slice(j,Y);let R=0;for(const K of ee){const se=O(K.description??null);if(se>R&&(R=se),R===2)break}return R},Z=C=>{const B={...a.query};C===1?delete B.page:B.page=String(C),l.push({query:B})};return(C,B)=>(e.openBlock(),e.createElementBlock("div",ua,[e.createElementVNode("div",ma,[e.createElementVNode("div",fa,[e.createElementVNode("div",ga,[B[7]||(B[7]=e.createElementVNode("div",null,[e.createElementVNode("h1",{class:"text-3xl font-bold text-gray-900"},"Дашборди"),e.createElementVNode("p",{class:"mt-2 text-gray-600"}," Керуйте та переглядайте свої аналітичні дашборди ")],-1)),e.createElementVNode("button",{type:"button",class:"flex items-center gap-2 px-4 py-2.5 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors shadow-sm font-medium",onClick:B[0]||(B[0]=z=>g.value=!0)},[e.createVNode(e.unref(Qe),{size:24,class:"w-4 h-4"}),B[6]||(B[6]=e.createElementVNode("span",null,"Новий дашборд",-1))])]),e.createVNode(pe,{teleport:"#modal",visible:g.value,title:"Створити дашборд",onClose:B[3]||(B[3]=z=>g.value=!1)},{footer:e.withCtx(()=>[e.createElementVNode("div",ba,[e.createElementVNode("button",{type:"button",class:"py-2 px-3 inline-flex items-center gap-x-2 text-sm whitespace-nowrap text-black border border-gray-200 rounded-lg hover:bg-gray-100 duration-300",onClick:B[2]||(B[2]=z=>g.value=!1)}," Скасувати "),e.createElementVNode("button",{type:"button",class:"py-2 px-3 inline-flex items-center gap-x-2 text-[14px] font-[400] whitespace-nowrap text-white bg-blue-500 rounded-lg hover:bg-blue-700 duration-300",onClick:y}," Зберегти ")])]),default:e.withCtx(()=>[e.createVNode(e.unref(t),{ref_key:"createFormRef",ref:b,schema:e.unref(s),values:m.value,"onUpdate:values":B[1]||(B[1]=z=>m.value=z)},null,8,["schema","values"])]),_:1},8,["visible"]),e.createElementVNode("div",ya,[e.createElementVNode("div",xa,[e.createVNode(e.unref(Xe),{size:24,class:"absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400"}),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":B[4]||(B[4]=z=>k.value=z),type:"text",placeholder:"Пошук дашбордів...",class:"w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500"},null,512),[[e.vModelText,k.value]])]),e.createElementVNode("div",ka,[e.withDirectives(e.createElementVNode("select",{"onUpdate:modelValue":B[5]||(B[5]=z=>x.value=z),class:"appearance-none pl-3 pr-8 py-2 border border-gray-300 rounded-lg bg-white text-sm text-gray-700 cursor-pointer focus:outline-none focus:ring-2 focus:ring-blue-500"},[...B[8]||(B[8]=[e.createElementVNode("option",{value:"title-asc"},"Назва (А → Я)",-1),e.createElementVNode("option",{value:"title-desc"},"Назва (Я → А)",-1)])],512),[[e.vModelSelect,x.value]]),e.createVNode(e.unref(mr),{size:16,class:"absolute right-2.5 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-400 pointer-events-none"})])])]),e.createElementVNode("div",wa,[w.value?(e.openBlock(),e.createElementBlock("div",_a,[...B[9]||(B[9]=[e.createElementVNode("div",{class:"h-11 w-11 animate-spin rounded-full border-[3px] border-blue-100 border-t-blue-600 shadow-sm",role:"status"},null,-1)])])):e.createCommentVNode("",!0),V.value.length?(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",$a,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(V.value,(z,j)=>(e.openBlock(),e.createElementBlock("div",{key:z.routeName,class:"cursor-pointer h-full"},[e.createVNode(da,{title:z.title,description:z.description,modified:z.modified,name:z.name,reserveLines:G(j),"dashboard-route-name":z.routeName,"on-open-editor":e.unref(p)},null,8,["title","description","modified","name","reserveLines","dashboard-route-name","on-open-editor"])]))),128))]),e.createElementVNode("div",Ea,[e.createVNode(e.unref(ta),{total:f.value,showPageSizes:!1,page:u.value,pageSize:$.value,"onUpdate:page":Z,color:"#2563eb"},null,8,["total","page","pageSize"])])],64)):w.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Ba,[e.createVNode(e.unref(Xe),{size:48,class:"text-gray-300 mb-4"}),B[12]||(B[12]=e.createElementVNode("p",{class:"text-lg font-medium text-gray-500"},"Дашбордів не знайдено",-1)),e.createElementVNode("p",Va,[B[10]||(B[10]=e.createTextVNode(" За запитом «",-1)),e.createElementVNode("span",Ca,e.toDisplayString(k.value),1),B[11]||(B[11]=e.createTextVNode("» нічого не знайдено. Спробуйте змінити пошуковий запит. ",-1))])]))])])]))}}),Na=e.defineComponent({__name:"editor-root-page",props:{prefix:{default:"/api"}},setup(r){const t=r,s=e.computed(()=>t.prefix),n=U.useRouter(),o=U.useRoute(),l=e.computed(()=>n.hasRoute(q.EditorDashboard)),a=e.ref("");e.onMounted(()=>{var c;if(!l.value){const d=(c=o==null?void 0:o.query)==null?void 0:c.dashboard;d!=null&&typeof d=="string"&&(a.value=d.trim())}});const i=e.computed(()=>a.value.length>0);return e.provide("biSetDashboard",c=>{a.value=c||""}),e.provide("biClearDashboard",()=>{a.value=""}),e.provide("biSelectedDashboardId",e.readonly(a)),(c,d)=>{const p=e.resolveComponent("router-view");return l.value?(e.openBlock(),e.createBlock(p,{key:0})):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[i.value?(e.openBlock(),e.createBlock(Et,{key:`editor-${a.value}`,prefix:s.value,"dashboard-id":a.value,onBack:d[0]||(d[0]=h=>a.value="")},null,8,["prefix","dashboard-id"])):(e.openBlock(),e.createBlock(Bt,{key:0,prefix:s.value},null,8,["prefix"]))],64))}}});function J(r,t){const s=r&&typeof r=="object"&&"value"in r?r.value:r;if(s==null)return"";const n=Number(s);return Number.isNaN(n)?String(s):new Intl.NumberFormat("en",t??{notation:"compact"}).format(n)}function ye(r){if(!(r!=null&&r.includes("T")))return r??"";const[t,s,n]=r.split("T")[0].split("-");return`${n}.${s}.${t}`}function Da(r){return Intl.NumberFormat("en").format(r??0)}class Sa{static getTooltipOptions(t=!0){return{show:t,confine:!0,appendToBody:!1,axisPointer:{type:"cross",label:{backgroundColor:"#6a7985"}}}}}const za={show_label:!1,show_legend:!1,label:null,legend:{position:null},colors:null,color:null,title:null};function La(){const r="0123456789ABCDEF";let t="#";for(let s=0;s<6;s+=1)t+=r[Math.floor(Math.random()*16)];return t}function ae(r=za){var s,n,o;const t={label:{show:((s=r==null?void 0:r.label)==null?void 0:s.show)??(r==null?void 0:r.show_label)??!1,formatter:(r==null?void 0:r.formatter)??(l=>J(l)),...(r==null?void 0:r.label)||{}},legend:{...(r==null?void 0:r.legend)||{},[((n=r==null?void 0:r.legend)==null?void 0:n.position)||"bottom"]:"0",show:((o=r==null?void 0:r.legend)==null?void 0:o.show)??(r==null?void 0:r.show_legend)??!1},barWidth:"70%",grid:{borderColor:"#e5e7eb"},title:{...(r==null?void 0:r.title)||{}}};return(r!=null&&r.colors||r!=null&&r.color)&&(t.color=(r==null?void 0:r.colors)||(r==null?void 0:r.color)||null),t}function Vt(r){return{color:"#9ca3af",fontSize:10,fontFamily:"Inter, ui-sans-serif, system-ui",fontWeight:400,label:r==null?void 0:r.label,show:!0,formatter:(r==null?void 0:r.formatter)??(t=>J(t)),margin:(r==null?void 0:r.margin)??7,interval:(r==null?void 0:r.interval)??"auto",rotate:(r==null?void 0:r.rotate)??0}}const Ct=["#d3c7e6","#bedae3","#f8e9cb","#ff8c8c","#c5d8be","#ffc6c6","#ffc39a","#fff7c5","#d8ffc0","#d4f7ff"];class Ne{static getLabelOptions(t={}){return{show:(t==null?void 0:t.show_label)||(t==null?void 0:t.show)||!1,fontSize:"10",position:(t==null?void 0:t.position)||"inside",formatter:(t==null?void 0:t.formatter)||"{d}%",...t}}static getLegendOpions(t={}){return{...t,position:(t==null?void 0:t.position)||"bottom"}}}const le=typeof window<"u"?window.echarts:null,v={props:["source","style","widget","dashboard","title","currentWidget","widgetData","prefix","prefetchedData"],data(){return{sourceData:null,styleData:null,widgetName:"",dimensions:[],dashboardName:"",titleCharts:"",widgetInstance:null}},mounted(){window.addEventListener("resize",this.handleResize),window.addEventListener(`update-data-${this.widget}`,this.checkCustomEvent),window.addEventListener(`update-style-${this.widget}`,this.checkCustomStyleEvent)},unmounted(){window.removeEventListener(`update-data-${this.widget}`,this.checkCustomEvent),window.removeEventListener(`update-style-${this.widget}`,this.checkCustomStyleEvent)},watch:{sourceData:{async handler(){setTimeout(()=>{this==null||this.onChangedData()},0)}}},methods:{checkCustomStyleEvent(r){this.changeOptionsByName(r.chartId,r.options)},checkCustomEvent({filterUrl:r}){this.getDataFromURL(r)},handleResize(){this.widgetInstance&&this.widgetInstance.resize()},async getDataFromURL(r){try{const t=await A.get(r);this.applyResponse(t)}catch(t){const s={message:"Дані не знайдено",title:"Помилка!",type:"error",status:400,id:this.widgetName};(t==null?void 0:t.status)=="404"&&(s.status=404,s.message="Дані не знайдено"),(t==null?void 0:t.status)=="400"&&(s.message="Перевірте налаштування або зверніться до адміністратора"),(t==null?void 0:t.status)=="500"&&(s.message="Сталася помилка сервера"),this.$emit("update:widgetData",s)}},getValues(){return this.sourceData.map(r=>{var t;return parseFloat(r[(t=this.columns)==null?void 0:t[1]])})},formatDate(r){const t=new Date(r);if(isNaN(t))return r;const s=String(t.getDate()).padStart(2,"0"),o=["січня","лютого","березня","квітня","травня","червня","липня","серпня","вересня","жовтня","листопада","грудня"][t.getMonth()],l=t.getFullYear();return`${s} ${o} ${l}`},applyResponse(r){var t;this.sourceData=(r==null?void 0:r.source)||[],this.$emit("update:widgetData",r),this.dimensions=Object.keys(((t=this.sourceData)==null?void 0:t[0])||{}),this.titleCharts=this.style?this.style:(r==null?void 0:r.title)||"",this.styleData=(r==null?void 0:r.style)||{}},async getData(){var r;try{if(this.source)this.sourceData=[...this.source],this.styleData=this.style,this.titleCharts=this.title,this.dimensions=Object.keys(((r=this.sourceData)==null?void 0:r[0])||{});else if(this.prefetchedData)this.widgetName=this.widget,this.dashboardName=this.dashboard,this.applyResponse(this.prefetchedData);else{this.widgetName=this.widget,this.dashboardName=this.dashboard;const t=this.dashboardName?`${this.prefix||""}/bi-data?dashboard=${this.dashboardName}&widget=${this.widgetName}`:`${this.prefix||""}/bi-data?&widget=${this.widgetName}`;await this.getDataFromURL(t)}}catch(t){console.error(t)}},async initChart(r,t,s){var n,o,l,a,i,c,d,p,h;this.widgetInstance&&this.widgetInstance.clear();try{const b=this.$refs.chart,g=le==null?void 0:le.init(b);if(!g)return;const m={tooltip:{show:((o=(n=this.styleData)==null?void 0:n.tooltip)==null?void 0:o.show)!==!1,trigger:"axis",confine:!0,appendToBody:!1,axisPointer:{type:"shadow"},backgroundColor:"transparent",shadowColor:"transparent",padding:[0,0,0,0],borderWidth:0,position:(k,x,$,f,u)=>{const[w,V]=k,[_,y]=u.contentSize,[E,N]=u.viewSize;let S=w+14,O=V-y/2;return S+_>E&&(S=w-_-14),S<0&&(S=0),O+y>N&&(O=N-y),O<0&&(O=0),[S,O]},formatter:k=>{var y;const $=(y=k[0])==null?void 0:y.axisValue,f=$?this.formatDate($):"N/A",u=[...k].filter(E=>{var N;return parseFloat(E==null?void 0:E.data)||((N=E==null?void 0:E.data)==null?void 0:N.value)}).sort((E,N)=>{var G,Z;const S=parseFloat(((G=E==null?void 0:E.data)==null?void 0:G.value)??(E==null?void 0:E.data))||0;return(parseFloat(((Z=N==null?void 0:N.data)==null?void 0:Z.value)??(N==null?void 0:N.data))||0)-S}),w=u.slice(0,8),V=u.length-w.length;let _=`
|
|
192
192
|
<div style="background-color: rgba(255, 255, 255, 0.95)" class="border border-gray-200 text-gray-800 rounded-lg shadow-md dark:bg-neutral-800 dark:border-neutral-700 min-w-28">
|
|
193
193
|
<div class="font-semibold text-sm border-b border-solid border-gray-200 text-gray-800 rounded-t-lg dark:bg-neutral-800 dark:border-neutral-700 dark:text-neutral-200 px-2 py-1">
|
|
194
194
|
${f}
|
|
@@ -443,8 +443,8 @@ function Js(s, e) {
|
|
|
443
443
|
}
|
|
444
444
|
const ea = /* @__PURE__ */ se(Ks, [["render", Js]]), Bt = {
|
|
445
445
|
"bi-bar": Q(() => Promise.resolve().then(() => li)),
|
|
446
|
-
"bi-number": Q(() => import("./vs-number-
|
|
447
|
-
"bi-text": Q(() => import("./vs-text-
|
|
446
|
+
"bi-number": Q(() => import("./vs-number-CRdeu_TC.js")),
|
|
447
|
+
"bi-text": Q(() => import("./vs-text-B46_k-vY.js")),
|
|
448
448
|
"bi-listbar": Q(() => Promise.resolve().then(() => il)),
|
|
449
449
|
"bi-pie": Q(() => Promise.resolve().then(() => xi)),
|
|
450
450
|
"bi-donut": Q(() => Promise.resolve().then(() => hi)),
|
|
@@ -452,10 +452,10 @@ const ea = /* @__PURE__ */ se(Ks, [["render", Js]]), Bt = {
|
|
|
452
452
|
"bi-stat": Q(() => Promise.resolve().then(() => Oi)),
|
|
453
453
|
"bi-pivot": Q(() => Promise.resolve().then(() => _l)),
|
|
454
454
|
"bi-progress": Q(() => Promise.resolve().then(() => Yi)),
|
|
455
|
-
"bi-funnel": Q(() => import("./vs-funnel-bar-
|
|
456
|
-
"bi-map": Q(() => import("./vs-map-
|
|
457
|
-
"bi-cluster": Q(() => import("./vs-map-cluster-
|
|
458
|
-
"bi-table": Q(() => import("./vs-table-
|
|
455
|
+
"bi-funnel": Q(() => import("./vs-funnel-bar-C4T5wkBI.js")),
|
|
456
|
+
"bi-map": Q(() => import("./vs-map-Dv0Zxj3b.js")),
|
|
457
|
+
"bi-cluster": Q(() => import("./vs-map-cluster-BZoSRi6v.js")),
|
|
458
|
+
"bi-table": Q(() => import("./vs-table-BMs9Rxrh.js"))
|
|
459
459
|
};
|
|
460
460
|
let es = "/api";
|
|
461
461
|
function Ke(s) {
|
|
@@ -4811,7 +4811,7 @@ const Oo = { class: "flex-1 bg-gray-50" }, Po = { class: "max-w-7xl mx-auto px-6
|
|
|
4811
4811
|
const D = S.trim().toLowerCase();
|
|
4812
4812
|
return D ? D.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") : "";
|
|
4813
4813
|
}
|
|
4814
|
-
const p = Kt("biSetDashboard", void 0), f = s, w = T(null), x = T(!1), g = T({}), k = T(""), v = T("title-asc"), C = T(
|
|
4814
|
+
const p = Kt("biSetDashboard", void 0), f = s, w = T(null), x = T(!1), g = T({}), k = T(""), v = T("title-asc"), C = T(21), m = T(0), h = T(1), $ = T(!1), L = M(() => {
|
|
4815
4815
|
const S = v.value === "title-asc" ? 1 : -1;
|
|
4816
4816
|
return [...a.value].sort((D, N) => S * D.title.localeCompare(N.title, "uk"));
|
|
4817
4817
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as l, c as h, a as c, b as d, d as p } from "./import-file-
|
|
1
|
+
import { _ as l, c as h, a as c, b as d, d as p } from "./import-file-BPICIF0w.js";
|
|
2
2
|
import { createElementBlock as u, openBlock as m } from "vue";
|
|
3
3
|
const o = typeof window < "u" ? window.echarts : null, f = {
|
|
4
4
|
name: "VsFunnelBar",
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createBlock as b, openBlock as l, unref as L, mergeProps as v, createElementBlock as d, createElementVNode as c, withDirectives as F, toDisplayString as S, vShow as R, Fragment as P, renderList as V, normalizeClass as D, resolveComponent as A, createVNode as H } from "vue";
|
|
2
|
-
import { e as x, X as J, _ as w } from "./import-file-
|
|
2
|
+
import { e as x, X as J, _ as w } from "./import-file-BPICIF0w.js";
|
|
3
3
|
/**
|
|
4
4
|
* @license lucide-vue-next v0.577.0 - ISC
|
|
5
5
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as E, a as L, p as $, V as T, b as B, c as H, d as O, l as F, e as N } from "./vs-list-
|
|
2
|
-
import { _ as V, c as P } from "./import-file-
|
|
1
|
+
import { _ as E, a as L, p as $, V as T, b as B, c as H, d as O, l as F, e as N } from "./vs-list-DpQecJFZ.js";
|
|
2
|
+
import { _ as V, c as P } from "./import-file-BPICIF0w.js";
|
|
3
3
|
import { resolveComponent as u, createElementBlock as c, openBlock as i, Fragment as w, createElementVNode as r, createBlock as C, createCommentVNode as m, createVNode as x, Teleport as R, toDisplayString as g, renderList as S, normalizeStyle as k, normalizeClass as I } from "vue";
|
|
4
4
|
const A = {
|
|
5
5
|
components: { legendIcon: L, closeIcon: E },
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { _ as A, a as F, p as T, c as G, V as P, b as Z, d as q, e as D, l as K } from "./vs-list-
|
|
2
|
-
import { e as W, _ as H, V as J, c as Q, g as U, h as X, i as Y } from "./import-file-
|
|
1
|
+
import { _ as A, a as F, p as T, c as G, V as P, b as Z, d as q, e as D, l as K } from "./vs-list-DpQecJFZ.js";
|
|
2
|
+
import { e as W, _ as H, V as J, c as Q, g as U, h as X, i as Y } from "./import-file-BPICIF0w.js";
|
|
3
3
|
import { createElementBlock as g, createCommentVNode as S, openBlock as p, createElementVNode as l, normalizeClass as V, Fragment as R, renderList as N, toDisplayString as O, normalizeStyle as j, createBlock as z, unref as $, mergeProps as ee, resolveComponent as m, withDirectives as M, resolveDynamicComponent as te, createVNode as w, vShow as C } from "vue";
|
|
4
4
|
/**
|
|
5
5
|
* @license lucide-vue-next v0.577.0 - ISC
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as m, c as f, b as _, d as b } from "./import-file-
|
|
1
|
+
import { _ as m, c as f, b as _, d as b } from "./import-file-BPICIF0w.js";
|
|
2
2
|
import { createElementBlock as a, openBlock as r, createElementVNode as s, Fragment as n, renderList as c, toDisplayString as d } from "vue";
|
|
3
3
|
const x = {
|
|
4
4
|
name: "VsTable",
|