@devtable/dashboard 4.16.1 → 4.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2644,6 +2644,7 @@ const ya = D(() => {
2644
2644
  }), /* @__PURE__ */ r(qi, {
2645
2645
  label: "Click to see description",
2646
2646
  position: "top-start",
2647
+ withinPortal: !0,
2647
2648
  children: /* @__PURE__ */ r(z, {
2648
2649
  variant: "subtle",
2649
2650
  color: "blue",
@@ -3126,7 +3127,7 @@ const Us = (t) => {
3126
3127
  getColor: Lt(["#fff7f1", "darkorange", "#b60000"]),
3127
3128
  name: "orange",
3128
3129
  category: "sequential"
3129
- }, nl = "4.16.1";
3130
+ }, nl = "4.16.2";
3130
3131
  class rl {
3131
3132
  constructor(e) {
3132
3133
  O(this, "staticColors", /* @__PURE__ */ new Map());
@@ -10331,6 +10332,9 @@ const ih = ["richText"], Ka = D(function({
10331
10332
  });
10332
10333
  return ih.includes(n.type) ? /* @__PURE__ */ r("div", {
10333
10334
  className: "viz-root",
10335
+ style: {
10336
+ height: e
10337
+ },
10334
10338
  ref: o,
10335
10339
  children: /* @__PURE__ */ r(Xe, {
10336
10340
  children: p
@@ -36,7 +36,7 @@ WHERE
36
36
  -- SQL snippets
37
37
  AND \${sql_snippets.author_email_condition}
38
38
  \${sql_snippets.order_by_clause}
39
- `,In=A.observer(function({showSQLSnippets:e=!0,sx:n={}}){const i=Q(),s=i.context.current,l=b.default.useMemo(()=>{const o={context:s,filters:i.filters.values};if(e){const u=i.sqlSnippets.current.reduce((d,h)=>(d[h.key]=h.value,d),{});o.sql_snippets=u}return JSON.stringify(o,null,2)},[s,i.sqlSnippets.current,i.filters.values,e]);return c(a.Stack,{sx:{border:"1px solid #eee",maxWidth:"40%",overflow:"hidden",...n},children:[r(a.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:r(a.Text,{weight:500,children:"Global Variables"})}),c(a.Stack,{px:"md",pb:"md",sx:{width:"100%"},children:[r(Ie.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:qi}),r(a.Text,{weight:500,sx:{flexGrow:0},children:"Current Values"}),r(Ie.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:l})]})]})});function Gi({data:t}){return t.length===0?r(a.Box,{sx:{height:"5em"}}):c(a.Table,{children:[r("thead",{children:r("tr",{children:Object.keys(t==null?void 0:t[0]).map(e=>r("th",{children:r(a.Text,{weight:700,color:"#000",children:e})},e))})}),r("tbody",{children:t.slice(0,10).map((e,n)=>r("tr",{children:Object.values(e).map((i,s)=>r("td",{children:r(a.Group,{sx:{"&, .mantine-Text-root":{fontFamily:"monospace"}},children:r(a.Text,{children:i})})},`${i}--${s}`))},`row-${n}`))})]})}const Dn=A.observer(function({id:e}){const n=Q(),{data:i,state:s}=n.getDataStuffByID(e),l=s==="loading",o=()=>{n.queries.refetchDataByQueryID(e)};return c(a.Stack,{my:"xl",sx:{border:"1px solid #eee"},children:[c(a.Group,{position:"apart",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[c(a.Group,{position:"left",children:[r(a.Text,{weight:500,children:"Preview Data"}),i.length>10&&c(a.Text,{size:"sm",color:"gray",children:["Showing 10 rows of ",i.length]})]}),r(a.ActionIcon,{mr:15,variant:"subtle",color:"blue",disabled:l,onClick:o,children:r(T.Refresh,{size:15})})]}),c(a.Box,{sx:{position:"relative"},children:[r(a.LoadingOverlay,{visible:l}),r(Gi,{data:i})]})]})}),Bi=w.forwardRef(({label:t,type:e,...n},i)=>c(a.Group,{position:"apart",ref:i,...n,children:[r(a.Text,{children:t}),r(a.Text,{children:e})]})),Tn=A.observer(function({value:e,onChange:n}){const{data:i=[],loading:s}=R.useRequest(Ei,{refreshDeps:[]},[]),l=w.useMemo(()=>i.map(u=>({label:u.key,value:u.key,type:u.type})),[i]),o=w.useMemo(()=>l.reduce((u,d)=>(u[d.value]=d.type,u),{}),[l]);return r(a.Select,{label:"Data Source",data:l,itemComponent:Bi,sx:{flex:1},disabled:s,value:e.key,onChange:u=>{u!==null&&n({key:u,type:o[u]})}})});function _n({value:t}){const e=Q(),n=e.context.current,i=b.default.useMemo(()=>bn(t,n,e.sqlSnippets.current,e.filters.values),[t,n,e.sqlSnippets.current,e.filters.values]);return r(Ie.Prism,{language:"sql",colorScheme:"light",children:i})}const Li=A.observer(function({queryModel:e,setCurrentID:n}){const i=b.default.useRef(e.id),[s,l]=b.default.useState(i.current);b.default.useEffect(()=>{i.current!==e.id&&(l(e.id),i.current=e.id)},[i,e.id]);const[o,u]=b.default.useState(e.sql);b.default.useEffect(()=>{u(m=>m!==e.sql?e.sql:m)},[e.sql]);const d=o!==e.sql,h=()=>{e.setSQL(o)},f=()=>{n(s),e.setID(s)};return c(a.Stack,{sx:{border:"1px solid #eee",flexGrow:1},children:[r(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:r(a.Text,{weight:500,children:"Edit Query"})}),c(a.Stack,{my:0,p:"md",pr:40,children:[c(a.Group,{grow:!0,children:[r(a.TextInput,{placeholder:"An ID unique in this dashboard",label:"ID",required:!0,sx:{flex:1},value:s,onChange:m=>{l(m.currentTarget.value)},rightSection:r(a.ActionIcon,{mr:5,variant:"filled",color:"blue",disabled:s===e.id,onClick:f,children:r(T.DeviceFloppy,{size:18})})}),r(Tn,{value:{type:e.type,key:e.key},onChange:({type:m,key:g})=>{e.setKey(g),e.setType(m)}})]}),c(a.Tabs,{defaultValue:"SQL",children:[c(a.Tabs.List,{children:[r(a.Tabs.Tab,{value:"SQL",children:"SQL"}),r(a.Tabs.Tab,{value:"Preview",children:"Preview"})]}),r(a.Tabs.Panel,{value:"SQL",pt:"sm",children:c(a.Box,{sx:{position:"relative"},children:[r(a.Textarea,{autosize:!0,minRows:12,maxRows:24,className:"code-textarea",value:o,onChange:m=>{u(m.currentTarget.value)}}),r(a.ActionIcon,{mr:5,variant:"filled",color:"blue",sx:{position:"absolute",right:10,top:10},disabled:!d,onClick:h,children:r(T.DeviceFloppy,{size:20})})]})}),r(a.Tabs.Panel,{value:"Preview",pt:"sm",children:r(_n,{value:e.sql})})]})]})]})}),Ri=A.observer(function({id:e,setID:n}){const i=Q(),s=b.default.useMemo(()=>i.queries.findByID(e),[i.queries,e]);return e?s?r(Li,{queryModel:s,setCurrentID:n}):r("span",{children:"Invalid Query ID"}):null});var pe=(t=>(t.Postgresql="postgresql",t.MySQL="mysql",t.HTTP="http",t))(pe||{});const $i=A.observer(function({id:e,setID:n}){const i=Q(),s=()=>{var o;n((o=i.queries.firstID)!=null?o:"")};b.default.useEffect(()=>{if(!e){s();return}i.queries.current.findIndex(u=>u.id===e)===-1&&s()},[e,i.queries.current,s]);const l=()=>{const o=U.randomId();i.queries.append(y.cast({id:o,type:pe.Postgresql,key:"",sql:""})),n(o)};return r(a.Group,{pb:"xl",children:c(a.Group,{position:"left",sx:{maxWidth:"600px",alignItems:"baseline"},children:[r(a.Text,{children:"Select a Query"}),r(a.Select,{data:i.queries.options,value:e,onChange:n,allowDeselect:!1,clearable:!1,sx:{flexGrow:1}}),r(a.Text,{children:"or"}),r(a.Group,{position:"center",mt:"md",children:r(a.Button,{onClick:l,children:"Add a Query"})})]})})}),Ni=A.observer(function(){const[e,n]=b.default.useState("");return c(a.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 225px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",width:"100%",padding:0,margin:0}},padding:"md",children:[c(a.Group,{position:"apart",grow:!0,align:"stretch",noWrap:!0,children:[c(a.Stack,{sx:{flexGrow:1,maxWidth:"calc(60% - 16px)"},children:[r($i,{id:e,setID:n}),r(Ri,{id:e,setID:n})]}),r(In,{})]}),r(Dn,{id:e})]})});function ji({value:t}){const n=Q().context.current,i=b.default.useMemo(()=>ki(t,n),[t,n]);return c(a.Stack,{children:[r(a.Text,{children:"Preview"}),r(Ie.Prism,{language:"sql",noCopy:!0,colorScheme:"dark",children:i})]})}const Wi=A.observer(function(){const e=Q(),n=()=>e.sqlSnippets.append(y.cast({key:U.randomId(),value:""}));return c(a.Stack,{sx:{border:"1px solid #eee",flexGrow:1},children:[r(a.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:r(a.Text,{weight:500,children:"SQL Snippets"})}),r(a.Group,{px:"md",pb:"md",pt:"md",children:c(a.Stack,{sx:{width:"100%",position:"relative"},children:[e.sqlSnippets.current.map((i,s)=>c(a.Stack,{my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[r(a.TextInput,{label:"Key",required:!0,value:i.key,onChange:l=>{i.setKey(l.currentTarget.value)}}),r(a.Textarea,{minRows:3,label:"Value",required:!0,value:i.value,onChange:l=>{i.setValue(l.currentTarget.value)},className:"code-textarea"}),r(ji,{value:i.value}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>e.sqlSnippets.remove(s),sx:{position:"absolute",top:15,right:5},children:r(T.Trash,{size:16})})]},s)),r(a.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"40%"},mx:"auto",children:r(a.Button,{variant:"default",onClick:n,children:"Add a snippet"})})]})})]})});function Qi(){return r(a.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 225px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",width:"100%",padding:0,margin:0}},padding:"md",children:c(a.Group,{position:"apart",grow:!0,align:"stretch",noWrap:!0,children:[r(Wi,{}),r(In,{showSQLSnippets:!1})]})})}const Yi=A.observer(function({opened:e,close:n}){const{freezeLayout:i}=b.default.useContext(le);return b.default.useEffect(()=>{i(e)},[e]),r(a.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:n,title:"Data Settings",trapFocus:!0,onDragStart:s=>{s.stopPropagation()},children:c(a.Tabs,{defaultValue:"Queries",children:[c(a.Tabs.List,{children:[r(a.Tabs.Tab,{value:"SQL Snippet",children:"SQL Snippet"}),r(a.Tabs.Tab,{value:"Queries",children:"Queries"})]}),r(a.Tabs.Panel,{value:"SQL Snippet",pt:"sm",children:r(Qi,{})}),r(a.Tabs.Panel,{value:"Queries",pt:"sm",children:r(Ni,{})})]})})});var ie=(t=>(t.Select="select",t.MultiSelect="multi-select",t.TextInput="text-input",t.Checkbox="checkbox",t.DateRange="date-range",t))(ie||{});const An=y.types.model({type:y.types.enumeration("DataSourceType",[pe.Postgresql,pe.MySQL,pe.HTTP]),key:y.types.string,sql:y.types.string}),kn=y.types.model("FilterConfigModel_TextInput",{required:y.types.boolean,default_value:y.types.string}).actions(t=>({setRequired(e){t.required=e},setDefaultValue(e){t.default_value=e}})),Mn=()=>kn.create({required:!1,default_value:""}),Ui=A.observer(function({config:e}){return r(N,{children:r(a.Checkbox,{checked:e.default_value,onChange:n=>e.setDefaultValue(n.currentTarget.checked),label:"Default Checked"})})}),Xi=[{label:"2022",value:"YYYY"},{label:"2022-01",value:"YYYY-MM"},{label:"2022-01-01",value:"YYYY-MM-DD"}],Ji=A.observer(function({config:e}){return c(N,{children:[c(a.Group,{children:[r(a.Checkbox,{checked:e.required,onChange:n=>e.setRequired(n.currentTarget.checked),label:"Required"}),r(a.Checkbox,{checked:e.clearable,onChange:n=>e.setClearable(n.currentTarget.checked),label:"Clearable"})]}),r(a.Select,{data:Xi,label:"Display Format",value:e.inputFormat,onChange:e.setInputFormat}),r(yn,{label:"Default Value",config:e,value:e.default_value,onChange:e.setDefaultValue})]})});function Ki({data:t}){return t.length===0?r(a.Box,{sx:{height:"5em"}}):c(a.Table,{children:[r("thead",{children:r("tr",{children:Object.keys(t==null?void 0:t[0]).map(e=>r("th",{children:r(a.Text,{weight:700,color:"#000",children:e})},e))})}),r("tbody",{children:t.slice(0,3).map((e,n)=>r("tr",{children:Object.values(e).map((i,s)=>r("td",{children:r(a.Group,{sx:{"&, .mantine-Text-root":{fontFamily:"monospace"}},children:r(a.Text,{children:i})})},`${i}--${s}`))},`row-${n}`))}),t.length>3&&r("tfoot",{children:r("tr",{children:r("td",{colSpan:Object.keys(t==null?void 0:t[0]).length,children:c(a.Text,{color:"gray",size:"sm",children:[t.length-3," more row(s) hidden"]})})})})]})}const Zi=A.observer(function({query:e}){const{data:n=[],loading:i,refresh:s}=R.useRequest(xt(e),{refreshDeps:[e]});return c(a.Stack,{my:0,children:[c(a.Group,{position:"apart",children:[r(a.Text,{size:"md",pl:"sm",children:"Fetched Data"}),r(a.Button,{size:"xs",onClick:s,disabled:!e.sql||!e.key,children:"Retry"})]}),c(a.Box,{sx:{position:"relative"},children:[r(a.LoadingOverlay,{visible:i,exitTransitionDuration:0}),r(Ki,{data:n})]})]})}),En=A.observer(function({value:e,onChange:n}){return c(a.Stack,{my:0,children:[r(Tn,{value:e,onChange:({type:i,key:s})=>{n({...e,type:i,key:s})}}),c(a.Tabs,{defaultValue:"SQL",children:[c(a.Tabs.List,{children:[r(a.Tabs.Tab,{value:"SQL",children:"SQL"}),r(a.Tabs.Tab,{value:"Preview",children:"Preview"}),r(a.Tabs.Tab,{value:"Data",children:"Data"})]}),r(a.Tabs.Panel,{value:"SQL",pt:"sm",children:r(a.Textarea,{autosize:!0,minRows:12,maxRows:24,className:"code-textarea",value:e.sql,onChange:i=>{n({...e,sql:i.currentTarget.value})},placeholder:"SELECT name AS label, id AS value"})}),r(a.Tabs.Panel,{value:"Preview",pt:"sm",children:r(_n,{value:e.sql})}),r(a.Tabs.Panel,{value:"Data",pt:"sm",children:r(Zi,{query:e})})]})]})}),Hi=A.observer(function({config:e}){const n=()=>{e.addStaticOption({label:"",value:""})},i=e.static_options,s=[...i];return c(N,{children:[r(a.Divider,{label:"Configure options",labelPosition:"center"}),i.length>0&&r(a.MultiSelect,{label:"Default Selection",data:s,value:e.default_value,onChange:e.setDefaultValue}),i.map((l,o)=>c(a.Group,{sx:{position:"relative"},pr:"40px",children:[r(a.TextInput,{label:"Label",required:!0,value:e.static_options[o].label,onChange:u=>{e.static_options[o].setLabel(u.currentTarget.value)},sx:{flexGrow:1}}),r(a.TextInput,{label:"Value",required:!0,value:e.static_options[o].value,onChange:u=>{e.static_options[o].setValue(u.currentTarget.value)},sx:{flexGrow:1}}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>e.removeStaticOption(o),sx:{position:"absolute",top:28,right:5},children:r(T.Trash,{size:16})})]})),r(a.Button,{size:"xs",color:"blue",leftIcon:r(T.PlaylistAdd,{size:20}),onClick:n,sx:{width:"50%"},mx:"auto",children:"Add an Option"}),r(a.Divider,{label:"Or fetch options from database",labelPosition:"center"}),r(En,{value:e.options_query,onChange:e.setOptionsQuery})]})}),ea=A.observer(function({config:e}){const n=()=>{e.addStaticOption({label:"",value:""})},i=e.static_options,s=[{label:"No default selection",value:""},...i];return c(N,{children:[r(a.Checkbox,{checked:e.required,onChange:l=>e.setRequired(l.currentTarget.checked),label:"Required"}),r(a.Divider,{label:"Configure options",labelPosition:"center"}),i.length>0&&r(a.Select,{label:"Default Selection",data:s,value:e.default_value,onChange:e.setDefaultValue}),i.map((l,o)=>c(a.Group,{sx:{position:"relative"},pr:"40px",children:[r(a.TextInput,{label:"Label",required:!0,value:e.static_options[o].label,onChange:u=>{e.static_options[o].setLabel(u.currentTarget.value)},sx:{flexGrow:1}}),r(a.TextInput,{label:"Value",required:!0,value:e.static_options[o].value,onChange:u=>{e.static_options[o].setValue(u.currentTarget.value)},sx:{flexGrow:1}}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>e.removeStaticOption(o),sx:{position:"absolute",top:28,right:5},children:r(T.Trash,{size:16})})]},o)),r(a.Button,{size:"xs",color:"blue",leftIcon:r(T.PlaylistAdd,{size:20}),onClick:n,sx:{width:"50%"},mx:"auto",children:"Add an Option"}),r(a.Divider,{label:"Or fetch options from database",labelPosition:"center"}),r(En,{value:e.options_query,onChange:e.setOptionsQuery})]})}),ta=A.observer(function({config:e}){return c(N,{children:[r(a.TextInput,{label:"Default Value",value:e.default_value,onChange:n=>{e.setDefaultValue(n.currentTarget.value)}}),r(a.Checkbox,{checked:e.required,onChange:n=>e.setRequired(n.currentTarget.checked),label:"Required"})]})}),na=A.observer(function({filter:e}){const n=e.config.default_value,[i,s]=b.default.useState(n);return b.default.useEffect(()=>{s(n)},[n]),c(a.Box,{sx:{maxWidth:"30em"},children:[r(a.Text,{pb:"md",color:"gray",children:"Preview"}),r(xn,{filter:e,value:i,onChange:s}),r(a.Text,{pt:"lg",pb:"md",color:"gray",children:"Config"}),r(Ie.Prism,{language:"json",colorScheme:"dark",noCopy:!0,children:JSON.stringify(e,null,4)})]})}),ra={select:ea,"multi-select":Hi,"text-input":ta,checkbox:Ui,"date-range":Ji},ia=[{label:"Select",value:"select"},{label:"Multi Select",value:"multi-select"},{label:"Text Input",value:"text-input"},{label:"Checkbox",value:"checkbox"},{label:"Date Range",value:"date-range"}],aa=A.observer(function({filter:e,index:n}){const i=Q(),s=b.default.useMemo(()=>ra[e.type],[e.type]);return c(a.SimpleGrid,{cols:2,children:[c(a.Box,{pl:"md",children:[r(a.Text,{pb:"md",color:"gray",children:"Edit"}),c(a.Stack,{sx:{maxWidth:"30em"},children:[r(a.NumberInput,{label:"Placement Order",required:!0,value:e.order,onChange:e.setOrder,hideControls:!0}),r(a.MultiSelect,{label:"Visible in...",data:i.views.options,value:e.visibleInViewsIDs,onChange:e.setVisibleInViewsIDs}),r(a.TextInput,{label:"Key",placeholder:"A unique key to refer",required:!0,value:e.key,onChange:l=>{e.setKey(l.currentTarget.value)}}),r(a.TextInput,{label:"Label",placeholder:"Label for this field",required:!0,value:e.label,onChange:l=>{e.setLabel(l.currentTarget.value)}}),r(a.Select,{label:"Widget",data:ia,required:!0,value:e.type,onChange:e.setType}),r(s,{config:e.config,index:n})]})]}),r(na,{filter:e})]})}),nd="",sa=A.observer(function(){const e=Q(),n=e.filters.current,i=()=>{const s=U.randomId(),l={id:s,key:s,label:s,order:n.length+1,type:ie.TextInput,config:Mn(),visibleInViewsIDs:["Main"]};e.filters.append(l)};return c(a.Box,{sx:{height:"90vh",maxHeight:"calc(100vh - 185px)"},p:0,children:[r(a.Group,{sx:{position:"absolute",top:"16px",right:"16px"},children:r(a.Button,{size:"xs",color:"red",leftIcon:r(T.Recycle,{size:20}),disabled:!e.filters.changed,onClick:e.filters.reset,children:"Revert Changes"})}),r(a.Tabs,{className:"filter-settings-tabs",orientation:"vertical",defaultValue:e.filters.firstID,styles:{root:{display:"block"}},children:c(a.Group,{sx:{height:"100%"},children:[c(a.Stack,{sx:{height:"100%"},children:[r(a.Tabs.List,{position:"left",sx:{flexGrow:1,width:"200px"},children:e.filters.current.map(s=>r(a.Tabs.Tab,{value:s.id,children:s.label},s.id))}),r(a.Button,{size:"xs",color:"blue",leftIcon:r(T.PlaylistAdd,{size:20}),onClick:i,children:"Add a Filter"})]}),r(a.Box,{sx:{flexGrow:1,height:"100%"},children:e.filters.current.map((s,l)=>r(a.Tabs.Panel,{value:s.id,sx:{height:"100%"},children:c(a.Stack,{sx:{height:"100%"},spacing:"sm",children:[r(a.Box,{sx:{flexGrow:1,maxHeight:"calc(100% - 52px)",overflow:"scroll"},children:r(aa,{filter:s,index:l})}),r(a.Group,{position:"right",pt:10,children:r(a.Button,{size:"xs",color:"red",leftIcon:r(T.Trash,{size:20}),onClick:()=>e.filters.remove(l),children:"Delete this filter"})})]})},s.id))})]})})]})}),la=A.observer(function({opened:e,close:n}){const{freezeLayout:i}=b.default.useContext(le);return b.default.useEffect(()=>{i(e)},[e]),r(a.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:n,title:"Filters",trapFocus:!0,onDragStart:s=>{s.stopPropagation()},withCloseButton:!1,children:r(sa,{})})});var Vn=(t=>(t.Use="use",t.Edit="edit",t))(Vn||{}),fe=(t=>(t.Division="div",t.Modal="modal",t))(fe||{}),Pn=(t=>(t.Select="select",t.MultiSelect="multi-select",t.TextInput="text-input",t.Checkbox="checkbox",t.DateRange="date-range",t))(Pn||{});const oa=A.observer(()=>{const e=Q().views.VIE;return!e||e.type!==fe.Division?null:c(a.Stack,{children:[r(a.Divider,{mt:8,mb:0,label:"Division settings",labelPosition:"center"}),r(a.Text,{align:"center",size:"xs",color:"dimmed",children:"Under construction"})]})}),ua=A.observer(()=>{const e=Q().views.VIE;return!e||e.type!==fe.Modal?null:c(a.Stack,{children:[r(a.Divider,{mt:8,label:"Modal settings",labelPosition:"center"}),c(a.Group,{grow:!0,children:[r(a.TextInput,{label:"Width",value:e.config.width,onChange:n=>e.updateConfig("width",n.currentTarget.value),placeholder:"600px / 50vw"}),r(a.TextInput,{label:"Height",value:e.config.height,onChange:n=>e.updateConfig("height",n.currentTarget.value),placeholder:"600px / 50vw"})]})]})}),ca=A.observer(()=>c(N,{children:[r(oa,{}),r(ua,{})]})),da=[{label:"Division",value:fe.Division},{label:"Modal",value:fe.Modal}],pa=A.observer(()=>{const e=Q().views.VIE;return e?c(a.Stack,{sx:{position:"relative"},children:[r(a.TextInput,{label:"Name",value:e.name,onChange:n=>{e.setName(n.currentTarget.value)}}),r(a.Select,{label:"Type",value:e.type,onChange:e.setType,data:da}),r(ca,{})]}):null}),fa=A.observer(({opened:t,close:e})=>{var s;const n=Q(),{freezeLayout:i}=b.default.useContext(le);return b.default.useEffect(()=>{i(t)},[t]),r(a.Modal,{size:"500px",overflow:"inside",opened:t,onClose:e,withCloseButton:!1,styles:{header:{width:"100%"},title:{width:"100%"}},title:c(a.Group,{position:"apart",children:[c(a.Text,{sx:{flexGrow:1},children:["Editing ",(s=n.views.VIE)==null?void 0:s.name]}),r(a.ActionIcon,{size:18,color:"red",onClick:n.views.removeVIE,disabled:n.views.isVIETheFirstView,children:r(T.Trash,{size:18})})]}),trapFocus:!0,onDragStart:l=>{l.stopPropagation()},children:r(pa,{})})}),ha=w.forwardRef(({label:t,type:e,...n},i)=>e!=="TRIGGER_TO_ADD"?r("div",{ref:i,...n,children:c(a.Group,{noWrap:!0,position:"apart",children:[r(a.Text,{size:"sm",children:t}),r(a.Text,{size:"xs",color:"dimmed",children:e})]})}):r("div",{ref:i,...n,children:r(a.Group,{noWrap:!0,grow:!0,children:r(a.Text,{size:"sm",align:"center",color:"#228be6",children:t})})})),zn="TRIGGER_TO_ADD",ga=A.observer(({value:t,onChange:e,triggerAdd:n,triggerEdit:i,options:s})=>{const l=w.useMemo(()=>[...s,{label:"Add a View",value:zn,type:"TRIGGER_TO_ADD"}],[s,n]),o=u=>{u!==zn?e(u):n()};return c(a.Group,{position:"left",spacing:0,sx:{minWidth:"260px"},children:[r(a.Select,{value:t,onChange:o,placeholder:"Pick a View",itemComponent:ha,data:l,nothingFound:"Empty",sx:{flexGrow:1},styles:{input:{borderTopRightRadius:0,borderBottomRightRadius:0}}}),r(a.ActionIcon,{onClick:i,variant:"default",size:36,sx:{borderLeft:0,borderTopLeftRadius:0,borderBottomLeftRadius:0,"&:active":{transform:"none",svg:{transform:"translateY(1px)"}}},children:r(T.Settings,{size:20})})]})}),ma=A.observer(()=>{const t=Q(),[e,n]=w.useState(!1),i=()=>{n(!0)},s=()=>{n(!1)};return c(N,{children:[r(ga,{value:t.views.idOfVIE,onChange:t.views.setIDOfVIE,triggerAdd:t.views.addARandomNewView,triggerEdit:i,options:t.views.options}),r(fa,{opened:e,close:s})]})});function ya({opened:t,close:e,getCurrentSchema:n}){const{freezeLayout:i}=b.default.useContext(le);b.default.useEffect(()=>{i(t)},[t]);const s=b.default.useMemo(()=>JSON.stringify(n(),null,2),[t]);return r(a.Modal,{size:"96vw",overflow:"inside",opened:t,onClose:e,title:"This dashboard is described by this schema",trapFocus:!0,onDragStart:l=>{l.stopPropagation()},children:t&&r(Ie.Prism,{language:"json",sx:{width:"100%"},colorScheme:"dark",children:s})})}const On=A.observer(function({saveChanges:e}){const n=Q(),i=b.default.useCallback(()=>{const H=n.queries.current,Ne=n.views.current,Me=n.sqlSnippets.current;return{filters:n.filters.current,views:Ne,definition:{sqlSnippets:Me,queries:H}}},[n]),s=()=>{n.filters.reset(),n.views.reset(),n.sqlSnippets.reset(),n.queries.reset()},l=n.views.changed||n.sqlSnippets.changed||n.queries.changed||n.filters.changed,{inEditMode:o,inUseMode:u}=b.default.useContext(le),[d,h]=b.default.useState(!1),f=()=>h(!0),m=()=>h(!1),[g,v]=b.default.useState(!1),_=()=>v(!0),k=()=>v(!1),[E,L]=b.default.useState(!1),B=()=>L(!0),ue=()=>L(!1);return c(a.Group,{position:"apart",pt:0,px:10,pb:"xs",children:[r(a.Group,{position:"left",children:o&&r(ma,{})}),c(a.Group,{position:"right",children:[!u&&r(a.Button,{variant:"default",size:"xs",disabled:!n.views.VIE,onClick:n.views.addAPanelToVIE,leftIcon:r(T.PlaylistAdd,{size:20}),children:"Add a Panel"}),o&&r(a.Button,{variant:"default",size:"xs",onClick:_,leftIcon:r(T.Filter,{size:20}),children:"Filters"}),o&&r(a.Button,{variant:"default",size:"xs",onClick:f,leftIcon:r(T.Database,{size:20}),children:"Data Settings"}),!u&&r(a.Button,{variant:"default",size:"xs",onClick:e,disabled:!l,leftIcon:r(T.DeviceFloppy,{size:20}),children:"Save Changes"}),!u&&r(a.Button,{color:"red",size:"xs",disabled:!l,onClick:s,leftIcon:r(T.Recycle,{size:20}),children:"Revert Changes"}),c(a.Menu,{width:180,children:[r(a.Menu.Target,{children:r(a.Button,{variant:"default",size:"xs",leftIcon:r(T.Share,{size:20}),children:"Export"})}),c(a.Menu.Dropdown,{children:[r(a.Menu.Item,{icon:r(T.Download,{size:14}),onClick:n.queries.downloadAllData,children:"Download Data"}),r(a.Menu.Item,{icon:r(T.Code,{size:14}),onClick:B,children:"View Schema"})]})]})]}),r(la,{opened:g,close:k}),r(Yi,{opened:d,close:m}),r(ya,{opened:E,close:ue,getCurrentSchema:i})]})}),rd="",Fn=A.observer(()=>{const{freezeLayout:t}=b.default.useContext(le),[e,n]=b.default.useState(!1),{panel:i}=K();return b.default.useEffect(()=>{t(e)},[e]),!i.description||i.description==="<p><br></p>"?null:c(N,{children:[r(a.Modal,{opened:e,onClose:()=>n(!1),title:i.title,withCloseButton:!1,children:r(dn.default,{readOnly:!0,value:i.description,onChange:O.default.noop,sx:{border:"none"}})}),r(a.Tooltip,{label:"Click to see description",position:"top-start",children:r(a.ActionIcon,{variant:"subtle",color:"blue",onClick:()=>n(s=>!s),sx:{verticalAlign:"baseline",cursor:"pointer"},children:r(T.InfoCircle,{size:20})})})]})}),qn=t=>{const{title:e="Variables",variables:n}=t,i=U.useClipboard(),s=l=>{i.copy(l),ht.showNotification({color:"green",message:"Copied to clipboard"})};return c(a.Paper,{withBorder:!0,p:"sm",children:[r(a.Text,{size:"xs",color:"dimmed",mb:"sm",children:e}),r(a.Stack,{style:{maxHeight:"300px"},children:n.map(l=>c(a.Text,{size:"sm",children:[c(a.Code,{color:"teal",children:["// ",l.description]}),r("br",{}),c(a.Code,{onClick:()=>s(l.name),style:{cursor:"pointer"},children:[l.name," : ",l.valueType]})]},l.name))})]})};class va{constructor(e,n){V(this,"operationId");V(this,"operation");V(this,"operationSchema");V(this,"variables",[]);this.operationManager=e,this.instance=n,J.makeAutoObservable(this)}get schemaList(){return this.operationManager.getOperationSchemaList()}async configOperation(e,n){const i=await this.operationManager.retrieveTrigger(e),s=this.operationManager.getOperationSchemaList().find(l=>l.id===(i==null?void 0:i.schemaRef));J.runInAction(()=>{this.operationId=e,this.operation=i,this.operationSchema=s,this.variables=n})}async changeSchema(e){this.operationId&&(await this.operationManager.createOrGetOperation(this.operationId,e),await this.configOperation(this.operationId,this.variables))}}function ba(t){return!!t.operationId}const xa=A.observer(({model:t,onClick:e})=>{var i;const n=(i=t.operationSchema)==null?void 0:i.displayName;return r(a.Button,{variant:"outline",onClick:e,children:n})}),Ca=A.observer(({model:t})=>{const e={operation:t.operation,instance:t.instance,variables:[]};return w.createElement(t.operationSchema.configRender,e)});function wa({model:t}){const e=t.schemaList,n=e.map(s=>({label:s.displayName,value:s.id}));async function i(s){await t.changeSchema(e.find(l=>l.id===s))}return r(a.Select,{label:"Operation",data:n,onChange:i,value:t.operationSchema.id})}const Sa=A.observer(t=>{const[e,{setTrue:n,setFalse:i}]=R.useBoolean(!1),{operationManager:s,operationId:l,instance:o,variables:u}=t,d=R.useCreation(()=>new va(s,o),[s,o]);return R.useAsyncEffect(async()=>{await d.configOperation(l,u)},[l,d]),ba(d)?c(N,{children:[r(xa,{model:d,onClick:n}),r(a.Modal,{opened:e,onClose:i,title:"Operation Settings",closeButtonLabel:"close",children:c(a.Stack,{children:[r(wa,{model:d}),r(Ca,{model:d}),r(qn,{title:"Variables",variables:d.variables})]})})]}):null});class Ia{constructor(e,n){V(this,"triggerId");V(this,"trigger");V(this,"triggerSchema");V(this,"sampleData");this.triggerManager=e,this.instance=n,J.makeAutoObservable(this)}get schemaList(){return this.triggerManager.getTriggerSchemaList()}async configTrigger(e,n){const i=await this.triggerManager.retrieveTrigger(e),s=this.triggerManager.getTriggerSchemaList().find(l=>l.id===(i==null?void 0:i.schemaRef));J.runInAction(()=>{this.triggerId=e,this.trigger=i,this.triggerSchema=s,this.sampleData=n})}async changeSchema(e){this.triggerId&&(await this.triggerManager.createOrGetTrigger(this.triggerId,e),await this.configTrigger(this.triggerId,this.sampleData))}isReady(){return Da(this)}}function Da(t){return!!t.triggerId&&!!t.triggerSchema}function Ta(t,e){return R.useCreation(()=>new Ia(t,e),[t,e])}const _a=A.observer(({model:t,onClick:e})=>{const n=t.triggerSchema.nameRender,i={trigger:t.trigger,instance:t.instance,sampleData:t.sampleData};return r(a.Button,{variant:"outline",onClick:e,children:w.createElement(n,i)})}),Aa=A.observer(({model:t})=>{const e=t.schemaList,n=e.map(s=>({label:s.displayName,value:s.id}));async function i(s){await t.changeSchema(e.find(l=>l.id===s))}return r(a.Select,{label:"Trigger",data:n,value:t.triggerSchema.id,onChange:i})}),ka=A.observer(({model:t})=>{const e={trigger:t.trigger,instance:t.instance,sampleData:t.sampleData};return w.createElement(t.triggerSchema.configRender,e)}),Ma=A.observer(t=>{const[e,{setTrue:n,setFalse:i}]=R.useBoolean(!1),s=t.model;return c(N,{children:[r(a.Modal,{opened:e,onClose:i,title:"Setup Trigger",closeButtonLabel:"close setup",children:c(a.Stack,{children:[r(Aa,{model:s}),r(ka,{model:s}),r(qn,{title:"Payload",variables:s.triggerSchema.payload})]})}),r(_a,{onClick:n,model:s})]})});class ke{constructor(e,n){this.root=e,this.path=n}async deleteItem(e){e===null&&await this.root.deleteItem(this.path);const n=await this.root.getItem(this.path)||{};await this.root.setItem(this.path,S.omit(n,e))}async getItem(e){const n=await this.root.getItem(this.path);return e===null?n:S.get(n,e)}async setItem(e,n){if(e===null)await this.root.setItem(this.path,n);else{const i=await this.root.getItem(this.path)||{};await this.root.setItem(this.path,{...i,[e]:n})}return await this.getItem(e)}watchItem(e,n,i){return e===null?this.root.watchItem(this.path,(s,l)=>{n(s,l)},i):this.root.watchItem(this.path,(s,l)=>{const o=S.get(s,e),u=S.get(l,e);o!==u&&n(o,u)},i)}}class Ct{constructor(e,n,i){V(this,"attachmentStorage");this.instance=e,this.attachmentKey=n,this.constructInstance=i,this.attachmentStorage=new ke(e.instanceData,n)}async getInstance(e){if(await this.attachmentStorage.getItem(e))return this.constructInstance(new ke(this.attachmentStorage,e))}async create(e,n){return await this.attachmentStorage.setItem(e,n),this.constructInstance(new ke(this.attachmentStorage,e))}async remove(e){await this.attachmentStorage.deleteItem(e)}async list(){const e=await this.attachmentStorage.getItem(null);return Promise.all(S.values(e).map(n=>this.constructInstance(new ke(this.attachmentStorage,n.id))))}}class Gn{constructor(e){V(this,"rootRef");this.rootRef=J.observable({current:e})}async deleteItem(e){J.runInAction(()=>{S.unset(this.rootRef.current,[e])})}getItem(e){const n=this.getValueFromRoot(e);return Promise.resolve(n)}getValueFromRoot(e){return e===null?J.toJS(this.rootRef.current):S.get(this.rootRef.current,[e])}setItem(e,n){if(e===null)if(S.isObject(n))J.runInAction(()=>{this.rootRef.current=n});else throw new Error("Cannot set root value to non-object");else J.runInAction(()=>{S.set(this.rootRef.current,[e],n)});return Promise.resolve(this.getItem(e))}watchItem(e,n,i){return J.reaction(()=>this.getValueFromRoot(e),(s,l)=>{n(s,l)},{requiresObservable:!0,fireImmediately:S.get(i,"fireImmediately",!1)})}}class Ea{constructor(){V(this,"channels",new Map);V(this,"globalChannel",new pn.default)}getChannel(e){const n=this.channels.get(e);if(n)return n;const i=new pn.default;return this.channels.set(e,i),i}}class Va{constructor(e){V(this,"instances",new Map);this.pluginManager=e}get availableVizList(){return this.pluginManager.installedPlugins.flatMap(e=>e.manifest.viz)}resolveComponent(e){return this.pluginManager.factory.viz(e)}getOrCreateInstance(e){const n=this.instances.get(e.id);if(n)return n;const i={id:e.id,name:e.viz.type,type:e.viz.type,messageChannels:new Ea,instanceData:new Gn(e.viz.conf)};return this.instances.set(e.id,i),i}}function Bn(t,e,n){return{vizManager:n,locale:"zh",msgChannels:t.messageChannels,instanceData:t.instanceData,pluginData:new Gn({}),colorPalette:{getColor(){return()=>""}},data:e}}const Pa=t=>{const{panel:e,vizManager:n,data:i}=t,s=n.resolveComponent(e.viz.type),l=n.getOrCreateInstance(e),o={...Bn(l,i,n),viewport:{width:e.layout.w,height:e.layout.h}},u=s.viewRender;return r(u,{context:o,instance:l,...S.omit(t,["panel","vizManager","data"])})},za=t=>{const{vizManager:e,panel:n,panelInfoEditor:i,data:s}=t,l=e.resolveComponent(n.viz.type),o=e.getOrCreateInstance(n),u={...Bn(o,s,e),panelInfoEditor:i},d=l.configRender;return r(d,{context:u,instance:o,...S.omit(t,["panel","vizManager","data","panelInfoEditor"])})},Ln=(t,e)=>{const n=Pe.default.bezier(t),i=Pe.default.bezier(e);return function(s){return s<50?n(s*2/100).hex():i((s-50)*2/100).hex()}},Ue=t=>{const e=Pe.default.bezier(t);return function(n){return e(n/100).hex()}},Oa={type:"interpolation",displayName:"Red / Green",getColor:Ln(["darkred","deeppink","lightyellow"],["lightyellow","lightgreen","teal"]),name:"red-green",category:"diverging"},Fa={type:"interpolation",displayName:"Yellow / Blue",getColor:Ln(["#8f531d","#ffd347","#e3efe3"],["#eefaee","#4ecbbf","#003f94"]),name:"yellow-blue",category:"diverging"},qa={type:"interpolation",displayName:"Red",getColor:Ue(["#fff7f1","darkred"]),name:"red",category:"sequential"},Ga={type:"interpolation",displayName:"Green",getColor:Ue(["#f0ffed","darkgreen"]),name:"green",category:"sequential"},Ba={type:"interpolation",displayName:"Blue",getColor:Ue(["#f9fcff","#48b3e9","darkblue"]),name:"blue",category:"sequential"},La={type:"interpolation",displayName:"Orange",getColor:Ue(["#fff7f1","darkorange","#b60000"]),name:"orange",category:"sequential"},Ra="4.16.1";class $a{constructor(e){V(this,"staticColors",new Map);V(this,"interpolations",new Map);e.installedPlugins.forEach(n=>{n.manifest.color.forEach(i=>{this.register(i)})})}getStaticColors(){return Array.from(this.staticColors.values())}register(e){const n=this.encodeColor(e);e.type==="single"?(this.staticColors.has(n)&&console.warn(`the color '${e.name}' has been registered under '${e.category}', previous registered value will be overridden`),this.staticColors.set(n,e)):e.type==="interpolation"&&(this.interpolations.has(n)&&console.warn(`the interpolation '${e.name}' has been registered under '${e.category}', previous registered value will be overridden`,`the interpolation '${e.name}' has been registered under '${e.category}', previous registered value will be overridden`),this.interpolations.set(n,e))}decodeStaticColor(e){return this.staticColors.get(e)}encodeColor(e){return`\${${e.category}}.{${e.name}}`}decodeInterpolation(e){return this.interpolations.get(e)}getColorInterpolations(){return Array.from(this.interpolations.values())}}class Na{constructor(){V(this,"plugins",new Map);V(this,"vizComponents",new Map);V(this,"factory",{viz:e=>{const n=this.vizComponents.get(e);if(n)return n;throw new Error(`Viz Component (${e}) not found`)}})}install(e){if(this.plugins.has(e.id))throw new Error(`Plugin (${e.id}) has been installed before`);this.plugins.set(e.id,e);for(const n of e.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 ja{constructor(){V(this,"migrations",[])}version(e,n){return this.migrations.push({version:e,handler:n}),this}run(e,n){var l;if(e.from===e.to)return n;if(e.from>e.to)throw new Error(`Can not downgrade from version '${e.from}' to (${e.to})`);const i=this.migrations.filter(o=>o.version>e.from&&o.version<=e.to),s=S.orderBy(i,"version","asc");if(((l=S.last(s))==null?void 0:l.version)!==e.to)throw new Error(`Migration to version ${e.to} not found`);return s.reduce((o,u)=>u.handler(o),n)}}class oe extends ja{constructor(){super(),this.configVersions()}version(e,n){return super.version(e,i=>({version:e,...n(i)}))}async migrate({instanceData:e}){const n=await e.getItem(null),i=S.get(n,"version",0),s=this.run({from:i,to:this.VERSION},n);await e.setItem(null,s)}async needMigration({instanceData:e}){const n=await e.getItem(null);return S.get(n,"version",0)<this.VERSION}}const wt={content:""},q=(t,e)=>{const[n,{setFalse:i}]=R.useBoolean(!0),[s,l]=w.useState();w.useEffect(()=>(t.getItem(e).then(u=>{l(u),i()}),t.watchItem(e,u=>{l(u)})));const o=w.useCallback(async u=>{await t.setItem(e,u),l(u)},[t,e]);return{loading:n,value:s,set:o}};function Rn(t){const e=w.useRef(null);return w.useEffect(()=>{var n,i,s;t&&((s=(i=(n=e.current)==null?void 0:n.editor)==null?void 0:i.clipboard)==null||s.dangerouslyPasteHTML(t))},[t]),e}function Wa({context:t}){const{value:e}=q(t.instanceData,"config"),n=e==null?void 0:e.content,i=Rn(n);return e!=null&&e.content?r(ft.RichTextEditor,{ref:i,readOnly:!0,value:e.content,onChange:S.noop,sx:{border:"none",".ql-editor":{padding:0}}}):null}function Qa({context:t}){const{value:e,set:n}=q(t.instanceData,"config"),i=w.useMemo(()=>S.defaults({},e,wt),[e]),{control:s,handleSubmit:l,watch:o,getValues:u}=C.useForm({defaultValues:i});o("content");const d=u(),h=w.useMemo(()=>!S.isEqual(d,e),[d,e]),f=Rn(e==null?void 0:e.content);return r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:l(n),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[r(a.Text,{children:"Content"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!h,children:r(T.DeviceFloppy,{size:20})})]}),r(C.Controller,{name:"content",control:s,render:({field:m})=>r(dn.default,{ref:f,sx:{flex:1},...S.omit(m,"ref")})})]})})}class Ya extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}fixMalformedConfig(n){return S.defaults({},n,wt)}configVersions(){this.version(1,n=>({version:1,config:this.fixMalformedConfig(n)}))}}const Ua={displayName:"RichText",migrator:new Ya,name:"richText",viewRender:Wa,configRender:Qa,createConfig:()=>wt},St={align:"center",template:"The variable ${value} is defined in Variables section",variables:[{name:"value",size:"20px",weight:"bold",color:{type:"static",staticColor:"blue"},data_field:"",aggregation:{type:"none",config:{}},formatter:{output:"number",mantissa:0}}]};function Xa(t){if("variables"in t)return t;const{align:e,size:n,weight:i,color:s,content:{prefix:l="",data_field:o="value",formatter:u={output:"number",mantissa:0},postfix:d=""}={}}=t;return{align:e,template:`${l} \${value} ${d}`,variables:[{name:"value",data_field:o,aggregation:{type:"none",config:{}},formatter:u,color:s,weight:i,size:n}]}}class Ja extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({config:Xa(n)}))}}const It=w.forwardRef(function({value:e,onChange:n,...i},s){return r(a.TextInput,{ref:s,value:e,onChange:n,...i})}),qe={mantissa:0,output:"number",trimMantissa:!1,average:!1};function Ka({value:t,onChange:e},n){const i=u=>{e({...t,output:u})},s=u=>{const d=u===0?!1:t.trimMantissa;e({...t,mantissa:u,trimMantissa:d})},l=u=>{e({...t,trimMantissa:u.currentTarget.checked})},o=u=>{e({...t,average:u.currentTarget.checked})};return c(a.Stack,{ref:n,children:[c(a.Group,{grow:!0,children:[r(a.Select,{label:"Format",data:[{label:"1234",value:"number"},{label:"99%",value:"percent"}],value:t.output,onChange:i,sx:{flexGrow:1}}),r(a.Switch,{label:c(a.Stack,{spacing:0,children:[r(a.Text,{children:"Average"}),r(a.Text,{size:12,color:"gray",children:"like 1.234k, 1.234m"})]}),checked:t.average,onChange:o,disabled:t.output!=="number",sx:{flexGrow:1},styles:{root:{alignSelf:"flex-end"},body:{alignItems:"center"},label:{display:"block"}}})]}),c(a.Group,{grow:!0,children:[r(a.NumberInput,{label:"Mantissa",defaultValue:0,min:0,step:1,max:4,value:t.mantissa,onChange:s}),r(a.Switch,{label:"Trim mantissa",checked:t.trimMantissa,onChange:l,disabled:t.mantissa===0,styles:{root:{alignSelf:"flex-end"},body:{alignItems:"center"}}})]}),c(a.Stack,{spacing:0,children:[r(a.Text,{weight:"bold",children:"Preview"}),r(Ae,{children:c(a.Group,{position:"apart",children:[c(a.Text,{size:12,color:"gray",children:["123456789 ",r(T.ArrowRight,{size:9})," ",re.default(123456789).format(t)]}),c(a.Text,{size:12,color:"gray",children:["1234 ",r(T.ArrowRight,{size:9})," ",re.default(1234).format(t)]}),c(a.Text,{size:12,color:"gray",children:["0.1234 ",r(T.ArrowRight,{size:9})," ",re.default(.1234).format(t)]})]})})]})]})}const Dt=b.default.forwardRef(Ka);function Xe(){return{name:U.randomId(),size:"20px",weight:"bold",color:{type:"static",staticColor:"blue"},data_field:"",aggregation:{type:"none",config:{}},formatter:qe}}const Za=[{label:"None",value:"none"},{label:"Sum",value:"sum"},{label:"Mean",value:"mean"},{label:"Median",value:"median"},{label:"Max",value:"max"},{label:"Min",value:"min"},{label:"Quantile(99%, 95%, ...)",value:"quantile"}];function Ha({label:t,value:e,onChange:n},i){w.useEffect(()=>{typeof e=="string"&&(console.log(e),n({type:e,config:{}}))},[e,n]);const s=o=>{n(o==="quantile"?{type:"quantile",config:{p:.99}}:{type:o,config:{}})},l=o=>{n({type:"quantile",config:{p:o}})};return c(a.Group,{grow:!0,noWrap:!0,pt:"sm",children:[r(a.Select,{ref:i,label:t,data:Za,value:e.type,onChange:s}),e.type==="quantile"&&r(a.NumberInput,{label:"p",value:e.config.p,onChange:l,precision:2,min:.05,step:.05,max:1})]})}const es=b.default.forwardRef(Ha);function ts({label:t,required:e,value:n,onChange:i,data:s,clearable:l=!1,sx:o,...u},d){const h=b.default.useMemo(()=>{if(!Array.isArray(s)||s.length===0)return[];const m=Object.keys(s[0]).map(g=>({label:g,value:g}));return l?m.concat([{label:"unset",value:""}]):m},[s]);return r(a.Select,{ref:d,label:t,data:h,value:n,onChange:i,required:e,sx:o,...u})}const j=b.default.forwardRef(ts);function ns({label:t,value:e,onChange:n},i){const[s,l]=b.default.useState(Array.isArray(e)?[...e]:[]),o=b.default.useCallback(()=>{l(g=>[...g,""])},[l]),u=b.default.useCallback(g=>{l(v=>(v.splice(g,1),[...v]))},[l]),d=b.default.useMemo(()=>!O.default.isEqual(s,e),[s,e]),h=()=>{n(s.map(g=>g.toString()))},f=a.useMantineTheme(),m=b.default.useMemo(()=>Object.entries(f.colors).map(([g,v])=>v[6]),[f]);return c(N,{children:[c(a.Group,{position:"left",ref:i,children:[r(a.Text,{children:t}),r(a.ActionIcon,{mr:5,variant:"filled",color:"blue",disabled:!d,onClick:h,children:r(T.DeviceFloppy,{size:20})})]}),c(a.Group,{children:[s.map((g,v)=>r(a.ColorInput,{value:g,onChange:_=>{l(k=>(k.splice(v,1,_),[...k]))},swatches:m,rightSection:r(a.ActionIcon,{onClick:()=>u(v),color:"red",children:r(T.Trash,{size:14})}),sx:{width:"45%"}})),r(a.ActionIcon,{onClick:o,color:"blue",variant:"outline",children:r(T.PlaylistAdd,{size:20})})]})]})}const rs=b.default.forwardRef(ns);function is({value:t,onChange:e},n){const{colorManager:i}=w.useContext(ge),s=b.default.useMemo(()=>i.getStaticColors().map(u=>({label:u.name,group:u.category,value:u.value})),[i]),l=b.default.useMemo(()=>s.some(o=>o.value===t),[t,s]);return c(a.Group,{position:"apart",spacing:4,ref:n,children:[r(a.TextInput,{placeholder:"Set any color",value:l?"":t,onChange:o=>e(o.currentTarget.value),rightSection:r(a.ColorSwatch,{color:l?"transparent":t,radius:4}),variant:l?"filled":"default",sx:{maxWidth:"46%",flexGrow:1}}),r(a.Text,{sx:{flexGrow:0},children:"or"}),r(a.Select,{data:s,value:t,onChange:e,variant:l?"default":"filled",placeholder:"Pick a theme color",icon:r(a.ColorSwatch,{color:l?t:"transparent",radius:4}),sx:{maxWidth:"46%",flexGrow:1}})]})}const xe=b.default.forwardRef(is),Je=[{label:"initial",value:0},{label:"500",value:25},{label:"700",value:50},{label:"semibold",value:75},{label:"bold",value:100}];function as({label:t,value:e,onChange:n},i){var o,u;const[s,l]=b.default.useState((u=(o=Je.find(d=>d.label===e))==null?void 0:o.value)!=null?u:Je[0].value);return b.default.useEffect(()=>{const d=Je.find(h=>h.value===s);d&&n(d.label)},[s]),c(a.Stack,{spacing:0,mt:"sm",mb:"lg",children:[r(a.Text,{size:"sm",children:t}),r(a.Slider,{label:null,marks:Je,value:s,onChange:l,step:25,placeholder:"Pick a font size",ref:i})]})}const ss=b.default.forwardRef(as);function ls({label:t,value:e,onChange:n},i){const[s,l]=b.default.useState(Array.isArray(e)?[...e]:[]),o=b.default.useCallback(()=>{l(f=>[...f,""])},[l]),u=b.default.useCallback(f=>{l(m=>(m.splice(f,1),[...m]))},[l]),d=b.default.useMemo(()=>!O.default.isEqual(s,e),[s,e]),h=()=>{n(s.map(f=>f.toString()))};return c(N,{children:[c(a.Group,{position:"left",ref:i,children:[r(a.Text,{children:t}),r(a.ActionIcon,{mr:5,variant:"filled",color:"blue",disabled:!d,onClick:h,children:r(T.DeviceFloppy,{size:20})})]}),c(a.Group,{children:[s.map((f,m)=>r(a.TextInput,{value:f,onChange:g=>{const v=g.currentTarget.value;l(_=>(_.splice(m,1,v),[..._]))},rightSection:r(a.ActionIcon,{onClick:()=>u(m),color:"red",children:r(T.Trash,{size:14})}),sx:{width:"45%"}})),r(a.ActionIcon,{onClick:o,color:"blue",variant:"outline",children:r(T.PlaylistAdd,{size:20})})]})]})}const os=b.default.forwardRef(ls),us=b.default.forwardRef(function({value:e,onChange:n},i){const s=e.color.type,l=(o,u)=>{const d=O.default.cloneDeep(e);O.default.set(d,o,u),n(d)};return c(N,{children:[r(a.Divider,{my:"xs",label:"Typography",labelPosition:"center"}),r(a.Stack,{children:r(a.TextInput,{label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",sx:{flex:1},value:e.size,onChange:o=>l("size",o.currentTarget.value)})}),r(a.Group,{position:"apart",grow:!0,sx:{"> *":{flexGrow:1,maxWidth:"100%"}},children:r(ss,{label:"Font Weight",value:e.weight,onChange:o=>l("weight",o)})}),r(a.Divider,{my:"xs",label:"Style",labelPosition:"center"}),c(a.Stack,{children:[r(a.Select,{label:"Color Type",data:[{label:"Static Color",value:"static"},{label:"Continuous Color",value:"continuous"}],value:e.color.type,onChange:o=>l("color.type",o)}),s==="static"&&r(xe,{value:e.color.staticColor,onChange:o=>l("color.staticColor",o)}),s==="continuous"&&c(N,{children:[r(os,{label:"Value Range",value:e.color.valueRange,onChange:o=>l("color.valueRange",o)}),r(rs,{label:"Color Range",value:e.color.colorRange,onChange:o=>l("color.colorRange",o)})]})]})]})}),Ke=b.default.forwardRef(function({value:e,onChange:n,data:i,withStyle:s=!0},l){const o=(u,d)=>{const h=O.default.cloneDeep(e);O.default.set(h,u,d),n(h)};return c(a.Box,{px:"sm",py:"md",ref:l,children:[r(a.Text,{weight:"bold",pb:0,children:e.name}),r(a.Divider,{my:"xs",label:"Data",labelPosition:"center"}),c(a.Group,{grow:!0,noWrap:!0,children:[r(a.TextInput,{label:"Name",required:!0,value:e.name,onChange:u=>o("name",u.currentTarget.value)}),r(j,{label:"Data Field",required:!0,data:i,value:e.data_field,onChange:u=>o("data_field",u)})]}),r(es,{label:"Aggregation",value:e.aggregation,onChange:u=>o("aggregation",u)}),r(a.Divider,{my:"xs",label:"Format",labelPosition:"center"}),r(Dt,{value:e.formatter,onChange:u=>o("formatter",u)}),s&&r(us,{value:e,onChange:n})]})});function cs(t){const e=Array.from(t).sort((i,s)=>i-s),n=Math.floor(e.length/2);return e.length%2===0?(e[n-1]+e[n])/2:e[n]}function Tt(t,e,n){var s,l,o,u;const i=t.map(d=>d[e]);switch(n.type){case"sum":return O.default.sum(i);case"mean":return O.default.mean(i);case"median":return cs(i);case"max":return(s=O.default.max(i))!=null?s:0;case"min":return(l=O.default.min(i))!=null?l:0;case"quantile":return(o=gi.quantile(i,n.config.p))!=null?o:0;default:return(u=t[0])==null?void 0:u[e]}}var $n=function(){},Ge=function(){};process.env.NODE_ENV!=="production"&&($n=function(t,e){!t&&typeof console<"u"&&console.warn(e)},Ge=function(t,e){if(!t)throw new Error(e)});const ds=(t,e,n)=>Math.min(Math.max(n,t),e),Nn=(t,e,n)=>{const i=e-t;return i===0?1:(n-t)/i},_t=(t,e,n)=>-n*t+n*e+t,jn=(t,e)=>n=>Math.max(Math.min(n,e),t),Be=t=>t%1?Number(t.toFixed(5)):t,Ze=/(-)?([\d]*\.?[\d])+/g,At=/(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))/gi,ps=/^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))$/i;function Le(t){return typeof t=="string"}const He={test:t=>typeof t=="number",parse:parseFloat,transform:t=>t},Wn=Object.assign(Object.assign({},He),{transform:jn(0,1)});Object.assign(Object.assign({},He),{default:1});const Re=(t=>({test:e=>Le(e)&&e.endsWith(t)&&e.split(" ").length===1,parse:parseFloat,transform:e=>`${e}${t}`}))("%");Object.assign(Object.assign({},Re),{parse:t=>Re.parse(t)/100,transform:t=>Re.transform(t*100)});const kt=(t,e)=>n=>Boolean(Le(n)&&ps.test(n)&&n.startsWith(t)||e&&Object.prototype.hasOwnProperty.call(n,e)),Qn=(t,e,n)=>i=>{if(!Le(i))return i;const[s,l,o,u]=i.match(Ze);return{[t]:parseFloat(s),[e]:parseFloat(l),[n]:parseFloat(o),alpha:u!==void 0?parseFloat(u):1}},Te={test:kt("hsl","hue"),parse:Qn("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:n,alpha:i=1})=>"hsla("+Math.round(t)+", "+Re.transform(Be(e))+", "+Re.transform(Be(n))+", "+Be(Wn.transform(i))+")"},fs=jn(0,255),Mt=Object.assign(Object.assign({},He),{transform:t=>Math.round(fs(t))}),Ce={test:kt("rgb","red"),parse:Qn("red","green","blue"),transform:({red:t,green:e,blue:n,alpha:i=1})=>"rgba("+Mt.transform(t)+", "+Mt.transform(e)+", "+Mt.transform(n)+", "+Be(Wn.transform(i))+")"};function hs(t){let e="",n="",i="",s="";return t.length>5?(e=t.substr(1,2),n=t.substr(3,2),i=t.substr(5,2),s=t.substr(7,2)):(e=t.substr(1,1),n=t.substr(2,1),i=t.substr(3,1),s=t.substr(4,1),e+=e,n+=n,i+=i,s+=s),{red:parseInt(e,16),green:parseInt(n,16),blue:parseInt(i,16),alpha:s?parseInt(s,16)/255:1}}const Et={test:kt("#"),parse:hs,transform:Ce.transform},et={test:t=>Ce.test(t)||Et.test(t)||Te.test(t),parse:t=>Ce.test(t)?Ce.parse(t):Te.test(t)?Te.parse(t):Et.parse(t),transform:t=>Le(t)?t:t.hasOwnProperty("red")?Ce.transform(t):Te.transform(t)},Yn="${c}",Un="${n}";function gs(t){var e,n,i,s;return isNaN(t)&&Le(t)&&((n=(e=t.match(Ze))===null||e===void 0?void 0:e.length)!==null&&n!==void 0?n:0)+((s=(i=t.match(At))===null||i===void 0?void 0:i.length)!==null&&s!==void 0?s:0)>0}function Xn(t){typeof t=="number"&&(t=`${t}`);const e=[];let n=0;const i=t.match(At);i&&(n=i.length,t=t.replace(At,Yn),e.push(...i.map(et.parse)));const s=t.match(Ze);return s&&(t=t.replace(Ze,Un),e.push(...s.map(He.parse))),{values:e,numColors:n,tokenised:t}}function Jn(t){return Xn(t).values}function Kn(t){const{values:e,numColors:n,tokenised:i}=Xn(t),s=e.length;return l=>{let o=i;for(let u=0;u<s;u++)o=o.replace(u<n?Yn:Un,u<n?et.transform(l[u]):Be(l[u]));return o}}const ms=t=>typeof t=="number"?0:t;function ys(t){const e=Jn(t);return Kn(t)(e.map(ms))}const Zn={test:gs,parse:Jn,createTransformer:Kn,getAnimatableNone:ys};function Vt(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+(e-t)*6*n:n<1/2?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function Hn({hue:t,saturation:e,lightness:n,alpha:i}){t/=360,e/=100,n/=100;let s=0,l=0,o=0;if(!e)s=l=o=n;else{const u=n<.5?n*(1+e):n+e-n*e,d=2*n-u;s=Vt(d,u,t+1/3),l=Vt(d,u,t),o=Vt(d,u,t-1/3)}return{red:Math.round(s*255),green:Math.round(l*255),blue:Math.round(o*255),alpha:i}}const vs=(t,e,n)=>{const i=t*t,s=e*e;return Math.sqrt(Math.max(0,n*(s-i)+i))},bs=[Et,Ce,Te],er=t=>bs.find(e=>e.test(t)),tr=t=>`'${t}' is not an animatable color. Use the equivalent color code instead.`,nr=(t,e)=>{let n=er(t),i=er(e);Ge(!!n,tr(t)),Ge(!!i,tr(e));let s=n.parse(t),l=i.parse(e);n===Te&&(s=Hn(s),n=Ce),i===Te&&(l=Hn(l),i=Ce);const o=Object.assign({},s);return u=>{for(const d in o)d!=="alpha"&&(o[d]=vs(s[d],l[d],u));return o.alpha=_t(s.alpha,l.alpha,u),n.transform(o)}},xs=t=>typeof t=="number",Cs=(t,e)=>n=>e(t(n)),rr=(...t)=>t.reduce(Cs);function ir(t,e){return xs(t)?n=>_t(t,e,n):et.test(t)?nr(t,e):lr(t,e)}const ar=(t,e)=>{const n=[...t],i=n.length,s=t.map((l,o)=>ir(l,e[o]));return l=>{for(let o=0;o<i;o++)n[o]=s[o](l);return n}},ws=(t,e)=>{const n=Object.assign(Object.assign({},t),e),i={};for(const s in n)t[s]!==void 0&&e[s]!==void 0&&(i[s]=ir(t[s],e[s]));return s=>{for(const l in i)n[l]=i[l](s);return n}};function sr(t){const e=Zn.parse(t),n=e.length;let i=0,s=0,l=0;for(let o=0;o<n;o++)i||typeof e[o]=="number"?i++:e[o].hue!==void 0?l++:s++;return{parsed:e,numNumbers:i,numRGB:s,numHSL:l}}const lr=(t,e)=>{const n=Zn.createTransformer(e),i=sr(t),s=sr(e);return i.numHSL===s.numHSL&&i.numRGB===s.numRGB&&i.numNumbers>=s.numNumbers?rr(ar(i.parsed,s.parsed),n):($n(!0,`Complex values '${t}' and '${e}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`),o=>`${o>0?e:t}`)},Ss=(t,e)=>n=>_t(t,e,n);function Is(t){if(typeof t=="number")return Ss;if(typeof t=="string")return et.test(t)?nr:lr;if(Array.isArray(t))return ar;if(typeof t=="object")return ws}function Ds(t,e,n){const i=[],s=n||Is(t[0]),l=t.length-1;for(let o=0;o<l;o++){let u=s(t[o],t[o+1]);if(e){const d=Array.isArray(e)?e[o]:e;u=rr(d,u)}i.push(u)}return i}function Ts([t,e],[n]){return i=>n(Nn(t,e,i))}function _s(t,e){const n=t.length,i=n-1;return s=>{let l=0,o=!1;if(s<=t[0]?o=!0:s>=t[i]&&(l=i-1,o=!0),!o){let d=1;for(;d<n&&!(t[d]>s||d===i);d++);l=d-1}const u=Nn(t[l],t[l+1],s);return e[l](u)}}function As(t,e,{clamp:n=!0,ease:i,mixer:s}={}){const l=t.length;Ge(l===e.length,"Both input and output ranges must be the same length"),Ge(!i||!Array.isArray(i)||i.length===l-1,"Array of easing functions must be of length `input.length - 1`, as it applies to the transitions **between** the defined values."),t[0]>t[l-1]&&(t=[].concat(t),e=[].concat(e),t.reverse(),e.reverse());const o=Ds(e,i,s),u=l===2?Ts(t,o):_s(t,o);return n?d=>u(ds(t[0],t[l-1],d)):u}class ks{constructor({valueRange:e,colorRange:n}){V(this,"mapper");this.mapper=As(e,n)}getColor(e){return this.mapper(e)}}function Ms(t){return t===null?"null":t===void 0?"undefined":Array.isArray(t)?`Array(${t.length})`:t.toString()}function or({data_field:t,aggregation:e},n){return Tt(n,t,e)}function tt({formatter:t},e){return["string","number"].includes(typeof e)?re.default(e).format(t):Ms(e)}function Es(t,e){return t.type==="static"?t.staticColor:t.type==="continuous"?new ks(t).getColor(e):"black"}function Vs(t,e){const n={};return t.forEach(i=>{const{name:s,color:l,data_field:o,aggregation:u,size:d,weight:h}=i,f=Tt(e,o,u),m=tt(i,f);n[s]=r(a.Text,{sx:{fontSize:d,display:"inline"},color:Es(l,f),weight:h,children:m})}),n}function Ps(t){return t.split(" ").map(e=>c(N,{children:[e,"\xA0"]}))}function zs(t){const n=t.replaceAll("<br />","<br/>").replaceAll(`
39
+ `,In=A.observer(function({showSQLSnippets:e=!0,sx:n={}}){const i=Q(),s=i.context.current,l=b.default.useMemo(()=>{const o={context:s,filters:i.filters.values};if(e){const u=i.sqlSnippets.current.reduce((d,h)=>(d[h.key]=h.value,d),{});o.sql_snippets=u}return JSON.stringify(o,null,2)},[s,i.sqlSnippets.current,i.filters.values,e]);return c(a.Stack,{sx:{border:"1px solid #eee",maxWidth:"40%",overflow:"hidden",...n},children:[r(a.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:r(a.Text,{weight:500,children:"Global Variables"})}),c(a.Stack,{px:"md",pb:"md",sx:{width:"100%"},children:[r(Ie.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:qi}),r(a.Text,{weight:500,sx:{flexGrow:0},children:"Current Values"}),r(Ie.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:l})]})]})});function Gi({data:t}){return t.length===0?r(a.Box,{sx:{height:"5em"}}):c(a.Table,{children:[r("thead",{children:r("tr",{children:Object.keys(t==null?void 0:t[0]).map(e=>r("th",{children:r(a.Text,{weight:700,color:"#000",children:e})},e))})}),r("tbody",{children:t.slice(0,10).map((e,n)=>r("tr",{children:Object.values(e).map((i,s)=>r("td",{children:r(a.Group,{sx:{"&, .mantine-Text-root":{fontFamily:"monospace"}},children:r(a.Text,{children:i})})},`${i}--${s}`))},`row-${n}`))})]})}const Dn=A.observer(function({id:e}){const n=Q(),{data:i,state:s}=n.getDataStuffByID(e),l=s==="loading",o=()=>{n.queries.refetchDataByQueryID(e)};return c(a.Stack,{my:"xl",sx:{border:"1px solid #eee"},children:[c(a.Group,{position:"apart",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[c(a.Group,{position:"left",children:[r(a.Text,{weight:500,children:"Preview Data"}),i.length>10&&c(a.Text,{size:"sm",color:"gray",children:["Showing 10 rows of ",i.length]})]}),r(a.ActionIcon,{mr:15,variant:"subtle",color:"blue",disabled:l,onClick:o,children:r(T.Refresh,{size:15})})]}),c(a.Box,{sx:{position:"relative"},children:[r(a.LoadingOverlay,{visible:l}),r(Gi,{data:i})]})]})}),Bi=w.forwardRef(({label:t,type:e,...n},i)=>c(a.Group,{position:"apart",ref:i,...n,children:[r(a.Text,{children:t}),r(a.Text,{children:e})]})),Tn=A.observer(function({value:e,onChange:n}){const{data:i=[],loading:s}=R.useRequest(Ei,{refreshDeps:[]},[]),l=w.useMemo(()=>i.map(u=>({label:u.key,value:u.key,type:u.type})),[i]),o=w.useMemo(()=>l.reduce((u,d)=>(u[d.value]=d.type,u),{}),[l]);return r(a.Select,{label:"Data Source",data:l,itemComponent:Bi,sx:{flex:1},disabled:s,value:e.key,onChange:u=>{u!==null&&n({key:u,type:o[u]})}})});function _n({value:t}){const e=Q(),n=e.context.current,i=b.default.useMemo(()=>bn(t,n,e.sqlSnippets.current,e.filters.values),[t,n,e.sqlSnippets.current,e.filters.values]);return r(Ie.Prism,{language:"sql",colorScheme:"light",children:i})}const Li=A.observer(function({queryModel:e,setCurrentID:n}){const i=b.default.useRef(e.id),[s,l]=b.default.useState(i.current);b.default.useEffect(()=>{i.current!==e.id&&(l(e.id),i.current=e.id)},[i,e.id]);const[o,u]=b.default.useState(e.sql);b.default.useEffect(()=>{u(m=>m!==e.sql?e.sql:m)},[e.sql]);const d=o!==e.sql,h=()=>{e.setSQL(o)},f=()=>{n(s),e.setID(s)};return c(a.Stack,{sx:{border:"1px solid #eee",flexGrow:1},children:[r(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:r(a.Text,{weight:500,children:"Edit Query"})}),c(a.Stack,{my:0,p:"md",pr:40,children:[c(a.Group,{grow:!0,children:[r(a.TextInput,{placeholder:"An ID unique in this dashboard",label:"ID",required:!0,sx:{flex:1},value:s,onChange:m=>{l(m.currentTarget.value)},rightSection:r(a.ActionIcon,{mr:5,variant:"filled",color:"blue",disabled:s===e.id,onClick:f,children:r(T.DeviceFloppy,{size:18})})}),r(Tn,{value:{type:e.type,key:e.key},onChange:({type:m,key:g})=>{e.setKey(g),e.setType(m)}})]}),c(a.Tabs,{defaultValue:"SQL",children:[c(a.Tabs.List,{children:[r(a.Tabs.Tab,{value:"SQL",children:"SQL"}),r(a.Tabs.Tab,{value:"Preview",children:"Preview"})]}),r(a.Tabs.Panel,{value:"SQL",pt:"sm",children:c(a.Box,{sx:{position:"relative"},children:[r(a.Textarea,{autosize:!0,minRows:12,maxRows:24,className:"code-textarea",value:o,onChange:m=>{u(m.currentTarget.value)}}),r(a.ActionIcon,{mr:5,variant:"filled",color:"blue",sx:{position:"absolute",right:10,top:10},disabled:!d,onClick:h,children:r(T.DeviceFloppy,{size:20})})]})}),r(a.Tabs.Panel,{value:"Preview",pt:"sm",children:r(_n,{value:e.sql})})]})]})]})}),Ri=A.observer(function({id:e,setID:n}){const i=Q(),s=b.default.useMemo(()=>i.queries.findByID(e),[i.queries,e]);return e?s?r(Li,{queryModel:s,setCurrentID:n}):r("span",{children:"Invalid Query ID"}):null});var pe=(t=>(t.Postgresql="postgresql",t.MySQL="mysql",t.HTTP="http",t))(pe||{});const $i=A.observer(function({id:e,setID:n}){const i=Q(),s=()=>{var o;n((o=i.queries.firstID)!=null?o:"")};b.default.useEffect(()=>{if(!e){s();return}i.queries.current.findIndex(u=>u.id===e)===-1&&s()},[e,i.queries.current,s]);const l=()=>{const o=U.randomId();i.queries.append(y.cast({id:o,type:pe.Postgresql,key:"",sql:""})),n(o)};return r(a.Group,{pb:"xl",children:c(a.Group,{position:"left",sx:{maxWidth:"600px",alignItems:"baseline"},children:[r(a.Text,{children:"Select a Query"}),r(a.Select,{data:i.queries.options,value:e,onChange:n,allowDeselect:!1,clearable:!1,sx:{flexGrow:1}}),r(a.Text,{children:"or"}),r(a.Group,{position:"center",mt:"md",children:r(a.Button,{onClick:l,children:"Add a Query"})})]})})}),Ni=A.observer(function(){const[e,n]=b.default.useState("");return c(a.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 225px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",width:"100%",padding:0,margin:0}},padding:"md",children:[c(a.Group,{position:"apart",grow:!0,align:"stretch",noWrap:!0,children:[c(a.Stack,{sx:{flexGrow:1,maxWidth:"calc(60% - 16px)"},children:[r($i,{id:e,setID:n}),r(Ri,{id:e,setID:n})]}),r(In,{})]}),r(Dn,{id:e})]})});function ji({value:t}){const n=Q().context.current,i=b.default.useMemo(()=>ki(t,n),[t,n]);return c(a.Stack,{children:[r(a.Text,{children:"Preview"}),r(Ie.Prism,{language:"sql",noCopy:!0,colorScheme:"dark",children:i})]})}const Wi=A.observer(function(){const e=Q(),n=()=>e.sqlSnippets.append(y.cast({key:U.randomId(),value:""}));return c(a.Stack,{sx:{border:"1px solid #eee",flexGrow:1},children:[r(a.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:r(a.Text,{weight:500,children:"SQL Snippets"})}),r(a.Group,{px:"md",pb:"md",pt:"md",children:c(a.Stack,{sx:{width:"100%",position:"relative"},children:[e.sqlSnippets.current.map((i,s)=>c(a.Stack,{my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[r(a.TextInput,{label:"Key",required:!0,value:i.key,onChange:l=>{i.setKey(l.currentTarget.value)}}),r(a.Textarea,{minRows:3,label:"Value",required:!0,value:i.value,onChange:l=>{i.setValue(l.currentTarget.value)},className:"code-textarea"}),r(ji,{value:i.value}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>e.sqlSnippets.remove(s),sx:{position:"absolute",top:15,right:5},children:r(T.Trash,{size:16})})]},s)),r(a.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"40%"},mx:"auto",children:r(a.Button,{variant:"default",onClick:n,children:"Add a snippet"})})]})})]})});function Qi(){return r(a.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 225px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",width:"100%",padding:0,margin:0}},padding:"md",children:c(a.Group,{position:"apart",grow:!0,align:"stretch",noWrap:!0,children:[r(Wi,{}),r(In,{showSQLSnippets:!1})]})})}const Yi=A.observer(function({opened:e,close:n}){const{freezeLayout:i}=b.default.useContext(le);return b.default.useEffect(()=>{i(e)},[e]),r(a.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:n,title:"Data Settings",trapFocus:!0,onDragStart:s=>{s.stopPropagation()},children:c(a.Tabs,{defaultValue:"Queries",children:[c(a.Tabs.List,{children:[r(a.Tabs.Tab,{value:"SQL Snippet",children:"SQL Snippet"}),r(a.Tabs.Tab,{value:"Queries",children:"Queries"})]}),r(a.Tabs.Panel,{value:"SQL Snippet",pt:"sm",children:r(Qi,{})}),r(a.Tabs.Panel,{value:"Queries",pt:"sm",children:r(Ni,{})})]})})});var ie=(t=>(t.Select="select",t.MultiSelect="multi-select",t.TextInput="text-input",t.Checkbox="checkbox",t.DateRange="date-range",t))(ie||{});const An=y.types.model({type:y.types.enumeration("DataSourceType",[pe.Postgresql,pe.MySQL,pe.HTTP]),key:y.types.string,sql:y.types.string}),kn=y.types.model("FilterConfigModel_TextInput",{required:y.types.boolean,default_value:y.types.string}).actions(t=>({setRequired(e){t.required=e},setDefaultValue(e){t.default_value=e}})),Mn=()=>kn.create({required:!1,default_value:""}),Ui=A.observer(function({config:e}){return r(N,{children:r(a.Checkbox,{checked:e.default_value,onChange:n=>e.setDefaultValue(n.currentTarget.checked),label:"Default Checked"})})}),Xi=[{label:"2022",value:"YYYY"},{label:"2022-01",value:"YYYY-MM"},{label:"2022-01-01",value:"YYYY-MM-DD"}],Ji=A.observer(function({config:e}){return c(N,{children:[c(a.Group,{children:[r(a.Checkbox,{checked:e.required,onChange:n=>e.setRequired(n.currentTarget.checked),label:"Required"}),r(a.Checkbox,{checked:e.clearable,onChange:n=>e.setClearable(n.currentTarget.checked),label:"Clearable"})]}),r(a.Select,{data:Xi,label:"Display Format",value:e.inputFormat,onChange:e.setInputFormat}),r(yn,{label:"Default Value",config:e,value:e.default_value,onChange:e.setDefaultValue})]})});function Ki({data:t}){return t.length===0?r(a.Box,{sx:{height:"5em"}}):c(a.Table,{children:[r("thead",{children:r("tr",{children:Object.keys(t==null?void 0:t[0]).map(e=>r("th",{children:r(a.Text,{weight:700,color:"#000",children:e})},e))})}),r("tbody",{children:t.slice(0,3).map((e,n)=>r("tr",{children:Object.values(e).map((i,s)=>r("td",{children:r(a.Group,{sx:{"&, .mantine-Text-root":{fontFamily:"monospace"}},children:r(a.Text,{children:i})})},`${i}--${s}`))},`row-${n}`))}),t.length>3&&r("tfoot",{children:r("tr",{children:r("td",{colSpan:Object.keys(t==null?void 0:t[0]).length,children:c(a.Text,{color:"gray",size:"sm",children:[t.length-3," more row(s) hidden"]})})})})]})}const Zi=A.observer(function({query:e}){const{data:n=[],loading:i,refresh:s}=R.useRequest(xt(e),{refreshDeps:[e]});return c(a.Stack,{my:0,children:[c(a.Group,{position:"apart",children:[r(a.Text,{size:"md",pl:"sm",children:"Fetched Data"}),r(a.Button,{size:"xs",onClick:s,disabled:!e.sql||!e.key,children:"Retry"})]}),c(a.Box,{sx:{position:"relative"},children:[r(a.LoadingOverlay,{visible:i,exitTransitionDuration:0}),r(Ki,{data:n})]})]})}),En=A.observer(function({value:e,onChange:n}){return c(a.Stack,{my:0,children:[r(Tn,{value:e,onChange:({type:i,key:s})=>{n({...e,type:i,key:s})}}),c(a.Tabs,{defaultValue:"SQL",children:[c(a.Tabs.List,{children:[r(a.Tabs.Tab,{value:"SQL",children:"SQL"}),r(a.Tabs.Tab,{value:"Preview",children:"Preview"}),r(a.Tabs.Tab,{value:"Data",children:"Data"})]}),r(a.Tabs.Panel,{value:"SQL",pt:"sm",children:r(a.Textarea,{autosize:!0,minRows:12,maxRows:24,className:"code-textarea",value:e.sql,onChange:i=>{n({...e,sql:i.currentTarget.value})},placeholder:"SELECT name AS label, id AS value"})}),r(a.Tabs.Panel,{value:"Preview",pt:"sm",children:r(_n,{value:e.sql})}),r(a.Tabs.Panel,{value:"Data",pt:"sm",children:r(Zi,{query:e})})]})]})}),Hi=A.observer(function({config:e}){const n=()=>{e.addStaticOption({label:"",value:""})},i=e.static_options,s=[...i];return c(N,{children:[r(a.Divider,{label:"Configure options",labelPosition:"center"}),i.length>0&&r(a.MultiSelect,{label:"Default Selection",data:s,value:e.default_value,onChange:e.setDefaultValue}),i.map((l,o)=>c(a.Group,{sx:{position:"relative"},pr:"40px",children:[r(a.TextInput,{label:"Label",required:!0,value:e.static_options[o].label,onChange:u=>{e.static_options[o].setLabel(u.currentTarget.value)},sx:{flexGrow:1}}),r(a.TextInput,{label:"Value",required:!0,value:e.static_options[o].value,onChange:u=>{e.static_options[o].setValue(u.currentTarget.value)},sx:{flexGrow:1}}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>e.removeStaticOption(o),sx:{position:"absolute",top:28,right:5},children:r(T.Trash,{size:16})})]})),r(a.Button,{size:"xs",color:"blue",leftIcon:r(T.PlaylistAdd,{size:20}),onClick:n,sx:{width:"50%"},mx:"auto",children:"Add an Option"}),r(a.Divider,{label:"Or fetch options from database",labelPosition:"center"}),r(En,{value:e.options_query,onChange:e.setOptionsQuery})]})}),ea=A.observer(function({config:e}){const n=()=>{e.addStaticOption({label:"",value:""})},i=e.static_options,s=[{label:"No default selection",value:""},...i];return c(N,{children:[r(a.Checkbox,{checked:e.required,onChange:l=>e.setRequired(l.currentTarget.checked),label:"Required"}),r(a.Divider,{label:"Configure options",labelPosition:"center"}),i.length>0&&r(a.Select,{label:"Default Selection",data:s,value:e.default_value,onChange:e.setDefaultValue}),i.map((l,o)=>c(a.Group,{sx:{position:"relative"},pr:"40px",children:[r(a.TextInput,{label:"Label",required:!0,value:e.static_options[o].label,onChange:u=>{e.static_options[o].setLabel(u.currentTarget.value)},sx:{flexGrow:1}}),r(a.TextInput,{label:"Value",required:!0,value:e.static_options[o].value,onChange:u=>{e.static_options[o].setValue(u.currentTarget.value)},sx:{flexGrow:1}}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>e.removeStaticOption(o),sx:{position:"absolute",top:28,right:5},children:r(T.Trash,{size:16})})]},o)),r(a.Button,{size:"xs",color:"blue",leftIcon:r(T.PlaylistAdd,{size:20}),onClick:n,sx:{width:"50%"},mx:"auto",children:"Add an Option"}),r(a.Divider,{label:"Or fetch options from database",labelPosition:"center"}),r(En,{value:e.options_query,onChange:e.setOptionsQuery})]})}),ta=A.observer(function({config:e}){return c(N,{children:[r(a.TextInput,{label:"Default Value",value:e.default_value,onChange:n=>{e.setDefaultValue(n.currentTarget.value)}}),r(a.Checkbox,{checked:e.required,onChange:n=>e.setRequired(n.currentTarget.checked),label:"Required"})]})}),na=A.observer(function({filter:e}){const n=e.config.default_value,[i,s]=b.default.useState(n);return b.default.useEffect(()=>{s(n)},[n]),c(a.Box,{sx:{maxWidth:"30em"},children:[r(a.Text,{pb:"md",color:"gray",children:"Preview"}),r(xn,{filter:e,value:i,onChange:s}),r(a.Text,{pt:"lg",pb:"md",color:"gray",children:"Config"}),r(Ie.Prism,{language:"json",colorScheme:"dark",noCopy:!0,children:JSON.stringify(e,null,4)})]})}),ra={select:ea,"multi-select":Hi,"text-input":ta,checkbox:Ui,"date-range":Ji},ia=[{label:"Select",value:"select"},{label:"Multi Select",value:"multi-select"},{label:"Text Input",value:"text-input"},{label:"Checkbox",value:"checkbox"},{label:"Date Range",value:"date-range"}],aa=A.observer(function({filter:e,index:n}){const i=Q(),s=b.default.useMemo(()=>ra[e.type],[e.type]);return c(a.SimpleGrid,{cols:2,children:[c(a.Box,{pl:"md",children:[r(a.Text,{pb:"md",color:"gray",children:"Edit"}),c(a.Stack,{sx:{maxWidth:"30em"},children:[r(a.NumberInput,{label:"Placement Order",required:!0,value:e.order,onChange:e.setOrder,hideControls:!0}),r(a.MultiSelect,{label:"Visible in...",data:i.views.options,value:e.visibleInViewsIDs,onChange:e.setVisibleInViewsIDs}),r(a.TextInput,{label:"Key",placeholder:"A unique key to refer",required:!0,value:e.key,onChange:l=>{e.setKey(l.currentTarget.value)}}),r(a.TextInput,{label:"Label",placeholder:"Label for this field",required:!0,value:e.label,onChange:l=>{e.setLabel(l.currentTarget.value)}}),r(a.Select,{label:"Widget",data:ia,required:!0,value:e.type,onChange:e.setType}),r(s,{config:e.config,index:n})]})]}),r(na,{filter:e})]})}),nd="",sa=A.observer(function(){const e=Q(),n=e.filters.current,i=()=>{const s=U.randomId(),l={id:s,key:s,label:s,order:n.length+1,type:ie.TextInput,config:Mn(),visibleInViewsIDs:["Main"]};e.filters.append(l)};return c(a.Box,{sx:{height:"90vh",maxHeight:"calc(100vh - 185px)"},p:0,children:[r(a.Group,{sx:{position:"absolute",top:"16px",right:"16px"},children:r(a.Button,{size:"xs",color:"red",leftIcon:r(T.Recycle,{size:20}),disabled:!e.filters.changed,onClick:e.filters.reset,children:"Revert Changes"})}),r(a.Tabs,{className:"filter-settings-tabs",orientation:"vertical",defaultValue:e.filters.firstID,styles:{root:{display:"block"}},children:c(a.Group,{sx:{height:"100%"},children:[c(a.Stack,{sx:{height:"100%"},children:[r(a.Tabs.List,{position:"left",sx:{flexGrow:1,width:"200px"},children:e.filters.current.map(s=>r(a.Tabs.Tab,{value:s.id,children:s.label},s.id))}),r(a.Button,{size:"xs",color:"blue",leftIcon:r(T.PlaylistAdd,{size:20}),onClick:i,children:"Add a Filter"})]}),r(a.Box,{sx:{flexGrow:1,height:"100%"},children:e.filters.current.map((s,l)=>r(a.Tabs.Panel,{value:s.id,sx:{height:"100%"},children:c(a.Stack,{sx:{height:"100%"},spacing:"sm",children:[r(a.Box,{sx:{flexGrow:1,maxHeight:"calc(100% - 52px)",overflow:"scroll"},children:r(aa,{filter:s,index:l})}),r(a.Group,{position:"right",pt:10,children:r(a.Button,{size:"xs",color:"red",leftIcon:r(T.Trash,{size:20}),onClick:()=>e.filters.remove(l),children:"Delete this filter"})})]})},s.id))})]})})]})}),la=A.observer(function({opened:e,close:n}){const{freezeLayout:i}=b.default.useContext(le);return b.default.useEffect(()=>{i(e)},[e]),r(a.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:n,title:"Filters",trapFocus:!0,onDragStart:s=>{s.stopPropagation()},withCloseButton:!1,children:r(sa,{})})});var Vn=(t=>(t.Use="use",t.Edit="edit",t))(Vn||{}),fe=(t=>(t.Division="div",t.Modal="modal",t))(fe||{}),Pn=(t=>(t.Select="select",t.MultiSelect="multi-select",t.TextInput="text-input",t.Checkbox="checkbox",t.DateRange="date-range",t))(Pn||{});const oa=A.observer(()=>{const e=Q().views.VIE;return!e||e.type!==fe.Division?null:c(a.Stack,{children:[r(a.Divider,{mt:8,mb:0,label:"Division settings",labelPosition:"center"}),r(a.Text,{align:"center",size:"xs",color:"dimmed",children:"Under construction"})]})}),ua=A.observer(()=>{const e=Q().views.VIE;return!e||e.type!==fe.Modal?null:c(a.Stack,{children:[r(a.Divider,{mt:8,label:"Modal settings",labelPosition:"center"}),c(a.Group,{grow:!0,children:[r(a.TextInput,{label:"Width",value:e.config.width,onChange:n=>e.updateConfig("width",n.currentTarget.value),placeholder:"600px / 50vw"}),r(a.TextInput,{label:"Height",value:e.config.height,onChange:n=>e.updateConfig("height",n.currentTarget.value),placeholder:"600px / 50vw"})]})]})}),ca=A.observer(()=>c(N,{children:[r(oa,{}),r(ua,{})]})),da=[{label:"Division",value:fe.Division},{label:"Modal",value:fe.Modal}],pa=A.observer(()=>{const e=Q().views.VIE;return e?c(a.Stack,{sx:{position:"relative"},children:[r(a.TextInput,{label:"Name",value:e.name,onChange:n=>{e.setName(n.currentTarget.value)}}),r(a.Select,{label:"Type",value:e.type,onChange:e.setType,data:da}),r(ca,{})]}):null}),fa=A.observer(({opened:t,close:e})=>{var s;const n=Q(),{freezeLayout:i}=b.default.useContext(le);return b.default.useEffect(()=>{i(t)},[t]),r(a.Modal,{size:"500px",overflow:"inside",opened:t,onClose:e,withCloseButton:!1,styles:{header:{width:"100%"},title:{width:"100%"}},title:c(a.Group,{position:"apart",children:[c(a.Text,{sx:{flexGrow:1},children:["Editing ",(s=n.views.VIE)==null?void 0:s.name]}),r(a.ActionIcon,{size:18,color:"red",onClick:n.views.removeVIE,disabled:n.views.isVIETheFirstView,children:r(T.Trash,{size:18})})]}),trapFocus:!0,onDragStart:l=>{l.stopPropagation()},children:r(pa,{})})}),ha=w.forwardRef(({label:t,type:e,...n},i)=>e!=="TRIGGER_TO_ADD"?r("div",{ref:i,...n,children:c(a.Group,{noWrap:!0,position:"apart",children:[r(a.Text,{size:"sm",children:t}),r(a.Text,{size:"xs",color:"dimmed",children:e})]})}):r("div",{ref:i,...n,children:r(a.Group,{noWrap:!0,grow:!0,children:r(a.Text,{size:"sm",align:"center",color:"#228be6",children:t})})})),zn="TRIGGER_TO_ADD",ga=A.observer(({value:t,onChange:e,triggerAdd:n,triggerEdit:i,options:s})=>{const l=w.useMemo(()=>[...s,{label:"Add a View",value:zn,type:"TRIGGER_TO_ADD"}],[s,n]),o=u=>{u!==zn?e(u):n()};return c(a.Group,{position:"left",spacing:0,sx:{minWidth:"260px"},children:[r(a.Select,{value:t,onChange:o,placeholder:"Pick a View",itemComponent:ha,data:l,nothingFound:"Empty",sx:{flexGrow:1},styles:{input:{borderTopRightRadius:0,borderBottomRightRadius:0}}}),r(a.ActionIcon,{onClick:i,variant:"default",size:36,sx:{borderLeft:0,borderTopLeftRadius:0,borderBottomLeftRadius:0,"&:active":{transform:"none",svg:{transform:"translateY(1px)"}}},children:r(T.Settings,{size:20})})]})}),ma=A.observer(()=>{const t=Q(),[e,n]=w.useState(!1),i=()=>{n(!0)},s=()=>{n(!1)};return c(N,{children:[r(ga,{value:t.views.idOfVIE,onChange:t.views.setIDOfVIE,triggerAdd:t.views.addARandomNewView,triggerEdit:i,options:t.views.options}),r(fa,{opened:e,close:s})]})});function ya({opened:t,close:e,getCurrentSchema:n}){const{freezeLayout:i}=b.default.useContext(le);b.default.useEffect(()=>{i(t)},[t]);const s=b.default.useMemo(()=>JSON.stringify(n(),null,2),[t]);return r(a.Modal,{size:"96vw",overflow:"inside",opened:t,onClose:e,title:"This dashboard is described by this schema",trapFocus:!0,onDragStart:l=>{l.stopPropagation()},children:t&&r(Ie.Prism,{language:"json",sx:{width:"100%"},colorScheme:"dark",children:s})})}const On=A.observer(function({saveChanges:e}){const n=Q(),i=b.default.useCallback(()=>{const H=n.queries.current,Ne=n.views.current,Me=n.sqlSnippets.current;return{filters:n.filters.current,views:Ne,definition:{sqlSnippets:Me,queries:H}}},[n]),s=()=>{n.filters.reset(),n.views.reset(),n.sqlSnippets.reset(),n.queries.reset()},l=n.views.changed||n.sqlSnippets.changed||n.queries.changed||n.filters.changed,{inEditMode:o,inUseMode:u}=b.default.useContext(le),[d,h]=b.default.useState(!1),f=()=>h(!0),m=()=>h(!1),[g,v]=b.default.useState(!1),_=()=>v(!0),k=()=>v(!1),[E,L]=b.default.useState(!1),B=()=>L(!0),ue=()=>L(!1);return c(a.Group,{position:"apart",pt:0,px:10,pb:"xs",children:[r(a.Group,{position:"left",children:o&&r(ma,{})}),c(a.Group,{position:"right",children:[!u&&r(a.Button,{variant:"default",size:"xs",disabled:!n.views.VIE,onClick:n.views.addAPanelToVIE,leftIcon:r(T.PlaylistAdd,{size:20}),children:"Add a Panel"}),o&&r(a.Button,{variant:"default",size:"xs",onClick:_,leftIcon:r(T.Filter,{size:20}),children:"Filters"}),o&&r(a.Button,{variant:"default",size:"xs",onClick:f,leftIcon:r(T.Database,{size:20}),children:"Data Settings"}),!u&&r(a.Button,{variant:"default",size:"xs",onClick:e,disabled:!l,leftIcon:r(T.DeviceFloppy,{size:20}),children:"Save Changes"}),!u&&r(a.Button,{color:"red",size:"xs",disabled:!l,onClick:s,leftIcon:r(T.Recycle,{size:20}),children:"Revert Changes"}),c(a.Menu,{width:180,children:[r(a.Menu.Target,{children:r(a.Button,{variant:"default",size:"xs",leftIcon:r(T.Share,{size:20}),children:"Export"})}),c(a.Menu.Dropdown,{children:[r(a.Menu.Item,{icon:r(T.Download,{size:14}),onClick:n.queries.downloadAllData,children:"Download Data"}),r(a.Menu.Item,{icon:r(T.Code,{size:14}),onClick:B,children:"View Schema"})]})]})]}),r(la,{opened:g,close:k}),r(Yi,{opened:d,close:m}),r(ya,{opened:E,close:ue,getCurrentSchema:i})]})}),rd="",Fn=A.observer(()=>{const{freezeLayout:t}=b.default.useContext(le),[e,n]=b.default.useState(!1),{panel:i}=K();return b.default.useEffect(()=>{t(e)},[e]),!i.description||i.description==="<p><br></p>"?null:c(N,{children:[r(a.Modal,{opened:e,onClose:()=>n(!1),title:i.title,withCloseButton:!1,children:r(dn.default,{readOnly:!0,value:i.description,onChange:O.default.noop,sx:{border:"none"}})}),r(a.Tooltip,{label:"Click to see description",position:"top-start",withinPortal:!0,children:r(a.ActionIcon,{variant:"subtle",color:"blue",onClick:()=>n(s=>!s),sx:{verticalAlign:"baseline",cursor:"pointer"},children:r(T.InfoCircle,{size:20})})})]})}),qn=t=>{const{title:e="Variables",variables:n}=t,i=U.useClipboard(),s=l=>{i.copy(l),ht.showNotification({color:"green",message:"Copied to clipboard"})};return c(a.Paper,{withBorder:!0,p:"sm",children:[r(a.Text,{size:"xs",color:"dimmed",mb:"sm",children:e}),r(a.Stack,{style:{maxHeight:"300px"},children:n.map(l=>c(a.Text,{size:"sm",children:[c(a.Code,{color:"teal",children:["// ",l.description]}),r("br",{}),c(a.Code,{onClick:()=>s(l.name),style:{cursor:"pointer"},children:[l.name," : ",l.valueType]})]},l.name))})]})};class va{constructor(e,n){V(this,"operationId");V(this,"operation");V(this,"operationSchema");V(this,"variables",[]);this.operationManager=e,this.instance=n,J.makeAutoObservable(this)}get schemaList(){return this.operationManager.getOperationSchemaList()}async configOperation(e,n){const i=await this.operationManager.retrieveTrigger(e),s=this.operationManager.getOperationSchemaList().find(l=>l.id===(i==null?void 0:i.schemaRef));J.runInAction(()=>{this.operationId=e,this.operation=i,this.operationSchema=s,this.variables=n})}async changeSchema(e){this.operationId&&(await this.operationManager.createOrGetOperation(this.operationId,e),await this.configOperation(this.operationId,this.variables))}}function ba(t){return!!t.operationId}const xa=A.observer(({model:t,onClick:e})=>{var i;const n=(i=t.operationSchema)==null?void 0:i.displayName;return r(a.Button,{variant:"outline",onClick:e,children:n})}),Ca=A.observer(({model:t})=>{const e={operation:t.operation,instance:t.instance,variables:[]};return w.createElement(t.operationSchema.configRender,e)});function wa({model:t}){const e=t.schemaList,n=e.map(s=>({label:s.displayName,value:s.id}));async function i(s){await t.changeSchema(e.find(l=>l.id===s))}return r(a.Select,{label:"Operation",data:n,onChange:i,value:t.operationSchema.id})}const Sa=A.observer(t=>{const[e,{setTrue:n,setFalse:i}]=R.useBoolean(!1),{operationManager:s,operationId:l,instance:o,variables:u}=t,d=R.useCreation(()=>new va(s,o),[s,o]);return R.useAsyncEffect(async()=>{await d.configOperation(l,u)},[l,d]),ba(d)?c(N,{children:[r(xa,{model:d,onClick:n}),r(a.Modal,{opened:e,onClose:i,title:"Operation Settings",closeButtonLabel:"close",children:c(a.Stack,{children:[r(wa,{model:d}),r(Ca,{model:d}),r(qn,{title:"Variables",variables:d.variables})]})})]}):null});class Ia{constructor(e,n){V(this,"triggerId");V(this,"trigger");V(this,"triggerSchema");V(this,"sampleData");this.triggerManager=e,this.instance=n,J.makeAutoObservable(this)}get schemaList(){return this.triggerManager.getTriggerSchemaList()}async configTrigger(e,n){const i=await this.triggerManager.retrieveTrigger(e),s=this.triggerManager.getTriggerSchemaList().find(l=>l.id===(i==null?void 0:i.schemaRef));J.runInAction(()=>{this.triggerId=e,this.trigger=i,this.triggerSchema=s,this.sampleData=n})}async changeSchema(e){this.triggerId&&(await this.triggerManager.createOrGetTrigger(this.triggerId,e),await this.configTrigger(this.triggerId,this.sampleData))}isReady(){return Da(this)}}function Da(t){return!!t.triggerId&&!!t.triggerSchema}function Ta(t,e){return R.useCreation(()=>new Ia(t,e),[t,e])}const _a=A.observer(({model:t,onClick:e})=>{const n=t.triggerSchema.nameRender,i={trigger:t.trigger,instance:t.instance,sampleData:t.sampleData};return r(a.Button,{variant:"outline",onClick:e,children:w.createElement(n,i)})}),Aa=A.observer(({model:t})=>{const e=t.schemaList,n=e.map(s=>({label:s.displayName,value:s.id}));async function i(s){await t.changeSchema(e.find(l=>l.id===s))}return r(a.Select,{label:"Trigger",data:n,value:t.triggerSchema.id,onChange:i})}),ka=A.observer(({model:t})=>{const e={trigger:t.trigger,instance:t.instance,sampleData:t.sampleData};return w.createElement(t.triggerSchema.configRender,e)}),Ma=A.observer(t=>{const[e,{setTrue:n,setFalse:i}]=R.useBoolean(!1),s=t.model;return c(N,{children:[r(a.Modal,{opened:e,onClose:i,title:"Setup Trigger",closeButtonLabel:"close setup",children:c(a.Stack,{children:[r(Aa,{model:s}),r(ka,{model:s}),r(qn,{title:"Payload",variables:s.triggerSchema.payload})]})}),r(_a,{onClick:n,model:s})]})});class ke{constructor(e,n){this.root=e,this.path=n}async deleteItem(e){e===null&&await this.root.deleteItem(this.path);const n=await this.root.getItem(this.path)||{};await this.root.setItem(this.path,S.omit(n,e))}async getItem(e){const n=await this.root.getItem(this.path);return e===null?n:S.get(n,e)}async setItem(e,n){if(e===null)await this.root.setItem(this.path,n);else{const i=await this.root.getItem(this.path)||{};await this.root.setItem(this.path,{...i,[e]:n})}return await this.getItem(e)}watchItem(e,n,i){return e===null?this.root.watchItem(this.path,(s,l)=>{n(s,l)},i):this.root.watchItem(this.path,(s,l)=>{const o=S.get(s,e),u=S.get(l,e);o!==u&&n(o,u)},i)}}class Ct{constructor(e,n,i){V(this,"attachmentStorage");this.instance=e,this.attachmentKey=n,this.constructInstance=i,this.attachmentStorage=new ke(e.instanceData,n)}async getInstance(e){if(await this.attachmentStorage.getItem(e))return this.constructInstance(new ke(this.attachmentStorage,e))}async create(e,n){return await this.attachmentStorage.setItem(e,n),this.constructInstance(new ke(this.attachmentStorage,e))}async remove(e){await this.attachmentStorage.deleteItem(e)}async list(){const e=await this.attachmentStorage.getItem(null);return Promise.all(S.values(e).map(n=>this.constructInstance(new ke(this.attachmentStorage,n.id))))}}class Gn{constructor(e){V(this,"rootRef");this.rootRef=J.observable({current:e})}async deleteItem(e){J.runInAction(()=>{S.unset(this.rootRef.current,[e])})}getItem(e){const n=this.getValueFromRoot(e);return Promise.resolve(n)}getValueFromRoot(e){return e===null?J.toJS(this.rootRef.current):S.get(this.rootRef.current,[e])}setItem(e,n){if(e===null)if(S.isObject(n))J.runInAction(()=>{this.rootRef.current=n});else throw new Error("Cannot set root value to non-object");else J.runInAction(()=>{S.set(this.rootRef.current,[e],n)});return Promise.resolve(this.getItem(e))}watchItem(e,n,i){return J.reaction(()=>this.getValueFromRoot(e),(s,l)=>{n(s,l)},{requiresObservable:!0,fireImmediately:S.get(i,"fireImmediately",!1)})}}class Ea{constructor(){V(this,"channels",new Map);V(this,"globalChannel",new pn.default)}getChannel(e){const n=this.channels.get(e);if(n)return n;const i=new pn.default;return this.channels.set(e,i),i}}class Va{constructor(e){V(this,"instances",new Map);this.pluginManager=e}get availableVizList(){return this.pluginManager.installedPlugins.flatMap(e=>e.manifest.viz)}resolveComponent(e){return this.pluginManager.factory.viz(e)}getOrCreateInstance(e){const n=this.instances.get(e.id);if(n)return n;const i={id:e.id,name:e.viz.type,type:e.viz.type,messageChannels:new Ea,instanceData:new Gn(e.viz.conf)};return this.instances.set(e.id,i),i}}function Bn(t,e,n){return{vizManager:n,locale:"zh",msgChannels:t.messageChannels,instanceData:t.instanceData,pluginData:new Gn({}),colorPalette:{getColor(){return()=>""}},data:e}}const Pa=t=>{const{panel:e,vizManager:n,data:i}=t,s=n.resolveComponent(e.viz.type),l=n.getOrCreateInstance(e),o={...Bn(l,i,n),viewport:{width:e.layout.w,height:e.layout.h}},u=s.viewRender;return r(u,{context:o,instance:l,...S.omit(t,["panel","vizManager","data"])})},za=t=>{const{vizManager:e,panel:n,panelInfoEditor:i,data:s}=t,l=e.resolveComponent(n.viz.type),o=e.getOrCreateInstance(n),u={...Bn(o,s,e),panelInfoEditor:i},d=l.configRender;return r(d,{context:u,instance:o,...S.omit(t,["panel","vizManager","data","panelInfoEditor"])})},Ln=(t,e)=>{const n=Pe.default.bezier(t),i=Pe.default.bezier(e);return function(s){return s<50?n(s*2/100).hex():i((s-50)*2/100).hex()}},Ue=t=>{const e=Pe.default.bezier(t);return function(n){return e(n/100).hex()}},Oa={type:"interpolation",displayName:"Red / Green",getColor:Ln(["darkred","deeppink","lightyellow"],["lightyellow","lightgreen","teal"]),name:"red-green",category:"diverging"},Fa={type:"interpolation",displayName:"Yellow / Blue",getColor:Ln(["#8f531d","#ffd347","#e3efe3"],["#eefaee","#4ecbbf","#003f94"]),name:"yellow-blue",category:"diverging"},qa={type:"interpolation",displayName:"Red",getColor:Ue(["#fff7f1","darkred"]),name:"red",category:"sequential"},Ga={type:"interpolation",displayName:"Green",getColor:Ue(["#f0ffed","darkgreen"]),name:"green",category:"sequential"},Ba={type:"interpolation",displayName:"Blue",getColor:Ue(["#f9fcff","#48b3e9","darkblue"]),name:"blue",category:"sequential"},La={type:"interpolation",displayName:"Orange",getColor:Ue(["#fff7f1","darkorange","#b60000"]),name:"orange",category:"sequential"},Ra="4.16.2";class $a{constructor(e){V(this,"staticColors",new Map);V(this,"interpolations",new Map);e.installedPlugins.forEach(n=>{n.manifest.color.forEach(i=>{this.register(i)})})}getStaticColors(){return Array.from(this.staticColors.values())}register(e){const n=this.encodeColor(e);e.type==="single"?(this.staticColors.has(n)&&console.warn(`the color '${e.name}' has been registered under '${e.category}', previous registered value will be overridden`),this.staticColors.set(n,e)):e.type==="interpolation"&&(this.interpolations.has(n)&&console.warn(`the interpolation '${e.name}' has been registered under '${e.category}', previous registered value will be overridden`,`the interpolation '${e.name}' has been registered under '${e.category}', previous registered value will be overridden`),this.interpolations.set(n,e))}decodeStaticColor(e){return this.staticColors.get(e)}encodeColor(e){return`\${${e.category}}.{${e.name}}`}decodeInterpolation(e){return this.interpolations.get(e)}getColorInterpolations(){return Array.from(this.interpolations.values())}}class Na{constructor(){V(this,"plugins",new Map);V(this,"vizComponents",new Map);V(this,"factory",{viz:e=>{const n=this.vizComponents.get(e);if(n)return n;throw new Error(`Viz Component (${e}) not found`)}})}install(e){if(this.plugins.has(e.id))throw new Error(`Plugin (${e.id}) has been installed before`);this.plugins.set(e.id,e);for(const n of e.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 ja{constructor(){V(this,"migrations",[])}version(e,n){return this.migrations.push({version:e,handler:n}),this}run(e,n){var l;if(e.from===e.to)return n;if(e.from>e.to)throw new Error(`Can not downgrade from version '${e.from}' to (${e.to})`);const i=this.migrations.filter(o=>o.version>e.from&&o.version<=e.to),s=S.orderBy(i,"version","asc");if(((l=S.last(s))==null?void 0:l.version)!==e.to)throw new Error(`Migration to version ${e.to} not found`);return s.reduce((o,u)=>u.handler(o),n)}}class oe extends ja{constructor(){super(),this.configVersions()}version(e,n){return super.version(e,i=>({version:e,...n(i)}))}async migrate({instanceData:e}){const n=await e.getItem(null),i=S.get(n,"version",0),s=this.run({from:i,to:this.VERSION},n);await e.setItem(null,s)}async needMigration({instanceData:e}){const n=await e.getItem(null);return S.get(n,"version",0)<this.VERSION}}const wt={content:""},q=(t,e)=>{const[n,{setFalse:i}]=R.useBoolean(!0),[s,l]=w.useState();w.useEffect(()=>(t.getItem(e).then(u=>{l(u),i()}),t.watchItem(e,u=>{l(u)})));const o=w.useCallback(async u=>{await t.setItem(e,u),l(u)},[t,e]);return{loading:n,value:s,set:o}};function Rn(t){const e=w.useRef(null);return w.useEffect(()=>{var n,i,s;t&&((s=(i=(n=e.current)==null?void 0:n.editor)==null?void 0:i.clipboard)==null||s.dangerouslyPasteHTML(t))},[t]),e}function Wa({context:t}){const{value:e}=q(t.instanceData,"config"),n=e==null?void 0:e.content,i=Rn(n);return e!=null&&e.content?r(ft.RichTextEditor,{ref:i,readOnly:!0,value:e.content,onChange:S.noop,sx:{border:"none",".ql-editor":{padding:0}}}):null}function Qa({context:t}){const{value:e,set:n}=q(t.instanceData,"config"),i=w.useMemo(()=>S.defaults({},e,wt),[e]),{control:s,handleSubmit:l,watch:o,getValues:u}=C.useForm({defaultValues:i});o("content");const d=u(),h=w.useMemo(()=>!S.isEqual(d,e),[d,e]),f=Rn(e==null?void 0:e.content);return r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:l(n),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[r(a.Text,{children:"Content"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!h,children:r(T.DeviceFloppy,{size:20})})]}),r(C.Controller,{name:"content",control:s,render:({field:m})=>r(dn.default,{ref:f,sx:{flex:1},...S.omit(m,"ref")})})]})})}class Ya extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}fixMalformedConfig(n){return S.defaults({},n,wt)}configVersions(){this.version(1,n=>({version:1,config:this.fixMalformedConfig(n)}))}}const Ua={displayName:"RichText",migrator:new Ya,name:"richText",viewRender:Wa,configRender:Qa,createConfig:()=>wt},St={align:"center",template:"The variable ${value} is defined in Variables section",variables:[{name:"value",size:"20px",weight:"bold",color:{type:"static",staticColor:"blue"},data_field:"",aggregation:{type:"none",config:{}},formatter:{output:"number",mantissa:0}}]};function Xa(t){if("variables"in t)return t;const{align:e,size:n,weight:i,color:s,content:{prefix:l="",data_field:o="value",formatter:u={output:"number",mantissa:0},postfix:d=""}={}}=t;return{align:e,template:`${l} \${value} ${d}`,variables:[{name:"value",data_field:o,aggregation:{type:"none",config:{}},formatter:u,color:s,weight:i,size:n}]}}class Ja extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({config:Xa(n)}))}}const It=w.forwardRef(function({value:e,onChange:n,...i},s){return r(a.TextInput,{ref:s,value:e,onChange:n,...i})}),qe={mantissa:0,output:"number",trimMantissa:!1,average:!1};function Ka({value:t,onChange:e},n){const i=u=>{e({...t,output:u})},s=u=>{const d=u===0?!1:t.trimMantissa;e({...t,mantissa:u,trimMantissa:d})},l=u=>{e({...t,trimMantissa:u.currentTarget.checked})},o=u=>{e({...t,average:u.currentTarget.checked})};return c(a.Stack,{ref:n,children:[c(a.Group,{grow:!0,children:[r(a.Select,{label:"Format",data:[{label:"1234",value:"number"},{label:"99%",value:"percent"}],value:t.output,onChange:i,sx:{flexGrow:1}}),r(a.Switch,{label:c(a.Stack,{spacing:0,children:[r(a.Text,{children:"Average"}),r(a.Text,{size:12,color:"gray",children:"like 1.234k, 1.234m"})]}),checked:t.average,onChange:o,disabled:t.output!=="number",sx:{flexGrow:1},styles:{root:{alignSelf:"flex-end"},body:{alignItems:"center"},label:{display:"block"}}})]}),c(a.Group,{grow:!0,children:[r(a.NumberInput,{label:"Mantissa",defaultValue:0,min:0,step:1,max:4,value:t.mantissa,onChange:s}),r(a.Switch,{label:"Trim mantissa",checked:t.trimMantissa,onChange:l,disabled:t.mantissa===0,styles:{root:{alignSelf:"flex-end"},body:{alignItems:"center"}}})]}),c(a.Stack,{spacing:0,children:[r(a.Text,{weight:"bold",children:"Preview"}),r(Ae,{children:c(a.Group,{position:"apart",children:[c(a.Text,{size:12,color:"gray",children:["123456789 ",r(T.ArrowRight,{size:9})," ",re.default(123456789).format(t)]}),c(a.Text,{size:12,color:"gray",children:["1234 ",r(T.ArrowRight,{size:9})," ",re.default(1234).format(t)]}),c(a.Text,{size:12,color:"gray",children:["0.1234 ",r(T.ArrowRight,{size:9})," ",re.default(.1234).format(t)]})]})})]})]})}const Dt=b.default.forwardRef(Ka);function Xe(){return{name:U.randomId(),size:"20px",weight:"bold",color:{type:"static",staticColor:"blue"},data_field:"",aggregation:{type:"none",config:{}},formatter:qe}}const Za=[{label:"None",value:"none"},{label:"Sum",value:"sum"},{label:"Mean",value:"mean"},{label:"Median",value:"median"},{label:"Max",value:"max"},{label:"Min",value:"min"},{label:"Quantile(99%, 95%, ...)",value:"quantile"}];function Ha({label:t,value:e,onChange:n},i){w.useEffect(()=>{typeof e=="string"&&(console.log(e),n({type:e,config:{}}))},[e,n]);const s=o=>{n(o==="quantile"?{type:"quantile",config:{p:.99}}:{type:o,config:{}})},l=o=>{n({type:"quantile",config:{p:o}})};return c(a.Group,{grow:!0,noWrap:!0,pt:"sm",children:[r(a.Select,{ref:i,label:t,data:Za,value:e.type,onChange:s}),e.type==="quantile"&&r(a.NumberInput,{label:"p",value:e.config.p,onChange:l,precision:2,min:.05,step:.05,max:1})]})}const es=b.default.forwardRef(Ha);function ts({label:t,required:e,value:n,onChange:i,data:s,clearable:l=!1,sx:o,...u},d){const h=b.default.useMemo(()=>{if(!Array.isArray(s)||s.length===0)return[];const m=Object.keys(s[0]).map(g=>({label:g,value:g}));return l?m.concat([{label:"unset",value:""}]):m},[s]);return r(a.Select,{ref:d,label:t,data:h,value:n,onChange:i,required:e,sx:o,...u})}const j=b.default.forwardRef(ts);function ns({label:t,value:e,onChange:n},i){const[s,l]=b.default.useState(Array.isArray(e)?[...e]:[]),o=b.default.useCallback(()=>{l(g=>[...g,""])},[l]),u=b.default.useCallback(g=>{l(v=>(v.splice(g,1),[...v]))},[l]),d=b.default.useMemo(()=>!O.default.isEqual(s,e),[s,e]),h=()=>{n(s.map(g=>g.toString()))},f=a.useMantineTheme(),m=b.default.useMemo(()=>Object.entries(f.colors).map(([g,v])=>v[6]),[f]);return c(N,{children:[c(a.Group,{position:"left",ref:i,children:[r(a.Text,{children:t}),r(a.ActionIcon,{mr:5,variant:"filled",color:"blue",disabled:!d,onClick:h,children:r(T.DeviceFloppy,{size:20})})]}),c(a.Group,{children:[s.map((g,v)=>r(a.ColorInput,{value:g,onChange:_=>{l(k=>(k.splice(v,1,_),[...k]))},swatches:m,rightSection:r(a.ActionIcon,{onClick:()=>u(v),color:"red",children:r(T.Trash,{size:14})}),sx:{width:"45%"}})),r(a.ActionIcon,{onClick:o,color:"blue",variant:"outline",children:r(T.PlaylistAdd,{size:20})})]})]})}const rs=b.default.forwardRef(ns);function is({value:t,onChange:e},n){const{colorManager:i}=w.useContext(ge),s=b.default.useMemo(()=>i.getStaticColors().map(u=>({label:u.name,group:u.category,value:u.value})),[i]),l=b.default.useMemo(()=>s.some(o=>o.value===t),[t,s]);return c(a.Group,{position:"apart",spacing:4,ref:n,children:[r(a.TextInput,{placeholder:"Set any color",value:l?"":t,onChange:o=>e(o.currentTarget.value),rightSection:r(a.ColorSwatch,{color:l?"transparent":t,radius:4}),variant:l?"filled":"default",sx:{maxWidth:"46%",flexGrow:1}}),r(a.Text,{sx:{flexGrow:0},children:"or"}),r(a.Select,{data:s,value:t,onChange:e,variant:l?"default":"filled",placeholder:"Pick a theme color",icon:r(a.ColorSwatch,{color:l?t:"transparent",radius:4}),sx:{maxWidth:"46%",flexGrow:1}})]})}const xe=b.default.forwardRef(is),Je=[{label:"initial",value:0},{label:"500",value:25},{label:"700",value:50},{label:"semibold",value:75},{label:"bold",value:100}];function as({label:t,value:e,onChange:n},i){var o,u;const[s,l]=b.default.useState((u=(o=Je.find(d=>d.label===e))==null?void 0:o.value)!=null?u:Je[0].value);return b.default.useEffect(()=>{const d=Je.find(h=>h.value===s);d&&n(d.label)},[s]),c(a.Stack,{spacing:0,mt:"sm",mb:"lg",children:[r(a.Text,{size:"sm",children:t}),r(a.Slider,{label:null,marks:Je,value:s,onChange:l,step:25,placeholder:"Pick a font size",ref:i})]})}const ss=b.default.forwardRef(as);function ls({label:t,value:e,onChange:n},i){const[s,l]=b.default.useState(Array.isArray(e)?[...e]:[]),o=b.default.useCallback(()=>{l(f=>[...f,""])},[l]),u=b.default.useCallback(f=>{l(m=>(m.splice(f,1),[...m]))},[l]),d=b.default.useMemo(()=>!O.default.isEqual(s,e),[s,e]),h=()=>{n(s.map(f=>f.toString()))};return c(N,{children:[c(a.Group,{position:"left",ref:i,children:[r(a.Text,{children:t}),r(a.ActionIcon,{mr:5,variant:"filled",color:"blue",disabled:!d,onClick:h,children:r(T.DeviceFloppy,{size:20})})]}),c(a.Group,{children:[s.map((f,m)=>r(a.TextInput,{value:f,onChange:g=>{const v=g.currentTarget.value;l(_=>(_.splice(m,1,v),[..._]))},rightSection:r(a.ActionIcon,{onClick:()=>u(m),color:"red",children:r(T.Trash,{size:14})}),sx:{width:"45%"}})),r(a.ActionIcon,{onClick:o,color:"blue",variant:"outline",children:r(T.PlaylistAdd,{size:20})})]})]})}const os=b.default.forwardRef(ls),us=b.default.forwardRef(function({value:e,onChange:n},i){const s=e.color.type,l=(o,u)=>{const d=O.default.cloneDeep(e);O.default.set(d,o,u),n(d)};return c(N,{children:[r(a.Divider,{my:"xs",label:"Typography",labelPosition:"center"}),r(a.Stack,{children:r(a.TextInput,{label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",sx:{flex:1},value:e.size,onChange:o=>l("size",o.currentTarget.value)})}),r(a.Group,{position:"apart",grow:!0,sx:{"> *":{flexGrow:1,maxWidth:"100%"}},children:r(ss,{label:"Font Weight",value:e.weight,onChange:o=>l("weight",o)})}),r(a.Divider,{my:"xs",label:"Style",labelPosition:"center"}),c(a.Stack,{children:[r(a.Select,{label:"Color Type",data:[{label:"Static Color",value:"static"},{label:"Continuous Color",value:"continuous"}],value:e.color.type,onChange:o=>l("color.type",o)}),s==="static"&&r(xe,{value:e.color.staticColor,onChange:o=>l("color.staticColor",o)}),s==="continuous"&&c(N,{children:[r(os,{label:"Value Range",value:e.color.valueRange,onChange:o=>l("color.valueRange",o)}),r(rs,{label:"Color Range",value:e.color.colorRange,onChange:o=>l("color.colorRange",o)})]})]})]})}),Ke=b.default.forwardRef(function({value:e,onChange:n,data:i,withStyle:s=!0},l){const o=(u,d)=>{const h=O.default.cloneDeep(e);O.default.set(h,u,d),n(h)};return c(a.Box,{px:"sm",py:"md",ref:l,children:[r(a.Text,{weight:"bold",pb:0,children:e.name}),r(a.Divider,{my:"xs",label:"Data",labelPosition:"center"}),c(a.Group,{grow:!0,noWrap:!0,children:[r(a.TextInput,{label:"Name",required:!0,value:e.name,onChange:u=>o("name",u.currentTarget.value)}),r(j,{label:"Data Field",required:!0,data:i,value:e.data_field,onChange:u=>o("data_field",u)})]}),r(es,{label:"Aggregation",value:e.aggregation,onChange:u=>o("aggregation",u)}),r(a.Divider,{my:"xs",label:"Format",labelPosition:"center"}),r(Dt,{value:e.formatter,onChange:u=>o("formatter",u)}),s&&r(us,{value:e,onChange:n})]})});function cs(t){const e=Array.from(t).sort((i,s)=>i-s),n=Math.floor(e.length/2);return e.length%2===0?(e[n-1]+e[n])/2:e[n]}function Tt(t,e,n){var s,l,o,u;const i=t.map(d=>d[e]);switch(n.type){case"sum":return O.default.sum(i);case"mean":return O.default.mean(i);case"median":return cs(i);case"max":return(s=O.default.max(i))!=null?s:0;case"min":return(l=O.default.min(i))!=null?l:0;case"quantile":return(o=gi.quantile(i,n.config.p))!=null?o:0;default:return(u=t[0])==null?void 0:u[e]}}var $n=function(){},Ge=function(){};process.env.NODE_ENV!=="production"&&($n=function(t,e){!t&&typeof console<"u"&&console.warn(e)},Ge=function(t,e){if(!t)throw new Error(e)});const ds=(t,e,n)=>Math.min(Math.max(n,t),e),Nn=(t,e,n)=>{const i=e-t;return i===0?1:(n-t)/i},_t=(t,e,n)=>-n*t+n*e+t,jn=(t,e)=>n=>Math.max(Math.min(n,e),t),Be=t=>t%1?Number(t.toFixed(5)):t,Ze=/(-)?([\d]*\.?[\d])+/g,At=/(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))/gi,ps=/^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))$/i;function Le(t){return typeof t=="string"}const He={test:t=>typeof t=="number",parse:parseFloat,transform:t=>t},Wn=Object.assign(Object.assign({},He),{transform:jn(0,1)});Object.assign(Object.assign({},He),{default:1});const Re=(t=>({test:e=>Le(e)&&e.endsWith(t)&&e.split(" ").length===1,parse:parseFloat,transform:e=>`${e}${t}`}))("%");Object.assign(Object.assign({},Re),{parse:t=>Re.parse(t)/100,transform:t=>Re.transform(t*100)});const kt=(t,e)=>n=>Boolean(Le(n)&&ps.test(n)&&n.startsWith(t)||e&&Object.prototype.hasOwnProperty.call(n,e)),Qn=(t,e,n)=>i=>{if(!Le(i))return i;const[s,l,o,u]=i.match(Ze);return{[t]:parseFloat(s),[e]:parseFloat(l),[n]:parseFloat(o),alpha:u!==void 0?parseFloat(u):1}},Te={test:kt("hsl","hue"),parse:Qn("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:n,alpha:i=1})=>"hsla("+Math.round(t)+", "+Re.transform(Be(e))+", "+Re.transform(Be(n))+", "+Be(Wn.transform(i))+")"},fs=jn(0,255),Mt=Object.assign(Object.assign({},He),{transform:t=>Math.round(fs(t))}),Ce={test:kt("rgb","red"),parse:Qn("red","green","blue"),transform:({red:t,green:e,blue:n,alpha:i=1})=>"rgba("+Mt.transform(t)+", "+Mt.transform(e)+", "+Mt.transform(n)+", "+Be(Wn.transform(i))+")"};function hs(t){let e="",n="",i="",s="";return t.length>5?(e=t.substr(1,2),n=t.substr(3,2),i=t.substr(5,2),s=t.substr(7,2)):(e=t.substr(1,1),n=t.substr(2,1),i=t.substr(3,1),s=t.substr(4,1),e+=e,n+=n,i+=i,s+=s),{red:parseInt(e,16),green:parseInt(n,16),blue:parseInt(i,16),alpha:s?parseInt(s,16)/255:1}}const Et={test:kt("#"),parse:hs,transform:Ce.transform},et={test:t=>Ce.test(t)||Et.test(t)||Te.test(t),parse:t=>Ce.test(t)?Ce.parse(t):Te.test(t)?Te.parse(t):Et.parse(t),transform:t=>Le(t)?t:t.hasOwnProperty("red")?Ce.transform(t):Te.transform(t)},Yn="${c}",Un="${n}";function gs(t){var e,n,i,s;return isNaN(t)&&Le(t)&&((n=(e=t.match(Ze))===null||e===void 0?void 0:e.length)!==null&&n!==void 0?n:0)+((s=(i=t.match(At))===null||i===void 0?void 0:i.length)!==null&&s!==void 0?s:0)>0}function Xn(t){typeof t=="number"&&(t=`${t}`);const e=[];let n=0;const i=t.match(At);i&&(n=i.length,t=t.replace(At,Yn),e.push(...i.map(et.parse)));const s=t.match(Ze);return s&&(t=t.replace(Ze,Un),e.push(...s.map(He.parse))),{values:e,numColors:n,tokenised:t}}function Jn(t){return Xn(t).values}function Kn(t){const{values:e,numColors:n,tokenised:i}=Xn(t),s=e.length;return l=>{let o=i;for(let u=0;u<s;u++)o=o.replace(u<n?Yn:Un,u<n?et.transform(l[u]):Be(l[u]));return o}}const ms=t=>typeof t=="number"?0:t;function ys(t){const e=Jn(t);return Kn(t)(e.map(ms))}const Zn={test:gs,parse:Jn,createTransformer:Kn,getAnimatableNone:ys};function Vt(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+(e-t)*6*n:n<1/2?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function Hn({hue:t,saturation:e,lightness:n,alpha:i}){t/=360,e/=100,n/=100;let s=0,l=0,o=0;if(!e)s=l=o=n;else{const u=n<.5?n*(1+e):n+e-n*e,d=2*n-u;s=Vt(d,u,t+1/3),l=Vt(d,u,t),o=Vt(d,u,t-1/3)}return{red:Math.round(s*255),green:Math.round(l*255),blue:Math.round(o*255),alpha:i}}const vs=(t,e,n)=>{const i=t*t,s=e*e;return Math.sqrt(Math.max(0,n*(s-i)+i))},bs=[Et,Ce,Te],er=t=>bs.find(e=>e.test(t)),tr=t=>`'${t}' is not an animatable color. Use the equivalent color code instead.`,nr=(t,e)=>{let n=er(t),i=er(e);Ge(!!n,tr(t)),Ge(!!i,tr(e));let s=n.parse(t),l=i.parse(e);n===Te&&(s=Hn(s),n=Ce),i===Te&&(l=Hn(l),i=Ce);const o=Object.assign({},s);return u=>{for(const d in o)d!=="alpha"&&(o[d]=vs(s[d],l[d],u));return o.alpha=_t(s.alpha,l.alpha,u),n.transform(o)}},xs=t=>typeof t=="number",Cs=(t,e)=>n=>e(t(n)),rr=(...t)=>t.reduce(Cs);function ir(t,e){return xs(t)?n=>_t(t,e,n):et.test(t)?nr(t,e):lr(t,e)}const ar=(t,e)=>{const n=[...t],i=n.length,s=t.map((l,o)=>ir(l,e[o]));return l=>{for(let o=0;o<i;o++)n[o]=s[o](l);return n}},ws=(t,e)=>{const n=Object.assign(Object.assign({},t),e),i={};for(const s in n)t[s]!==void 0&&e[s]!==void 0&&(i[s]=ir(t[s],e[s]));return s=>{for(const l in i)n[l]=i[l](s);return n}};function sr(t){const e=Zn.parse(t),n=e.length;let i=0,s=0,l=0;for(let o=0;o<n;o++)i||typeof e[o]=="number"?i++:e[o].hue!==void 0?l++:s++;return{parsed:e,numNumbers:i,numRGB:s,numHSL:l}}const lr=(t,e)=>{const n=Zn.createTransformer(e),i=sr(t),s=sr(e);return i.numHSL===s.numHSL&&i.numRGB===s.numRGB&&i.numNumbers>=s.numNumbers?rr(ar(i.parsed,s.parsed),n):($n(!0,`Complex values '${t}' and '${e}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`),o=>`${o>0?e:t}`)},Ss=(t,e)=>n=>_t(t,e,n);function Is(t){if(typeof t=="number")return Ss;if(typeof t=="string")return et.test(t)?nr:lr;if(Array.isArray(t))return ar;if(typeof t=="object")return ws}function Ds(t,e,n){const i=[],s=n||Is(t[0]),l=t.length-1;for(let o=0;o<l;o++){let u=s(t[o],t[o+1]);if(e){const d=Array.isArray(e)?e[o]:e;u=rr(d,u)}i.push(u)}return i}function Ts([t,e],[n]){return i=>n(Nn(t,e,i))}function _s(t,e){const n=t.length,i=n-1;return s=>{let l=0,o=!1;if(s<=t[0]?o=!0:s>=t[i]&&(l=i-1,o=!0),!o){let d=1;for(;d<n&&!(t[d]>s||d===i);d++);l=d-1}const u=Nn(t[l],t[l+1],s);return e[l](u)}}function As(t,e,{clamp:n=!0,ease:i,mixer:s}={}){const l=t.length;Ge(l===e.length,"Both input and output ranges must be the same length"),Ge(!i||!Array.isArray(i)||i.length===l-1,"Array of easing functions must be of length `input.length - 1`, as it applies to the transitions **between** the defined values."),t[0]>t[l-1]&&(t=[].concat(t),e=[].concat(e),t.reverse(),e.reverse());const o=Ds(e,i,s),u=l===2?Ts(t,o):_s(t,o);return n?d=>u(ds(t[0],t[l-1],d)):u}class ks{constructor({valueRange:e,colorRange:n}){V(this,"mapper");this.mapper=As(e,n)}getColor(e){return this.mapper(e)}}function Ms(t){return t===null?"null":t===void 0?"undefined":Array.isArray(t)?`Array(${t.length})`:t.toString()}function or({data_field:t,aggregation:e},n){return Tt(n,t,e)}function tt({formatter:t},e){return["string","number"].includes(typeof e)?re.default(e).format(t):Ms(e)}function Es(t,e){return t.type==="static"?t.staticColor:t.type==="continuous"?new ks(t).getColor(e):"black"}function Vs(t,e){const n={};return t.forEach(i=>{const{name:s,color:l,data_field:o,aggregation:u,size:d,weight:h}=i,f=Tt(e,o,u),m=tt(i,f);n[s]=r(a.Text,{sx:{fontSize:d,display:"inline"},color:Es(l,f),weight:h,children:m})}),n}function Ps(t){return t.split(" ").map(e=>c(N,{children:[e,"\xA0"]}))}function zs(t){const n=t.replaceAll("<br />","<br/>").replaceAll(`
40
40
  `,"<br/>").split("<br/>");return n.map((s,l)=>{const o=[Ps(s)];return l!==n.length-1&&o.push(r("br",{})),o}).flat().filter(s=>s!==void 0)}function Pt(t){return zs(t)}function zt(t,e,n){const i=Vs(e,n),s=/^\{(.+)\}(.*)$/;return t.split("$").map(l=>{var h;const o=s.exec(l);if(!o)return Pt(l);const u=i[o[1]];if(!u)return Pt(l);const d=(h=o[2])!=null?h:"";return c(N,{children:[u,Pt(d)]})})}function Os(t,e){const n={};return t.forEach(i=>{const{name:s,data_field:l,aggregation:o}=i,u=Tt(e,l,o);n[s]=tt(i,u)}),n}function ur(t,e,n){const i=Os(e,n),s=/^\{(.+)\}(.*)$/;return t.split("$").map(l=>{var h;const o=s.exec(l);if(!o)return l;const u=i[o[1]];if(!u)return l;const d=(h=o[2])!=null?h:"";return`${u}${d}`}).join("")}function Fs({context:t}){const{value:e=St}=q(t.instanceData,"config"),{template:n,variables:i,align:s}=e,l=w.useMemo(()=>zt(n,i,t.data),[n,i,t.data]);return r(a.Text,{align:s,children:Object.values(l).map(o=>o)})}function qs({control:t,index:e,remove:n,data:i}){return c(a.Stack,{my:"sm",p:0,sx:{border:"1px solid #eee",borderTopColor:"#333",borderTopWidth:2,position:"relative"},children:[r(C.Controller,{name:`variables.${e}`,control:t,render:({field:s})=>r(Ke,{data:i,...s})}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>n(e),sx:{position:"absolute",top:15,right:5},children:r(T.Trash,{size:16})})]},e)}function Gs({control:t,watch:e,data:n}){const{fields:i,append:s,remove:l}=C.useFieldArray({control:t,name:"variables"}),o=e("variables"),u=i.map((h,f)=>({...h,...o[f]})),d=()=>s(Xe());return c(a.Stack,{children:[u.map((h,f)=>r(qs,{control:t,index:f,remove:l,data:n},h.name)),r(a.Group,{position:"center",mt:"xs",children:r(a.Button,{onClick:d,children:"Add a Variable"})})]})}function Bs({context:t}){const e=t.data||[],{value:n,set:i}=q(t.instanceData,"config"),s=b.default.useMemo(()=>{const{align:g,template:v="",variables:_=[]}=S.defaultsDeep({},n,St);return{variables:_,template:v,align:g}},[n]),{control:l,handleSubmit:o,watch:u,getValues:d,reset:h}=C.useForm({defaultValues:s});b.default.useEffect(()=>{h(s)},[s]),u(["variables","template"]);const f=d(),m=b.default.useMemo(()=>!O.default.isEqual(f,n),[f,n]);return r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:o(i),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[r(a.Text,{weight:500,children:"Stats Configurations"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!m,children:r(T.DeviceFloppy,{size:20})})]}),r(C.Controller,{name:"template",control:l,render:({field:g})=>r(It,{label:"Template",py:"md",sx:{flexGrow:1},...g})}),r(a.Text,{pb:"sm",pt:"md",size:"sm",children:"Variables"}),r(Gs,{control:l,watch:u,data:e})]})})}const Ls={createConfig(){return{version:1,config:St}},displayName:"Stats",migrator:new Ja,name:"stats",viewRender:Fs,configRender:Bs};var we=(t=>(t.string="string",t.number="number",t.eloc="eloc",t.percentage="percentage",t))(we||{});const nt={columns:[],fontSize:"1rem",highlightOnHover:!1,horizontalSpacing:"1em",id_field:"",striped:!1,use_raw_columns:!1,verticalSpacing:"1em"},Rs=({vizManager:t,instance:e})=>R.useCreation(()=>new xr(e,t.resolveComponent(e.type),Qt),[e,t]),$s=(t,e)=>{const[n,i]=w.useState([]);return w.useEffect(()=>t.watchTriggerSnapshotList(s=>i(s.filter(l=>l.schemaRef===e))),[]),n};function cr(t,e,n){return Math.min(Math.max(t,e),n)}class Ns{constructor(e){this.steps=e;const n=[],i=new Set;for(const s of e)i.has(s.to)||(n.push(s),i.add(s.to));if(n.sort((s,l)=>s.from-l.from),n.length<2)throw new Error("MultiStepValueMapper requires at least 2 steps");this.steps=n}getLinearFunction(e,n){const i=(n.to-e.to)/(n.from-e.from),s=e.to-i*e.from;return l=>i*l+s}getStepFunctionForValue(e){let n=S.findLastIndex(this.steps,i=>i.from<=e);return n=cr(n,0,this.steps.length-2),this.getLinearFunction(this.steps[n],this.steps[n+1])}mapValue(e){return cr(this.getStepFunctionForValue(e)(e),0,100)}}function js(t,e){if(t==null)return{};var n={},i=Object.keys(t),s,l;for(l=0;l<i.length;l++)s=i[l],!(e.indexOf(s)>=0)&&(n[s]=t[s]);return n}function dr(t,e){if(t==null)return{};var n=js(t,e),i,s;if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(s=0;s<l.length;s++)i=l[s],!(e.indexOf(i)>=0)&&(!Object.prototype.propertyIsEnumerable.call(t,i)||(n[i]=t[i]))}return n}var Ws=["size","color","stroke"];function Qs(t){var e=t.size,n=e===void 0?24:e,i=t.color,s=i===void 0?"currentColor":i,l=t.stroke,o=l===void 0?2:l,u=dr(t,Ws);return c("svg",{xmlns:"http://www.w3.org/2000/svg",className:"icon icon-tabler icon-tabler-arrow-down",width:n,height:n,viewBox:"0 0 24 24",strokeWidth:o,stroke:s,fill:"none",strokeLinecap:"round",strokeLinejoin:"round",...u,children:[r("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),r("line",{x1:12,y1:5,x2:12,y2:19}),r("line",{x1:18,y1:13,x2:12,y2:19}),r("line",{x1:6,y1:13,x2:12,y2:19})]})}var Ys=["size","color","stroke"];function Us(t){var e=t.size,n=e===void 0?24:e,i=t.color,s=i===void 0?"currentColor":i,l=t.stroke,o=l===void 0?2:l,u=dr(t,Ys);return c("svg",{xmlns:"http://www.w3.org/2000/svg",className:"icon icon-tabler icon-tabler-arrow-up",width:n,height:n,viewBox:"0 0 24 24",strokeWidth:o,stroke:s,fill:"none",strokeLinecap:"round",strokeLinejoin:"round",...u,children:[r("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),r("line",{x1:12,y1:5,x2:12,y2:19}),r("line",{x1:18,y1:11,x2:12,y2:5}),r("line",{x1:6,y1:11,x2:12,y2:5})]})}const Xs=({header:t,cx:e})=>c(a.Text,{className:e("table-head-cell",{"table-head-cell--sortable":t.column.getCanSort()}),onClick:t.column.getToggleSortingHandler(),children:[t.isPlaceholder?null:_e.flexRender(t.column.columnDef.header,t.getContext()),r(Js,{direction:t.column.getIsSorted()})]}),Js=({direction:t})=>{switch(t){case"asc":return r(Us,{size:16});case"desc":return r(Qs,{size:"1em"});default:return null}},Ot={id:"builtin:table:click-cell-content",displayName:"Click Cell Content",nameRender:tl,configRender:Hs,payload:[{name:"row_index",description:"Index of the row that the cell belongs to",valueType:"number"},{name:"col_index",description:"Index of the column that the cell belongs to",valueType:"number"},{name:"row_data",description:"Data of the row that the cell belongs to",valueType:"object"}]},Ks={column:""};function pr(t){const{value:e}=q(t.instanceData,"config");return e?e.columns.map((n,i)=>({label:n.label,value:i.toString()})):[]}function Zs(t){return S.isEmpty(t)?[]:Object.keys(t[0]).map(e=>({label:e,value:e}))}function Hs(t){const e=pr(t.instance),n=Zs(t.sampleData),i=e.length>0?e:n,{value:s,set:l}=q(t.trigger.triggerData,"config"),{column:o}=S.defaults({},s,Ks),u=d=>{isNaN(+d)?l({column:d}):l({column:+d})};return r(a.Select,{clearable:!1,data:i,label:"Choose a column",value:o.toString(),onChange:u})}function el(t,e){return t?S.isNumber(t.column)?`Click cell of ${e[t.column].label}`:`Click cell of ${t.column}`:"Click cell content (click to config)"}function tl(t){const e=pr(t.instance),{value:n}=q(t.trigger.triggerData,"config");return r(a.Text,{children:el(n,e)})}const nl=a.createStyles(t=>({root:{overflow:"auto","& .table-head-cell":{display:"flex",flexFlow:"row nowrap",alignItems:"center",whiteSpace:"nowrap","&.table-head-cell--sortable":{cursor:"pointer",userSelect:"none"}},"&.table-highlight-on-hover tr":{transition:"background-color 0.2s","&:hover":{backgroundColor:t.colorScheme==="dark"?t.colors.dark[5]:t.colors.gray[0]}}},thead:{background:t.colorScheme==="dark"?t.colors.dark[7]:t.white,position:"sticky",top:0}})),rl=a.createStyles((t,e)=>({content:{display:"flex",alignItems:"center",justifyContent:"flex-start",".table-cell-text":{whiteSpace:"nowrap",marginLeft:t.spacing.xs,cursor:e.clickable?"pointer":"default",textDecoration:e.clickable?"underline":"none"}}}));function il(t){return t?Pe.default(t).oklch()[0]>.7?"black":"white":"inherit"}function al(t){const e=t.tableCellContext.bgColor;return{backgroundColor:e,color:il(e)}}function rt(t){const e=t.tableCellContext.isClickable(),n=rl({clickable:e});return r("div",{className:n.classes.content,style:{...al(t)},children:r(a.Text,{className:"table-cell-text",onClick:t.tableCellContext.getClickHandler(),children:r("span",{children:t.children})})})}function sl(t){return r(rt,{...t,children:t.value})}function ll(t){return r(rt,{...t,children:t.value})}function ol(t){const e=re.default(t.value).format({thousandSeparated:!0});return r(rt,{...t,children:e})}function ul(t){const e=re.default(t.value).format({output:"percent",mantissa:3});return r(rt,{...t,children:e})}function cl(t){switch(t.type){case we.string:return r(sl,{...t});case we.eloc:return r(ll,{...t});case we.number:return r(ol,{...t});case we.percentage:return r(ul,{...t})}}const dl=t=>{const e=Rs(t),n=$s(e.triggerManager,Ot.id),{colorManager:i}=w.useContext(ge);return w.useCallback(s=>new fl(t.getColIndex,s,n,e,i),[n,e,t.getColIndex])};function pl({context:t,instance:e}){var st,We,lt;const n=(st=t.data)!=null?st:[],{height:i,width:s}=t.viewport,{value:l=nt}=q(t.instanceData,"config"),{use_raw_columns:o,columns:u,...d}=l,{classes:h,cx:f}=nl(),m=b.default.useMemo(()=>o?Object.keys(n[0]).map(ee=>({label:ee,value_field:ee,value_type:we.string})):u,[o,u,n]),g=dl({getColIndex:w.useCallback(ee=>m.indexOf(ee.column.columnDef.meta),[m]),vizManager:t.vizManager,instance:e}),v=w.useMemo(()=>{const ee=_e.createColumnHelper(),ce=m.map(ne=>ee.accessor(ne.value_field,{cell:Se=>r(cl,{tableCellContext:g(Se.cell),value:Se.getValue(),type:ne.value_type}),header:ne.label,enableSorting:!0,meta:ne}));return[ee.display({id:"#index",cell:ne=>ne.row.index+1,header:"#",size:10*(n.length.toString().length+1)}),...ce]},[m,g]),[_,k]=w.useState([]),E=_e.useReactTable({data:n,state:{sorting:_},onSortingChange:k,columns:v,getCoreRowModel:_e.getCoreRowModel(),getSortedRowModel:_e.getSortedRowModel()}),{rows:L}=E.getRowModel(),B=b.default.useRef(null),ue=mi.useVirtual({parentRef:B,size:L.length,estimateSize:w.useCallback(()=>28,[]),overscan:20}),{virtualItems:H,totalSize:Ne}=ue,Me=H.length>0&&((We=H==null?void 0:H[0])==null?void 0:We.start)||0,je=H.length>0?Ne-(((lt=H==null?void 0:H[H.length-1])==null?void 0:lt.end)||0):0;return r("div",{ref:B,style:{height:i,width:s},className:f(h.root,{"table-highlight-on-hover":l.highlightOnHover}),children:c(a.Table,{sx:{maxHeight:i},...d,striped:l.striped,children:[r("thead",{className:h.thead,children:E.getHeaderGroups().map(ee=>r("tr",{children:ee.headers.map(ce=>r("th",{style:{width:ce.getSize()},children:r(Xs,{header:ce,cx:f})},ce.id))},ee.id))}),c("tbody",{children:[Me>0&&r("tr",{children:r("td",{style:{height:`${Me}px`}})}),H.map(ee=>{const ce=L[ee.index];return r("tr",{children:ce.getVisibleCells().map(te=>r("td",{children:_e.flexRender(te.column.columnDef.cell,te.getContext())},te.id))},ce.id)}),je>0&&r("tr",{children:r("td",{style:{height:`${je}px`}})})]})]})})}class fl{constructor(e,n,i,s,l){this.getColIndex=e,this.cell=n,this.triggers=i,this.interactionManager=s,this.colorManager=l}getClickHandler(){const e=this.getRelatedTrigger();if(e.length!==0)return()=>{const n={row_data:this.cell.row.original,row_index:this.cell.row.index,col_index:this.getColIndex(this.cell)};for(const i of e)this.interactionManager.runInteraction(i.id,n)}}getRelatedTrigger(){return this.triggers.filter(n=>n.schemaRef===Ot.id).filter(n=>{const i=this.getColIndex(this.cell),s=S.get(this.cell.column.columnDef.meta,"value_field"),l=S.get(n.config,"column");return l==i||l==s})}isClickable(){return this.getRelatedTrigger().length>0}get columnConf(){return this.cell.column.columnDef.meta}get bgColor(){const e=this.columnConf.cellBackgroundColor;if(!e||e==="none")return;if(S.isString(e))return e;const n=+this.cell.getValue();if(isFinite(n)){const i=this.colorManager.decodeInterpolation(e.interpolation),l=new Ns(e.steps).mapValue(n);return i==null?void 0:i.getColor(l)}}}const fr=a.createStyles(()=>({palette:{display:"flex",flexFlow:"row nowrap"},paletteItem:{".palette-value":{height:24,overflow:"visible",width:36},".palette-item":{width:"36px",height:36*.618,cursor:"pointer",transition:"transform 100ms ease-in-out","&:hover":{boxShadow:"0 0 0 2px var(--shadow-color)",borderRadius:2,transform:"scale(1.2)"}}}})),hl=[{from:0,to:0},{from:100,to:100}];class gl{constructor(){V(this,"steps",new Map);V(this,"interpolation");V(this,"onChange");J.makeAutoObservable(this,{steps:J.observable},{deep:!1}),J.reaction(()=>J.toJS(this.steps),()=>{this.notifyStepChange()})}setSteps(e){for(const n of e)this.steps.set(n.to,n.from)}notifyStepChange(){var e;(e=this.onChange)==null||e.call(this,Array.from(this.steps.entries()).map(([n,i])=>({to:n,from:i})).sort((n,i)=>n.to-i.to||n.from-i.from))}fromProps(e){e.steps.length<2?this.setSteps(hl):this.setSteps(e.steps),this.interpolation=e.interpolation,this.onChange=e.onChange}changeStep(e,n){e==null?this.steps.delete(n):this.steps.set(n,e)}getStepFromValue(e){return this.steps.get(e)}}function ml(t){const{onChange:e,color:n,index:i,value:s}=t,{classes:l}=fr(),[o,u]=w.useState(s),[d,{setTrue:h,setFalse:f}]=R.useBoolean(!1),m=i%2===1,g=m&&s!=null,v=!m&&s!=null,_=`map ${s} to color ${i}`,k=()=>{u(s),f()},E=()=>{f(),e==null||e(o)},L=re.default(s).format({average:!0});return c("div",{"data-testid":`palette-item-${i}`,className:l.paletteItem,children:[r(a.Text,{title:_,style:{opacity:g?1:0},color:"dimmed",size:"sm",className:"palette-value--up palette-value",children:L}),c(a.Popover,{width:200,trapFocus:!0,opened:d,onClose:f,children:[r(a.Popover.Target,{children:r("div",{"data-testid":"palette-item-target",className:"palette-item",onClick:h,style:{"--shadow-color":Pe.default(n).alpha(.5).hex(),backgroundColor:n}})}),r(a.Popover.Dropdown,{children:c(a.Stack,{children:[r(a.NumberInput,{size:"xs",label:"Map a value to this color",value:o,onChange:u}),c(a.Group,{position:"right",children:[r(a.Button,{variant:"subtle",size:"xs",onClick:k,children:"Cancel"}),r(a.Button,{"data-testid":"palette-item-ok",size:"xs",onClick:E,children:"OK"})]})]})})]}),r(a.Text,{title:_,style:{opacity:v?1:0},color:"dimmed",size:"sm",className:"palette-value--bottom palette-value",children:L})]})}const yl=A.observer(({model:t})=>{const{classes:e}=fr(),n=S.range(0,13,1).map(i=>100/12*i).map(i=>[t.interpolation.getColor(i),i]);return r("div",{className:e.palette,children:n.map(([i,s],l)=>r(ml,{index:l,color:i,value:t.getStepFromValue(s),onChange:o=>t.changeStep(o,s)},i))})}),vl=A.observer(function(e){const n=R.useCreation(()=>new gl,[]);return w.useEffect(()=>{n.fromProps(e)}),n.interpolation==null?null:r(yl,{model:n})}),bl=t=>{const{value:e,onChange:n,colorManager:i}=t,s=i.getColorInterpolations(),[l,o]=w.useState(e),u=i.decodeInterpolation(l.interpolation)||s[0],[d,{setTrue:h,setFalse:f}]=R.useBoolean(),m=s.map(E=>({label:E.displayName,value:i.encodeColor(E),group:E.category}));function g(E){E&&o(L=>({...L,interpolation:E}))}const v=()=>{f(),n==null||n(J.toJS(l))};function _(E){o(L=>({...L,steps:E}))}const k=()=>{f(),o(e)};return c(N,{children:[r(a.Button,{variant:"outline",onClick:h,children:u==null?void 0:u.displayName}),r(a.Modal,{size:508,title:"Setup color interpolation",opened:d,onClose:f,children:d&&c(a.Stack,{"data-testid":"color-interpolation-modal",children:[r(a.Select,{label:"Color style",value:l.interpolation,data:m,onChange:g}),r(vl,{steps:l.steps,interpolation:u,onChange:_}),c(a.Group,{position:"right",children:[r(a.Button,{onClick:k,variant:"subtle",children:"Cancel"}),r(a.Button,{onClick:v,children:"OK"})]})]})})]})},xl=["static","interpolation","none"],Cl=[{from:0,to:0},{from:100,to:100}];function hr(t){return t?S.isString(t)?t==="none"?"none":"static":"interpolation":"none"}function wl(t,e){var n;return hr(e)==="static"?e:(n=t.getStaticColors()[0])==null?void 0:n.value}function Sl(t,e){return S.isObject(e)?e:{steps:Cl,interpolation:t.encodeColor(t.getColorInterpolations()[0])}}const Il=t=>{const{colorManager:e}=w.useContext(ge),[n,i]=w.useState(hr(t.value)),[s,l]=w.useState(wl(e,t.value)),o=R.useLatest(s),[u,d]=w.useState(Sl(e,t.value)),h=R.useLatest(u),f=v=>{var _,k,E;i(v||"none"),v==="static"?(_=t.onChange)==null||_.call(t,o.current):v==="none"||!v?(k=t.onChange)==null||k.call(t,"none"):(E=t.onChange)==null||E.call(t,h.current)},m=v=>{var _;l(v),(_=t.onChange)==null||_.call(t,v)},g=v=>{var _;d(v),(_=t.onChange)==null||_.call(t,v)};return c(a.Group,{align:"end",children:[r(a.Select,{label:"Cell background",value:n||"none",onChange:f,data:xl}),n==="static"&&r(xe,{value:s,onChange:m}),n==="interpolation"&&r(bl,{colorManager:e,value:u,onChange:g})]})},Dl=Object.values(we).map(t=>({label:t,value:t}));function Tl({label:t,value:e,onChange:n,sx:i}){return r(a.Select,{label:t,data:Dl,value:e,onChange:n,sx:i})}function _l({context:t}){const{value:e,set:n}=q(t.instanceData,"config"),i=gt.useForm({initialValues:nt});w.useEffect(()=>{const o=S.defaults({},e,i.values,nt);e&&i.setValues(o)},[e]);const s=t.data||[],l=()=>i.insertListItem("columns",{label:U.randomId(),value_field:"value",value_type:we.string});return r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:i.onSubmit(async o=>{await n(o)}),children:[c(a.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[r(a.Text,{children:"Table Config"}),r(a.ActionIcon,{type:"submit","aria-label":"save config",mr:5,variant:"filled",color:"blue",children:r(T.DeviceFloppy,{size:20})})]}),c(a.Stack,{mt:"md",spacing:"xs",p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[r(j,{label:"ID Field",required:!0,data:s,...i.getInputProps("id_field")}),c(a.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:[r(a.TextInput,{label:"Horizontal Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1},...i.getInputProps("horizontalSpacing")}),r(a.TextInput,{label:"Vertical Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1},...i.getInputProps("verticalSpacing")})]}),r(a.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:r(a.TextInput,{label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1},...i.getInputProps("fontSize")})}),c(a.Stack,{children:[r(a.Text,{children:"Other"}),c(a.Group,{position:"apart",grow:!0,children:[r(a.Switch,{label:"Striped",...i.getInputProps("striped",{type:"checkbox"})}),r(a.Switch,{label:"Highlight on hover",...i.getInputProps("highlightOnHover",{type:"checkbox"})})]})]})]}),c(a.Stack,{mt:"xs",spacing:"xs",p:"md",mb:"xl",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[r(a.Switch,{label:"Use Original Data Columns",...i.getInputProps("use_raw_columns",{type:"checkbox"})}),!i.values.use_raw_columns&&c(a.Stack,{children:[r(a.Text,{mt:"xl",mb:0,children:"Custom Columns"}),i.values.columns.map((o,u)=>c(a.Stack,{my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[c(a.Group,{position:"apart",grow:!0,children:[r(a.TextInput,{label:"Label",required:!0,id:`col-label-${u}`,sx:{flex:1},...i.getInputProps(`columns.${u}.label`)}),r(j,{label:"Value Field",required:!0,data:s,...i.getInputProps(`columns.${u}.value_field`)}),r(Tl,{label:"Value Type",sx:{flex:1},...i.getInputProps(`columns.${u}.value_type`)}),r(Il,{...i.getInputProps(`columns.${u}.cellBackgroundColor`)})]}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>i.removeListItem("columns",u),sx:{position:"absolute",top:15,right:5},children:r(T.Trash,{size:16})})]},u)),r(a.Group,{position:"center",mt:"xs",children:r(a.Button,{onClick:l,children:"Add a Column"})})]})]}),r(a.Text,{weight:500,mb:"md",children:"Current Configuration:"}),r(Ie.Prism,{language:"json",colorScheme:"dark",noCopy:!0,children:JSON.stringify(i.values,null,2)})]})})}class Al extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({version:1,config:n}))}}const Ft={createConfig(){return{version:1,config:S.cloneDeep(nt)}},displayName:"Table",migrator:new Al,name:"table",viewRender:pl,configRender:_l,triggers:[Ot]},qt={label_field:"",value_field:""};X.use([de.SunburstChart,ye.CanvasRenderer]);const kl={tooltip:{show:!0},series:{type:"sunburst",radius:[0,"90%"],emphasis:{focus:"ancestor"}}};function Ml({context:t}){const{value:e}=q(t.instanceData,"config"),n=t.data,{width:i,height:s}=t.viewport,{label_field:l,value_field:o}=S.defaults({},e,qt),u=w.useMemo(()=>n.map(m=>({name:m[l],value:Number(m[o])})),[n,l,o]),d=w.useMemo(()=>{var m,g;return(g=(m=S.maxBy(u,v=>v.value))==null?void 0:m.value)!=null?g:1},[u]),h=w.useMemo(()=>({series:{label:{formatter:({name:m,value:g})=>g/d<.2?" ":m}}}),[d]),f=S.merge({},kl,h,{series:{data:u}});return r(ve.default,{echarts:X,option:f,style:{width:i,height:s}})}function El({context:t}){const{value:e,set:n}=q(t.instanceData,"config"),{label_field:i,value_field:s}=S.defaults({},e,qt),l=t.data,o=gt.useForm({initialValues:{label_field:i,value_field:s}});return w.useEffect(()=>{o.setValues({label_field:i,value_field:s})},[i,s]),r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:o.onSubmit(n),children:[c(a.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[r(a.Text,{children:"Sunburst Config"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:r(T.DeviceFloppy,{size:20})})]}),c(a.Stack,{mt:"md",spacing:"xs",p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[r(j,{label:"Label Field",required:!0,data:l,...o.getInputProps("label_field")}),r(j,{label:"Value Field",required:!0,data:l,...o.getInputProps("value_field")})]})]})})}class Vl extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({version:1,config:n}))}}const Pl={displayName:"Sunburst",migrator:new Vl,name:"sunburst",viewRender:Ml,configRender:El,createConfig:()=>qt},Gt={label_field:"",value_field:""};X.use([de.PieChart,ye.CanvasRenderer]);const zl={tooltip:{show:!0},series:{type:"pie",radius:["50%","80%"],label:{position:"outer",alignTo:"edge",formatter:`{name|{b}}
41
41
  {percentage|{d}%}`,minMargin:5,edgeDistance:10,lineHeight:15,rich:{percentage:{color:"#999"}},margin:20},labelLine:{length:15,length2:0,maxSurfaceAngle:80,showAbove:!0},top:10,bottom:10,left:10,right:10}};function Ol({context:t}){const{value:e}=q(t.instanceData,"config"),n=t.data,{width:i,height:s}=t.viewport,{label_field:l,value_field:o}=S.defaults({},e,Gt),u=w.useMemo(()=>n.map(f=>({name:f[l],value:Number(f[o])})),[n,l,o]),d=w.useMemo(()=>({series:{labelLayout:function(f){const m=f.labelRect.x<i/2,g=f.labelLinePoints;return S.set(g,[2,0],m?f.labelRect.x:f.labelRect.x+f.labelRect.width),{labelLinePoints:g}}}}),[i]),h=S.merge({},zl,d,{series:{data:u}});return r(ve.default,{echarts:X,option:h,style:{width:i,height:s}})}function Fl({context:t}){const{value:e,set:n}=q(t.instanceData,"config"),{label_field:i,value_field:s}=S.defaults({},e,Gt),l=t.data,o=gt.useForm({initialValues:{label_field:i,value_field:s}});return w.useEffect(()=>{o.setValues({label_field:i,value_field:s})},[i,s]),r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:o.onSubmit(n),children:[c(a.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[r(a.Text,{children:"Pie Config"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:r(T.DeviceFloppy,{size:20})})]}),c(a.Stack,{mt:"md",spacing:"xs",p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[r(j,{label:"Label Field",required:!0,data:l,...o.getInputProps("label_field")}),r(j,{label:"Value Field",required:!0,data:l,...o.getInputProps("value_field")})]})]})})}class ql extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({version:1,config:n}))}}const Gl={displayName:"Pie Chart",migrator:new ql,name:"pie",viewRender:Ol,configRender:Fl,createConfig:()=>Gt},Bt={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"}};X.use([$.GridComponent,$.VisualMapComponent,$.LegendComponent,$.TooltipComponent,ye.CanvasRenderer]);function Bl({context:t}){const{value:e}=q(t.instanceData,"config"),n=t.data,{width:i,height:s}=t.viewport,{x_axis_data_key:l,y_axis_data_key:o,z_axis_data_key:u,xAxis3D:d,yAxis3D:h,zAxis3D:f}=S.defaults({},e,Bt),m=w.useMemo(()=>{const _=S.minBy(n,k=>k[u]);return S.get(_,u)},[n,u]),g=w.useMemo(()=>{const _=S.maxBy(n,k=>k[u]);return S.get(_,u)},[n,u]),v={tooltip:{},backgroundColor:"#fff",visualMap:{show:!0,dimension:2,min:m,max:g,inRange:{color:["#313695","#4575b4","#74add1","#abd9e9","#e0f3f8","#ffffbf","#fee090","#fdae61","#f46d43","#d73027","#a50026"]}},xAxis3D:d,yAxis3D:h,zAxis3D:f,grid3D:{viewControl:{projection:"orthographic",autoRotate:!1},light:{main:{shadow:!0,quality:"ultra",intensity:1.5}}},series:[{type:"bar3D",wireframe:{},data:n.map(_=>[_[l],_[o],_[u]])}]};return e?r(ve.default,{echarts:X,option:v,style:{width:i,height:s}}):null}function Ll({context:t}){const{value:e,set:n}=q(t.instanceData,"config"),i=t.data,s=S.defaults({},e,Bt),{control:l,handleSubmit:o,reset:u}=C.useForm({defaultValues:s});return w.useEffect(()=>{u(s)},[e]),e?r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:o(n),children:[r(a.Text,{children:"X Axis"}),c(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[r(C.Controller,{name:"x_axis_data_key",control:l,render:({field:d})=>r(j,{label:"Data Field",required:!0,data:i,...d})}),r(C.Controller,{name:"xAxis3D.name",control:l,render:({field:d})=>r(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...d})})]}),r(a.Text,{mt:"lg",children:"Y Axis"}),c(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[r(C.Controller,{name:"y_axis_data_key",control:l,render:({field:d})=>r(j,{label:"Data Field",required:!0,data:i,...d})}),r(C.Controller,{name:"yAxis3D.name",control:l,render:({field:d})=>r(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...d})})]}),r(a.Text,{mt:"lg",children:"Z Axis"}),c(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[r(C.Controller,{name:"z_axis_data_key",control:l,render:({field:d})=>r(j,{label:"Data Field",required:!0,data:i,...d})}),r(C.Controller,{name:"zAxis3D.name",control:l,render:({field:d})=>r(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...d})})]}),r(a.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"60%"},mx:"auto",children:c(a.Button,{color:"blue",type:"submit",children:[r(T.DeviceFloppy,{size:20}),r(a.Text,{ml:"md",children:"Save"})]})})]})}):null}class Rl extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({version:1,config:n}))}}const $l={displayName:"Bar Chart (3D)",migrator:new Rl,name:"bar-3d",viewRender:Bl,configRender:Ll,createConfig:()=>Bt},Lt={x_axis:{name:"X Axis",data_key:""},y_axis:{name:"Y Axis",data_key:"value"},color:"#228be6",variables:[],reference_lines:[]};X.use([$.DataZoomComponent,de.BoxplotChart,$.MarkLineComponent,$.GridComponent,$.LegendComponent,$.TooltipComponent,ye.CanvasRenderer]);function Nl(t,e,n){const i=e.reduce((s,l)=>{const o=or(l,n);return s[l.name]=tt(l,o),s},{});return t.map(s=>({name:"refs",type:"scatter",data:[],markLine:{data:[{name:s.name,yAxis:Number(i[s.variable_key])}],silent:!0,symbol:["none","none"],label:{formatter:function(){return ur(s.template,e,n)},position:"insideEndTop"}}}))}function jl({context:t}){const{value:e}=q(t.instanceData,"config"),n=t.data,{width:i,height:s}=t.viewport,{x_axis:l,y_axis:o,color:u,variables:d,reference_lines:h}=S.defaults({},e,Lt),{xAxisData:f,boxplotData:m}=w.useMemo(()=>{const v=O.default.groupBy(n,l.data_key);return{xAxisData:Object.keys(v),boxplotData:Object.values(v).map(_=>_.map(k=>k[o.data_key]))}},[n,l.data_key,o.data_key]),g={dataset:[{source:m},{transform:{type:"boxplot",config:{itemNameFormatter:function(v){var _;return(_=f[v.value])!=null?_:v.value}}}}],dataZoom:[{type:"inside",xAxisIndex:[0]},{type:"inside",yAxisIndex:[0]}],tooltip:{trigger:"axis"},xAxis:[{type:"category",name:l.name}],yAxis:[{name:o.name}],series:[{name:o.name,type:"boxplot",itemStyle:{color:u,borderColor:"#454545"},boxWidth:[10,40],datasetIndex:1},...Nl(h,d,n)]};return!e||!i||!s?null:r(ve.default,{echarts:X,option:g,style:{width:i,height:s}})}function Wl({control:t,index:e,remove:n,variableOptions:i}){return c(a.Stack,{my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:`reference_lines.${e}.name`,control:t,render:({field:s})=>r(a.TextInput,{label:"Name",placeholder:"Average Reference Line",required:!0,sx:{flex:1},...s})}),r(C.Controller,{name:`reference_lines.${e}.variable_key`,control:t,render:({field:s})=>r(a.Select,{label:"Value",required:!0,data:i,sx:{flex:1},...s})})]}),r(C.Controller,{name:`reference_lines.${e}.template`,control:t,render:({field:s})=>r(a.TextInput,{label:"Content Template",placeholder:"Average: ${avg}",required:!0,sx:{flex:1},...s})}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>n(e),sx:{position:"absolute",top:15,right:5},children:r(T.Trash,{size:16})})]},e)}function Ql({control:t,watch:e}){const{fields:n,append:i,remove:s}=C.useFieldArray({control:t,name:"reference_lines"}),l=e("reference_lines"),o=n.map((f,m)=>({...f,...l[m]})),u=()=>i({name:"",template:"",variable_key:""}),d=e("variables"),h=w.useMemo(()=>d.map(f=>({label:f.name,value:f.name})),[d]);return c(a.Stack,{children:[o.map((f,m)=>r(Wl,{control:t,index:m,remove:s,variableOptions:h})),r(a.Group,{position:"center",mt:"xs",children:r(a.Button,{onClick:u,children:"Add a Reference Line"})})]})}function Yl({control:t,index:e,remove:n,data:i}){return c(a.Stack,{my:"sm",p:0,sx:{border:"1px solid #eee",borderTopColor:"#333",borderTopWidth:2,position:"relative"},children:[r(C.Controller,{name:`variables.${e}`,control:t,render:({field:s})=>r(Ke,{data:i,withStyle:!1,...s})}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>n(e),sx:{position:"absolute",top:15,right:5},children:r(T.Trash,{size:16})})]},e)}function Ul({control:t,watch:e,data:n}){const{fields:i,append:s,remove:l}=C.useFieldArray({control:t,name:"variables"}),o=e("variables"),u=i.map((h,f)=>({...h,...o[f]})),d=()=>s(Xe());return c(a.Stack,{children:[u.map((h,f)=>r(Yl,{control:t,index:f,remove:l,data:n})),r(a.Group,{position:"center",mt:"xs",children:r(a.Button,{onClick:d,children:"Add a Variable"})})]})}function Xl({context:t}){const{value:e,set:n}=q(t.instanceData,"config"),i=t.data,s=w.useMemo(()=>S.defaults({},e,Lt),[e]),{control:l,handleSubmit:o,watch:u,getValues:d,reset:h}=C.useForm({defaultValues:s});w.useEffect(()=>{h(s)},[s]),u(["x_axis","y_axis","reference_lines","color"]);const f=d(),m=w.useMemo(()=>!S.isEqual(f,e),[f,e]);return r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:o(n),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[r(a.Text,{children:"Chart Config"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!m,children:r(T.DeviceFloppy,{size:20})})]}),c(a.Accordion,{defaultValue:"Axis",children:[c(a.Accordion.Item,{value:"Axis",children:[r(a.Accordion.Control,{children:"Axis"}),c(a.Accordion.Panel,{children:[c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"x_axis.name",control:l,render:({field:g})=>r(a.TextInput,{label:"X Axis Name",sx:{flex:1},...g})}),r(C.Controller,{name:"x_axis.data_key",control:l,render:({field:g})=>r(j,{label:"X Axis Data Field",required:!0,data:i,sx:{flex:1},...g})})]}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"y_axis.name",control:l,render:({field:g})=>r(a.TextInput,{label:"Y Axis Name",sx:{flex:1},...g})}),r(C.Controller,{name:"y_axis.data_key",control:l,render:({field:g})=>r(j,{label:"Y Axis Data Field",required:!0,data:i,sx:{flex:1},...g})})]})]})]}),c(a.Accordion.Item,{value:"Style",children:[r(a.Accordion.Control,{children:"Style"}),r(a.Accordion.Panel,{children:c(a.Stack,{spacing:4,children:[r(a.Text,{size:"sm",children:"Color"}),r(C.Controller,{name:"color",control:l,render:({field:g})=>r(xe,{...g})})]})})]}),c(a.Accordion.Item,{value:"Advanced",children:[r(a.Accordion.Control,{children:c(a.Group,{position:"apart",children:["Advanced",r(a.Text,{align:"right",size:12,color:"grey",children:"Use variables in reference lines"})]})}),r(a.Accordion.Panel,{children:c(a.Tabs,{defaultValue:"variables",children:[c(a.Tabs.List,{children:[r(a.Tabs.Tab,{value:"variables",children:"Variables"}),r(a.Tabs.Tab,{value:"reference_lines",children:"Reference Lines"})]}),r(a.Tabs.Panel,{value:"variables",pt:"xs",children:r(Ul,{control:l,watch:u,data:i})}),r(a.Tabs.Panel,{value:"reference_lines",pt:"xs",children:r(Ql,{control:l,watch:u})})]})})]})]})]})})}class Jl extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({version:1,config:n}))}}const Kl={displayName:"Boxplot",migrator:new Jl,name:"boxplot",viewRender:jl,configRender:Xl,createConfig:()=>Lt};function Zl(t){const e=t.y_axes.some(n=>!!n.name);return{bottom:t.x_axis_name?40:25,top:e?30:10}}function Hl({regressions:t=[]},e){const n=[],i=[],s=[];return e.length===0?{regressionDataSets:n,regressionSeries:i,regressionXAxes:s}:(t.forEach(({transform:l,plot:o,name:u,y_axis_data_key:d})=>{const h=`x-axis-for-${u}`,f=`dataset-for-${u}--raw`,m=`dataset-for-${u}--transformed`;n.push({id:f,source:e.map((g,v)=>[v,Number(g[d])])}),n.push({transform:l,id:m,fromDatasetId:f}),i.push({...o,name:u,datasetId:m,xAxisId:h,showSymbol:!1,tooltip:{show:!1}}),s.push({type:"category",id:h,datasetId:m,show:!1})}),{regressionDataSets:n,regressionSeries:i,regressionXAxes:s})}function eo(t,e,n,i){const s=e.map(l=>[l[n],l[i]]);return O.default.unionBy(s,t,0)}function to(t,e,n){const i=e.reduce((s,l)=>{const o=or(l,n);return s[l.name]=tt(l,o),s},{});return t.map(s=>({name:"refs",type:"scatter",data:[],markLine:{data:[{name:s.name,yAxis:Number(i[s.variable_key])}],silent:!0,symbol:["none","none"],label:{formatter:function(){return ur(s.template,e,n)},position:"insideEndTop"}}}))}function no({x_axis_data_key:t},{y_axis_data_key:e,yAxisIndex:n,label_position:i,name:s,group_by_key:l,stack:o,color:u,...d},h,f,m){const g={label:{show:!!i,position:i,formatter:m[n!=null?n:"default"]},name:s,xAxisId:"main-x-axis",yAxisIndex:n,stack:o,color:u,...d};if(!l)return g.data=f.map(_=>_[e]),g;const v=S.groupBy(f,l);return Object.entries(v).map(([_,k])=>{const E=S.cloneDeep(g);return E.data=eo(h,k,t,e),E.name=_,E.color=void 0,E})}function ro(t,e,n,i){const s=e.map(o=>[o,0]);return t.series.map(o=>no(t,o,s,n,i)).flat().concat(to(t.reference_lines,t.variables,n))}function io(t,e){const n=t.series.reduce((i,{yAxisIndex:s,name:l})=>(i[l]=s,i),{});return{formatter:function(i){const s=Array.isArray(i)?i:[i];if(s.length===0)return"";const l=s.map(({seriesName:o,value:u})=>{var f;if(Array.isArray(u)&&u.length===2&&(u=u[1]),!o)return u;const d=n[o],h=(f=e[d])!=null?f:e.default;return`${o}: <strong>${h({value:u})}</strong>`});return l.unshift(`<strong>${s[0].name}</strong>`),l.join("<br />")}}}function ao(t,e,n){var i;return[{data:e,name:(i=t.x_axis_name)!=null?i:"",id:"main-x-axis",...t.x_axis},...n]}function so(t,e){return t.y_axes.map(({nameAlignment:n,...i},s)=>{var o;let l=i.position;return l||(l=s>0?"right":"left"),{...i,position:l,axisLabel:{show:!0,formatter:(o=e[s])!=null?o:e.default},nameTextStyle:{fontWeight:"bold",align:n},nameLocation:"end",nameGap:15}})}const lo={legend:{show:!0,bottom:0,left:"center",type:"scroll"},dataZoom:[{type:"inside",xAxisIndex:[0]},{type:"inside",yAxisIndex:[0]}],tooltip:{trigger:"axis"},xAxis:[{type:"category",nameGap:25,nameLocation:"center",nameTextStyle:{fontWeight:"bold"}}],grid:{top:10,left:30,right:15,bottom:25,containLabel:!0}};function oo(t,e){const n=t.y_axes.reduce((h,{label_formatter:f},m)=>(h[m]=function(v){let _=v;if(typeof v=="object"&&(Array.isArray(v.value)&&v.value.length===2?_=v.value[1]:_=v.value),!f)return _;try{return re.default(_).format(f)}catch(k){return console.error(k),_}},h),{default:({value:h})=>h}),i=O.default.uniq(e.map(h=>h[t.x_axis_data_key])),s=ro(t,i,e,n),{regressionDataSets:l,regressionSeries:o,regressionXAxes:u}=Hl(t,e),d={xAxis:ao(t,i,u),yAxis:so(t,n),dataset:[...l],series:[...s,...o],tooltip:io(t,n),grid:Zl(t)};return S.defaultsDeep({},d,lo)}const Rt={regressions:[],series:[],stats:{templates:{bottom:"",top:""},variables:[]},x_axis:{axisLabel:{rotate:0}},x_axis_data_key:"",x_axis_name:"",y_axes:[{name:"Y Axis",position:"left",nameAlignment:"center",label_formatter:qe}],variables:[],reference_lines:[]};X.use([$.DataZoomComponent,de.BarChart,de.LineChart,de.ScatterChart,$.GridComponent,$.LegendComponent,$.TooltipComponent,ye.CanvasRenderer]),X.registerTransform(un.transform.regression);function gr(t){return t.trim().length>0}function uo({conf:t,data:e,width:n,height:i}){const s=b.default.useMemo(()=>oo(t,e),[t,e]);return!n||!i?null:r(ve.default,{echarts:X,option:s,style:{width:n,height:i}})}function co({context:t}){const{value:e}=q(t.instanceData,"config"),n=w.useMemo(()=>S.defaults({},e,Rt),[e]),i=t.data,{width:s,height:l}=t.viewport,{ref:o,height:u}=U.useElementSize(),{ref:d,height:h}=U.useElementSize(),f=b.default.useMemo(()=>{const{stats:{templates:g,variables:v}}=n;return{top:zt(g.top,v,i),bottom:zt(g.bottom,v,i)}},[n,i]),m=Math.max(0,l-u-h);return c(a.Box,{children:[gr(n.stats.templates.top)&&r(a.Text,{ref:o,align:"left",size:"xs",pl:"sm",children:Object.values(f.top).map(g=>g)}),r(uo,{width:s,height:m,data:i,conf:n}),gr(n.stats.templates.bottom)&&r(a.Text,{ref:d,align:"left",size:"xs",pl:"sm",children:Object.values(f.bottom).map(g=>g)})]})}function po({control:t,index:e,remove:n,variableOptions:i}){return c(a.Stack,{my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:`reference_lines.${e}.name`,control:t,render:({field:s})=>r(a.TextInput,{label:"Name",placeholder:"Average Reference Line",required:!0,sx:{flex:1},...s})}),r(C.Controller,{name:`reference_lines.${e}.variable_key`,control:t,render:({field:s})=>r(a.Select,{label:"Value",required:!0,data:i,sx:{flex:1},...s})})]}),r(C.Controller,{name:`reference_lines.${e}.template`,control:t,render:({field:s})=>r(a.TextInput,{label:"Content Template",placeholder:"Average: ${avg}",required:!0,sx:{flex:1},...s})}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>n(e),sx:{position:"absolute",top:15,right:5},children:r(T.Trash,{size:16})})]},e)}function fo({control:t,watch:e}){const{fields:n,append:i,remove:s}=C.useFieldArray({control:t,name:"reference_lines"}),l=e("reference_lines"),o=n.map((f,m)=>({...f,...l[m]})),u=()=>i({name:"",template:"",variable_key:""}),d=e("variables"),h=w.useMemo(()=>d.map(f=>({label:f.name,value:f.name})),[d]);return c(a.Stack,{children:[o.map((f,m)=>r(po,{control:t,index:m,remove:s,variableOptions:h})),r(a.Group,{position:"center",mt:"xs",children:r(a.Button,{onClick:u,children:"Add a Reference Line"})})]})}const ho=[{label:"Linear",value:"linear"},{label:"Exponential",value:"exponential"},{label:"Logarithmic",value:"logarithmic"},{label:"Polynomial",value:"polynomial"}],go=[{label:"solid",value:"solid"},{label:"dashed",value:"dashed"},{label:"dotted",value:"dotted"}];function mo({control:t,regressionItem:e,index:n,remove:i,yAxisOptions:s,data:l}){const o=e.transform.config.method;return c(a.Stack,{my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[r(C.Controller,{name:`regressions.${n}.name`,control:t,render:({field:u})=>r(a.TextInput,{label:"Name",required:!0,sx:{flex:1},...u})}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:`regressions.${n}.y_axis_data_key`,control:t,render:({field:u})=>r(j,{label:"Value Field",required:!0,data:l,sx:{flex:1},...u})}),r(C.Controller,{name:`regressions.${n}.plot.yAxisIndex`,control:t,render:({field:{value:u,onChange:d,...h}})=>{var f;return r(a.Select,{label:"Y Axis",data:s,disabled:s.length===0,...h,value:(f=u==null?void 0:u.toString())!=null?f:"",onChange:m=>{if(!m){d(0);return}d(Number(m))},sx:{flex:1}})}})]}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:`regressions.${n}.transform.config.method`,control:t,render:({field:u})=>r(a.Select,{label:"Method",data:ho,sx:{flex:1},...u})}),o==="polynomial"&&r(C.Controller,{name:`regressions.${n}.transform.config.order`,control:t,render:({field:u})=>r(a.NumberInput,{label:"Order",sx:{flex:1},...u})})]}),r(a.Divider,{mb:-15,variant:"dashed",label:"Line Style",labelPosition:"center"}),c(a.Group,{grow:!0,children:[r(C.Controller,{name:`regressions.${n}.plot.lineStyle.type`,control:t,render:({field:u})=>r(a.Select,{label:"Line Type",data:go,sx:{flexGrow:1},...u})}),r(C.Controller,{name:`regressions.${n}.plot.lineStyle.width`,control:t,render:({field:u})=>r(a.NumberInput,{label:"Line Width",min:1,max:10,sx:{flexGrow:1},...u})})]}),c(a.Stack,{spacing:4,children:[r(a.Text,{size:"sm",children:"Color"}),r(C.Controller,{name:`regressions.${n}.plot.color`,control:t,render:({field:u})=>r(xe,{...u})})]}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>i(n),sx:{position:"absolute",top:15,right:5},children:r(T.Trash,{size:16})})]},n)}function yo({control:t,watch:e,data:n}){const{fields:i,append:s,remove:l}=C.useFieldArray({control:t,name:"regressions"}),o=e("regressions"),u=i.map((m,g)=>({...m,...o[g]})),d=e("y_axes"),h=b.default.useMemo(()=>d.map(({name:m},g)=>({label:m,value:g.toString()})),[d]),f=()=>s({transform:{type:"ecStat:regression",config:{method:"linear",order:1,formulaOn:"end"}},name:"",y_axis_data_key:"",plot:{type:"line",yAxisIndex:0,color:"#666666",lineStyle:{type:"solid",width:1}}});return c(a.Stack,{children:[u.map((m,g)=>r(mo,{regressionItem:m,control:t,index:g,remove:l,yAxisOptions:h,data:n},g)),r(a.Group,{position:"center",mt:"xs",children:r(a.Button,{onClick:f,children:"Add a Regression Line"})})]})}const vo=[{label:"No gap between bars",value:"0%"},{label:"Bars overlapping on each other",value:"-100%"}];function bo({control:t,index:e}){return c(N,{children:[c(a.Group,{grow:!0,align:"top",children:[r(C.Controller,{name:`series.${e}.stack`,control:t,render:({field:n})=>r(a.TextInput,{label:"Stack",placeholder:"Stack bars by this ID",sx:{flexGrow:1},...n})}),r(C.Controller,{name:`series.${e}.barWidth`,control:t,render:({field:n})=>r(a.TextInput,{label:"Bar Width",sx:{flexGrow:1},...n})})]}),r(C.Controller,{name:`series.${e}.barGap`,control:t,render:({field:n})=>r(a.Select,{label:"Bar Gap",data:vo,sx:{flexGrow:1},...n})})]})}const xo=[{label:"off",value:"false"},{label:"start",value:"start"},{label:"middle",value:"middle"},{label:"end",value:"end"}],Co=[{label:"solid",value:"solid"},{label:"dashed",value:"dashed"},{label:"dotted",value:"dotted"}];function wo({control:t,index:e}){return c(N,{children:[r(a.Divider,{mb:-15,variant:"dashed",label:"Line Settings",labelPosition:"center"}),c(a.Group,{grow:!0,children:[r(C.Controller,{name:`series.${e}.lineStyle.type`,control:t,render:({field:n})=>r(a.Select,{label:"Line Type",data:Co,sx:{flexGrow:1},...n})}),r(C.Controller,{name:`series.${e}.lineStyle.width`,control:t,render:({field:n})=>r(a.NumberInput,{label:"Line Width",min:1,max:10,sx:{flexGrow:1},...n})})]}),c(a.Group,{grow:!0,align:"center",children:[r(C.Controller,{name:`series.${e}.step`,control:t,render:({field:n})=>r(a.Select,{label:"Step",data:xo,sx:{flexGrow:1,maxWidth:"48%"},...n,value:String(n.value),onChange:i=>{const s=i==="false"?!1:i;n.onChange(s)}})}),r(C.Controller,{name:`series.${e}.smooth`,control:t,render:({field:n})=>r(a.Box,{sx:{flexGrow:1},children:r(a.Switch,{label:"Smooth Line",checked:n.value,onChange:i=>n.onChange(i.currentTarget.checked)})})})]})]})}const So=Array.from(new Array(9),(t,e)=>({label:String(e+1),value:e+1}));function Io({control:t,index:e}){return r(a.Group,{grow:!0,align:"center",children:r(C.Controller,{name:`series.${e}.symbolSize`,control:t,render:({field:n})=>c(a.Stack,{sx:{flexGrow:1},pb:16,spacing:4,children:[r(a.Text,{size:"sm",children:"Size"}),r(a.Slider,{min:1,max:10,marks:So,...n,sx:{width:"100%"}})]})})})}const Do=[{label:"off",value:""},{label:"top",value:"top"},{label:"left",value:"left"},{label:"right",value:"right"},{label:"bottom",value:"bottom"},{label:"inside",value:"inside"},{label:"insideLeft",value:"insideLeft"},{label:"insideRight",value:"insideRight"},{label:"insideTop",value:"insideTop"},{label:"insideBottom",value:"insideBottom"},{label:"insideTopLeft",value:"insideTopLeft"},{label:"insideBottomLeft",value:"insideBottomLeft"},{label:"insideTopRight",value:"insideTopRight"},{label:"insideBottomRight",value:"insideBottomRight"}];function To({control:t,index:e,remove:n,seriesItem:i,yAxisOptions:s,data:l}){const o=i.type;return c(a.Stack,{my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[r(a.Stack,{children:r(C.Controller,{name:`series.${e}.type`,control:t,render:({field:u})=>r(a.SegmentedControl,{data:[{label:"Line",value:"line"},{label:"Bar",value:"bar"},{label:"Scatter",value:"scatter"},{label:"Boxplot",value:"boxplot",disabled:!0}],...u})})}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:`series.${e}.name`,control:t,render:({field:u})=>r(a.TextInput,{label:"Name",required:!0,sx:{flex:1},...u})}),r(C.Controller,{name:`series.${e}.y_axis_data_key`,control:t,render:({field:u})=>r(j,{label:"Value Field",required:!0,data:l,sx:{flex:1},...u})})]}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:`series.${e}.yAxisIndex`,control:t,render:({field:{value:u,onChange:d,...h}})=>{var f;return r(a.Select,{label:"Y Axis",data:s,disabled:s.length===0,...h,value:(f=u==null?void 0:u.toString())!=null?f:"",onChange:m=>{if(!m){d(0);return}d(Number(m))},sx:{flex:1}})}}),r(C.Controller,{name:`series.${e}.group_by_key`,control:t,render:({field:u})=>r(j,{label:"Group By",data:l,clearable:!0,sx:{flex:1},...u})})]}),o==="line"&&r(wo,{index:e,control:t}),o==="bar"&&r(bo,{index:e,control:t}),o==="scatter"&&r(Io,{index:e,control:t}),r(C.Controller,{name:`series.${e}.label_position`,control:t,render:({field:u})=>r(a.Select,{label:"Label Position",data:Do,...u})}),c(a.Stack,{spacing:4,children:[r(a.Text,{size:"sm",children:"Color"}),r(C.Controller,{name:`series.${e}.color`,control:t,render:({field:u})=>r(xe,{...u})})]}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>n(e),sx:{position:"absolute",top:15,right:5},children:r(T.Trash,{size:16})})]},e)}function _o({control:t,watch:e,data:n}){const{fields:i,append:s,remove:l}=C.useFieldArray({control:t,name:"series"}),o=e("series"),u=i.map((m,g)=>({...m,...o[g]})),d=()=>s({type:"bar",name:U.randomId(),showSymbol:!1,symbolSize:5,y_axis_data_key:"value",yAxisIndex:0,label_position:"top",stack:"",color:"#000",step:!1,smooth:!1,barWidth:"10",barGap:"0%",lineStyle:{type:"solid",width:1}}),h=e("y_axes"),f=b.default.useMemo(()=>h.map(({name:m},g)=>({label:m,value:g.toString()})),[h]);return c(a.Stack,{children:[u.map((m,g)=>r(To,{control:t,index:g,remove:l,seriesItem:m,yAxisOptions:f,data:n},m.id)),r(a.Group,{position:"center",mt:"xs",children:r(a.Button,{onClick:d,children:"Add a Series"})})]})}function Ao({control:t,index:e,remove:n,data:i}){return c(a.Stack,{my:"sm",p:0,sx:{border:"1px solid #eee",borderTopColor:"#333",borderTopWidth:2,position:"relative"},children:[r(C.Controller,{name:`stats.variables.${e}`,control:t,render:({field:s})=>r(Ke,{data:i,...s})}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>n(e),sx:{position:"absolute",top:15,right:5},children:r(T.Trash,{size:16})})]},e)}function ko({control:t,watch:e,data:n}){const{fields:i,append:s,remove:l}=C.useFieldArray({control:t,name:"stats.variables"});e("stats.templates");const o=e("stats.variables"),u=i.map((h,f)=>({...h,...o[f]})),d=()=>s(Xe());return c(a.Stack,{children:[c(a.Stack,{spacing:0,children:[r(C.Controller,{name:"stats.templates.top",control:t,render:({field:h})=>r(It,{label:"Template for stats above the chart",py:"md",sx:{flexGrow:1},...h})}),r(C.Controller,{name:"stats.templates.bottom",control:t,render:({field:h})=>r(It,{label:"Template for stats under the chart",py:"md",sx:{flexGrow:1},...h})})]}),u.map((h,f)=>r(Ao,{control:t,index:f,remove:l,data:n})),r(a.Group,{position:"center",mt:"xs",children:r(a.Button,{onClick:d,children:"Add a Variable"})})]})}function Mo({control:t,index:e,remove:n,data:i}){return c(a.Stack,{my:"sm",p:0,sx:{border:"1px solid #eee",borderTopColor:"#333",borderTopWidth:2,position:"relative"},children:[r(C.Controller,{name:`variables.${e}`,control:t,render:({field:s})=>r(Ke,{data:i,withStyle:!1,...s})}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>n(e),sx:{position:"absolute",top:15,right:5},children:r(T.Trash,{size:16})})]},e)}function Eo({control:t,watch:e,data:n}){const{fields:i,append:s,remove:l}=C.useFieldArray({control:t,name:"variables"}),o=e("variables"),u=i.map((h,f)=>({...h,...o[f]})),d=()=>s(Xe());return c(a.Stack,{children:[u.map((h,f)=>r(Mo,{control:t,index:f,remove:l,data:n})),r(a.Group,{position:"center",mt:"xs",children:r(a.Button,{onClick:d,children:"Add a Variable"})})]})}function Vo({data:t,control:e,watch:n}){return n(["x_axis_data_key","x_axis_name","x_axis"]),c(a.Stack,{children:[c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"x_axis_data_key",control:e,render:({field:i})=>r(j,{label:"X Axis Data Field",required:!0,data:t,sx:{flex:1},...i})}),r(C.Controller,{name:"x_axis_name",control:e,render:({field:i})=>r(a.TextInput,{label:"X Axis Name",sx:{flex:1},...i})})]}),r(a.Divider,{mb:-15,label:"Tick Label",labelPosition:"center"}),r(a.Group,{children:r(C.Controller,{name:"x_axis.axisLabel.rotate",control:e,render:({field:i})=>r(a.NumberInput,{label:"Rotate",hideControls:!0,min:-90,max:90,rightSection:r(a.Text,{color:"dimmed",children:"degree"}),sx:{width:"48%"},styles:{rightSection:{width:"4em",justifyContent:"flex-end",paddingRight:"6px"}},...i})})})]})}const Po=[{label:"left",value:"left"},{label:"center",value:"center"},{label:"right",value:"right"}],zo=[{label:"left",value:"left"},{label:"right",value:"right"}];function Oo({control:t,index:e,remove:n}){return c(a.Stack,{my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[r(a.Divider,{mb:-15,variant:"dashed",label:"Name",labelPosition:"center"}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:`y_axes.${e}.name`,control:t,render:({field:i})=>r(a.TextInput,{label:"Name",required:!0,sx:{flex:1},...i})}),r(C.Controller,{name:`y_axes.${e}.nameAlignment`,control:t,render:({field:i})=>r(a.Select,{label:"Align",required:!0,data:Po,sx:{flex:1},...i})})]}),r(a.Divider,{mb:-15,variant:"dashed",label:"Layout",labelPosition:"center"}),r(a.Group,{grow:!0,noWrap:!0,children:r(C.Controller,{name:`y_axes.${e}.position`,control:t,render:({field:i})=>r(a.Select,{label:"Position",required:!0,data:zo,sx:{flex:1},...i})})}),c(a.Stack,{children:[r(a.Divider,{mb:-15,variant:"dashed",label:"Label Format",labelPosition:"center"}),r(C.Controller,{name:`y_axes.${e}.label_formatter`,control:t,render:({field:i})=>r(Dt,{...i})})]}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>n(e),sx:{position:"absolute",top:15,right:5},disabled:e===0,children:r(T.Trash,{size:16})})]})}function Fo({control:t,watch:e}){const{fields:n,append:i,remove:s}=C.useFieldArray({control:t,name:"y_axes"}),l=e("y_axes"),o=n.map((d,h)=>({...d,...l[h]})),u=()=>i({name:"",label_formatter:qe});return c(a.Stack,{children:[o.map((d,h)=>r(Oo,{control:t,index:h,remove:s},h)),r(a.Group,{position:"center",mt:"xs",children:r(a.Button,{onClick:u,children:"Add a Y Axis"})})]})}function qo(t){function e({type:n,name:i,showSymbol:s,symbolSize:l=5,y_axis_data_key:o="value",yAxisIndex:u=0,label_position:d="top",stack:h="1",color:f="black",barWidth:m="30",barGap:g="0%",smooth:v=!1,step:_=!1,group_by_key:k="",lineStyle:E={type:"solid",width:1}}){return{type:n,name:i,showSymbol:s,symbolSize:l,y_axis_data_key:o,yAxisIndex:u,label_position:d,stack:h,color:f,barWidth:m,barGap:g,smooth:v,step:_,group_by_key:k,lineStyle:E}}return t.map(e)}function Go(t){return t||{templates:{top:"",bottom:""},variables:[]}}function Bo({series:t,stats:e,...n}){return{series:qo(t!=null?t:[]),stats:Go(e),...n}}function Lo({context:t}){const{value:e,set:n}=q(t.instanceData,"config"),i=t.data,s=w.useMemo(()=>S.defaultsDeep({},e,Rt),[e]),l=w.useMemo(()=>Bo(s),[s]);w.useEffect(()=>{!S.isEqual(s,l)&&(console.log("config malformed, resetting to defaults",s,l),n(l))},[s,l]);const{control:o,handleSubmit:u,watch:d,getValues:h,reset:f}=C.useForm({defaultValues:l});w.useEffect(()=>{f(l)},[l]);const m=h(),g=w.useMemo(()=>!S.isEqual(m,s),[m,s]);return r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:u(n),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[r(a.Text,{children:"Chart Config"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!g,children:r(T.DeviceFloppy,{size:20})})]}),c(a.Accordion,{multiple:!0,defaultValue:["X Axis","Y Axes"],children:[c(a.Accordion.Item,{value:"X Axis",children:[r(a.Accordion.Control,{children:"X Axis"}),r(a.Accordion.Panel,{children:r(Vo,{control:o,watch:d,data:i})})]}),c(a.Accordion.Item,{value:"Y Axes",children:[r(a.Accordion.Control,{children:"Y Axes"}),r(a.Accordion.Panel,{children:r(Fo,{control:o,watch:d})})]}),c(a.Accordion.Item,{value:"Series",children:[r(a.Accordion.Control,{children:"Series"}),r(a.Accordion.Panel,{children:r(_o,{control:o,watch:d,data:i})})]}),c(a.Accordion.Item,{value:"Regression Lines",children:[r(a.Accordion.Control,{children:"Regression Lines"}),r(a.Accordion.Panel,{children:r(yo,{control:o,watch:d,data:i})})]}),c(a.Accordion.Item,{value:"Stats",children:[r(a.Accordion.Control,{children:"Stats"}),r(a.Accordion.Panel,{children:r(ko,{control:o,watch:d,data:i})})]}),c(a.Accordion.Item,{value:"Advanced",children:[r(a.Accordion.Control,{children:c(a.Group,{position:"apart",children:["Advanced",r(a.Text,{align:"right",size:12,color:"grey",children:"Use variables in reference lines"})]})}),r(a.Accordion.Panel,{children:c(a.Tabs,{defaultValue:"variables",children:[c(a.Tabs.List,{children:[r(a.Tabs.Tab,{value:"variables",children:"Variables"}),r(a.Tabs.Tab,{value:"reference_lines",children:"Reference Lines"})]}),r(a.Tabs.Panel,{value:"variables",pt:"xs",children:r(Eo,{control:o,watch:d,data:i})}),r(a.Tabs.Panel,{value:"reference_lines",pt:"xs",children:r(fo,{control:o,watch:d})})]})})]})]})]})})}class Ro extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({version:1,config:n}))}}const $o={displayName:"Cartesian Chart",migrator:new Ro,name:"cartesian",viewRender:co,configRender:Lo,createConfig:()=>Rt};function mr(t){return t?e=>{try{return re.default(e).format(t)}catch(n){return console.error(n),e}}:e=>e}function No(t){return{show:!0,formatter:({dimensionIndex:e,value:n})=>mr(t.dimensions[e].formatter)(n)}}function jo(t){return({name:e,marker:n,value:i})=>{if(i.length===0)return"";const s=i.map((l,o)=>{const u=t.dimensions[o],d=mr(u.formatter);return`
42
42
  <tr>
@@ -66,5 +66,5 @@ WHERE
66
66
  ${s.join("")}
67
67
  </tbody>
68
68
  </table>
69
- `}}const Wo={legend:{show:!0,bottom:0,left:0},tooltip:{trigger:"item"}};function Qo(t,e){const n=["#66B4DB","#39BFA2","#E46464","#33A678","#EEBA00","#9D88CB","#939943","#E49792","#09A2B8","#AF5F6B","#6CA157","#09A2B8","#6398C7","#E692BA","#97B566","#8CACE2","#CA79AC","#6DBC80","#B08F4B","#826BAF"],i=t.dimensions.map(({name:o,max:u})=>({name:o,max:u})),s=e.map(o=>({value:t.dimensions.map(({data_key:u})=>o[u]),name:o[t.series_name_key]})),l={radar:{indicator:i,splitArea:{show:!1}},tooltip:{formatter:jo(t)},legend:{show:!0,left:"center"},series:{type:"radar",data:s,symbolSize:4,lineStyle:{width:1},areaStyle:{opacity:.4},label:No(t)},color:n};return O.default.merge({},Wo,l)}const $t={series_name_key:"name",dimensions:[]};X.use([de.RadarChart,$.GridComponent,$.LegendComponent,$.TooltipComponent,ye.CanvasRenderer]);function Yo({context:t}){const{value:e}=q(t.instanceData,"config"),{width:n,height:i}=t.viewport,s=t.data,l=w.useMemo(()=>Qo(S.defaultsDeep({},e,$t),s),[e,s]);return!n||!i||!e||S.isEmpty(e==null?void 0:e.dimensions)?null:r(a.Box,{children:r(ve.default,{echarts:X,option:l,style:{width:n,height:i}})})}function Uo({control:t,index:e,remove:n,data:i}){return c(a.Stack,{my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:`dimensions.${e}.name`,control:t,render:({field:s})=>r(a.TextInput,{label:"Name",required:!0,sx:{flex:1},...s})}),r(C.Controller,{name:`dimensions.${e}.data_key`,control:t,render:({field:s})=>r(j,{label:"Data Key",required:!0,data:i,sx:{flex:1},...s})}),r(C.Controller,{name:`dimensions.${e}.max`,control:t,render:({field:s})=>r(a.NumberInput,{label:"Max",hideControls:!0,required:!0,sx:{flex:1},...s})})]}),c(a.Stack,{children:[r(a.Divider,{mb:-15,variant:"dashed",label:"Value Formatter",labelPosition:"center"}),r(C.Controller,{name:`dimensions.${e}.formatter`,control:t,render:({field:s})=>r(Dt,{...s})})]}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>n(e),sx:{position:"absolute",top:15,right:5},disabled:e===0,children:r(T.Trash,{size:16})})]},e)}function Xo({control:t,watch:e,data:n}){const{fields:i,append:s,remove:l}=C.useFieldArray({control:t,name:"dimensions"}),o=e("dimensions"),u=i.map((h,f)=>({...h,...o[f]})),d=()=>s({name:U.randomId(),data_key:"",max:100,formatter:qe});return c(a.Stack,{children:[u.map((h,f)=>r(Uo,{data:n,control:t,index:f,remove:l})),r(a.Group,{position:"center",mt:"xs",children:r(a.Button,{onClick:d,children:"Add a Dimension"})})]})}function Jo(t){function e({name:n="",data_key:i="",max:s=10,formatter:l=qe}){return{name:n,data_key:i,max:s,formatter:l}}return t.map(e)}function Ko({context:t}){const e=t.data,{value:n,set:i}=q(t.instanceData,"config"),s=w.useMemo(()=>S.defaultsDeep({},n,$t),[n]),{dimensions:l,series_name_key:o}=s,u=w.useMemo(()=>({dimensions:Jo(l!=null?l:[]),series_name_key:o}),[l,o]);w.useEffect(()=>{!S.isEqual(s,u)&&i(u)},[s,u]);const{control:d,handleSubmit:h,watch:f,getValues:m,reset:g}=C.useForm({defaultValues:u});w.useEffect(()=>{S.isEqual(m(),u)||g(u)},[s]),f(["series_name_key"]);const v=m(),_=w.useMemo(()=>!S.isEqual(v,s),[v,s]);return r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:h(i),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[r(a.Text,{children:"Chart Config"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!_,children:r(T.DeviceFloppy,{size:20})})]}),r(a.Box,{py:"sm",children:r(C.Controller,{name:"series_name_key",control:d,render:({field:k})=>r(j,{label:"Series Name Field",required:!0,data:e,sx:{flex:1},...k})})}),r(Xo,{control:d,watch:f,data:e})]})})}class Zo extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({version:1,config:n}))}}const Ho={displayName:"Radar Chart",migrator:new Zo,name:"radar",viewRender:Yo,configRender:Ko,createConfig:()=>$t};function eu(t,e){switch(t.config.method){case"linear":return[...be.regressionLinear()(e)];case"exponential":return[...be.regressionExp()(e)];case"logarithmic":return[...be.regressionLog()(e)];case"polynomial":return[...be.regressionPoly().order(t.config.order)(e)];default:return[]}}function tu({regression:t},e){const n=[],i=[];if(e.length===0)return{regressionSeries:n,regressionXAxes:i};const{transform:s,plot:l,name:o}=t,u=eu(s,e);return n.push({...l,name:o,data:u,showSymbol:!1,smooth:!0,tooltip:{show:!1}}),{regressionSeries:n,regressionXAxes:i}}const nu={tooltip:{trigger:"axis"},grid:{top:10,left:30,right:15,bottom:30,containLabel:!0},dataZoom:[{type:"inside",xAxisIndex:[0]},{type:"inside",yAxisIndex:[0]}]};function ru(t,e){var l,o;const n=O.default.uniqBy(e.map(u=>[u[t.x_axis.data_key],u[t.regression.y_axis_data_key]]),0),{regressionSeries:i}=tu(t,n),s={xAxis:{type:"category",name:(l=t.x_axis.name)!=null?l:""},yAxis:{name:(o=t.y_axis.name)!=null?o:""},series:[{data:n,name:t.y_axis.name,type:"scatter",symbolSize:4,color:"red"},...i]};return S.defaultsDeep({},s,nu)}function it(t,e,n){return 1-(1-t)*(e-1)/(e-n-1)}function iu(t,e){if(!e)return{expression:"",rSquared:0,adjustedRSquared:0};const{regression:n,x_axis:i,y_axis:s}=e,l=t.map(o=>[o[i.data_key],o[n.y_axis_data_key]]);if(n.transform.config.method==="linear"){const o=be.regressionLinear()(l),{a:u,b:d,rSquared:h}=o;return{expression:c(a.Group,{position:"center",noWrap:!0,spacing:10,children:[r(a.Text,{children:s.name}),r(a.Text,{children:"="}),r(a.Text,{weight:"bold",color:"gray",children:d}),r(a.Text,{children:"+"}),r(a.Text,{weight:"bold",color:"gray",children:u}),r(a.Text,{children:"\xD7"}),r(a.Text,{children:i.name})]}),rSquared:h,adjustedRSquared:it(h,t.length,1)}}if(n.transform.config.method==="exponential"){const{a:o,b:u,rSquared:d}=be.regressionExp()(l);return{expression:c(a.Group,{position:"center",noWrap:!0,spacing:10,children:[r(a.Text,{children:s.name}),r(a.Text,{children:"="}),r(a.Text,{weight:"bold",color:"gray",children:o}),r(a.Text,{children:"\xD7"}),c(a.Group,{position:"left",noWrap:!0,spacing:2,children:[r(a.Text,{children:"Math.exp("}),r(a.Text,{weight:"bold",color:"gray",children:u}),r(a.Text,{children:"\xD7"}),r(a.Text,{children:i.name}),r(a.Text,{children:")"})]})]}),rSquared:d,adjustedRSquared:it(d,t.length,1)}}if(n.transform.config.method==="logarithmic"){const{a:o,b:u,rSquared:d}=be.regressionLog()(l);return{expression:c(a.Group,{position:"center",noWrap:!0,spacing:10,children:[r(a.Text,{children:s.name}),r(a.Text,{children:"="}),r(a.Text,{weight:"bold",color:"gray",children:o}),r(a.Text,{children:"\xD7"}),c(a.Group,{position:"left",noWrap:!0,spacing:2,children:[r(a.Text,{children:"Math.log("}),r(a.Text,{children:i.name}),r(a.Text,{children:")"}),r(a.Text,{children:"+"}),r(a.Text,{weight:"bold",color:"gray",children:u})]})]}),rSquared:d,adjustedRSquared:it(d,t.length,1)}}if(n.transform.config.method==="polynomial"){const o=be.regressionPoly().order(n.transform.config.order)(l),{rSquared:u}=o;return console.log(o),{expression:"",rSquared:u,adjustedRSquared:it(u,t.length,1)}}return{expression:"",rSquared:0}}const Nt={x_axis:{name:"X Axis",data_key:""},y_axis:{name:"Y Axis"},regression:{transform:{type:"ecStat:regression",config:{method:"linear",order:1,formulaOn:"end"}},plot:{type:"line",yAxisIndex:0,color:"#228be6",lineStyle:{type:"solid",width:1}},name:"regression",y_axis_data_key:"value"}};X.use([$.DataZoomComponent,de.ScatterChart,$.GridComponent,$.LegendComponent,$.TooltipComponent,ye.CanvasRenderer]),X.registerTransform(un.transform.regression);function au({context:t}){const{value:e}=q(t.instanceData,"config"),{width:n,height:i}=t.viewport,s=w.useMemo(()=>{var g;const f=t.data,m=(g=e==null?void 0:e.regression)==null?void 0:g.y_axis_data_key;return m?f.map(v=>typeof v[m]=="number"?v:{...v,[m]:Number(v[m])}):f},[t.data,e==null?void 0:e.regression.y_axis_data_key]),l=w.useMemo(()=>ru(S.defaultsDeep({},e,Nt),s),[e,s]),{expression:o,rSquared:u,adjustedRSquared:d}=w.useMemo(()=>iu(s,e),[e,s]);if(!n||!i||!e)return null;let h=i;return o&&(h-=20),c(a.Box,{children:[o&&r(a.Text,{align:"center",size:12,children:o}),c(a.Group,{spacing:0,noWrap:!0,align:"start",sx:{"> *":{flexGrow:0,flexShrink:0}},children:[r(ve.default,{echarts:X,option:l,style:{width:n-190,height:h}}),u&&r(a.Table,{mt:20,fontSize:12,sx:{width:180,border:"1px solid #999",td:{padding:"3px 8px"}},children:c("tbody",{children:[c("tr",{children:[r("td",{children:"R-Sq"}),r("td",{style:{textAlign:"right"},children:re.default(u).format({output:"percent",mantissa:1})})]}),c("tr",{children:[r("td",{children:"R-Sq(Adjusted)"}),r("td",{style:{textAlign:"right"},children:re.default(d).format({output:"percent",mantissa:1})})]})]})})]})]})}const su=[{label:"Linear",value:"linear"},{label:"Exponential",value:"exponential"},{label:"Logarithmic",value:"logarithmic"},{label:"Polynomial",value:"polynomial"}];function lu({control:t,watch:e,data:n}){const i=e("regression.transform.config.method");return c(a.Stack,{children:[c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"regression.name",control:t,render:({field:s})=>r(a.TextInput,{label:"Name",required:!0,sx:{flex:1},...s})}),r(C.Controller,{name:"regression.y_axis_data_key",control:t,render:({field:s})=>r(j,{label:"Value Field",required:!0,data:n,sx:{flex:1},...s})})]}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"regression.transform.config.method",control:t,render:({field:s})=>r(a.Select,{label:"Method",data:su,sx:{flex:1},...s})}),i==="polynomial"&&r(C.Controller,{name:"regression.transform.config.order",control:t,render:({field:s})=>r(a.NumberInput,{label:"Order",sx:{flex:1},...s})})]}),c(a.Stack,{spacing:4,children:[r(a.Text,{size:"sm",children:"Color"}),r(C.Controller,{name:"regression.plot.color",control:t,render:({field:s})=>r(xe,{...s})})]})]})}function ou({context:t}){const{value:e,set:n}=q(t.instanceData,"config"),i=t.data,s=w.useMemo(()=>S.defaults({},e,Nt),[e]),{control:l,handleSubmit:o,watch:u,getValues:d,reset:h}=C.useForm({defaultValues:s});w.useEffect(()=>{h(s)},[s]),u(["x_axis","y_axis","regression"]);const f=d(),m=w.useMemo(()=>!S.isEqual(f,e),[f,e]);return r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:o(n),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[r(a.Text,{children:"Chart Config"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!m,children:r(T.DeviceFloppy,{size:20})})]}),c(a.Accordion,{multiple:!0,defaultValue:["Axis","Regression"],children:[c(a.Accordion.Item,{value:"Axis",children:[r(a.Accordion.Control,{children:"Axis"}),c(a.Accordion.Panel,{children:[c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"x_axis.name",control:l,render:({field:g})=>r(a.TextInput,{label:"X Axis Name",sx:{flex:1},...g})}),r(C.Controller,{name:"x_axis.data_key",control:l,render:({field:g})=>r(j,{label:"X Axis Data Field",required:!0,data:i,sx:{flex:1},...g})})]}),r(a.Group,{grow:!0,noWrap:!0,children:r(C.Controller,{name:"y_axis.name",control:l,render:({field:g})=>r(a.TextInput,{label:"Y Axis Name",sx:{flex:1},...g})})})]})]}),c(a.Accordion.Item,{value:"Regression",children:[r(a.Accordion.Control,{children:"Regression Line"}),r(a.Accordion.Panel,{children:r(lu,{control:l,watch:u,data:i})})]})]})]})})}class uu extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({version:1,config:n}))}}const cu={displayName:"Regression Chart",migrator:new uu,name:"regressionChart",viewRender:au,configRender:ou,createConfig:()=>Nt},jt={x_axis:{name:"X Axis",data_key:""},data_key:"value",bar:{name:"Value",color:"#228be6"},line:{name:"Value",color:"red"}};function Wt(t){return re.default(t).format({output:"percent",mantissa:0})}function du(t){const e=t.value[1];try{return Wt(e)}catch(n){return console.error(n),e}}function pu(t){const e=Array.isArray(t)?t:[t];if(e.length===0)return"";const n=e.map((i,s)=>{const l=i.seriesName,[o,u]=i.value;return l?`${l}: <strong>${(s===0?h=>h:Wt)(u)}</strong>`:u});return n.unshift(`<strong>${e[0].name}</strong>`),n.join("<br />")}X.use([de.BarChart,de.LineChart,$.DataZoomComponent,$.GridComponent,$.LegendComponent,$.TooltipComponent,ye.CanvasRenderer]);function fu({context:t}){const{value:e}=q(t.instanceData,"config"),n=t.data,{width:i,height:s}=t.viewport,{x_axis:l,data_key:o,bar:u,line:d}=S.defaults({},e,jt),{barData:h,lineData:f}=w.useMemo(()=>{const g=n.map(k=>[k[l.data_key],Number(k[o])]).sort((k,E)=>E[1]-k[1]),v=g.reduce((k,E)=>k+E[1],0),_=g.reduce((k,E,L)=>{const B=L===0?0:k[L-1][1];return k.push([E[0],B+E[1]]),k},[]).map(k=>[k[0],k[1]/v]);return{barData:g,lineData:_}},[l.data_key,o,n]),m={dataZoom:[{type:"inside",xAxisIndex:[0]},{type:"inside",yAxisIndex:[0]}],tooltip:{trigger:"axis",formatter:pu},xAxis:[{type:"category",name:l.name,nameLocation:"middle",nameGap:30,nameTextStyle:{fontWeight:"bold",align:"right"}}],yAxis:[{name:u.name,nameGap:30,nameTextStyle:{fontWeight:"bold",align:"right"}},{name:d.name,nameGap:30,nameTextStyle:{fontWeight:"bold",align:"center"},axisLabel:{show:!0,formatter:Wt}}],series:[{name:u.name,type:"bar",itemStyle:{color:u.color},yAxisIndex:0,data:h},{name:d.name,type:"line",itemStyle:{color:d.color},symbolSize:2,lineStyle:{width:1},label:{show:!0,position:"top",formatter:du},yAxisIndex:1,data:f}]};return!e||!i||!s?null:r(ve.default,{echarts:X,option:m,style:{width:i,height:s}})}function hu({context:t}){const{value:e,set:n}=q(t.instanceData,"config"),i=t.data,s=w.useMemo(()=>S.defaults({},e,jt),[e]),{control:l,handleSubmit:o,watch:u,getValues:d,reset:h}=C.useForm({defaultValues:s});w.useEffect(()=>{h(s)},[s]),u(["x_axis","data_key","bar","line"]);const f=d(),m=w.useMemo(()=>!S.isEqual(f,e),[f,e]);return r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:o(n),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[r(a.Text,{children:"Chart Config"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!m,children:r(T.DeviceFloppy,{size:20})})]}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"x_axis.name",control:l,render:({field:g})=>r(a.TextInput,{label:"X Axis Name",sx:{flex:1},...g})}),r(C.Controller,{name:"x_axis.data_key",control:l,render:({field:g})=>r(j,{label:"X Axis Data Field",required:!0,data:i,sx:{flex:1},...g})})]}),r(C.Controller,{name:"data_key",control:l,render:({field:g})=>r(j,{label:"Y Axis Data Field",required:!0,data:i,sx:{flex:1},...g})}),r(a.Divider,{my:"md",label:"Bar",labelPosition:"center"}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"bar.name",control:l,render:({field:g})=>r(a.TextInput,{label:"Bar Name",sx:{flex:1},...g})}),c(a.Stack,{spacing:4,children:[r(a.Text,{size:"sm",children:"Bar's Color"}),r(C.Controller,{name:"bar.color",control:l,render:({field:g})=>r(xe,{...g})})]})]}),r(a.Divider,{my:"md",label:"Line",labelPosition:"center"}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"line.name",control:l,render:({field:g})=>r(a.TextInput,{label:"Line Name",sx:{flex:1},...g})}),c(a.Stack,{spacing:4,children:[r(a.Text,{size:"sm",children:"Line's Color"}),r(C.Controller,{name:"line.color",control:l,render:({field:g})=>r(xe,{...g})})]})]})]})})}class gu extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({version:1,config:n}))}}const mu={displayName:"Pareto Chart",migrator:new gu,name:"paretoChart",viewRender:fu,configRender:hu,createConfig:()=>jt},yu=[{value:"#25262B",name:"Dark"},{value:"#868E96",name:"Gray"},{value:"#FA5252",name:"Red"},{value:"#E64980",name:"Pink"},{value:"#BE4BDB",name:"Grape"},{value:"#7950F2",name:"Violet"},{value:"#4C6EF5",name:"Indigo"},{value:"#228BE6",name:"Blue"},{value:"#15AABF",name:"Cyan"},{value:"#12B886",name:"Teal"},{value:"#40C057",name:"Green"},{value:"#82C91E",name:"Lime"},{value:"#FAB005",name:"Yellow"},{value:"#FD7E14",name:"Orange"}].map(t=>({name:t.name,value:t.value,type:"single",category:"basic"})),vu=[Oa,Fa,Ba,Ga,qa,La],yr={id:"dashboard",version:Ra,manifest:{viz:[Ft,Ls,Ua,Pl,Gl,$l,Kl,mu,$o,Ho,cu],color:[...yu,...vu]}},$e=new Na,vr=()=>{try{$e.install(yr)}catch{}const t=new Va($e),e=new $a($e);return{pluginManager:$e,vizManager:t,colorManager:e}},ge=w.createContext(vr());try{$e.install(yr)}catch{}function bu(t,e){const{value:n,set:i}=q(t.operation.operationData,"config"),[s,l]=w.useState(S.defaults({},n,e)),o=async()=>{await i(s)};return w.useEffect(()=>{l(S.defaults({},n,e))},[n]),{config:s,setConfig:l,commit:o}}function xu(t){const{config:e,setConfig:n,commit:i}=bu(t,{urlTemplate:"",openInNewTab:!0});async function s(){await i()}async function l(u){n({...e,openInNewTab:u}),await i()}const o=u=>n({...e,urlTemplate:u.currentTarget.value});return c(a.Stack,{children:[r(a.TextInput,{label:"Url",value:e.urlTemplate,onChange:o,onBlur:s}),r(a.Switch,{label:"Open in new Tab",checked:e.openInNewTab,onChange:u=>l(u.currentTarget.checked)})]})}function Cu(t){return S.cloneDeepWith(t,n=>{if(typeof n=="string")return encodeURIComponent(n)})}async function wu(t,e){const{urlTemplate:n,openInNewTab:i}=await e.operationData.getItem("config"),l=S.template(n||"")(Cu(t));window.open(l,i?"_blank":"_self","noopener")}const Su={displayName:"Open Link",id:"builtin:op:open-link",configRender:xu,run:wu};function Iu(t){const{value:e,set:n}=q(t.operationData,"config"),i=s=>void n({template:s});return[(e==null?void 0:e.template)||"",i]}function Du(t){const[e,n]=Iu(t.operation);return r(a.TextInput,{defaultValue:e,onBlur:i=>n(i.currentTarget.value),label:"console.log"})}async function Tu(t,e){const n=await e.operationData.getItem("config"),i=S.template(n.template||"");console.log("run with payload",t),console.log(i(t))}const Qt=[{displayName:"console.log (debug)",id:"builtin:op:debug",configRender:Du,run:Tu},Su];class _u{constructor(e,n=Qt){V(this,"attachments");this.operations=n;const i=async s=>{const{id:l,schemaRef:o}=await s.getItem(null);return{id:l,schemaRef:o,operationData:new ke(s,"data")}};this.attachments=new Ct(e,"__OPERATIONS",i)}async runOperation(e,n){const i=await this.attachments.getInstance(e);if(!i){console.warn(`Operation '${e}' is not defined`);return}const s=this.operations.find(l=>l.id===i.schemaRef);if(!s){console.warn(`Operation schema '${i.schemaRef}' is not defined`);return}await s.run(n,i)}async createOrGetOperation(e,n){if(!this.getOperationSchemaList().some(o=>o.id===n.id))throw new Error(`Operation schema '${n.id}' is not defined`);const s=await this.attachments.getInstance(e);return!s||s.schemaRef!==n.id?await this.attachments.create(e,{id:e,schemaRef:n.id,data:{}}):s}getOperationList(){return this.attachments.list()}getOperationSchemaList(){return this.operations}removeOperation(e){return this.attachments.remove(e)}async retrieveTrigger(e){return await this.attachments.getInstance(e)}}const br="__TRIGGERS";class Au{constructor(e,n){V(this,"attachments");this.instance=e,this.component=n;const i=async s=>{const{id:l,schemaRef:o}=await s.getItem(null);return{id:l,schemaRef:o,triggerData:new ke(s,"data")}};this.attachments=new Ct(e,br,i)}watchTriggerSnapshotList(e){return this.instance.instanceData.watchItem(br,n=>{const i=S.values(n).map(s=>({id:S.get(s,"id"),schemaRef:S.get(s,"schemaRef"),config:J.toJS(S.get(s,"data.config"))}));e(i)},{fireImmediately:!0})}async createOrGetTrigger(e,n,i={recreate:!1}){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 l=await this.attachments.getInstance(e);return!l||i.recreate||l.schemaRef!==n.id?await this.attachments.create(e,{id:e,schemaRef:n.id,data:{}}):l}async getTriggerList(){return await this.attachments.list()}getTriggerSchemaList(){return this.component.triggers||[]}async removeTrigger(e){await this.attachments.remove(e)}async retrieveTrigger(e){return await this.attachments.getInstance(e)}}class xr{constructor(e,n,i){V(this,"operationManager");V(this,"triggerManager");V(this,"attachments");this.operationManager=new _u(e,i),this.triggerManager=new Au(e,n);const s=async l=>{const{id:o,triggerRef:u,operationRef:d}=await l.getItem(null);return{id:o,triggerRef:u,operationRef:d}};this.attachments=new Ct(e,"__INTERACTIONS",s)}async addInteraction(e,n){const i=e.id,s=n.id,l=`[${i}]:[${s}]`;await this.attachments.create(l,{id:l,triggerRef:i,operationRef:s})}getInteractionList(){return this.attachments.list()}async removeInteraction(e){const n=await this.attachments.getInstance(e);if(!n)return;const{triggerRef:i,operationRef:s}=n;await this.getTriggerRefCount(i)<=1&&await this.triggerManager.removeTrigger(i),await this.getOperationRefCount(s)<=1&&await this.operationManager.removeOperation(s),await this.attachments.remove(e)}async getOperationRefCount(e){return(await this.getInteractionList()).filter(i=>i.operationRef===e).length}async getTriggerRefCount(e){return(await this.getInteractionList()).filter(i=>i.triggerRef===e).length}async runInteraction(e,n){const s=(await this.getInteractionList()).filter(l=>l.triggerRef===e);await Promise.all(s.map(async l=>{try{return await this.operationManager.runOperation(l.operationRef,n)}catch(o){console.warn(`Failed to run operation '${l.operationRef}'`,o)}}))}}function ku(t,e){const[n,i]=w.useState([]);return R.useAsyncEffect(async()=>{const s=await t.getInteractionList();i(s)},[e]),n}const Mu=A.observer(({item:t,manager:e,instance:n,sampleData:i,variables:s,onRemove:l})=>{const{triggerRef:o,operationRef:u}=t,d=Ta(e.triggerManager,n);if(R.useAsyncEffect(async()=>{await d.configTrigger(o,i)},[d,o,i]),d.isReady()){const h=[...d.triggerSchema.payload,...s];return c(a.Group,{children:[r(Ma,{model:d}),r(Sa,{instance:n,operationId:u,variables:h,operationManager:e.operationManager}),r(a.Button,{"aria-label":"delete-interaction",variant:"outline",color:"red",onClick:()=>l(t),children:r(T.Trash,{})})]})}return null}),Eu=t=>{const[e,n]=w.useState(0),{interactionManager:i,instance:s,sampleData:l,variables:o}=t,u=ku(i,e),d=async()=>{const f=await i.triggerManager.createOrGetTrigger(U.randomId(),i.triggerManager.getTriggerSchemaList()[0]),m=await i.operationManager.createOrGetOperation(U.randomId(),i.operationManager.getOperationSchemaList()[0]);await i.addInteraction(f,m),n(g=>g+1)};async function h(f){await i.removeInteraction(f.id),n(m=>m+1)}return c(a.Stack,{children:[u.map(f=>r(Mu,{onRemove:h,instance:s,sampleData:l,variables:o,item:f,manager:t.interactionManager},f.id)),r(a.Button,{style:{width:"fit-content"},onClick:()=>d(),children:"Add interaction"})]})},Vu=()=>{const{panel:t,data:e}=K(),n=t.viz,{vizManager:i}=w.useContext(ge),s=t.json,l=R.useCreation(()=>i.getOrCreateInstance(s),[i,n.type]),o=R.useCreation(()=>new xr(l,i.resolveComponent(n.type),Qt),[l,n.type]);return w.useEffect(()=>l.instanceData.watchItem(null,S.throttle(u=>{t.viz.setConf(u)},100,{leading:!1,trailing:!0})),[l]),{instance:l,vizManager:i,interactionManager:o,sampleData:e,variables:[]}},Pu=()=>{const t=Vu();return r(Eu,{...t})},zu=A.observer(()=>{const{panel:t}=K(),[e,n]=b.default.useState(t.description),i=t.description!==e,s=b.default.useCallback(()=>{!i||t.setDescription(e)},[i,e]);return c(a.Stack,{spacing:4,sx:{flexGrow:1},children:[c(a.Group,{align:"end",children:[r(a.Text,{sx:{flexGrow:1},children:"Description"}),r(a.ActionIcon,{variant:"subtle",color:"blue",disabled:!i,onClick:s,children:r(T.DeviceFloppy,{size:20})})]}),r(ft.RichTextEditor,{value:e,onChange:n,sx:{flexGrow:1},sticky:!0,p:"0"})]})}),Ou=A.observer(()=>{const{panel:t}=K(),{style:e}=t;return r(N,{children:r(a.Switch,{label:"Border",checked:e.border.enabled,onChange:n=>e.border.setEnabled(n.currentTarget.checked)})})}),Fu=A.observer(()=>{const{panel:{title:t,style:{border:e}}}=K();return r(Ae,{children:c(a.Stack,{mx:"auto",mt:"xl",p:"5px",spacing:5,sx:{width:"600px",height:"450px",background:"transparent",borderRadius:"5px",border:"1px solid #ced4da",borderWidth:e.enabled?"1px":"0px"},children:[c(a.Group,{position:"apart",noWrap:!0,sx:{flexGrow:0,flexShrink:0},children:[r(a.Group,{children:r(Fn,{})}),r(a.Group,{grow:!0,position:"center",children:r(a.Text,{lineClamp:1,weight:"bold",children:t})}),r(a.Group,{position:"right",spacing:0,sx:{height:"28px"}})]}),r(a.Group,{sx:{background:"#eee",flexGrow:1}})]})})}),qu=A.observer(()=>{const{panel:t}=K(),{title:e,setTitle:n}=t,[i,s]=U.useInputState(e),l=e!==i,o=b.default.useCallback(()=>{!l||n(i)},[l,i]);return r(a.TextInput,{value:i,onChange:s,label:c(a.Group,{align:"apart",children:[r(a.Text,{sx:{flexGrow:1},children:"Panel Title"}),r(a.ActionIcon,{variant:"subtle",color:"blue",disabled:!l,onClick:o,children:r(T.DeviceFloppy,{size:20})})]}),styles:{label:{display:"block",paddingBottom:"4px"}}})});function Gu(){return c(a.Group,{grow:!0,noWrap:!0,align:"stretch",sx:{height:"100%"},children:[c(a.Stack,{sx:{width:"40%",flexShrink:0,flexGrow:0,height:"100%"},children:[r(a.Divider,{label:"Style",labelPosition:"center",variant:"dashed"}),r(Ou,{}),r(a.Divider,{label:"Info",labelPosition:"center",variant:"dashed"}),r(qu,{}),r(zu,{})]}),r(a.Box,{sx:{height:"100%",flexGrow:1,maxWidth:"60%"},children:r(Fu,{})})]})}const Bu=A.observer(function(){const e=Q(),{panel:{queryID:n,setQueryID:i}}=K(),s=b.default.useMemo(()=>e.queries.current.map(l=>({value:l.id,label:l.id})),[e.queries.current]);return c(a.Stack,{children:[c(a.Group,{position:"left",sx:{maxWidth:"600px",alignItems:"baseline"},children:[r(a.Text,{children:"Select a Query"}),r(a.Select,{data:s,value:n,onChange:i,allowDeselect:!1,clearable:!1,sx:{flexGrow:1}})]}),r(Dn,{id:n})]})});function Cr(t,e,n){const i=R.useCreation(()=>new Set,[]),s=t.resolveComponent(e.type),[l,o]=w.useState(!1);return R.useAsyncEffect(async()=>{if(await s.migrator.needMigration(e)&&!i.has(e.id))try{i.add(e.id),await s.migrator.migrate(e),n==null||n()}finally{i.delete(e.id),o(!0)}else o(!0)},[e]),l}function Lu({setVizConf:t,...e}){const{vizManager:n,panel:i}=e,s=n.getOrCreateInstance(i),l=Cr(n,s,()=>{ht.showNotification({title:`${i.title} - Updated`,message:"Your plugin configuration has been migrated to the latest version"})});return R.useAsyncEffect(async()=>{await s.instanceData.setItem(null,i.viz.conf)},[s,i.viz.type]),w.useEffect(()=>s.instanceData.watchItem(null,o=>{t(o)}),[t,i.viz.type]),l?r(za,{...e}):r(a.Text,{children:"Checking update..."})}function Ru(t){const{vizManager:e,panel:n}=t,i=e.getOrCreateInstance(n);return Cr(e,i,()=>{ht.showNotification({title:`${n.title} - Updated`,message:"Your plugin configuration has been migrated to the latest version"})})?r(Pa,{...t}):r(a.Text,{children:"Checking update"})}const sd="";function $u(t,e){const{vizManager:n}=w.useContext(ge),{panel:{viz:i,title:s,id:l,description:o,queryID:u,style:d}}=K(),h={title:s,id:l,description:o,queryID:u,viz:i,layout:e,style:d.json};try{return n.resolveComponent(i.type),r(Ru,{panel:h,data:t,vizManager:n})}catch(f){return console.info(S.get(f,"message")),null}}const Nu=["richText"],wr=A.observer(function({height:e,viz:n,data:i,loading:s}){const{ref:l,width:o,height:u}=U.useElementSize(),d=b.default.useMemo(()=>!Array.isArray(i)||i.length===0,[i]),h=$u(i,{w:o,h:u});return Nu.includes(n.type)?r("div",{className:"viz-root",ref:l,children:r(Ae,{children:h})}):s?r("div",{className:"viz-root",style:{height:e},ref:l,children:r(a.LoadingOverlay,{visible:s,exitTransitionDuration:0})}):c("div",{className:"viz-root",style:{height:e},ref:l,children:[d&&r(a.Text,{color:"gray",align:"center",children:"Empty Data"}),!d&&r(Ae,{children:h})]})}),ju=A.observer(()=>{const{data:t,loading:e,panel:{viz:n}}=K();return r(wr,{viz:n,data:t,loading:e,height:"100%"})}),Yt=[];function Wu(){const{vizManager:t}=w.useContext(ge);return w.useMemo(()=>t.availableVizList.map(e=>({value:e.name,label:e.displayName})).concat(Yt),[t])}function Qu(t,e){try{return t.resolveComponent(e).createConfig()}catch{return null}}function Yu(){const{data:t,panel:{viz:e,title:n,queryID:i,description:s,setDescription:l,setTitle:o,setQueryID:u,id:d,style:h}}=K(),{vizManager:f}=w.useContext(ge),m={title:n,description:s,viz:e,queryID:i,id:d,style:h.json},g={setDescription:l,setQueryID:u,setTitle:o};try{return f.resolveComponent(m.viz.type),r(Lu,{setVizConf:e.setConf,panel:m,panelInfoEditor:g,vizManager:f,data:t})}catch(v){return console.info(S.get(v,"message")),null}}const Uu=A.observer(()=>{const{data:t,panel:{viz:e}}=K(),[n,i]=U.useInputState(e.type),s=e.type!==n,{vizManager:l}=w.useContext(ge),o=b.default.useCallback(()=>{if(!s)return;const v=Qu(l,n);e.setType(n),e.setConf(v||{})},[e,s,n]),u=v=>{try{e.setConf(JSON.parse(v))}catch(_){console.error(_)}},d=b.default.useMemo(()=>{var v;return(v=Yt.find(_=>_.value===n))==null?void 0:v.Panel},[n,Yt]),h=Yu(),f=d?w.createElement(d,{data:t,conf:e.conf,setConf:e.setConf}):null,m=h||f,g=Wu();return c(N,{children:[r(a.Select,{label:"Visualization",value:n,onChange:i,data:g,rightSection:r(a.ActionIcon,{disabled:!s,onClick:o,children:r(T.DeviceFloppy,{size:20})})}),m,!m&&r(a.JsonInput,{minRows:20,label:"Config",value:JSON.stringify(e.conf,null,2),onChange:u})]})});function Xu(){return c(a.Group,{grow:!0,noWrap:!0,align:"stretch",sx:{height:"100%",overflow:"hidden"},children:[r(a.Stack,{sx:{width:"40%",flexShrink:0,flexGrow:0,overflow:"scroll",height:"100%"},children:r(Uu,{})}),r(a.Box,{sx:{height:"100%",flexGrow:1,maxWidth:"60%"},children:r(ju,{})})]})}const Ju=A.observer(function({opened:e,close:n}){const{freezeLayout:i}=b.default.useContext(le),[s,l]=w.useState("Visualization"),{panel:o,loading:u}=K(),{id:d,title:h}=o;return b.default.useEffect(()=>{i(e)},[e]),r(a.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:n,title:`Editing Panel - ${h.trim()?h:d}`,trapFocus:!0,onDragStart:f=>{f.stopPropagation()},children:r(a.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 185px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",minHeight:"unset",maxHeight:"100%",width:"100%",padding:"16px"}},padding:"md",children:c(a.Tabs,{value:s,onTabChange:l,className:"panel-settings-tabs",children:[c(a.Tabs.List,{children:[r(a.Tabs.Tab,{value:"Data",children:"Data"}),r(a.Tabs.Tab,{value:"Panel",children:"Panel"}),r(a.Tabs.Tab,{value:"Visualization",children:"Visualization"}),r(a.Tabs.Tab,{value:"Interactions",children:"Interactions"})]}),c(a.Tabs.Panel,{value:"Data",pt:"sm",children:[r(a.LoadingOverlay,{visible:u,exitTransitionDuration:0}),r(Bu,{})]}),r(a.Tabs.Panel,{value:"Panel",pt:"sm",children:s==="Panel"&&r(Gu,{})}),r(a.Tabs.Panel,{value:"Visualization",pt:"sm",children:s==="Visualization"&&r(Xu,{})}),r(a.Tabs.Panel,{value:"Interactions",pt:"sm",children:r(Ae,{children:r(Pu,{})})})]})})})}),Ku=A.observer(({view:t})=>{const e=Q(),n=he.useModals(),[i,s]=b.default.useState(!1),l=()=>s(!0),o=()=>s(!1),{panel:u}=K(),{id:d,queryID:h}=u,{inEditMode:f}=b.default.useContext(le),m=()=>e.queries.refetchDataByQueryID(h),{viewPanelInFullScreen:g,inFullScreen:v}=b.default.useContext(yt),_=()=>{t.panels.duplicateByID(d)},k=()=>n.openConfirmModal({title:"Delete this panel?",labels:{confirm:"Confirm",cancel:"Cancel"},onCancel:()=>console.log("Cancel"),onConfirm:()=>t.panels.removeByID(d)}),E=b.default.useCallback(()=>{g(d)},[d,g]);return c(N,{children:[r(a.Box,{sx:{position:"absolute",top:0,left:0,right:0,zIndex:300},children:c(a.Menu,{withinPortal:!0,children:[r(a.Menu.Target,{children:r(a.Box,{className:"panel-dropdown-target",sx:{width:"100%",height:"25px"}})}),c(a.Menu.Dropdown,{children:[r(a.Menu.Item,{onClick:m,icon:r(T.Refresh,{size:14}),children:"Refresh"}),r(a.Menu.Item,{onClick:()=>e.queries.downloadDataByQueryID(h),icon:r(T.Download,{size:14}),children:"Download Data"}),!v&&r(a.Menu.Item,{onClick:E,icon:r(T.ArrowsMaximize,{size:14}),children:"Full Screen"}),f&&c(N,{children:[r(a.Divider,{label:"Edit",labelPosition:"center"}),r(a.Menu.Item,{onClick:l,icon:r(T.Settings,{size:14}),children:"Settings"}),r(a.Menu.Item,{onClick:_,icon:r(T.Copy,{size:14}),children:"Duplicate"}),r(a.Menu.Item,{color:"red",onClick:k,icon:r(T.Trash,{size:14}),children:"Delete"})]})]})]})}),f&&r(Ju,{opened:i,close:o})]})}),ld="",Zu=A.observer(function(){const{panel:e}=K(),{title:n}=e;return n?r(a.Group,{grow:!0,position:"center",px:20,className:"panel-title-wrapper",sx:{flexGrow:1},children:r(a.Text,{align:"center",lineClamp:1,weight:"bold",children:n})}):null});function Hu(t){return!["richText"].includes(t)}const ec={border:"1px solid #ced4da"},tc={border:"1px dashed transparent",transition:"border-color 300ms ease","&:hover":{borderColor:"#ced4da"}},at=A.observer(function({panel:e,view:n}){const i=Q(),{data:s,state:l}=i.getDataStuffByID(e.queryID),o=Hu(e.viz.type)&&l==="loading",u=e.title?"calc(100% - 25px - 5px)":"100%",d=e.style.border.enabled?ec:tc;return r(Sn,{value:{panel:e,data:s,loading:o},children:c(a.Box,{className:"panel-root",p:5,pt:0,sx:{...d},children:[r(a.Box,{sx:{position:"absolute",left:0,top:0,height:28,zIndex:310},children:r(Fn,{})}),r(Ku,{view:n}),r(Zu,{}),r(wr,{viz:e.viz,data:s,loading:o,height:u})]})})}),Sr=A.observer(function({view:e,panel:n,exitFullScreen:i}){return c(a.Stack,{px:"10px",pb:"5px",sx:{height:"100%",flexGrow:1,justifyContent:"flex-start"},children:[r(a.Group,{mx:"-5px",sx:{flexGrow:0},children:r(a.Button,{variant:"default",size:"sm",onClick:i,leftIcon:r(T.ArrowLeft,{size:20}),children:"Exit fullscreen"})}),r(a.Group,{mx:"-5px",grow:!0,sx:{flexGrow:1,flexShrink:0},children:r(at,{view:e,panel:n})})]})});function Ir(t){const[e,n]=b.default.useState(null),i=b.default.useCallback(u=>{n(u)},[]),s=b.default.useCallback(()=>{n(null)},[]),l=e?t.panels.findByID(e):null;return{viewPanelInFullScreen:i,exitFullScreen:s,inFullScreen:!!l,fullScreenPanel:l}}function Dr(){b.default.useEffect(()=>{const t=Si.default(".dashboard-sticky-area",{useStickyClasses:!0,parentClass:"dashboard-sticky-parent"});return()=>{t==null||t.cleanup()}},[])}const od="",nc=b.default.forwardRef(({handleAxis:t},e)=>r(a.ActionIcon,{ref:e,className:"react-grid-customDragHandle",sx:{userSelect:"none",cursor:"grab",position:"absolute",top:0,right:0,zIndex:400,"&:hover":{color:"#228be6"}},variant:"transparent",children:r(T.ArrowsMove,{size:16})})),rc=b.default.forwardRef(({handleAxis:t,...e},n)=>r(a.ActionIcon,{ref:n,className:"react-grid-customResizeHandle",sx:{userSelect:"none",cursor:"nwse-resize",position:"absolute",bottom:-5,right:-5,zIndex:400,"&:hover":{color:"#228be6"}},variant:"transparent",...e,children:r(T.ChevronDownRight,{size:16})})),ic=mt.WidthProvider(fn.default),ac=A.observer(function({view:e,className:n="layout",rowHeight:i=10,isDraggable:s,isResizable:l}){const o=b.default.useCallback(u=>{u.forEach(({i:d,...h})=>{const f=e.panels.findByID(d);!f||f.layout.set(h)})},[e]);return r(ic,{onLayoutChange:o,className:`dashboard-layout ${n}`,rowHeight:i,layout:e.panels.layouts,isDraggable:s,isResizable:l,draggableHandle:".react-grid-customDragHandle",resizeHandle:r(rc,{}),children:e.panels.list.map((u,d)=>c("div",{"data-grid":{...u.layout},style:{position:"relative"},children:[s&&r(nc,{}),r(at,{view:e,panel:u})]},u.id))})}),sc=mt.WidthProvider(fn.default),lc=A.observer(function({view:e,className:n="layout",rowHeight:i=10}){return r(sc,{className:`dashboard-layout ${n}`,rowHeight:i,isDraggable:!1,isResizable:!1,layout:e.panels.layouts,children:e.panels.list.map(s=>r("div",{"data-grid":s.layout,children:r(at,{view:e,panel:s})},s.id))})}),oc=A.observer(({children:t})=>r(a.Box,{children:t})),uc=A.observer(({children:t,view:e})=>r(a.Modal,{size:e.config.width,overflow:"inside",opened:!0,onClose:O.default.noop,withCloseButton:!1,title:e.name,trapFocus:!0,onDragStart:n=>{n.stopPropagation()},styles:{root:{position:"relative",height:"calc(100% - 46px)"},overlay:{position:"absolute !important"},modal:{border:"1px solid #efefef"},body:{"> div":{maxHeight:e.config.height,overflow:"scroll"}}},withinPortal:!1,transitionDuration:0,children:t})),cc=A.observer(({view:t,children:e})=>{switch(t.type){case fe.Modal:return r(uc,{view:t,children:e});case fe.Division:default:return r(oc,{children:e})}}),Tr=A.observer(function({view:e,saveDashboardChanges:n}){const{viewPanelInFullScreen:i,exitFullScreen:s,inFullScreen:l,fullScreenPanel:o}=Ir(e);return Dr(),r(yt.Provider,{value:{viewPanelInFullScreen:i,inFullScreen:l},children:c(a.Box,{className:"dashboard-view",mx:-10,sx:{position:"relative",height:"100%"},children:[l&&r(Sr,{view:e,panel:o,exitFullScreen:s}),!l&&r(On,{saveChanges:n}),r(cc,{view:e,children:c(a.Box,{className:"dashboard-sticky-parent",children:[r(a.Box,{className:"dashboard-sticky-area",children:r(Cn,{view:e})}),r(a.Box,{sx:{display:l?"none":"block"},children:r(ac,{view:e,isDraggable:!0,isResizable:!0})})]})})]})})}),_r=A.observer(function({view:e}){const{viewPanelInFullScreen:n,exitFullScreen:i,inFullScreen:s,fullScreenPanel:l}=Ir(e);return Dr(),r(yt.Provider,{value:{viewPanelInFullScreen:n,inFullScreen:s},children:c(a.Box,{className:"dashboard-view",sx:{position:"relative",height:"100%"},children:[s&&r(Sr,{view:e,panel:l,exitFullScreen:i}),!s&&c(a.Box,{className:"dashboard-sticky-area",children:[r(On,{saveChanges:O.default.noop}),r(Cn,{view:e})]}),r(lc,{view:e})]})})}),Ar=y.types.model({label:y.types.string,value:y.types.string}).actions(t=>({setLabel(e){t.label=e},setValue(e){t.value=e}})),kr=y.types.model("FilterConfigModel_Select",{required:y.types.boolean,default_value:y.types.string,static_options:y.types.optional(y.types.array(Ar),[]),options_query:An}).actions(t=>({addStaticOption(e){t.static_options.push(e)},removeStaticOption(e){t.static_options.splice(e,1)},setRequired(e){t.required=e},setDefaultValue(e){t.default_value=e},setOptionsQuery(e){t.options_query=e}})),dc=()=>kr.create({required:!1,default_value:"",static_options:[],options_query:{type:pe.Postgresql,key:"",sql:""}}),Mr=y.types.model("FilterConfigModel_MultiSelect",{default_value:y.types.optional(y.types.array(y.types.string),[]),static_options:y.types.optional(y.types.array(Ar),[]),options_query:An}).actions(t=>({addStaticOption(e){t.static_options.push(e)},removeStaticOption(e){t.static_options.splice(e,1)},setDefaultValue(e){t.default_value=y.cast(e)},setOptionsQuery(e){t.options_query=e}})),pc=()=>Mr.create({default_value:[],static_options:[],options_query:{type:pe.Postgresql,key:"",sql:""}}),Er=y.types.model("FilterConfigModel_Checkbox",{default_value:y.types.boolean}).actions(t=>({setDefaultValue(e){t.default_value=e}})),fc=()=>Er.create({default_value:!1}),hc=y.types.model("FilterConfigModel_DateRange",{required:y.types.boolean,inputFormat:y.types.enumeration("DateRangeInputFormat",["YYYY","YYYY-MM","YYYY-MM-DD"]),default_value:y.types.optional(y.types.array(y.types.union(y.types.Date,y.types.null)),[null,null]),clearable:y.types.boolean}).actions(t=>({setRequired(e){t.required=e},setClearable(e){t.clearable=e},setInputFormat(e){t.inputFormat=e},setDefaultValue(e){t.default_value.length=0,t.default_value.push(...e)}})),Vr=y.types.snapshotProcessor(hc,{preProcessor({default_value:t,...e}){return{...e,default_value:t.map(n=>n===null?null:new Date(n))}},postProcessor({default_value:t,...e}){return{...e,default_value:t.map(n=>typeof n=="number"?new Date(n).toISOString():"")}}}),gc=()=>Vr.create({required:!1,inputFormat:"YYYY-MM-DD",clearable:!1,default_value:[null,null]}),Ut=y.types.model("FilterModel",{id:y.types.identifier,key:y.types.string,label:y.types.string,order:y.types.number,visibleInViewsIDs:y.types.array(y.types.string),type:y.types.enumeration("DashboardFilterType",[ie.Select,ie.MultiSelect,ie.TextInput,ie.Checkbox,ie.DateRange]),config:y.types.union(kr,Mr,kn,Er,Vr)}).actions(t=>({setKey(e){t.key=e},setLabel(e){t.label=e},setOrder(e){t.order=e},setType(e){switch(e){case ie.Select:t.config=dc();break;case ie.MultiSelect:t.config=pc();break;case ie.TextInput:t.config=Mn();break;case ie.Checkbox:t.config=fc();break;case ie.DateRange:t.config=gc();break}t.type=e},setVisibleInViewsIDs(e){t.visibleInViewsIDs.length=0,t.visibleInViewsIDs.push(...e)}})),Pr=y.types.model("FiltersModel",{original:y.types.optional(y.types.array(Ut),[]),current:y.types.optional(y.types.array(Ut),[]),values:y.types.optional(y.types.frozen(),{})}).views(t=>({get changed(){return!O.default.isEqual(t.original,t.current)},get firstID(){if(t.current.length!==0)return t.current[0].id},get inOrder(){return O.default.sortBy(t.current,"order")},get empty(){return t.current.length===0},visibleInView(e){return O.default.sortBy(t.current.filter(n=>n.visibleInViewsIDs.includes(e)),"order")}})).actions(t=>({reset(){t.current=O.default.cloneDeep(t.original)},replace(e){t.current=y.cast(e)},append(e){t.current.push(e)},remove(e){t.current.splice(e,1)},setValues(e){t.values=e},setValueByKey(e,n){t.values[e]=n},getValueByKey(e){return t.values[e]}}));function mc(t){return t===void 0?t:Array.isArray(t)?t.map(e=>{const n=new Date(e);return n!=null?n:e}):t}function zr(t){const e=t.reduce((n,i)=>(n[i.key]=mc(i.config.default_value),n),{});return{original:t,current:t,values:e}}var Xt={exports:{}};(function(t,e){(function(n,i){i()})(ze,function(){function n(h,f){return typeof f>"u"?f={autoBom:!1}:typeof f!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),f={autoBom:!f}),f.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(h.type)?new Blob(["\uFEFF",h],{type:h.type}):h}function i(h,f,m){var g=new XMLHttpRequest;g.open("GET",h),g.responseType="blob",g.onload=function(){d(g.response,f,m)},g.onerror=function(){console.error("could not download file")},g.send()}function s(h){var f=new XMLHttpRequest;f.open("HEAD",h,!1);try{f.send()}catch{}return 200<=f.status&&299>=f.status}function l(h){try{h.dispatchEvent(new MouseEvent("click"))}catch{var f=document.createEvent("MouseEvents");f.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),h.dispatchEvent(f)}}var o=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof ze=="object"&&ze.global===ze?ze:void 0,u=o.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),d=o.saveAs||(typeof window!="object"||window!==o?function(){}:"download"in HTMLAnchorElement.prototype&&!u?function(h,f,m){var g=o.URL||o.webkitURL,v=document.createElement("a");f=f||h.name||"download",v.download=f,v.rel="noopener",typeof h=="string"?(v.href=h,v.origin===location.origin?l(v):s(v.href)?i(h,f,m):l(v,v.target="_blank")):(v.href=g.createObjectURL(h),setTimeout(function(){g.revokeObjectURL(v.href)},4e4),setTimeout(function(){l(v)},0))}:"msSaveOrOpenBlob"in navigator?function(h,f,m){if(f=f||h.name||"download",typeof h!="string")navigator.msSaveOrOpenBlob(n(h,m),f);else if(s(h))i(h,f,m);else{var g=document.createElement("a");g.href=h,g.target="_blank",setTimeout(function(){l(g)})}}:function(h,f,m,g){if(g=g||open("","_blank"),g&&(g.document.title=g.document.body.innerText="downloading..."),typeof h=="string")return i(h,f,m);var v=h.type==="application/octet-stream",_=/constructor/i.test(o.HTMLElement)||o.safari,k=/CriOS\/[\d]+/.test(navigator.userAgent);if((k||v&&_||u)&&typeof FileReader<"u"){var E=new FileReader;E.onloadend=function(){var ue=E.result;ue=k?ue:ue.replace(/^data:[^;]*;/,"data:attachment/file;"),g?g.location.href=ue:location=ue,g=null},E.readAsDataURL(h)}else{var L=o.URL||o.webkitURL,B=L.createObjectURL(h);g?g.location=B:location.href=B,g=null,setTimeout(function(){L.revokeObjectURL(B)},4e4)}});o.saveAs=d.saveAs=d,t.exports=d})})(Xt);function yc(t,e){const n=new Blob([e],{type:"text/csv"});Xt.exports.saveAs(n,`${t}.csv`)}function vc(t){const e=new Ii.default;t.forEach(({id:n,data:i})=>{e.file(`${n}.csv`,Or(i))}),e.generateAsync({type:"blob"}).then(n=>{Xt.exports.saveAs(n,"dashboard_data.zip")})}function Or(t){if(!Array.isArray(t)||t.length===0)return"";const e=[],n=Object.keys(t[0]);return e.push(n.join(",")),t.forEach(i=>{const s=Object.values(i).join(",");e.push(s)}),e.join(`
69
+ `}}const Wo={legend:{show:!0,bottom:0,left:0},tooltip:{trigger:"item"}};function Qo(t,e){const n=["#66B4DB","#39BFA2","#E46464","#33A678","#EEBA00","#9D88CB","#939943","#E49792","#09A2B8","#AF5F6B","#6CA157","#09A2B8","#6398C7","#E692BA","#97B566","#8CACE2","#CA79AC","#6DBC80","#B08F4B","#826BAF"],i=t.dimensions.map(({name:o,max:u})=>({name:o,max:u})),s=e.map(o=>({value:t.dimensions.map(({data_key:u})=>o[u]),name:o[t.series_name_key]})),l={radar:{indicator:i,splitArea:{show:!1}},tooltip:{formatter:jo(t)},legend:{show:!0,left:"center"},series:{type:"radar",data:s,symbolSize:4,lineStyle:{width:1},areaStyle:{opacity:.4},label:No(t)},color:n};return O.default.merge({},Wo,l)}const $t={series_name_key:"name",dimensions:[]};X.use([de.RadarChart,$.GridComponent,$.LegendComponent,$.TooltipComponent,ye.CanvasRenderer]);function Yo({context:t}){const{value:e}=q(t.instanceData,"config"),{width:n,height:i}=t.viewport,s=t.data,l=w.useMemo(()=>Qo(S.defaultsDeep({},e,$t),s),[e,s]);return!n||!i||!e||S.isEmpty(e==null?void 0:e.dimensions)?null:r(a.Box,{children:r(ve.default,{echarts:X,option:l,style:{width:n,height:i}})})}function Uo({control:t,index:e,remove:n,data:i}){return c(a.Stack,{my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:`dimensions.${e}.name`,control:t,render:({field:s})=>r(a.TextInput,{label:"Name",required:!0,sx:{flex:1},...s})}),r(C.Controller,{name:`dimensions.${e}.data_key`,control:t,render:({field:s})=>r(j,{label:"Data Key",required:!0,data:i,sx:{flex:1},...s})}),r(C.Controller,{name:`dimensions.${e}.max`,control:t,render:({field:s})=>r(a.NumberInput,{label:"Max",hideControls:!0,required:!0,sx:{flex:1},...s})})]}),c(a.Stack,{children:[r(a.Divider,{mb:-15,variant:"dashed",label:"Value Formatter",labelPosition:"center"}),r(C.Controller,{name:`dimensions.${e}.formatter`,control:t,render:({field:s})=>r(Dt,{...s})})]}),r(a.ActionIcon,{color:"red",variant:"subtle",onClick:()=>n(e),sx:{position:"absolute",top:15,right:5},disabled:e===0,children:r(T.Trash,{size:16})})]},e)}function Xo({control:t,watch:e,data:n}){const{fields:i,append:s,remove:l}=C.useFieldArray({control:t,name:"dimensions"}),o=e("dimensions"),u=i.map((h,f)=>({...h,...o[f]})),d=()=>s({name:U.randomId(),data_key:"",max:100,formatter:qe});return c(a.Stack,{children:[u.map((h,f)=>r(Uo,{data:n,control:t,index:f,remove:l})),r(a.Group,{position:"center",mt:"xs",children:r(a.Button,{onClick:d,children:"Add a Dimension"})})]})}function Jo(t){function e({name:n="",data_key:i="",max:s=10,formatter:l=qe}){return{name:n,data_key:i,max:s,formatter:l}}return t.map(e)}function Ko({context:t}){const e=t.data,{value:n,set:i}=q(t.instanceData,"config"),s=w.useMemo(()=>S.defaultsDeep({},n,$t),[n]),{dimensions:l,series_name_key:o}=s,u=w.useMemo(()=>({dimensions:Jo(l!=null?l:[]),series_name_key:o}),[l,o]);w.useEffect(()=>{!S.isEqual(s,u)&&i(u)},[s,u]);const{control:d,handleSubmit:h,watch:f,getValues:m,reset:g}=C.useForm({defaultValues:u});w.useEffect(()=>{S.isEqual(m(),u)||g(u)},[s]),f(["series_name_key"]);const v=m(),_=w.useMemo(()=>!S.isEqual(v,s),[v,s]);return r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:h(i),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[r(a.Text,{children:"Chart Config"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!_,children:r(T.DeviceFloppy,{size:20})})]}),r(a.Box,{py:"sm",children:r(C.Controller,{name:"series_name_key",control:d,render:({field:k})=>r(j,{label:"Series Name Field",required:!0,data:e,sx:{flex:1},...k})})}),r(Xo,{control:d,watch:f,data:e})]})})}class Zo extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({version:1,config:n}))}}const Ho={displayName:"Radar Chart",migrator:new Zo,name:"radar",viewRender:Yo,configRender:Ko,createConfig:()=>$t};function eu(t,e){switch(t.config.method){case"linear":return[...be.regressionLinear()(e)];case"exponential":return[...be.regressionExp()(e)];case"logarithmic":return[...be.regressionLog()(e)];case"polynomial":return[...be.regressionPoly().order(t.config.order)(e)];default:return[]}}function tu({regression:t},e){const n=[],i=[];if(e.length===0)return{regressionSeries:n,regressionXAxes:i};const{transform:s,plot:l,name:o}=t,u=eu(s,e);return n.push({...l,name:o,data:u,showSymbol:!1,smooth:!0,tooltip:{show:!1}}),{regressionSeries:n,regressionXAxes:i}}const nu={tooltip:{trigger:"axis"},grid:{top:10,left:30,right:15,bottom:30,containLabel:!0},dataZoom:[{type:"inside",xAxisIndex:[0]},{type:"inside",yAxisIndex:[0]}]};function ru(t,e){var l,o;const n=O.default.uniqBy(e.map(u=>[u[t.x_axis.data_key],u[t.regression.y_axis_data_key]]),0),{regressionSeries:i}=tu(t,n),s={xAxis:{type:"category",name:(l=t.x_axis.name)!=null?l:""},yAxis:{name:(o=t.y_axis.name)!=null?o:""},series:[{data:n,name:t.y_axis.name,type:"scatter",symbolSize:4,color:"red"},...i]};return S.defaultsDeep({},s,nu)}function it(t,e,n){return 1-(1-t)*(e-1)/(e-n-1)}function iu(t,e){if(!e)return{expression:"",rSquared:0,adjustedRSquared:0};const{regression:n,x_axis:i,y_axis:s}=e,l=t.map(o=>[o[i.data_key],o[n.y_axis_data_key]]);if(n.transform.config.method==="linear"){const o=be.regressionLinear()(l),{a:u,b:d,rSquared:h}=o;return{expression:c(a.Group,{position:"center",noWrap:!0,spacing:10,children:[r(a.Text,{children:s.name}),r(a.Text,{children:"="}),r(a.Text,{weight:"bold",color:"gray",children:d}),r(a.Text,{children:"+"}),r(a.Text,{weight:"bold",color:"gray",children:u}),r(a.Text,{children:"\xD7"}),r(a.Text,{children:i.name})]}),rSquared:h,adjustedRSquared:it(h,t.length,1)}}if(n.transform.config.method==="exponential"){const{a:o,b:u,rSquared:d}=be.regressionExp()(l);return{expression:c(a.Group,{position:"center",noWrap:!0,spacing:10,children:[r(a.Text,{children:s.name}),r(a.Text,{children:"="}),r(a.Text,{weight:"bold",color:"gray",children:o}),r(a.Text,{children:"\xD7"}),c(a.Group,{position:"left",noWrap:!0,spacing:2,children:[r(a.Text,{children:"Math.exp("}),r(a.Text,{weight:"bold",color:"gray",children:u}),r(a.Text,{children:"\xD7"}),r(a.Text,{children:i.name}),r(a.Text,{children:")"})]})]}),rSquared:d,adjustedRSquared:it(d,t.length,1)}}if(n.transform.config.method==="logarithmic"){const{a:o,b:u,rSquared:d}=be.regressionLog()(l);return{expression:c(a.Group,{position:"center",noWrap:!0,spacing:10,children:[r(a.Text,{children:s.name}),r(a.Text,{children:"="}),r(a.Text,{weight:"bold",color:"gray",children:o}),r(a.Text,{children:"\xD7"}),c(a.Group,{position:"left",noWrap:!0,spacing:2,children:[r(a.Text,{children:"Math.log("}),r(a.Text,{children:i.name}),r(a.Text,{children:")"}),r(a.Text,{children:"+"}),r(a.Text,{weight:"bold",color:"gray",children:u})]})]}),rSquared:d,adjustedRSquared:it(d,t.length,1)}}if(n.transform.config.method==="polynomial"){const o=be.regressionPoly().order(n.transform.config.order)(l),{rSquared:u}=o;return console.log(o),{expression:"",rSquared:u,adjustedRSquared:it(u,t.length,1)}}return{expression:"",rSquared:0}}const Nt={x_axis:{name:"X Axis",data_key:""},y_axis:{name:"Y Axis"},regression:{transform:{type:"ecStat:regression",config:{method:"linear",order:1,formulaOn:"end"}},plot:{type:"line",yAxisIndex:0,color:"#228be6",lineStyle:{type:"solid",width:1}},name:"regression",y_axis_data_key:"value"}};X.use([$.DataZoomComponent,de.ScatterChart,$.GridComponent,$.LegendComponent,$.TooltipComponent,ye.CanvasRenderer]),X.registerTransform(un.transform.regression);function au({context:t}){const{value:e}=q(t.instanceData,"config"),{width:n,height:i}=t.viewport,s=w.useMemo(()=>{var g;const f=t.data,m=(g=e==null?void 0:e.regression)==null?void 0:g.y_axis_data_key;return m?f.map(v=>typeof v[m]=="number"?v:{...v,[m]:Number(v[m])}):f},[t.data,e==null?void 0:e.regression.y_axis_data_key]),l=w.useMemo(()=>ru(S.defaultsDeep({},e,Nt),s),[e,s]),{expression:o,rSquared:u,adjustedRSquared:d}=w.useMemo(()=>iu(s,e),[e,s]);if(!n||!i||!e)return null;let h=i;return o&&(h-=20),c(a.Box,{children:[o&&r(a.Text,{align:"center",size:12,children:o}),c(a.Group,{spacing:0,noWrap:!0,align:"start",sx:{"> *":{flexGrow:0,flexShrink:0}},children:[r(ve.default,{echarts:X,option:l,style:{width:n-190,height:h}}),u&&r(a.Table,{mt:20,fontSize:12,sx:{width:180,border:"1px solid #999",td:{padding:"3px 8px"}},children:c("tbody",{children:[c("tr",{children:[r("td",{children:"R-Sq"}),r("td",{style:{textAlign:"right"},children:re.default(u).format({output:"percent",mantissa:1})})]}),c("tr",{children:[r("td",{children:"R-Sq(Adjusted)"}),r("td",{style:{textAlign:"right"},children:re.default(d).format({output:"percent",mantissa:1})})]})]})})]})]})}const su=[{label:"Linear",value:"linear"},{label:"Exponential",value:"exponential"},{label:"Logarithmic",value:"logarithmic"},{label:"Polynomial",value:"polynomial"}];function lu({control:t,watch:e,data:n}){const i=e("regression.transform.config.method");return c(a.Stack,{children:[c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"regression.name",control:t,render:({field:s})=>r(a.TextInput,{label:"Name",required:!0,sx:{flex:1},...s})}),r(C.Controller,{name:"regression.y_axis_data_key",control:t,render:({field:s})=>r(j,{label:"Value Field",required:!0,data:n,sx:{flex:1},...s})})]}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"regression.transform.config.method",control:t,render:({field:s})=>r(a.Select,{label:"Method",data:su,sx:{flex:1},...s})}),i==="polynomial"&&r(C.Controller,{name:"regression.transform.config.order",control:t,render:({field:s})=>r(a.NumberInput,{label:"Order",sx:{flex:1},...s})})]}),c(a.Stack,{spacing:4,children:[r(a.Text,{size:"sm",children:"Color"}),r(C.Controller,{name:"regression.plot.color",control:t,render:({field:s})=>r(xe,{...s})})]})]})}function ou({context:t}){const{value:e,set:n}=q(t.instanceData,"config"),i=t.data,s=w.useMemo(()=>S.defaults({},e,Nt),[e]),{control:l,handleSubmit:o,watch:u,getValues:d,reset:h}=C.useForm({defaultValues:s});w.useEffect(()=>{h(s)},[s]),u(["x_axis","y_axis","regression"]);const f=d(),m=w.useMemo(()=>!S.isEqual(f,e),[f,e]);return r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:o(n),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[r(a.Text,{children:"Chart Config"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!m,children:r(T.DeviceFloppy,{size:20})})]}),c(a.Accordion,{multiple:!0,defaultValue:["Axis","Regression"],children:[c(a.Accordion.Item,{value:"Axis",children:[r(a.Accordion.Control,{children:"Axis"}),c(a.Accordion.Panel,{children:[c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"x_axis.name",control:l,render:({field:g})=>r(a.TextInput,{label:"X Axis Name",sx:{flex:1},...g})}),r(C.Controller,{name:"x_axis.data_key",control:l,render:({field:g})=>r(j,{label:"X Axis Data Field",required:!0,data:i,sx:{flex:1},...g})})]}),r(a.Group,{grow:!0,noWrap:!0,children:r(C.Controller,{name:"y_axis.name",control:l,render:({field:g})=>r(a.TextInput,{label:"Y Axis Name",sx:{flex:1},...g})})})]})]}),c(a.Accordion.Item,{value:"Regression",children:[r(a.Accordion.Control,{children:"Regression Line"}),r(a.Accordion.Panel,{children:r(lu,{control:l,watch:u,data:i})})]})]})]})})}class uu extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({version:1,config:n}))}}const cu={displayName:"Regression Chart",migrator:new uu,name:"regressionChart",viewRender:au,configRender:ou,createConfig:()=>Nt},jt={x_axis:{name:"X Axis",data_key:""},data_key:"value",bar:{name:"Value",color:"#228be6"},line:{name:"Value",color:"red"}};function Wt(t){return re.default(t).format({output:"percent",mantissa:0})}function du(t){const e=t.value[1];try{return Wt(e)}catch(n){return console.error(n),e}}function pu(t){const e=Array.isArray(t)?t:[t];if(e.length===0)return"";const n=e.map((i,s)=>{const l=i.seriesName,[o,u]=i.value;return l?`${l}: <strong>${(s===0?h=>h:Wt)(u)}</strong>`:u});return n.unshift(`<strong>${e[0].name}</strong>`),n.join("<br />")}X.use([de.BarChart,de.LineChart,$.DataZoomComponent,$.GridComponent,$.LegendComponent,$.TooltipComponent,ye.CanvasRenderer]);function fu({context:t}){const{value:e}=q(t.instanceData,"config"),n=t.data,{width:i,height:s}=t.viewport,{x_axis:l,data_key:o,bar:u,line:d}=S.defaults({},e,jt),{barData:h,lineData:f}=w.useMemo(()=>{const g=n.map(k=>[k[l.data_key],Number(k[o])]).sort((k,E)=>E[1]-k[1]),v=g.reduce((k,E)=>k+E[1],0),_=g.reduce((k,E,L)=>{const B=L===0?0:k[L-1][1];return k.push([E[0],B+E[1]]),k},[]).map(k=>[k[0],k[1]/v]);return{barData:g,lineData:_}},[l.data_key,o,n]),m={dataZoom:[{type:"inside",xAxisIndex:[0]},{type:"inside",yAxisIndex:[0]}],tooltip:{trigger:"axis",formatter:pu},xAxis:[{type:"category",name:l.name,nameLocation:"middle",nameGap:30,nameTextStyle:{fontWeight:"bold",align:"right"}}],yAxis:[{name:u.name,nameGap:30,nameTextStyle:{fontWeight:"bold",align:"right"}},{name:d.name,nameGap:30,nameTextStyle:{fontWeight:"bold",align:"center"},axisLabel:{show:!0,formatter:Wt}}],series:[{name:u.name,type:"bar",itemStyle:{color:u.color},yAxisIndex:0,data:h},{name:d.name,type:"line",itemStyle:{color:d.color},symbolSize:2,lineStyle:{width:1},label:{show:!0,position:"top",formatter:du},yAxisIndex:1,data:f}]};return!e||!i||!s?null:r(ve.default,{echarts:X,option:m,style:{width:i,height:s}})}function hu({context:t}){const{value:e,set:n}=q(t.instanceData,"config"),i=t.data,s=w.useMemo(()=>S.defaults({},e,jt),[e]),{control:l,handleSubmit:o,watch:u,getValues:d,reset:h}=C.useForm({defaultValues:s});w.useEffect(()=>{h(s)},[s]),u(["x_axis","data_key","bar","line"]);const f=d(),m=w.useMemo(()=>!S.isEqual(f,e),[f,e]);return r(a.Stack,{mt:"md",spacing:"xs",children:c("form",{onSubmit:o(n),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[r(a.Text,{children:"Chart Config"}),r(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!m,children:r(T.DeviceFloppy,{size:20})})]}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"x_axis.name",control:l,render:({field:g})=>r(a.TextInput,{label:"X Axis Name",sx:{flex:1},...g})}),r(C.Controller,{name:"x_axis.data_key",control:l,render:({field:g})=>r(j,{label:"X Axis Data Field",required:!0,data:i,sx:{flex:1},...g})})]}),r(C.Controller,{name:"data_key",control:l,render:({field:g})=>r(j,{label:"Y Axis Data Field",required:!0,data:i,sx:{flex:1},...g})}),r(a.Divider,{my:"md",label:"Bar",labelPosition:"center"}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"bar.name",control:l,render:({field:g})=>r(a.TextInput,{label:"Bar Name",sx:{flex:1},...g})}),c(a.Stack,{spacing:4,children:[r(a.Text,{size:"sm",children:"Bar's Color"}),r(C.Controller,{name:"bar.color",control:l,render:({field:g})=>r(xe,{...g})})]})]}),r(a.Divider,{my:"md",label:"Line",labelPosition:"center"}),c(a.Group,{grow:!0,noWrap:!0,children:[r(C.Controller,{name:"line.name",control:l,render:({field:g})=>r(a.TextInput,{label:"Line Name",sx:{flex:1},...g})}),c(a.Stack,{spacing:4,children:[r(a.Text,{size:"sm",children:"Line's Color"}),r(C.Controller,{name:"line.color",control:l,render:({field:g})=>r(xe,{...g})})]})]})]})})}class gu extends oe{constructor(){super(...arguments);V(this,"VERSION",1)}configVersions(){this.version(1,n=>({version:1,config:n}))}}const mu={displayName:"Pareto Chart",migrator:new gu,name:"paretoChart",viewRender:fu,configRender:hu,createConfig:()=>jt},yu=[{value:"#25262B",name:"Dark"},{value:"#868E96",name:"Gray"},{value:"#FA5252",name:"Red"},{value:"#E64980",name:"Pink"},{value:"#BE4BDB",name:"Grape"},{value:"#7950F2",name:"Violet"},{value:"#4C6EF5",name:"Indigo"},{value:"#228BE6",name:"Blue"},{value:"#15AABF",name:"Cyan"},{value:"#12B886",name:"Teal"},{value:"#40C057",name:"Green"},{value:"#82C91E",name:"Lime"},{value:"#FAB005",name:"Yellow"},{value:"#FD7E14",name:"Orange"}].map(t=>({name:t.name,value:t.value,type:"single",category:"basic"})),vu=[Oa,Fa,Ba,Ga,qa,La],yr={id:"dashboard",version:Ra,manifest:{viz:[Ft,Ls,Ua,Pl,Gl,$l,Kl,mu,$o,Ho,cu],color:[...yu,...vu]}},$e=new Na,vr=()=>{try{$e.install(yr)}catch{}const t=new Va($e),e=new $a($e);return{pluginManager:$e,vizManager:t,colorManager:e}},ge=w.createContext(vr());try{$e.install(yr)}catch{}function bu(t,e){const{value:n,set:i}=q(t.operation.operationData,"config"),[s,l]=w.useState(S.defaults({},n,e)),o=async()=>{await i(s)};return w.useEffect(()=>{l(S.defaults({},n,e))},[n]),{config:s,setConfig:l,commit:o}}function xu(t){const{config:e,setConfig:n,commit:i}=bu(t,{urlTemplate:"",openInNewTab:!0});async function s(){await i()}async function l(u){n({...e,openInNewTab:u}),await i()}const o=u=>n({...e,urlTemplate:u.currentTarget.value});return c(a.Stack,{children:[r(a.TextInput,{label:"Url",value:e.urlTemplate,onChange:o,onBlur:s}),r(a.Switch,{label:"Open in new Tab",checked:e.openInNewTab,onChange:u=>l(u.currentTarget.checked)})]})}function Cu(t){return S.cloneDeepWith(t,n=>{if(typeof n=="string")return encodeURIComponent(n)})}async function wu(t,e){const{urlTemplate:n,openInNewTab:i}=await e.operationData.getItem("config"),l=S.template(n||"")(Cu(t));window.open(l,i?"_blank":"_self","noopener")}const Su={displayName:"Open Link",id:"builtin:op:open-link",configRender:xu,run:wu};function Iu(t){const{value:e,set:n}=q(t.operationData,"config"),i=s=>void n({template:s});return[(e==null?void 0:e.template)||"",i]}function Du(t){const[e,n]=Iu(t.operation);return r(a.TextInput,{defaultValue:e,onBlur:i=>n(i.currentTarget.value),label:"console.log"})}async function Tu(t,e){const n=await e.operationData.getItem("config"),i=S.template(n.template||"");console.log("run with payload",t),console.log(i(t))}const Qt=[{displayName:"console.log (debug)",id:"builtin:op:debug",configRender:Du,run:Tu},Su];class _u{constructor(e,n=Qt){V(this,"attachments");this.operations=n;const i=async s=>{const{id:l,schemaRef:o}=await s.getItem(null);return{id:l,schemaRef:o,operationData:new ke(s,"data")}};this.attachments=new Ct(e,"__OPERATIONS",i)}async runOperation(e,n){const i=await this.attachments.getInstance(e);if(!i){console.warn(`Operation '${e}' is not defined`);return}const s=this.operations.find(l=>l.id===i.schemaRef);if(!s){console.warn(`Operation schema '${i.schemaRef}' is not defined`);return}await s.run(n,i)}async createOrGetOperation(e,n){if(!this.getOperationSchemaList().some(o=>o.id===n.id))throw new Error(`Operation schema '${n.id}' is not defined`);const s=await this.attachments.getInstance(e);return!s||s.schemaRef!==n.id?await this.attachments.create(e,{id:e,schemaRef:n.id,data:{}}):s}getOperationList(){return this.attachments.list()}getOperationSchemaList(){return this.operations}removeOperation(e){return this.attachments.remove(e)}async retrieveTrigger(e){return await this.attachments.getInstance(e)}}const br="__TRIGGERS";class Au{constructor(e,n){V(this,"attachments");this.instance=e,this.component=n;const i=async s=>{const{id:l,schemaRef:o}=await s.getItem(null);return{id:l,schemaRef:o,triggerData:new ke(s,"data")}};this.attachments=new Ct(e,br,i)}watchTriggerSnapshotList(e){return this.instance.instanceData.watchItem(br,n=>{const i=S.values(n).map(s=>({id:S.get(s,"id"),schemaRef:S.get(s,"schemaRef"),config:J.toJS(S.get(s,"data.config"))}));e(i)},{fireImmediately:!0})}async createOrGetTrigger(e,n,i={recreate:!1}){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 l=await this.attachments.getInstance(e);return!l||i.recreate||l.schemaRef!==n.id?await this.attachments.create(e,{id:e,schemaRef:n.id,data:{}}):l}async getTriggerList(){return await this.attachments.list()}getTriggerSchemaList(){return this.component.triggers||[]}async removeTrigger(e){await this.attachments.remove(e)}async retrieveTrigger(e){return await this.attachments.getInstance(e)}}class xr{constructor(e,n,i){V(this,"operationManager");V(this,"triggerManager");V(this,"attachments");this.operationManager=new _u(e,i),this.triggerManager=new Au(e,n);const s=async l=>{const{id:o,triggerRef:u,operationRef:d}=await l.getItem(null);return{id:o,triggerRef:u,operationRef:d}};this.attachments=new Ct(e,"__INTERACTIONS",s)}async addInteraction(e,n){const i=e.id,s=n.id,l=`[${i}]:[${s}]`;await this.attachments.create(l,{id:l,triggerRef:i,operationRef:s})}getInteractionList(){return this.attachments.list()}async removeInteraction(e){const n=await this.attachments.getInstance(e);if(!n)return;const{triggerRef:i,operationRef:s}=n;await this.getTriggerRefCount(i)<=1&&await this.triggerManager.removeTrigger(i),await this.getOperationRefCount(s)<=1&&await this.operationManager.removeOperation(s),await this.attachments.remove(e)}async getOperationRefCount(e){return(await this.getInteractionList()).filter(i=>i.operationRef===e).length}async getTriggerRefCount(e){return(await this.getInteractionList()).filter(i=>i.triggerRef===e).length}async runInteraction(e,n){const s=(await this.getInteractionList()).filter(l=>l.triggerRef===e);await Promise.all(s.map(async l=>{try{return await this.operationManager.runOperation(l.operationRef,n)}catch(o){console.warn(`Failed to run operation '${l.operationRef}'`,o)}}))}}function ku(t,e){const[n,i]=w.useState([]);return R.useAsyncEffect(async()=>{const s=await t.getInteractionList();i(s)},[e]),n}const Mu=A.observer(({item:t,manager:e,instance:n,sampleData:i,variables:s,onRemove:l})=>{const{triggerRef:o,operationRef:u}=t,d=Ta(e.triggerManager,n);if(R.useAsyncEffect(async()=>{await d.configTrigger(o,i)},[d,o,i]),d.isReady()){const h=[...d.triggerSchema.payload,...s];return c(a.Group,{children:[r(Ma,{model:d}),r(Sa,{instance:n,operationId:u,variables:h,operationManager:e.operationManager}),r(a.Button,{"aria-label":"delete-interaction",variant:"outline",color:"red",onClick:()=>l(t),children:r(T.Trash,{})})]})}return null}),Eu=t=>{const[e,n]=w.useState(0),{interactionManager:i,instance:s,sampleData:l,variables:o}=t,u=ku(i,e),d=async()=>{const f=await i.triggerManager.createOrGetTrigger(U.randomId(),i.triggerManager.getTriggerSchemaList()[0]),m=await i.operationManager.createOrGetOperation(U.randomId(),i.operationManager.getOperationSchemaList()[0]);await i.addInteraction(f,m),n(g=>g+1)};async function h(f){await i.removeInteraction(f.id),n(m=>m+1)}return c(a.Stack,{children:[u.map(f=>r(Mu,{onRemove:h,instance:s,sampleData:l,variables:o,item:f,manager:t.interactionManager},f.id)),r(a.Button,{style:{width:"fit-content"},onClick:()=>d(),children:"Add interaction"})]})},Vu=()=>{const{panel:t,data:e}=K(),n=t.viz,{vizManager:i}=w.useContext(ge),s=t.json,l=R.useCreation(()=>i.getOrCreateInstance(s),[i,n.type]),o=R.useCreation(()=>new xr(l,i.resolveComponent(n.type),Qt),[l,n.type]);return w.useEffect(()=>l.instanceData.watchItem(null,S.throttle(u=>{t.viz.setConf(u)},100,{leading:!1,trailing:!0})),[l]),{instance:l,vizManager:i,interactionManager:o,sampleData:e,variables:[]}},Pu=()=>{const t=Vu();return r(Eu,{...t})},zu=A.observer(()=>{const{panel:t}=K(),[e,n]=b.default.useState(t.description),i=t.description!==e,s=b.default.useCallback(()=>{!i||t.setDescription(e)},[i,e]);return c(a.Stack,{spacing:4,sx:{flexGrow:1},children:[c(a.Group,{align:"end",children:[r(a.Text,{sx:{flexGrow:1},children:"Description"}),r(a.ActionIcon,{variant:"subtle",color:"blue",disabled:!i,onClick:s,children:r(T.DeviceFloppy,{size:20})})]}),r(ft.RichTextEditor,{value:e,onChange:n,sx:{flexGrow:1},sticky:!0,p:"0"})]})}),Ou=A.observer(()=>{const{panel:t}=K(),{style:e}=t;return r(N,{children:r(a.Switch,{label:"Border",checked:e.border.enabled,onChange:n=>e.border.setEnabled(n.currentTarget.checked)})})}),Fu=A.observer(()=>{const{panel:{title:t,style:{border:e}}}=K();return r(Ae,{children:c(a.Stack,{mx:"auto",mt:"xl",p:"5px",spacing:5,sx:{width:"600px",height:"450px",background:"transparent",borderRadius:"5px",border:"1px solid #ced4da",borderWidth:e.enabled?"1px":"0px"},children:[c(a.Group,{position:"apart",noWrap:!0,sx:{flexGrow:0,flexShrink:0},children:[r(a.Group,{children:r(Fn,{})}),r(a.Group,{grow:!0,position:"center",children:r(a.Text,{lineClamp:1,weight:"bold",children:t})}),r(a.Group,{position:"right",spacing:0,sx:{height:"28px"}})]}),r(a.Group,{sx:{background:"#eee",flexGrow:1}})]})})}),qu=A.observer(()=>{const{panel:t}=K(),{title:e,setTitle:n}=t,[i,s]=U.useInputState(e),l=e!==i,o=b.default.useCallback(()=>{!l||n(i)},[l,i]);return r(a.TextInput,{value:i,onChange:s,label:c(a.Group,{align:"apart",children:[r(a.Text,{sx:{flexGrow:1},children:"Panel Title"}),r(a.ActionIcon,{variant:"subtle",color:"blue",disabled:!l,onClick:o,children:r(T.DeviceFloppy,{size:20})})]}),styles:{label:{display:"block",paddingBottom:"4px"}}})});function Gu(){return c(a.Group,{grow:!0,noWrap:!0,align:"stretch",sx:{height:"100%"},children:[c(a.Stack,{sx:{width:"40%",flexShrink:0,flexGrow:0,height:"100%"},children:[r(a.Divider,{label:"Style",labelPosition:"center",variant:"dashed"}),r(Ou,{}),r(a.Divider,{label:"Info",labelPosition:"center",variant:"dashed"}),r(qu,{}),r(zu,{})]}),r(a.Box,{sx:{height:"100%",flexGrow:1,maxWidth:"60%"},children:r(Fu,{})})]})}const Bu=A.observer(function(){const e=Q(),{panel:{queryID:n,setQueryID:i}}=K(),s=b.default.useMemo(()=>e.queries.current.map(l=>({value:l.id,label:l.id})),[e.queries.current]);return c(a.Stack,{children:[c(a.Group,{position:"left",sx:{maxWidth:"600px",alignItems:"baseline"},children:[r(a.Text,{children:"Select a Query"}),r(a.Select,{data:s,value:n,onChange:i,allowDeselect:!1,clearable:!1,sx:{flexGrow:1}})]}),r(Dn,{id:n})]})});function Cr(t,e,n){const i=R.useCreation(()=>new Set,[]),s=t.resolveComponent(e.type),[l,o]=w.useState(!1);return R.useAsyncEffect(async()=>{if(await s.migrator.needMigration(e)&&!i.has(e.id))try{i.add(e.id),await s.migrator.migrate(e),n==null||n()}finally{i.delete(e.id),o(!0)}else o(!0)},[e]),l}function Lu({setVizConf:t,...e}){const{vizManager:n,panel:i}=e,s=n.getOrCreateInstance(i),l=Cr(n,s,()=>{ht.showNotification({title:`${i.title} - Updated`,message:"Your plugin configuration has been migrated to the latest version"})});return R.useAsyncEffect(async()=>{await s.instanceData.setItem(null,i.viz.conf)},[s,i.viz.type]),w.useEffect(()=>s.instanceData.watchItem(null,o=>{t(o)}),[t,i.viz.type]),l?r(za,{...e}):r(a.Text,{children:"Checking update..."})}function Ru(t){const{vizManager:e,panel:n}=t,i=e.getOrCreateInstance(n);return Cr(e,i,()=>{ht.showNotification({title:`${n.title} - Updated`,message:"Your plugin configuration has been migrated to the latest version"})})?r(Pa,{...t}):r(a.Text,{children:"Checking update"})}const sd="";function $u(t,e){const{vizManager:n}=w.useContext(ge),{panel:{viz:i,title:s,id:l,description:o,queryID:u,style:d}}=K(),h={title:s,id:l,description:o,queryID:u,viz:i,layout:e,style:d.json};try{return n.resolveComponent(i.type),r(Ru,{panel:h,data:t,vizManager:n})}catch(f){return console.info(S.get(f,"message")),null}}const Nu=["richText"],wr=A.observer(function({height:e,viz:n,data:i,loading:s}){const{ref:l,width:o,height:u}=U.useElementSize(),d=b.default.useMemo(()=>!Array.isArray(i)||i.length===0,[i]),h=$u(i,{w:o,h:u});return Nu.includes(n.type)?r("div",{className:"viz-root",style:{height:e},ref:l,children:r(Ae,{children:h})}):s?r("div",{className:"viz-root",style:{height:e},ref:l,children:r(a.LoadingOverlay,{visible:s,exitTransitionDuration:0})}):c("div",{className:"viz-root",style:{height:e},ref:l,children:[d&&r(a.Text,{color:"gray",align:"center",children:"Empty Data"}),!d&&r(Ae,{children:h})]})}),ju=A.observer(()=>{const{data:t,loading:e,panel:{viz:n}}=K();return r(wr,{viz:n,data:t,loading:e,height:"100%"})}),Yt=[];function Wu(){const{vizManager:t}=w.useContext(ge);return w.useMemo(()=>t.availableVizList.map(e=>({value:e.name,label:e.displayName})).concat(Yt),[t])}function Qu(t,e){try{return t.resolveComponent(e).createConfig()}catch{return null}}function Yu(){const{data:t,panel:{viz:e,title:n,queryID:i,description:s,setDescription:l,setTitle:o,setQueryID:u,id:d,style:h}}=K(),{vizManager:f}=w.useContext(ge),m={title:n,description:s,viz:e,queryID:i,id:d,style:h.json},g={setDescription:l,setQueryID:u,setTitle:o};try{return f.resolveComponent(m.viz.type),r(Lu,{setVizConf:e.setConf,panel:m,panelInfoEditor:g,vizManager:f,data:t})}catch(v){return console.info(S.get(v,"message")),null}}const Uu=A.observer(()=>{const{data:t,panel:{viz:e}}=K(),[n,i]=U.useInputState(e.type),s=e.type!==n,{vizManager:l}=w.useContext(ge),o=b.default.useCallback(()=>{if(!s)return;const v=Qu(l,n);e.setType(n),e.setConf(v||{})},[e,s,n]),u=v=>{try{e.setConf(JSON.parse(v))}catch(_){console.error(_)}},d=b.default.useMemo(()=>{var v;return(v=Yt.find(_=>_.value===n))==null?void 0:v.Panel},[n,Yt]),h=Yu(),f=d?w.createElement(d,{data:t,conf:e.conf,setConf:e.setConf}):null,m=h||f,g=Wu();return c(N,{children:[r(a.Select,{label:"Visualization",value:n,onChange:i,data:g,rightSection:r(a.ActionIcon,{disabled:!s,onClick:o,children:r(T.DeviceFloppy,{size:20})})}),m,!m&&r(a.JsonInput,{minRows:20,label:"Config",value:JSON.stringify(e.conf,null,2),onChange:u})]})});function Xu(){return c(a.Group,{grow:!0,noWrap:!0,align:"stretch",sx:{height:"100%",overflow:"hidden"},children:[r(a.Stack,{sx:{width:"40%",flexShrink:0,flexGrow:0,overflow:"scroll",height:"100%"},children:r(Uu,{})}),r(a.Box,{sx:{height:"100%",flexGrow:1,maxWidth:"60%"},children:r(ju,{})})]})}const Ju=A.observer(function({opened:e,close:n}){const{freezeLayout:i}=b.default.useContext(le),[s,l]=w.useState("Visualization"),{panel:o,loading:u}=K(),{id:d,title:h}=o;return b.default.useEffect(()=>{i(e)},[e]),r(a.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:n,title:`Editing Panel - ${h.trim()?h:d}`,trapFocus:!0,onDragStart:f=>{f.stopPropagation()},children:r(a.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 185px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",minHeight:"unset",maxHeight:"100%",width:"100%",padding:"16px"}},padding:"md",children:c(a.Tabs,{value:s,onTabChange:l,className:"panel-settings-tabs",children:[c(a.Tabs.List,{children:[r(a.Tabs.Tab,{value:"Data",children:"Data"}),r(a.Tabs.Tab,{value:"Panel",children:"Panel"}),r(a.Tabs.Tab,{value:"Visualization",children:"Visualization"}),r(a.Tabs.Tab,{value:"Interactions",children:"Interactions"})]}),c(a.Tabs.Panel,{value:"Data",pt:"sm",children:[r(a.LoadingOverlay,{visible:u,exitTransitionDuration:0}),r(Bu,{})]}),r(a.Tabs.Panel,{value:"Panel",pt:"sm",children:s==="Panel"&&r(Gu,{})}),r(a.Tabs.Panel,{value:"Visualization",pt:"sm",children:s==="Visualization"&&r(Xu,{})}),r(a.Tabs.Panel,{value:"Interactions",pt:"sm",children:r(Ae,{children:r(Pu,{})})})]})})})}),Ku=A.observer(({view:t})=>{const e=Q(),n=he.useModals(),[i,s]=b.default.useState(!1),l=()=>s(!0),o=()=>s(!1),{panel:u}=K(),{id:d,queryID:h}=u,{inEditMode:f}=b.default.useContext(le),m=()=>e.queries.refetchDataByQueryID(h),{viewPanelInFullScreen:g,inFullScreen:v}=b.default.useContext(yt),_=()=>{t.panels.duplicateByID(d)},k=()=>n.openConfirmModal({title:"Delete this panel?",labels:{confirm:"Confirm",cancel:"Cancel"},onCancel:()=>console.log("Cancel"),onConfirm:()=>t.panels.removeByID(d)}),E=b.default.useCallback(()=>{g(d)},[d,g]);return c(N,{children:[r(a.Box,{sx:{position:"absolute",top:0,left:0,right:0,zIndex:300},children:c(a.Menu,{withinPortal:!0,children:[r(a.Menu.Target,{children:r(a.Box,{className:"panel-dropdown-target",sx:{width:"100%",height:"25px"}})}),c(a.Menu.Dropdown,{children:[r(a.Menu.Item,{onClick:m,icon:r(T.Refresh,{size:14}),children:"Refresh"}),r(a.Menu.Item,{onClick:()=>e.queries.downloadDataByQueryID(h),icon:r(T.Download,{size:14}),children:"Download Data"}),!v&&r(a.Menu.Item,{onClick:E,icon:r(T.ArrowsMaximize,{size:14}),children:"Full Screen"}),f&&c(N,{children:[r(a.Divider,{label:"Edit",labelPosition:"center"}),r(a.Menu.Item,{onClick:l,icon:r(T.Settings,{size:14}),children:"Settings"}),r(a.Menu.Item,{onClick:_,icon:r(T.Copy,{size:14}),children:"Duplicate"}),r(a.Menu.Item,{color:"red",onClick:k,icon:r(T.Trash,{size:14}),children:"Delete"})]})]})]})}),f&&r(Ju,{opened:i,close:o})]})}),ld="",Zu=A.observer(function(){const{panel:e}=K(),{title:n}=e;return n?r(a.Group,{grow:!0,position:"center",px:20,className:"panel-title-wrapper",sx:{flexGrow:1},children:r(a.Text,{align:"center",lineClamp:1,weight:"bold",children:n})}):null});function Hu(t){return!["richText"].includes(t)}const ec={border:"1px solid #ced4da"},tc={border:"1px dashed transparent",transition:"border-color 300ms ease","&:hover":{borderColor:"#ced4da"}},at=A.observer(function({panel:e,view:n}){const i=Q(),{data:s,state:l}=i.getDataStuffByID(e.queryID),o=Hu(e.viz.type)&&l==="loading",u=e.title?"calc(100% - 25px - 5px)":"100%",d=e.style.border.enabled?ec:tc;return r(Sn,{value:{panel:e,data:s,loading:o},children:c(a.Box,{className:"panel-root",p:5,pt:0,sx:{...d},children:[r(a.Box,{sx:{position:"absolute",left:0,top:0,height:28,zIndex:310},children:r(Fn,{})}),r(Ku,{view:n}),r(Zu,{}),r(wr,{viz:e.viz,data:s,loading:o,height:u})]})})}),Sr=A.observer(function({view:e,panel:n,exitFullScreen:i}){return c(a.Stack,{px:"10px",pb:"5px",sx:{height:"100%",flexGrow:1,justifyContent:"flex-start"},children:[r(a.Group,{mx:"-5px",sx:{flexGrow:0},children:r(a.Button,{variant:"default",size:"sm",onClick:i,leftIcon:r(T.ArrowLeft,{size:20}),children:"Exit fullscreen"})}),r(a.Group,{mx:"-5px",grow:!0,sx:{flexGrow:1,flexShrink:0},children:r(at,{view:e,panel:n})})]})});function Ir(t){const[e,n]=b.default.useState(null),i=b.default.useCallback(u=>{n(u)},[]),s=b.default.useCallback(()=>{n(null)},[]),l=e?t.panels.findByID(e):null;return{viewPanelInFullScreen:i,exitFullScreen:s,inFullScreen:!!l,fullScreenPanel:l}}function Dr(){b.default.useEffect(()=>{const t=Si.default(".dashboard-sticky-area",{useStickyClasses:!0,parentClass:"dashboard-sticky-parent"});return()=>{t==null||t.cleanup()}},[])}const od="",nc=b.default.forwardRef(({handleAxis:t},e)=>r(a.ActionIcon,{ref:e,className:"react-grid-customDragHandle",sx:{userSelect:"none",cursor:"grab",position:"absolute",top:0,right:0,zIndex:400,"&:hover":{color:"#228be6"}},variant:"transparent",children:r(T.ArrowsMove,{size:16})})),rc=b.default.forwardRef(({handleAxis:t,...e},n)=>r(a.ActionIcon,{ref:n,className:"react-grid-customResizeHandle",sx:{userSelect:"none",cursor:"nwse-resize",position:"absolute",bottom:-5,right:-5,zIndex:400,"&:hover":{color:"#228be6"}},variant:"transparent",...e,children:r(T.ChevronDownRight,{size:16})})),ic=mt.WidthProvider(fn.default),ac=A.observer(function({view:e,className:n="layout",rowHeight:i=10,isDraggable:s,isResizable:l}){const o=b.default.useCallback(u=>{u.forEach(({i:d,...h})=>{const f=e.panels.findByID(d);!f||f.layout.set(h)})},[e]);return r(ic,{onLayoutChange:o,className:`dashboard-layout ${n}`,rowHeight:i,layout:e.panels.layouts,isDraggable:s,isResizable:l,draggableHandle:".react-grid-customDragHandle",resizeHandle:r(rc,{}),children:e.panels.list.map((u,d)=>c("div",{"data-grid":{...u.layout},style:{position:"relative"},children:[s&&r(nc,{}),r(at,{view:e,panel:u})]},u.id))})}),sc=mt.WidthProvider(fn.default),lc=A.observer(function({view:e,className:n="layout",rowHeight:i=10}){return r(sc,{className:`dashboard-layout ${n}`,rowHeight:i,isDraggable:!1,isResizable:!1,layout:e.panels.layouts,children:e.panels.list.map(s=>r("div",{"data-grid":s.layout,children:r(at,{view:e,panel:s})},s.id))})}),oc=A.observer(({children:t})=>r(a.Box,{children:t})),uc=A.observer(({children:t,view:e})=>r(a.Modal,{size:e.config.width,overflow:"inside",opened:!0,onClose:O.default.noop,withCloseButton:!1,title:e.name,trapFocus:!0,onDragStart:n=>{n.stopPropagation()},styles:{root:{position:"relative",height:"calc(100% - 46px)"},overlay:{position:"absolute !important"},modal:{border:"1px solid #efefef"},body:{"> div":{maxHeight:e.config.height,overflow:"scroll"}}},withinPortal:!1,transitionDuration:0,children:t})),cc=A.observer(({view:t,children:e})=>{switch(t.type){case fe.Modal:return r(uc,{view:t,children:e});case fe.Division:default:return r(oc,{children:e})}}),Tr=A.observer(function({view:e,saveDashboardChanges:n}){const{viewPanelInFullScreen:i,exitFullScreen:s,inFullScreen:l,fullScreenPanel:o}=Ir(e);return Dr(),r(yt.Provider,{value:{viewPanelInFullScreen:i,inFullScreen:l},children:c(a.Box,{className:"dashboard-view",mx:-10,sx:{position:"relative",height:"100%"},children:[l&&r(Sr,{view:e,panel:o,exitFullScreen:s}),!l&&r(On,{saveChanges:n}),r(cc,{view:e,children:c(a.Box,{className:"dashboard-sticky-parent",children:[r(a.Box,{className:"dashboard-sticky-area",children:r(Cn,{view:e})}),r(a.Box,{sx:{display:l?"none":"block"},children:r(ac,{view:e,isDraggable:!0,isResizable:!0})})]})})]})})}),_r=A.observer(function({view:e}){const{viewPanelInFullScreen:n,exitFullScreen:i,inFullScreen:s,fullScreenPanel:l}=Ir(e);return Dr(),r(yt.Provider,{value:{viewPanelInFullScreen:n,inFullScreen:s},children:c(a.Box,{className:"dashboard-view",sx:{position:"relative",height:"100%"},children:[s&&r(Sr,{view:e,panel:l,exitFullScreen:i}),!s&&c(a.Box,{className:"dashboard-sticky-area",children:[r(On,{saveChanges:O.default.noop}),r(Cn,{view:e})]}),r(lc,{view:e})]})})}),Ar=y.types.model({label:y.types.string,value:y.types.string}).actions(t=>({setLabel(e){t.label=e},setValue(e){t.value=e}})),kr=y.types.model("FilterConfigModel_Select",{required:y.types.boolean,default_value:y.types.string,static_options:y.types.optional(y.types.array(Ar),[]),options_query:An}).actions(t=>({addStaticOption(e){t.static_options.push(e)},removeStaticOption(e){t.static_options.splice(e,1)},setRequired(e){t.required=e},setDefaultValue(e){t.default_value=e},setOptionsQuery(e){t.options_query=e}})),dc=()=>kr.create({required:!1,default_value:"",static_options:[],options_query:{type:pe.Postgresql,key:"",sql:""}}),Mr=y.types.model("FilterConfigModel_MultiSelect",{default_value:y.types.optional(y.types.array(y.types.string),[]),static_options:y.types.optional(y.types.array(Ar),[]),options_query:An}).actions(t=>({addStaticOption(e){t.static_options.push(e)},removeStaticOption(e){t.static_options.splice(e,1)},setDefaultValue(e){t.default_value=y.cast(e)},setOptionsQuery(e){t.options_query=e}})),pc=()=>Mr.create({default_value:[],static_options:[],options_query:{type:pe.Postgresql,key:"",sql:""}}),Er=y.types.model("FilterConfigModel_Checkbox",{default_value:y.types.boolean}).actions(t=>({setDefaultValue(e){t.default_value=e}})),fc=()=>Er.create({default_value:!1}),hc=y.types.model("FilterConfigModel_DateRange",{required:y.types.boolean,inputFormat:y.types.enumeration("DateRangeInputFormat",["YYYY","YYYY-MM","YYYY-MM-DD"]),default_value:y.types.optional(y.types.array(y.types.union(y.types.Date,y.types.null)),[null,null]),clearable:y.types.boolean}).actions(t=>({setRequired(e){t.required=e},setClearable(e){t.clearable=e},setInputFormat(e){t.inputFormat=e},setDefaultValue(e){t.default_value.length=0,t.default_value.push(...e)}})),Vr=y.types.snapshotProcessor(hc,{preProcessor({default_value:t,...e}){return{...e,default_value:t.map(n=>n===null?null:new Date(n))}},postProcessor({default_value:t,...e}){return{...e,default_value:t.map(n=>typeof n=="number"?new Date(n).toISOString():"")}}}),gc=()=>Vr.create({required:!1,inputFormat:"YYYY-MM-DD",clearable:!1,default_value:[null,null]}),Ut=y.types.model("FilterModel",{id:y.types.identifier,key:y.types.string,label:y.types.string,order:y.types.number,visibleInViewsIDs:y.types.array(y.types.string),type:y.types.enumeration("DashboardFilterType",[ie.Select,ie.MultiSelect,ie.TextInput,ie.Checkbox,ie.DateRange]),config:y.types.union(kr,Mr,kn,Er,Vr)}).actions(t=>({setKey(e){t.key=e},setLabel(e){t.label=e},setOrder(e){t.order=e},setType(e){switch(e){case ie.Select:t.config=dc();break;case ie.MultiSelect:t.config=pc();break;case ie.TextInput:t.config=Mn();break;case ie.Checkbox:t.config=fc();break;case ie.DateRange:t.config=gc();break}t.type=e},setVisibleInViewsIDs(e){t.visibleInViewsIDs.length=0,t.visibleInViewsIDs.push(...e)}})),Pr=y.types.model("FiltersModel",{original:y.types.optional(y.types.array(Ut),[]),current:y.types.optional(y.types.array(Ut),[]),values:y.types.optional(y.types.frozen(),{})}).views(t=>({get changed(){return!O.default.isEqual(t.original,t.current)},get firstID(){if(t.current.length!==0)return t.current[0].id},get inOrder(){return O.default.sortBy(t.current,"order")},get empty(){return t.current.length===0},visibleInView(e){return O.default.sortBy(t.current.filter(n=>n.visibleInViewsIDs.includes(e)),"order")}})).actions(t=>({reset(){t.current=O.default.cloneDeep(t.original)},replace(e){t.current=y.cast(e)},append(e){t.current.push(e)},remove(e){t.current.splice(e,1)},setValues(e){t.values=e},setValueByKey(e,n){t.values[e]=n},getValueByKey(e){return t.values[e]}}));function mc(t){return t===void 0?t:Array.isArray(t)?t.map(e=>{const n=new Date(e);return n!=null?n:e}):t}function zr(t){const e=t.reduce((n,i)=>(n[i.key]=mc(i.config.default_value),n),{});return{original:t,current:t,values:e}}var Xt={exports:{}};(function(t,e){(function(n,i){i()})(ze,function(){function n(h,f){return typeof f>"u"?f={autoBom:!1}:typeof f!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),f={autoBom:!f}),f.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(h.type)?new Blob(["\uFEFF",h],{type:h.type}):h}function i(h,f,m){var g=new XMLHttpRequest;g.open("GET",h),g.responseType="blob",g.onload=function(){d(g.response,f,m)},g.onerror=function(){console.error("could not download file")},g.send()}function s(h){var f=new XMLHttpRequest;f.open("HEAD",h,!1);try{f.send()}catch{}return 200<=f.status&&299>=f.status}function l(h){try{h.dispatchEvent(new MouseEvent("click"))}catch{var f=document.createEvent("MouseEvents");f.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),h.dispatchEvent(f)}}var o=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof ze=="object"&&ze.global===ze?ze:void 0,u=o.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),d=o.saveAs||(typeof window!="object"||window!==o?function(){}:"download"in HTMLAnchorElement.prototype&&!u?function(h,f,m){var g=o.URL||o.webkitURL,v=document.createElement("a");f=f||h.name||"download",v.download=f,v.rel="noopener",typeof h=="string"?(v.href=h,v.origin===location.origin?l(v):s(v.href)?i(h,f,m):l(v,v.target="_blank")):(v.href=g.createObjectURL(h),setTimeout(function(){g.revokeObjectURL(v.href)},4e4),setTimeout(function(){l(v)},0))}:"msSaveOrOpenBlob"in navigator?function(h,f,m){if(f=f||h.name||"download",typeof h!="string")navigator.msSaveOrOpenBlob(n(h,m),f);else if(s(h))i(h,f,m);else{var g=document.createElement("a");g.href=h,g.target="_blank",setTimeout(function(){l(g)})}}:function(h,f,m,g){if(g=g||open("","_blank"),g&&(g.document.title=g.document.body.innerText="downloading..."),typeof h=="string")return i(h,f,m);var v=h.type==="application/octet-stream",_=/constructor/i.test(o.HTMLElement)||o.safari,k=/CriOS\/[\d]+/.test(navigator.userAgent);if((k||v&&_||u)&&typeof FileReader<"u"){var E=new FileReader;E.onloadend=function(){var ue=E.result;ue=k?ue:ue.replace(/^data:[^;]*;/,"data:attachment/file;"),g?g.location.href=ue:location=ue,g=null},E.readAsDataURL(h)}else{var L=o.URL||o.webkitURL,B=L.createObjectURL(h);g?g.location=B:location.href=B,g=null,setTimeout(function(){L.revokeObjectURL(B)},4e4)}});o.saveAs=d.saveAs=d,t.exports=d})})(Xt);function yc(t,e){const n=new Blob([e],{type:"text/csv"});Xt.exports.saveAs(n,`${t}.csv`)}function vc(t){const e=new Ii.default;t.forEach(({id:n,data:i})=>{e.file(`${n}.csv`,Or(i))}),e.generateAsync({type:"blob"}).then(n=>{Xt.exports.saveAs(n,"dashboard_data.zip")})}function Or(t){if(!Array.isArray(t)||t.length===0)return"";const e=[],n=Object.keys(t[0]);return e.push(n.join(",")),t.forEach(i=>{const s=Object.values(i).join(",");e.push(s)}),e.join(`
70
70
  `)}const Fr=y.types.model("QueryModel",{id:y.types.string,type:y.types.enumeration("DataSourceType",[pe.Postgresql,pe.MySQL,pe.HTTP]),key:y.types.string,sql:y.types.string}).views(t=>({get valid(){return t.id&&t.type&&t.key&&t.sql},get configurations(){const{id:e,type:n,key:i,sql:s}=t;return{id:e,type:n,key:i,sql:s}}})),qr=y.types.compose("QueryModel",Fr,y.types.model({state:y.types.optional(y.types.enumeration(["idle","loading","error"]),"idle"),data:y.types.optional(y.types.array(y.types.frozen()),[]),error:y.types.frozen()})).views(t=>({get formattedSQL(){const{context:e,sqlSnippets:n,filterValues:i}=y.getRoot(t).payloadForSQL;return bn(t.sql,e,n,i)}})).actions(t=>({setID(e){t.id=e},setKey(e){t.key=e},setType(e){t.type=e},setSQL(e){t.sql=e},fetchData:y.flow(function*(){if(!!t.valid){t.state="loading";try{const e=t.id,{context:n,sqlSnippets:i,filterValues:s}=y.getRoot(t).payloadForSQL;t.data=yield*y.toGenerator(Mi({context:n,sqlSnippets:i,title:e,query:{type:t.type,key:t.key,sql:t.sql},filterValues:s})),t.state="idle"}catch(e){console.error(e),t.error=e,t.state="error"}}})})).actions(t=>({afterCreate(){y.addDisposer(t,J.reaction(()=>`${t.id}--${t.key}--${t.type}--${t.formattedSQL}`,t.fetchData,{fireImmediately:!0,delay:500}))}})),Gr=y.types.model("QueriesModel",{original:y.types.optional(y.types.array(Fr),[]),current:y.types.optional(y.types.array(qr),[])}).views(t=>({get changed(){return t.original.length!==t.current.length?!0:t.original.some((e,n)=>!O.default.isEqual(e.configurations,t.current[n].configurations))},get firstID(){if(t.current.length!==0)return t.current[0].id},findByID(e){return t.current.find(n=>n.id===e)},get options(){return t.current.map(e=>({value:e.id,label:e.id}))}})).actions(t=>({reset(){const e=t.original.map(n=>({...n,state:"idle",data:[],error:null}));t.current.length=0,t.current.unshift(...e)},replace(e){t.current=y.cast(e)},append(e){t.current.push(e)},remove(e){t.current.splice(e,1)},replaceByIndex(e,n){t.current.splice(e,1,n)},downloadAllData(){const e=t.current.map(({id:n,data:i})=>({id:n,data:i.toJSON()}));vc(e)},downloadDataByQueryID(e){const n=t.findByID(e);if(!n){console.log(`[downloadDataByQueryID] query by ID[${e}] not found`);return}const{id:i,data:s}=n,l=Or(s);yc(i,l)},refetchDataByQueryID(e){const n=t.findByID(e);if(!n){console.error(new Error(`[downloadDataByQueryID] query by ID[${e}] not found`));return}return n.fetchData()}})),Jt=y.types.model("SQLSnippetModel",{key:y.types.string,value:y.types.string}).actions(t=>({setKey(e){t.key=e},setValue(e){t.value=e}})),Br=y.types.model("SQLSnippetsModel",{original:y.types.optional(y.types.array(Jt),[]),current:y.types.optional(y.types.array(Jt),[])}).views(t=>({get changed(){return!O.default.isEqual(t.original,t.current)}})).actions(t=>({reset(){t.current=O.default.cloneDeep(t.original)},replace(e){t.current=y.cast(e)},append(e){t.current.push(e)},remove(e){t.current.splice(e,1)},replaceByIndex(e,n){t.current.splice(e,1,n)}})),Lr=y.types.model("ContextModel",{current:y.types.optional(y.types.frozen(),{})}).views(t=>({get keys(){return Object.keys(t.current)},get entries(){return Object.entries(t.current)}})).actions(t=>({replace(e){t.current=e},get(e){return t.current[e]},set(e,n){t.current[e]=n}})),bc=y.types.model("PanelLayoutModel",{x:y.types.number,y:y.types.number,w:y.types.number,h:y.types.number,moved:y.types.optional(y.types.boolean,!1),static:y.types.optional(y.types.boolean,!1)}).views(t=>({get json(){const{x:e,y:n,w:i,h:s,moved:l}=t;return{x:e,y:n,w:i,h:s,moved:l,static:t.static}}})).actions(t=>({set(e){const{x:n,y:i,w:s,h:l,moved:o}=e;t.x=n,t.y=i,t.w=s,t.h=l,t.moved=!!o,t.static=!!e.static}})),xc=y.types.model("PanelStyleBorderModel",{enabled:y.types.boolean}).views(t=>({get json(){const{enabled:e}=t;return{enabled:e}}})).actions(t=>({setEnabled(e){t.enabled=e}})),Cc=y.types.model("PanelStyleModel",{border:xc}).views(t=>({get json(){const{border:e}=t;return{border:e.json}}})).actions(t=>({})),wc=y.types.model("PanelVizModel",{type:y.types.string,conf:y.types.frozen()}).views(t=>({get json(){return{type:t.type,conf:t.conf}}})).actions(t=>({setType(e){t.type=e},setConf(e){t.conf=e}})),Sc=y.types.model({id:y.types.string,title:y.types.string,description:y.types.string,layout:bc,queryID:y.types.string,viz:wc,style:Cc}).views(t=>({get json(){const{id:e,title:n,description:i,queryID:s}=t;return{id:e,title:n,description:i,layout:t.layout.json,queryID:s,viz:t.viz.json,style:t.style.json}}})).actions(t=>({setID(e){t.id=e},setTitle(e){t.title=e},setDescription(e){t.description=e},setQueryID(e){t.queryID=e}})).actions(t=>({})),Ic=y.types.model("PanelsModel",{list:y.types.optional(y.types.array(Sc),[])}).views(t=>({get json(){return t.list.map(e=>e.json)},get layouts(){return t.list.map(e=>({...e.layout.json,i:e.id}))},findByID(e){return t.list.find(n=>n.id===e)}})).actions(t=>({replace(e){t.list=y.cast(e)},addANewPanel(){const e=U.randomId();t.list.push({id:e,layout:{x:0,y:1/0,w:3,h:15},title:`Panel - ${e}`,description:"<p><br></p>",queryID:"",viz:{type:Ft.name,conf:Ft.createConfig()},style:{border:{enabled:!0}}})},append(e){t.list.push(e)},remove(e){t.list.splice(e,1)},removeByID(e){const n=t.list.findIndex(i=>i.id===e);n!==-1&&t.list.splice(n,1)},duplicateByID(e){const n=t.list.find(i=>i.id===e);if(!n){console.error(new Error(`[duplicate panel] Can't find a panel by id[${e}]`));return}t.list.push({...n.json,id:U.randomId(),layout:{...n.layout,x:0,y:1/0,moved:!1}})},replaceByIndex(e,n){t.list.splice(e,1,n)}})),Kt=y.types.model({id:y.types.identifier,name:y.types.string,type:y.types.string,config:y.types.frozen(),panels:Ic}).views(t=>({get json(){const{id:e,name:n,type:i,config:s}=t;return{id:e,name:n,type:i,config:s,panels:t.panels.json}}})).actions(t=>({setName(e){t.name=e},setType(e){t.type!==e&&(e===fe.Modal?t.config={width:"600px",height:"400px"}:t.config={},t.type=e)},setConfig(e){t.config=e},updateConfig(e,n){t.config={...t.config,[e]:n}}})).actions(t=>({})),Zt=y.types.model("ViewsModel",{original:y.types.optional(y.types.array(Kt),[]),current:y.types.optional(y.types.array(Kt),[]),visibleViewIDs:y.types.array(y.types.string),idOfVIE:y.types.string}).views(t=>({get changed(){return t.original.length!==t.current.length?!0:t.original.some((e,n)=>!O.default.isEqual(e.json,t.current[n].json))},get json(){return t.current.map(e=>e.json)},findByID(e){return t.current.find(n=>n.id===e)},get isVIETheFirstView(){return t.current.length===0||!t.idOfVIE?!1:t.current[0].id===t.idOfVIE},get firstVisibleView(){const[e]=t.visibleViewIDs;return t.current.find(({id:n})=>n===e)},get visibleViews(){const e=new Set(t.visibleViewIDs);return t.current.filter(({id:n})=>e.has(n))},get VIE(){return t.current.find(({id:e})=>e===t.idOfVIE)},get options(){return t.current.map(e=>({label:e.name,value:e.id,type:e.type}))}})).actions(t=>({reset(){const e=t.original.map(n=>({...n.json,panels:{list:n.panels.json}}));t.current.length=0,t.current.unshift(...e)},replace(e){t.current=y.cast(e)},addANewView(e,n,i){t.current.push({id:e,name:e,type:n,config:i,panels:{list:[]}})},append(e){t.current.push(e)},remove(e){t.current.splice(e,1)},removeByID(e){const n=t.current.findIndex(i=>i.id===e);n!==-1&&t.current.splice(n,1)},replaceByIndex(e,n){t.current.splice(e,1,n)},setIDOfVIE(e){t.idOfVIE=e,t.visibleViewIDs.length=0,t.visibleViewIDs.push(e)},addAPanelToVIE(){var e;(e=t.VIE)==null||e.panels.addANewPanel()}})).actions(t=>({addARandomNewView(){const e=U.randomId();t.addANewView(e,fe.Division,{}),t.setIDOfVIE(e)},removeVIE(){t.current.length!==1&&(t.removeByID(t.idOfVIE),t.setIDOfVIE(t.current[0].id))},rmVisibleViewID(e){const n=t.visibleViewIDs.findIndex(i=>i===e);n!==-1&&t.visibleViewIDs.splice(n,1)}}));function Rr(t){const e=t.length>0?[t[0].id]:[],n=t.length>0?t[0].id:"",i=t.map(s=>({...s,panels:{list:s.panels}}));return Zt.create({original:i,current:i,visibleViewIDs:e,idOfVIE:n})}const Dc=y.types.model({id:y.types.identifier,name:y.types.string,filters:Pr,queries:Gr,sqlSnippets:Br,views:Zt,context:Lr}).views(t=>({get payloadForSQL(){return{context:t.context.current,sqlSnippets:t.sqlSnippets.current,filterValues:t.filters.values}},get data(){return t.queries.current.map(({id:n,data:i})=>({id:n,data:i})).reduce((n,i)=>(n[i.id]=i.data,n),{})},getDataStuffByID(e){const n=t.queries.findByID(e);return n?{data:n.data.toJSON(),state:n.state,error:void 0}:{data:[],state:"idle",error:void 0}},getDataStateByID(e){var n,i;return(i=(n=t.queries.findByID(e))==null?void 0:n.state)!=null?i:[]},getDataErrorByID(e){var n,i;return(i=(n=t.queries.findByID(e))==null?void 0:n.error)!=null?i:[]}}));function Ht({id:t,name:e,filters:n,views:i,definition:{queries:s,sqlSnippets:l}},o){return Dc.create({id:t,name:e,filters:zr(n),queries:{original:s,current:s},sqlSnippets:{original:l,current:l},context:o,views:Rr(i)})}const ud="",Tc=A.observer(function({context:e,dashboard:n,update:i,className:s="dashboard",config:l}){De.baseURL!==l.apiBaseURL&&(De.baseURL=l.apiBaseURL);const[o,u]=b.default.useState(!1),d=b.default.useMemo(()=>Ht(n,e),[n]);b.default.useEffect(()=>{d.context.replace(e)},[e]);const h=async()=>{const m=[...d.queries.current],g=[...d.sqlSnippets.current],v=[...d.views.json],_={...n,filters:[...d.filters.current],views:v,definition:{sqlSnippets:g,queries:m}};await i(_)},f=R.useCreation(vr,[]);return r(he.ModalsProvider,{children:r(vt,{value:d,children:r(le.Provider,{value:{layoutFrozen:o,freezeLayout:u,inEditMode:!0,inUseMode:!1},children:r(a.Box,{className:`${s} dashboard-root`,sx:{position:"relative"},children:r(ge.Provider,{value:f,children:d.views.visibleViews.map(m=>r(Tr,{view:m,saveDashboardChanges:h},m.id))})})})})})});function _c({context:t,dashboard:e,className:n="dashboard",config:i}){De.baseURL!==i.apiBaseURL&&(De.baseURL=i.apiBaseURL);const s=b.default.useMemo(()=>Ht(e,t),[e]);return b.default.useEffect(()=>{s.context.replace(t)},[t]),r(he.ModalsProvider,{children:r(vt,{value:s,children:r(le.Provider,{value:{layoutFrozen:!0,freezeLayout:O.default.noop,inEditMode:!1,inUseMode:!0},children:r(a.Box,{className:`${n} dashboard-root dashboard-sticky-parent`,children:s.views.visibleViews.map(l=>r(_r,{view:l},l.id))})})})})}D.ContextModel=Lr,D.Dashboard=Tc,D.DashboardFilterType=Pn,D.DashboardMode=Vn,D.EViewComponentType=fe,D.FilterModel=Ut,D.FiltersModel=Pr,D.LayoutStateContext=le,D.MainDashboardView=Tr,D.ModelContextProvider=vt,D.Panel=at,D.PanelContextProvider=Sn,D.QueriesModel=Gr,D.QueryModel=qr,D.ReadOnlyDashboard=_c,D.ReadOnlyDashboardView=_r,D.SQLSnippetModel=Jt,D.SQLSnippetsModel=Br,D.ViewModel=Kt,D.ViewsModel=Zt,D.createDashboardModel=Ht,D.createDashboardViewsModel=Rr,D.getInitialFiltersPayload=zr,D.useModelContext=Q,D.usePanelContext=K,Object.defineProperties(D,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devtable/dashboard",
3
- "version": "4.16.1",
3
+ "version": "4.16.2",
4
4
  "license": "Apache-2.0",
5
5
  "publishConfig": {
6
6
  "access": "public",