@devtable/dashboard 9.18.3 → 9.18.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dashboard.es.js +2 -13
- package/dist/dashboard.umd.js +2 -2
- package/package.json +1 -1
package/dist/dashboard.es.js
CHANGED
|
@@ -3008,7 +3008,7 @@ class Ui {
|
|
|
3008
3008
|
}), this.instanceRegistry.clear(), this.factoryRegistry.clear();
|
|
3009
3009
|
}
|
|
3010
3010
|
}
|
|
3011
|
-
const Gs = "@devtable/dashboard", Xi = "9.18.
|
|
3011
|
+
const Gs = "@devtable/dashboard", Xi = "9.18.4", Hs = "Apache-2.0", Qs = {
|
|
3012
3012
|
access: "public",
|
|
3013
3013
|
registry: "https://registry.npmjs.org/"
|
|
3014
3014
|
}, Us = [
|
|
@@ -16994,18 +16994,7 @@ const Rw = pn((e) => ({
|
|
|
16994
16994
|
position: "sticky",
|
|
16995
16995
|
top: 24,
|
|
16996
16996
|
transform: "translateY(-1px)",
|
|
16997
|
-
zIndex: 10
|
|
16998
|
-
"&::after": {
|
|
16999
|
-
content: '" "',
|
|
17000
|
-
display: "block",
|
|
17001
|
-
background: "white",
|
|
17002
|
-
position: "absolute",
|
|
17003
|
-
left: 0,
|
|
17004
|
-
right: 0,
|
|
17005
|
-
top: 0,
|
|
17006
|
-
bottom: 0,
|
|
17007
|
-
zIndex: -1
|
|
17008
|
-
}
|
|
16997
|
+
zIndex: 10
|
|
17009
16998
|
},
|
|
17010
16999
|
info_bar: {
|
|
17011
17000
|
position: "sticky",
|
package/dist/dashboard.umd.js
CHANGED
|
@@ -116,7 +116,7 @@ Check the top-level render call using <`+E+">.")}return M}}function oo(_,M){{if(
|
|
|
116
116
|
SELECT count(*) AS total
|
|
117
117
|
FROM ${r}.${t}
|
|
118
118
|
`}})).actions(e=>({setPage(t){e.page=t},resetPage(){e.page=1},setLimit(t){e.limit=t}})).actions(e=>({afterCreate(){b.addDisposer(e,ie.reaction(()=>e.keywordString,e.resetPage,{fireImmediately:!1,delay:0})),b.addDisposer(e,ie.reaction(()=>e.limit,e.resetPage,{fireImmediately:!1,delay:0}))}})),al=b.types.model("DataSourceModel",{id:b.types.string,type:b.types.enumeration("DataSourceType",[pe.HTTP,pe.MySQL,pe.Postgresql]),key:b.types.string,config:b.types.frozen(),tables:b.types.optional(rl,{}),columns:b.types.optional(tl,{}),tableData:b.types.optional(il,{}),indexes:b.types.optional(nl,{}),table_schema:b.types.optional(b.types.string,""),table_name:b.types.optional(b.types.string,"")}).volatile(()=>({controllers:{tables:new AbortController,columns:new AbortController,indexes:new AbortController,tableData:new AbortController}})).actions(e=>({setKeywords(t,r){e.table_schema=t,e.table_name=r}})).actions(e=>({initKeywords(){if(e.tables.empty)return;const t=Object.keys(e.tables.data)[0],r=e.tables.data[t][0].table_name;e.setKeywords(t,r)}})).actions(e=>{const t=b.flow(function*(){var r;(r=e.controllers.tables)==null||r.abort(),e.controllers.tables=new AbortController,e.tables.state="loading";try{const i=yield*b.toGenerator($e.query(e.controllers.tables.signal)({type:e.type,key:e.key,query:e.tables.sql},{}));e.tables.data=v.groupBy(i,"table_schema"),e.tables.state="idle",e.tables.error=null,e.initKeywords()}catch(i){if(!Xe.isCancel(i)){e.tables.data={};const s=v.get(i,"message","unkown error");e.tables.error=v.get(i,"response.data.detail.message",s),e.tables.state="error"}}});return{loadTables:t,loadTablesIfEmpty(){e.tables.empty&&t()},loadColumns:b.flow(function*(){var r;(r=e.controllers.columns)==null||r.abort(),e.controllers.columns=new AbortController,e.columns.state="loading";try{e.columns.data=yield*b.toGenerator($e.query(e.controllers.columns.signal)({type:e.type,key:e.key,query:e.columns.sql},{})),e.columns.state="idle",e.columns.error=null}catch(i){if(Xe.isCancel(i))e.columns.state="idle",e.columns.error=null;else{e.columns.data=[];const s=v.get(i,"message","unkown error");e.columns.error=v.get(i,"response.data.detail.message",s),e.columns.state="error"}}}),loadIndexes:b.flow(function*(){var r;(r=e.controllers.indexes)==null||r.abort(),e.controllers.indexes=new AbortController,e.indexes.state="loading";try{e.indexes.data=yield*b.toGenerator($e.query(e.controllers.indexes.signal)({type:e.type,key:e.key,query:e.indexes.sql},{})),e.indexes.state="idle",e.indexes.error=null}catch(i){if(Xe.isCancel(i))e.indexes.state="idle",e.indexes.error=null;else{e.indexes.data=[];const s=v.get(i,"message","unkown error");e.indexes.error=v.get(i,"response.data.detail.message",s),e.indexes.state="error"}}}),loadTableData:b.flow(function*(){var i;(i=e.controllers.tableData)==null||i.abort(),e.controllers.tableData=new AbortController;const r=e.tableData;r.state="loading";try{r.data=yield*b.toGenerator($e.query(e.controllers.tableData.signal)({type:e.type,key:e.key,query:r.sql},{}));const[{total:s}]=yield*b.toGenerator($e.query(e.controllers.tableData.signal)({type:e.type,key:e.key,query:r.countSql},{}));r.total=Number(s),r.state="idle",r.error=null}catch(s){if(Xe.isCancel(s))r.state="idle",r.error=null;else{r.data=[];const o=v.get(s,"message","unkown error");r.error=v.get(s,"response.data.detail.message",o),r.state="error"}}})}}).actions(e=>({afterCreate(){b.addDisposer(e,ie.reaction(()=>e.columns.sql,e.loadColumns,{fireImmediately:!1,delay:500}))}})).actions(e=>({afterCreate(){b.addDisposer(e,ie.reaction(()=>e.indexes.sql,e.loadIndexes,{fireImmediately:!1,delay:500})),b.addDisposer(e,ie.reaction(()=>e.tableData.sql,e.loadTableData,{fireImmediately:!1,delay:0}))}})),sl=b.types.model("DataSourcesModel",{list:b.types.optional(b.types.array(al),[])}).views(e=>({find({type:t,key:r}){return e.list.find(i=>i.key===r&&i.type===t)},get options(){return e.list.map(t=>({value:t.key,label:t.key}))}})).actions(e=>({replace(t){e.list.length=0,e.list.push(...t)}}));function qt(e){return{label:e,value:e,_type:"ACTION",_action_type:e,Icon:null,children:null}}function ol(e){switch(e._type){case"GROUP":case"ACTION":return null;case"query_variables":return["_QUERY_VARS_"];case"mock_context":return["_MOCK_CONTEXT_"];case"filter":return["_FILTERS_",e.value];case"sql_snippet":return["_SQL_SNIPPETS_",e.value];case"query":return["_QUERIES_",e.value];case"view":return["_VIEWS_",e.value];case"panel":return e.parentID?["_VIEWS_",e.parentID,"_PANELS_",e.value]:(console.error("[getPathFromOption] parentID is required"),null)}}const ll=b.types.model("EditorModel",{path:b.types.optional(b.types.frozen(),[]),settings_open:b.types.optional(b.types.boolean,!1)}).views(e=>({get navOptions(){const{content:t}=b.getRoot(e),{filters:r,views:i,sqlSnippets:s,queries:o}=t;return[{label:"Query Variables",value:"_QUERY_VARS_",_type:"query_variables",Icon:L.IconVariable},{label:"Mock Context",value:"_MOCK_CONTEXT_",Icon:L.IconCodeDots,_type:"mock_context"},{label:"Filters",value:"_FILTERS_",Icon:L.IconFilter,children:[...r.options,qt("_Add_A_Filter_")],_type:"GROUP"},{label:"SQL Snippets",value:"_SQL_SNIPPETS_",Icon:L.IconCopy,children:[...s.options,qt("_Add_A_SQL_SNIPPET_")],_type:"GROUP"},{label:"Queries",value:"_QUERIES_",Icon:L.IconDatabase,children:[...o.options,qt("_Add_A_QUERY_")],_type:"GROUP"},{label:"Views",value:"_VIEWS_",Icon:L.IconBoxMultiple,children:[...i.editorOptions,qt("_Add_A_VIEW_")],_type:"GROUP"}]},isOptionActive(t,r){return t.length===0?!1:t[t.length-1]===r.value},isOptionOpened(t){const{path:r}=e;return r.length===0||!t.children||t.children.length===0?!1:r.includes(t.value)}})).actions(e=>({setPath(t){e.path=t},setSettingsOpen(t){e.settings_open=t}})).actions(e=>({open(t){e.setPath(t),e.setSettingsOpen(!0)},close(){e.setSettingsOpen(!1)},navigate(t){const r=ol(t);r&&e.setPath(r)}})),ul=b.types.model("MockContextModel",{current:b.types.optional(b.types.frozen(),{})}).views(e=>({get keys(){return Object.keys(e.current)},get entries(){return Object.entries(e.current)}})).actions(e=>({replace(t){e.current=t},get(t){return e.current[t]},set(t,r){e.current[t]=r}})),dl=b.types.model("VariableModel",{name:b.types.string,size:b.types.string,weight:b.types.string,color:b.types.union(b.types.model({type:b.types.literal("static"),staticColor:b.types.string}),b.types.model({type:b.types.literal("continuous"),valueRange:b.types.array(b.types.number),colorRange:b.types.array(b.types.string)}),b.types.model({type:b.types.literal("piecewise")})),formatter:b.types.model({output:b.types.enumeration("Output",["number","percent"]),average:b.types.optional(b.types.boolean,!1),mantissa:b.types.number,trimMantissa:b.types.optional(b.types.boolean,!1)}),data_field:b.types.string,aggregation:b.types.union(b.types.model({type:b.types.enumeration(["none","sum","mean","median","min","max","CV","std"]),config:b.types.frozen()}),b.types.model({type:b.types.literal("quantile"),config:b.types.model({p:b.types.number})}))}).views(e=>({get json(){const{name:t,size:r,weight:i,color:s,formatter:o,data_field:l,aggregation:u}=e;return v.cloneDeep({name:t,size:r,color:s,weight:i,formatter:o,data_field:l,aggregation:u})}}));class cl{constructor(t){O(this,"origin");O(this,"copy");this.origin=t,this.copy=b.clone(t),ie.makeAutoObservable(this,{},{autoBind:!0,deep:!1})}get changed(){return!v.isEqual(b.getSnapshot(this.origin),b.getSnapshot(this.copy))}commit(){b.applySnapshot(this.origin,b.getSnapshot(this.copy))}update(t){b.applySnapshot(this.copy,t)}}const pl=e=>new cl(e);class hl{constructor(){O(this,"migrations",[])}version(t,r){return this.migrations.push({version:t,handler:r}),this}run(t,r,i){var l;if(t.from===t.to)return r;if(t.from>t.to)throw new Error(`Can not downgrade from version '${t.from}' to (${t.to})`);const s=this.migrations.filter(u=>u.version>t.from&&u.version<=t.to),o=v.orderBy(s,"version","asc");if(((l=v.last(o))==null?void 0:l.version)!==t.to)throw new Error(`Migration to version ${t.to} not found`);return o.reduce((u,d)=>d.handler(u,i),r)}}class fe extends hl{constructor(){super(),this.configVersions()}version(t,r){return super.version(t,(i,s)=>({version:t,...r(i,s)}))}async migrate({configData:t,panelModel:r}){const i=await t.getItem(null),s=v.get(i,"version",0),o=this.run({from:s,to:this.VERSION},i,{panelModel:r});await t.setItem(null,o)}async needMigration({configData:t}){const r=await t.getItem(null);return v.get(r,"version",0)<this.VERSION}}var Oe=(e=>(e.string="string",e.number="number",e.eloc="eloc",e.percentage="percentage",e.custom="custom",e))(Oe||{});const na=["function text({ value }) {"," // your code goes here"," return value","}"].join(`
|
|
119
|
-
`),_n={columns:[],fontSize:"1rem",highlightOnHover:!1,horizontalSpacing:"1em",id_field:"",striped:!1,use_raw_columns:!0,verticalSpacing:"1em"};class ut{constructor(t,r){this.root=t,this.path=r}async deleteItem(t){t===null&&await this.root.deleteItem(this.path);const r=await this.root.getItem(this.path)||{};await this.root.setItem(this.path,v.omit(r,t))}async getItem(t){const r=await this.root.getItem(this.path);return t===null?r:v.get(r,t)}async setItem(t,r){if(t===null)await this.root.setItem(this.path,r);else{const i=await this.root.getItem(this.path)||{};await this.root.setItem(this.path,{...i,[t]:r})}return await this.getItem(t)}watchItem(t,r,i){return t===null?this.root.watchItem(this.path,(s,o)=>{r(s,o)},i):this.root.watchItem(this.path,(s,o)=>{const l=v.get(s,t),u=v.get(o,t);l!==u&&r(l,u)},i)}}class Sn{constructor(t,r,i){O(this,"attachmentStorage");this.instance=t,this.attachmentKey=r,this.constructInstance=i,this.attachmentStorage=new ut(t.instanceData,r)}async getInstance(t){if(await this.attachmentStorage.getItem(t))return this.constructInstance(new ut(this.attachmentStorage,t))}async create(t,r){return await this.attachmentStorage.setItem(t,r),this.constructInstance(new ut(this.attachmentStorage,t))}async remove(t){await this.attachmentStorage.deleteItem(t)}async list(){const t=await this.attachmentStorage.getItem(null);return Promise.all(v.values(t).map(r=>this.constructInstance(new ut(this.attachmentStorage,r.id))))}}class ra{constructor(t){O(this,"rootRef");this.rootRef=ie.observable({current:t})}async deleteItem(t){ie.runInAction(()=>{v.unset(this.rootRef.current,[t])})}getItem(t){const r=this.getValueFromRoot(t);return Promise.resolve(r)}getValueFromRoot(t){return t===null?ie.toJS(this.rootRef.current):v.get(this.rootRef.current,[t])}setItem(t,r){if(t===null)if(v.isObject(r))ie.runInAction(()=>{this.rootRef.current=r});else throw new Error("Cannot set root value to non-object");else ie.runInAction(()=>{v.set(this.rootRef.current,[t],r)});return Promise.resolve(this.getItem(t))}watchItem(t,r,i){return ie.reaction(()=>this.getValueFromRoot(t),(s,o)=>{r(s,o)},{requiresObservable:!0,fireImmediately:v.get(i,"fireImmediately",!1)})}}class fl{constructor(){O(this,"channels",new Map);O(this,"globalChannel",new hi)}getChannel(t){const r=this.channels.get(t);if(r)return r;const i=new hi;return this.channels.set(t,i),i}}class gl{constructor(t){O(this,"instances",new Map);this.pluginManager=t}get availableVizList(){return this.pluginManager.installedPlugins.flatMap(t=>t.manifest.viz)}resolveComponent(t){return this.pluginManager.factory.viz(t)}getOrCreateInstance(t){const r=this.instances.get(t.id);if(r)return r;const i={id:t.id,name:t.viz.type,type:t.viz.type,messageChannels:new fl,instanceData:new ra(t.viz.conf)};return this.instances.set(t.id,i),i}}function ia(e,t,r,i){return{vizManager:r,locale:"zh",msgChannels:e.messageChannels,instanceData:e.instanceData,pluginData:new ra({}),colorPalette:{getColor(){return()=>""}},data:t,variables:i}}const ml=e=>{const{panel:t,vizManager:r,data:i,variables:s}=e,o=r.resolveComponent(t.viz.type),l=r.getOrCreateInstance(t),u={...ia(l,i,r,s),viewport:{width:t.layout.w,height:t.layout.h}},d=o.viewRender;return n(d,{context:u,instance:l,...v.omit(e,["panel","vizManager","data"])})},bl=e=>{const{vizManager:t,panel:r,panelInfoEditor:i,data:s,variables:o}=e,l=t.resolveComponent(r.viz.type),u=t.getOrCreateInstance(r),d={...ia(u,s,t,o),panelInfoEditor:i},p=l.configRender;return n(p,{context:d,instance:u,...v.omit(e,["panel","vizManager","data","panelInfoEditor"])})},aa=(e,t)=>{const r=je.bezier(e),i=je.bezier(t);return function(s){return s<50?r(s*2/100).hex():i((s-50)*2/100).hex()}},Ft=e=>{const t=je.bezier(e);return function(r){return t(r/100).hex()}},yl={type:"interpolation",displayName:"Red / Green",getColor:aa(["darkred","deeppink","lightyellow"],["lightyellow","lightgreen","teal"]),name:"red-green",category:"diverging"},vl={type:"interpolation",displayName:"Yellow / Blue",getColor:aa(["#8f531d","#ffd347","#e3efe3"],["#eefaee","#4ecbbf","#003f94"]),name:"yellow-blue",category:"diverging"},xl={type:"interpolation",displayName:"Red",getColor:Ft(["#fff7f1","darkred"]),name:"red",category:"sequential"},Cl={type:"interpolation",displayName:"Green",getColor:Ft(["#f0ffed","darkgreen"]),name:"green",category:"sequential"},wl={type:"interpolation",displayName:"Blue",getColor:Ft(["#f9fcff","#48b3e9","darkblue"]),name:"blue",category:"sequential"},_l={type:"interpolation",displayName:"Orange",getColor:Ft(["#fff7f1","darkorange","#b60000"]),name:"orange",category:"sequential"};class Sl{constructor(t){O(this,"symbol");this.symbol=Symbol(t)}}function Ye(e){return new Sl(e)}class Tn{constructor(){O(this,"parent");O(this,"factoryRegistry",new Map);O(this,"instanceRegistry",new Map)}createScoped(){const t=new Tn;return t.parent=this,t}getRequired(t){return this.get(t)}get(t){if(this.instanceRegistry.has(t.symbol))return this.instanceRegistry.get(t.symbol);const r=this.factoryRegistry.get(t.symbol);if(r){const i=r(this);return this.instanceRegistry.set(t.symbol,i),i}if(this.parent)return this.parent.get(t)}provideFactory(t,r){return this.factoryRegistry.has(t.symbol)?console.warn(`Token ${t.symbol.toString()} is already registered`):this.factoryRegistry.set(t.symbol,r),this}provideValue(t,r){return this.factoryRegistry.has(t.symbol)?console.warn(`Token ${t.symbol.toString()} is already registered`):this.factoryRegistry.set(t.symbol,()=>r),this}dispose(){this.instanceRegistry.forEach(t=>{const r=v.get(t,"dispose");v.isFunction(r)&&r.bind(t)()}),this.instanceRegistry.clear(),this.factoryRegistry.clear()}}const sa="@devtable/dashboard",kn="9.18.3",oa="Apache-2.0",la={access:"public",registry:"https://registry.npmjs.org/"},ua=["dist"],da="./dist/dashboard.umd.js",ca="./dist/dashboard.es.js",pa="./dist/index.d.ts",ha={".":{import:"./dist/dashboard.es.js",require:"./dist/dashboard.umd.js"},"./dist/style.css":{import:"./dist/style.css",require:"./dist/style.css"}},fa={"dev-build":"tsc && vite build --watch",build:"tsc && vite build",preview:"vite preview",test:"vitest","test:ui":"vitest --ui",coverage:"vitest --coverage"},ga={"@monaco-editor/react":"4.4.6","@types/chroma-js":"^2.1.4","file-saver":"2.0.5",mathjs:"11.8.0","monaco-editor":"0.36.0","performant-array-to-tree":"1.11.0",popmotion:"^11.0.3","rc-select":"14.1.0","rc-tree-select":"5.5.5",reactflow:"^11.5.3"},ma={"@emotion/babel-plugin":"11.11.0","@faker-js/faker":"7.6.0","@mantine/core":"5.9.5","@mantine/dates":"5.9.5","@mantine/hooks":"5.9.5","@mantine/modals":"5.9.5","@mantine/notifications":"5.9.5","@mantine/prism":"5.9.5","@mantine/tiptap":"5.9.5","@tabler/icons":"1.119.0","@testing-library/cypress":"^9.0.0","@testing-library/jest-dom":"^5.16.4","@testing-library/react":"^13.3.0","@testing-library/react-hooks":"^8.0.1","@testing-library/user-event":"^14.3.0","@tiptap/extension-code-block-lowlight":"2.0.3","@tiptap/extension-color":"2.0.3","@tiptap/extension-highlight":"2.0.3","@tiptap/extension-link":"2.0.3","@tiptap/extension-placeholder":"2.0.3","@tiptap/extension-subscript":"2.0.3","@tiptap/extension-superscript":"2.0.3","@tiptap/extension-table":"2.0.3","@tiptap/extension-table-cell":"2.0.3","@tiptap/extension-table-header":"2.0.3","@tiptap/extension-table-row":"2.0.3","@tiptap/extension-text-align":"2.0.3","@tiptap/extension-text-style":"2.0.3","@tiptap/extension-underline":"2.0.3","@tiptap/pm":"2.0.3","@tiptap/react":"2.0.3","@tiptap/starter-kit":"2.0.3","@types/crypto-js":"v4.1.1","@types/d3-array":"3.0.4","@types/eventemitter2":"^4.1.0","@types/file-saver":"2.0.5","@types/lodash":"^4.14.182","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","@types/react-grid-layout":"^1.3.2",ahooks:"^3.3.11",ajv:"8.12.0",axios:"^0.27.2","crypto-js":"^4.1.1",cypress:"^12.9.0","cypress-wait-until":"^1.7.2",echarts:"^5.3.2","echarts-for-react":"^3.0.2","echarts-gl":"^2.0.9",jsdom:"^20.0.0","jsdom-testing-mocks":"^1.5.0",lodash:"^4.17.21",lowlight:"^2.8.0",numbro:"^2.3.6","prosemirror-commands":"^1.5.0","prosemirror-dropcursor":"^1.6.1","prosemirror-gapcursor":"^1.3.1","prosemirror-history":"^1.3.0","prosemirror-keymap":"^1.2.0","prosemirror-schema-list":"^1.2.2","react-grid-layout":"^1.3.4","react-hook-form":"^7.31.2","rollup-plugin-visualizer":"5.9.0","tabler-icons-react":"^1.48.0",typescript:"^4.6.3","vite-plugin-static-copy":"0.13.1"},ba={"@emotion/react":"11.10.6","@faker-js/faker":"7.6.0","@mantine/core":"5.9.5","@mantine/dates":"5.9.5","@mantine/hooks":"5.9.5","@mantine/modals":"5.9.5","@mantine/notifications":"5.9.5","@mantine/prism":"5.9.5","@mantine/tiptap":"5.9.5","@tabler/icons":"1.119.0","@tanstack/react-table":"^8.5.13","@tiptap/extension-code-block-lowlight":"2.0.3","@tiptap/extension-color":"2.0.3","@tiptap/extension-highlight":"2.0.3","@tiptap/extension-link":"2.0.3","@tiptap/extension-placeholder":"2.0.3","@tiptap/extension-subscript":"2.0.3","@tiptap/extension-superscript":"2.0.3","@tiptap/extension-table":"2.0.3","@tiptap/extension-table-cell":"2.0.3","@tiptap/extension-table-header":"2.0.3","@tiptap/extension-table-row":"2.0.3","@tiptap/extension-text-align":"2.0.3","@tiptap/extension-text-style":"2.0.3","@tiptap/extension-underline":"2.0.3","@tiptap/pm":"2.0.3","@tiptap/react":"2.0.3","@tiptap/starter-kit":"2.0.3",ahooks:"^3.3.11",axios:"^0.27.2","chroma-js":"^2.4.2","crypto-js":"^4.1.1","d3-array":"3.2.3","d3-regression":"1.3.10",dayjs:"1.11.7",echarts:"^5.3.2","echarts-for-react":"^3.0.2","echarts-gl":"^2.0.9",eventemitter2:"^6.4.6",jszip:"3.10.1",lodash:"^4.17.21",lowlight:"^2.8.0",mobx:"^6.6.1","mobx-react-lite":"^3.4.0","mobx-state-tree":"^5.1.5",numbro:"^2.3.6","prosemirror-commands":"^1.5.0","prosemirror-dropcursor":"^1.6.1","prosemirror-gapcursor":"^1.3.1","prosemirror-history":"^1.3.0","prosemirror-keymap":"^1.2.0","prosemirror-schema-list":"^1.2.2",react:"^16.8.0 || 17.x || 18.x","react-dom":"^16.8.0 || 17.x || 18.x","react-grid-layout":"^1.3.4","react-hook-form":"^7.31.2","react-router-dom":"^6.3.0","react-virtual":"^2.10.4","tabler-icons-react":"^1.48.0"},Tl=Object.freeze(Object.defineProperty({__proto__:null,default:{name:sa,version:kn,license:oa,publishConfig:la,files:ua,main:da,module:ca,types:pa,exports:ha,scripts:fa,dependencies:ga,devDependencies:ma,peerDependencies:ba},dependencies:ga,devDependencies:ma,exports:ha,files:ua,license:oa,main:da,module:ca,name:sa,peerDependencies:ba,publishConfig:la,scripts:fa,types:pa,version:kn},Symbol.toStringTag,{value:"Module"}));class kl{constructor(t){O(this,"staticColors",new Map);O(this,"interpolations",new Map);t.installedPlugins.forEach(r=>{r.manifest.color.forEach(i=>{this.register(i)})})}getStaticColors(){return Array.from(this.staticColors.values())}register(t){const r=this.encodeColor(t);t.type==="single"?(this.staticColors.has(r)&&console.warn(`the color '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`),this.staticColors.set(r,t)):t.type==="interpolation"&&(this.interpolations.has(r)&&console.warn(`the interpolation '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`,`the interpolation '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`),this.interpolations.set(r,t))}decodeStaticColor(t){return this.staticColors.get(t)}encodeColor(t){return`\${${t.category}}.{${t.name}}`}decodeInterpolation(t){return this.interpolations.get(t)}getColorInterpolations(){return Array.from(this.interpolations.values())}}class Dl{constructor(){O(this,"plugins",new Map);O(this,"vizComponents",new Map);O(this,"factory",{viz:t=>{const r=this.vizComponents.get(t);if(r)return r;throw new Error(`Viz Component (${t}) not found`)}})}install(t){if(this.plugins.has(t.id))throw new Error(`Plugin (${t.id}) has been installed before`);this.plugins.set(t.id,t);for(const r of t.manifest.viz){if(this.vizComponents.has(r.name))throw new Error(`Viz Component (${r.name}) has been installed before`);this.vizComponents.set(r.name,r)}}get installedPlugins(){return Array.from(this.plugins.values())}}const F=(e,t)=>{const[r,{setFalse:i}]=X.useBoolean(!0),[s,o]=m.useState();m.useEffect(()=>(e.getItem(t).then(u=>{o(u),i()}),e.watchItem(t,u=>{o(u)})));const l=m.useCallback(async u=>{await e.setItem(t,u),o(u)},[e,t]);return{loading:r,value:s,set:l}},Dn={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"}};le.use([G.GridComponent,G.VisualMapComponent,G.LegendComponent,G.TooltipComponent,Me.CanvasRenderer]);function Il({context:e}){const{value:t}=F(e.instanceData,"config"),r=e.data,{width:i,height:s}=e.viewport,{x_axis_data_key:o,y_axis_data_key:l,z_axis_data_key:u,xAxis3D:d,yAxis3D:p,zAxis3D:f}=v.defaults({},t,Dn),g=m.useMemo(()=>{const C=v.minBy(r,w=>w[u]);return v.get(C,u)},[r,u]),h=m.useMemo(()=>{const C=v.maxBy(r,w=>w[u]);return v.get(C,u)},[r,u]),y={tooltip:{},backgroundColor:"#fff",visualMap:{show:!0,dimension:2,min:g,max:h,inRange:{color:["#313695","#4575b4","#74add1","#abd9e9","#e0f3f8","#ffffbf","#fee090","#fdae61","#f46d43","#d73027","#a50026"]}},xAxis3D:d,yAxis3D:p,zAxis3D:f,grid3D:{viewControl:{projection:"orthographic",autoRotate:!1},light:{main:{shadow:!0,quality:"ultra",intensity:1.5}}},series:[{type:"bar3D",wireframe:{},data:r.map(C=>[C[o],C[l],C[u]])}]};return t?n(Ae,{echarts:le,option:y,style:{width:i,height:s},notMerge:!0,theme:"merico-light"}):null}function Ml({label:e,required:t,value:r,onChange:i,data:s,clearable:o=!1,sx:l,...u},d){const p=m.useMemo(()=>{if(!Array.isArray(s)||s.length===0)return[];const g=Object.keys(s[0]).map(h=>({label:h,value:h}));return o?g.concat([{label:"unset",value:""}]):g},[s]);return n(a.Select,{ref:d,label:e,data:p,value:r,onChange:i,required:t,sx:l,...u})}const W=m.forwardRef(Ml);function Al({context:e}){const{value:t,set:r}=F(e.instanceData,"config"),i=e.data,s=v.defaults({},t,Dn),{control:o,handleSubmit:l,reset:u}=x.useForm({defaultValues:s});return m.useEffect(()=>{u(s)},[t]),t?n(a.Stack,{spacing:"xs",children:c("form",{onSubmit:l(r),children:[n(a.Text,{children:"X Axis"}),c(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[n(x.Controller,{name:"x_axis_data_key",control:o,render:({field:d})=>n(W,{label:"Data Field",required:!0,data:i,...d})}),n(x.Controller,{name:"xAxis3D.name",control:o,render:({field:d})=>n(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...d})})]}),n(a.Text,{mt:"lg",children:"Y Axis"}),c(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[n(x.Controller,{name:"y_axis_data_key",control:o,render:({field:d})=>n(W,{label:"Data Field",required:!0,data:i,...d})}),n(x.Controller,{name:"yAxis3D.name",control:o,render:({field:d})=>n(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...d})})]}),n(a.Text,{mt:"lg",children:"Z Axis"}),c(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[n(x.Controller,{name:"z_axis_data_key",control:o,render:({field:d})=>n(W,{label:"Data Field",required:!0,data:i,...d})}),n(x.Controller,{name:"zAxis3D.name",control:o,render:({field:d})=>n(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...d})})]}),n(a.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"60%"},mx:"auto",children:c(a.Button,{color:"blue",type:"submit",children:[n(k.DeviceFloppy,{size:20}),n(a.Text,{ml:"md",children:"Save"})]})})]})}):null}class $l extends fe{constructor(){super(...arguments);O(this,"VERSION",1)}configVersions(){this.version(1,r=>({version:1,config:r}))}}const zl={displayName:"Bar Chart (3D)",displayGroup:"ECharts-based charts",migrator:new $l,name:"bar-3d",viewRender:Il,configRender:Al,createConfig(){return{version:1,config:v.cloneDeep(Dn)}}};class ke extends m.Component{constructor(t){super(t),this.state={error:null}}componentDidCatch(t){this.setState({error:t})}render(){var t;if(this.state.error){const r=()=>{this.setState({error:null})};return c(a.Box,{children:[n(a.Text,{size:"xs",children:(t=this.state.error)==null?void 0:t.message}),n(a.Button,{variant:"subtle",size:"xs",mx:"auto",compact:!0,sx:{display:"block"},onClick:r,children:"Retry"})]})}return this.props.children}}const Se={mantissa:0,output:"number",trimMantissa:!1,average:!1};function El({value:e,onChange:t},r){const i=u=>{t({...e,output:u})},s=u=>{const d=u===0?!1:e.trimMantissa;t({...e,mantissa:u,trimMantissa:d})},o=u=>{t({...e,trimMantissa:u.currentTarget.checked})},l=u=>{t({...e,average:u.currentTarget.checked})};return c(a.Stack,{ref:r,children:[c(a.Group,{grow:!0,children:[n(a.Select,{label:"Format",data:[{label:"1234",value:"number"},{label:"99%",value:"percent"}],value:e.output,onChange:i,sx:{flexGrow:1}}),n(a.Switch,{label:c(a.Stack,{spacing:0,children:[n(a.Text,{children:"Average"}),n(a.Text,{size:12,color:"gray",children:"like 1.234k, 1.234m"})]}),checked:e.average,onChange:l,disabled:e.output!=="number",sx:{flexGrow:1},styles:{root:{alignSelf:"flex-end"},body:{alignItems:"center"},label:{display:"block"}}})]}),c(a.Group,{grow:!0,children:[n(a.NumberInput,{label:"Mantissa",defaultValue:0,min:0,step:1,max:4,value:e.mantissa,onChange:s}),n(a.Switch,{label:"Trim mantissa",checked:e.trimMantissa,onChange:o,disabled:e.mantissa===0,styles:{root:{alignSelf:"flex-end"},body:{alignItems:"center"}}})]}),c(a.Stack,{spacing:0,children:[n(a.Text,{weight:"bold",children:"Preview"}),n(ke,{children:c(a.Group,{position:"apart",children:[c(a.Text,{size:12,color:"gray",children:["123456789 ",n(k.ArrowRight,{size:9})," ",H(123456789).format(e)]}),c(a.Text,{size:12,color:"gray",children:["1234 ",n(k.ArrowRight,{size:9})," ",H(1234).format(e)]}),c(a.Text,{size:12,color:"gray",children:["0.1234 ",n(k.ArrowRight,{size:9})," ",H(.1234).format(e)]})]})})]})]})}const Ve=m.forwardRef(El),Ne={enabled:!1,func_content:["function label(value, index) {"," // your code goes here"," // return value","}"].join(`
|
|
119
|
+
`),_n={columns:[],fontSize:"1rem",highlightOnHover:!1,horizontalSpacing:"1em",id_field:"",striped:!1,use_raw_columns:!0,verticalSpacing:"1em"};class ut{constructor(t,r){this.root=t,this.path=r}async deleteItem(t){t===null&&await this.root.deleteItem(this.path);const r=await this.root.getItem(this.path)||{};await this.root.setItem(this.path,v.omit(r,t))}async getItem(t){const r=await this.root.getItem(this.path);return t===null?r:v.get(r,t)}async setItem(t,r){if(t===null)await this.root.setItem(this.path,r);else{const i=await this.root.getItem(this.path)||{};await this.root.setItem(this.path,{...i,[t]:r})}return await this.getItem(t)}watchItem(t,r,i){return t===null?this.root.watchItem(this.path,(s,o)=>{r(s,o)},i):this.root.watchItem(this.path,(s,o)=>{const l=v.get(s,t),u=v.get(o,t);l!==u&&r(l,u)},i)}}class Sn{constructor(t,r,i){O(this,"attachmentStorage");this.instance=t,this.attachmentKey=r,this.constructInstance=i,this.attachmentStorage=new ut(t.instanceData,r)}async getInstance(t){if(await this.attachmentStorage.getItem(t))return this.constructInstance(new ut(this.attachmentStorage,t))}async create(t,r){return await this.attachmentStorage.setItem(t,r),this.constructInstance(new ut(this.attachmentStorage,t))}async remove(t){await this.attachmentStorage.deleteItem(t)}async list(){const t=await this.attachmentStorage.getItem(null);return Promise.all(v.values(t).map(r=>this.constructInstance(new ut(this.attachmentStorage,r.id))))}}class ra{constructor(t){O(this,"rootRef");this.rootRef=ie.observable({current:t})}async deleteItem(t){ie.runInAction(()=>{v.unset(this.rootRef.current,[t])})}getItem(t){const r=this.getValueFromRoot(t);return Promise.resolve(r)}getValueFromRoot(t){return t===null?ie.toJS(this.rootRef.current):v.get(this.rootRef.current,[t])}setItem(t,r){if(t===null)if(v.isObject(r))ie.runInAction(()=>{this.rootRef.current=r});else throw new Error("Cannot set root value to non-object");else ie.runInAction(()=>{v.set(this.rootRef.current,[t],r)});return Promise.resolve(this.getItem(t))}watchItem(t,r,i){return ie.reaction(()=>this.getValueFromRoot(t),(s,o)=>{r(s,o)},{requiresObservable:!0,fireImmediately:v.get(i,"fireImmediately",!1)})}}class fl{constructor(){O(this,"channels",new Map);O(this,"globalChannel",new hi)}getChannel(t){const r=this.channels.get(t);if(r)return r;const i=new hi;return this.channels.set(t,i),i}}class gl{constructor(t){O(this,"instances",new Map);this.pluginManager=t}get availableVizList(){return this.pluginManager.installedPlugins.flatMap(t=>t.manifest.viz)}resolveComponent(t){return this.pluginManager.factory.viz(t)}getOrCreateInstance(t){const r=this.instances.get(t.id);if(r)return r;const i={id:t.id,name:t.viz.type,type:t.viz.type,messageChannels:new fl,instanceData:new ra(t.viz.conf)};return this.instances.set(t.id,i),i}}function ia(e,t,r,i){return{vizManager:r,locale:"zh",msgChannels:e.messageChannels,instanceData:e.instanceData,pluginData:new ra({}),colorPalette:{getColor(){return()=>""}},data:t,variables:i}}const ml=e=>{const{panel:t,vizManager:r,data:i,variables:s}=e,o=r.resolveComponent(t.viz.type),l=r.getOrCreateInstance(t),u={...ia(l,i,r,s),viewport:{width:t.layout.w,height:t.layout.h}},d=o.viewRender;return n(d,{context:u,instance:l,...v.omit(e,["panel","vizManager","data"])})},bl=e=>{const{vizManager:t,panel:r,panelInfoEditor:i,data:s,variables:o}=e,l=t.resolveComponent(r.viz.type),u=t.getOrCreateInstance(r),d={...ia(u,s,t,o),panelInfoEditor:i},p=l.configRender;return n(p,{context:d,instance:u,...v.omit(e,["panel","vizManager","data","panelInfoEditor"])})},aa=(e,t)=>{const r=je.bezier(e),i=je.bezier(t);return function(s){return s<50?r(s*2/100).hex():i((s-50)*2/100).hex()}},Ft=e=>{const t=je.bezier(e);return function(r){return t(r/100).hex()}},yl={type:"interpolation",displayName:"Red / Green",getColor:aa(["darkred","deeppink","lightyellow"],["lightyellow","lightgreen","teal"]),name:"red-green",category:"diverging"},vl={type:"interpolation",displayName:"Yellow / Blue",getColor:aa(["#8f531d","#ffd347","#e3efe3"],["#eefaee","#4ecbbf","#003f94"]),name:"yellow-blue",category:"diverging"},xl={type:"interpolation",displayName:"Red",getColor:Ft(["#fff7f1","darkred"]),name:"red",category:"sequential"},Cl={type:"interpolation",displayName:"Green",getColor:Ft(["#f0ffed","darkgreen"]),name:"green",category:"sequential"},wl={type:"interpolation",displayName:"Blue",getColor:Ft(["#f9fcff","#48b3e9","darkblue"]),name:"blue",category:"sequential"},_l={type:"interpolation",displayName:"Orange",getColor:Ft(["#fff7f1","darkorange","#b60000"]),name:"orange",category:"sequential"};class Sl{constructor(t){O(this,"symbol");this.symbol=Symbol(t)}}function Ye(e){return new Sl(e)}class Tn{constructor(){O(this,"parent");O(this,"factoryRegistry",new Map);O(this,"instanceRegistry",new Map)}createScoped(){const t=new Tn;return t.parent=this,t}getRequired(t){return this.get(t)}get(t){if(this.instanceRegistry.has(t.symbol))return this.instanceRegistry.get(t.symbol);const r=this.factoryRegistry.get(t.symbol);if(r){const i=r(this);return this.instanceRegistry.set(t.symbol,i),i}if(this.parent)return this.parent.get(t)}provideFactory(t,r){return this.factoryRegistry.has(t.symbol)?console.warn(`Token ${t.symbol.toString()} is already registered`):this.factoryRegistry.set(t.symbol,r),this}provideValue(t,r){return this.factoryRegistry.has(t.symbol)?console.warn(`Token ${t.symbol.toString()} is already registered`):this.factoryRegistry.set(t.symbol,()=>r),this}dispose(){this.instanceRegistry.forEach(t=>{const r=v.get(t,"dispose");v.isFunction(r)&&r.bind(t)()}),this.instanceRegistry.clear(),this.factoryRegistry.clear()}}const sa="@devtable/dashboard",kn="9.18.4",oa="Apache-2.0",la={access:"public",registry:"https://registry.npmjs.org/"},ua=["dist"],da="./dist/dashboard.umd.js",ca="./dist/dashboard.es.js",pa="./dist/index.d.ts",ha={".":{import:"./dist/dashboard.es.js",require:"./dist/dashboard.umd.js"},"./dist/style.css":{import:"./dist/style.css",require:"./dist/style.css"}},fa={"dev-build":"tsc && vite build --watch",build:"tsc && vite build",preview:"vite preview",test:"vitest","test:ui":"vitest --ui",coverage:"vitest --coverage"},ga={"@monaco-editor/react":"4.4.6","@types/chroma-js":"^2.1.4","file-saver":"2.0.5",mathjs:"11.8.0","monaco-editor":"0.36.0","performant-array-to-tree":"1.11.0",popmotion:"^11.0.3","rc-select":"14.1.0","rc-tree-select":"5.5.5",reactflow:"^11.5.3"},ma={"@emotion/babel-plugin":"11.11.0","@faker-js/faker":"7.6.0","@mantine/core":"5.9.5","@mantine/dates":"5.9.5","@mantine/hooks":"5.9.5","@mantine/modals":"5.9.5","@mantine/notifications":"5.9.5","@mantine/prism":"5.9.5","@mantine/tiptap":"5.9.5","@tabler/icons":"1.119.0","@testing-library/cypress":"^9.0.0","@testing-library/jest-dom":"^5.16.4","@testing-library/react":"^13.3.0","@testing-library/react-hooks":"^8.0.1","@testing-library/user-event":"^14.3.0","@tiptap/extension-code-block-lowlight":"2.0.3","@tiptap/extension-color":"2.0.3","@tiptap/extension-highlight":"2.0.3","@tiptap/extension-link":"2.0.3","@tiptap/extension-placeholder":"2.0.3","@tiptap/extension-subscript":"2.0.3","@tiptap/extension-superscript":"2.0.3","@tiptap/extension-table":"2.0.3","@tiptap/extension-table-cell":"2.0.3","@tiptap/extension-table-header":"2.0.3","@tiptap/extension-table-row":"2.0.3","@tiptap/extension-text-align":"2.0.3","@tiptap/extension-text-style":"2.0.3","@tiptap/extension-underline":"2.0.3","@tiptap/pm":"2.0.3","@tiptap/react":"2.0.3","@tiptap/starter-kit":"2.0.3","@types/crypto-js":"v4.1.1","@types/d3-array":"3.0.4","@types/eventemitter2":"^4.1.0","@types/file-saver":"2.0.5","@types/lodash":"^4.14.182","@types/react":"^18.0.0","@types/react-dom":"^18.0.0","@types/react-grid-layout":"^1.3.2",ahooks:"^3.3.11",ajv:"8.12.0",axios:"^0.27.2","crypto-js":"^4.1.1",cypress:"^12.9.0","cypress-wait-until":"^1.7.2",echarts:"^5.3.2","echarts-for-react":"^3.0.2","echarts-gl":"^2.0.9",jsdom:"^20.0.0","jsdom-testing-mocks":"^1.5.0",lodash:"^4.17.21",lowlight:"^2.8.0",numbro:"^2.3.6","prosemirror-commands":"^1.5.0","prosemirror-dropcursor":"^1.6.1","prosemirror-gapcursor":"^1.3.1","prosemirror-history":"^1.3.0","prosemirror-keymap":"^1.2.0","prosemirror-schema-list":"^1.2.2","react-grid-layout":"^1.3.4","react-hook-form":"^7.31.2","rollup-plugin-visualizer":"5.9.0","tabler-icons-react":"^1.48.0",typescript:"^4.6.3","vite-plugin-static-copy":"0.13.1"},ba={"@emotion/react":"11.10.6","@faker-js/faker":"7.6.0","@mantine/core":"5.9.5","@mantine/dates":"5.9.5","@mantine/hooks":"5.9.5","@mantine/modals":"5.9.5","@mantine/notifications":"5.9.5","@mantine/prism":"5.9.5","@mantine/tiptap":"5.9.5","@tabler/icons":"1.119.0","@tanstack/react-table":"^8.5.13","@tiptap/extension-code-block-lowlight":"2.0.3","@tiptap/extension-color":"2.0.3","@tiptap/extension-highlight":"2.0.3","@tiptap/extension-link":"2.0.3","@tiptap/extension-placeholder":"2.0.3","@tiptap/extension-subscript":"2.0.3","@tiptap/extension-superscript":"2.0.3","@tiptap/extension-table":"2.0.3","@tiptap/extension-table-cell":"2.0.3","@tiptap/extension-table-header":"2.0.3","@tiptap/extension-table-row":"2.0.3","@tiptap/extension-text-align":"2.0.3","@tiptap/extension-text-style":"2.0.3","@tiptap/extension-underline":"2.0.3","@tiptap/pm":"2.0.3","@tiptap/react":"2.0.3","@tiptap/starter-kit":"2.0.3",ahooks:"^3.3.11",axios:"^0.27.2","chroma-js":"^2.4.2","crypto-js":"^4.1.1","d3-array":"3.2.3","d3-regression":"1.3.10",dayjs:"1.11.7",echarts:"^5.3.2","echarts-for-react":"^3.0.2","echarts-gl":"^2.0.9",eventemitter2:"^6.4.6",jszip:"3.10.1",lodash:"^4.17.21",lowlight:"^2.8.0",mobx:"^6.6.1","mobx-react-lite":"^3.4.0","mobx-state-tree":"^5.1.5",numbro:"^2.3.6","prosemirror-commands":"^1.5.0","prosemirror-dropcursor":"^1.6.1","prosemirror-gapcursor":"^1.3.1","prosemirror-history":"^1.3.0","prosemirror-keymap":"^1.2.0","prosemirror-schema-list":"^1.2.2",react:"^16.8.0 || 17.x || 18.x","react-dom":"^16.8.0 || 17.x || 18.x","react-grid-layout":"^1.3.4","react-hook-form":"^7.31.2","react-router-dom":"^6.3.0","react-virtual":"^2.10.4","tabler-icons-react":"^1.48.0"},Tl=Object.freeze(Object.defineProperty({__proto__:null,default:{name:sa,version:kn,license:oa,publishConfig:la,files:ua,main:da,module:ca,types:pa,exports:ha,scripts:fa,dependencies:ga,devDependencies:ma,peerDependencies:ba},dependencies:ga,devDependencies:ma,exports:ha,files:ua,license:oa,main:da,module:ca,name:sa,peerDependencies:ba,publishConfig:la,scripts:fa,types:pa,version:kn},Symbol.toStringTag,{value:"Module"}));class kl{constructor(t){O(this,"staticColors",new Map);O(this,"interpolations",new Map);t.installedPlugins.forEach(r=>{r.manifest.color.forEach(i=>{this.register(i)})})}getStaticColors(){return Array.from(this.staticColors.values())}register(t){const r=this.encodeColor(t);t.type==="single"?(this.staticColors.has(r)&&console.warn(`the color '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`),this.staticColors.set(r,t)):t.type==="interpolation"&&(this.interpolations.has(r)&&console.warn(`the interpolation '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`,`the interpolation '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`),this.interpolations.set(r,t))}decodeStaticColor(t){return this.staticColors.get(t)}encodeColor(t){return`\${${t.category}}.{${t.name}}`}decodeInterpolation(t){return this.interpolations.get(t)}getColorInterpolations(){return Array.from(this.interpolations.values())}}class Dl{constructor(){O(this,"plugins",new Map);O(this,"vizComponents",new Map);O(this,"factory",{viz:t=>{const r=this.vizComponents.get(t);if(r)return r;throw new Error(`Viz Component (${t}) not found`)}})}install(t){if(this.plugins.has(t.id))throw new Error(`Plugin (${t.id}) has been installed before`);this.plugins.set(t.id,t);for(const r of t.manifest.viz){if(this.vizComponents.has(r.name))throw new Error(`Viz Component (${r.name}) has been installed before`);this.vizComponents.set(r.name,r)}}get installedPlugins(){return Array.from(this.plugins.values())}}const F=(e,t)=>{const[r,{setFalse:i}]=X.useBoolean(!0),[s,o]=m.useState();m.useEffect(()=>(e.getItem(t).then(u=>{o(u),i()}),e.watchItem(t,u=>{o(u)})));const l=m.useCallback(async u=>{await e.setItem(t,u),o(u)},[e,t]);return{loading:r,value:s,set:l}},Dn={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"}};le.use([G.GridComponent,G.VisualMapComponent,G.LegendComponent,G.TooltipComponent,Me.CanvasRenderer]);function Il({context:e}){const{value:t}=F(e.instanceData,"config"),r=e.data,{width:i,height:s}=e.viewport,{x_axis_data_key:o,y_axis_data_key:l,z_axis_data_key:u,xAxis3D:d,yAxis3D:p,zAxis3D:f}=v.defaults({},t,Dn),g=m.useMemo(()=>{const C=v.minBy(r,w=>w[u]);return v.get(C,u)},[r,u]),h=m.useMemo(()=>{const C=v.maxBy(r,w=>w[u]);return v.get(C,u)},[r,u]),y={tooltip:{},backgroundColor:"#fff",visualMap:{show:!0,dimension:2,min:g,max:h,inRange:{color:["#313695","#4575b4","#74add1","#abd9e9","#e0f3f8","#ffffbf","#fee090","#fdae61","#f46d43","#d73027","#a50026"]}},xAxis3D:d,yAxis3D:p,zAxis3D:f,grid3D:{viewControl:{projection:"orthographic",autoRotate:!1},light:{main:{shadow:!0,quality:"ultra",intensity:1.5}}},series:[{type:"bar3D",wireframe:{},data:r.map(C=>[C[o],C[l],C[u]])}]};return t?n(Ae,{echarts:le,option:y,style:{width:i,height:s},notMerge:!0,theme:"merico-light"}):null}function Ml({label:e,required:t,value:r,onChange:i,data:s,clearable:o=!1,sx:l,...u},d){const p=m.useMemo(()=>{if(!Array.isArray(s)||s.length===0)return[];const g=Object.keys(s[0]).map(h=>({label:h,value:h}));return o?g.concat([{label:"unset",value:""}]):g},[s]);return n(a.Select,{ref:d,label:e,data:p,value:r,onChange:i,required:t,sx:l,...u})}const W=m.forwardRef(Ml);function Al({context:e}){const{value:t,set:r}=F(e.instanceData,"config"),i=e.data,s=v.defaults({},t,Dn),{control:o,handleSubmit:l,reset:u}=x.useForm({defaultValues:s});return m.useEffect(()=>{u(s)},[t]),t?n(a.Stack,{spacing:"xs",children:c("form",{onSubmit:l(r),children:[n(a.Text,{children:"X Axis"}),c(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[n(x.Controller,{name:"x_axis_data_key",control:o,render:({field:d})=>n(W,{label:"Data Field",required:!0,data:i,...d})}),n(x.Controller,{name:"xAxis3D.name",control:o,render:({field:d})=>n(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...d})})]}),n(a.Text,{mt:"lg",children:"Y Axis"}),c(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[n(x.Controller,{name:"y_axis_data_key",control:o,render:({field:d})=>n(W,{label:"Data Field",required:!0,data:i,...d})}),n(x.Controller,{name:"yAxis3D.name",control:o,render:({field:d})=>n(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...d})})]}),n(a.Text,{mt:"lg",children:"Z Axis"}),c(a.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[n(x.Controller,{name:"z_axis_data_key",control:o,render:({field:d})=>n(W,{label:"Data Field",required:!0,data:i,...d})}),n(x.Controller,{name:"zAxis3D.name",control:o,render:({field:d})=>n(a.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...d})})]}),n(a.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"60%"},mx:"auto",children:c(a.Button,{color:"blue",type:"submit",children:[n(k.DeviceFloppy,{size:20}),n(a.Text,{ml:"md",children:"Save"})]})})]})}):null}class $l extends fe{constructor(){super(...arguments);O(this,"VERSION",1)}configVersions(){this.version(1,r=>({version:1,config:r}))}}const zl={displayName:"Bar Chart (3D)",displayGroup:"ECharts-based charts",migrator:new $l,name:"bar-3d",viewRender:Il,configRender:Al,createConfig(){return{version:1,config:v.cloneDeep(Dn)}}};class ke extends m.Component{constructor(t){super(t),this.state={error:null}}componentDidCatch(t){this.setState({error:t})}render(){var t;if(this.state.error){const r=()=>{this.setState({error:null})};return c(a.Box,{children:[n(a.Text,{size:"xs",children:(t=this.state.error)==null?void 0:t.message}),n(a.Button,{variant:"subtle",size:"xs",mx:"auto",compact:!0,sx:{display:"block"},onClick:r,children:"Retry"})]})}return this.props.children}}const Se={mantissa:0,output:"number",trimMantissa:!1,average:!1};function El({value:e,onChange:t},r){const i=u=>{t({...e,output:u})},s=u=>{const d=u===0?!1:e.trimMantissa;t({...e,mantissa:u,trimMantissa:d})},o=u=>{t({...e,trimMantissa:u.currentTarget.checked})},l=u=>{t({...e,average:u.currentTarget.checked})};return c(a.Stack,{ref:r,children:[c(a.Group,{grow:!0,children:[n(a.Select,{label:"Format",data:[{label:"1234",value:"number"},{label:"99%",value:"percent"}],value:e.output,onChange:i,sx:{flexGrow:1}}),n(a.Switch,{label:c(a.Stack,{spacing:0,children:[n(a.Text,{children:"Average"}),n(a.Text,{size:12,color:"gray",children:"like 1.234k, 1.234m"})]}),checked:e.average,onChange:l,disabled:e.output!=="number",sx:{flexGrow:1},styles:{root:{alignSelf:"flex-end"},body:{alignItems:"center"},label:{display:"block"}}})]}),c(a.Group,{grow:!0,children:[n(a.NumberInput,{label:"Mantissa",defaultValue:0,min:0,step:1,max:4,value:e.mantissa,onChange:s}),n(a.Switch,{label:"Trim mantissa",checked:e.trimMantissa,onChange:o,disabled:e.mantissa===0,styles:{root:{alignSelf:"flex-end"},body:{alignItems:"center"}}})]}),c(a.Stack,{spacing:0,children:[n(a.Text,{weight:"bold",children:"Preview"}),n(ke,{children:c(a.Group,{position:"apart",children:[c(a.Text,{size:12,color:"gray",children:["123456789 ",n(k.ArrowRight,{size:9})," ",H(123456789).format(e)]}),c(a.Text,{size:12,color:"gray",children:["1234 ",n(k.ArrowRight,{size:9})," ",H(1234).format(e)]}),c(a.Text,{size:12,color:"gray",children:["0.1234 ",n(k.ArrowRight,{size:9})," ",H(.1234).format(e)]})]})})]})]})}const Ve=m.forwardRef(El),Ne={enabled:!1,func_content:["function label(value, index) {"," // your code goes here"," // return value","}"].join(`
|
|
120
120
|
`)},ya={id:"builtin:echarts:click-echart:series",displayName:"Click Chart Series",nameRender:Pl,configRender:Ll,payload:[{name:"type",description:"Always 'click'",valueType:"string"},{name:"seriesType",description:"'boxplot'",valueType:"string"},{name:"name",description:"Name of the series clicked",valueType:"string"},{name:"color",description:"Color",valueType:"string"},{name:"value",description:"Record of 'name', 'min', 'q1', 'median', 'q3', 'max'",valueType:"object"},{name:"rowData",description:"Data of the row",valueType:"object"}]};function Ll(e){return n(V,{})}function Pl(e){return n(a.Text,{children:"Click chart's series"})}const Ol=[{label:"Truncate",value:"truncate"},{label:"Break Line",value:"break"},{label:"Break Word",value:"breakAll"}],Wt=m.forwardRef(({sectionTitle:e,value:t,onChange:r},i)=>{const s=o=>l=>{const u=v.cloneDeep(t);v.set(u,o,l),r(u)};return c(a.Stack,{spacing:0,children:[e&&n(a.Divider,{mb:-5,mt:5,variant:"dotted",label:e,labelPosition:"right",labelProps:{color:"dimmed"}}),c(a.Group,{grow:!0,noWrap:!0,children:[n(a.NumberInput,{label:"Max Width",hideControls:!0,value:t.width,onChange:s("width")}),n(a.Select,{label:"Overflow",data:Ol,value:t.overflow,onChange:s("overflow")}),n(a.TextInput,{label:"Ellipsis",value:t.ellipsis,disabled:!0})]})]})}),Je=m.forwardRef(({value:e,onChange:t},r)=>{const i=o=>{t({...e,on_axis:o})},s=o=>{t({...e,in_tooltip:o})};return c(a.Stack,{ref:r,spacing:0,children:[n(Wt,{sectionTitle:"Overflow on Axis",value:e.on_axis,onChange:i}),n(Wt,{sectionTitle:"Overflow in Tooltip",value:e.in_tooltip,onChange:s})]})}),Be={on_axis:{width:80,overflow:"truncate",ellipsis:"..."},in_tooltip:{width:200,overflow:"break",ellipsis:"..."}};function He({overflow:e,width:t}){const r={truncate:"initial",break:"break-all",breakAll:"break-word"}[e],i=e==="truncate"?"nowrap":"initial",s={truncate:"ellipsis",break:"clip",breakAll:"clip"}[e];return`
|
|
121
121
|
max-width: ${t}px;
|
|
122
122
|
word-break: ${r};
|
|
@@ -466,7 +466,7 @@ Check the top-level render call using <`+E+">.")}return M}}function oo(_,M){{if(
|
|
|
466
466
|
</tr>
|
|
467
467
|
</tbody>
|
|
468
468
|
</table>
|
|
469
|
-
`}},show_in_legend:!0}))}function Ob(e,t,r,i){const s=t.data_key,o=t.name,l=r.map(u=>{const d=v.sumBy(i[u],s);return[u,d]});return{type:"line",name:o,xAxisIndex:3,yAxisIndex:3,color:"#b41529",data:l,show_in_legend:!1}}function Vb(e,t,r,i){const l={barMinWidth:5,barMaxWidth:20};return[$b(e,r,i),Eb(e,r,i,l),...Pb(e,r,i,l),Ob(e,t,r,i)]}function Bb(e,t){const{axisLabel:r}=e.x_axis;return[{data:t,id:"准确估算比例",gridIndex:0,axisTick:{show:!1},axisLabel:{show:!1},axisLine:{show:!1},type:"category"},{data:t,id:"平均偏差",gridIndex:1,axisTick:{show:!1},axisLabel:{show:!1},axisLine:{show:!0,lineStyle:{color:"#FFFFFF",width:2}},type:"category"},{data:t,id:"数量占比",gridIndex:2,axisTick:{show:!1},axisLabel:{show:!1},axisLine:{show:!1},type:"category"},{data:t,id:"代码当量",gridIndex:3,axisTick:{show:!1},type:"category",axisLabel:{...r,formatter:Na(r.formatter)},axisLine:{show:!1}}]}function Nb(e){return[{type:"category",name:"准确估算比例",nameRotate:0,nameGap:5,nameLocation:"end",nameTextStyle:{align:"left"},gridIndex:0,axisLabel:{show:!1},axisTick:{show:!1},axisLine:{show:!1},splitLine:{show:!1}},{type:"value",name:"平均偏差",nameGap:5,nameRotate:90,nameLocation:"middle",gridIndex:1,boundaryGap:[1,1],axisLabel:{show:!1},axisTick:{show:!1},axisLine:{show:!1},splitLine:{show:!1}},{type:"value",name:"数量占比",nameGap:5,nameRotate:90,nameLocation:"middle",gridIndex:2,axisLabel:{show:!1},axisTick:{show:!1},axisLine:{show:!1},splitLine:{show:!1},min:0,max:1},{type:"value",gridIndex:3,position:"right",splitNumber:3,axisLabel:{show:!0,verticalAlign:"top",showMinLabel:!1,lineHeight:14},axisTick:{show:!1},axisLine:{show:!1},splitLine:{show:!1}},{type:"value",name:e.name,nameGap:5,nameRotate:90,nameLocation:"middle",gridIndex:3,position:"left",axisLabel:{show:!1},axisTick:{show:!1},axisLine:{show:!1},splitLine:{show:!1}}]}function ir(e){return e==1||e==2?1:ir(e-2)+ir(e-1)}const Gb=Array.from(new Array(20),(e,t)=>ir(t+1));function ns(e){return e<=1?e:Gb.findIndex(t=>e<=t)-1}function qb(e,t){const{estimated_value:r,actual_value:i}=e.deviation.data_keys;return t.map(s=>{const o=ns(s[r]),l=ns(s[i]),u=o-l;return{...s,level:{estimated:o,actual:l,diff:u}}})}function Fb(e){return e==="rgba(255, 255, 255, 1)"?{borderColor:"rgba(0,0,0,.1)",borderWidth:1}:{}}function Wb(e){return{show:!0,orient:"vertical",top:"middle",right:0,data:e.filter(r=>r.show_in_legend).reverse().map(r=>({name:`${r.name}`,color:r.color,itemStyle:Fb(r.color)})),tooltip:{show:!0,formatter:"档位偏差:{a}"}}}const jb={tooltip:{trigger:"axis"}};function Yb(e,t){const{deviation:r,metrics:i}=e,s=i.find(l=>l.data_key===t);if(s)return s;const o=r.data_keys.actual_value;return{id:o,name:r.name,data_key:o}}function Rb(e,t,r){const i=qb(e,r),s=v.uniqBy(r,e.x_axis.data_key).map(p=>p[e.x_axis.data_key]),o=v.groupBy(i,e.x_axis.data_key),l=Yb(e,t),u=Vb(e,l,s,o),d={xAxis:Bb(e,s),yAxis:Nb(l),series:u,grid:Ab(),visualMap:[{min:0,max:1,calculable:!0,show:!1,seriesIndex:0,color:["#F0F0F0","#418AAF"]}],legend:Wb(u)};return v.defaultsDeep({},d,jb)}const ar={x_axis:{name:"",data_key:"",axisLabel:{rotate:0,formatter:{...Jt}}},deviation:{name:"",data_keys:{estimated_value:"",actual_value:""}},metrics:[]},Qb={input:{border:"none !important",paddingLeft:0,lineHeight:"1.55 !important"}},Ub=({conf:e,metricKey:t,setMetricKey:r})=>{const{deviation:i,metrics:s}=e,o=m.useMemo(()=>{const l=s.map(u=>({label:u.name,value:u.data_key}));return l.push({label:i.name?i.name:i.data_keys.actual_value,value:i.data_keys.actual_value}),l},[i,s]);return c(a.Group,{spacing:1,children:[n(a.Text,{size:12,color:"dimmed",sx:{cursor:"default",userSelect:"none"},children:"基线指标"}),n(a.NativeSelect,{size:"xs",data:o,value:t,onChange:l=>r(l.currentTarget.value),styles:Qb})]})},Xb={"tbody th, tbody td":{padding:"7px 10px"},"tbody tr:not(:first-of-type) th":{borderTop:"1px solid #dee2e6"}};function Zb(){return c(a.HoverCard,{width:400,shadow:"md",children:[n(a.HoverCard.Target,{children:n(a.Button,{size:"xs",variant:"subtle",compact:!0,leftIcon:n(L.IconInfoCircle,{size:14}),children:"指标说明"})}),n(a.HoverCard.Dropdown,{children:n(a.Table,{fontSize:14,sx:Xb,children:c("tbody",{children:[c("tr",{children:[n("th",{children:"估算偏差"}),n("td",{children:"使用斐波那契数列(1,2,3,5,8,13)估算故事点,每个数位为一个档位,计算issue实际故事点与估算故事点的档位偏差,即为估算偏差。如估算故事点为5,实际故事点为8,则估算偏差为-1。"})]}),c("tr",{children:[n("th",{children:"准确估算比例"}),n("td",{children:"偏差在 ± 1 档位内的 issue 均为准确估算,以此计算准确估算的比例。"})]})]})})})]})}function Kb(e){return c(a.Group,{position:"apart",children:[n(Zb,{}),n(Ub,{...e})]})}le.use([de.BarChart,de.LineChart,de.HeatmapChart,G.GridComponent,G.LegendComponent,G.TooltipComponent,Me.CanvasRenderer,G.VisualMapComponent]);function Jb({conf:e,data:t,width:r,height:i,metricKey:s}){const o=m.useMemo(()=>Rb(e,s,t),[e,t,s]);return!r||!i?null:n(Ae,{echarts:le,option:o,style:{width:r,height:i},notMerge:!0,theme:"merico-light"})}function Hb({context:e}){const{value:t}=F(e.instanceData,"config"),r=m.useMemo(()=>v.defaults({},t,ar),[t]),i=e.data,{width:s,height:o}=e.viewport,{x_axis:l,deviation:u}=r,{estimated_value:d,actual_value:p}=u.data_keys,[f,g]=m.useState(p);if(m.useEffect(()=>{g(C=>C||p)},[p]),!l.data_key||!d||!p)return null;const h=Math.max(s,300),y=Math.max(o,370);return c(a.Box,{sx:{overflow:"hidden",height:y,width:h},children:[n(Kb,{conf:r,metricKey:f,setMetricKey:g}),n(Jb,{width:h,height:y-30,data:i,conf:r,metricKey:f})]})}function ey({data:e,control:t,watch:r}){return r(["x_axis"]),c(a.Stack,{children:[c(a.Group,{grow:!0,noWrap:!0,children:[n(x.Controller,{name:"x_axis.data_key",control:t,render:({field:i})=>n(W,{label:"数据字段",required:!0,data:e,sx:{flex:1},...i})}),n(x.Controller,{name:"x_axis.name",control:t,render:({field:i})=>n(a.TextInput,{label:"X轴名称",sx:{flex:1},...i})})]}),n(a.Divider,{mb:-15,label:"点位文案",labelPosition:"center"}),c(a.Group,{grow:!0,noWrap:!0,children:[n(x.Controller,{name:"x_axis.axisLabel.rotate",control:t,render:({field:i})=>n(a.NumberInput,{label:"旋转",hideControls:!0,min:-90,max:90,rightSection:n(a.Text,{color:"dimmed",children:"度"}),sx:{width:"48%"},styles:{rightSection:{width:"4em",justifyContent:"flex-end",paddingRight:"6px"}},...i})}),n(x.Controller,{name:"x_axis.axisLabel.formatter",control:t,render:({field:i})=>n(Fa,{data:e,...i})})]})]})}function ty({data:e,control:t,watch:r}){return r(["deviation"]),c(a.Stack,{children:[n(a.Group,{grow:!0,noWrap:!0,children:n(x.Controller,{name:"deviation.name",control:t,render:({field:i})=>n(a.TextInput,{label:"指标名称",sx:{flex:1},...i})})}),c(a.Group,{grow:!0,noWrap:!0,children:[n(x.Controller,{name:"deviation.data_keys.estimated_value",control:t,render:({field:i})=>n(W,{label:"估算值字段",required:!0,data:e,sx:{flex:1},...i})}),n(x.Controller,{name:"deviation.data_keys.actual_value",control:t,render:({field:i})=>n(W,{label:"实际值字段",required:!0,data:e,sx:{flex:1},...i})})]})]})}const ny=({control:e,data:t,index:r,remove:i})=>c(a.Stack,{children:[c(a.Group,{grow:!0,noWrap:!0,children:[n(x.Controller,{name:`metrics.${r}.name`,control:e,render:({field:s})=>n(a.TextInput,{label:"Name",required:!0,sx:{flex:1},...s})}),n(x.Controller,{name:`metrics.${r}.data_key`,control:e,render:({field:s})=>n(W,{label:"Value Field",required:!0,data:t,sx:{flex:1},...s})})]}),n(a.Divider,{mb:-10,mt:10,variant:"dashed"}),n(a.Button,{leftIcon:n(k.Trash,{size:16}),color:"red",variant:"light",onClick:()=>i(r),sx:{top:15,right:5},children:"Delete this Metric"})]}),ry=({control:e,watch:t,data:r})=>{const{fields:i,append:s,remove:o}=x.useFieldArray({control:e,name:"metrics"}),l=t("metrics"),u=i.map((h,y)=>({...h,...l[y]})),d=()=>s({id:Date.now().toString(),data_key:"",name:""}),p=t("metrics.0.id"),[f,g]=m.useState(()=>p??null);return m.useEffect(()=>{p&&g(h=>h!==null?h:p)},[p]),c(V,{children:[c(a.Group,{spacing:2,sx:{cursor:"default",userSelect:"none"},children:[n(k.InfoCircle,{size:14,color:"#888"}),n(a.Text,{size:14,color:"#888",children:"设置可以展示在基线图的指标,例如代码当量"})]}),n(a.Divider,{variant:"dashed",my:10}),c(a.Tabs,{value:f,onTabChange:h=>g(h),styles:{tab:{paddingTop:"0px",paddingBottom:"0px"},panel:{padding:"0px",paddingTop:"6px"}},children:[c(a.Tabs.List,{children:[u.map((h,y)=>n(a.Tabs.Tab,{value:h.id,children:h.name?h.name:y},h.id)),n(a.Tabs.Tab,{onClick:d,value:"add",children:n(k.Plus,{size:18,color:"#228be6"})})]}),u.map((h,y)=>n(a.Tabs.Panel,{value:h.id,children:n(ny,{control:e,index:y,remove:o,data:r},h.id)},h.id))]})]})};function iy({context:e}){const{value:t,set:r}=F(e.instanceData,"config"),i=e.data,s=m.useMemo(()=>v.defaultsDeep({},t,ar),[t]),{control:o,handleSubmit:l,watch:u,getValues:d,reset:p}=x.useForm({defaultValues:s});m.useEffect(()=>{p(s)},[s]),u([]);const f=d(),g=m.useMemo(()=>!v.isEqual(f,s),[f,s]);return n(a.Stack,{spacing:"xs",children:c("form",{onSubmit:l(r),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[n(a.Text,{children:"Merico Estimation Chart Config"}),n(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!g,children:n(k.DeviceFloppy,{size:20})})]}),c(a.Tabs,{defaultValue:"X Axis",orientation:"vertical",styles:{tab:{paddingLeft:"6px",paddingRight:"12px"},panel:{paddingTop:"6px",paddingLeft:"12px"}},children:[c(a.Tabs.List,{children:[n(a.Tabs.Tab,{value:"X Axis",children:"X 轴"}),n(a.Tabs.Tab,{value:"Deviation",children:"偏差"}),n(a.Tabs.Tab,{value:"Additional Metrics",children:"指标"})]}),n(a.Tabs.Panel,{value:"X Axis",children:n(ey,{control:o,watch:u,data:i})}),n(a.Tabs.Panel,{value:"Deviation",children:n(ty,{control:o,watch:u,data:i})}),n(a.Tabs.Panel,{value:"Additional Metrics",children:n(ry,{control:o,watch:u,data:i})})]})]})})}class ay extends fe{constructor(){super(...arguments);O(this,"VERSION",1)}configVersions(){this.version(1,r=>({version:1,config:r}))}}const sy={displayName:"Merico Estimation Chart",displayGroup:"Merico suite",migrator:new ay,name:"mericoEstimationChart",viewRender:Hb,configRender:iy,createConfig:()=>({version:1,config:ar})},oy=[{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(e=>({name:e.name,value:e.value,type:"single",category:"basic"})),ly=[yl,vl,wl,Cl,xl,_l],rs=()=>({id:"dashboard",version:kn,manifest:{viz:[dr,Pg,um,ff,nm,yh,Mb,zl,Xu,rp,$p,jm,uh,Pc,_g,Lh,uf,bm,sy,ud],color:[...oy,...ly]}}),It=new Dl,be={pluginManager:Ye("pluginManager"),vizManager:Ye("vizManager"),colorManager:Ye("colorManager"),instanceScope:{panelModel:Ye("panelModel"),vizInstance:Ye("vizInstance"),interactionManager:Ye("interactionManager"),migrator:Ye("migrator"),operationManager:Ye("operationManager"),triggerManager:Ye("triggerManager")}},sr=()=>{try{It.install(rs())}catch{}const e=new gl(It),t=new kl(It);return{pluginManager:It,vizManager:e,colorManager:t}},qe=m.createContext(sr());try{It.install(rs())}catch{}function uy(e,t){const{value:r,set:i}=F(e.operation.operationData,"config"),[s,o]=m.useState(v.defaults({},r,t)),l=async()=>{await i(s)};return m.useEffect(()=>{o(v.defaults({},r,t))},[r]),{config:s,setConfig:o,commit:l}}function dy(e){const{config:t,setConfig:r,commit:i}=uy(e,{urlTemplate:"",openInNewTab:!0});async function s(){await i()}async function o(u){r({...t,openInNewTab:u}),await i()}const l=u=>r({...t,urlTemplate:u.currentTarget.value});return c(a.Stack,{children:[n(a.TextInput,{label:"Url",value:t.urlTemplate,onChange:l,onBlur:s}),n(a.Switch,{label:"Open in new Tab",checked:t.openInNewTab,onChange:u=>o(u.currentTarget.checked)})]})}async function cy(e,t){const{urlTemplate:r,openInNewTab:i}=await t.operationData.getItem("config");window.dispatchEvent(new CustomEvent("open-link",{detail:{urlTemplate:r,openInNewTab:i,payload:e}}))}class py extends fe{constructor(){super(...arguments);O(this,"VERSION",1)}configVersions(){this.version(1,r=>r)}}const hy={displayName:"Open Link",id:"builtin:op:open-link",configRender:dy,run:cy,migrator:new py,createDefaultConfig:()=>({version:1,config:{urlTemplate:"",openInNewTab:!0}})};function fy(e){const{value:t,set:r}=F(e.operationData,"config"),i=s=>void r({template:s});return[(t==null?void 0:t.template)||"",i]}function gy(e){const[t,r]=fy(e.operation);return n(a.TextInput,{defaultValue:t,onBlur:i=>r(i.currentTarget.value),label:"console.log"})}async function my(e,t){const r=await t.operationData.getItem("config"),i=v.template(r.template||"");console.log("run with payload",e),console.log(i(e))}const by={displayName:"console.log (debug)",id:"builtin:op:debug",configRender:gy,run:my},yy=T.observer(e=>{const t=Y(),{value:r,set:i}=F(e.operation.operationData,"config");console.log({value:r,viewID:r==null?void 0:r.viewID});const s=(r==null?void 0:r.viewID)||"",o=l=>void i({viewID:l});return n(a.Select,{defaultValue:s,value:s,onChange:o,label:"View",data:t.views.options})});async function vy(e,t){const i=(await t.operationData.getItem("config")).viewID;window.dispatchEvent(new CustomEvent("open-view",{detail:{viewID:i}}))}const xy={displayName:"Open View",id:"builtin:op:open_view",configRender:yy,run:vy},Cy={"tbody tr":{opacity:.5,transition:"opacity 200ms ease"},"tr[data-affected=true]":{opacity:1}},wy=({value:e="",onChange:t})=>{const[r,i]=m.useState(e);m.useEffect(()=>{i(e)},[e]);const s=()=>{t(r)};return n(a.TextInput,{size:"xs",label:"",value:r,onChange:o=>i(o.currentTarget.value),sx:{flexGrow:1},rightSection:n(a.ActionIcon,{color:"green",size:"xs",onClick:s,disabled:r===e,children:n(L.IconDeviceFloppy,{})})})},_y={dictionary:{}},Sy=T.observer(e=>{const t=Y(),{value:r=_y,set:i}=F(e.operation.operationData,"config"),{dictionary:s={}}=r;console.log({value:{...r},dictionary:{...s},filters:[...t.filters.keyLabelOptions]});const o=(l,u)=>{if(u===""){const d={...s};delete d[l],i({dictionary:d});return}i({dictionary:{...s,[l]:u}})};return c(a.Table,{sx:Cy,children:[n("thead",{children:c("tr",{children:[n("th",{children:"Set filter"}),n("th",{children:"with"})]})}),n("tbody",{children:[...t.filters.keyLabelOptions].map(l=>{const u=l.value in s;return c("tr",{"data-affected":u,children:[n("td",{children:l.label}),n("td",{children:n(wy,{value:s[l.value],onChange:d=>o(l.value,d)})})]},l.value)})})]})});async function Ty(e,t){const i=(await t.operationData.getItem("config")).dictionary;window.dispatchEvent(new CustomEvent("set-filter-values",{detail:{dictionary:i,payload:e}}))}const ky={displayName:"Set Filter Values",id:"builtin:op:set_filter_values",configRender:Sy,run:Ty},Dy={filter_keys:[]},Iy=T.observer(e=>{const t=Y(),{value:r=Dy,set:i}=F(e.operation.operationData,"config"),{filter_keys:s=[]}=r,o=u=>{i({filter_keys:[...u]})},l=m.useMemo(()=>t.filters.current.map(u=>({label:u.label,value:u.key})),[t.filters.values]);return n(a.Stack,{spacing:10,children:n(a.MultiSelect,{label:"Select Filters to Clear",data:l,value:s,onChange:o})})});async function My(e,t){const i=(await t.operationData.getItem("config")).filter_keys;window.dispatchEvent(new CustomEvent("clear-filter-values",{detail:{filter_keys:i,payload:e}}))}const nn=[by,hy,xy,ky,{displayName:"Clear Filter Values",id:"builtin:op:clear_filter_values",configRender:Iy,run:My}];class Ay{constructor(t,r=nn){O(this,"attachments");this.operations=r;const i=async s=>{const{id:o,schemaRef:l}=await s.getItem(null);return{id:o,schemaRef:l,operationData:new ut(s,"data")}};this.attachments=new Sn(t,"__OPERATIONS",i)}async runOperation(t,r){const i=await this.attachments.getInstance(t);if(!i){console.warn(`Operation '${t}' is not defined`);return}const s=this.tryGetSchema(i.schemaRef);if(!s){console.warn(`Operation schema '${i.schemaRef}' is not defined`);return}await s.run(r,i)}tryGetSchema(t){return this.operations.find(r=>r.id===t)}async needMigration(){const r=(await this.attachments.list()).map(async i=>{const s={configData:i.operationData},o=this.tryGetSchema(i.schemaRef),l=o==null?void 0:o.migrator;return l&&await l.needMigration(s)});return(await Promise.all(r)).some(i=>i)}async runMigration(){const r=(await this.attachments.list()).map(async i=>{const s={configData:i.operationData},o=this.tryGetSchema(i.schemaRef),l=o==null?void 0:o.migrator;l&&await l.needMigration(s)&&await l.migrate(s)});await Promise.all(r)}async createOrGetOperation(t,r){var l;if(!this.getOperationSchemaList().some(u=>u.id===r.id))throw new Error(`Operation schema '${r.id}' is not defined`);const s=await this.attachments.getInstance(t);return!s||s.schemaRef!==r.id?await this.attachments.create(t,{id:t,schemaRef:r.id,data:((l=r.createDefaultConfig)==null?void 0:l.call(r))??{}}):s}getOperationList(){return this.attachments.list()}getOperationSchemaList(){return this.operations}removeOperation(t){return this.attachments.remove(t)}async retrieveTrigger(t){return await this.attachments.getInstance(t)}}class or{constructor(t,r,i){O(this,"operationManager");O(this,"triggerManager");O(this,"attachments");this.operationManager=new Ay(t,i),this.triggerManager=new nu(t,r);const s=async o=>{const{id:l,triggerRef:u,operationRef:d}=await o.getItem(null);return{id:l,triggerRef:u,operationRef:d}};this.attachments=new Sn(t,"__INTERACTIONS",s)}async addInteraction(t,r){const i=t.id,s=r.id,o=`[${i}]:[${s}]`;await this.attachments.create(o,{id:o,triggerRef:i,operationRef:s})}getInteractionList(){return this.attachments.list()}async removeInteraction(t){const r=await this.attachments.getInstance(t);if(!r)return;const{triggerRef:i,operationRef:s}=r;await this.getTriggerRefCount(i)<=1&&await this.triggerManager.removeTrigger(i),await this.getOperationRefCount(s)<=1&&await this.operationManager.removeOperation(s),await this.attachments.remove(t)}async getOperationRefCount(t){return(await this.getInteractionList()).filter(i=>i.operationRef===t).length}async getTriggerRefCount(t){return(await this.getInteractionList()).filter(i=>i.triggerRef===t).length}async runInteraction(t,r){const s=(await this.getInteractionList()).filter(o=>o.triggerRef===t);await Promise.all(s.map(async o=>{try{return await this.operationManager.runOperation(o.operationRef,r)}catch(l){console.warn(`Failed to run operation '${o.operationRef}'`,l)}}))}}const Fe=({vizManager:e,instance:t})=>X.useCreation(()=>new or(t,e.resolveComponent(t.type),nn),[t,e]),is={left:"flex-start",center:"center",right:"flex-end"},$y=({header:e,cx:t})=>{const r=v.get(e.column.columnDef.meta,"align","left");return c(a.Text,{className:t("table-head-cell",{"table-head-cell--sortable":e.column.getCanSort()}),onClick:e.column.getToggleSortingHandler(),align:r,sx:{justifyContent:is[r]},children:[e.isPlaceholder?null:Pe.flexRender(e.column.columnDef.header,e.getContext()),n(zy,{direction:e.column.getIsSorted()})]})},zy=({direction:e})=>{switch(e){case"asc":return n(L.IconArrowUp,{size:16});case"desc":return n(L.IconArrowDown,{size:"1em"});default:return null}},lr={id:"builtin:table:click-cell-content",displayName:"Click Cell Content",nameRender:Vy,configRender:Py,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"}]},Ey={column:""};function as(e){const{value:t}=F(e.instanceData,"config");return t?t.columns.map((r,i)=>({label:r.label,value:i.toString()})):[]}function Ly(e){return v.isEmpty(e)?[]:Object.keys(e[0]).map(t=>({label:t,value:t}))}function Py(e){const t=as(e.instance),r=Ly(e.sampleData),i=t.length>0?t:r,{value:s,set:o}=F(e.trigger.triggerData,"config"),{column:l}=v.defaults({},s,Ey),u=d=>{isNaN(+d)?o({column:d}):o({column:+d})};return n(a.Select,{clearable:!1,data:i,label:"Choose a column",value:l.toString(),onChange:u})}function Oy(e,t){return e?v.isNumber(e.column)?`Click cell of ${t[e.column].label}`:`Click cell of ${e.column}`:"Click cell content (click to config)"}function Vy(e){const t=as(e.instance),{value:r}=F(e.trigger.triggerData,"config");return n(a.Text,{children:Oy(r,t)})}const By=a.createStyles(e=>({root:{overflow:"auto",position:"relative","& .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:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[0]}}},thead:{background:e.colorScheme==="dark"?e.colors.dark[7]:e.white,position:"sticky",top:24,transform:"translateY(-1px)",zIndex:10,"&::after":{content:'" "',display:"block",background:"white",position:"absolute",left:0,right:0,top:0,bottom:0,zIndex:-1}},info_bar:{position:"sticky",top:0,left:0,right:0,zIndex:10,background:"white"}})),Ny={tableLayout:"fixed","th, td":{padding:"2px 10px",div:{overflow:"hidden",textOverflow:"ellipsis"},"&:first-of-type":{paddingLeft:2,paddingRight:2}}};function ss(e,t,r){return Math.min(Math.max(e,t),r)}class Gy{constructor(t){this.steps=t;const r=[],i=new Set;for(const s of t)i.has(s.to)||(r.push(s),i.add(s.to));if(r.sort((s,o)=>s.from-o.from),r.length<2)throw new Error("MultiStepValueMapper requires at least 2 steps");this.steps=r}getLinearFunction(t,r){const i=(r.to-t.to)/(r.from-t.from),s=t.to-i*t.from;return o=>i*o+s}getStepFunctionForValue(t){let r=v.findLastIndex(this.steps,i=>i.from<=t);return r=ss(r,0,this.steps.length-2),this.getLinearFunction(this.steps[r],this.steps[r+1])}mapValue(t){return ss(this.getStepFunctionForValue(t)(t),0,100)}}class qy{constructor(t,r,i,s,o){this.getColIndex=t,this.cell=r,this.triggers=i,this.interactionManager=s,this.colorManager=o}getClickHandler(){const t=this.getRelatedTrigger();if(t.length!==0)return()=>{const r={row_data:this.cell.row.original,row_index:this.cell.row.index,col_index:this.getColIndex(this.cell)};for(const i of t)this.interactionManager.runInteraction(i.id,r)}}getRelatedTrigger(){return this.triggers.filter(r=>r.schemaRef===lr.id).filter(r=>{const i=this.getColIndex(this.cell),s=v.get(this.cell.column.columnDef.meta,"value_field"),o=v.get(r.config,"column");return o==i||o==s})}isClickable(){return this.getRelatedTrigger().length>0}get columnConf(){return this.cell.column.columnDef.meta}get bgColor(){const t=this.columnConf.cellBackgroundColor;if(!t||t==="none")return;if(v.isString(t))return t;const r=+this.cell.getValue();if(isFinite(r)){const i=this.colorManager.decodeInterpolation(t.interpolation),o=new Gy(t.steps).mapValue(r);return i==null?void 0:i.getColor(o)}}}const Fy=a.createStyles((e,t)=>({content:{display:"flex",alignItems:"center",justifyContent:is[t.align],".table-cell-text":{whiteSpace:"nowrap",cursor:t.clickable?"pointer":"default",textDecoration:t.clickable?"underline":"none"}}}));function Wy(e){return e?je(e).oklch()[0]>.7?"black":"white":"inherit"}function jy(e){const t=e.tableCellContext.bgColor;return{backgroundColor:t,color:Wy(t)}}function ft(e){const t=e.tableCellContext.isClickable(),r=Fy({clickable:t,align:e.align});return n("div",{className:r.classes.content,style:{...jy(e)},children:n(a.Text,{className:"table-cell-text",onClick:e.tableCellContext.getClickHandler(),children:n("span",{title:e.children,children:e.children})})})}function Yy(e){return n(ft,{...e,children:e.value})}function Ry(e){const t=H(e.value).format({average:!0,mantissa:2,trimMantissa:!0});return n(ft,{...e,children:t})}function Qy(e){const t=H(e.value).format({thousandSeparated:!0});return n(ft,{...e,children:t})}function Uy(e){const t=H(e.value).format({output:"percent",mantissa:3});return n(ft,{...e,children:t})}function Xy(e){const t=e.value,r=e.func_content;if(!r)return n(ft,{...e,children:t});const i=new Function(`return ${r}`)()({value:t});return n(ft,{...e,children:i})}function Zy(e){switch(e.type){case Oe.string:return n(Yy,{...e});case Oe.eloc:return n(Ry,{...e});case Oe.number:return n(Qy,{...e});case Oe.percentage:return n(Uy,{...e});case Oe.custom:return n(Xy,{...e})}}const Ky=e=>{const t=Fe(e),r=Ge(t.triggerManager,lr.id),{colorManager:i}=m.useContext(qe);return m.useCallback(s=>new qy(e.getColIndex,s,r,t,i),[r,t,e.getColIndex])};function Jy({context:e,instance:t}){var ae,oe;const r=e.data??[],{height:i,width:s}=e.viewport,{value:o=_n}=F(e.instanceData,"config"),{use_raw_columns:l,columns:u,...d}=o,{classes:p,cx:f}=By(),g=m.useMemo(()=>l?!Array.isArray(r)||r.length===0?[]:Object.keys(r[0]).map(re=>({id:re,label:re,value_field:re,value_type:Oe.string,align:"left"})):u,[l,u,r]),h=Ky({getColIndex:m.useCallback(re=>g.indexOf(re.column.columnDef.meta),[g]),vizManager:e.vizManager,instance:t}),y=m.useMemo(()=>{const re=Pe.createColumnHelper();return g.map(ge=>re.accessor(ge.value_field,{cell:Te=>n(Zy,{tableCellContext:h(Te.cell),value:Te.getValue(),type:ge.value_type,...ge}),header:ge.label,enableSorting:!0,meta:ge,size:ge.width,minSize:ge.width}))},[g,h]),[C,w]=m.useState([]),S=Pe.useReactTable({data:r,state:{sorting:C},onSortingChange:w,columns:y,getCoreRowModel:Pe.getCoreRowModel(),getSortedRowModel:Pe.getSortedRowModel()}),{rows:I}=S.getRowModel(),$=m.useRef(null),N=mo.useVirtual({parentRef:$,size:I.length,estimateSize:m.useCallback(()=>28,[]),overscan:20}),{virtualItems:B,totalSize:P}=N,z=B.length>0&&((ae=B==null?void 0:B[0])==null?void 0:ae.start)||0,A=B.length>0?P-(((oe=B==null?void 0:B[B.length-1])==null?void 0:oe.end)||0):0,q=I.length,U=q>0,Q=U?i-22:i,ne=U?22:0;return!Array.isArray(r)||r.length===0?n(a.Text,{color:"gray",align:"center",children:"Empty Data"}):c("div",{ref:$,style:{height:i,width:s},"data-enable-scrollbar":!0,className:f(p.root,{"table-highlight-on-hover":o.highlightOnHover}),children:[q>0&&n(a.Box,{className:p.info_bar,sx:{height:22},children:c(a.Text,{align:"right",pr:6,size:14,color:"dimmed",fw:"normal",children:["Total: ",q]})}),c(a.Table,{sx:{...Ny,maxHeight:Q},...d,striped:o.striped,children:[n("thead",{className:p.thead,style:{top:ne},children:S.getHeaderGroups().map(re=>n("tr",{children:re.headers.map(he=>n("th",{style:{width:he.getSize()},children:n($y,{header:he,cx:f})},he.id))},re.id))}),c("tbody",{children:[z>0&&n("tr",{children:n("td",{style:{height:`${z}px`}})}),B.map(re=>{const he=I[re.index];return n("tr",{children:he.getVisibleCells().map(ge=>n("td",{children:Pe.flexRender(ge.column.columnDef.cell,ge.getContext())},ge.id))},he.id)}),A>0&&n("tr",{children:n("td",{style:{height:`${A}px`}})})]})]})]})}const os=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)"}}}})),Hy=[{from:0,to:0},{from:100,to:100}];class ev{constructor(){O(this,"steps",new Map);O(this,"interpolation");O(this,"onChange");ie.makeAutoObservable(this,{steps:ie.observable},{deep:!1}),ie.reaction(()=>ie.toJS(this.steps),()=>{this.notifyStepChange()})}setSteps(t){for(const r of t)this.steps.set(r.to,r.from)}notifyStepChange(){var t;(t=this.onChange)==null||t.call(this,Array.from(this.steps.entries()).map(([r,i])=>({to:r,from:i})).sort((r,i)=>r.to-i.to||r.from-i.from))}fromProps(t){t.steps.length<2?this.setSteps(Hy):this.setSteps(t.steps),this.interpolation=t.interpolation,this.onChange=t.onChange}changeStep(t,r){t==null?this.steps.delete(r):this.steps.set(r,t)}getStepFromValue(t){return this.steps.get(t)}}function tv(e){const{onChange:t,color:r,index:i,value:s}=e,{classes:o}=os(),[l,u]=m.useState(s),[d,{setTrue:p,setFalse:f}]=X.useBoolean(!1),g=i%2===1,h=g&&s!=null,y=!g&&s!=null,C=`map ${s} to color ${i}`,w=()=>{u(s),f()},S=()=>{f(),t==null||t(l)},I=H(s).format({average:!0});return c("div",{"data-testid":`palette-item-${i}`,className:o.paletteItem,children:[n(a.Text,{title:C,style:{opacity:h?1:0},color:"dimmed",size:"sm",className:"palette-value--up palette-value",children:I}),c(a.Popover,{width:200,trapFocus:!0,opened:d,onClose:f,children:[n(a.Popover.Target,{children:n("div",{"data-testid":"palette-item-target",className:"palette-item",onClick:p,style:{"--shadow-color":je(r).alpha(.5).hex(),backgroundColor:r}})}),n(a.Popover.Dropdown,{children:c(a.Stack,{children:[n(a.NumberInput,{size:"xs",label:"Map a value to this color",value:l,onChange:u}),c(a.Group,{position:"right",children:[n(a.Button,{variant:"subtle",size:"xs",onClick:w,children:"Cancel"}),n(a.Button,{"data-testid":"palette-item-ok",size:"xs",onClick:S,children:"OK"})]})]})})]}),n(a.Text,{title:C,style:{opacity:y?1:0},color:"dimmed",size:"sm",className:"palette-value--bottom palette-value",children:I})]})}const nv=T.observer(({model:e})=>{const{classes:t}=os(),r=v.range(0,13,1).map(i=>100/12*i).map(i=>[e.interpolation.getColor(i),i]);return n("div",{className:t.palette,children:r.map(([i,s],o)=>n(tv,{index:o,color:i,value:e.getStepFromValue(s),onChange:l=>e.changeStep(l,s)},i))})}),rv=T.observer(function(t){const r=X.useCreation(()=>new ev,[]);return m.useEffect(()=>{r.fromProps(t)}),r.interpolation==null?null:n(nv,{model:r})}),iv=e=>{const{value:t,onChange:r,colorManager:i}=e,s=i.getColorInterpolations(),[o,l]=m.useState(t),u=i.decodeInterpolation(o.interpolation)||s[0],[d,{setTrue:p,setFalse:f}]=X.useBoolean(),g=s.map(S=>({label:S.displayName,value:i.encodeColor(S),group:S.category}));function h(S){S&&l(I=>({...I,interpolation:S}))}const y=()=>{f(),r==null||r(ie.toJS(o))};function C(S){l(I=>({...I,steps:S}))}const w=()=>{f(),l(t)};return c(V,{children:[n(a.Button,{variant:"outline",onClick:p,children:u==null?void 0:u.displayName}),n(a.Modal,{size:508,title:"Setup color interpolation",opened:d,onClose:f,zIndex:320,children:d&&c(a.Stack,{"data-testid":"color-interpolation-modal",children:[n(a.Select,{label:"Color style",value:o.interpolation,data:g,onChange:h}),n(rv,{steps:o.steps,interpolation:u,onChange:C}),c(a.Group,{position:"right",children:[n(a.Button,{onClick:w,variant:"subtle",children:"Cancel"}),n(a.Button,{onClick:y,children:"OK"})]})]})})]})},av=["static","interpolation","none"].map(e=>({label:v.capitalize(e),value:e})),sv=[{from:0,to:0},{from:100,to:100}];function ls(e){return e?v.isString(e)?e==="none"?"none":"static":"interpolation":"none"}function ov(e,t){var r;return ls(t)==="static"?t:(r=e.getStaticColors()[0])==null?void 0:r.value}function lv(e,t){return v.isObject(t)?t:{steps:sv,interpolation:e.encodeColor(e.getColorInterpolations()[0])}}const uv=m.forwardRef((e,t)=>{const{colorManager:r}=m.useContext(qe),[i,s]=m.useState(ls(e.value)),[o,l]=m.useState(ov(r,e.value)),u=X.useLatest(o),[d,p]=m.useState(lv(r,e.value)),f=X.useLatest(d),g=C=>{var w,S,I;s(C||"none"),C==="static"?(w=e.onChange)==null||w.call(e,u.current):C==="none"||!C?(S=e.onChange)==null||S.call(e,"none"):(I=e.onChange)==null||I.call(e,f.current)},h=C=>{var w;l(C),(w=e.onChange)==null||w.call(e,C)},y=C=>{var w;p(C),(w=e.onChange)==null||w.call(e,C)};return c(a.Stack,{align:"stretch",children:[n(a.Select,{label:"Cell background",value:i||"none",onChange:g,data:av}),i==="static"&&n(De,{value:o,onChange:h}),i==="interpolation"&&n(iv,{colorManager:r,value:d,onChange:y})]})}),dv={[Oe.eloc]:"ELOC"},cv=Object.values(Oe).map(e=>({label:v.get(dv,e,v.capitalize(e)),value:e})),pv=m.forwardRef(({label:e,value:t,onChange:r,sx:i},s)=>n(a.Select,{ref:s,label:e,data:cv,value:t,onChange:r,sx:i})),hv=m.forwardRef(({value:e,onChange:t},r)=>{const[i,{setTrue:s,setFalse:o}]=X.useBoolean(),[l,u]=m.useState(e),d=()=>{o(),t(l)},p=()=>{o(),u(e)},f=()=>{u(na)};return m.useEffect(()=>{u(e)},[e]),c(V,{children:[n(a.Button,{variant:"filled",mt:24,onClick:s,sx:{flexGrow:0},children:"Custom Cell Content"}),n(a.Modal,{size:800,title:"Custom cell content",opened:i,onClose:o,closeOnClickOutside:!1,withCloseButton:!1,zIndex:320,children:i&&c(a.Stack,{children:[n(a.Box,{sx:{position:"relative"},children:n(_e,{height:"500px",defaultLanguage:"javascript",value:l,onChange:g=>u(g??""),theme:"vs-dark",options:{minimap:{enabled:!1}}})}),c(a.Group,{position:"apart",children:[n(a.Button,{onClick:f,color:"red",leftIcon:n(k.Recycle,{size:20}),children:"Rest"}),c(a.Group,{position:"right",children:[n(a.Button,{onClick:p,variant:"subtle",children:"Cancel"}),n(a.Button,{onClick:d,children:"OK"})]})]})]})})]})}),fv=[{label:"Left",value:"left"},{label:"Center",value:"center"},{label:"Right",value:"right"}],ur=()=>n(a.Text,{color:"dimmed",size:12,children:"px"}),gv=({control:e,index:t,watch:r,remove:i,column:s,data:o})=>{const l=r(`columns.${t}.value_type`);return c(a.Stack,{my:0,sx:{position:"relative"},children:[c(a.Group,{grow:!0,children:[n(x.Controller,{name:`columns.${t}.label`,control:e,render:({field:u})=>n(a.TextInput,{label:"Label",required:!0,id:`col-label-${t}`,sx:{flex:1},...u})}),n(x.Controller,{name:`columns.${t}.value_field`,control:e,render:({field:u})=>n(W,{label:"Value Field",required:!0,data:o,...u})})]}),c(a.Group,{grow:!0,children:[n(x.Controller,{name:`columns.${t}.value_type`,control:e,render:({field:u})=>n(pv,{label:"Value Type",sx:{flex:1},...u})}),l===Oe.custom&&n(x.Controller,{name:`columns.${t}.func_content`,control:e,render:({field:u})=>n(hv,{value:u.value??na,onChange:d=>u.onChange(d??"")})})]}),n(a.Divider,{mb:-10,variant:"dashed",label:"Style",labelPosition:"center"}),c(a.Group,{grow:!0,children:[n(a.NumberInput,{hideControls:!0,label:"Min Width",rightSection:n(ur,{}),disabled:!0}),n(x.Controller,{name:`columns.${t}.width`,control:e,render:({field:u})=>n(a.NumberInput,{hideControls:!0,label:"Width",rightSection:n(ur,{}),...u})}),n(a.NumberInput,{hideControls:!0,label:"Max Width",rightSection:n(ur,{}),disabled:!0})]}),n(a.Group,{grow:!0,noWrap:!0,children:n(x.Controller,{name:`columns.${t}.align`,control:e,render:({field:u})=>n(a.Select,{label:"Alignment",data:fv,...u})})}),n(x.Controller,{name:`columns.${t}.cellBackgroundColor`,control:e,render:({field:u})=>n(uv,{...u})}),n(a.Divider,{mb:4,mt:12,variant:"dashed"}),n(a.Button,{leftIcon:n(k.Trash,{size:16}),color:"red",variant:"light",onClick:()=>i(t),children:"Delete this column"})]})},mv=({control:e,watch:t,data:r})=>{const{fields:i,append:s,remove:o,update:l}=x.useFieldArray({control:e,name:"columns"}),u=()=>{const p=ve.randomId();s({id:p,label:p,value_field:"value",value_type:Oe.string})};t("columns");const d=t("use_raw_columns");return c(V,{children:[n(x.Controller,{name:"use_raw_columns",control:e,render:({field:p})=>n(a.Switch,{mt:20,label:"Use Original Data Columns",checked:p.value,onChange:f=>p.onChange(f.currentTarget.checked)})}),n(a.Divider,{mt:20,mb:10,variant:"dashed"}),!d&&c(a.Stack,{children:[n(a.Text,{my:0,children:"Custom Columns"}),c(a.Tabs,{defaultValue:"0",styles:{tab:{paddingTop:"0px",paddingBottom:"0px"},panel:{padding:"0px",paddingTop:"6px"}},children:[c(a.Tabs.List,{children:[i.map((p,f)=>n(a.Tabs.Tab,{value:f.toString(),children:f+1},p.id)),n(a.Tabs.Tab,{onClick:u,value:"add",children:n(k.Plus,{size:18,color:"#228be6"})})]}),i.map((p,f)=>n(a.Tabs.Panel,{value:f.toString(),children:n(gv,{control:e,watch:t,index:f,column:p,data:r,remove:o},f)},p.id))]})]})]})};function bv({control:e,watch:t,data:r}){return t(["horizontalSpacing","verticalSpacing","fontSize","striped","highlightOnHover"]),c(a.Stack,{spacing:"xs",children:[c(a.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:[n(x.Controller,{name:"horizontalSpacing",control:e,render:({field:i})=>n(a.TextInput,{label:"Horizontal Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1},...i})}),n(x.Controller,{name:"verticalSpacing",control:e,render:({field:i})=>n(a.TextInput,{label:"Vertical Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1},...i})})]}),n(a.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:n(x.Controller,{name:"fontSize",control:e,render:({field:i})=>n(a.TextInput,{label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1},...i})})}),c(a.Group,{position:"apart",grow:!0,children:[n(x.Controller,{name:"striped",control:e,render:({field:i})=>n(a.Switch,{label:"Striped",checked:i.value,onChange:s=>i.onChange(s.currentTarget.checked)})}),n(x.Controller,{name:"highlightOnHover",control:e,render:({field:i})=>n(a.Switch,{label:"Highlight on hover",checked:i.value,onChange:s=>i.onChange(s.currentTarget.checked)})})]})]})}function yv({columns:e,...t}){return{...t,columns:e.map(({id:r,...i})=>({id:r??ve.randomId(),...i}))}}function vv({context:e}){const{value:t,set:r}=F(e.instanceData,"config"),i=e.data,s=m.useMemo(()=>v.defaultsDeep({},t,_n),[t]),o=m.useMemo(()=>yv(s),[s]);m.useEffect(()=>{!v.isEqual(s,o)&&(console.log("config malformed, resetting to defaults",s,o),r(o))},[s,o]);const{control:l,handleSubmit:u,watch:d,getValues:p,reset:f}=x.useForm({defaultValues:o});m.useEffect(()=>{f(o)},[o]);const g=p(),h=m.useMemo(()=>!v.isEqual(g,s),[g,s]);return d(["id_field"]),c("form",{onSubmit:u(r),children:[c(a.Group,{position:"apart",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[n(a.Text,{children:"Table Config"}),n(a.ActionIcon,{type:"submit","aria-label":"save config",mr:5,variant:"filled",color:"blue",disabled:!h,children:n(k.DeviceFloppy,{size:20})})]}),c(a.Tabs,{defaultValue:"Columns",orientation:"vertical",styles:{tab:{paddingLeft:"6px",paddingRight:"6px"},panel:{paddingTop:"6px",paddingLeft:"12px"}},children:[c(a.Tabs.List,{children:[n(a.Tabs.Tab,{value:"Data",children:"Data"}),n(a.Tabs.Tab,{value:"Style",children:"Style"}),n(a.Tabs.Tab,{value:"Columns",children:"Columns"})]}),n(a.Tabs.Panel,{value:"Data",children:n(x.Controller,{name:"id_field",control:l,render:({field:y})=>n(W,{label:"ID Field",required:!0,data:i,...y})})}),n(a.Tabs.Panel,{value:"Style",children:n(bv,{control:l,watch:d,data:i})}),n(a.Tabs.Panel,{value:"Columns",children:n(mv,{control:l,watch:d,data:i})})]})]})}function xv(e){const{columns:t,...r}=e;return{...e,columns:t.map(i=>({...i,align:i.align??"left"}))}}class Cv extends fe{constructor(){super(...arguments);O(this,"VERSION",3)}configVersions(){this.version(1,r=>({version:1,config:r})),this.version(2,r=>{const{columns:i,...s}=r.config;return{...r,version:2,config:{...s,columns:i.map(({id:o,...l})=>({id:o??ve.randomId(),...l}))}}}),this.version(3,r=>({...r,version:3,config:xv(r.config)}))}}const dr={createConfig(){return{version:3,config:v.cloneDeep(_n)}},displayName:"Table",displayGroup:"Others",migrator:new Cv,name:"table",viewRender:Jy,configRender:vv,triggers:[lr]},wv=b.types.model("PanelLayoutModel",{x:b.types.number,y:b.types.maybeNull(b.types.number),w:b.types.number,h:b.types.number,moved:b.types.optional(b.types.boolean,!1),static:b.types.optional(b.types.boolean,!1)}).views(e=>({get json(){const{x:t,y:r,w:i,h:s,moved:o}=e;return{h:s,w:i,x:t,y:r===null?0:r,moved:o,static:e.static}}})).actions(e=>({set(t){const{x:r,y:i,w:s,h:o,moved:l}=t;e.x=r,e.y=i,e.w=s,e.h=o,e.moved=!!l,e.static=!!t.static}})),_v=b.types.model("PanelStyleBorderModel",{enabled:b.types.boolean}).views(e=>({get json(){const{enabled:t}=e;return{enabled:t}}})).actions(e=>({setEnabled(t){e.enabled=t}})),Sv=b.types.model("PanelStyleModel",{border:_v}).views(e=>({get json(){const{border:t}=e;return{border:t.json}}})).actions(e=>({})),Tv=b.types.model("PanelVizModel",{type:b.types.string,conf:b.types.frozen()}).views(e=>({get json(){return{conf:e.conf,type:e.type}}})).actions(e=>({setType(t){e.type=t},setConf(t){e.conf=t}})),us=b.types.model({id:b.types.string,title:b.types.string,description:b.types.string,layout:wv,queryID:b.types.string,viz:Tv,style:Sv,variables:b.types.optional(b.types.array(dl),[])}).views(e=>({get query(){return b.getParentOfType(e,Mt).queries.findByID(e.queryID)},get json(){const{id:t,title:r,description:i,queryID:s}=e;return{id:t,viz:e.viz.json,style:e.style.json,title:r,layout:e.layout.json,queryID:s,variables:e.variables.map(o=>o.json),description:i}}})).actions(e=>({setID(t){e.id=t},setTitle(t){e.title=t},setDescription(t){e.description=t},setQueryID(t){if(b.getParentOfType(e,Mt).queries.findByID(t))e.queryID=t;else throw new Error(`Query with id ${t} does not exist`)},addVariable(t){e.variables.push(t)},removeVariable(t){e.variables.remove(t)},removeSelf(){b.getParent(e,2).removeByID(e.id)}})).actions(e=>({moveToView(t,r){b.getRoot(e).content.views.findByID(t).removePanelID(e.id),b.getRoot(e).content.views.findByID(r).appendPanelID(e.id),b.getRoot(e).editor.setPath(["_VIEWS_",r,"_PANELS_",e.id])}}));function ds(e){return{id:e,layout:{x:0,y:1/0,w:18,h:300},title:e,description:"<p></p>",queryID:"",viz:{type:dr.name,conf:dr.createConfig()},style:{border:{enabled:!0}}}}const cs=b.types.model("PanelsModel",{list:b.types.optional(b.types.array(us),[])}).views(e=>({get json(){return e.list.map(t=>t.json)},findByID(t){return e.list.find(r=>r.id===t)},get idMap(){const t=new Map;return e.list.forEach(r=>{t.set(r.id,r)}),t}})).views(e=>({panelsByIDs(t){const r=[];t.forEach(s=>{const o=e.idMap.get(s);o?r.push(o):console.warn(`Panel is not found, id:${s}`)});const i=r.map(s=>({...s.layout.json,i:s.id}));return{panels:r,layouts:i}}})).views(e=>({editorOptions(t,r){const{panels:i}=e.panelsByIDs(r);i.length!==r.length&&console.warn(`Unfulfilled panels for View[${t}]`);const s=i.map(l=>({label:l.title?l.title:v.capitalize(l.viz.type),value:l.id,_type:"panel",parentID:t})),o="_Add_A_PANEL_";return s.push({label:o,value:o,_type:"ACTION",_action_type:o,parentID:t,Icon:null,children:null}),s}})).actions(e=>({replace(t){e.list=b.castToSnapshot(t)},append(t){e.list.push(t)},remove(t){e.list.splice(t,1)},removeByID(t){const r=e.list.findIndex(i=>i.id===t);r!==-1&&e.list.splice(r,1)},duplicateByID(t){const r=e.list.find(s=>s.id===t);if(!r){console.error(new Error(`[duplicate panel] Can't find a panel by id[${t}]`));return}const i=new Date().getTime().toString();return e.list.push({...r.json,id:i,layout:{...r.layout,y:1/0,moved:!1}}),i},replaceByIndex(t,r){e.list.splice(t,1,r)}}));var ps=(e=>(e.Use="use",e.Edit="edit",e))(ps||{}),K=(e=>(e.Division="div",e.Modal="modal",e.Tabs="tabs",e))(K||{});const kv={div:"Division",tabs:"Tabs",modal:"Modal"},hs={div:"rgba(255, 0, 0, 0.2)",modal:"rgba(0, 0, 0, 0.2)",tabs:"rgba(255, 200, 100, 0.4)"},Dv={div:"#ff4000",modal:"#000",tabs:"#ffad18"},Iv={definition:{sqlSnippets:[],queries:[],mock_context:{}},views:[{id:"Main",name:"Main",type:"div",config:{},panelIDs:[]}],panels:[],filters:[],version:"8.57.0"};var cr=(e=>(e.Select="select",e.TreeSelect="tree-select",e.MultiSelect="multi-select",e.TextInput="text-input",e.Checkbox="checkbox",e.DateRange="date-range",e))(cr||{});const fs=b.types.model("ViewModel_Division",{_name:b.types.literal(K.Division)}).views(e=>({get json(){const{_name:t}=e;return{_name:t}}})).actions(e=>({})),Mv=()=>fs.create({_name:K.Division}),pr={enabled:!1,func_content:["function text({ filters, context}) {"," // your code goes here",' return "text"',"}"].join(`
|
|
469
|
+
`}},show_in_legend:!0}))}function Ob(e,t,r,i){const s=t.data_key,o=t.name,l=r.map(u=>{const d=v.sumBy(i[u],s);return[u,d]});return{type:"line",name:o,xAxisIndex:3,yAxisIndex:3,color:"#b41529",data:l,show_in_legend:!1}}function Vb(e,t,r,i){const l={barMinWidth:5,barMaxWidth:20};return[$b(e,r,i),Eb(e,r,i,l),...Pb(e,r,i,l),Ob(e,t,r,i)]}function Bb(e,t){const{axisLabel:r}=e.x_axis;return[{data:t,id:"准确估算比例",gridIndex:0,axisTick:{show:!1},axisLabel:{show:!1},axisLine:{show:!1},type:"category"},{data:t,id:"平均偏差",gridIndex:1,axisTick:{show:!1},axisLabel:{show:!1},axisLine:{show:!0,lineStyle:{color:"#FFFFFF",width:2}},type:"category"},{data:t,id:"数量占比",gridIndex:2,axisTick:{show:!1},axisLabel:{show:!1},axisLine:{show:!1},type:"category"},{data:t,id:"代码当量",gridIndex:3,axisTick:{show:!1},type:"category",axisLabel:{...r,formatter:Na(r.formatter)},axisLine:{show:!1}}]}function Nb(e){return[{type:"category",name:"准确估算比例",nameRotate:0,nameGap:5,nameLocation:"end",nameTextStyle:{align:"left"},gridIndex:0,axisLabel:{show:!1},axisTick:{show:!1},axisLine:{show:!1},splitLine:{show:!1}},{type:"value",name:"平均偏差",nameGap:5,nameRotate:90,nameLocation:"middle",gridIndex:1,boundaryGap:[1,1],axisLabel:{show:!1},axisTick:{show:!1},axisLine:{show:!1},splitLine:{show:!1}},{type:"value",name:"数量占比",nameGap:5,nameRotate:90,nameLocation:"middle",gridIndex:2,axisLabel:{show:!1},axisTick:{show:!1},axisLine:{show:!1},splitLine:{show:!1},min:0,max:1},{type:"value",gridIndex:3,position:"right",splitNumber:3,axisLabel:{show:!0,verticalAlign:"top",showMinLabel:!1,lineHeight:14},axisTick:{show:!1},axisLine:{show:!1},splitLine:{show:!1}},{type:"value",name:e.name,nameGap:5,nameRotate:90,nameLocation:"middle",gridIndex:3,position:"left",axisLabel:{show:!1},axisTick:{show:!1},axisLine:{show:!1},splitLine:{show:!1}}]}function ir(e){return e==1||e==2?1:ir(e-2)+ir(e-1)}const Gb=Array.from(new Array(20),(e,t)=>ir(t+1));function ns(e){return e<=1?e:Gb.findIndex(t=>e<=t)-1}function qb(e,t){const{estimated_value:r,actual_value:i}=e.deviation.data_keys;return t.map(s=>{const o=ns(s[r]),l=ns(s[i]),u=o-l;return{...s,level:{estimated:o,actual:l,diff:u}}})}function Fb(e){return e==="rgba(255, 255, 255, 1)"?{borderColor:"rgba(0,0,0,.1)",borderWidth:1}:{}}function Wb(e){return{show:!0,orient:"vertical",top:"middle",right:0,data:e.filter(r=>r.show_in_legend).reverse().map(r=>({name:`${r.name}`,color:r.color,itemStyle:Fb(r.color)})),tooltip:{show:!0,formatter:"档位偏差:{a}"}}}const jb={tooltip:{trigger:"axis"}};function Yb(e,t){const{deviation:r,metrics:i}=e,s=i.find(l=>l.data_key===t);if(s)return s;const o=r.data_keys.actual_value;return{id:o,name:r.name,data_key:o}}function Rb(e,t,r){const i=qb(e,r),s=v.uniqBy(r,e.x_axis.data_key).map(p=>p[e.x_axis.data_key]),o=v.groupBy(i,e.x_axis.data_key),l=Yb(e,t),u=Vb(e,l,s,o),d={xAxis:Bb(e,s),yAxis:Nb(l),series:u,grid:Ab(),visualMap:[{min:0,max:1,calculable:!0,show:!1,seriesIndex:0,color:["#F0F0F0","#418AAF"]}],legend:Wb(u)};return v.defaultsDeep({},d,jb)}const ar={x_axis:{name:"",data_key:"",axisLabel:{rotate:0,formatter:{...Jt}}},deviation:{name:"",data_keys:{estimated_value:"",actual_value:""}},metrics:[]},Qb={input:{border:"none !important",paddingLeft:0,lineHeight:"1.55 !important"}},Ub=({conf:e,metricKey:t,setMetricKey:r})=>{const{deviation:i,metrics:s}=e,o=m.useMemo(()=>{const l=s.map(u=>({label:u.name,value:u.data_key}));return l.push({label:i.name?i.name:i.data_keys.actual_value,value:i.data_keys.actual_value}),l},[i,s]);return c(a.Group,{spacing:1,children:[n(a.Text,{size:12,color:"dimmed",sx:{cursor:"default",userSelect:"none"},children:"基线指标"}),n(a.NativeSelect,{size:"xs",data:o,value:t,onChange:l=>r(l.currentTarget.value),styles:Qb})]})},Xb={"tbody th, tbody td":{padding:"7px 10px"},"tbody tr:not(:first-of-type) th":{borderTop:"1px solid #dee2e6"}};function Zb(){return c(a.HoverCard,{width:400,shadow:"md",children:[n(a.HoverCard.Target,{children:n(a.Button,{size:"xs",variant:"subtle",compact:!0,leftIcon:n(L.IconInfoCircle,{size:14}),children:"指标说明"})}),n(a.HoverCard.Dropdown,{children:n(a.Table,{fontSize:14,sx:Xb,children:c("tbody",{children:[c("tr",{children:[n("th",{children:"估算偏差"}),n("td",{children:"使用斐波那契数列(1,2,3,5,8,13)估算故事点,每个数位为一个档位,计算issue实际故事点与估算故事点的档位偏差,即为估算偏差。如估算故事点为5,实际故事点为8,则估算偏差为-1。"})]}),c("tr",{children:[n("th",{children:"准确估算比例"}),n("td",{children:"偏差在 ± 1 档位内的 issue 均为准确估算,以此计算准确估算的比例。"})]})]})})})]})}function Kb(e){return c(a.Group,{position:"apart",children:[n(Zb,{}),n(Ub,{...e})]})}le.use([de.BarChart,de.LineChart,de.HeatmapChart,G.GridComponent,G.LegendComponent,G.TooltipComponent,Me.CanvasRenderer,G.VisualMapComponent]);function Jb({conf:e,data:t,width:r,height:i,metricKey:s}){const o=m.useMemo(()=>Rb(e,s,t),[e,t,s]);return!r||!i?null:n(Ae,{echarts:le,option:o,style:{width:r,height:i},notMerge:!0,theme:"merico-light"})}function Hb({context:e}){const{value:t}=F(e.instanceData,"config"),r=m.useMemo(()=>v.defaults({},t,ar),[t]),i=e.data,{width:s,height:o}=e.viewport,{x_axis:l,deviation:u}=r,{estimated_value:d,actual_value:p}=u.data_keys,[f,g]=m.useState(p);if(m.useEffect(()=>{g(C=>C||p)},[p]),!l.data_key||!d||!p)return null;const h=Math.max(s,300),y=Math.max(o,370);return c(a.Box,{sx:{overflow:"hidden",height:y,width:h},children:[n(Kb,{conf:r,metricKey:f,setMetricKey:g}),n(Jb,{width:h,height:y-30,data:i,conf:r,metricKey:f})]})}function ey({data:e,control:t,watch:r}){return r(["x_axis"]),c(a.Stack,{children:[c(a.Group,{grow:!0,noWrap:!0,children:[n(x.Controller,{name:"x_axis.data_key",control:t,render:({field:i})=>n(W,{label:"数据字段",required:!0,data:e,sx:{flex:1},...i})}),n(x.Controller,{name:"x_axis.name",control:t,render:({field:i})=>n(a.TextInput,{label:"X轴名称",sx:{flex:1},...i})})]}),n(a.Divider,{mb:-15,label:"点位文案",labelPosition:"center"}),c(a.Group,{grow:!0,noWrap:!0,children:[n(x.Controller,{name:"x_axis.axisLabel.rotate",control:t,render:({field:i})=>n(a.NumberInput,{label:"旋转",hideControls:!0,min:-90,max:90,rightSection:n(a.Text,{color:"dimmed",children:"度"}),sx:{width:"48%"},styles:{rightSection:{width:"4em",justifyContent:"flex-end",paddingRight:"6px"}},...i})}),n(x.Controller,{name:"x_axis.axisLabel.formatter",control:t,render:({field:i})=>n(Fa,{data:e,...i})})]})]})}function ty({data:e,control:t,watch:r}){return r(["deviation"]),c(a.Stack,{children:[n(a.Group,{grow:!0,noWrap:!0,children:n(x.Controller,{name:"deviation.name",control:t,render:({field:i})=>n(a.TextInput,{label:"指标名称",sx:{flex:1},...i})})}),c(a.Group,{grow:!0,noWrap:!0,children:[n(x.Controller,{name:"deviation.data_keys.estimated_value",control:t,render:({field:i})=>n(W,{label:"估算值字段",required:!0,data:e,sx:{flex:1},...i})}),n(x.Controller,{name:"deviation.data_keys.actual_value",control:t,render:({field:i})=>n(W,{label:"实际值字段",required:!0,data:e,sx:{flex:1},...i})})]})]})}const ny=({control:e,data:t,index:r,remove:i})=>c(a.Stack,{children:[c(a.Group,{grow:!0,noWrap:!0,children:[n(x.Controller,{name:`metrics.${r}.name`,control:e,render:({field:s})=>n(a.TextInput,{label:"Name",required:!0,sx:{flex:1},...s})}),n(x.Controller,{name:`metrics.${r}.data_key`,control:e,render:({field:s})=>n(W,{label:"Value Field",required:!0,data:t,sx:{flex:1},...s})})]}),n(a.Divider,{mb:-10,mt:10,variant:"dashed"}),n(a.Button,{leftIcon:n(k.Trash,{size:16}),color:"red",variant:"light",onClick:()=>i(r),sx:{top:15,right:5},children:"Delete this Metric"})]}),ry=({control:e,watch:t,data:r})=>{const{fields:i,append:s,remove:o}=x.useFieldArray({control:e,name:"metrics"}),l=t("metrics"),u=i.map((h,y)=>({...h,...l[y]})),d=()=>s({id:Date.now().toString(),data_key:"",name:""}),p=t("metrics.0.id"),[f,g]=m.useState(()=>p??null);return m.useEffect(()=>{p&&g(h=>h!==null?h:p)},[p]),c(V,{children:[c(a.Group,{spacing:2,sx:{cursor:"default",userSelect:"none"},children:[n(k.InfoCircle,{size:14,color:"#888"}),n(a.Text,{size:14,color:"#888",children:"设置可以展示在基线图的指标,例如代码当量"})]}),n(a.Divider,{variant:"dashed",my:10}),c(a.Tabs,{value:f,onTabChange:h=>g(h),styles:{tab:{paddingTop:"0px",paddingBottom:"0px"},panel:{padding:"0px",paddingTop:"6px"}},children:[c(a.Tabs.List,{children:[u.map((h,y)=>n(a.Tabs.Tab,{value:h.id,children:h.name?h.name:y},h.id)),n(a.Tabs.Tab,{onClick:d,value:"add",children:n(k.Plus,{size:18,color:"#228be6"})})]}),u.map((h,y)=>n(a.Tabs.Panel,{value:h.id,children:n(ny,{control:e,index:y,remove:o,data:r},h.id)},h.id))]})]})};function iy({context:e}){const{value:t,set:r}=F(e.instanceData,"config"),i=e.data,s=m.useMemo(()=>v.defaultsDeep({},t,ar),[t]),{control:o,handleSubmit:l,watch:u,getValues:d,reset:p}=x.useForm({defaultValues:s});m.useEffect(()=>{p(s)},[s]),u([]);const f=d(),g=m.useMemo(()=>!v.isEqual(f,s),[f,s]);return n(a.Stack,{spacing:"xs",children:c("form",{onSubmit:l(r),children:[c(a.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[n(a.Text,{children:"Merico Estimation Chart Config"}),n(a.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!g,children:n(k.DeviceFloppy,{size:20})})]}),c(a.Tabs,{defaultValue:"X Axis",orientation:"vertical",styles:{tab:{paddingLeft:"6px",paddingRight:"12px"},panel:{paddingTop:"6px",paddingLeft:"12px"}},children:[c(a.Tabs.List,{children:[n(a.Tabs.Tab,{value:"X Axis",children:"X 轴"}),n(a.Tabs.Tab,{value:"Deviation",children:"偏差"}),n(a.Tabs.Tab,{value:"Additional Metrics",children:"指标"})]}),n(a.Tabs.Panel,{value:"X Axis",children:n(ey,{control:o,watch:u,data:i})}),n(a.Tabs.Panel,{value:"Deviation",children:n(ty,{control:o,watch:u,data:i})}),n(a.Tabs.Panel,{value:"Additional Metrics",children:n(ry,{control:o,watch:u,data:i})})]})]})})}class ay extends fe{constructor(){super(...arguments);O(this,"VERSION",1)}configVersions(){this.version(1,r=>({version:1,config:r}))}}const sy={displayName:"Merico Estimation Chart",displayGroup:"Merico suite",migrator:new ay,name:"mericoEstimationChart",viewRender:Hb,configRender:iy,createConfig:()=>({version:1,config:ar})},oy=[{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(e=>({name:e.name,value:e.value,type:"single",category:"basic"})),ly=[yl,vl,wl,Cl,xl,_l],rs=()=>({id:"dashboard",version:kn,manifest:{viz:[dr,Pg,um,ff,nm,yh,Mb,zl,Xu,rp,$p,jm,uh,Pc,_g,Lh,uf,bm,sy,ud],color:[...oy,...ly]}}),It=new Dl,be={pluginManager:Ye("pluginManager"),vizManager:Ye("vizManager"),colorManager:Ye("colorManager"),instanceScope:{panelModel:Ye("panelModel"),vizInstance:Ye("vizInstance"),interactionManager:Ye("interactionManager"),migrator:Ye("migrator"),operationManager:Ye("operationManager"),triggerManager:Ye("triggerManager")}},sr=()=>{try{It.install(rs())}catch{}const e=new gl(It),t=new kl(It);return{pluginManager:It,vizManager:e,colorManager:t}},qe=m.createContext(sr());try{It.install(rs())}catch{}function uy(e,t){const{value:r,set:i}=F(e.operation.operationData,"config"),[s,o]=m.useState(v.defaults({},r,t)),l=async()=>{await i(s)};return m.useEffect(()=>{o(v.defaults({},r,t))},[r]),{config:s,setConfig:o,commit:l}}function dy(e){const{config:t,setConfig:r,commit:i}=uy(e,{urlTemplate:"",openInNewTab:!0});async function s(){await i()}async function o(u){r({...t,openInNewTab:u}),await i()}const l=u=>r({...t,urlTemplate:u.currentTarget.value});return c(a.Stack,{children:[n(a.TextInput,{label:"Url",value:t.urlTemplate,onChange:l,onBlur:s}),n(a.Switch,{label:"Open in new Tab",checked:t.openInNewTab,onChange:u=>o(u.currentTarget.checked)})]})}async function cy(e,t){const{urlTemplate:r,openInNewTab:i}=await t.operationData.getItem("config");window.dispatchEvent(new CustomEvent("open-link",{detail:{urlTemplate:r,openInNewTab:i,payload:e}}))}class py extends fe{constructor(){super(...arguments);O(this,"VERSION",1)}configVersions(){this.version(1,r=>r)}}const hy={displayName:"Open Link",id:"builtin:op:open-link",configRender:dy,run:cy,migrator:new py,createDefaultConfig:()=>({version:1,config:{urlTemplate:"",openInNewTab:!0}})};function fy(e){const{value:t,set:r}=F(e.operationData,"config"),i=s=>void r({template:s});return[(t==null?void 0:t.template)||"",i]}function gy(e){const[t,r]=fy(e.operation);return n(a.TextInput,{defaultValue:t,onBlur:i=>r(i.currentTarget.value),label:"console.log"})}async function my(e,t){const r=await t.operationData.getItem("config"),i=v.template(r.template||"");console.log("run with payload",e),console.log(i(e))}const by={displayName:"console.log (debug)",id:"builtin:op:debug",configRender:gy,run:my},yy=T.observer(e=>{const t=Y(),{value:r,set:i}=F(e.operation.operationData,"config");console.log({value:r,viewID:r==null?void 0:r.viewID});const s=(r==null?void 0:r.viewID)||"",o=l=>void i({viewID:l});return n(a.Select,{defaultValue:s,value:s,onChange:o,label:"View",data:t.views.options})});async function vy(e,t){const i=(await t.operationData.getItem("config")).viewID;window.dispatchEvent(new CustomEvent("open-view",{detail:{viewID:i}}))}const xy={displayName:"Open View",id:"builtin:op:open_view",configRender:yy,run:vy},Cy={"tbody tr":{opacity:.5,transition:"opacity 200ms ease"},"tr[data-affected=true]":{opacity:1}},wy=({value:e="",onChange:t})=>{const[r,i]=m.useState(e);m.useEffect(()=>{i(e)},[e]);const s=()=>{t(r)};return n(a.TextInput,{size:"xs",label:"",value:r,onChange:o=>i(o.currentTarget.value),sx:{flexGrow:1},rightSection:n(a.ActionIcon,{color:"green",size:"xs",onClick:s,disabled:r===e,children:n(L.IconDeviceFloppy,{})})})},_y={dictionary:{}},Sy=T.observer(e=>{const t=Y(),{value:r=_y,set:i}=F(e.operation.operationData,"config"),{dictionary:s={}}=r;console.log({value:{...r},dictionary:{...s},filters:[...t.filters.keyLabelOptions]});const o=(l,u)=>{if(u===""){const d={...s};delete d[l],i({dictionary:d});return}i({dictionary:{...s,[l]:u}})};return c(a.Table,{sx:Cy,children:[n("thead",{children:c("tr",{children:[n("th",{children:"Set filter"}),n("th",{children:"with"})]})}),n("tbody",{children:[...t.filters.keyLabelOptions].map(l=>{const u=l.value in s;return c("tr",{"data-affected":u,children:[n("td",{children:l.label}),n("td",{children:n(wy,{value:s[l.value],onChange:d=>o(l.value,d)})})]},l.value)})})]})});async function Ty(e,t){const i=(await t.operationData.getItem("config")).dictionary;window.dispatchEvent(new CustomEvent("set-filter-values",{detail:{dictionary:i,payload:e}}))}const ky={displayName:"Set Filter Values",id:"builtin:op:set_filter_values",configRender:Sy,run:Ty},Dy={filter_keys:[]},Iy=T.observer(e=>{const t=Y(),{value:r=Dy,set:i}=F(e.operation.operationData,"config"),{filter_keys:s=[]}=r,o=u=>{i({filter_keys:[...u]})},l=m.useMemo(()=>t.filters.current.map(u=>({label:u.label,value:u.key})),[t.filters.values]);return n(a.Stack,{spacing:10,children:n(a.MultiSelect,{label:"Select Filters to Clear",data:l,value:s,onChange:o})})});async function My(e,t){const i=(await t.operationData.getItem("config")).filter_keys;window.dispatchEvent(new CustomEvent("clear-filter-values",{detail:{filter_keys:i,payload:e}}))}const nn=[by,hy,xy,ky,{displayName:"Clear Filter Values",id:"builtin:op:clear_filter_values",configRender:Iy,run:My}];class Ay{constructor(t,r=nn){O(this,"attachments");this.operations=r;const i=async s=>{const{id:o,schemaRef:l}=await s.getItem(null);return{id:o,schemaRef:l,operationData:new ut(s,"data")}};this.attachments=new Sn(t,"__OPERATIONS",i)}async runOperation(t,r){const i=await this.attachments.getInstance(t);if(!i){console.warn(`Operation '${t}' is not defined`);return}const s=this.tryGetSchema(i.schemaRef);if(!s){console.warn(`Operation schema '${i.schemaRef}' is not defined`);return}await s.run(r,i)}tryGetSchema(t){return this.operations.find(r=>r.id===t)}async needMigration(){const r=(await this.attachments.list()).map(async i=>{const s={configData:i.operationData},o=this.tryGetSchema(i.schemaRef),l=o==null?void 0:o.migrator;return l&&await l.needMigration(s)});return(await Promise.all(r)).some(i=>i)}async runMigration(){const r=(await this.attachments.list()).map(async i=>{const s={configData:i.operationData},o=this.tryGetSchema(i.schemaRef),l=o==null?void 0:o.migrator;l&&await l.needMigration(s)&&await l.migrate(s)});await Promise.all(r)}async createOrGetOperation(t,r){var l;if(!this.getOperationSchemaList().some(u=>u.id===r.id))throw new Error(`Operation schema '${r.id}' is not defined`);const s=await this.attachments.getInstance(t);return!s||s.schemaRef!==r.id?await this.attachments.create(t,{id:t,schemaRef:r.id,data:((l=r.createDefaultConfig)==null?void 0:l.call(r))??{}}):s}getOperationList(){return this.attachments.list()}getOperationSchemaList(){return this.operations}removeOperation(t){return this.attachments.remove(t)}async retrieveTrigger(t){return await this.attachments.getInstance(t)}}class or{constructor(t,r,i){O(this,"operationManager");O(this,"triggerManager");O(this,"attachments");this.operationManager=new Ay(t,i),this.triggerManager=new nu(t,r);const s=async o=>{const{id:l,triggerRef:u,operationRef:d}=await o.getItem(null);return{id:l,triggerRef:u,operationRef:d}};this.attachments=new Sn(t,"__INTERACTIONS",s)}async addInteraction(t,r){const i=t.id,s=r.id,o=`[${i}]:[${s}]`;await this.attachments.create(o,{id:o,triggerRef:i,operationRef:s})}getInteractionList(){return this.attachments.list()}async removeInteraction(t){const r=await this.attachments.getInstance(t);if(!r)return;const{triggerRef:i,operationRef:s}=r;await this.getTriggerRefCount(i)<=1&&await this.triggerManager.removeTrigger(i),await this.getOperationRefCount(s)<=1&&await this.operationManager.removeOperation(s),await this.attachments.remove(t)}async getOperationRefCount(t){return(await this.getInteractionList()).filter(i=>i.operationRef===t).length}async getTriggerRefCount(t){return(await this.getInteractionList()).filter(i=>i.triggerRef===t).length}async runInteraction(t,r){const s=(await this.getInteractionList()).filter(o=>o.triggerRef===t);await Promise.all(s.map(async o=>{try{return await this.operationManager.runOperation(o.operationRef,r)}catch(l){console.warn(`Failed to run operation '${o.operationRef}'`,l)}}))}}const Fe=({vizManager:e,instance:t})=>X.useCreation(()=>new or(t,e.resolveComponent(t.type),nn),[t,e]),is={left:"flex-start",center:"center",right:"flex-end"},$y=({header:e,cx:t})=>{const r=v.get(e.column.columnDef.meta,"align","left");return c(a.Text,{className:t("table-head-cell",{"table-head-cell--sortable":e.column.getCanSort()}),onClick:e.column.getToggleSortingHandler(),align:r,sx:{justifyContent:is[r]},children:[e.isPlaceholder?null:Pe.flexRender(e.column.columnDef.header,e.getContext()),n(zy,{direction:e.column.getIsSorted()})]})},zy=({direction:e})=>{switch(e){case"asc":return n(L.IconArrowUp,{size:16});case"desc":return n(L.IconArrowDown,{size:"1em"});default:return null}},lr={id:"builtin:table:click-cell-content",displayName:"Click Cell Content",nameRender:Vy,configRender:Py,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"}]},Ey={column:""};function as(e){const{value:t}=F(e.instanceData,"config");return t?t.columns.map((r,i)=>({label:r.label,value:i.toString()})):[]}function Ly(e){return v.isEmpty(e)?[]:Object.keys(e[0]).map(t=>({label:t,value:t}))}function Py(e){const t=as(e.instance),r=Ly(e.sampleData),i=t.length>0?t:r,{value:s,set:o}=F(e.trigger.triggerData,"config"),{column:l}=v.defaults({},s,Ey),u=d=>{isNaN(+d)?o({column:d}):o({column:+d})};return n(a.Select,{clearable:!1,data:i,label:"Choose a column",value:l.toString(),onChange:u})}function Oy(e,t){return e?v.isNumber(e.column)?`Click cell of ${t[e.column].label}`:`Click cell of ${e.column}`:"Click cell content (click to config)"}function Vy(e){const t=as(e.instance),{value:r}=F(e.trigger.triggerData,"config");return n(a.Text,{children:Oy(r,t)})}const By=a.createStyles(e=>({root:{overflow:"auto",position:"relative","& .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:e.colorScheme==="dark"?e.colors.dark[5]:e.colors.gray[0]}}},thead:{background:e.colorScheme==="dark"?e.colors.dark[7]:e.white,position:"sticky",top:24,transform:"translateY(-1px)",zIndex:10},info_bar:{position:"sticky",top:0,left:0,right:0,zIndex:10,background:"white"}})),Ny={tableLayout:"fixed","th, td":{padding:"2px 10px",div:{overflow:"hidden",textOverflow:"ellipsis"},"&:first-of-type":{paddingLeft:2,paddingRight:2}}};function ss(e,t,r){return Math.min(Math.max(e,t),r)}class Gy{constructor(t){this.steps=t;const r=[],i=new Set;for(const s of t)i.has(s.to)||(r.push(s),i.add(s.to));if(r.sort((s,o)=>s.from-o.from),r.length<2)throw new Error("MultiStepValueMapper requires at least 2 steps");this.steps=r}getLinearFunction(t,r){const i=(r.to-t.to)/(r.from-t.from),s=t.to-i*t.from;return o=>i*o+s}getStepFunctionForValue(t){let r=v.findLastIndex(this.steps,i=>i.from<=t);return r=ss(r,0,this.steps.length-2),this.getLinearFunction(this.steps[r],this.steps[r+1])}mapValue(t){return ss(this.getStepFunctionForValue(t)(t),0,100)}}class qy{constructor(t,r,i,s,o){this.getColIndex=t,this.cell=r,this.triggers=i,this.interactionManager=s,this.colorManager=o}getClickHandler(){const t=this.getRelatedTrigger();if(t.length!==0)return()=>{const r={row_data:this.cell.row.original,row_index:this.cell.row.index,col_index:this.getColIndex(this.cell)};for(const i of t)this.interactionManager.runInteraction(i.id,r)}}getRelatedTrigger(){return this.triggers.filter(r=>r.schemaRef===lr.id).filter(r=>{const i=this.getColIndex(this.cell),s=v.get(this.cell.column.columnDef.meta,"value_field"),o=v.get(r.config,"column");return o==i||o==s})}isClickable(){return this.getRelatedTrigger().length>0}get columnConf(){return this.cell.column.columnDef.meta}get bgColor(){const t=this.columnConf.cellBackgroundColor;if(!t||t==="none")return;if(v.isString(t))return t;const r=+this.cell.getValue();if(isFinite(r)){const i=this.colorManager.decodeInterpolation(t.interpolation),o=new Gy(t.steps).mapValue(r);return i==null?void 0:i.getColor(o)}}}const Fy=a.createStyles((e,t)=>({content:{display:"flex",alignItems:"center",justifyContent:is[t.align],".table-cell-text":{whiteSpace:"nowrap",cursor:t.clickable?"pointer":"default",textDecoration:t.clickable?"underline":"none"}}}));function Wy(e){return e?je(e).oklch()[0]>.7?"black":"white":"inherit"}function jy(e){const t=e.tableCellContext.bgColor;return{backgroundColor:t,color:Wy(t)}}function ft(e){const t=e.tableCellContext.isClickable(),r=Fy({clickable:t,align:e.align});return n("div",{className:r.classes.content,style:{...jy(e)},children:n(a.Text,{className:"table-cell-text",onClick:e.tableCellContext.getClickHandler(),children:n("span",{title:e.children,children:e.children})})})}function Yy(e){return n(ft,{...e,children:e.value})}function Ry(e){const t=H(e.value).format({average:!0,mantissa:2,trimMantissa:!0});return n(ft,{...e,children:t})}function Qy(e){const t=H(e.value).format({thousandSeparated:!0});return n(ft,{...e,children:t})}function Uy(e){const t=H(e.value).format({output:"percent",mantissa:3});return n(ft,{...e,children:t})}function Xy(e){const t=e.value,r=e.func_content;if(!r)return n(ft,{...e,children:t});const i=new Function(`return ${r}`)()({value:t});return n(ft,{...e,children:i})}function Zy(e){switch(e.type){case Oe.string:return n(Yy,{...e});case Oe.eloc:return n(Ry,{...e});case Oe.number:return n(Qy,{...e});case Oe.percentage:return n(Uy,{...e});case Oe.custom:return n(Xy,{...e})}}const Ky=e=>{const t=Fe(e),r=Ge(t.triggerManager,lr.id),{colorManager:i}=m.useContext(qe);return m.useCallback(s=>new qy(e.getColIndex,s,r,t,i),[r,t,e.getColIndex])};function Jy({context:e,instance:t}){var ae,oe;const r=e.data??[],{height:i,width:s}=e.viewport,{value:o=_n}=F(e.instanceData,"config"),{use_raw_columns:l,columns:u,...d}=o,{classes:p,cx:f}=By(),g=m.useMemo(()=>l?!Array.isArray(r)||r.length===0?[]:Object.keys(r[0]).map(re=>({id:re,label:re,value_field:re,value_type:Oe.string,align:"left"})):u,[l,u,r]),h=Ky({getColIndex:m.useCallback(re=>g.indexOf(re.column.columnDef.meta),[g]),vizManager:e.vizManager,instance:t}),y=m.useMemo(()=>{const re=Pe.createColumnHelper();return g.map(ge=>re.accessor(ge.value_field,{cell:Te=>n(Zy,{tableCellContext:h(Te.cell),value:Te.getValue(),type:ge.value_type,...ge}),header:ge.label,enableSorting:!0,meta:ge,size:ge.width,minSize:ge.width}))},[g,h]),[C,w]=m.useState([]),S=Pe.useReactTable({data:r,state:{sorting:C},onSortingChange:w,columns:y,getCoreRowModel:Pe.getCoreRowModel(),getSortedRowModel:Pe.getSortedRowModel()}),{rows:I}=S.getRowModel(),$=m.useRef(null),N=mo.useVirtual({parentRef:$,size:I.length,estimateSize:m.useCallback(()=>28,[]),overscan:20}),{virtualItems:B,totalSize:P}=N,z=B.length>0&&((ae=B==null?void 0:B[0])==null?void 0:ae.start)||0,A=B.length>0?P-(((oe=B==null?void 0:B[B.length-1])==null?void 0:oe.end)||0):0,q=I.length,U=q>0,Q=U?i-22:i,ne=U?22:0;return!Array.isArray(r)||r.length===0?n(a.Text,{color:"gray",align:"center",children:"Empty Data"}):c("div",{ref:$,style:{height:i,width:s},"data-enable-scrollbar":!0,className:f(p.root,{"table-highlight-on-hover":o.highlightOnHover}),children:[q>0&&n(a.Box,{className:p.info_bar,sx:{height:22},children:c(a.Text,{align:"right",pr:6,size:14,color:"dimmed",fw:"normal",children:["Total: ",q]})}),c(a.Table,{sx:{...Ny,maxHeight:Q},...d,striped:o.striped,children:[n("thead",{className:p.thead,style:{top:ne},children:S.getHeaderGroups().map(re=>n("tr",{children:re.headers.map(he=>n("th",{style:{width:he.getSize()},children:n($y,{header:he,cx:f})},he.id))},re.id))}),c("tbody",{children:[z>0&&n("tr",{children:n("td",{style:{height:`${z}px`}})}),B.map(re=>{const he=I[re.index];return n("tr",{children:he.getVisibleCells().map(ge=>n("td",{children:Pe.flexRender(ge.column.columnDef.cell,ge.getContext())},ge.id))},he.id)}),A>0&&n("tr",{children:n("td",{style:{height:`${A}px`}})})]})]})]})}const os=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)"}}}})),Hy=[{from:0,to:0},{from:100,to:100}];class ev{constructor(){O(this,"steps",new Map);O(this,"interpolation");O(this,"onChange");ie.makeAutoObservable(this,{steps:ie.observable},{deep:!1}),ie.reaction(()=>ie.toJS(this.steps),()=>{this.notifyStepChange()})}setSteps(t){for(const r of t)this.steps.set(r.to,r.from)}notifyStepChange(){var t;(t=this.onChange)==null||t.call(this,Array.from(this.steps.entries()).map(([r,i])=>({to:r,from:i})).sort((r,i)=>r.to-i.to||r.from-i.from))}fromProps(t){t.steps.length<2?this.setSteps(Hy):this.setSteps(t.steps),this.interpolation=t.interpolation,this.onChange=t.onChange}changeStep(t,r){t==null?this.steps.delete(r):this.steps.set(r,t)}getStepFromValue(t){return this.steps.get(t)}}function tv(e){const{onChange:t,color:r,index:i,value:s}=e,{classes:o}=os(),[l,u]=m.useState(s),[d,{setTrue:p,setFalse:f}]=X.useBoolean(!1),g=i%2===1,h=g&&s!=null,y=!g&&s!=null,C=`map ${s} to color ${i}`,w=()=>{u(s),f()},S=()=>{f(),t==null||t(l)},I=H(s).format({average:!0});return c("div",{"data-testid":`palette-item-${i}`,className:o.paletteItem,children:[n(a.Text,{title:C,style:{opacity:h?1:0},color:"dimmed",size:"sm",className:"palette-value--up palette-value",children:I}),c(a.Popover,{width:200,trapFocus:!0,opened:d,onClose:f,children:[n(a.Popover.Target,{children:n("div",{"data-testid":"palette-item-target",className:"palette-item",onClick:p,style:{"--shadow-color":je(r).alpha(.5).hex(),backgroundColor:r}})}),n(a.Popover.Dropdown,{children:c(a.Stack,{children:[n(a.NumberInput,{size:"xs",label:"Map a value to this color",value:l,onChange:u}),c(a.Group,{position:"right",children:[n(a.Button,{variant:"subtle",size:"xs",onClick:w,children:"Cancel"}),n(a.Button,{"data-testid":"palette-item-ok",size:"xs",onClick:S,children:"OK"})]})]})})]}),n(a.Text,{title:C,style:{opacity:y?1:0},color:"dimmed",size:"sm",className:"palette-value--bottom palette-value",children:I})]})}const nv=T.observer(({model:e})=>{const{classes:t}=os(),r=v.range(0,13,1).map(i=>100/12*i).map(i=>[e.interpolation.getColor(i),i]);return n("div",{className:t.palette,children:r.map(([i,s],o)=>n(tv,{index:o,color:i,value:e.getStepFromValue(s),onChange:l=>e.changeStep(l,s)},i))})}),rv=T.observer(function(t){const r=X.useCreation(()=>new ev,[]);return m.useEffect(()=>{r.fromProps(t)}),r.interpolation==null?null:n(nv,{model:r})}),iv=e=>{const{value:t,onChange:r,colorManager:i}=e,s=i.getColorInterpolations(),[o,l]=m.useState(t),u=i.decodeInterpolation(o.interpolation)||s[0],[d,{setTrue:p,setFalse:f}]=X.useBoolean(),g=s.map(S=>({label:S.displayName,value:i.encodeColor(S),group:S.category}));function h(S){S&&l(I=>({...I,interpolation:S}))}const y=()=>{f(),r==null||r(ie.toJS(o))};function C(S){l(I=>({...I,steps:S}))}const w=()=>{f(),l(t)};return c(V,{children:[n(a.Button,{variant:"outline",onClick:p,children:u==null?void 0:u.displayName}),n(a.Modal,{size:508,title:"Setup color interpolation",opened:d,onClose:f,zIndex:320,children:d&&c(a.Stack,{"data-testid":"color-interpolation-modal",children:[n(a.Select,{label:"Color style",value:o.interpolation,data:g,onChange:h}),n(rv,{steps:o.steps,interpolation:u,onChange:C}),c(a.Group,{position:"right",children:[n(a.Button,{onClick:w,variant:"subtle",children:"Cancel"}),n(a.Button,{onClick:y,children:"OK"})]})]})})]})},av=["static","interpolation","none"].map(e=>({label:v.capitalize(e),value:e})),sv=[{from:0,to:0},{from:100,to:100}];function ls(e){return e?v.isString(e)?e==="none"?"none":"static":"interpolation":"none"}function ov(e,t){var r;return ls(t)==="static"?t:(r=e.getStaticColors()[0])==null?void 0:r.value}function lv(e,t){return v.isObject(t)?t:{steps:sv,interpolation:e.encodeColor(e.getColorInterpolations()[0])}}const uv=m.forwardRef((e,t)=>{const{colorManager:r}=m.useContext(qe),[i,s]=m.useState(ls(e.value)),[o,l]=m.useState(ov(r,e.value)),u=X.useLatest(o),[d,p]=m.useState(lv(r,e.value)),f=X.useLatest(d),g=C=>{var w,S,I;s(C||"none"),C==="static"?(w=e.onChange)==null||w.call(e,u.current):C==="none"||!C?(S=e.onChange)==null||S.call(e,"none"):(I=e.onChange)==null||I.call(e,f.current)},h=C=>{var w;l(C),(w=e.onChange)==null||w.call(e,C)},y=C=>{var w;p(C),(w=e.onChange)==null||w.call(e,C)};return c(a.Stack,{align:"stretch",children:[n(a.Select,{label:"Cell background",value:i||"none",onChange:g,data:av}),i==="static"&&n(De,{value:o,onChange:h}),i==="interpolation"&&n(iv,{colorManager:r,value:d,onChange:y})]})}),dv={[Oe.eloc]:"ELOC"},cv=Object.values(Oe).map(e=>({label:v.get(dv,e,v.capitalize(e)),value:e})),pv=m.forwardRef(({label:e,value:t,onChange:r,sx:i},s)=>n(a.Select,{ref:s,label:e,data:cv,value:t,onChange:r,sx:i})),hv=m.forwardRef(({value:e,onChange:t},r)=>{const[i,{setTrue:s,setFalse:o}]=X.useBoolean(),[l,u]=m.useState(e),d=()=>{o(),t(l)},p=()=>{o(),u(e)},f=()=>{u(na)};return m.useEffect(()=>{u(e)},[e]),c(V,{children:[n(a.Button,{variant:"filled",mt:24,onClick:s,sx:{flexGrow:0},children:"Custom Cell Content"}),n(a.Modal,{size:800,title:"Custom cell content",opened:i,onClose:o,closeOnClickOutside:!1,withCloseButton:!1,zIndex:320,children:i&&c(a.Stack,{children:[n(a.Box,{sx:{position:"relative"},children:n(_e,{height:"500px",defaultLanguage:"javascript",value:l,onChange:g=>u(g??""),theme:"vs-dark",options:{minimap:{enabled:!1}}})}),c(a.Group,{position:"apart",children:[n(a.Button,{onClick:f,color:"red",leftIcon:n(k.Recycle,{size:20}),children:"Rest"}),c(a.Group,{position:"right",children:[n(a.Button,{onClick:p,variant:"subtle",children:"Cancel"}),n(a.Button,{onClick:d,children:"OK"})]})]})]})})]})}),fv=[{label:"Left",value:"left"},{label:"Center",value:"center"},{label:"Right",value:"right"}],ur=()=>n(a.Text,{color:"dimmed",size:12,children:"px"}),gv=({control:e,index:t,watch:r,remove:i,column:s,data:o})=>{const l=r(`columns.${t}.value_type`);return c(a.Stack,{my:0,sx:{position:"relative"},children:[c(a.Group,{grow:!0,children:[n(x.Controller,{name:`columns.${t}.label`,control:e,render:({field:u})=>n(a.TextInput,{label:"Label",required:!0,id:`col-label-${t}`,sx:{flex:1},...u})}),n(x.Controller,{name:`columns.${t}.value_field`,control:e,render:({field:u})=>n(W,{label:"Value Field",required:!0,data:o,...u})})]}),c(a.Group,{grow:!0,children:[n(x.Controller,{name:`columns.${t}.value_type`,control:e,render:({field:u})=>n(pv,{label:"Value Type",sx:{flex:1},...u})}),l===Oe.custom&&n(x.Controller,{name:`columns.${t}.func_content`,control:e,render:({field:u})=>n(hv,{value:u.value??na,onChange:d=>u.onChange(d??"")})})]}),n(a.Divider,{mb:-10,variant:"dashed",label:"Style",labelPosition:"center"}),c(a.Group,{grow:!0,children:[n(a.NumberInput,{hideControls:!0,label:"Min Width",rightSection:n(ur,{}),disabled:!0}),n(x.Controller,{name:`columns.${t}.width`,control:e,render:({field:u})=>n(a.NumberInput,{hideControls:!0,label:"Width",rightSection:n(ur,{}),...u})}),n(a.NumberInput,{hideControls:!0,label:"Max Width",rightSection:n(ur,{}),disabled:!0})]}),n(a.Group,{grow:!0,noWrap:!0,children:n(x.Controller,{name:`columns.${t}.align`,control:e,render:({field:u})=>n(a.Select,{label:"Alignment",data:fv,...u})})}),n(x.Controller,{name:`columns.${t}.cellBackgroundColor`,control:e,render:({field:u})=>n(uv,{...u})}),n(a.Divider,{mb:4,mt:12,variant:"dashed"}),n(a.Button,{leftIcon:n(k.Trash,{size:16}),color:"red",variant:"light",onClick:()=>i(t),children:"Delete this column"})]})},mv=({control:e,watch:t,data:r})=>{const{fields:i,append:s,remove:o,update:l}=x.useFieldArray({control:e,name:"columns"}),u=()=>{const p=ve.randomId();s({id:p,label:p,value_field:"value",value_type:Oe.string})};t("columns");const d=t("use_raw_columns");return c(V,{children:[n(x.Controller,{name:"use_raw_columns",control:e,render:({field:p})=>n(a.Switch,{mt:20,label:"Use Original Data Columns",checked:p.value,onChange:f=>p.onChange(f.currentTarget.checked)})}),n(a.Divider,{mt:20,mb:10,variant:"dashed"}),!d&&c(a.Stack,{children:[n(a.Text,{my:0,children:"Custom Columns"}),c(a.Tabs,{defaultValue:"0",styles:{tab:{paddingTop:"0px",paddingBottom:"0px"},panel:{padding:"0px",paddingTop:"6px"}},children:[c(a.Tabs.List,{children:[i.map((p,f)=>n(a.Tabs.Tab,{value:f.toString(),children:f+1},p.id)),n(a.Tabs.Tab,{onClick:u,value:"add",children:n(k.Plus,{size:18,color:"#228be6"})})]}),i.map((p,f)=>n(a.Tabs.Panel,{value:f.toString(),children:n(gv,{control:e,watch:t,index:f,column:p,data:r,remove:o},f)},p.id))]})]})]})};function bv({control:e,watch:t,data:r}){return t(["horizontalSpacing","verticalSpacing","fontSize","striped","highlightOnHover"]),c(a.Stack,{spacing:"xs",children:[c(a.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:[n(x.Controller,{name:"horizontalSpacing",control:e,render:({field:i})=>n(a.TextInput,{label:"Horizontal Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1},...i})}),n(x.Controller,{name:"verticalSpacing",control:e,render:({field:i})=>n(a.TextInput,{label:"Vertical Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1},...i})})]}),n(a.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:n(x.Controller,{name:"fontSize",control:e,render:({field:i})=>n(a.TextInput,{label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1},...i})})}),c(a.Group,{position:"apart",grow:!0,children:[n(x.Controller,{name:"striped",control:e,render:({field:i})=>n(a.Switch,{label:"Striped",checked:i.value,onChange:s=>i.onChange(s.currentTarget.checked)})}),n(x.Controller,{name:"highlightOnHover",control:e,render:({field:i})=>n(a.Switch,{label:"Highlight on hover",checked:i.value,onChange:s=>i.onChange(s.currentTarget.checked)})})]})]})}function yv({columns:e,...t}){return{...t,columns:e.map(({id:r,...i})=>({id:r??ve.randomId(),...i}))}}function vv({context:e}){const{value:t,set:r}=F(e.instanceData,"config"),i=e.data,s=m.useMemo(()=>v.defaultsDeep({},t,_n),[t]),o=m.useMemo(()=>yv(s),[s]);m.useEffect(()=>{!v.isEqual(s,o)&&(console.log("config malformed, resetting to defaults",s,o),r(o))},[s,o]);const{control:l,handleSubmit:u,watch:d,getValues:p,reset:f}=x.useForm({defaultValues:o});m.useEffect(()=>{f(o)},[o]);const g=p(),h=m.useMemo(()=>!v.isEqual(g,s),[g,s]);return d(["id_field"]),c("form",{onSubmit:u(r),children:[c(a.Group,{position:"apart",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[n(a.Text,{children:"Table Config"}),n(a.ActionIcon,{type:"submit","aria-label":"save config",mr:5,variant:"filled",color:"blue",disabled:!h,children:n(k.DeviceFloppy,{size:20})})]}),c(a.Tabs,{defaultValue:"Columns",orientation:"vertical",styles:{tab:{paddingLeft:"6px",paddingRight:"6px"},panel:{paddingTop:"6px",paddingLeft:"12px"}},children:[c(a.Tabs.List,{children:[n(a.Tabs.Tab,{value:"Data",children:"Data"}),n(a.Tabs.Tab,{value:"Style",children:"Style"}),n(a.Tabs.Tab,{value:"Columns",children:"Columns"})]}),n(a.Tabs.Panel,{value:"Data",children:n(x.Controller,{name:"id_field",control:l,render:({field:y})=>n(W,{label:"ID Field",required:!0,data:i,...y})})}),n(a.Tabs.Panel,{value:"Style",children:n(bv,{control:l,watch:d,data:i})}),n(a.Tabs.Panel,{value:"Columns",children:n(mv,{control:l,watch:d,data:i})})]})]})}function xv(e){const{columns:t,...r}=e;return{...e,columns:t.map(i=>({...i,align:i.align??"left"}))}}class Cv extends fe{constructor(){super(...arguments);O(this,"VERSION",3)}configVersions(){this.version(1,r=>({version:1,config:r})),this.version(2,r=>{const{columns:i,...s}=r.config;return{...r,version:2,config:{...s,columns:i.map(({id:o,...l})=>({id:o??ve.randomId(),...l}))}}}),this.version(3,r=>({...r,version:3,config:xv(r.config)}))}}const dr={createConfig(){return{version:3,config:v.cloneDeep(_n)}},displayName:"Table",displayGroup:"Others",migrator:new Cv,name:"table",viewRender:Jy,configRender:vv,triggers:[lr]},wv=b.types.model("PanelLayoutModel",{x:b.types.number,y:b.types.maybeNull(b.types.number),w:b.types.number,h:b.types.number,moved:b.types.optional(b.types.boolean,!1),static:b.types.optional(b.types.boolean,!1)}).views(e=>({get json(){const{x:t,y:r,w:i,h:s,moved:o}=e;return{h:s,w:i,x:t,y:r===null?0:r,moved:o,static:e.static}}})).actions(e=>({set(t){const{x:r,y:i,w:s,h:o,moved:l}=t;e.x=r,e.y=i,e.w=s,e.h=o,e.moved=!!l,e.static=!!t.static}})),_v=b.types.model("PanelStyleBorderModel",{enabled:b.types.boolean}).views(e=>({get json(){const{enabled:t}=e;return{enabled:t}}})).actions(e=>({setEnabled(t){e.enabled=t}})),Sv=b.types.model("PanelStyleModel",{border:_v}).views(e=>({get json(){const{border:t}=e;return{border:t.json}}})).actions(e=>({})),Tv=b.types.model("PanelVizModel",{type:b.types.string,conf:b.types.frozen()}).views(e=>({get json(){return{conf:e.conf,type:e.type}}})).actions(e=>({setType(t){e.type=t},setConf(t){e.conf=t}})),us=b.types.model({id:b.types.string,title:b.types.string,description:b.types.string,layout:wv,queryID:b.types.string,viz:Tv,style:Sv,variables:b.types.optional(b.types.array(dl),[])}).views(e=>({get query(){return b.getParentOfType(e,Mt).queries.findByID(e.queryID)},get json(){const{id:t,title:r,description:i,queryID:s}=e;return{id:t,viz:e.viz.json,style:e.style.json,title:r,layout:e.layout.json,queryID:s,variables:e.variables.map(o=>o.json),description:i}}})).actions(e=>({setID(t){e.id=t},setTitle(t){e.title=t},setDescription(t){e.description=t},setQueryID(t){if(b.getParentOfType(e,Mt).queries.findByID(t))e.queryID=t;else throw new Error(`Query with id ${t} does not exist`)},addVariable(t){e.variables.push(t)},removeVariable(t){e.variables.remove(t)},removeSelf(){b.getParent(e,2).removeByID(e.id)}})).actions(e=>({moveToView(t,r){b.getRoot(e).content.views.findByID(t).removePanelID(e.id),b.getRoot(e).content.views.findByID(r).appendPanelID(e.id),b.getRoot(e).editor.setPath(["_VIEWS_",r,"_PANELS_",e.id])}}));function ds(e){return{id:e,layout:{x:0,y:1/0,w:18,h:300},title:e,description:"<p></p>",queryID:"",viz:{type:dr.name,conf:dr.createConfig()},style:{border:{enabled:!0}}}}const cs=b.types.model("PanelsModel",{list:b.types.optional(b.types.array(us),[])}).views(e=>({get json(){return e.list.map(t=>t.json)},findByID(t){return e.list.find(r=>r.id===t)},get idMap(){const t=new Map;return e.list.forEach(r=>{t.set(r.id,r)}),t}})).views(e=>({panelsByIDs(t){const r=[];t.forEach(s=>{const o=e.idMap.get(s);o?r.push(o):console.warn(`Panel is not found, id:${s}`)});const i=r.map(s=>({...s.layout.json,i:s.id}));return{panels:r,layouts:i}}})).views(e=>({editorOptions(t,r){const{panels:i}=e.panelsByIDs(r);i.length!==r.length&&console.warn(`Unfulfilled panels for View[${t}]`);const s=i.map(l=>({label:l.title?l.title:v.capitalize(l.viz.type),value:l.id,_type:"panel",parentID:t})),o="_Add_A_PANEL_";return s.push({label:o,value:o,_type:"ACTION",_action_type:o,parentID:t,Icon:null,children:null}),s}})).actions(e=>({replace(t){e.list=b.castToSnapshot(t)},append(t){e.list.push(t)},remove(t){e.list.splice(t,1)},removeByID(t){const r=e.list.findIndex(i=>i.id===t);r!==-1&&e.list.splice(r,1)},duplicateByID(t){const r=e.list.find(s=>s.id===t);if(!r){console.error(new Error(`[duplicate panel] Can't find a panel by id[${t}]`));return}const i=new Date().getTime().toString();return e.list.push({...r.json,id:i,layout:{...r.layout,y:1/0,moved:!1}}),i},replaceByIndex(t,r){e.list.splice(t,1,r)}}));var ps=(e=>(e.Use="use",e.Edit="edit",e))(ps||{}),K=(e=>(e.Division="div",e.Modal="modal",e.Tabs="tabs",e))(K||{});const kv={div:"Division",tabs:"Tabs",modal:"Modal"},hs={div:"rgba(255, 0, 0, 0.2)",modal:"rgba(0, 0, 0, 0.2)",tabs:"rgba(255, 200, 100, 0.4)"},Dv={div:"#ff4000",modal:"#000",tabs:"#ffad18"},Iv={definition:{sqlSnippets:[],queries:[],mock_context:{}},views:[{id:"Main",name:"Main",type:"div",config:{},panelIDs:[]}],panels:[],filters:[],version:"8.57.0"};var cr=(e=>(e.Select="select",e.TreeSelect="tree-select",e.MultiSelect="multi-select",e.TextInput="text-input",e.Checkbox="checkbox",e.DateRange="date-range",e))(cr||{});const fs=b.types.model("ViewModel_Division",{_name:b.types.literal(K.Division)}).views(e=>({get json(){const{_name:t}=e;return{_name:t}}})).actions(e=>({})),Mv=()=>fs.create({_name:K.Division}),pr={enabled:!1,func_content:["function text({ filters, context}) {"," // your code goes here",' return "text"',"}"].join(`
|
|
470
470
|
`)},Av=b.types.model("CustomModalTitleModel",{enabled:b.types.optional(b.types.boolean,!1),func_content:b.types.optional(b.types.string,"")}).views(e=>({get json(){const{enabled:t,func_content:r}=e;return{enabled:t,func_content:r}},get value(){const{enabled:t,func_content:r}=e,i=b.getParent(e,2),s=b.getRoot(e);if(!t)return i.name;try{const o={filters:s.content.filters.values,context:s.context.current};return new Function(`return ${r}`)()(o)}catch(o){return console.error(o),i.name}}})).actions(e=>({setEnabled(t){e.enabled=t},setFuncContent(t){e.func_content=t},replace({enabled:t,func_content:r}){e.enabled=t,e.func_content=r}})),gs=b.types.model("ViewModel_Modal",{_name:b.types.literal(K.Modal),width:b.types.string,height:b.types.string,custom_modal_title:b.types.optional(Av,pr)}).views(e=>({get json(){const{_name:t,width:r,height:i,custom_modal_title:s}=e;return{_name:t,width:r,height:i,custom_modal_title:s.json}}})).actions(e=>({setWidth(t){e.width=t},setHeight(t){e.height=t}})),$v=()=>gs.create({_name:K.Modal,width:"90vw",height:"90vh"}),zv=b.types.model("ViewModel_Tabs_Tab",{id:b.types.identifier,name:b.types.string,view_id:b.types.string,color:b.types.optional(b.types.string,"")}).views(e=>({get json(){const{id:t,name:r,view_id:i,color:s}=e;return{id:t,name:r,color:s,view_id:i}}})).actions(e=>({setName(t){e.name=t},setViewID(t){e.view_id=t},setColor(t){e.color=t}})),ms=b.types.model("ViewModel_Tabs",{_name:b.types.literal(K.Modal),tabs:b.types.optional(b.types.array(zv),[]),variant:b.types.optional(b.types.enumeration("variant",["default","outline","pills"]),"default"),orientation:b.types.optional(b.types.enumeration("orientation",["horizontal","vertical"]),"horizontal"),grow:b.types.optional(b.types.boolean,!1)}).views(e=>({get json(){const{_name:t,variant:r,orientation:i,tabs:s,grow:o}=e;return{grow:o,tabs:s.map(l=>l.json),_name:t,variant:r,orientation:i}}})).actions(e=>({setVariant(t){e.variant=t},setOrientation(t){e.orientation=t},setGrow(t){e.grow=t},setTabs(t){e.tabs.length=0,e.tabs=b.cast(t)},addTab(){const t=ve.randomId(),r={id:t,name:t,view_id:""};e.tabs.push(r)},removeTab(t){e.tabs.splice(t,1)}})),Ev=()=>ms.create({_name:K.Modal,tabs:[]}),bs=b.types.model({id:b.types.identifier,name:b.types.string,type:b.types.enumeration("EViewComponentType",[K.Division,K.Modal,K.Tabs]),config:b.types.union(fs,gs,ms),panelIDs:b.types.optional(b.types.array(b.types.string),[])}).views(e=>({get json(){const{id:t,name:r,type:i,config:s}=e;return{id:t,name:r,type:i,config:s.json,panelIDs:e.panelIDs}}})).actions(e=>({setName(t){e.name=t},setType(t){if(e.type!==t){switch(t){case K.Division:e.config=Mv();break;case K.Modal:e.config=$v();break;case K.Tabs:e.config=Ev();break}e.type=t}},appendPanelID(t){e.panelIDs.push(t)},removePanelID(t){const r=e.panelIDs.filter(i=>i!==t);e.panelIDs.length=0,e.panelIDs.push(...r)}})).actions(e=>({})),ys=b.types.model("ViewsModel",{current:b.types.optional(b.types.array(bs),[]),visibleViewIDs:b.types.array(b.types.string),idOfVIE:b.types.string}).views(e=>({get json(){return e.current.map(t=>Gt(t.json))},get idMap(){const t=new Map;return e.current.forEach(r=>{t.set(r.id,r)}),t},findByID(t){return e.current.find(r=>r.id===t)},get isVIETheFirstView(){return e.current.length===0||!e.idOfVIE?!1:e.current[0].id===e.idOfVIE},get firstVisibleView(){const[t]=e.visibleViewIDs;return e.current.find(({id:r})=>r===t)},get visibleViews(){const t=new Set(e.visibleViewIDs);return e.current.filter(({id:r})=>t.has(r))},get VIE(){return e.current.find(({id:t})=>t===e.idOfVIE)},get options(){return e.current.map(t=>({label:t.name,value:t.id,type:t.type}))},get editorOptions(){const t=b.getRoot(e).content.panels;return e.current.map(r=>({label:r.name,value:r.id,_type:"view",children:t.editorOptions(r.id,r.panelIDs)}))}})).actions(e=>({replace(t){e.current.replace(t)},addANewView(t,r,i,s){e.current.push({id:t,name:r,type:i,config:s,panelIDs:[]})},append(t){e.current.push(t)},remove(t){e.current.splice(t,1)},removeByID(t){const r=e.current.findIndex(i=>i.id===t);r!==-1&&e.current.splice(r,1)},replaceByIndex(t,r){e.current.splice(t,1,r)},setIDOfVIE(t){e.idOfVIE=t,e.visibleViewIDs.length=0,e.visibleViewIDs.push(t)},appendToVisibles(t){new Set(e.visibleViewIDs.map(i=>i)).has(t)||e.visibleViewIDs.push(t)}})).actions(e=>({addARandomNewView(){const t=new Date().getTime().toString();e.addANewView(t,K.Division,K.Division,{_name:K.Division}),e.setIDOfVIE(t)},removeVIE(){e.current.length!==1&&(e.removeByID(e.idOfVIE),e.setIDOfVIE(e.current[0].id))},rmVisibleViewID(t){const r=e.visibleViewIDs.findIndex(i=>i===t);r!==-1&&e.visibleViewIDs.splice(r,1)}}));function hr(e){const t=e.length>0?[e[0].id]:[],r=e.length>0?e[0].id:"";return{current:e.map(s=>{const{_name:o=s.type}=s.config;return{...s,config:{...s.config,_name:o},panelIDs:s.panelIDs}}),visibleViewIDs:t,idOfVIE:r}}function vs(e,t,r,i){return e.reduce((s,o)=>(s[o[t]]=mn(o[r],i),s),{})}const Lv=b.types.model({id:b.types.string,name:b.types.string,dashboard_id:b.types.string,create_time:b.types.string,update_time:b.types.string,version:b.types.string,filters:Ri,queries:Ji,sqlSnippets:ea,views:ys,panels:cs,mock_context:ul,origin:b.types.maybe(b.types.frozen())}).views(e=>({get json(){return{id:e.id,name:e.name,create_time:e.create_time,update_time:e.update_time,dashboard_id:e.dashboard_id,content:{views:e.views.json,panels:e.panels.json,filters:e.filters.json,version:e.version,definition:{queries:e.queries.json,sqlSnippets:e.sqlSnippets.json,mock_context:e.mock_context.current}}}},get filtersChanged(){const t="filters.current";return!v.isEqual(b.getSnapshot(v.get(e,t)),v.get(e.origin,t))},get queriesChanged(){const t="queries.current",r=b.getSnapshot(v.get(e,t)).map(i=>v.pick(i,["id","name","key","type","sql","run_by","react_to","pre_process","post_process"]));return!v.isEqual(r,v.get(e.origin,t))},get sqlSnippetsChanged(){const t="sqlSnippets.current";return!v.isEqual(b.getSnapshot(v.get(e,t)),v.get(e.origin,t))},get viewsChanged(){const t="views.current";return!v.isEqual(b.getSnapshot(v.get(e,t)),v.get(e.origin,t))},get panelsChanged(){const t="panels.list";return!v.isEqual(b.getSnapshot(v.get(e,t)),v.get(e.origin,t))},get mockContextChanged(){const t="mock_context.current";return!v.isEqual(v.get(e,t),v.get(e.origin,t))},get payloadForSQL(){const t=b.getParent(e).context.current,r=b.getParent(e).globalSQLSnippets,i={context:{...e.mock_context.current,...t},filters:e.filters.values};return{...i,sql_snippets:vs(e.sqlSnippets.current,"key","value",i),global_sql_snippets:vs(r.list,"id","content",i)}},get changed(){return this.filtersChanged||this.queriesChanged||this.sqlSnippetsChanged||this.viewsChanged||this.panelsChanged||this.mockContextChanged},get data(){return e.queries.current.map(({id:r,data:i})=>({id:r,data:i})).reduce((r,i)=>(r[i.id]=i.data,r),{})},getDataStuffByID(t){const r=e.queries.findByID(t);return r?{data:r.data.toJSON(),dataProxy:r.data,len:r.data.length,state:r.state,error:r.error}:{data:[],dataProxy:null,len:0,state:"idle",error:void 0}},getDataStateByID(t){var r;return((r=e.queries.findByID(t))==null?void 0:r.state)??[]},getDataErrorByID(t){var r;return((r=e.queries.findByID(t))==null?void 0:r.error)??[]}})).views(e=>({findQueryUsage(t){const r=e.panels.idMap,i=e.views.current.flatMap(l=>l.panelIDs.map(u=>r.get(u)).filter(u=>(u==null?void 0:u.queryID)===t).map(u=>({type:"panel",id:u.id,label:u.title?u.title:u.viz.type,views:[{id:l.id,label:l.name}]}))),s=e.views.idMap,o=e.filters.current.filter(l=>v.get(l,"config.options_query_id")===t).map(l=>({type:"filter",id:l.id,label:l.label,views:l.visibleInViewsIDs.map(u=>{var d;return{id:u,label:((d=s.get(u))==null?void 0:d.name)??u}})}));return i.concat(o)}})).actions(e=>({duplicatePanelByID(t,r){var s;const i=e.panels.duplicateByID(t);i&&((s=e.views.findByID(r))==null||s.appendPanelID(i))},removePanelByID(t,r){var i;e.panels.removeByID(t),(i=e.views.findByID(r))==null||i.removePanelID(t)},addANewPanel(t){var i;const r=new Date().getTime().toString();e.panels.append(ds(r)),(i=e.views.findByID(t))==null||i.appendPanelID(r)}})).actions(e=>({reset(){b.applySnapshot(e.filters.current,e.origin.filters.current),b.applySnapshot(e.queries.current,e.origin.queries.current),b.applySnapshot(e.sqlSnippets.current,e.origin.sqlSnippets.current),b.applySnapshot(e.views.current,e.origin.views.current),b.applySnapshot(e.panels.list,e.origin.panels.list),e.mock_context.current=e.origin.mock_context.current},resetFilters(){b.applySnapshot(e.filters.current,e.origin.filters.current)},updateCurrent(t){const{id:r,name:i,content:s}=t;if(!s)throw new Error("unexpected null content when updating a content model");const{version:o,filters:l,views:u,panels:d,definition:{queries:p,sqlSnippets:f,mock_context:g={}}}=s;e.id=r,e.name=i,e.version=o,b.applySnapshot(e.filters.current,l),b.applySnapshot(e.views.current,hr(u).current),b.applySnapshot(e.panels.list,d),b.applySnapshot(e.queries.current,p),b.applySnapshot(e.sqlSnippets.current,f),e.mock_context.current=g}})),Mt=b.types.snapshotProcessor(Lv,{preProcessor(e){return{...e,origin:e}},postProcessor(e){delete e.origin;const t=b.castToSnapshot(e.queries.current.map(r=>v.pick(r,["id","key","type","sql"])));return v.defaults({},{queries:{current:t}},e)}});function Pv(e,t){t.filters&&b.applySnapshot(e.filters.current,t.filters)}function xs({id:e,name:t,dashboard_id:r,create_time:i,update_time:s,content:o}){if(!o)throw new Error("unexpected null content when creating a content model");const{version:l,filters:u,views:d,panels:p,definition:{queries:f,sqlSnippets:g,mock_context:h={}}}=o;return Mt.create({id:e,name:t,dashboard_id:r,create_time:i,update_time:s,version:l,filters:Qi(u),queries:{current:f},sqlSnippets:{current:g},mock_context:{current:h},views:hr(d),panels:{list:p}})}const Ov=b.types.model({id:b.types.string,content:b.types.string,create_time:b.types.string,update_time:b.types.string,is_preset:b.types.boolean}),Vv=b.types.model("GlobalSQLSnippetsModel",{list:b.types.optional(b.types.array(Ov),[])}).views(e=>({find(t){return e.list.find(r=>r.id===t)},get options(){return e.list.map(t=>({value:t.id,label:t.id}))}})).actions(e=>({replace(t){e.list.length=0,e.list.push(...t)}})),Cs=b.types.model({id:b.types.identifier,name:b.types.string,group:b.types.string,content:Mt,content_id:b.types.string,datasources:sl,globalSQLSnippets:Vv,context:ta,editor:ll}).views(e=>({get json(){return{id:e.id,name:e.name,group:e.group,content_id:e.content_id}}})).actions(e=>({updateCurrentContent(t){e.content.updateCurrent(t)},updateCurrent(t,r){const{id:i,name:s,group:o,content_id:l}=t;e.id=i,e.name=s,e.group=o,e.content_id=l,this.updateCurrentContent(r)}}));function fr({id:e,name:t,group:r,content_id:i},s,o,l,u){return Cs.create({id:e,name:t,group:r,content_id:i,content:xs(s),datasources:{list:o},globalSQLSnippets:{list:l},context:{current:u},editor:{}})}const gr=m.createContext(null);function rn(e){const t=m.useContext(gr),r=X.useCreation(()=>e.configure(t||new Tn),[e.configure]),i=X.usePrevious(r);return i&&i!==r&&i.dispose(),n(gr.Provider,{value:r,children:e.children})}function ws(){return m.useContext(gr)}const Bv={viewPanelInFullScreen:v.noop,inFullScreen:!1},mr=m.createContext(Bv),Nv=({description:e,isDescriptionEmpty:t})=>t?null:n(a.Tooltip,{color:"white",label:n(en,{value:e,styles:{root:{border:"none"},content:{padding:0}}}),styles:{tooltip:{border:"0.0625rem solid rgb(233, 236, 239)",boxShadow:"rgb(0 0 0 / 5%) 0px 0.0625rem 0.1875rem, rgb(0 0 0 / 5%) 0px 1.25rem 1.5625rem -0.3125rem, rgb(0 0 0 / 4%) 0px 0.625rem 0.625rem -0.3125rem"}},withArrow:!0,children:n(a.Box,{sx:{height:"16px",alignSelf:"center"},children:n(L.IconInfoCircle,{size:16,color:"gray"})})}),Gv=T.observer(({label:e,config:{default_value:t,description:r,isDescriptionEmpty:i,...s},value:o,onChange:l})=>c(a.Box,{children:[n(a.Text,{children:" "}),n(a.Checkbox,{label:c(a.Group,{noWrap:!0,position:"apart",align:"middle",spacing:6,children:[n(a.Box,{sx:{flexGrow:1},children:e}),n(Nv,{description:r,isDescriptionEmpty:i})]}),checked:o||!1,onChange:u=>l(u.currentTarget.checked),...s,pt:".4em",styles:{input:{borderColor:"#e9ecef"}}})]})),_s=T.observer(({label:e,config:t,value:r=[null,null],onChange:i})=>{const s=Array.isArray(r)?r.map(d=>d?j(d).toDate():null):[null,null],o=d=>{i(d.map(p=>p&&j(p).format(t.inputFormat)))},l=t.getMinDate(s[0]),u=t.getMaxDate(s[0]);return n(vo.DateRangePicker,{label:e,value:s,onChange:o,icon:n(k.Calendar,{size:16}),sx:{minWidth:"16em"},minDate:l,maxDate:u,styles:{input:{borderColor:"#e9ecef"}},...t})}),qv=a.createStyles((e,{radius:t=4})=>({root:{borderRadius:e.fn.radius(t),display:"flex",flexWrap:"nowrap",border:"1px solid #ced4da",paddingLeft:"0px",paddingRight:"30px",backgroundColor:"#fff",transition:"border-color 100ms ease",borderColor:"#e9ecef","&.rc-select.rc-select-open":{borderColor:"#228be6 !important",".rc-select-selection-overflow-item-rest":{display:"none"},".rc-select-selection-overflow-item-suffix":{display:"block"}},".rc-select-selector":{height:"auto",lineHeight:1.55,paddingLeft:"12px",resize:"none",boxSizing:"border-box",fontSize:"14px",width:"100%",color:"#000",display:"block",textAlign:"left",minHeight:"36px",cursor:"pointer",flexGrow:1},".rc-select-selection-search-mirror":{display:"none"},".rc-select-selection-search":{flexGrow:1,width:"auto !important"},".rc-select-selection-overflow":{display:"flex",minHeight:"34px",alignItems:"center",flexWrap:"nowrap",marginLeft:"calc(-10px / 2)",boxSizing:"border-box"},".rc-select-selection-overflow-item":{display:"flex",alignItems:"center",backgroundColor:"#f1f3f5",color:"#495057",height:"24px",paddingLeft:"12px",paddingRight:"12px",fontWeight:500,fontSize:"12px",borderRadius:"4px",cursor:"default",userSelect:"none",maxWidth:"calc(100% - 20px)",margin:"calc(10px / 2 - 2px) calc(10px / 2)"},".rc-select-selection-overflow-item-rest":{cursor:"pointer"},".rc-select-selection-overflow-item-suffix":{display:"none",backgroundColor:"transparent",width:"100%",maxWidth:"100%",height:"28px",margin:0,paddingLeft:0,paddingRight:0},input:{flex:1,minWidth:"60px",backgroundColor:"transparent",border:0,outline:0,fontSize:"14px",padding:0,marginLeft:0,color:"inherit",height:"28px",lineHeight:"32px",cursor:"pointer",width:"100%","&::-webkit-search-decoration, &::-webkit-search-cancel-button, &::-webkit-search-results-button, &::-webkit-search-results-decoration":{display:"none"}},".rc-select-clear":{marginRight:"-24px",alignSelf:"center",cursor:"pointer"},"&.rc-select-disabled":{backgroundColor:"rgb(241, 243, 245)",color:"rgb(144, 146, 150)",opacity:.6,"&, .rc-select-selector, input":{cursor:"not-allowed"}}},label:{fontSize:e.fontSizes.sm,fontWeight:500,color:"#212529"},dropdown:{fontSize:e.fontSizes.xs,zIndex:300,backgroundColor:"#fff",border:"1px solid #e9ecef",marginTop:6,padding:0,boxShadow:"0 1px 3px rgb(0 0 0 / 5%), rgb(0 0 0 / 5%) 0px 10px 15px -5px, rgb(0 0 0 / 4%) 0px 7px 7px -5px",borderRadius:"4px","&.rc-select-dropdown-slide-up-leave-active":{display:"none"},".rc-select-item-empty":{padding:"8px 12px"},".rc-select-item-option":{boxSizing:"border-box",textAlign:"left",width:"100%",padding:"8px 12px 8px 2px",cursor:"pointer",fontSize:"14px",color:"#000",borderRadius:"4px",display:"flex",flexWrap:"nowrap",overflow:"hidden","&:hover":{backgroundColor:"#f1f3f5"},flexDirection:"row-reverse",".rc-select-item-option-state":{flexGrow:0,flexShrink:0,width:"30px",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},".rc-select-item-option-content":{flexGrow:1}}}})),Ss=({errorMessage:e})=>e?n(a.Text,{color:"red",size:12,children:e}):n(a.Text,{color:"dimmed",size:12,children:"Not found"}),Fv=({disabled:e,classNames:t,styles:r,unstyled:i,radius:s,style:o,label:l,value:u,onChange:d,options:p,errorMessage:f})=>{const{classes:g,cx:h}=qv({radius:s},{name:"MultiSelectWidget",classNames:t,styles:r,unstyled:i}),[y,C]=m.useState(!1),w=B=>{C(B)},S=y&&(u==null?void 0:u.length)>0,[I,$]=m.useState(""),N=m.useMemo(()=>{if(!I)return p;const B=I.toLowerCase(),P=z=>{var A;return((A=z.description)==null?void 0:A.toLowerCase().includes(B))||z.label.toLowerCase().includes(B)};return p.filter(P)},[I,p]);return c(a.Stack,{spacing:3,children:[c(a.Group,{position:"apart",children:[n(a.Text,{className:g.label,children:l}),S&&n(a.Tooltip,{label:`${u.length} selected`,children:n(a.Badge,{children:u.length})})]}),n(Ii,{disabled:e,allowClear:!0,className:h(g.root,"check-select"),dropdownClassName:h(g.dropdown,""),onDropdownVisibleChange:w,transitionName:"rc-select-dropdown-slide-up",choiceTransitionName:"rc-select-selection__choice-zoom",style:o,clearIcon:()=>n(a.CloseButton,{}),value:u,onChange:d,onSelect:console.log,mode:"multiple",maxTagCount:0,notFoundContent:n(Ss,{errorMessage:f}),maxTagTextLength:10,maxTagPlaceholder:B=>`${B.length} selected`,searchValue:I,onSearch:$,filterOption:!1,children:N.map(B=>n(Ii.Option,{children:n(a.Group,{noWrap:!0,children:c("div",{children:[n(a.Text,{size:"sm","data-role":"label",children:B.label}),n(a.Text,{size:"xs",color:"dimmed","data-role":"description",children:B.description})]})})},B.value))})]})},Wv=T.observer(({label:e,config:t,value:r,onChange:i})=>{const s=Y(),o=!!t.options_query_id,{state:l,error:u}=s.getDataStuffByID(t.options_query_id),d=l==="loading",p=t.min_width?t.min_width:"200px",f=o?d:!1,g=h=>i(h,!1);return n(Fv,{label:e,options:t.options,style:{minWidth:"160px",width:p,maxWidth:f?p:"unset",borderColor:"#e9ecef"},disabled:f,value:r,onChange:g,errorMessage:u})}),jv=m.forwardRef(({label:e,description:t,...r},i)=>n("div",{ref:i,...r,children:n(a.Group,{noWrap:!0,children:c("div",{children:[n(a.Text,{size:"sm","data-role":"label",children:e}),n(a.Text,{size:"xs",color:"dimmed","data-role":"description",children:t})]})})})),Yv=T.observer(({label:e,config:t,value:r,onChange:i})=>{const s=Y(),o=!!t.options_query_id,{state:l,error:u}=s.getDataStuffByID(t.options_query_id),d=l==="loading";return m.useEffect(()=>{var g;const{default_selection_count:p}=t;if(!p)return;const f=((g=t.options[0])==null?void 0:g.value)??"";console.log("Selecting the first option by default. New value: ",f),i(f,!0)},[t.default_selection_count,t.options]),n(a.Select,{label:e,data:t.options,disabled:o?d:!1,value:r,onChange:i,error:!!u,placeholder:u,maxDropdownHeight:500,styles:{root:{width:t.width?t.width:"200px"},input:{borderColor:"#e9ecef"}},sx:{".mantine-Select-item[data-selected] .mantine-Text-root[data-role=description]":{color:"rgba(255,255,255,.7)"}},itemComponent:jv})});function Rv({label:e,config:t,value:r,onChange:i}){return n(a.TextInput,{label:e,value:r||"",onChange:s=>i(s.currentTarget.value),...t,styles:{input:{borderColor:"#e9ecef"}}})}const Qv=({rotate:e,onClick:t})=>n("svg",{onClick:t,className:"caret-icon",viewBox:"0 0 1024 1024",focusable:"false","data-icon":"caret-down",width:"14px",height:"14px",fill:"currentColor","aria-hidden":"true",transform:`rotate(${e})`,children:n("path",{d:"M840.4 300H183.6c-19.7 0-30.7 20.8-18.5 35l328.4 380.8c9.4 10.9 27.5 10.9 37 0L858.9 335c12.2-14.2 1.2-35-18.5-35z"})}),Uv=({expanded:e,isLeaf:t,value:r,onClick:i,...s})=>(r==="0-0-value"&&console.log(s),t?n("span",{style:{width:"14px",display:"inline-block"}}):n(Qv,{rotate:e?"0":"-90",onClick:i,...s})),Xv=({onClick:e})=>c("svg",{onClick:e,className:"checkbox-icon",width:"16",height:"16",viewBox:"0 0 24 24",stroke:"currentColor",strokeWidth:"2",fill:"none",strokeLinecap:"round",strokeLinejoin:"round",children:[n("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),n("rect",{className:"border",x:"4",y:"4",width:"16",height:"16",rx:"2"}),n("rect",{className:"checkmark-indeterminate",x:"8",y:"8",width:"8",height:"8",rx:"2",stroke:"none"}),n("path",{className:"checkmark-checked",d:"M9 12l2 2l4 -4"})]}),Zv=({onClick:e,...t})=>n(Xv,{onClick:e,...t}),Kv=a.createStyles((e,{radius:t=4})=>({root:{borderRadius:e.fn.radius(t),display:"flex",flexWrap:"nowrap",border:"1px solid #ced4da",paddingLeft:"0px",paddingRight:"30px",backgroundColor:"#fff",transition:"border-color 100ms ease",borderColor:"#e9ecef","&.rc-tree-select.rc-tree-select-open":{borderColor:"#228be6 !important",".rc-tree-select-selection-overflow-item-rest":{display:"none"},".rc-tree-select-selection-overflow-item-suffix":{display:"block"}},".rc-tree-select-selector":{height:"auto",lineHeight:1.55,paddingLeft:"12px",resize:"none",boxSizing:"border-box",fontSize:"14px",width:"100%",color:"#000",display:"block",textAlign:"left",minHeight:"36px",cursor:"pointer",flexGrow:1},".rc-tree-select-selection-search-mirror":{display:"none"},".rc-tree-select-selection-search":{flexGrow:1,width:"auto !important"},".rc-tree-select-selection-overflow":{display:"flex",minHeight:"34px",alignItems:"center",flexWrap:"nowrap",marginLeft:"calc(-10px / 2)",boxSizing:"border-box"},".rc-tree-select-selection-overflow-item":{display:"flex",alignItems:"center",backgroundColor:"#f1f3f5",color:"#495057",height:"24px",paddingLeft:"12px",paddingRight:"12px",fontWeight:500,fontSize:"12px",borderRadius:"4px",cursor:"default",userSelect:"none",maxWidth:"calc(100% - 20px)",margin:"calc(10px / 2 - 2px) calc(10px / 2)"},".rc-tree-select-selection-overflow-item-rest":{cursor:"pointer"},".rc-tree-select-selection-overflow-item-suffix":{display:"none",backgroundColor:"transparent",width:"100%",maxWidth:"100%",height:"28px",margin:0,paddingLeft:0,paddingRight:0},input:{flex:1,minWidth:"60px",backgroundColor:"transparent",border:0,outline:0,fontSize:"14px",padding:0,marginLeft:0,color:"inherit",height:"28px",lineHeight:"32px",cursor:"pointer",width:"100%","&::-webkit-search-decoration, &::-webkit-search-cancel-button, &::-webkit-search-results-button, &::-webkit-search-results-decoration":{display:"none"}},".rc-tree-select-clear":{marginRight:"-24px",alignSelf:"center",cursor:"pointer"},"&.rc-tree-select-disabled":{backgroundColor:"rgb(241, 243, 245)",color:"rgb(144, 146, 150)",opacity:.6,"&, .rc-tree-select-selector, input":{cursor:"not-allowed"}}},label:{fontSize:e.fontSizes.sm,fontWeight:500,color:"#212529"},dropdown:{fontSize:e.fontSizes.xs,zIndex:300,paddingTop:"6px","&.rc-tree-select-dropdown-slide-up-leave-active":{display:"none"},".rc-tree-select-tree-list .rc-tree-select-tree-list-holder":{},".rc-tree-select-tree-list, .rc-tree-select-empty":{backgroundColor:"#fff",border:"1px solid #e9ecef",padding:0,boxShadow:"0 1px 3px rgb(0 0 0 / 5%), rgb(0 0 0 / 5%) 0px 10px 15px -5px, rgb(0 0 0 / 4%) 0px 7px 7px -5px",borderRadius:"4px"},".rc-tree-select-empty":{padding:"8px 12px"},".rc-tree-select-tree-treenode":{boxSizing:"border-box",textAlign:"left",width:"100%",padding:"8px 12px",cursor:"pointer",fontSize:"14px",color:"#000",borderRadius:"4px",display:"flex",flexWrap:"nowrap",overflow:"hidden","&:hover":{backgroundColor:"#f1f3f5"},"&.rc-tree-select-tree-treenode-checkbox-checked":{".rc-tree-select-tree-iconEle .checkbox-icon .checkmark-checked":{stroke:"rgb(64, 192, 87)",animation:"check 200ms linear forwards"}},"&.rc-tree-select-tree-treenode-checkbox-indeterminate":{".rc-tree-select-tree-iconEle .checkbox-icon .checkmark-indeterminate":{fill:"rgb(64, 192, 87)"}},".rc-tree-select-tree-switcher":{height:"16px",alignSelf:"center",paddingRight:"2px",transition:"color 200ms ease","&:hover":{color:"#228be6","svg.caret-icon":{color:"#228be6"}},"svg.caret-icon":{color:"#ced4da",transition:"all 200ms ease"}},".rc-tree-select-tree-node-content-wrapper":{display:"flex",flexWrap:"nowrap",overflow:"hidden",alignItems:"center",gap:"8px",transition:"color 200ms ease","&:hover":{color:"#228be6"}},".rc-tree-select-tree-iconEle":{height:"16px","svg .border":{stroke:"#ced4da"},".checkbox-icon .checkmark-indeterminate":{fill:"transparent",transition:"fill 200ms ease"},".checkbox-icon .checkmark-checked":{transform:"scale(1.2)",transformOrigin:"center center",strokeDasharray:10,strokeDashoffset:-10},"@keyframes check":{"0%":{strokeDashoffset:10},"100%":{strokeDashoffset:0}}},".rc-tree-select-tree-title":{textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden",".rc-tree-select-tree-title-desc":{fontSize:"12px",maxWidth:"100%",textOverflow:"ellipsis",whiteSpace:"nowrap",overflow:"hidden"}},".rc-tree-select-tree-indent":{flexGrow:0,height:0,verticalAlign:"bottom"},".rc-tree-select-tree-indent-unit":{display:"inline-block",width:"1em"}}}})),Jv=({disabled:e,classNames:t,styles:r,unstyled:i,radius:s,style:o,label:l,value:u,onChange:d,treeData:p,errorMessage:f})=>{const{classes:g,cx:h}=Kv({radius:s},{name:"FilterTreeSelectWidget",classNames:t,styles:r,unstyled:i}),[y,C]=m.useState(!1),w=I=>{C(I)},S=y&&(u==null?void 0:u.length)>0;return c(a.Stack,{spacing:3,children:[c(a.Group,{position:"apart",children:[n(a.Text,{className:g.label,children:l}),S&&n(a.Tooltip,{label:`${u.length} selected`,children:n(a.Badge,{children:u.length})})]}),n(Mi,{disabled:e,allowClear:!0,className:h(g.root,"check-select"),dropdownClassName:h(g.dropdown,""),onDropdownVisibleChange:w,transitionName:"rc-tree-select-dropdown-slide-up",choiceTransitionName:"rc-tree-select-selection__choice-zoom",style:o,treeLine:!0,clearIcon:()=>n(a.CloseButton,{}),switcherIcon:Uv,treeIcon:Zv,maxTagTextLength:10,value:u,treeData:p,notFoundContent:n(Ss,{errorMessage:f}),treeNodeFilterProp:"filterBasis",treeCheckable:!0,showCheckedStrategy:Mi.SHOW_PARENT,onChange:d,onSelect:console.log,maxTagCount:0,maxTagPlaceholder:I=>`${I.length} selected`})]})},Hv=T.observer(({label:e,config:t,value:r,onChange:i})=>{const{treeData:s,treeDataLoading:o,errorMessage:l}=t,u=t.min_width?t.min_width:"200px",p=!!t.options_query_id?o:!1;return n(Jv,{disabled:p,style:{minWidth:"160px",width:u,maxWidth:p?u:"unset",borderColor:"#e9ecef"},value:r,onChange:f=>i(f,!1),treeData:s,errorMessage:l,label:e})}),ex=T.observer(({filter:{type:e,config:t,key:r,...i},formFieldProps:s})=>{switch(e){case"select":return n(Yv,{...i,...s,config:t});case"multi-select":return n(Wv,{...i,...s,config:t});case"tree-select":return n(Hv,{...i,...s,config:t});case"text-input":return n(Rv,{...i,...s,config:t});case"date-range":return n(_s,{...i,...s,config:t});case"checkbox":return n(Gv,{...i,...s,config:t});default:return null}}),Ts=T.observer(m.forwardRef(({filter:e,...t},r)=>n("div",{className:"filter-root",ref:r,children:n(ke,{children:n(ex,{filter:e,formFieldProps:t})})}))),ks=T.observer(function({view:t}){const r=Y(),{control:i,handleSubmit:s,reset:o}=x.useForm({defaultValues:r.filters.values,reValidateMode:"onBlur"}),l=x.useWatch({control:i});m.useEffect(()=>{o(r.filters.values)},[r.filters.values,o]),m.useEffect(()=>{r.filters.updatePreviewValues(l)},[l]);const u=r.filters.visibleInView(t.id),d=m.useMemo(()=>u.every(h=>h.should_auto_submit),[u]),p=m.useMemo(()=>u.filter(h=>v.get(h,"config.required",!1)),[u]),f=m.useMemo(()=>p.length===0?!1:p.some(h=>!h.requiredAndPass(l[h.key])),[l,p]);if(u.length===0)return null;const g=(h,y)=>(C,w)=>{y(C),(h.should_auto_submit||w)&&r.filters.setValueByKey(h.key,C)};return n("form",{onSubmit:s(r.filters.setValues),children:c(a.Group,{className:"dashboard-filters",position:"apart",noWrap:!0,sx:d?{}:{border:"1px solid #e9ecef",borderRadius:"4px",padding:"16px"},children:[n(a.Group,{align:"flex-start",children:u.map(h=>n(x.Controller,{name:h.key,control:i,render:({field:y})=>n(Ts,{filter:h,value:y.value,onChange:g(h,y.onChange)})},h.id))}),!d&&n(a.Group,{sx:{alignSelf:"flex-end"},children:n(a.Button,{color:"blue",size:"sm",type:"submit",disabled:f,children:"Search"})})]})})}),l_="";function tx(e){return e?["<p><br></p>","<p></p>"].includes(e):!0}const Ds=T.observer(()=>{const{freezeLayout:e}=m.useContext(Ke),[t,r]=m.useState(!1),{panel:i}=we();return m.useEffect(()=>{e(t)},[t]),tx(i.description)?null:c(V,{children:[n(a.Modal,{opened:t,onClose:()=>r(!1),title:i.title,withCloseButton:!1,withinPortal:!0,zIndex:310,children:n(en,{value:i.description,styles:{root:{border:"none"},content:{padding:0}}})}),n(a.Tooltip,{label:"Click to see description",position:"top-start",withinPortal:!0,children:n(a.ActionIcon,{variant:"subtle",color:"blue",onClick:()=>r(s=>!s),sx:{verticalAlign:"baseline",cursor:"pointer"},children:n(k.InfoCircle,{size:20})})})]})}),nx=T.observer(({view:e})=>{const t=ce(),r=Y(),i=Le.useModals(),{panel:s}=we(),{id:o,query:l}=s,{inEditMode:u}=m.useContext(Ke),d=()=>l==null?void 0:l.fetchData(),{viewPanelInFullScreen:p,inFullScreen:f}=m.useContext(mr),g=()=>{r.duplicatePanelByID(o,e.id)},h=()=>{t.editor.open(["_VIEWS_",e.id,"_PANELS_",o])},y=()=>i.openConfirmModal({title:"Delete this panel?",labels:{confirm:"Confirm",cancel:"Cancel"},onCancel:()=>console.log("Cancel"),onConfirm:()=>r.removePanelByID(o,e.id),confirmProps:{color:"red"},zIndex:320}),C=m.useCallback(()=>{p(o)},[o,p]),w=!f&&e.type!==K.Modal;return n(V,{children:n(a.Box,{sx:{position:"absolute",top:0,left:0,right:0,zIndex:300},children:c(a.Menu,{withinPortal:!0,children:[n(a.Menu.Target,{children:n(a.Box,{className:"panel-dropdown-target",sx:{width:"100%",height:"25px"}})}),c(a.Menu.Dropdown,{children:[n(a.Menu.Item,{onClick:d,icon:n(k.Refresh,{size:14}),children:"Refresh"}),n(a.Menu.Item,{onClick:()=>r.queries.downloadDataByQueryID((l==null?void 0:l.id)??""),icon:n(k.Download,{size:14}),children:"Download Data"}),w&&n(a.Menu.Item,{onClick:C,icon:n(k.ArrowsMaximize,{size:14}),disabled:u,children:"Full Screen"}),u&&c(V,{children:[n(a.Divider,{label:"Edit",labelPosition:"center"}),n(a.Menu.Item,{onClick:h,icon:n(k.Settings,{size:14}),children:"Settings"}),n(a.Menu.Item,{onClick:g,icon:n(k.Copy,{size:14}),children:"Duplicate"}),n(a.Menu.Item,{color:"red",onClick:y,icon:n(k.Trash,{size:14}),children:"Delete"})]})]})]})})})}),u_="",rx=T.observer(function(){const{panel:t}=we(),{title:r}=t;return r?n(a.Group,{grow:!0,position:"center",px:20,className:"panel-title-wrapper",sx:{flexGrow:1},children:n(a.Text,{align:"center",lineClamp:1,weight:"bold",children:r})}):null});var Is=(e=>(e.migrated="migrated",e.nothingToMigrate="nothingToMigrate",e.checkFailed="checkFailed",e.migrationFailed="migrationFailed",e))(Is||{}),an=(e=>(e.notStarted="notStarted",e.inProgress="inProgress",e.done="done",e))(an||{});class ix{constructor(t){O(this,"vizInstance");O(this,"operationManager");O(this,"triggerManager");O(this,"vizManager");O(this,"runningMigration");O(this,"panelModel");O(this,"status","notStarted");this.panelModel=t.getRequired(be.instanceScope.panelModel),this.vizInstance=t.getRequired(be.instanceScope.vizInstance),this.operationManager=t.getRequired(be.instanceScope.operationManager),this.triggerManager=t.getRequired(be.instanceScope.triggerManager),this.vizManager=t.getRequired(be.vizManager)}async createMigrationTask(){const t=[];try{await this.instanceNeedMigration()&&t.push(()=>this.runInstanceMigration()),await this.interactionNeedMigration()&&t.push(()=>this.runInteractionMigration())}catch(r){return console.warn("check migration failed",r),"checkFailed"}if(t.length===0)return"nothingToMigrate";try{return await Promise.all(t.map(r=>r())),"migrated"}catch(r){return console.warn("migration failed",r),"migrationFailed"}}async runMigration(){return this.runningMigration||(this.status="inProgress",this.runningMigration=this.createMigrationTask().then(t=>(this.status="done",t))),this.runningMigration}async runInteractionMigration(){await this.operationManager.runMigration(),await this.triggerManager.runMigration()}async runInstanceMigration(){const t=this.vizManager.resolveComponent(this.vizInstance.type),r={configData:this.vizInstance.instanceData,panelModel:this.panelModel};await t.migrator.migrate(r)}async instanceNeedMigration(){const t=this.vizManager.resolveComponent(this.vizInstance.type),r={configData:this.vizInstance.instanceData};return t.migrator.needMigration(r)}async interactionNeedMigration(){return await this.operationManager.needMigration()||await this.triggerManager.needMigration()}}function Ms(e){const{panel:t}=we();return m.useCallback(r=>{const i=r.getRequired(be.vizManager),s=i.resolveComponent(e.viz.type);return r.createScoped().provideFactory(be.instanceScope.vizInstance,()=>i.getOrCreateInstance(e)).provideFactory(be.instanceScope.interactionManager,o=>{const l=o.getRequired(be.instanceScope.vizInstance);return new or(l,s,nn)}).provideFactory(be.instanceScope.operationManager,o=>o.getRequired(be.instanceScope.interactionManager).operationManager).provideFactory(be.instanceScope.triggerManager,o=>o.getRequired(be.instanceScope.interactionManager).triggerManager).provideValue(be.instanceScope.panelModel,t).provideFactory(be.instanceScope.migrator,o=>new ix(o))},[e.viz.type,e.viz.conf])}function As(e){const[t,r]=m.useState(!1),i=ws().getRequired(be.instanceScope.migrator);return X.useAsyncEffect(async()=>{const s=i.status===an.notStarted;r(i.status===an.done),i.status===an.notStarted&&i.runMigration().then(o=>{o===Is.migrated&&s&&(e==null||e())}).finally(()=>{r(!0)})},[i]),t}function $s(e,t){const r=ws().getRequired(be.instanceScope.vizInstance);return m.useEffect(()=>(r.instanceData.setItem(null,t.viz.conf),r.instanceData.watchItem(null,i=>{e(i)})),[e,t.viz.type]),r}function ax({setVizConf:e,...t}){const{panel:r}=t,i=$s(e,r),s=As(()=>{Ot.showNotification({title:`${r.title} - Updated`,message:"Your plugin configuration has been migrated to the latest version"})});return X.useAsyncEffect(async()=>{await i.instanceData.setItem(null,r.viz.conf)},[i,r.viz.type]),s?n(bl,{...t}):n(a.Text,{children:"Checking update..."})}function sx(e){const{panel:t,setVizConf:r}=e;$s(r,t);const{inEditMode:i}=m.useContext(Ke);return As(()=>{i&&Ot.showNotification({title:`${t.title} - Updated`,message:"Your plugin configuration has been migrated to the latest version"})})?n(ml,{...e}):n(a.Text,{children:"Checking update"})}const d_="";function ox(e,t){const{vizManager:r}=m.useContext(qe),{panel:{viz:i,title:s,id:o,description:l,queryID:u,variables:d}}=we(),p={title:s,id:o,description:l,queryID:u,viz:i,layout:t},f=Ms(p);try{return r.resolveComponent(i.type),n(rn,{configure:f,children:n(sx,{setVizConf:i.setConf,panel:p,data:e,variables:d,vizManager:r})})}catch(g){return console.info(v.get(g,"message")),null}}const lx=["richText","button"],zs=T.observer(function({viz:t,data:r,loading:i,error:s,query:o}){const{ref:l,width:u,height:d}=ve.useElementSize(),p=ox(r,{w:u,h:d});if(lx.includes(t.type))return n("div",{className:"viz-root",ref:l,children:n(ke,{children:p})});if(i)return n("div",{className:"viz-root",style:{position:"relative"},ref:l,children:n(a.LoadingOverlay,{visible:i,exitTransitionDuration:0})});const g=!!s,h=!g&&!!(o!=null&&o.stateMessage),y=!g&&!h;return c("div",{className:"viz-root",ref:l,children:[g&&n(a.Text,{color:"red",size:"md",align:"center",sx:{fontFamily:"monospace"},children:s}),h&&n(a.Text,{color:"gray",align:"center",children:o.stateMessage}),y&&n(ke,{children:p})]})});function ux(e){return!["richText","button"].includes(e)}const dx={border:"1px solid #e9ecef"},Es={border:"1px dashed transparent",transition:"border-color 300ms ease","&:hover":{borderColor:"#e9ecef"}};function cx(e,t,r){return e.style.border.enabled?dx:r||t?Es:{border:"1px dashed transparent"}}const sn=T.observer(function({panel:t,view:r}){const i=Y(),{inEditMode:s}=m.useContext(Ke),{data:o,state:l,error:u}=i.getDataStuffByID(t.queryID),d=i.queries.findByID(t.queryID),p=ux(t.viz.type),f=p&&l==="loading",g=t.title?"calc(100% - 25px - 5px)":"100%",h=cx(t,p,s),y=p||s;return n(Mn,{value:{panel:t,data:o,loading:f},children:c(a.Box,{className:"panel-root",p:5,pt:0,sx:{...h},children:[n(a.Box,{sx:{position:"absolute",left:0,top:0,height:28,zIndex:310},children:n(Ds,{})}),y&&n(nx,{view:r}),n(rx,{}),n(a.Flex,{direction:"column",sx:{height:g},children:n(zs,{viz:t.viz,data:o,loading:f,error:u,query:d})})]})})}),c_="",px=m.forwardRef(({h:e},t)=>n(a.ActionIcon,{ref:t,className:"react-grid-customDragHandle",sx:{userSelect:"none",cursor:"grab",position:"absolute",top:5,right:e>38?5:20,zIndex:400,"&:hover":{color:"#228be6"}},variant:"transparent",children:n(k.ArrowsMove,{size:16})})),hx=m.forwardRef(({handleAxis:e,...t},r)=>n(a.ActionIcon,{ref:r,className:"react-grid-customResizeHandle",sx:{userSelect:"none",cursor:"nwse-resize",position:"absolute",bottom:0,right:0,zIndex:400,"&:hover":{color:"#228be6"}},variant:"transparent",...t,children:n(k.ChevronDownRight,{size:16})})),fx=Vt.WidthProvider(Vt),gx=T.observer(({view:e,className:t="layout"})=>{const r=Y(),{panels:i,layouts:s}=r.panels.panelsByIDs(e.panelIDs),o=m.useCallback(u=>{u.forEach(({i:d,...p})=>{const f=r.panels.findByID(d);f&&f.layout.set(p)})},[r]),l=(u,d,p,f)=>{p.h<30&&(p.h=30,f.h=30),p.w<4&&(p.w=4,f.w=4)};return n(fx,{onLayoutChange:o,className:`dashboard-layout ${t}`,rowHeight:1,cols:36,margin:[0,0],isBounded:!0,isDraggable:!0,isResizable:!0,layout:s,draggableHandle:".react-grid-customDragHandle",resizeHandle:n(hx,{}),onResize:l,children:i.map((u,d)=>c("div",{"data-grid":{...u.layout},className:"panel-grid-item",children:[n(px,{h:u.layout.h}),n(sn,{view:e,panel:u})]},u.id))})}),mx=Vt.WidthProvider(Vt),bx=T.observer(function({view:t,className:r="layout"}){const{panels:i,layouts:s}=Y().panels.panelsByIDs(t.panelIDs);return n(mx,{className:`dashboard-layout ${r}`,cols:36,rowHeight:1,margin:[0,0],isDraggable:!1,isResizable:!1,layout:s,children:i.map(o=>n("div",{"data-grid":{...o.layout},className:"panel-grid-item",children:n(sn,{view:t,panel:o})},o.id))})}),yx=T.observer(({children:e})=>n(a.Box,{pt:10,pb:100,children:e})),vx=T.observer(({children:e,view:t})=>{const r=t.config;return n(a.Modal,{size:r.width,overflow:"inside",opened:!0,onClose:v.noop,withCloseButton:!1,title:r.custom_modal_title.value,trapFocus:!0,onDragStart:i=>{i.stopPropagation()},styles:{root:{position:"relative",height:"100%"},overlay:{position:"absolute !important"},modal:{border:"1px solid #efefef"},body:{maxHeight:"calc(100vh - 325px)"}},withinPortal:!1,transitionDuration:0,children:e})}),xx=({variant:e,orientation:t})=>{const r={tab:{},panel:{padding:"16px"}};return e==="pills"&&t==="horizontal"&&(r.tab.paddingTop="6px",r.tab.paddingBottom="6px"),t==="vertical"&&(r.tab["&.add-a-tab"]={paddingTop:"1px",paddingBottom:"1px"},r.tab["&.add-a-tab .mantine-Tabs-tabLabel"]={marginLeft:"auto",marginRight:"auto"}),r},Cx=e=>e.color?{"&[data-active], &[data-active]:hover":{borderColor:e.color?e.color:"..."}}:{},wx=T.observer(({children:e,view:t})=>{const r=Le.useModals(),i=Y(),s=m.useMemo(()=>i.views.options.filter(d=>d.type===K.Division),[t.id,i.views.options]),o=t.config,l=d=>r.openConfirmModal({title:"Delete this tab?",labels:{confirm:"Confirm",cancel:"Cancel"},onCancel:()=>console.log("Cancel"),onConfirm:()=>{o.removeTab(d)},confirmProps:{color:"red"},zIndex:320}),u=o.tabs.length===0;return c(a.Box,{className:"preview-view-tabs",children:[c(a.Tabs,{variant:o.variant,orientation:o.orientation,defaultValue:o.tabs.length>0?o.tabs[0].id:"0",styles:xx(o),children:[c(a.Tabs.List,{grow:o.grow,children:[o.tabs.map(d=>n(a.Tabs.Tab,{value:d.id,sx:Cx(d),children:d.name??d.id},d.id)),n(a.Tabs.Tab,{onClick:o.addTab,value:"add",className:"add-a-tab",children:n(k.Plus,{size:18,color:"#228be6"})})]}),o.tabs.map((d,p)=>{const f=i.views.findByID(d.view_id);return c(a.Tabs.Panel,{value:d.id,sx:{position:"relative"},children:[c(a.Box,{sx:{position:"absolute",top:0,left:0,right:0,bottom:0,zIndex:200},children:[n(a.Overlay,{opacity:.8,color:"#FFF",blur:10,zIndex:100}),c(a.Stack,{mx:"auto",mt:100,sx:{width:"300px",position:"relative",zIndex:200},children:[n(a.TextInput,{label:"Tab Name",value:d.name,onChange:g=>d.setName(g.currentTarget.value)}),n(a.Select,{label:"View",value:d.view_id,onChange:d.setViewID,data:s}),n(a.ColorInput,{label:"Color",value:d.color,onChange:d.setColor,disabled:o.variant!=="default"}),f&&c(a.Button,{mt:20,variant:"gradient",leftIcon:n(L.IconArrowsLeftRight,{size:18}),gradient:{from:"cyan",to:"indigo"},onClick:()=>i.views.setIDOfVIE(f.id),children:["Swith to View: ",f.name]}),n(a.Button,{mt:20,variant:"subtle",color:"red",onClick:()=>l(p),disabled:u,leftIcon:n(L.IconTrash,{size:14}),children:"Delete This Tab"})]})]}),f&&n(on,{view:f})]},d.id)})]}),e]})}),_x=T.observer(({view:e,children:t})=>{switch(e.type){case K.Modal:return n(vx,{view:e,children:t});case K.Tabs:return n(wx,{view:e,children:t});case K.Division:default:return n(yx,{children:t})}}),Ls=T.observer(function({view:t}){return n(mr.Provider,{value:{viewPanelInFullScreen:v.noop,inFullScreen:!1},children:n(a.Box,{className:"dashboard-view","data-enable-scrollbar":!0,children:n(_x,{view:t,children:c(a.Box,{sx:{position:"relative"},children:[n(a.Box,{className:"dashboard-sticky-area",sx:{position:"sticky",top:"0px"},children:n(ks,{view:t})}),n(gx,{view:t})]})})})})}),Sx={modal:{display:"flex",flexDirection:"column",flexWrap:"nowrap"},body:{display:"flex",height:"calc(100vh - 88px)"}},Tx=T.observer(function({view:t,panel:r,exitFullScreen:i}){return n(a.Modal,{opened:!0,fullScreen:!0,onClose:i,title:n(a.Button,{color:"blue",size:"xs",onClick:i,leftIcon:n(k.ArrowLeft,{size:20}),children:"Exit fullscreen"}),styles:Sx,children:n(a.Group,{grow:!0,sx:{flexGrow:1,flexShrink:0},children:n(sn,{view:t,panel:r})})})});function kx(e,t,r){const{panels:i}=Y(),s=e.id==="Main",[o,l]=m.useState(()=>s&&i.findByID(t)?t:null),u=m.useCallback(g=>{l(g),s&&r(g)},[s,r]),d=m.useCallback(()=>{l(null),s&&r("")},[s,r]),p=o?i.findByID(o):null;return{viewPanelInFullScreen:u,exitFullScreen:d,inFullScreen:!!p,fullScreenPanel:p}}const Dx=T.observer(({children:e})=>n(a.Box,{children:e})),Ix=T.observer(({children:e,view:t})=>{const r=Y(),i=t.config,s=r.views.visibleViewIDs.includes(t.id),o=()=>r.views.rmVisibleViewID(t.id);return n(a.Modal,{size:i.width,centered:!0,overflow:"inside",opened:s,onClose:o,withCloseButton:!1,title:i.custom_modal_title.value,trapFocus:!0,onDragStart:l=>{l.stopPropagation()},styles:{modal:{border:"1px solid #efefef"},body:{maxHeight:i.height,overflow:"auto"}},transitionDuration:0,children:e})}),Mx=e=>e.color?{"&[data-active], &[data-active]:hover":{borderColor:e.color?e.color:"..."}}:{},Ax=T.observer(({children:e,view:t})=>{const r=Y(),i=t.config;return c(a.Box,{className:"render-view-tabs",children:[c(a.Tabs,{variant:i.variant,orientation:i.orientation,defaultValue:i.tabs.length>0?i.tabs[0].id:"0",styles:{panel:{padding:i.orientation==="horizontal"?"16px 0px":"0"}},keepMounted:!1,children:[n(a.Tabs.List,{grow:i.grow,children:i.tabs.map(s=>n(a.Tabs.Tab,{value:s.id,sx:Mx(s),disabled:!s.view_id,children:s.name??s.id},s.id))}),i.tabs.map(s=>{const o=r.views.findByID(s.view_id);return o?n(a.Tabs.Panel,{value:s.id,children:n(on,{view:o})},s.id):null})]}),e]})}),$x=T.observer(({view:e,children:t})=>{switch(e.type){case K.Modal:return n(Ix,{view:e,children:t});case K.Tabs:return n(Ax,{view:e,children:t});case K.Division:default:return n(Dx,{children:t})}}),on=T.observer(function({view:t}){const{fullScreenPanelID:r,setFullScreenPanelID:i}=xa(),{viewPanelInFullScreen:s,exitFullScreen:o,inFullScreen:l,fullScreenPanel:u}=kx(t,r,i);return n(mr.Provider,{value:{viewPanelInFullScreen:s,inFullScreen:l},children:c(a.Box,{className:"dashboard-view","data-enable-scrollbar":!0,children:[l&&n(Tx,{view:t,panel:u,exitFullScreen:o}),n($x,{view:t,children:c(a.Box,{sx:{position:"relative"},children:[!l&&n(a.Box,{className:"dashboard-sticky-area",sx:{position:"sticky",top:"0px"},children:n(ks,{view:t})}),!l&&n(bx,{view:t})]})})]})})});function br(e){return m.useCallback(t=>t.provideValue(be.pluginManager,e.pluginManager).provideValue(be.vizManager,e.vizManager).provideValue(be.colorManager,e.colorManager),[])}const zx=T.observer(({headerMenuItems:e=null})=>{const t=ce(),r=Y(),i=()=>{const s=JSON.stringify(r.json,null,2),o=`${t.name}__${r.name}`;Qo(o,s)};return c(a.Menu,{shadow:"md",width:200,trigger:"hover",openDelay:100,closeDelay:400,withinPortal:!0,zIndex:310,children:[n(a.Menu.Target,{children:n(a.ActionIcon,{variant:"light",color:"blue",children:n(L.IconMenu2,{size:14})})}),c(a.Menu.Dropdown,{children:[n(a.Menu.Item,{icon:n(L.IconDownload,{size:14}),onClick:r.queries.downloadAllData,children:"Download Data"}),n(a.Menu.Item,{icon:n(L.IconCode,{size:14}),onClick:i,children:"Download Schema"}),e]})]})}),Ex=T.observer(({saveDashboardChanges:e})=>{const t=Le.useModals(),r=Y(),i=()=>{t.openConfirmModal({title:c(a.Group,{position:"left",children:[n(L.IconAlertTriangle,{size:18,color:"red"}),n(a.Text,{children:"You are reverting changes"})]}),labels:{confirm:"Confirm",cancel:"Cancel"},confirmProps:{color:"red"},onCancel:()=>console.log("Cancel"),onConfirm:()=>r.reset(),zIndex:320,withCloseButton:!1})},s=r.changed;return c(a.Group,{spacing:0,children:[n(a.Button,{color:"green",variant:"filled",size:"xs",leftIcon:n(L.IconDeviceFloppy,{size:18}),onClick:e,disabled:!s,sx:{borderTopRightRadius:0,borderBottomRightRadius:0},children:"Save Changes"}),c(a.Menu,{width:200,trigger:"hover",openDelay:100,closeDelay:400,withinPortal:!0,zIndex:320,disabled:!s,children:[n(a.Menu.Target,{children:n(a.ActionIcon,{variant:"default",disabled:!s,sx:{height:"30px",borderTopLeftRadius:0,borderBottomLeftRadius:0,svg:{fill:"rgb(173, 181, 189)",stroke:"none"}},children:n(L.IconCaretDown,{size:18})})}),n(a.Menu.Dropdown,{children:n(a.Menu.Item,{icon:n(L.IconRecycle,{size:14,color:"red"}),disabled:!s,onClick:i,children:"Revert Changes"})})]})]})}),Lx=T.observer(({saveDashboardChanges:e,headerSlot:t=null,headerMenuItems:r})=>{const i=xo.useNavigate(),s=ce(),o=()=>{i(`/dashboard/${s.id}`)},l=Le.useModals(),u=()=>{l.openConfirmModal({title:c(a.Group,{position:"left",children:[n(L.IconAlertTriangle,{size:18,color:"red"}),n(a.Text,{children:"There are unsaved changes"})]}),labels:{confirm:"Discard",cancel:"Cancel"},confirmProps:{color:"red"},onCancel:()=>console.log("Cancel"),onConfirm:o,zIndex:320,withCloseButton:!1})},d=s.content.changed;return n(a.Header,{height:60,px:"md",py:0,sx:{zIndex:299},children:c(a.Group,{position:"apart",sx:{height:60,minWidth:"1000px",position:"relative"},children:[c(a.Group,{children:[n(a.Button,{size:"xs",color:d?"red":"green",leftIcon:n(L.IconArrowLeft,{size:20}),onClick:d?u:o,children:c(a.Group,{spacing:4,children:["End Editing",n(a.Text,{td:"underline",children:s.name})]})}),n(Ex,{saveDashboardChanges:e})]}),c(a.Group,{position:"right",sx:{flexGrow:1},children:[t,n(zx,{headerMenuItems:r})]})]})})}),Px={position:"fixed",top:60,left:0,right:0,height:30,zIndex:299,borderBottom:"1px solid #e9ecef",background:"rgba(233,236,239, 0.15)"},Ox=T.observer(()=>{const e=Y();return n(a.Box,{sx:Px,pl:{base:200,xs:200,sm:200,md:220,lg:240,xl:260},children:c(a.Group,{position:"apart",align:"center",sx:{height:"30px"},pr:16,children:[n(a.Button,{variant:"outline",color:"blue",radius:0,size:"xs",disabled:!e.views.VIE,onClick:()=>e.addANewPanel(e.views.idOfVIE),leftIcon:n(L.IconPlaylistAdd,{size:20}),sx:{height:"30px",borderLeft:"none",borderTop:"none",borderRight:"1px solid #e9ecef",borderBottom:"1px solid #e9ecef",background:"rgb(231, 245, 255)"},children:"Add a Panel"}),n(a.Box,{}),n(a.Box,{})]})})}),Vx=T.observer(e=>c(V,{children:[n(Lx,{...e}),n(Ox,{})]})),p_="",h_="";function Bx(e,t,r){const i=[];return e.filter(s=>"__INTERACTIONS"in s.viz.conf).forEach((s,o)=>{const l=t[s.id];l.data.interactions=v.get(l,"data.interactions",[]);const{__INTERACTIONS:u,__OPERATIONS:d,__TRIGGERS:p}=s.viz.conf;Object.entries(d).forEach(([f,g])=>{const{schemaRef:h,data:y}=g,{config:C}=y;switch(h){case"builtin:op:open-link":let w=C.urlTemplate.substring(0,100);C.urlTemplate.length>=20&&(w+="..."),l.type="interaction",l.data.interactions.push({schemaRef:h,urlTemplate:C.urlTemplate,shortURLTemplate:w});return;case"builtin:op:open_view":i.push({id:`OPERATION--${f}`,source:s.id,target:C.viewID,label:"Open View",style:{stroke:"rgba(0,0,0,0.8)"},type:"default"});return;case"builtin:op:set_filter_values":l.type="interaction",l.data.interactions.push({schemaRef:h,filters:Object.keys(C.dictionary).map(S=>({key:S,label:r[S]}))});return;case"builtin:op:clear_filter_values":l.type="interaction",l.data.interactions.push({schemaRef:h,filters:C.filter_keys.map(S=>({key:S,label:r[S]}))});return;default:return}})}),i}function Nx(e,t){const r=e.filters.keyLabelMap;return{edges:Bx(e.panels.list,t,r),edgeNodes:[]}}function Ps(e,t,r){return e*t+e*r}function Gx(e,t,r){return e*t+(e-1)*r}const ln=25,yr=40,Os=25,vr=350,qx=150,Fx=150,Vs=150,Bs=300,un=40,Ns=25,Wx=300;function jx(e,t){const r=v.keyBy(t,s=>s.id),i=[];return e.current.forEach((s,o)=>{s.panelIDs.forEach((l,u)=>{const d=Ps(u,un,Ns)+yr,p=r[l];if(!p){i.push({id:l,_node_type:"panel",parentNode:s.id,data:{label:`!: ${l}`},position:{x:ln,y:d},sourcePosition:xe.Position.Right,targetPosition:xe.Position.Left,style:{width:Bs,height:un}});return}const f=p.title.trim()?`${p.title}`:p.viz.type;i.push({id:p.id,_node_type:"panel",parentNode:s.id,data:{label:f},position:{x:ln,y:d},sourcePosition:xe.Position.Right,targetPosition:xe.Position.Left,style:{width:Bs,height:un}})})}),i}const Yx={[K.Division]:"Div",[K.Modal]:"Modal",[K.Tabs]:"Tabs"},Rx=hs;function Qx(e){return e.current.map((r,i)=>{const s=Gx(r.panelIDs.length,un,Ns)+yr+Os;let o=[];return r.type===K.Tabs&&(o=r.config.tabs.map(u=>u.view_id)),{id:r.id,_node_type:"view-root",_view_type:r.type,_view_level:0,_sub_view_ids:[],_tab_view_ids:o,data:{label:`${Yx[r.type]}:${r.name}`},position:{x:0,y:0},sourcePosition:xe.Position.Right,targetPosition:xe.Position.Left,className:"light",style:{backgroundColor:Rx[r.type],width:vr,height:s}}})}function Ux(e){const t=v.keyBy(e,r=>r.id);e.forEach(r=>{r._node_type!=="view-root"||r._view_type!==K.Tabs||r._tab_view_ids.forEach(i=>{t[i].parentNode=r.id})})}function Xx(e){const t=Qx(e.views);Ux(t);const r=jx(e.views,e.panels.list);return[...t,...r]}function Zx({nodeMap:e,nodes:t,edges:r}){t.forEach(i=>{i._node_type!=="view-root"||i._view_type!==K.Tabs||(i.sourcePosition=xe.Position.Bottom,i.style.width=vr+ln*2,i.style.height=Os+i._tab_view_ids.reduce((s,o)=>{const l=e[o];l.position.y=s,l.position.x=ln;const u=l.style.height;return s+u+20},yr))})}function Kx({nodeMap:e,nodes:t,edges:r}){r.filter(i=>i.label==="Open View").forEach(i=>{const s=e[i.source],o=e[i.target];if(!s||!o||!s.parentNode)return;const l=e[s.parentNode];l._node_type!=="view-root"||o._node_type!=="view-root"||(o._view_level+=1+l._view_level,l._sub_view_ids.push(o.id))}),t.sort((i,s)=>i._node_type==="view-root"&&s._node_type==="view-root"?i._view_level-s._view_level:i._node_type!=="view-root"&&s._node_type!=="view-root"?0:i._node_type==="view-root"?-1:1)}function Jx({nodeMap:e,nodes:t,edges:r}){const i={};r.forEach(s=>{if(s.label!=="Open View")return;const o=e[s.source],l=e[s.target];if(o&&l&&o.parentNode){const u=e[o.parentNode],d=u.position.x,p=Number(v.get(l,"style.height",0)),f=Number(u.style.width);l.position.x=d+f+Wx,u._view_level===0&&l._sub_view_ids.length===0&&(o.sourcePosition=xe.Position.Left,l.targetPosition=xe.Position.Right,l.position.x*=-1);const h=l.position.x,y=v.get(i,h,0);l.position.y=y,i[h]=y+p+Vs}})}function Hx({nodeMap:e,nodes:t,edges:r}){const i=new Set,s=new Set;r.forEach(l=>{i.add(l.source),s.add(l.target)}),t.filter(l=>l._node_type!=="view-root"||l.id==="Main"||l.parentNode?!1:!i.has(l.id)&&!s.has(l.id)).forEach((l,u)=>{l.position.x=Ps(u,vr,Fx),l.position.y=0-qx-Vs})}function e0({nodeMap:e,nodes:t,edges:r}){const i={nodeMap:e,nodes:t,edges:r};return Hx(i),Kx(i),Zx(i),Jx(i),{nodes:t,edges:r}}function t0(e){const t=Xx(e),r=v.keyBy(t,d=>d.id),{edges:i,edgeNodes:s}=Nx(e,r),o=[...t,...s],l=v.keyBy(o,d=>d.id),u={edges:v.uniqBy(i,d=>d.id),nodes:o,nodeMap:l};return e0(u)}const f_="",xr={"builtin:op:open-link":n(a.ThemeIcon,{color:"blue",size:20,radius:"xl",children:n(L.IconCircleDashed,{size:14})}),"builtin:op:set_filter_values":n(a.ThemeIcon,{color:"orange",size:20,radius:"xl",children:n(L.IconCircleDot,{size:14})}),"builtin:op:clear_filter_values":n(a.ThemeIcon,{color:"orange",size:20,radius:"xl",children:n(L.IconCircleOff,{size:14})})};function n0(e){const t=[];return e.forEach(r=>{switch(r.schemaRef){case"builtin:op:open-link":t.push({key:r.urlTemplate,icon:xr[r.schemaRef],text:c(a.Group,{spacing:4,children:[n(a.Text,{children:"Open: "}),n(a.Text,{color:"dimmed",children:r.shortURLTemplate})]})});return;case"builtin:op:set_filter_values":r.filters.forEach(({key:i,label:s})=>{t.push({key:r.schemaRef+i,icon:xr[r.schemaRef],text:n(a.Group,{spacing:4,children:c(a.Text,{children:["Set Filter: ",s]})})})});return;case"builtin:op:clear_filter_values":r.filters.forEach(({key:i,label:s})=>{t.push({key:r.schemaRef+i,icon:xr[r.schemaRef],text:n(a.Group,{spacing:4,children:c(a.Text,{children:["Clear Filter: ",s]})})})});return}}),t}const r0=m.memo(({data:e,isConnectable:t,sourcePosition:r=xe.Position.Right,targetPosition:i=xe.Position.Left,...s})=>{const o=m.useMemo(()=>n0(e.interactions),[e.interactions]);return c(V,{children:[n(xe.Handle,{type:"target",position:i,isConnectable:t}),n(a.Box,{sx:{position:"absolute",top:0,right:0},children:n(k.ChevronsUpRight,{size:12})}),c(a.HoverCard,{shadow:"xl",withinPortal:!0,children:[n(a.HoverCard.Target,{children:n(a.Text,{children:e.label})}),n(a.HoverCard.Dropdown,{children:n(a.List,{spacing:"xs",size:"sm",center:!0,children:o.map(l=>n(a.List.Item,{icon:l.icon,children:l.text},l.key))})})]}),n(xe.Handle,{type:"source",position:r,isConnectable:t})]})}),g_="",i0={interaction:r0},a0=T.observer(()=>{const e=Y(),{edges:t,nodes:r}=t0(e);return c(xe,{nodes:r,edges:t,onNodesChange:v.noop,onEdgesChange:v.noop,onConnect:v.noop,className:"interactions-viewer",fitView:!0,nodeTypes:i0,children:[n(xe.MiniMap,{}),n(xe.Controls,{}),n(xe.Background,{})]})}),s0=T.observer(({opened:e,close:t})=>{const{freezeLayout:r}=m.useContext(Ke);return m.useEffect(()=>{r(e)},[e]),n(a.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:t,title:"Interactions",trapFocus:!0,onDragStart:i=>{i.stopPropagation()},styles:{body:{height:"90vh"},modal:{transform:"none !important"}},zIndex:300,children:n(a0,{})})}),o0={"> button":{"&:first-of-type":{borderTopRightRadius:0,borderBottomRightRadius:0,borderRightWidth:.5},":not(:first-of-type):not(:last-of-type)":{borderTopRightRadius:0,borderBottomRightRadius:0,borderTopLeftRadius:0,borderBottomLeftRadius:0,borderLeftWidth:.5,borderRightWidth:.5},"&:last-of-type":{borderTopLeftRadius:0,borderBottomLeftRadius:0,borderLeftWidth:.5}}};function l0({onClick:e,name:t,active:r,openSettings:i}){return c(a.Box,{sx:{position:"relative"},children:[n(a.UnstyledButton,{sx:s=>({display:"block",width:"100%",padding:s.spacing.xs,borderRadius:0,position:"relative",color:s.black,"&:hover":{backgroundColor:s.colors.gray[0]},backgroundColor:r?s.colors.gray[2]:"transparent"}),children:n(a.Group,{sx:{width:"calc(100% - 28px)"},onClick:e,children:n(a.Text,{size:"sm",children:t})})}),r&&n(a.Tooltip,{label:"Edit",position:"right",withinPortal:!0,children:n(a.ActionIcon,{onClick:i,variant:"light",color:"blue",sx:{position:"absolute",top:0,bottom:0,height:"100%",right:0,zIndex:0,borderRadius:0},children:n(L.IconAdjustments,{size:16})})})]})}const u0=T.observer(()=>{const e=ce(),t=Y(),r=m.useCallback(s=>()=>t.views.setIDOfVIE(s),[t]),i=s=>{e.editor.open(["_VIEWS_",s])};return c(a.Box,{sx:{position:"relative"},children:[t.views.options.map(s=>n(l0,{active:t.views.idOfVIE===s.value,name:s.label,onClick:r(s.value),openSettings:()=>i(s.value)},s.value)),n(a.Divider,{variant:"dashed"}),n(a.Button,{variant:"subtle",rightIcon:n(L.IconPlus,{size:14}),size:"sm",px:"xs",color:"blue",onClick:t.views.addARandomNewView,sx:{width:"100%",borderRadius:0},styles:{inner:{justifyContent:"space-between"}},children:"Add a View"})]})}),d0=T.observer(()=>{const e=ce(),t=Y(),r=()=>{if(!t.queries.firstID){e.editor.open(["_QUERIES_",""]);return}e.editor.open(["_QUERIES_",t.queries.firstID])},i=()=>{if(!t.filters.firstID){e.editor.open(["_FILTERS_",""]);return}e.editor.open(["_FILTERS_",t.filters.firstID])},[s,o]=m.useState(!1),l=()=>o(!0),u=()=>o(!1);return c(a.Navbar,{p:0,width:{base:200,xs:200,sm:200,md:220,lg:240,xl:260},zIndex:299,children:[c(a.Navbar.Section,{children:[c(a.Group,{grow:!0,spacing:0,sx:{...o0,button:{borderWidth:0,borderBottomWidth:1,borderColor:"#e9ecef"}},children:[n(a.Tooltip,{label:"Filters",withinPortal:!0,children:n(a.ActionIcon,{variant:"default",radius:0,size:"md",sx:{height:"30px"},onClick:i,children:n(L.IconFilter,{size:20})})}),n(a.Tooltip,{label:"Queries",withinPortal:!0,children:n(a.ActionIcon,{variant:"default",radius:0,size:"md",sx:{height:"30px"},onClick:r,children:n(L.IconDatabase,{size:20})})}),n(a.Tooltip,{label:"Interactions Viewer",withinPortal:!0,children:n(a.ActionIcon,{variant:"default",radius:0,size:"md",sx:{height:"30px"},onClick:l,children:n(L.IconLink,{size:20})})})]}),n(s0,{opened:s,close:u})]}),n(a.Navbar.Section,{py:5,sx:{borderBottom:"1px solid #eee"},children:n(a.Text,{align:"center",sx:{userSelect:"none",cursor:"default"},children:"Views"})}),n(a.Navbar.Section,{grow:!0,sx:{overflow:"auto"},children:n(u0,{})}),n(a.Navbar.Section,{children:n(a.Group,{grow:!0,p:"md",pt:"sm",sx:{borderTop:"1px solid #eee"},children:n(a.Button,{size:"xs",leftIcon:n(L.IconSettings,{size:20}),onClick:()=>e.editor.open([]),children:"Settings"})})})]})}),c0=T.observer(function({config:t}){return c(V,{children:[n(a.Checkbox,{checked:t.default_value,onChange:r=>t.setDefaultValue(r.currentTarget.checked),label:"Default Checked"}),n(Un,{label:"Description",value:t.description,onChange:t.setDescription,styles:{root:{flexGrow:1,minHeight:"400px"}}})]})}),p0=[{label:"2022",value:"YYYY"},{label:"202201",value:"YYYYMM"},{label:"20220101",value:"YYYYMMDD"},{label:"2022-01",value:"YYYY-MM"},{label:"2022-01-01",value:"YYYY-MM-DD"}],h0=T.observer(function({config:t}){return c(V,{children:[c(a.Group,{children:[n(a.Checkbox,{checked:t.required,onChange:r=>t.setRequired(r.currentTarget.checked),label:"Required"}),n(a.Checkbox,{checked:t.clearable,onChange:r=>t.setClearable(r.currentTarget.checked),disabled:t.max_days>0,label:"Clearable"}),n(a.Checkbox,{checked:t.allowSingleDateInRange,onChange:r=>t.setAllowSingleDateInRange(r.currentTarget.checked),label:"Allow choosing 1 day"})]}),n(a.Select,{data:p0,label:"Display Format",value:t.inputFormat,onChange:t.setInputFormat}),n(_s,{label:"Default Value",config:t,value:t.default_value,onChange:t.setDefaultValue}),n(a.NumberInput,{label:"Max Days",description:c(a.Group,{position:"apart",children:[n(a.Text,{children:"Set 0 to disable."}),c(a.Group,{spacing:4,children:[n(a.Text,{children:"This feature requires"}),n(a.Text,{color:"blue",children:"Clearable"}),n(a.Text,{children:"to be checked"})]})]}),min:0,value:t.max_days,onChange:t.setMaxDays,hideControls:!0})]})}),Cr=T.observer(({value:e,onChange:t})=>{const r=Y(),i=m.useMemo(()=>r.queries.options,[r.queries.current]),s=i.length===0;return n(a.Select,{label:"Pick a query",data:i,value:e,onChange:t,allowDeselect:!1,clearable:!0,sx:{flexGrow:1},disabled:s,error:s?"You need to add a query in Data Settings":void 0})}),f0=`
|
|
471
471
|
// row
|
|
472
472
|
{
|