@devtable/dashboard 10.62.0 → 10.62.1
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/dashboard.es.js +4 -2
- package/dist/dashboard.umd.js +2 -2
- package/dist/stats.html +1 -1
- package/package.json +1 -1
package/dist/dashboard.es.js
CHANGED
|
@@ -1713,7 +1713,7 @@ class Ei {
|
|
|
1713
1713
|
}), this.instanceRegistry.clear(), this.factoryRegistry.clear();
|
|
1714
1714
|
}
|
|
1715
1715
|
}
|
|
1716
|
-
const sc = "10.62.
|
|
1716
|
+
const sc = "10.62.1", Rm = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1717
1717
|
__proto__: null,
|
|
1718
1718
|
version: sc
|
|
1719
1719
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
@@ -3502,7 +3502,9 @@ function ng(e, t) {
|
|
|
3502
3502
|
tooltip: ci
|
|
3503
3503
|
}
|
|
3504
3504
|
}, {
|
|
3505
|
-
|
|
3505
|
+
// Placeholder Outlier
|
|
3506
|
+
// using same name to be toggled from legend
|
|
3507
|
+
name: "Outlier",
|
|
3506
3508
|
type: "scatter",
|
|
3507
3509
|
symbolSize: 7,
|
|
3508
3510
|
itemStyle: {
|
package/dist/dashboard.umd.js
CHANGED
|
@@ -53,14 +53,14 @@ Check the top-level render call using <`+A+">.")}return D}}function Zc(w,D){{if(
|
|
|
53
53
|
</table>
|
|
54
54
|
`;function ps(e,t){const n=Object.keys(t),r=Object.values(t);try{return new Function(...n,`return \`${e}\`;`)(...r)}catch(i){throw n.length===0&&e.includes("$")?new Error("[formatSQL] insufficient payload"):i}}function hs(e,t){try{return ps(e,t)}catch(n){return console.error(n),n.message}}function Zu({sql:e,pre_process:t}){if(!t.trim())return e;try{return new Function(`return ${t}`)()({sql:e},pt)}catch(n){return console.error(n),e}}function Hu(e,t,n){if(!e.trim())return t;try{return new Function(`return ${e}`)()(t,pt,n)}catch(r){return console.error(r),t}}function ed(e){e=e||{};const t=Object.keys(e).sort(),n=[];for(let r=0;r<t.length;r++){const i=t[r];if(i!="authentication"&&e[i])n.push(t[r]+"="+(typeof e[i]=="object"?JSON.stringify(e[i]):e[i]));else{const o=Object.keys(e[i]).sort();for(let l=0;l<o.length;l++){const c=o[l];c!="sign"&&e[i][c]&&n.push(o[l]+"="+(typeof e[i][c]=="object"?JSON.stringify(e[i][c]):e[i][c]))}}}return n.sort().join("&")}function td(e,t){let n=ed(e);return n+="&key="+t,Ru.MD5(n).toString().toUpperCase()}class Yi{constructor(){this.type="default_api_client",this.baseURL="http://localhost:31200",this.app_id="",this.app_secret=""}getAuthentication(t){if(!this.app_id||!this.app_secret)return;const n=new Date().getTime().toString();return{app_id:this.app_id,nonce_str:n,sign:td({app_id:this.app_id,nonce_str:n,...t},this.app_secret)}}getRequest(t,n){return(r,i,o,l)=>{const c=this.buildHeader(o),u=this.buildAxiosConfig(t,r,i,o,c,n);return tt(u).then(d=>l?d:d.data).catch(d=>Promise.reject(d))}}get(t){return this.getRequest("GET",t)}post(t){return this.getRequest("POST",t)}put(t){return this.getRequest("PUT",t)}buildAxiosConfig(t,n,r,i,o,l){const c={baseURL:this.baseURL,method:t,url:n,params:t==="GET"?r:i.params,headers:o,signal:l};return["POST","PUT"].includes(t)&&(c.data=i.string?JSON.stringify(r):r,c.data.authentication=this.getAuthentication(c.data)),c}buildHeader(t){const n=window.localStorage.getItem("token");return{"X-Requested-With":"XMLHttpRequest","Content-Type":t.string?"application/x-www-form-urlencoded":"application/json",authorization:n?`bearer ${n}`:"",...t.headers}}}class nd{constructor(t){this.implementation=t}getRequest(t,n){return this.implementation.getRequest(t,n)}get(t){return this.getRequest("GET",t)}post(t){return this.getRequest("POST",t)}put(t){return this.getRequest("PUT",t)}}class Xi extends Yi{constructor(){super(...arguments);P(this,"makeQueryENV",null)}query(n){return async(r,i={})=>{var o;return r.env||(r.env=((o=this.makeQueryENV)==null?void 0:o.call(this))??{error:"failed to run makeQueryENV"}),this.post(n)("/query",r,i)}}httpDataSourceQuery(n){return async(r,i={})=>{var o;return r.env||(r.env=((o=this.makeQueryENV)==null?void 0:o.call(this))??{error:"failed to run makeQueryENV"}),this.getRequest("POST",n)("/query",r,i,!0)}}structure(n){return async(r,i={})=>this.post(n)("/query/structure",r,i)}}class Ji{constructor(t){this.implementation=t}query(t){return this.implementation.query(t)}httpDataSourceQuery(t){return this.implementation.httpDataSourceQuery(t)}structure(t){return this.implementation.structure(t)}getRequest(t,n){return this.implementation.getRequest(t,n)}get(t){return this.getRequest("GET",t)}post(t){return this.getRequest("POST",t)}put(t){return this.getRequest("PUT",t)}}const It=new Xi;function xs(e){It.baseURL!==e.apiBaseURL&&(It.baseURL=e.apiBaseURL),e.app_id&&(It.app_id=e.app_id),e.app_secret&&(It.app_secret=e.app_secret),e.makeQueryENV&&(It.makeQueryENV=e.makeQueryENV)}const Zi=new Ji(It),Je=Zi,Qt=f.forwardRef(function({value:t,onChange:n,...r},i){return s.jsx(a.TextInput,{ref:i,value:t,onChange:n,...r})});function z(e){const[t,n]=e.split(".");return{queryID:t,columnKey:n}}function sd(e){return e.includes(".")?z(e):{queryID:"",columnKey:e}}function st(e,t){var i;const{queryID:n,columnKey:r}=z(t);return n?r?((i=e[n])==null?void 0:i.map(o=>o[r]))??[]:e[n]:[]}function Ut(e,t){const{queryID:n}=z(t);return n?e[n]:[]}function rd(e){return Object.values(e)[0]}function hn(e,t){const{queryID:n,columnKey:r}=z(t);return e[r]}const Hi=["function aggregation({ queryData }, utils) {",' return "Aggregation Result";',"}"].join(`
|
|
55
55
|
`),Mt={type:"none",config:{},fallback:"0"};function id(e){const t=Array.from(e).sort((r,i)=>r-i),n=Math.floor(t.length/2);return t.length%2===0?(t[n-1]+t[n])/2:t[n]}function ad(e,t){switch(t.type){case"sum":return y.sum(e);case"mean":return y.mean(e);case"median":return id(e);case"max":return y.max(e);case"min":return y.min(e);case"quantile":return Ft.quantile(e,t.config.p);case"CV":const n=pn.std(...e),r=pn.mean(...e);return r?n/r:Number.NaN;case"std":return pn.std(...e);default:return e}}function fs(e,t){const n=e.map(Number),r=ad(n,t);return typeof r=="number"?Number.isFinite(r)?r:t.fallback:r??t.fallback}function od(e,t,n){try{const r=Ut(e,t);return new Function(`return ${n.config.func}`)()({queryData:r},pt)}catch(r){return console.error(r),r.message}}function xn(e,t,n){try{return n.type==="custom"?od(e,t,n):fs(st(e,t),n)}catch(r){return console.error(r),null}}class ld{constructor({valueRange:t,colorRange:n}){P(this,"mapper");this.mapper=mt.interpolate(t,n)}getColor(t){return this.mapper(t)}}const be={mantissa:0,output:"number",trimMantissa:!1,average:!1,absolute:!1};function W(e,{absolute:t,...n}){if(e===null)return"";try{let r=os(e).value();return t&&(r=Math.abs(r)),os(r).format(n)}catch(r){return console.error(r),""}}function cd(e){return e===null?"null":e===void 0?"undefined":Array.isArray(e)?`Array(${e.length})`:e.toString()}function rt({data_field:e,aggregation:t},n){return xn(n,e,t)}function Le({formatter:e,aggregation:t},n){if(typeof n!="string"&&typeof n!="number")return cd(n);if(t.type==="custom")return n;try{return W(n,e)}catch(r){return console.error(r),n}}function ud(e,t){if(e.type==="static")return e.staticColor;if(e.type==="continuous")try{if(typeof t!="number")throw new Error(`[getColorByColorConf] Invalid type of aggregated value: ${t}`);return new ld(e).getColor(t)}catch(n){return console.error(n),"black"}return"black"}function dd(e,t){const{color:n,data_field:r,aggregation:i,size:o,weight:l}=e,c=xn(t,r,i),u=Le(e,c);return s.jsx(a.Text,{sx:{fontSize:o,display:"inline"},color:ud(n,c),weight:l,children:u})}function pd(e,t){const n={};return e.forEach(r=>{const i=r.name;n[i]=dd(r,t)}),n}function hd(e){return e.split(" ").map((t,n)=>s.jsxs(f.Fragment,{children:[t," "]},n))}function xd(e){const n=e.replaceAll("<br />","<br/>").replaceAll(`
|
|
56
|
-
`,"<br/>").split("<br/>");return n.map((i,o)=>{const l=[hd(i)];return o!==n.length-1&&l.push(s.jsx("br",{},`br-${o}`)),l}).flat().filter(i=>i!==void 0)}function gs(e){return xd(e)}function Kt(e,t,n){const r=pd(t,n),i=/^\{(.+)\}(.*)$/;return e.split("$").map((o,l)=>{const c=i.exec(o);if(!c)return gs(o);const u=r[c[1]];if(!u)return gs(o);const d=c[2]??"";return s.jsxs(f.Fragment,{children:[u,gs(d)]},`${o}-${l}`)})}function fd(e,t){const{data_field:n,aggregation:r}=e,i=xn(t,n,r);return Le(e,i)}function ea(e,t){const n={};return e.forEach(r=>{n[r.name]=fd(r,t)}),n}function fn(e,t,n){const r=ea(t,n),i=/^\{(.+)\}(.*)$/;return e.split("$").map(o=>{const l=i.exec(o);if(!l)return o;const c=r[l[1]];if(!c)return o;const u=l[2]??"";return`${c}${u}`}).join("")}const ms={grid:{axis:"#97999D",scope:"rgba(47,140,192,0.1)",boundary:"#789AB4",reference:"#CFCFD8"},graphics:{compared:{blueDark:"#3E7CAB",blue:"#6398C7",blueLight:"#7CB0DF",blue10:"#6398C71a",redDark:"#AF5F6B",red:"#CD7C88",redLight:"#E794A0",red10:"#CD7C881a"},gradient:{distributed:"linear-gradient(90deg, #1babe6 0%, #2fc8c8 28.63%, #98d44b 48.86%, #ffd057 67.53%, #f5ae53 80.6%, #e76441 91.18%, #b90000 100%)",protrude:"linear-gradient(180deg, #ec73734d 0%, #ec737300 100%)"},level:{lv0:"#6398C7",lv1:"#61B5BF",lv2:"#54D4BB",lv3:"#F5D277",lv4:"#E8BB7F",lv5:"#DB9E84",lv6:"#CB8089"},depth:{dp0:"#FFF7F8",dp1:"#FFE1E1",dp2:"#FDBCBC",dp3:"#F39494",dp4:"#FA4242",dp5:"#E21212"},multiple:{c1:"#66B4DB",c2:"#E46464",c3:"#EEBA00",c4:"#33A678",c5:"#9D88CB",c6:"#939943",c7:"#E49792",c8:"#09A2B8",c9:"#AF5F6B",c10:"#6CA157",c11:"#3E7CAB",c12:"#6398C7",c13:"#E692BA",c14:"#97B566",c15:"#8CACE2",c16:"#CA79AC",c17:"#6DBC80",c18:"#B08F4B",c19:"#39BFA2",c20:"#826BAF"}}};function gd(){K.registerTheme("merico-light",{color:Object.values(ms.graphics.multiple),visualMap:{color:Object.values(ms.graphics.depth).reverse()},axes:[{type:"all",name:"通用坐标轴",axisLineColor:"#97999D",axisTickColor:"#97999D",axisLabelShow:!0,axisLabelColor:"#818388",splitLineShow:!0,splitLineColor:["#E0E6F1"]}]})}function ta(){gd()}function*md(e){const t=ms.graphics[e];if(!t)throw new Error("Invalid palette key provided");const n=Object.values(t);let r=0;for(;;)yield n[r%n.length],r++}function na(){return{filters:{},context:{}}}function ys(e){const t=na();if(!e)return na();const{filters:n=t.filters,context:r=t.context}=e;return{filters:n,context:r}}class Se extends f.Component{constructor(t){super(t),this.state={error:null}}componentDidCatch(t){this.setState({error:t})}render(){var t;if(this.state.error){const n=()=>{this.setState({error:null})};return s.jsxs(a.Box,{children:[s.jsx(a.Text,{size:"xs",children:(t=this.state.error)==null?void 0:t.message}),s.jsx(a.Button,{variant:"subtle",size:"xs",mx:"auto",compact:!0,sx:{display:"block"},onClick:n,children:"Retry"})]})}return this.props.children}}function yd(e,t){return new Function(`return ${e}`)()(t,pt)}function bd(e,t,n){return yd(e,{context:t,filters:n})}function jd(e,t){try{return new Function(`return ${e.config.processing.pre}`)()(t,pt)}catch(n){return console.error(n),t}}function vd(e,t){return new Function(`return ${e.config.processing.post}`)()(t,pt)}function wd(e,t,n){return e?new Function(`return ${e}`)()(t,pt,n):t}const gn=e=>y.cloneDeepWith(e,(t,n)=>{if(n!==void 0&&t)return R.toJS(t)}),mn={sqlSnippet:new RegExp("(?<=sql_snippets\\.)([^\\?}.]+)","gm"),context:new RegExp("(?<=context\\.)([^\\?}.]+)","gm"),filter:new RegExp("(?<=filters\\.)([^\\?}.]+)","gm")};function Cd(e,t){const n=Di.decode(t);n!==e&&(console.error("Inconsistent sql"),console.groupCollapsed("Inconsistent sql"),console.table({before:e,after:t,v:n}),console.groupEnd())}async function Sd({query:e,name:t,payload:n,additionals:r},i){if(!e.sql)return[];const{type:o,key:l,sql:c,pre_process:u,post_process:d}=e,p=ps(c,n),h=Zu({sql:p,pre_process:u}),x=Di.encode(h);Cd(h,x);let m=await Je.query(i)({type:o,key:l,query:x,...r},{params:{name:t}});return m=Hu(d,m,ys(n)),m}async function _d({type:e,key:t,configString:n,name:r,additionals:i},o){try{return await Je.httpDataSourceQuery(o)({type:e,key:t,query:n,...i},{params:{name:r}})}catch(l){if(tt.isCancel(l))throw l;return console.error(l),l}}async function bs(){try{return(await Je.post()("/datasource/list",{filter:{},sort:[{field:"create_time",order:"ASC"}],pagination:{page:1,pagesize:100}},{})).data}catch(e){return console.error(e),[]}}async function sa(){try{return(await Je.post()("/sql_snippet/list",{filter:{},sort:[{field:"id",order:"ASC"}],pagination:{page:1,pagesize:1e3}},{})).data}catch(e){return console.error(e),[]}}class ra{constructor(t){P(this,"rootRef");this.rootRef=R.observable({current:t})}async deleteItem(t){R.runInAction(()=>{y.unset(this.rootRef.current,[t])})}getItem(t){const n=this.getValueFromRoot(t);return Promise.resolve(n)}getValueFromRoot(t){return t===null?R.toJS(this.rootRef.current):y.get(this.rootRef.current,[t])}setItem(t,n){if(t===null)if(y.isObject(n))R.runInAction(()=>{this.rootRef.current=n});else throw new Error("Cannot set root value to non-object");else R.runInAction(()=>{y.set(this.rootRef.current,[t],n)});return Promise.resolve(this.getItem(t))}watchItem(t,n,r){return R.reaction(()=>this.getValueFromRoot(t),(i,o)=>{n(i,o)},{requiresObservable:!0,fireImmediately:y.get(r,"fireImmediately",!1)})}}class kd{constructor(){P(this,"channels",new Map);P(this,"globalChannel",new Ii)}getChannel(t){const n=this.channels.get(t);if(n)return n;const r=new Ii;return this.channels.set(t,r),r}}class Td{constructor(t){P(this,"instances",new Map);this.pluginManager=t}get availableVizList(){return this.pluginManager.installedPlugins.flatMap(t=>t.manifest.viz)}resolveComponent(t){return this.pluginManager.factory.viz(t)}getOrCreateInstance(t){const n=this.instances.get(t.id);if(n)return n;const r={id:t.id,name:t.viz.type,type:t.viz.type,messageChannels:new kd,instanceData:new ra(t.viz.conf)};return this.instances.set(t.id,r),r}}function ia(e,t,n,r){return{vizManager:n,locale:"zh",msgChannels:e.messageChannels,instanceData:e.instanceData,pluginData:new ra({}),colorPalette:{getColor(){return()=>""}},data:t,variables:r}}const Dd=e=>{const{panel:t,vizManager:n,data:r,variables:i}=e,o=n.resolveComponent(t.viz.type),l=n.getOrCreateInstance(t),c={...ia(l,r,n,i),viewport:{width:t.layout.w,height:t.layout.h}},u=o.viewRender;return s.jsx(u,{context:c,instance:l,...y.omit(e,["panel","vizManager","data"])})},Id=e=>{const{vizManager:t,panel:n,data:r,variables:i}=e,o=t.resolveComponent(n.viz.type),l=t.getOrCreateInstance(n),c={...ia(l,r,t,i)},u=o.configRender;return s.jsx(u,{context:c,instance:l,...y.omit(e,["panel","vizManager","data"])})},aa=(e,t)=>{const n=nt.bezier(e),r=nt.bezier(t);return function(i){return i<50?n(i*2/100).hex():r((i-50)*2/100).hex()}},yn=e=>{const t=nt.bezier(e);return function(n){return t(n/100).hex()}},Md={type:"interpolation",displayName:"Red / Green",getColor:aa(["darkred","deeppink","lightyellow"],["lightyellow","lightgreen","teal"]),name:"red-green",category:"diverging"},zd={type:"interpolation",displayName:"Yellow / Blue",getColor:aa(["#8f531d","#ffd347","#e3efe3"],["#eefaee","#4ecbbf","#003f94"]),name:"yellow-blue",category:"diverging"},Ad={type:"interpolation",displayName:"Red",getColor:yn(["#fff7f1","darkred"]),name:"red",category:"sequential"},Ed={type:"interpolation",displayName:"Green",getColor:yn(["#f0ffed","darkgreen"]),name:"green",category:"sequential"},Pd={type:"interpolation",displayName:"Blue",getColor:yn(["#f9fcff","#48b3e9","darkblue"]),name:"blue",category:"sequential"},Ld={type:"interpolation",displayName:"Orange",getColor:yn(["#fff7f1","darkorange","#b60000"]),name:"orange",category:"sequential"};class Od{constructor(t){P(this,"symbol");this.symbol=Symbol(t)}}function it(e){return new Od(e)}class js{constructor(){P(this,"parent");P(this,"factoryRegistry",new Map);P(this,"instanceRegistry",new Map)}createScoped(){const t=new js;return t.parent=this,t}getRequired(t){return this.get(t)}get(t){if(this.instanceRegistry.has(t.symbol))return this.instanceRegistry.get(t.symbol);const n=this.factoryRegistry.get(t.symbol);if(n){const r=n(this);return this.instanceRegistry.set(t.symbol,r),r}if(this.parent)return this.parent.get(t)}provideFactory(t,n){return this.factoryRegistry.has(t.symbol)?console.warn(`Token ${t.symbol.toString()} is already registered`):this.factoryRegistry.set(t.symbol,n),this}provideValue(t,n){return this.factoryRegistry.has(t.symbol)?console.warn(`Token ${t.symbol.toString()} is already registered`):this.factoryRegistry.set(t.symbol,()=>n),this}dispose(){this.instanceRegistry.forEach(t=>{const n=y.get(t,"dispose");y.isFunction(n)&&n.bind(t)()}),this.instanceRegistry.clear(),this.factoryRegistry.clear()}}const oa="10.62.0",Bd=Object.freeze(Object.defineProperty({__proto__:null,version:oa},Symbol.toStringTag,{value:"Module"}));class $d{constructor(t){P(this,"staticColors",new Map);P(this,"interpolations",new Map);t.installedPlugins.forEach(n=>{n.manifest.color.forEach(r=>{this.register(r)})})}getStaticColors(){return Array.from(this.staticColors.values())}register(t){const n=this.encodeColor(t);t.type==="single"?(this.staticColors.has(n)&&console.warn(`the color '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`),this.staticColors.set(n,t)):t.type==="interpolation"&&(this.interpolations.has(n)&&console.warn(`the interpolation '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`,`the interpolation '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`),this.interpolations.set(n,t))}decodeStaticColor(t){return this.staticColors.get(t)}encodeColor(t){return`\${${t.category}}.{${t.name}}`}decodeInterpolation(t){return this.interpolations.get(t)}getColorInterpolations(){return Array.from(this.interpolations.values())}}class Vd{constructor(){P(this,"plugins",new Map);P(this,"vizComponents",new Map);P(this,"factory",{viz:t=>{const n=this.vizComponents.get(t);if(n)return n;throw new Error(`Viz Component (${t}) not found`)}})}install(t){if(this.plugins.has(t.id))throw new Error(`Plugin (${t.id}) has been installed before`);this.plugins.set(t.id,t);for(const n of t.manifest.viz){if(this.vizComponents.has(n.name))throw new Error(`Viz Component (${n.name}) has been installed before`);this.vizComponents.set(n.name,n)}}get installedPlugins(){return Array.from(this.plugins.values())}}class Nd{constructor(){P(this,"migrations",[])}version(t,n){return this.migrations.push({version:t,handler:n}),this}run(t,n,r){var l;if(t.from===t.to)return n;if(t.from>t.to)throw new Error(`Can not downgrade from version '${t.from}' to (${t.to})`);const i=this.migrations.filter(c=>c.version>t.from&&c.version<=t.to),o=y.orderBy(i,"version","asc");if(((l=y.last(o))==null?void 0:l.version)!==t.to)throw new Error(`Migration to version ${t.to} not found`);return o.reduce((c,u)=>u.handler(c,r),n)}}class ie extends Nd{constructor(){super(),this.configVersions()}version(t,n){return super.version(t,(r,i)=>({version:t,...n(r,i)}))}async migrate({configData:t,panelModel:n}){const r=await t.getItem(null),i=y.get(r,"version",0),o=this.run({from:i,to:this.VERSION},r,{panelModel:n});await t.setItem(null,o)}async needMigration({configData:t}){const n=await t.getItem(null);return y.get(n,"version",0)<this.VERSION}}const $=(e,t)=>{const[n,{setFalse:r}]=V.useBoolean(!0),[i,o]=f.useState();f.useEffect(()=>(e.getItem(t).then(c=>{o(c),r()}),e.watchItem(t,c=>{o(c)})));const l=f.useCallback(async c=>{await e.setItem(t,c),o(c)},[e,t]);return{loading:n,value:i,set:l}},De={top:16,right:16,bottom:16,left:16},Qe=e=>Math.max(0,e-De.left-De.right),Ue=e=>Math.max(0,e-De.top-De.bottom),Yt=(e,t)=>({width:Qe(e),height:Ue(t)}),Ie=({width:e,height:t,children:n})=>s.jsx(a.Box,{pt:De.top,pr:De.right,pb:De.bottom,pl:De.left,sx:{width:e,height:t,overflow:"hidden",position:"relative"},children:n}),vs={x_axis_data_key:"",y_axis_data_key:"",z_axis_data_key:"",xAxis3D:{type:"value",name:"X Axis Name"},yAxis3D:{type:"value",name:"Y Axis Name"},zAxis3D:{type:"value",name:"Z Axis Name"}};K.use([O.GridComponent,O.VisualMapComponent,O.LegendComponent,O.TooltipComponent,Ce.CanvasRenderer]);function qd({context:e}){const{value:t}=$(e.instanceData,"config"),n=e.data,{width:r,height:i}=e.viewport,{x_axis_data_key:o,y_axis_data_key:l,z_axis_data_key:c,xAxis3D:u,yAxis3D:d,zAxis3D:p}=y.defaults({},t,vs),h=f.useMemo(()=>Ut(n,o),[n,o]),{x,y:m,z:j}=f.useMemo(()=>({x:z(o),y:z(l),z:z(c)}),[o,l,c]),{min:C,max:T}=f.useMemo(()=>{const E=y.minBy(h,H=>H[j.columnKey]),F=y.maxBy(h,H=>H[j.columnKey]);return{min:y.get(E,j.columnKey),max:y.get(F,j.columnKey)}},[h,j]),M={tooltip:{},backgroundColor:"#fff",visualMap:{show:!0,dimension:2,min:C,max:T,inRange:{color:["#313695","#4575b4","#74add1","#abd9e9","#e0f3f8","#ffffbf","#fee090","#fdae61","#f46d43","#d73027","#a50026"]}},xAxis3D:u,yAxis3D:d,zAxis3D:p,grid3D:{viewControl:{projection:"orthographic",autoRotate:!1},light:{main:{shadow:!0,quality:"ultra",intensity:1.5}}},series:[{type:"bar3D",wireframe:{},data:h.map(E=>[E[x.columnKey],E[m.columnKey],E[j.columnKey]])}]};return t?s.jsx(Ie,{width:r,height:i,children:s.jsx(we,{echarts:K,option:M,style:Yt(r,i),notMerge:!0,theme:"merico-light"})}):null}const la=f.createContext(null),ws=la.Provider;function Cs(){const e=f.useContext(la);if(!e)throw new Error("Please use DashboardModelContextProvider");return e}const Y=()=>Cs(),Ss=()=>Cs(),ca=f.createContext({searchButtonProps:{}}),_s=ca.Provider;function ua(){return f.useContext(ca)}const da=f.createContext(null),ks=da.Provider;function pa(){const e=f.useContext(da);if(!e)throw new Error("Please use ContentModelContextProvider");return e}const X=()=>pa(),ce=()=>pa(),Fd={inEditMode:!1},bn=f.createContext(Fd),ha=f.createContext({panel:null,data:{},loading:!1,errors:[],downloadPanelScreenshot:()=>{}}),Ts=ha.Provider;function xa(){const e=f.useContext(ha);if(!e.panel)throw new Error("Please use PanelContextProvider");return e}const ht=()=>xa(),Oe=()=>xa(),Gd={fullScreenPanelID:"",setFullScreenPanelID:y.noop},Ds=f.createContext(Gd);function fa(){const e=f.useContext(Ds);if(!e)throw new Error("Please use FullScreenPanelContext.Provider");return e}const B=S.observer(f.forwardRef(({label:e,required:t,value:n,onChange:r,clearable:i=!1,sx:o,...l},c)=>{const{panel:u}=Oe(),d=f.useMemo(()=>u.dataFieldOptions(n,i),[n,i]);if(d.length===0){const p=u.explainDataKey(n);return s.jsxs(a.HoverCard,{shadow:"md",position:"bottom-start",withinPortal:!0,zIndex:320,children:[s.jsx(a.HoverCard.Target,{children:s.jsx(a.Box,{children:s.jsx(a.TextInput,{label:e,required:t,defaultValue:p.columnKey,readOnly:!0,disabled:!0})})}),s.jsx(a.HoverCard.Dropdown,{children:s.jsxs(a.Group,{position:"left",spacing:0,children:[s.jsx(a.Text,{size:"xs",color:p.queryName?"black":"red",sx:{fontFamily:"monospace"},children:p.queryName??p.queryID}),s.jsx(a.Text,{size:"xs",color:"black",sx:{fontFamily:"monospace"},children:"."}),s.jsx(a.Text,{size:"xs",color:"red",sx:{fontFamily:"monospace"},children:p.columnKey})]})})]})}return s.jsx(a.Select,{ref:c,label:e,data:d,value:n,onChange:r,required:t,sx:o,maxDropdownHeight:500,...l})}));function Wd({context:e}){const{value:t,set:n}=$(e.instanceData,"config"),r=y.defaults({},t,vs),{control:i,handleSubmit:o,reset:l}=b.useForm({defaultValues:r});return f.useEffect(()=>{l(r)},[t]),t?s.jsx(a.Stack,{spacing:"xs",children:s.jsxs("form",{onSubmit:o(n),children:[s.jsx(a.Text,{children:"X Axis"}),s.jsxs(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[s.jsx(b.Controller,{name:"x_axis_data_key",control:i,render:({field:c})=>s.jsx(B,{label:"Data Field",required:!0,...c})}),s.jsx(b.Controller,{name:"xAxis3D.name",control:i,render:({field:c})=>s.jsx(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...c})})]}),s.jsx(a.Text,{mt:"lg",children:"Y Axis"}),s.jsxs(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[s.jsx(b.Controller,{name:"y_axis_data_key",control:i,render:({field:c})=>s.jsx(B,{label:"Data Field",required:!0,...c})}),s.jsx(b.Controller,{name:"yAxis3D.name",control:i,render:({field:c})=>s.jsx(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...c})})]}),s.jsx(a.Text,{mt:"lg",children:"Z Axis"}),s.jsxs(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[s.jsx(b.Controller,{name:"z_axis_data_key",control:i,render:({field:c})=>s.jsx(B,{label:"Data Field",required:!0,...c})}),s.jsx(b.Controller,{name:"zAxis3D.name",control:i,render:({field:c})=>s.jsx(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...c})})]}),s.jsx(a.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"60%"},mx:"auto",children:s.jsxs(a.Button,{color:"blue",type:"submit",children:[s.jsx(k.DeviceFloppy,{size:20}),s.jsx(a.Text,{ml:"md",children:"Save"})]})})]})}):null}function Rd(e,{panelModel:t}){try{const n=t.queryIDs[0];if(!n)throw new Error("cannot migrate when queryID is empty");const r=u=>u&&`${n}.${u}`,{x_axis_data_key:i,y_axis_data_key:o,z_axis_data_key:l,...c}=e;return{...c,x_axis_data_key:r(i),y_axis_data_key:r(o),z_axis_data_key:r(l)}}catch(n){throw console.error("[Migration failed]",n),n}}class Qd extends ie{constructor(){super(...arguments);P(this,"VERSION",2)}configVersions(){this.version(1,n=>({version:1,config:n})),this.version(2,(n,r)=>{const{config:i}=n;return{...n,version:2,config:Rd(i,r)}})}}const Ud={displayName:"Bar Chart (3D)",displayGroup:"ECharts-based charts",migrator:new Qd,name:"bar-3d",viewRender:qd,configRender:Wd,createConfig(){return{version:2,config:y.cloneDeep(vs)}}},Be={enabled:!1,func_content:["function label(value, index) {"," // your code goes here"," // return value","}"].join(`
|
|
56
|
+
`,"<br/>").split("<br/>");return n.map((i,o)=>{const l=[hd(i)];return o!==n.length-1&&l.push(s.jsx("br",{},`br-${o}`)),l}).flat().filter(i=>i!==void 0)}function gs(e){return xd(e)}function Kt(e,t,n){const r=pd(t,n),i=/^\{(.+)\}(.*)$/;return e.split("$").map((o,l)=>{const c=i.exec(o);if(!c)return gs(o);const u=r[c[1]];if(!u)return gs(o);const d=c[2]??"";return s.jsxs(f.Fragment,{children:[u,gs(d)]},`${o}-${l}`)})}function fd(e,t){const{data_field:n,aggregation:r}=e,i=xn(t,n,r);return Le(e,i)}function ea(e,t){const n={};return e.forEach(r=>{n[r.name]=fd(r,t)}),n}function fn(e,t,n){const r=ea(t,n),i=/^\{(.+)\}(.*)$/;return e.split("$").map(o=>{const l=i.exec(o);if(!l)return o;const c=r[l[1]];if(!c)return o;const u=l[2]??"";return`${c}${u}`}).join("")}const ms={grid:{axis:"#97999D",scope:"rgba(47,140,192,0.1)",boundary:"#789AB4",reference:"#CFCFD8"},graphics:{compared:{blueDark:"#3E7CAB",blue:"#6398C7",blueLight:"#7CB0DF",blue10:"#6398C71a",redDark:"#AF5F6B",red:"#CD7C88",redLight:"#E794A0",red10:"#CD7C881a"},gradient:{distributed:"linear-gradient(90deg, #1babe6 0%, #2fc8c8 28.63%, #98d44b 48.86%, #ffd057 67.53%, #f5ae53 80.6%, #e76441 91.18%, #b90000 100%)",protrude:"linear-gradient(180deg, #ec73734d 0%, #ec737300 100%)"},level:{lv0:"#6398C7",lv1:"#61B5BF",lv2:"#54D4BB",lv3:"#F5D277",lv4:"#E8BB7F",lv5:"#DB9E84",lv6:"#CB8089"},depth:{dp0:"#FFF7F8",dp1:"#FFE1E1",dp2:"#FDBCBC",dp3:"#F39494",dp4:"#FA4242",dp5:"#E21212"},multiple:{c1:"#66B4DB",c2:"#E46464",c3:"#EEBA00",c4:"#33A678",c5:"#9D88CB",c6:"#939943",c7:"#E49792",c8:"#09A2B8",c9:"#AF5F6B",c10:"#6CA157",c11:"#3E7CAB",c12:"#6398C7",c13:"#E692BA",c14:"#97B566",c15:"#8CACE2",c16:"#CA79AC",c17:"#6DBC80",c18:"#B08F4B",c19:"#39BFA2",c20:"#826BAF"}}};function gd(){K.registerTheme("merico-light",{color:Object.values(ms.graphics.multiple),visualMap:{color:Object.values(ms.graphics.depth).reverse()},axes:[{type:"all",name:"通用坐标轴",axisLineColor:"#97999D",axisTickColor:"#97999D",axisLabelShow:!0,axisLabelColor:"#818388",splitLineShow:!0,splitLineColor:["#E0E6F1"]}]})}function ta(){gd()}function*md(e){const t=ms.graphics[e];if(!t)throw new Error("Invalid palette key provided");const n=Object.values(t);let r=0;for(;;)yield n[r%n.length],r++}function na(){return{filters:{},context:{}}}function ys(e){const t=na();if(!e)return na();const{filters:n=t.filters,context:r=t.context}=e;return{filters:n,context:r}}class Se extends f.Component{constructor(t){super(t),this.state={error:null}}componentDidCatch(t){this.setState({error:t})}render(){var t;if(this.state.error){const n=()=>{this.setState({error:null})};return s.jsxs(a.Box,{children:[s.jsx(a.Text,{size:"xs",children:(t=this.state.error)==null?void 0:t.message}),s.jsx(a.Button,{variant:"subtle",size:"xs",mx:"auto",compact:!0,sx:{display:"block"},onClick:n,children:"Retry"})]})}return this.props.children}}function yd(e,t){return new Function(`return ${e}`)()(t,pt)}function bd(e,t,n){return yd(e,{context:t,filters:n})}function jd(e,t){try{return new Function(`return ${e.config.processing.pre}`)()(t,pt)}catch(n){return console.error(n),t}}function vd(e,t){return new Function(`return ${e.config.processing.post}`)()(t,pt)}function wd(e,t,n){return e?new Function(`return ${e}`)()(t,pt,n):t}const gn=e=>y.cloneDeepWith(e,(t,n)=>{if(n!==void 0&&t)return R.toJS(t)}),mn={sqlSnippet:new RegExp("(?<=sql_snippets\\.)([^\\?}.]+)","gm"),context:new RegExp("(?<=context\\.)([^\\?}.]+)","gm"),filter:new RegExp("(?<=filters\\.)([^\\?}.]+)","gm")};function Cd(e,t){const n=Di.decode(t);n!==e&&(console.error("Inconsistent sql"),console.groupCollapsed("Inconsistent sql"),console.table({before:e,after:t,v:n}),console.groupEnd())}async function Sd({query:e,name:t,payload:n,additionals:r},i){if(!e.sql)return[];const{type:o,key:l,sql:c,pre_process:u,post_process:d}=e,p=ps(c,n),h=Zu({sql:p,pre_process:u}),x=Di.encode(h);Cd(h,x);let m=await Je.query(i)({type:o,key:l,query:x,...r},{params:{name:t}});return m=Hu(d,m,ys(n)),m}async function _d({type:e,key:t,configString:n,name:r,additionals:i},o){try{return await Je.httpDataSourceQuery(o)({type:e,key:t,query:n,...i},{params:{name:r}})}catch(l){if(tt.isCancel(l))throw l;return console.error(l),l}}async function bs(){try{return(await Je.post()("/datasource/list",{filter:{},sort:[{field:"create_time",order:"ASC"}],pagination:{page:1,pagesize:100}},{})).data}catch(e){return console.error(e),[]}}async function sa(){try{return(await Je.post()("/sql_snippet/list",{filter:{},sort:[{field:"id",order:"ASC"}],pagination:{page:1,pagesize:1e3}},{})).data}catch(e){return console.error(e),[]}}class ra{constructor(t){P(this,"rootRef");this.rootRef=R.observable({current:t})}async deleteItem(t){R.runInAction(()=>{y.unset(this.rootRef.current,[t])})}getItem(t){const n=this.getValueFromRoot(t);return Promise.resolve(n)}getValueFromRoot(t){return t===null?R.toJS(this.rootRef.current):y.get(this.rootRef.current,[t])}setItem(t,n){if(t===null)if(y.isObject(n))R.runInAction(()=>{this.rootRef.current=n});else throw new Error("Cannot set root value to non-object");else R.runInAction(()=>{y.set(this.rootRef.current,[t],n)});return Promise.resolve(this.getItem(t))}watchItem(t,n,r){return R.reaction(()=>this.getValueFromRoot(t),(i,o)=>{n(i,o)},{requiresObservable:!0,fireImmediately:y.get(r,"fireImmediately",!1)})}}class kd{constructor(){P(this,"channels",new Map);P(this,"globalChannel",new Ii)}getChannel(t){const n=this.channels.get(t);if(n)return n;const r=new Ii;return this.channels.set(t,r),r}}class Td{constructor(t){P(this,"instances",new Map);this.pluginManager=t}get availableVizList(){return this.pluginManager.installedPlugins.flatMap(t=>t.manifest.viz)}resolveComponent(t){return this.pluginManager.factory.viz(t)}getOrCreateInstance(t){const n=this.instances.get(t.id);if(n)return n;const r={id:t.id,name:t.viz.type,type:t.viz.type,messageChannels:new kd,instanceData:new ra(t.viz.conf)};return this.instances.set(t.id,r),r}}function ia(e,t,n,r){return{vizManager:n,locale:"zh",msgChannels:e.messageChannels,instanceData:e.instanceData,pluginData:new ra({}),colorPalette:{getColor(){return()=>""}},data:t,variables:r}}const Dd=e=>{const{panel:t,vizManager:n,data:r,variables:i}=e,o=n.resolveComponent(t.viz.type),l=n.getOrCreateInstance(t),c={...ia(l,r,n,i),viewport:{width:t.layout.w,height:t.layout.h}},u=o.viewRender;return s.jsx(u,{context:c,instance:l,...y.omit(e,["panel","vizManager","data"])})},Id=e=>{const{vizManager:t,panel:n,data:r,variables:i}=e,o=t.resolveComponent(n.viz.type),l=t.getOrCreateInstance(n),c={...ia(l,r,t,i)},u=o.configRender;return s.jsx(u,{context:c,instance:l,...y.omit(e,["panel","vizManager","data"])})},aa=(e,t)=>{const n=nt.bezier(e),r=nt.bezier(t);return function(i){return i<50?n(i*2/100).hex():r((i-50)*2/100).hex()}},yn=e=>{const t=nt.bezier(e);return function(n){return t(n/100).hex()}},Md={type:"interpolation",displayName:"Red / Green",getColor:aa(["darkred","deeppink","lightyellow"],["lightyellow","lightgreen","teal"]),name:"red-green",category:"diverging"},zd={type:"interpolation",displayName:"Yellow / Blue",getColor:aa(["#8f531d","#ffd347","#e3efe3"],["#eefaee","#4ecbbf","#003f94"]),name:"yellow-blue",category:"diverging"},Ad={type:"interpolation",displayName:"Red",getColor:yn(["#fff7f1","darkred"]),name:"red",category:"sequential"},Ed={type:"interpolation",displayName:"Green",getColor:yn(["#f0ffed","darkgreen"]),name:"green",category:"sequential"},Pd={type:"interpolation",displayName:"Blue",getColor:yn(["#f9fcff","#48b3e9","darkblue"]),name:"blue",category:"sequential"},Ld={type:"interpolation",displayName:"Orange",getColor:yn(["#fff7f1","darkorange","#b60000"]),name:"orange",category:"sequential"};class Od{constructor(t){P(this,"symbol");this.symbol=Symbol(t)}}function it(e){return new Od(e)}class js{constructor(){P(this,"parent");P(this,"factoryRegistry",new Map);P(this,"instanceRegistry",new Map)}createScoped(){const t=new js;return t.parent=this,t}getRequired(t){return this.get(t)}get(t){if(this.instanceRegistry.has(t.symbol))return this.instanceRegistry.get(t.symbol);const n=this.factoryRegistry.get(t.symbol);if(n){const r=n(this);return this.instanceRegistry.set(t.symbol,r),r}if(this.parent)return this.parent.get(t)}provideFactory(t,n){return this.factoryRegistry.has(t.symbol)?console.warn(`Token ${t.symbol.toString()} is already registered`):this.factoryRegistry.set(t.symbol,n),this}provideValue(t,n){return this.factoryRegistry.has(t.symbol)?console.warn(`Token ${t.symbol.toString()} is already registered`):this.factoryRegistry.set(t.symbol,()=>n),this}dispose(){this.instanceRegistry.forEach(t=>{const n=y.get(t,"dispose");y.isFunction(n)&&n.bind(t)()}),this.instanceRegistry.clear(),this.factoryRegistry.clear()}}const oa="10.62.1",Bd=Object.freeze(Object.defineProperty({__proto__:null,version:oa},Symbol.toStringTag,{value:"Module"}));class $d{constructor(t){P(this,"staticColors",new Map);P(this,"interpolations",new Map);t.installedPlugins.forEach(n=>{n.manifest.color.forEach(r=>{this.register(r)})})}getStaticColors(){return Array.from(this.staticColors.values())}register(t){const n=this.encodeColor(t);t.type==="single"?(this.staticColors.has(n)&&console.warn(`the color '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`),this.staticColors.set(n,t)):t.type==="interpolation"&&(this.interpolations.has(n)&&console.warn(`the interpolation '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`,`the interpolation '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`),this.interpolations.set(n,t))}decodeStaticColor(t){return this.staticColors.get(t)}encodeColor(t){return`\${${t.category}}.{${t.name}}`}decodeInterpolation(t){return this.interpolations.get(t)}getColorInterpolations(){return Array.from(this.interpolations.values())}}class Vd{constructor(){P(this,"plugins",new Map);P(this,"vizComponents",new Map);P(this,"factory",{viz:t=>{const n=this.vizComponents.get(t);if(n)return n;throw new Error(`Viz Component (${t}) not found`)}})}install(t){if(this.plugins.has(t.id))throw new Error(`Plugin (${t.id}) has been installed before`);this.plugins.set(t.id,t);for(const n of t.manifest.viz){if(this.vizComponents.has(n.name))throw new Error(`Viz Component (${n.name}) has been installed before`);this.vizComponents.set(n.name,n)}}get installedPlugins(){return Array.from(this.plugins.values())}}class Nd{constructor(){P(this,"migrations",[])}version(t,n){return this.migrations.push({version:t,handler:n}),this}run(t,n,r){var l;if(t.from===t.to)return n;if(t.from>t.to)throw new Error(`Can not downgrade from version '${t.from}' to (${t.to})`);const i=this.migrations.filter(c=>c.version>t.from&&c.version<=t.to),o=y.orderBy(i,"version","asc");if(((l=y.last(o))==null?void 0:l.version)!==t.to)throw new Error(`Migration to version ${t.to} not found`);return o.reduce((c,u)=>u.handler(c,r),n)}}class ie extends Nd{constructor(){super(),this.configVersions()}version(t,n){return super.version(t,(r,i)=>({version:t,...n(r,i)}))}async migrate({configData:t,panelModel:n}){const r=await t.getItem(null),i=y.get(r,"version",0),o=this.run({from:i,to:this.VERSION},r,{panelModel:n});await t.setItem(null,o)}async needMigration({configData:t}){const n=await t.getItem(null);return y.get(n,"version",0)<this.VERSION}}const $=(e,t)=>{const[n,{setFalse:r}]=V.useBoolean(!0),[i,o]=f.useState();f.useEffect(()=>(e.getItem(t).then(c=>{o(c),r()}),e.watchItem(t,c=>{o(c)})));const l=f.useCallback(async c=>{await e.setItem(t,c),o(c)},[e,t]);return{loading:n,value:i,set:l}},De={top:16,right:16,bottom:16,left:16},Qe=e=>Math.max(0,e-De.left-De.right),Ue=e=>Math.max(0,e-De.top-De.bottom),Yt=(e,t)=>({width:Qe(e),height:Ue(t)}),Ie=({width:e,height:t,children:n})=>s.jsx(a.Box,{pt:De.top,pr:De.right,pb:De.bottom,pl:De.left,sx:{width:e,height:t,overflow:"hidden",position:"relative"},children:n}),vs={x_axis_data_key:"",y_axis_data_key:"",z_axis_data_key:"",xAxis3D:{type:"value",name:"X Axis Name"},yAxis3D:{type:"value",name:"Y Axis Name"},zAxis3D:{type:"value",name:"Z Axis Name"}};K.use([O.GridComponent,O.VisualMapComponent,O.LegendComponent,O.TooltipComponent,Ce.CanvasRenderer]);function qd({context:e}){const{value:t}=$(e.instanceData,"config"),n=e.data,{width:r,height:i}=e.viewport,{x_axis_data_key:o,y_axis_data_key:l,z_axis_data_key:c,xAxis3D:u,yAxis3D:d,zAxis3D:p}=y.defaults({},t,vs),h=f.useMemo(()=>Ut(n,o),[n,o]),{x,y:m,z:j}=f.useMemo(()=>({x:z(o),y:z(l),z:z(c)}),[o,l,c]),{min:C,max:T}=f.useMemo(()=>{const E=y.minBy(h,H=>H[j.columnKey]),F=y.maxBy(h,H=>H[j.columnKey]);return{min:y.get(E,j.columnKey),max:y.get(F,j.columnKey)}},[h,j]),M={tooltip:{},backgroundColor:"#fff",visualMap:{show:!0,dimension:2,min:C,max:T,inRange:{color:["#313695","#4575b4","#74add1","#abd9e9","#e0f3f8","#ffffbf","#fee090","#fdae61","#f46d43","#d73027","#a50026"]}},xAxis3D:u,yAxis3D:d,zAxis3D:p,grid3D:{viewControl:{projection:"orthographic",autoRotate:!1},light:{main:{shadow:!0,quality:"ultra",intensity:1.5}}},series:[{type:"bar3D",wireframe:{},data:h.map(E=>[E[x.columnKey],E[m.columnKey],E[j.columnKey]])}]};return t?s.jsx(Ie,{width:r,height:i,children:s.jsx(we,{echarts:K,option:M,style:Yt(r,i),notMerge:!0,theme:"merico-light"})}):null}const la=f.createContext(null),ws=la.Provider;function Cs(){const e=f.useContext(la);if(!e)throw new Error("Please use DashboardModelContextProvider");return e}const Y=()=>Cs(),Ss=()=>Cs(),ca=f.createContext({searchButtonProps:{}}),_s=ca.Provider;function ua(){return f.useContext(ca)}const da=f.createContext(null),ks=da.Provider;function pa(){const e=f.useContext(da);if(!e)throw new Error("Please use ContentModelContextProvider");return e}const X=()=>pa(),ce=()=>pa(),Fd={inEditMode:!1},bn=f.createContext(Fd),ha=f.createContext({panel:null,data:{},loading:!1,errors:[],downloadPanelScreenshot:()=>{}}),Ts=ha.Provider;function xa(){const e=f.useContext(ha);if(!e.panel)throw new Error("Please use PanelContextProvider");return e}const ht=()=>xa(),Oe=()=>xa(),Gd={fullScreenPanelID:"",setFullScreenPanelID:y.noop},Ds=f.createContext(Gd);function fa(){const e=f.useContext(Ds);if(!e)throw new Error("Please use FullScreenPanelContext.Provider");return e}const B=S.observer(f.forwardRef(({label:e,required:t,value:n,onChange:r,clearable:i=!1,sx:o,...l},c)=>{const{panel:u}=Oe(),d=f.useMemo(()=>u.dataFieldOptions(n,i),[n,i]);if(d.length===0){const p=u.explainDataKey(n);return s.jsxs(a.HoverCard,{shadow:"md",position:"bottom-start",withinPortal:!0,zIndex:320,children:[s.jsx(a.HoverCard.Target,{children:s.jsx(a.Box,{children:s.jsx(a.TextInput,{label:e,required:t,defaultValue:p.columnKey,readOnly:!0,disabled:!0})})}),s.jsx(a.HoverCard.Dropdown,{children:s.jsxs(a.Group,{position:"left",spacing:0,children:[s.jsx(a.Text,{size:"xs",color:p.queryName?"black":"red",sx:{fontFamily:"monospace"},children:p.queryName??p.queryID}),s.jsx(a.Text,{size:"xs",color:"black",sx:{fontFamily:"monospace"},children:"."}),s.jsx(a.Text,{size:"xs",color:"red",sx:{fontFamily:"monospace"},children:p.columnKey})]})})]})}return s.jsx(a.Select,{ref:c,label:e,data:d,value:n,onChange:r,required:t,sx:o,maxDropdownHeight:500,...l})}));function Wd({context:e}){const{value:t,set:n}=$(e.instanceData,"config"),r=y.defaults({},t,vs),{control:i,handleSubmit:o,reset:l}=b.useForm({defaultValues:r});return f.useEffect(()=>{l(r)},[t]),t?s.jsx(a.Stack,{spacing:"xs",children:s.jsxs("form",{onSubmit:o(n),children:[s.jsx(a.Text,{children:"X Axis"}),s.jsxs(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[s.jsx(b.Controller,{name:"x_axis_data_key",control:i,render:({field:c})=>s.jsx(B,{label:"Data Field",required:!0,...c})}),s.jsx(b.Controller,{name:"xAxis3D.name",control:i,render:({field:c})=>s.jsx(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...c})})]}),s.jsx(a.Text,{mt:"lg",children:"Y Axis"}),s.jsxs(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[s.jsx(b.Controller,{name:"y_axis_data_key",control:i,render:({field:c})=>s.jsx(B,{label:"Data Field",required:!0,...c})}),s.jsx(b.Controller,{name:"yAxis3D.name",control:i,render:({field:c})=>s.jsx(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...c})})]}),s.jsx(a.Text,{mt:"lg",children:"Z Axis"}),s.jsxs(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[s.jsx(b.Controller,{name:"z_axis_data_key",control:i,render:({field:c})=>s.jsx(B,{label:"Data Field",required:!0,...c})}),s.jsx(b.Controller,{name:"zAxis3D.name",control:i,render:({field:c})=>s.jsx(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...c})})]}),s.jsx(a.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"60%"},mx:"auto",children:s.jsxs(a.Button,{color:"blue",type:"submit",children:[s.jsx(k.DeviceFloppy,{size:20}),s.jsx(a.Text,{ml:"md",children:"Save"})]})})]})}):null}function Rd(e,{panelModel:t}){try{const n=t.queryIDs[0];if(!n)throw new Error("cannot migrate when queryID is empty");const r=u=>u&&`${n}.${u}`,{x_axis_data_key:i,y_axis_data_key:o,z_axis_data_key:l,...c}=e;return{...c,x_axis_data_key:r(i),y_axis_data_key:r(o),z_axis_data_key:r(l)}}catch(n){throw console.error("[Migration failed]",n),n}}class Qd extends ie{constructor(){super(...arguments);P(this,"VERSION",2)}configVersions(){this.version(1,n=>({version:1,config:n})),this.version(2,(n,r)=>{const{config:i}=n;return{...n,version:2,config:Rd(i,r)}})}}const Ud={displayName:"Bar Chart (3D)",displayGroup:"ECharts-based charts",migrator:new Qd,name:"bar-3d",viewRender:qd,configRender:Wd,createConfig(){return{version:2,config:y.cloneDeep(vs)}}},Be={enabled:!1,func_content:["function label(value, index) {"," // your code goes here"," // return value","}"].join(`
|
|
57
57
|
`)},ga={id:"builtin:echarts:click-echart:series",displayName:"Click Chart Series",nameRender:Yd,configRender:Kd,payload:[{name:"type",description:"Always 'click'",valueType:"string"},{name:"seriesType",description:"'boxplot'",valueType:"string"},{name:"name",description:"Name of the series clicked",valueType:"string"},{name:"color",description:"Color",valueType:"string"},{name:"value",description:"Record of 'name', 'min', 'q1', 'median', 'q3', 'max'",valueType:"object"},{name:"rowData",description:"Data of the row",valueType:"object"}]};function Kd(e){return s.jsx(s.Fragment,{})}function Yd(e){return s.jsx(a.Text,{children:"Click chart's series"})}const Xd=[{label:"Truncate",value:"truncate"},{label:"Break Line",value:"break"},{label:"Break Word",value:"breakAll"}],jn=f.forwardRef(({sectionTitle:e,value:t,onChange:n},r)=>{const i=o=>l=>{const c=y.cloneDeep(t);y.set(c,o,l),n(c)};return s.jsxs(a.Stack,{spacing:0,children:[e&&s.jsx(a.Divider,{mb:-5,mt:5,variant:"dotted",label:e,labelPosition:"right",labelProps:{color:"dimmed"}}),s.jsxs(a.Group,{grow:!0,noWrap:!0,children:[s.jsx(a.NumberInput,{label:"Max Width",hideControls:!0,value:t.width,onChange:i("width")}),s.jsx(a.Select,{label:"Overflow",data:Xd,value:t.overflow,onChange:i("overflow")}),s.jsx(a.TextInput,{label:"Ellipsis",value:t.ellipsis,disabled:!0})]})]})}),Ke=f.forwardRef(({value:e,onChange:t},n)=>{const r=o=>{t({...e,on_axis:o})},i=o=>{t({...e,in_tooltip:o})};return s.jsxs(a.Stack,{ref:n,spacing:0,children:[s.jsx(jn,{sectionTitle:"Overflow on Axis",value:e.on_axis,onChange:r}),s.jsx(jn,{sectionTitle:"Overflow in Tooltip",value:e.in_tooltip,onChange:i})]})});function Me(){return{on_axis:{width:80,overflow:"truncate",ellipsis:"..."},in_tooltip:{width:200,overflow:"break",ellipsis:"..."}}}function $e({overflow:e,width:t}){const n={truncate:"initial",break:"break-all",breakAll:"break-word"}[e],r=e==="truncate"?"nowrap":"initial",i={truncate:"ellipsis",break:"clip",breakAll:"clip"}[e];return`
|
|
58
58
|
max-width: ${t}px;
|
|
59
59
|
word-break: ${n};
|
|
60
60
|
white-space: ${r};
|
|
61
61
|
overflow: hidden;
|
|
62
62
|
text-overflow: ${i};
|
|
63
|
-
`}function Ve(e){return{width:e.width,overflow:e.overflow,ellipsis:e.ellipsis}}const Is={x_axis:{name:"X Axis",data_key:"",axisLabel:{rotate:0,formatter:{...Be},overflow:Me()}},y_axis:{name:"Y Axis",data_key:"value",label_formatter:be},tooltip:{metrics:[]},color:"rgba(99, 152, 199, 0.10)",reference_lines:[],legend:{show:!0,top:"10",right:"0",left:"auto",bottom:"auto",orient:"vertical",type:"scroll"}};function bt(e,t){return f.useMemo(()=>{const{queryID:n,columnKey:r}=z(t);return y.keyBy(e[n],r)},[e,t])}const Ne=(e,t)=>{const[n,r]=f.useState([]);return f.useEffect(()=>e.watchTriggerSnapshotList(i=>r(i.filter(o=>o.schemaRef===t))),[]),n};class zt{constructor(t,n){this.root=t,this.path=n}async deleteItem(t){t===null&&await this.root.deleteItem(this.path);const n=await this.root.getItem(this.path)||{};await this.root.setItem(this.path,y.omit(n,t))}async getItem(t){const n=await this.root.getItem(this.path);return t===null?n:y.get(n,t)}async setItem(t,n){if(t===null)await this.root.setItem(this.path,n);else{const r=await this.root.getItem(this.path)||{};await this.root.setItem(this.path,{...r,[t]:n})}return await this.getItem(t)}watchItem(t,n,r){return t===null?this.root.watchItem(this.path,(i,o)=>{n(i,o)},r):this.root.watchItem(this.path,(i,o)=>{const l=y.get(i,t),c=y.get(o,t);l!==c&&n(l,c)},r)}}class Ms{constructor(t,n,r){P(this,"attachmentStorage");this.instance=t,this.attachmentKey=n,this.constructInstance=r,this.attachmentStorage=new zt(t.instanceData,n)}async getInstance(t){if(await this.attachmentStorage.getItem(t))return this.constructInstance(new zt(this.attachmentStorage,t))}async create(t,n){return await this.attachmentStorage.setItem(t,n),this.constructInstance(new zt(this.attachmentStorage,t))}async remove(t){await this.attachmentStorage.deleteItem(t)}async list(){const t=await this.attachmentStorage.getItem(null);return Promise.all(y.values(t).map(n=>this.constructInstance(new zt(this.attachmentStorage,n.id))))}}function Jd(e,t){const{value:n,set:r}=$(e.operation.operationData,"config"),[i,o]=f.useState(y.defaults({},n,t)),l=async()=>{await r(i)};return f.useEffect(()=>{o(y.defaults({},n,t))},[n]),{config:i,setConfig:o,commit:l}}function Zd(e){const{config:t,setConfig:n,commit:r}=Jd(e,{urlTemplate:"",openInNewTab:!0});async function i(){await r()}async function o(c){n({...t,openInNewTab:c}),await r()}const l=c=>n({...t,urlTemplate:c.currentTarget.value});return s.jsxs(a.Stack,{children:[s.jsx(a.TextInput,{label:"Url",value:t.urlTemplate,onChange:l,onBlur:i}),s.jsx(a.Switch,{label:"Open in new Tab",checked:t.openInNewTab,onChange:c=>o(c.currentTarget.checked)})]})}async function Hd(e,t){const{urlTemplate:n,openInNewTab:r}=await t.operationData.getItem("config");window.dispatchEvent(new CustomEvent("open-link",{detail:{urlTemplate:n,openInNewTab:r,payload:e}}))}class ep extends ie{constructor(){super(...arguments);P(this,"VERSION",1)}configVersions(){this.version(1,n=>n)}}const tp={displayName:"Open Link",id:"builtin:op:open-link",configRender:Zd,run:Hd,migrator:new ep,createDefaultConfig:()=>({version:1,config:{urlTemplate:"",openInNewTab:!0}})};function np(e){const{value:t,set:n}=$(e.operationData,"config"),r=i=>void n({template:i});return[(t==null?void 0:t.template)||"",r]}function sp(e){const[t,n]=np(e.operation);return s.jsx(a.TextInput,{defaultValue:t,onBlur:r=>n(r.currentTarget.value),label:"console.log"})}async function rp(e,t){const n=await t.operationData.getItem("config"),r=y.template(n.template||"");console.log("run with payload",e),console.log(r(e))}const ip={displayName:"console.log (debug)",id:"builtin:op:debug",configRender:sp,run:rp},ap=S.observer(e=>{const t=X(),{value:n,set:r}=$(e.operation.operationData,"config");console.log({value:n,viewID:n==null?void 0:n.viewID});const i=(n==null?void 0:n.viewID)||"",o=l=>void r({viewID:l});return s.jsx(a.Select,{defaultValue:i,value:i,onChange:o,label:"View",data:t.views.options,withinPortal:!0,zIndex:340,maxDropdownHeight:500})});async function op(e,t){const r=(await t.operationData.getItem("config")).viewID;window.dispatchEvent(new CustomEvent("open-view",{detail:{viewID:r}}))}const lp={displayName:"Open View",id:"builtin:op:open_view",configRender:ap,run:op},cp={"tbody tr":{opacity:.5,transition:"opacity 200ms ease"},"tr[data-affected=true]":{opacity:1}},up=({value:e="",onChange:t})=>{const[n,r]=f.useState(e);f.useEffect(()=>{r(e)},[e]);const i=()=>{t(n)};return s.jsx(a.TextInput,{size:"xs",label:"",value:n,onChange:o=>r(o.currentTarget.value),sx:{flexGrow:1},rightSection:s.jsx(a.ActionIcon,{color:"green",size:"xs",onClick:i,disabled:n===e,children:s.jsx(_.IconDeviceFloppy,{})})})},dp={dictionary:{}},pp=S.observer(e=>{const t=X(),{value:n=dp,set:r}=$(e.operation.operationData,"config"),{dictionary:i={}}=n;console.log({value:{...n},dictionary:{...i},filters:[...t.filters.keyLabelOptions]});const o=(l,c)=>{if(c===""){const u={...i};delete u[l],r({dictionary:u});return}r({dictionary:{...i,[l]:c}})};return s.jsxs(a.Table,{sx:cp,children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"Set filter"}),s.jsx("th",{children:"with"})]})}),s.jsx("tbody",{children:[...t.filters.keyLabelOptions].map(l=>{const c=l.value in i;return s.jsxs("tr",{"data-affected":c,children:[s.jsx("td",{children:l.label}),s.jsx("td",{children:s.jsx(up,{value:i[l.value],onChange:u=>o(l.value,u)})})]},l.value)})})]})});async function hp(e,t){const r=(await t.operationData.getItem("config")).dictionary;window.dispatchEvent(new CustomEvent("set-filter-values",{detail:{dictionary:r,payload:e}}))}const xp={displayName:"Set Filter Values",id:"builtin:op:set_filter_values",configRender:pp,run:hp},fp={filter_keys:[]},gp=S.observer(e=>{const t=X(),{value:n=fp,set:r}=$(e.operation.operationData,"config"),{filter_keys:i=[]}=n,o=c=>{r({filter_keys:[...c]})},l=f.useMemo(()=>t.filters.current.map(c=>({label:c.label,value:c.key})),[t.filters.values]);return s.jsx(a.Stack,{spacing:10,children:s.jsx(a.MultiSelect,{label:"Select Filters to Clear",data:l,value:i,onChange:o})})});async function mp(e,t){const r=(await t.operationData.getItem("config")).filter_keys;window.dispatchEvent(new CustomEvent("clear-filter-values",{detail:{filter_keys:r,payload:e}}))}const vn=[ip,tp,lp,xp,{displayName:"Clear Filter Values",id:"builtin:op:clear_filter_values",configRender:gp,run:mp}];class yp{constructor(t,n=vn){P(this,"attachments");this.operations=n;const r=async i=>{const{id:o,schemaRef:l}=await i.getItem(null);return{id:o,schemaRef:l,operationData:new zt(i,"data")}};this.attachments=new Ms(t,"__OPERATIONS",r)}async runOperation(t,n){const r=await this.attachments.getInstance(t);if(!r){console.warn(`Operation '${t}' is not defined`);return}const i=this.tryGetSchema(r.schemaRef);if(!i){console.warn(`Operation schema '${r.schemaRef}' is not defined`);return}await i.run(n,r)}tryGetSchema(t){return this.operations.find(n=>n.id===t)}async needMigration(){const n=(await this.attachments.list()).map(async r=>{const i={configData:r.operationData},o=this.tryGetSchema(r.schemaRef),l=o==null?void 0:o.migrator;return l&&await l.needMigration(i)});return(await Promise.all(n)).some(r=>r)}async runMigration(){const n=(await this.attachments.list()).map(async r=>{const i={configData:r.operationData},o=this.tryGetSchema(r.schemaRef),l=o==null?void 0:o.migrator;l&&await l.needMigration(i)&&await l.migrate(i)});await Promise.all(n)}async createOrGetOperation(t,n){var l;if(!this.getOperationSchemaList().some(c=>c.id===n.id))throw new Error(`Operation schema '${n.id}' is not defined`);const i=await this.attachments.getInstance(t);return!i||i.schemaRef!==n.id?await this.attachments.create(t,{id:t,schemaRef:n.id,data:((l=n.createDefaultConfig)==null?void 0:l.call(n))??{}}):i}getOperationList(){return this.attachments.list()}getOperationSchemaList(){return this.operations}removeOperation(t){return this.attachments.remove(t)}async retrieveTrigger(t){return await this.attachments.getInstance(t)}}const ma="__TRIGGERS";class bp{constructor(t,n){P(this,"attachments");this.instance=t,this.component=n;const r=async i=>{const{id:o,schemaRef:l}=await i.getItem(null);return{id:o,schemaRef:l,triggerData:new zt(i,"data")}};this.attachments=new Ms(t,ma,r)}watchTriggerSnapshotList(t){return this.instance.instanceData.watchItem(ma,n=>{const r=y.values(n).map(i=>({id:y.get(i,"id"),schemaRef:y.get(i,"schemaRef"),config:R.toJS(y.get(i,"data.config"))}));t(r)},{fireImmediately:!0})}async createOrGetTrigger(t,n,r={recreate:!1}){var c;if(!this.getTriggerSchemaList().some(u=>u.id===n.id))throw new Error(`Trigger schema '${n.id}' is not defined in component '${this.component.name}'`);const o=await this.attachments.getInstance(t);return!o||r.recreate||o.schemaRef!==n.id?await this.attachments.create(t,{id:t,schemaRef:n.id,data:((c=n==null?void 0:n.createDefaultConfig)==null?void 0:c.call(n))||{}}):o}async getTriggerList(){return await this.attachments.list()}getTriggerSchemaList(){return this.component.triggers||[]}async removeTrigger(t){await this.attachments.remove(t)}async retrieveTrigger(t){return await this.attachments.getInstance(t)}async getMigrationTasks(){const n=(await this.getTriggerList()).map(async r=>{const i=this.getTriggerSchemaList().find(c=>c.id===r.schemaRef),o=i==null?void 0:i.migrator,l={configData:r.triggerData};return o&&await o.needMigration(l)?()=>o.migrate(l):null});return Promise.all(n).then(r=>r.filter(i=>i))}async needMigration(){return(await this.getMigrationTasks()).length>0}async runMigration(){const t=await this.getMigrationTasks();await Promise.all(t.map(n=>n()))}}class zs{constructor(t,n,r){P(this,"operationManager");P(this,"triggerManager");P(this,"attachments");this.operationManager=new yp(t,r),this.triggerManager=new bp(t,n);const i=async o=>{const{id:l,triggerRef:c,operationRef:u}=await o.getItem(null);return{id:l,triggerRef:c,operationRef:u}};this.attachments=new Ms(t,"__INTERACTIONS",i)}async addInteraction(t,n){const r=t.id,i=n.id,o=`[${r}]:[${i}]`;await this.attachments.create(o,{id:o,triggerRef:r,operationRef:i})}getInteractionList(){return this.attachments.list()}async removeInteraction(t){const n=await this.attachments.getInstance(t);if(!n)return;const{triggerRef:r,operationRef:i}=n;await this.getTriggerRefCount(r)<=1&&await this.triggerManager.removeTrigger(r),await this.getOperationRefCount(i)<=1&&await this.operationManager.removeOperation(i),await this.attachments.remove(t)}async getOperationRefCount(t){return(await this.getInteractionList()).filter(r=>r.operationRef===t).length}async getTriggerRefCount(t){return(await this.getInteractionList()).filter(r=>r.triggerRef===t).length}async runInteraction(t,n){const i=(await this.getInteractionList()).filter(o=>o.triggerRef===t);await Promise.all(i.map(async o=>{try{return await this.operationManager.runOperation(o.operationRef,n)}catch(l){console.warn(`Failed to run operation '${o.operationRef}'`,l)}}))}}const qe=({vizManager:e,instance:t})=>V.useCreation(()=>new zs(t,e.resolveComponent(t.type),vn),[t,e]),ya=e=>{const{title:t="Variables",variables:n}=e,r=ae.useClipboard(),i=o=>{r.copy(o),yt.showNotification({color:"green",message:"Copied to clipboard"})};return s.jsxs(a.Paper,{withBorder:!0,p:"sm",children:[s.jsx(a.Text,{size:"xs",color:"dimmed",mb:"sm",children:t}),s.jsx(a.Stack,{style:{maxHeight:"500px"},children:n.map(o=>s.jsxs(a.Text,{size:"sm",children:[s.jsxs(a.Code,{color:"teal",children:["// ",o.description]}),s.jsx("br",{}),s.jsxs(a.Code,{onClick:()=>i(o.name),style:{cursor:"pointer"},children:[o.name," : ",o.valueType]})]},o.name))})]})};class jp{constructor(t,n){P(this,"operationId");P(this,"operation");P(this,"operationSchema");P(this,"variables",[]);this.operationManager=t,this.instance=n,R.makeAutoObservable(this)}get schemaList(){return this.operationManager.getOperationSchemaList()}async configOperation(t,n){const r=await this.operationManager.retrieveTrigger(t),i=this.operationManager.getOperationSchemaList().find(o=>o.id===(r==null?void 0:r.schemaRef));R.runInAction(()=>{this.operationId=t,this.operation=r,this.operationSchema=i,this.variables=n})}async changeSchema(t){this.operationId&&(await this.operationManager.createOrGetOperation(this.operationId,t),await this.configOperation(this.operationId,this.variables))}}function vp(e){return!!e.operationId}const wp=S.observer(({model:e,onClick:t})=>{var r;const n=(r=e.operationSchema)==null?void 0:r.displayName;return s.jsx(a.Button,{variant:"outline",onClick:t,children:n})}),Cp=S.observer(({model:e})=>{const t={operation:e.operation,instance:e.instance,variables:[]};return f.createElement(e.operationSchema.configRender,t)}),Sp=S.observer(({model:e})=>{const t=e.schemaList,n=t.map(i=>({label:i.displayName,value:i.id}));async function r(i){await e.changeSchema(t.find(o=>o.id===i))}return s.jsx(a.Select,{label:"Operation",data:n,onChange:r,value:e.operationSchema.id,withinPortal:!0,zIndex:340})}),_p=S.observer(e=>{const[t,{setTrue:n,setFalse:r}]=V.useBoolean(!1),{operationManager:i,operationId:o,instance:l,variables:c}=e,u=V.useCreation(()=>new jp(i,l),[i,l]);return V.useAsyncEffect(async()=>{await u.configOperation(o,c)},[o,u]),vp(u)?s.jsxs(s.Fragment,{children:[s.jsx(wp,{model:u,onClick:n}),s.jsx(a.Modal,{size:600,opened:t,onClose:r,title:"Operation Settings",zIndex:320,children:s.jsxs(a.Stack,{children:[s.jsx(Sp,{model:u}),s.jsxs(a.Tabs,{defaultValue:"settings",children:[s.jsxs(a.Tabs.List,{children:[s.jsx(a.Tabs.Tab,{value:"settings",children:"Settings"}),s.jsx(a.Tabs.Tab,{value:"variables",children:"Variables"})]}),s.jsx(a.Tabs.Panel,{value:"settings",pt:10,children:s.jsx(Cp,{model:u})}),s.jsx(a.Tabs.Panel,{value:"variables",pt:10,children:s.jsx(ya,{title:"Variables",variables:u.variables})})]})]})})]}):null});class kp{constructor(t,n){P(this,"triggerId");P(this,"trigger");P(this,"triggerSchema");P(this,"sampleData");this.triggerManager=t,this.instance=n,R.makeAutoObservable(this)}get schemaList(){return this.triggerManager.getTriggerSchemaList()}async configTrigger(t,n){const r=await this.triggerManager.retrieveTrigger(t),i=this.triggerManager.getTriggerSchemaList().find(o=>o.id===(r==null?void 0:r.schemaRef));R.runInAction(()=>{this.triggerId=t,this.trigger=r,this.triggerSchema=i,this.sampleData=n})}async changeSchema(t){this.triggerId&&(await this.triggerManager.createOrGetTrigger(this.triggerId,t),await this.configTrigger(this.triggerId,this.sampleData))}isReady(){return Tp(this)}}function Tp(e){return!!e.triggerId&&!!e.triggerSchema}function Dp(e,t){return V.useCreation(()=>new kp(e,t),[e,t])}const Ip=S.observer(({model:e,onClick:t})=>{const n=e.triggerSchema.nameRender,r={trigger:e.trigger,instance:e.instance,sampleData:e.sampleData};return s.jsx(a.Button,{variant:"outline",onClick:t,children:f.createElement(n,r)})}),Mp=S.observer(({model:e})=>{const t=e.schemaList,n=t.map(i=>({label:i.displayName,value:i.id}));async function r(i){await e.changeSchema(t.find(o=>o.id===i))}return s.jsx(a.Select,{label:"Trigger",data:n,value:e.triggerSchema.id,onChange:r})}),zp=S.observer(({model:e})=>{const t={trigger:e.trigger,instance:e.instance,sampleData:e.sampleData};return f.createElement(e.triggerSchema.configRender,t)}),Ap=S.observer(e=>{const[t,{setTrue:n,setFalse:r}]=V.useBoolean(!1),i=e.model;return s.jsxs(s.Fragment,{children:[s.jsx(a.Modal,{opened:t,onClose:r,title:"Setup Trigger",zIndex:320,children:s.jsxs(a.Stack,{children:[s.jsx(Mp,{model:i}),s.jsx(zp,{model:i}),s.jsx(ya,{title:"Payload",variables:i.triggerSchema.payload})]})}),s.jsx(Ip,{onClick:n,model:i})]})});function Ep(e,t){const[n,r]=f.useState([]);return V.useAsyncEffect(async()=>{const i=await e.getInteractionList();r(i)},[t,e]),n}const Pp=S.observer(({item:e,manager:t,instance:n,sampleData:r,variables:i,onRemove:o})=>{const{triggerRef:l,operationRef:c}=e,u=Dp(t.triggerManager,n);if(V.useAsyncEffect(async()=>{await u.configTrigger(l,r)},[u,l,r]),u.isReady()){const d=[...u.triggerSchema.payload,...i];return s.jsxs(a.Group,{children:[s.jsx(Ap,{model:u}),s.jsx(_p,{instance:n,operationId:c,variables:d,operationManager:t.operationManager}),s.jsx(a.ActionIcon,{"aria-label":"delete-interaction",variant:"filled",color:"red",onClick:()=>o(e),children:s.jsx(k.Trash,{size:16})})]})}return null}),Lp=e=>{const[t,n]=f.useState(0),{interactionManager:r,instance:i,sampleData:o,variables:l}=e,c=Ep(r,t),u=async()=>{const x=await r.triggerManager.createOrGetTrigger(ae.randomId(),r.triggerManager.getTriggerSchemaList()[0]),m=await r.operationManager.createOrGetOperation(ae.randomId(),r.operationManager.getOperationSchemaList()[0]);await r.addInteraction(x,m),n(j=>j+1)};async function d(x){await r.removeInteraction(x.id),n(m=>m+1)}const{data:p=0,loading:h}=V.useRequest(async()=>{try{return(await r.triggerManager.getTriggerSchemaList()).length}catch{return 0}});return s.jsxs(a.Stack,{children:[s.jsx(a.LoadingOverlay,{visible:h}),p===0&&s.jsx(a.Alert,{icon:s.jsx(k.AlertCircle,{size:16}),title:"Unavailable",color:"gray",children:"This visualization does not have available interactions to choose from"}),c.map(x=>s.jsx(Pp,{onRemove:d,instance:i,sampleData:o,variables:l,item:x,manager:e.interactionManager},x.id)),s.jsx(a.Button,{style:{width:"fit-content"},onClick:()=>u(),disabled:p===0,children:"Add interaction"})]})},Op=()=>{const{panel:e,data:t}=ht(),n=e.viz,{vizManager:r}=f.useContext(et),i=e.json,o=V.useCreation(()=>r.getOrCreateInstance(i),[r,i]),l=V.useCreation(()=>new zs(o,r.resolveComponent(n.type),vn),[o,n.type]);return f.useEffect(()=>o.instanceData.watchItem(null,y.throttle(c=>{e.viz.setConf(c)},100,{leading:!1,trailing:!0})),[o]),{instance:o,vizManager:r,interactionManager:l,sampleData:t,variables:[]}},Bp=()=>{const e=Op();return s.jsx(Lp,{...e})},ba={axisTick:{show:!0,alignWithLabel:!0,lineStyle:{width:2}},axisLine:{show:!0,lineStyle:{width:3}},splitLine:{show:!1},z:3};function $p(e){return y.defaultsDeep({},e,ba)}const Vp=Object.freeze(Object.defineProperty({__proto__:null,getXAxis:$p,xAxis:ba},Symbol.toStringTag,{value:"Module"})),ja={axisTick:{show:!1},axisLine:{show:!1,lineStyle:{width:3}},splitLine:{show:!0,lineStyle:{type:"dashed"}}};function Np(e){return y.defaultsDeep({},e,ja)}const qp=Object.freeze(Object.defineProperty({__proto__:null,getYAxis:Np,yAxis:ja},Symbol.toStringTag,{value:"Module"})),va={confine:!0,appendToBody:!0};function Fp(e){return y.defaultsDeep({},e,va)}const se={...Vp,...qp,...Object.freeze(Object.defineProperty({__proto__:null,getTooltip:Fp,tooltip:va},Symbol.toStringTag,{value:"Module"}))};function At({enabled:e,func_content:t}){return(n,r)=>{if(!e)return n;try{return new Function(`return ${t}`)()(n,r)}catch(i){return console.error(`[getEchartsXAxisLabel] failed parsing custom function, error: ${i.message}`),n}}}function Gp(e,t){const n=[],r=[];return{boxplotData:Object.entries(e).map(([o,l])=>{const c=l.map(M=>M[t]).sort((M,E)=>M-E),u=Ft.quantile(c,.25)??0,d=Ft.quantile(c,.5)??0,p=Ft.quantile(c,.75)??0,h=p-u,x=u-1.5*h,m=p+1.5*h,j=Math.max(c[0],x),C=Math.min(y.last(c)??0,m);return l.filter(M=>{const E=M[t];return E<j||E>C}).forEach(M=>n.push([o,M[t],M])),l.filter(M=>{const E=M[t];return E>=j&&E<=C}).forEach(M=>r.push([o,M[t],M])),{name:o,min:j,q1:u,median:d,q3:p,max:C}}),outliersData:n,scatterData:r}}function Wp(e,t){const{x_axis:n,y_axis:r}=e;if(!n.data_key||!r.data_key)return[];const i=z(n.data_key),o=z(r.data_key);if(i.queryID!==o.queryID)throw new Error("Please use the same query for X & Y axis");const l=y.groupBy(t[i.queryID],i.columnKey),{boxplotData:c,outliersData:u,scatterData:d}=Gp(l,o.columnKey);return[{source:c},{source:u},{source:d}]}function Rp(e){const t={top:30,left:20,right:15,bottom:25,containLabel:!0};return e.legend.orient==="vertical"&&(t.right=80),t}function Qp({config:e}){return{...e.legend,data:[{name:"Box",icon:"roundRect",itemStyle:{color:e.color}},{name:"Scatter",icon:"circle",itemStyle:{color:"#ED6A45",opacity:.5}},{name:"Outlier",icon:"circle",itemStyle:{color:"#ED6A45"}}]}}function Up(e,t,n){const r=t.reduce((i,o)=>{const l=rt(o,n);return i[o.name]=Le(o,l),i},{});return e.map(i=>({name:"refs",type:"scatter",data:[],markLine:{data:[{name:i.name,yAxis:Number(r[i.variable_key])}],silent:!0,symbol:["none","triangle"],symbolRotate:90,symbolSize:[10,8],label:{formatter:function(){return fn(i.template,t,n)},position:"insideEndTop"}}}))}const As=["max","q3","median","q1","min"],Es=[10,40];function Ps(e){return e.barLayout({barMinWidth:Es[0],barMaxWidth:Es[1],count:2})}function Kp(e,t,n){const{itemStyle:{color:r,borderColor:i,borderWidth:o}}=n,l=Ps(t),c=t.value(0),u=e.source[c],{min:d,q1:p,median:h,q3:x,max:m}=u,j={min:t.coord([c,d]),q1:t.coord([c,p]),median:t.coord([c,h]),q3:t.coord([c,x]),max:t.coord([c,m])},C={left:l[1].offset,center:(l[1].offset+l[1].width)/2,right:l[1].width},T={type:"group",children:[]},M=[{x1:j.max[0]+C.left,x2:j.max[0]+C.right,y1:j.max[1],y2:j.max[1]},{x1:j.median[0]+C.left,x2:j.median[0]+C.right,y1:j.median[1],y2:j.median[1]},{x1:j.min[0]+C.left,x2:j.min[0]+C.right,y1:j.min[1],y2:j.min[1]},{x1:j.min[0]+C.center,x2:j.min[0]+C.center,y1:j.min[1],y2:j.q1[1]},{x1:j.max[0]+C.center,x2:j.max[0]+C.center,y1:j.max[1],y2:j.q3[1]}],E={stroke:i,lineWidth:o};return M.forEach(F=>{T.children.push({type:"line",shape:F,style:E})}),T.children.push({type:"rect",shape:{x:j.q1[0]+C.left,y:j.q1[1],width:C.right-C.left,height:j.q3[1]-j.q1[1]},style:{fill:r,stroke:i,lineWidth:o}}),T}function Yp(e,t){const{color:n}=t,r={name:"Box",type:"custom",itemStyle:{color:n,borderColor:"#2F8CC0",borderWidth:2},emphasis:{disabled:!0},boxWidth:Es,datasetIndex:0};return r.renderItem=(i,o)=>Kp(e,o,r),r}function Xp(e){const t=Ps(e),n=t[0].width,r=e.value(0),i=e.value(1),[o,l]=e.coord([r,i]),u=o+t[0].offset+Math.random()*n;return{type:"circle",transition:["shape"],x:u,y:l,shape:{cx:0,cy:0,r:2},style:{fill:e.visual("color"),opacity:.5}}}function Jp(){const e={name:"Scatter",type:"custom",itemStyle:{color:"#ED6A45"},emphasis:{scale:2},datasetIndex:2};return e.renderItem=(t,n)=>Xp(n),e}function Zp(e,t){const n=Ps(e),r=n[0].width,i=e.value(0),o=e.value(1),[l,c]=e.coord([i,o]),d=l+n[0].offset+Math.random()*r;return{type:"circle",transition:["shape"],x:d,y:c,shape:{cx:0,cy:0,r:3},style:{fill:e.visual("color")}}}function Hp(){const e={name:"Outlier",type:"custom",itemStyle:{color:"#ED6A45"},emphasis:{scale:2},datasetIndex:1};return e.renderItem=(t,n)=>Zp(n),e}function eh(e,t){const n=t[0],r=Yp(n,e),i=Jp(),o=Hp();return[{name:"Placeholder Box",type:"boxplot",ignore:!0,silent:!0,itemStyle:{color:"none",borderColor:"none",opacity:0},boxWidth:[20,80],datasetIndex:0,encode:{y:As,x:"name",itemName:["name"],tooltip:As}},{name:"Placeholder Outlier",type:"scatter",symbolSize:7,itemStyle:{color:"transparent"},ignore:!0,silent:!0,emphasis:{disabled:!0},datasetIndex:1},r,i,o]}const th=(e,t)=>{const n=As.map(o=>`
|
|
63
|
+
`}function Ve(e){return{width:e.width,overflow:e.overflow,ellipsis:e.ellipsis}}const Is={x_axis:{name:"X Axis",data_key:"",axisLabel:{rotate:0,formatter:{...Be},overflow:Me()}},y_axis:{name:"Y Axis",data_key:"value",label_formatter:be},tooltip:{metrics:[]},color:"rgba(99, 152, 199, 0.10)",reference_lines:[],legend:{show:!0,top:"10",right:"0",left:"auto",bottom:"auto",orient:"vertical",type:"scroll"}};function bt(e,t){return f.useMemo(()=>{const{queryID:n,columnKey:r}=z(t);return y.keyBy(e[n],r)},[e,t])}const Ne=(e,t)=>{const[n,r]=f.useState([]);return f.useEffect(()=>e.watchTriggerSnapshotList(i=>r(i.filter(o=>o.schemaRef===t))),[]),n};class zt{constructor(t,n){this.root=t,this.path=n}async deleteItem(t){t===null&&await this.root.deleteItem(this.path);const n=await this.root.getItem(this.path)||{};await this.root.setItem(this.path,y.omit(n,t))}async getItem(t){const n=await this.root.getItem(this.path);return t===null?n:y.get(n,t)}async setItem(t,n){if(t===null)await this.root.setItem(this.path,n);else{const r=await this.root.getItem(this.path)||{};await this.root.setItem(this.path,{...r,[t]:n})}return await this.getItem(t)}watchItem(t,n,r){return t===null?this.root.watchItem(this.path,(i,o)=>{n(i,o)},r):this.root.watchItem(this.path,(i,o)=>{const l=y.get(i,t),c=y.get(o,t);l!==c&&n(l,c)},r)}}class Ms{constructor(t,n,r){P(this,"attachmentStorage");this.instance=t,this.attachmentKey=n,this.constructInstance=r,this.attachmentStorage=new zt(t.instanceData,n)}async getInstance(t){if(await this.attachmentStorage.getItem(t))return this.constructInstance(new zt(this.attachmentStorage,t))}async create(t,n){return await this.attachmentStorage.setItem(t,n),this.constructInstance(new zt(this.attachmentStorage,t))}async remove(t){await this.attachmentStorage.deleteItem(t)}async list(){const t=await this.attachmentStorage.getItem(null);return Promise.all(y.values(t).map(n=>this.constructInstance(new zt(this.attachmentStorage,n.id))))}}function Jd(e,t){const{value:n,set:r}=$(e.operation.operationData,"config"),[i,o]=f.useState(y.defaults({},n,t)),l=async()=>{await r(i)};return f.useEffect(()=>{o(y.defaults({},n,t))},[n]),{config:i,setConfig:o,commit:l}}function Zd(e){const{config:t,setConfig:n,commit:r}=Jd(e,{urlTemplate:"",openInNewTab:!0});async function i(){await r()}async function o(c){n({...t,openInNewTab:c}),await r()}const l=c=>n({...t,urlTemplate:c.currentTarget.value});return s.jsxs(a.Stack,{children:[s.jsx(a.TextInput,{label:"Url",value:t.urlTemplate,onChange:l,onBlur:i}),s.jsx(a.Switch,{label:"Open in new Tab",checked:t.openInNewTab,onChange:c=>o(c.currentTarget.checked)})]})}async function Hd(e,t){const{urlTemplate:n,openInNewTab:r}=await t.operationData.getItem("config");window.dispatchEvent(new CustomEvent("open-link",{detail:{urlTemplate:n,openInNewTab:r,payload:e}}))}class ep extends ie{constructor(){super(...arguments);P(this,"VERSION",1)}configVersions(){this.version(1,n=>n)}}const tp={displayName:"Open Link",id:"builtin:op:open-link",configRender:Zd,run:Hd,migrator:new ep,createDefaultConfig:()=>({version:1,config:{urlTemplate:"",openInNewTab:!0}})};function np(e){const{value:t,set:n}=$(e.operationData,"config"),r=i=>void n({template:i});return[(t==null?void 0:t.template)||"",r]}function sp(e){const[t,n]=np(e.operation);return s.jsx(a.TextInput,{defaultValue:t,onBlur:r=>n(r.currentTarget.value),label:"console.log"})}async function rp(e,t){const n=await t.operationData.getItem("config"),r=y.template(n.template||"");console.log("run with payload",e),console.log(r(e))}const ip={displayName:"console.log (debug)",id:"builtin:op:debug",configRender:sp,run:rp},ap=S.observer(e=>{const t=X(),{value:n,set:r}=$(e.operation.operationData,"config");console.log({value:n,viewID:n==null?void 0:n.viewID});const i=(n==null?void 0:n.viewID)||"",o=l=>void r({viewID:l});return s.jsx(a.Select,{defaultValue:i,value:i,onChange:o,label:"View",data:t.views.options,withinPortal:!0,zIndex:340,maxDropdownHeight:500})});async function op(e,t){const r=(await t.operationData.getItem("config")).viewID;window.dispatchEvent(new CustomEvent("open-view",{detail:{viewID:r}}))}const lp={displayName:"Open View",id:"builtin:op:open_view",configRender:ap,run:op},cp={"tbody tr":{opacity:.5,transition:"opacity 200ms ease"},"tr[data-affected=true]":{opacity:1}},up=({value:e="",onChange:t})=>{const[n,r]=f.useState(e);f.useEffect(()=>{r(e)},[e]);const i=()=>{t(n)};return s.jsx(a.TextInput,{size:"xs",label:"",value:n,onChange:o=>r(o.currentTarget.value),sx:{flexGrow:1},rightSection:s.jsx(a.ActionIcon,{color:"green",size:"xs",onClick:i,disabled:n===e,children:s.jsx(_.IconDeviceFloppy,{})})})},dp={dictionary:{}},pp=S.observer(e=>{const t=X(),{value:n=dp,set:r}=$(e.operation.operationData,"config"),{dictionary:i={}}=n;console.log({value:{...n},dictionary:{...i},filters:[...t.filters.keyLabelOptions]});const o=(l,c)=>{if(c===""){const u={...i};delete u[l],r({dictionary:u});return}r({dictionary:{...i,[l]:c}})};return s.jsxs(a.Table,{sx:cp,children:[s.jsx("thead",{children:s.jsxs("tr",{children:[s.jsx("th",{children:"Set filter"}),s.jsx("th",{children:"with"})]})}),s.jsx("tbody",{children:[...t.filters.keyLabelOptions].map(l=>{const c=l.value in i;return s.jsxs("tr",{"data-affected":c,children:[s.jsx("td",{children:l.label}),s.jsx("td",{children:s.jsx(up,{value:i[l.value],onChange:u=>o(l.value,u)})})]},l.value)})})]})});async function hp(e,t){const r=(await t.operationData.getItem("config")).dictionary;window.dispatchEvent(new CustomEvent("set-filter-values",{detail:{dictionary:r,payload:e}}))}const xp={displayName:"Set Filter Values",id:"builtin:op:set_filter_values",configRender:pp,run:hp},fp={filter_keys:[]},gp=S.observer(e=>{const t=X(),{value:n=fp,set:r}=$(e.operation.operationData,"config"),{filter_keys:i=[]}=n,o=c=>{r({filter_keys:[...c]})},l=f.useMemo(()=>t.filters.current.map(c=>({label:c.label,value:c.key})),[t.filters.values]);return s.jsx(a.Stack,{spacing:10,children:s.jsx(a.MultiSelect,{label:"Select Filters to Clear",data:l,value:i,onChange:o})})});async function mp(e,t){const r=(await t.operationData.getItem("config")).filter_keys;window.dispatchEvent(new CustomEvent("clear-filter-values",{detail:{filter_keys:r,payload:e}}))}const vn=[ip,tp,lp,xp,{displayName:"Clear Filter Values",id:"builtin:op:clear_filter_values",configRender:gp,run:mp}];class yp{constructor(t,n=vn){P(this,"attachments");this.operations=n;const r=async i=>{const{id:o,schemaRef:l}=await i.getItem(null);return{id:o,schemaRef:l,operationData:new zt(i,"data")}};this.attachments=new Ms(t,"__OPERATIONS",r)}async runOperation(t,n){const r=await this.attachments.getInstance(t);if(!r){console.warn(`Operation '${t}' is not defined`);return}const i=this.tryGetSchema(r.schemaRef);if(!i){console.warn(`Operation schema '${r.schemaRef}' is not defined`);return}await i.run(n,r)}tryGetSchema(t){return this.operations.find(n=>n.id===t)}async needMigration(){const n=(await this.attachments.list()).map(async r=>{const i={configData:r.operationData},o=this.tryGetSchema(r.schemaRef),l=o==null?void 0:o.migrator;return l&&await l.needMigration(i)});return(await Promise.all(n)).some(r=>r)}async runMigration(){const n=(await this.attachments.list()).map(async r=>{const i={configData:r.operationData},o=this.tryGetSchema(r.schemaRef),l=o==null?void 0:o.migrator;l&&await l.needMigration(i)&&await l.migrate(i)});await Promise.all(n)}async createOrGetOperation(t,n){var l;if(!this.getOperationSchemaList().some(c=>c.id===n.id))throw new Error(`Operation schema '${n.id}' is not defined`);const i=await this.attachments.getInstance(t);return!i||i.schemaRef!==n.id?await this.attachments.create(t,{id:t,schemaRef:n.id,data:((l=n.createDefaultConfig)==null?void 0:l.call(n))??{}}):i}getOperationList(){return this.attachments.list()}getOperationSchemaList(){return this.operations}removeOperation(t){return this.attachments.remove(t)}async retrieveTrigger(t){return await this.attachments.getInstance(t)}}const ma="__TRIGGERS";class bp{constructor(t,n){P(this,"attachments");this.instance=t,this.component=n;const r=async i=>{const{id:o,schemaRef:l}=await i.getItem(null);return{id:o,schemaRef:l,triggerData:new zt(i,"data")}};this.attachments=new Ms(t,ma,r)}watchTriggerSnapshotList(t){return this.instance.instanceData.watchItem(ma,n=>{const r=y.values(n).map(i=>({id:y.get(i,"id"),schemaRef:y.get(i,"schemaRef"),config:R.toJS(y.get(i,"data.config"))}));t(r)},{fireImmediately:!0})}async createOrGetTrigger(t,n,r={recreate:!1}){var c;if(!this.getTriggerSchemaList().some(u=>u.id===n.id))throw new Error(`Trigger schema '${n.id}' is not defined in component '${this.component.name}'`);const o=await this.attachments.getInstance(t);return!o||r.recreate||o.schemaRef!==n.id?await this.attachments.create(t,{id:t,schemaRef:n.id,data:((c=n==null?void 0:n.createDefaultConfig)==null?void 0:c.call(n))||{}}):o}async getTriggerList(){return await this.attachments.list()}getTriggerSchemaList(){return this.component.triggers||[]}async removeTrigger(t){await this.attachments.remove(t)}async retrieveTrigger(t){return await this.attachments.getInstance(t)}async getMigrationTasks(){const n=(await this.getTriggerList()).map(async r=>{const i=this.getTriggerSchemaList().find(c=>c.id===r.schemaRef),o=i==null?void 0:i.migrator,l={configData:r.triggerData};return o&&await o.needMigration(l)?()=>o.migrate(l):null});return Promise.all(n).then(r=>r.filter(i=>i))}async needMigration(){return(await this.getMigrationTasks()).length>0}async runMigration(){const t=await this.getMigrationTasks();await Promise.all(t.map(n=>n()))}}class zs{constructor(t,n,r){P(this,"operationManager");P(this,"triggerManager");P(this,"attachments");this.operationManager=new yp(t,r),this.triggerManager=new bp(t,n);const i=async o=>{const{id:l,triggerRef:c,operationRef:u}=await o.getItem(null);return{id:l,triggerRef:c,operationRef:u}};this.attachments=new Ms(t,"__INTERACTIONS",i)}async addInteraction(t,n){const r=t.id,i=n.id,o=`[${r}]:[${i}]`;await this.attachments.create(o,{id:o,triggerRef:r,operationRef:i})}getInteractionList(){return this.attachments.list()}async removeInteraction(t){const n=await this.attachments.getInstance(t);if(!n)return;const{triggerRef:r,operationRef:i}=n;await this.getTriggerRefCount(r)<=1&&await this.triggerManager.removeTrigger(r),await this.getOperationRefCount(i)<=1&&await this.operationManager.removeOperation(i),await this.attachments.remove(t)}async getOperationRefCount(t){return(await this.getInteractionList()).filter(r=>r.operationRef===t).length}async getTriggerRefCount(t){return(await this.getInteractionList()).filter(r=>r.triggerRef===t).length}async runInteraction(t,n){const i=(await this.getInteractionList()).filter(o=>o.triggerRef===t);await Promise.all(i.map(async o=>{try{return await this.operationManager.runOperation(o.operationRef,n)}catch(l){console.warn(`Failed to run operation '${o.operationRef}'`,l)}}))}}const qe=({vizManager:e,instance:t})=>V.useCreation(()=>new zs(t,e.resolveComponent(t.type),vn),[t,e]),ya=e=>{const{title:t="Variables",variables:n}=e,r=ae.useClipboard(),i=o=>{r.copy(o),yt.showNotification({color:"green",message:"Copied to clipboard"})};return s.jsxs(a.Paper,{withBorder:!0,p:"sm",children:[s.jsx(a.Text,{size:"xs",color:"dimmed",mb:"sm",children:t}),s.jsx(a.Stack,{style:{maxHeight:"500px"},children:n.map(o=>s.jsxs(a.Text,{size:"sm",children:[s.jsxs(a.Code,{color:"teal",children:["// ",o.description]}),s.jsx("br",{}),s.jsxs(a.Code,{onClick:()=>i(o.name),style:{cursor:"pointer"},children:[o.name," : ",o.valueType]})]},o.name))})]})};class jp{constructor(t,n){P(this,"operationId");P(this,"operation");P(this,"operationSchema");P(this,"variables",[]);this.operationManager=t,this.instance=n,R.makeAutoObservable(this)}get schemaList(){return this.operationManager.getOperationSchemaList()}async configOperation(t,n){const r=await this.operationManager.retrieveTrigger(t),i=this.operationManager.getOperationSchemaList().find(o=>o.id===(r==null?void 0:r.schemaRef));R.runInAction(()=>{this.operationId=t,this.operation=r,this.operationSchema=i,this.variables=n})}async changeSchema(t){this.operationId&&(await this.operationManager.createOrGetOperation(this.operationId,t),await this.configOperation(this.operationId,this.variables))}}function vp(e){return!!e.operationId}const wp=S.observer(({model:e,onClick:t})=>{var r;const n=(r=e.operationSchema)==null?void 0:r.displayName;return s.jsx(a.Button,{variant:"outline",onClick:t,children:n})}),Cp=S.observer(({model:e})=>{const t={operation:e.operation,instance:e.instance,variables:[]};return f.createElement(e.operationSchema.configRender,t)}),Sp=S.observer(({model:e})=>{const t=e.schemaList,n=t.map(i=>({label:i.displayName,value:i.id}));async function r(i){await e.changeSchema(t.find(o=>o.id===i))}return s.jsx(a.Select,{label:"Operation",data:n,onChange:r,value:e.operationSchema.id,withinPortal:!0,zIndex:340})}),_p=S.observer(e=>{const[t,{setTrue:n,setFalse:r}]=V.useBoolean(!1),{operationManager:i,operationId:o,instance:l,variables:c}=e,u=V.useCreation(()=>new jp(i,l),[i,l]);return V.useAsyncEffect(async()=>{await u.configOperation(o,c)},[o,u]),vp(u)?s.jsxs(s.Fragment,{children:[s.jsx(wp,{model:u,onClick:n}),s.jsx(a.Modal,{size:600,opened:t,onClose:r,title:"Operation Settings",zIndex:320,children:s.jsxs(a.Stack,{children:[s.jsx(Sp,{model:u}),s.jsxs(a.Tabs,{defaultValue:"settings",children:[s.jsxs(a.Tabs.List,{children:[s.jsx(a.Tabs.Tab,{value:"settings",children:"Settings"}),s.jsx(a.Tabs.Tab,{value:"variables",children:"Variables"})]}),s.jsx(a.Tabs.Panel,{value:"settings",pt:10,children:s.jsx(Cp,{model:u})}),s.jsx(a.Tabs.Panel,{value:"variables",pt:10,children:s.jsx(ya,{title:"Variables",variables:u.variables})})]})]})})]}):null});class kp{constructor(t,n){P(this,"triggerId");P(this,"trigger");P(this,"triggerSchema");P(this,"sampleData");this.triggerManager=t,this.instance=n,R.makeAutoObservable(this)}get schemaList(){return this.triggerManager.getTriggerSchemaList()}async configTrigger(t,n){const r=await this.triggerManager.retrieveTrigger(t),i=this.triggerManager.getTriggerSchemaList().find(o=>o.id===(r==null?void 0:r.schemaRef));R.runInAction(()=>{this.triggerId=t,this.trigger=r,this.triggerSchema=i,this.sampleData=n})}async changeSchema(t){this.triggerId&&(await this.triggerManager.createOrGetTrigger(this.triggerId,t),await this.configTrigger(this.triggerId,this.sampleData))}isReady(){return Tp(this)}}function Tp(e){return!!e.triggerId&&!!e.triggerSchema}function Dp(e,t){return V.useCreation(()=>new kp(e,t),[e,t])}const Ip=S.observer(({model:e,onClick:t})=>{const n=e.triggerSchema.nameRender,r={trigger:e.trigger,instance:e.instance,sampleData:e.sampleData};return s.jsx(a.Button,{variant:"outline",onClick:t,children:f.createElement(n,r)})}),Mp=S.observer(({model:e})=>{const t=e.schemaList,n=t.map(i=>({label:i.displayName,value:i.id}));async function r(i){await e.changeSchema(t.find(o=>o.id===i))}return s.jsx(a.Select,{label:"Trigger",data:n,value:e.triggerSchema.id,onChange:r})}),zp=S.observer(({model:e})=>{const t={trigger:e.trigger,instance:e.instance,sampleData:e.sampleData};return f.createElement(e.triggerSchema.configRender,t)}),Ap=S.observer(e=>{const[t,{setTrue:n,setFalse:r}]=V.useBoolean(!1),i=e.model;return s.jsxs(s.Fragment,{children:[s.jsx(a.Modal,{opened:t,onClose:r,title:"Setup Trigger",zIndex:320,children:s.jsxs(a.Stack,{children:[s.jsx(Mp,{model:i}),s.jsx(zp,{model:i}),s.jsx(ya,{title:"Payload",variables:i.triggerSchema.payload})]})}),s.jsx(Ip,{onClick:n,model:i})]})});function Ep(e,t){const[n,r]=f.useState([]);return V.useAsyncEffect(async()=>{const i=await e.getInteractionList();r(i)},[t,e]),n}const Pp=S.observer(({item:e,manager:t,instance:n,sampleData:r,variables:i,onRemove:o})=>{const{triggerRef:l,operationRef:c}=e,u=Dp(t.triggerManager,n);if(V.useAsyncEffect(async()=>{await u.configTrigger(l,r)},[u,l,r]),u.isReady()){const d=[...u.triggerSchema.payload,...i];return s.jsxs(a.Group,{children:[s.jsx(Ap,{model:u}),s.jsx(_p,{instance:n,operationId:c,variables:d,operationManager:t.operationManager}),s.jsx(a.ActionIcon,{"aria-label":"delete-interaction",variant:"filled",color:"red",onClick:()=>o(e),children:s.jsx(k.Trash,{size:16})})]})}return null}),Lp=e=>{const[t,n]=f.useState(0),{interactionManager:r,instance:i,sampleData:o,variables:l}=e,c=Ep(r,t),u=async()=>{const x=await r.triggerManager.createOrGetTrigger(ae.randomId(),r.triggerManager.getTriggerSchemaList()[0]),m=await r.operationManager.createOrGetOperation(ae.randomId(),r.operationManager.getOperationSchemaList()[0]);await r.addInteraction(x,m),n(j=>j+1)};async function d(x){await r.removeInteraction(x.id),n(m=>m+1)}const{data:p=0,loading:h}=V.useRequest(async()=>{try{return(await r.triggerManager.getTriggerSchemaList()).length}catch{return 0}});return s.jsxs(a.Stack,{children:[s.jsx(a.LoadingOverlay,{visible:h}),p===0&&s.jsx(a.Alert,{icon:s.jsx(k.AlertCircle,{size:16}),title:"Unavailable",color:"gray",children:"This visualization does not have available interactions to choose from"}),c.map(x=>s.jsx(Pp,{onRemove:d,instance:i,sampleData:o,variables:l,item:x,manager:e.interactionManager},x.id)),s.jsx(a.Button,{style:{width:"fit-content"},onClick:()=>u(),disabled:p===0,children:"Add interaction"})]})},Op=()=>{const{panel:e,data:t}=ht(),n=e.viz,{vizManager:r}=f.useContext(et),i=e.json,o=V.useCreation(()=>r.getOrCreateInstance(i),[r,i]),l=V.useCreation(()=>new zs(o,r.resolveComponent(n.type),vn),[o,n.type]);return f.useEffect(()=>o.instanceData.watchItem(null,y.throttle(c=>{e.viz.setConf(c)},100,{leading:!1,trailing:!0})),[o]),{instance:o,vizManager:r,interactionManager:l,sampleData:t,variables:[]}},Bp=()=>{const e=Op();return s.jsx(Lp,{...e})},ba={axisTick:{show:!0,alignWithLabel:!0,lineStyle:{width:2}},axisLine:{show:!0,lineStyle:{width:3}},splitLine:{show:!1},z:3};function $p(e){return y.defaultsDeep({},e,ba)}const Vp=Object.freeze(Object.defineProperty({__proto__:null,getXAxis:$p,xAxis:ba},Symbol.toStringTag,{value:"Module"})),ja={axisTick:{show:!1},axisLine:{show:!1,lineStyle:{width:3}},splitLine:{show:!0,lineStyle:{type:"dashed"}}};function Np(e){return y.defaultsDeep({},e,ja)}const qp=Object.freeze(Object.defineProperty({__proto__:null,getYAxis:Np,yAxis:ja},Symbol.toStringTag,{value:"Module"})),va={confine:!0,appendToBody:!0};function Fp(e){return y.defaultsDeep({},e,va)}const se={...Vp,...qp,...Object.freeze(Object.defineProperty({__proto__:null,getTooltip:Fp,tooltip:va},Symbol.toStringTag,{value:"Module"}))};function At({enabled:e,func_content:t}){return(n,r)=>{if(!e)return n;try{return new Function(`return ${t}`)()(n,r)}catch(i){return console.error(`[getEchartsXAxisLabel] failed parsing custom function, error: ${i.message}`),n}}}function Gp(e,t){const n=[],r=[];return{boxplotData:Object.entries(e).map(([o,l])=>{const c=l.map(M=>M[t]).sort((M,E)=>M-E),u=Ft.quantile(c,.25)??0,d=Ft.quantile(c,.5)??0,p=Ft.quantile(c,.75)??0,h=p-u,x=u-1.5*h,m=p+1.5*h,j=Math.max(c[0],x),C=Math.min(y.last(c)??0,m);return l.filter(M=>{const E=M[t];return E<j||E>C}).forEach(M=>n.push([o,M[t],M])),l.filter(M=>{const E=M[t];return E>=j&&E<=C}).forEach(M=>r.push([o,M[t],M])),{name:o,min:j,q1:u,median:d,q3:p,max:C}}),outliersData:n,scatterData:r}}function Wp(e,t){const{x_axis:n,y_axis:r}=e;if(!n.data_key||!r.data_key)return[];const i=z(n.data_key),o=z(r.data_key);if(i.queryID!==o.queryID)throw new Error("Please use the same query for X & Y axis");const l=y.groupBy(t[i.queryID],i.columnKey),{boxplotData:c,outliersData:u,scatterData:d}=Gp(l,o.columnKey);return[{source:c},{source:u},{source:d}]}function Rp(e){const t={top:30,left:20,right:15,bottom:25,containLabel:!0};return e.legend.orient==="vertical"&&(t.right=80),t}function Qp({config:e}){return{...e.legend,data:[{name:"Box",icon:"roundRect",itemStyle:{color:e.color}},{name:"Scatter",icon:"circle",itemStyle:{color:"#ED6A45",opacity:.5}},{name:"Outlier",icon:"circle",itemStyle:{color:"#ED6A45"}}]}}function Up(e,t,n){const r=t.reduce((i,o)=>{const l=rt(o,n);return i[o.name]=Le(o,l),i},{});return e.map(i=>({name:"refs",type:"scatter",data:[],markLine:{data:[{name:i.name,yAxis:Number(r[i.variable_key])}],silent:!0,symbol:["none","triangle"],symbolRotate:90,symbolSize:[10,8],label:{formatter:function(){return fn(i.template,t,n)},position:"insideEndTop"}}}))}const As=["max","q3","median","q1","min"],Es=[10,40];function Ps(e){return e.barLayout({barMinWidth:Es[0],barMaxWidth:Es[1],count:2})}function Kp(e,t,n){const{itemStyle:{color:r,borderColor:i,borderWidth:o}}=n,l=Ps(t),c=t.value(0),u=e.source[c],{min:d,q1:p,median:h,q3:x,max:m}=u,j={min:t.coord([c,d]),q1:t.coord([c,p]),median:t.coord([c,h]),q3:t.coord([c,x]),max:t.coord([c,m])},C={left:l[1].offset,center:(l[1].offset+l[1].width)/2,right:l[1].width},T={type:"group",children:[]},M=[{x1:j.max[0]+C.left,x2:j.max[0]+C.right,y1:j.max[1],y2:j.max[1]},{x1:j.median[0]+C.left,x2:j.median[0]+C.right,y1:j.median[1],y2:j.median[1]},{x1:j.min[0]+C.left,x2:j.min[0]+C.right,y1:j.min[1],y2:j.min[1]},{x1:j.min[0]+C.center,x2:j.min[0]+C.center,y1:j.min[1],y2:j.q1[1]},{x1:j.max[0]+C.center,x2:j.max[0]+C.center,y1:j.max[1],y2:j.q3[1]}],E={stroke:i,lineWidth:o};return M.forEach(F=>{T.children.push({type:"line",shape:F,style:E})}),T.children.push({type:"rect",shape:{x:j.q1[0]+C.left,y:j.q1[1],width:C.right-C.left,height:j.q3[1]-j.q1[1]},style:{fill:r,stroke:i,lineWidth:o}}),T}function Yp(e,t){const{color:n}=t,r={name:"Box",type:"custom",itemStyle:{color:n,borderColor:"#2F8CC0",borderWidth:2},emphasis:{disabled:!0},boxWidth:Es,datasetIndex:0};return r.renderItem=(i,o)=>Kp(e,o,r),r}function Xp(e){const t=Ps(e),n=t[0].width,r=e.value(0),i=e.value(1),[o,l]=e.coord([r,i]),u=o+t[0].offset+Math.random()*n;return{type:"circle",transition:["shape"],x:u,y:l,shape:{cx:0,cy:0,r:2},style:{fill:e.visual("color"),opacity:.5}}}function Jp(){const e={name:"Scatter",type:"custom",itemStyle:{color:"#ED6A45"},emphasis:{scale:2},datasetIndex:2};return e.renderItem=(t,n)=>Xp(n),e}function Zp(e,t){const n=Ps(e),r=n[0].width,i=e.value(0),o=e.value(1),[l,c]=e.coord([i,o]),d=l+n[0].offset+Math.random()*r;return{type:"circle",transition:["shape"],x:d,y:c,shape:{cx:0,cy:0,r:3},style:{fill:e.visual("color")}}}function Hp(){const e={name:"Outlier",type:"custom",itemStyle:{color:"#ED6A45"},emphasis:{scale:2},datasetIndex:1};return e.renderItem=(t,n)=>Zp(n),e}function eh(e,t){const n=t[0],r=Yp(n,e),i=Jp(),o=Hp();return[{name:"Placeholder Box",type:"boxplot",ignore:!0,silent:!0,itemStyle:{color:"none",borderColor:"none",opacity:0},boxWidth:[20,80],datasetIndex:0,encode:{y:As,x:"name",itemName:["name"],tooltip:As}},{name:"Outlier",type:"scatter",symbolSize:7,itemStyle:{color:"transparent"},ignore:!0,silent:!0,emphasis:{disabled:!0},datasetIndex:1},r,i,o]}const th=(e,t)=>{const n=As.map(o=>`
|
|
64
64
|
<tr>
|
|
65
65
|
<th style="text-align: right; padding: 0 1em;">${y.capitalize(o)}</th>
|
|
66
66
|
<td style="text-align: left; padding: 0 1em;">
|