@devtable/dashboard 1.0.0 → 1.1.0

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.
@@ -32,10 +32,10 @@ var __objRest = (source, exclude) => {
32
32
  import React from "react";
33
33
  import _ from "lodash";
34
34
  import { WidthProvider, Responsive } from "react-grid-layout";
35
- import { LoadingOverlay, Table, Group, Text, Select, Textarea, ActionIcon, TextInput, Button, useMantineTheme, ColorSwatch, Switch, Slider, JsonInput, Divider, Box, Modal, AppShell, Tabs, Tooltip, Menu, Container, SegmentedControl } from "@mantine/core";
35
+ import { Textarea, ActionIcon, Container, Group, Tooltip, Text, TextInput, Box, LoadingOverlay, Table, Select, Button, useMantineTheme, ColorSwatch, Switch, Slider, JsonInput, Modal, AppShell, Tabs, Menu, Divider, SegmentedControl } from "@mantine/core";
36
36
  import { useRequest } from "ahooks";
37
37
  import axios from "axios";
38
- import { DeviceFloppy, Trash, InfoCircle, Refresh, Settings, Paint, PlayerPlay, PlaylistAdd, ClipboardText, Database, Recycle, Share } from "tabler-icons-react";
38
+ import { DeviceFloppy, InfoCircle, Trash, Refresh, Settings, Paint, PlayerPlay, PlaylistAdd, ClipboardText, Database, Recycle, Share } from "tabler-icons-react";
39
39
  import { useInputState, useElementSize, randomId } from "@mantine/hooks";
40
40
  import ReactEChartsCore from "echarts-for-react/lib/core";
41
41
  import * as echarts from "echarts/core";
@@ -149,15 +149,6 @@ const initialContext$1 = {
149
149
  }
150
150
  };
151
151
  const PanelContext = React.createContext(initialContext$1);
152
- const initialContext = {
153
- sqlSnippets: [],
154
- setSQLSnippets: () => {
155
- },
156
- dataSources: [],
157
- setDataSources: () => {
158
- }
159
- };
160
- const DefinitionContext = React.createContext(initialContext);
161
152
  var jsxRuntime = { exports: {} };
162
153
  var reactJsxRuntime_production_min = {};
163
154
  /**
@@ -191,6 +182,177 @@ reactJsxRuntime_production_min.jsxs = q;
191
182
  const jsx = jsxRuntime.exports.jsx;
192
183
  const jsxs = jsxRuntime.exports.jsxs;
193
184
  const Fragment = jsxRuntime.exports.Fragment;
185
+ function EditDescription() {
186
+ const {
187
+ description,
188
+ setDescription
189
+ } = React.useContext(PanelContext);
190
+ const [localDesc, setLocalDesc] = useInputState(description);
191
+ const changed = description !== localDesc;
192
+ const submit = React.useCallback(() => {
193
+ if (!changed) {
194
+ return;
195
+ }
196
+ setDescription(localDesc);
197
+ }, [changed, localDesc]);
198
+ return /* @__PURE__ */ jsx(Textarea, {
199
+ label: "Panel Description",
200
+ value: localDesc,
201
+ onChange: setLocalDesc,
202
+ minRows: 10,
203
+ autosize: true,
204
+ maxRows: 30,
205
+ rightSection: /* @__PURE__ */ jsx(ActionIcon, {
206
+ disabled: !changed,
207
+ onClick: submit,
208
+ sx: {
209
+ alignSelf: "flex-start",
210
+ marginTop: "4px"
211
+ },
212
+ children: /* @__PURE__ */ jsx(DeviceFloppy, {
213
+ size: 20
214
+ })
215
+ })
216
+ });
217
+ }
218
+ const initialContext = {
219
+ sqlSnippets: [],
220
+ setSQLSnippets: () => {
221
+ },
222
+ dataSources: [],
223
+ setDataSources: () => {
224
+ }
225
+ };
226
+ const DefinitionContext = React.createContext(initialContext);
227
+ class ErrorBoundary extends React.Component {
228
+ constructor(props) {
229
+ super(props);
230
+ this.state = {
231
+ hasError: false
232
+ };
233
+ }
234
+ static getDerivedStateFromError() {
235
+ return {
236
+ hasError: true
237
+ };
238
+ }
239
+ render() {
240
+ if (this.state.hasError) {
241
+ return /* @__PURE__ */ jsx("h1", {
242
+ children: "Something went wrong."
243
+ });
244
+ }
245
+ return this.props.children;
246
+ }
247
+ }
248
+ function PreviewPanel() {
249
+ const {
250
+ title,
251
+ description
252
+ } = React.useContext(PanelContext);
253
+ return /* @__PURE__ */ jsx(ErrorBoundary, {
254
+ children: /* @__PURE__ */ jsx(Container, {
255
+ mt: "xl",
256
+ p: "5px",
257
+ sx: {
258
+ width: "600px",
259
+ height: "450px",
260
+ background: "transparent",
261
+ borderRadius: "5px",
262
+ boxShadow: "0px 0px 10px 0px rgba(0,0,0,.2)"
263
+ },
264
+ children: /* @__PURE__ */ jsxs(Group, {
265
+ position: "apart",
266
+ noWrap: true,
267
+ sx: {
268
+ borderBottom: "1px solid #eee",
269
+ paddingBottom: "5px"
270
+ },
271
+ children: [/* @__PURE__ */ jsx(Group, {
272
+ children: description && /* @__PURE__ */ jsx(Tooltip, {
273
+ label: description,
274
+ withArrow: true,
275
+ children: /* @__PURE__ */ jsx(InfoCircle, {
276
+ size: 12,
277
+ style: {
278
+ verticalAlign: "baseline",
279
+ cursor: "pointer"
280
+ }
281
+ })
282
+ })
283
+ }), /* @__PURE__ */ jsx(Group, {
284
+ grow: true,
285
+ position: "center",
286
+ children: /* @__PURE__ */ jsx(Text, {
287
+ lineClamp: 1,
288
+ weight: "bold",
289
+ children: title
290
+ })
291
+ }), /* @__PURE__ */ jsx(Group, {
292
+ position: "right",
293
+ spacing: 0,
294
+ sx: {
295
+ height: "28px"
296
+ }
297
+ })]
298
+ })
299
+ })
300
+ });
301
+ }
302
+ function EditTitle() {
303
+ const {
304
+ title,
305
+ setTitle
306
+ } = React.useContext(PanelContext);
307
+ const [localTitle, setLocalTitle] = useInputState(title);
308
+ const changed = title !== localTitle;
309
+ const submit = React.useCallback(() => {
310
+ if (!changed) {
311
+ return;
312
+ }
313
+ setTitle(localTitle);
314
+ }, [changed, localTitle]);
315
+ return /* @__PURE__ */ jsx(TextInput, {
316
+ label: "Panel Title",
317
+ value: localTitle,
318
+ onChange: setLocalTitle,
319
+ rightSection: /* @__PURE__ */ jsx(ActionIcon, {
320
+ disabled: !changed,
321
+ onClick: submit,
322
+ children: /* @__PURE__ */ jsx(DeviceFloppy, {
323
+ size: 20
324
+ })
325
+ })
326
+ });
327
+ }
328
+ function PanelConfig({}) {
329
+ return /* @__PURE__ */ jsxs(Group, {
330
+ direction: "row",
331
+ grow: true,
332
+ noWrap: true,
333
+ align: "stretch",
334
+ sx: {
335
+ height: "100%"
336
+ },
337
+ children: [/* @__PURE__ */ jsxs(Group, {
338
+ grow: true,
339
+ direction: "column",
340
+ sx: {
341
+ width: "40%",
342
+ flexShrink: 0,
343
+ flexGrow: 0
344
+ },
345
+ children: [/* @__PURE__ */ jsx(EditTitle, {}), /* @__PURE__ */ jsx(EditDescription, {})]
346
+ }), /* @__PURE__ */ jsx(Box, {
347
+ sx: {
348
+ height: "100%",
349
+ flexGrow: 1,
350
+ maxWidth: "60%"
351
+ },
352
+ children: /* @__PURE__ */ jsx(PreviewPanel, {})
353
+ })]
354
+ });
355
+ }
194
356
  function DataPreview({
195
357
  id
196
358
  }) {
@@ -306,58 +468,6 @@ function PickDataSource({}) {
306
468
  })]
307
469
  });
308
470
  }
309
- function EditDescription() {
310
- const {
311
- description,
312
- setDescription
313
- } = React.useContext(PanelContext);
314
- const [localDesc, setLocalDesc] = useInputState(description);
315
- const changed = description !== localDesc;
316
- const submit = React.useCallback(() => {
317
- if (!changed) {
318
- return;
319
- }
320
- setDescription(localDesc);
321
- }, [changed, localDesc]);
322
- return /* @__PURE__ */ jsx(Textarea, {
323
- label: "Panel Description",
324
- value: localDesc,
325
- onChange: setLocalDesc,
326
- minRows: 2,
327
- rightSection: /* @__PURE__ */ jsx(ActionIcon, {
328
- disabled: !changed,
329
- onClick: submit,
330
- sx: {
331
- alignSelf: "flex-start",
332
- marginTop: "4px"
333
- },
334
- children: /* @__PURE__ */ jsx(DeviceFloppy, {
335
- size: 20
336
- })
337
- })
338
- });
339
- }
340
- class ErrorBoundary extends React.Component {
341
- constructor(props) {
342
- super(props);
343
- this.state = {
344
- hasError: false
345
- };
346
- }
347
- static getDerivedStateFromError() {
348
- return {
349
- hasError: true
350
- };
351
- }
352
- render() {
353
- if (this.state.hasError) {
354
- return /* @__PURE__ */ jsx("h1", {
355
- children: "Something went wrong."
356
- });
357
- }
358
- return this.props.children;
359
- }
360
- }
361
471
  echarts.use([SunburstChart, CanvasRenderer]);
362
472
  const defaultOption$1 = {
363
473
  tooltip: {
@@ -791,32 +901,6 @@ function PreviewViz({}) {
791
901
  })
792
902
  });
793
903
  }
794
- function EditTitle() {
795
- const {
796
- title,
797
- setTitle
798
- } = React.useContext(PanelContext);
799
- const [localTitle, setLocalTitle] = useInputState(title);
800
- const changed = title !== localTitle;
801
- const submit = React.useCallback(() => {
802
- if (!changed) {
803
- return;
804
- }
805
- setTitle(localTitle);
806
- }, [changed, localTitle]);
807
- return /* @__PURE__ */ jsx(TextInput, {
808
- label: "Panel Title",
809
- value: localTitle,
810
- onChange: setLocalTitle,
811
- rightSection: /* @__PURE__ */ jsx(ActionIcon, {
812
- disabled: !changed,
813
- onClick: submit,
814
- children: /* @__PURE__ */ jsx(DeviceFloppy, {
815
- size: 20
816
- })
817
- })
818
- });
819
- }
820
904
  function VizBar3DPanel({
821
905
  conf,
822
906
  setConf
@@ -1721,7 +1805,7 @@ function VizConfig({}) {
1721
1805
  sx: {
1722
1806
  height: "100%"
1723
1807
  },
1724
- children: [/* @__PURE__ */ jsxs(Group, {
1808
+ children: [/* @__PURE__ */ jsx(Group, {
1725
1809
  grow: true,
1726
1810
  direction: "column",
1727
1811
  sx: {
@@ -1729,11 +1813,7 @@ function VizConfig({}) {
1729
1813
  flexShrink: 0,
1730
1814
  flexGrow: 0
1731
1815
  },
1732
- children: [/* @__PURE__ */ jsx(EditTitle, {}), /* @__PURE__ */ jsx(EditDescription, {}), /* @__PURE__ */ jsx(Divider, {
1733
- sx: {
1734
- flexGrow: 0
1735
- }
1736
- }), /* @__PURE__ */ jsx(EditVizConf, {})]
1816
+ children: /* @__PURE__ */ jsx(EditVizConf, {})
1737
1817
  }), /* @__PURE__ */ jsx(Box, {
1738
1818
  sx: {
1739
1819
  height: "100%",
@@ -1791,7 +1871,10 @@ function PanelSettingsModal({
1791
1871
  visible: loading
1792
1872
  }), /* @__PURE__ */ jsx(PickDataSource, {})]
1793
1873
  }), /* @__PURE__ */ jsx(Tabs.Tab, {
1794
- label: "Viz Config",
1874
+ label: "Panel",
1875
+ children: /* @__PURE__ */ jsx(PanelConfig, {})
1876
+ }), /* @__PURE__ */ jsx(Tabs.Tab, {
1877
+ label: "Visualization",
1795
1878
  children: /* @__PURE__ */ jsx(VizConfig, {})
1796
1879
  })]
1797
1880
  })
@@ -1,4 +1,4 @@
1
- (function(m,y){typeof exports=="object"&&typeof module!="undefined"?y(exports,require("react"),require("lodash"),require("react-grid-layout"),require("@mantine/core"),require("ahooks"),require("axios"),require("tabler-icons-react"),require("@mantine/hooks"),require("echarts-for-react/lib/core"),require("echarts/core"),require("echarts/charts"),require("echarts/renderers"),require("echarts/components"),require("numbro"),require("echarts-gl"),require("react-hook-form"),require("@mantine/form"),require("@mantine/prism")):typeof define=="function"&&define.amd?define(["exports","react","lodash","react-grid-layout","@mantine/core","ahooks","axios","tabler-icons-react","@mantine/hooks","echarts-for-react/lib/core","echarts/core","echarts/charts","echarts/renderers","echarts/components","numbro","echarts-gl","react-hook-form","@mantine/form","@mantine/prism"],y):(m=typeof globalThis!="undefined"?globalThis:m||self,y(m.dashboard={},m.React,m._,m["react-grid-layout"],m["@mantine/core"],m.ahooks,m.axios,m["tabler-icons-react"],m["@mantine/hooks"],m["echarts-for-react/lib/core"],m["echarts/core"],m["echarts/charts"],m["echarts/renderers"],m["echarts/components"],m.numbro,m["echarts-gl"],m["react-hook-form"],m["@mantine/form"],m["@mantine/prism"]))})(this,function(m,y,C,w,t,se,Te,v,z,De,Ie,ee,te,N,_e,Bt,V,G,M){"use strict";var qt=Object.defineProperty,At=Object.defineProperties;var Mt=Object.getOwnPropertyDescriptors;var Z=Object.getOwnPropertySymbols;var Ce=Object.prototype.hasOwnProperty,we=Object.prototype.propertyIsEnumerable;var ye=(m,y,C)=>y in m?qt(m,y,{enumerable:!0,configurable:!0,writable:!0,value:C}):m[y]=C,p=(m,y)=>{for(var C in y||(y={}))Ce.call(y,C)&&ye(m,C,y[C]);if(Z)for(var C of Z(y))we.call(y,C)&&ye(m,C,y[C]);return m},E=(m,y)=>At(m,Mt(y));var _=(m,y)=>{var C={};for(var w in m)Ce.call(m,w)&&y.indexOf(w)<0&&(C[w]=m[w]);if(m!=null&&Z)for(var w of Z(m))y.indexOf(w)<0&&we.call(m,w)&&(C[w]=m[w]);return C};function Q(n){return n&&typeof n=="object"&&"default"in n?n:{default:n}}function ze(n){if(n&&n.__esModule)return n;var i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});return n&&Object.keys(n).forEach(function(r){if(r!=="default"){var o=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(i,r,o.get?o:{enumerable:!0,get:function(){return n[r]}})}}),i.default=n,Object.freeze(i)}var u=Q(y),T=Q(C),Ge=Q(Te),ne=Q(De),W=ze(Ie),ue=Q(_e),O=(n=>(n.Use="use",n.Edit="edit",n))(O||{});const Pe={layoutFrozen:!1,freezeLayout:()=>{},mode:O.Edit,inEditMode:!1},j=u.default.createContext(Pe),Le=(n=>(i,r,o={})=>{const a=p({"X-Requested-With":"XMLHttpRequest","Content-Type":o.string?"application/x-www-form-urlencoded":"application/json"},o.headers),s={baseURL:"http://localhost:31200",method:n,url:i,params:n==="GET"?r:o.params,headers:a};return n==="POST"&&(s.data=o.string?JSON.stringify(r):r),Ge.default(s).then(l=>l.data).catch(l=>Promise.reject(l))})("POST");function de(n,i){const r=Object.keys(i),o=Object.values(i);try{return new Function(...r,`return \`${n}\`;`)(...o)}catch(a){throw r.length===0&&n.includes("$")?new Error("[formatSQL] insufficient params"):a}}function ke(n,i){const r=i.sqlSnippets.reduce((o,a)=>(o[a.key]=de(a.value,n),o),{});return T.default.merge({},r,n)}const ce=({context:n,definitions:i,title:r,dataSource:o})=>async()=>{if(!o||!o.sql)return[];const{type:a,key:s,sql:l}=o,d=l.includes("$");try{const h=ke(n,i),f=de(l,h);return d&&(console.groupCollapsed(`Final SQL for: ${r}`),console.log(f),console.groupEnd()),await Le("/query",{type:a,key:s,sql:f})}catch(h){return console.error(h),[]}},pe={},Ee=pe,R=u.default.createContext(pe),Oe={data:[],loading:!1,title:"",setTitle:()=>{},description:"",setDescription:()=>{},dataSourceID:"",setDataSourceID:()=>{},viz:{type:"",conf:{}},setViz:()=>{},refreshData:()=>{}},q=u.default.createContext(Oe),qe={sqlSnippets:[],setSQLSnippets:()=>{},dataSources:[],setDataSources:()=>{}},P=u.default.createContext(qe);var U={exports:{}},Y={};/**
1
+ (function(h,y){typeof exports=="object"&&typeof module!="undefined"?y(exports,require("react"),require("lodash"),require("react-grid-layout"),require("@mantine/core"),require("ahooks"),require("axios"),require("tabler-icons-react"),require("@mantine/hooks"),require("echarts-for-react/lib/core"),require("echarts/core"),require("echarts/charts"),require("echarts/renderers"),require("echarts/components"),require("numbro"),require("echarts-gl"),require("react-hook-form"),require("@mantine/form"),require("@mantine/prism")):typeof define=="function"&&define.amd?define(["exports","react","lodash","react-grid-layout","@mantine/core","ahooks","axios","tabler-icons-react","@mantine/hooks","echarts-for-react/lib/core","echarts/core","echarts/charts","echarts/renderers","echarts/components","numbro","echarts-gl","react-hook-form","@mantine/form","@mantine/prism"],y):(h=typeof globalThis!="undefined"?globalThis:h||self,y(h.dashboard={},h.React,h._,h["react-grid-layout"],h["@mantine/core"],h.ahooks,h.axios,h["tabler-icons-react"],h["@mantine/hooks"],h["echarts-for-react/lib/core"],h["echarts/core"],h["echarts/charts"],h["echarts/renderers"],h["echarts/components"],h.numbro,h["echarts-gl"],h["react-hook-form"],h["@mantine/form"],h["@mantine/prism"]))})(this,function(h,y,C,w,t,ue,Te,v,_,De,Ie,ee,te,N,ze,Ft,R,G,M){"use strict";var Mt=Object.defineProperty,Bt=Object.defineProperties;var $t=Object.getOwnPropertyDescriptors;var Z=Object.getOwnPropertySymbols;var Ce=Object.prototype.hasOwnProperty,we=Object.prototype.propertyIsEnumerable;var ye=(h,y,C)=>y in h?Mt(h,y,{enumerable:!0,configurable:!0,writable:!0,value:C}):h[y]=C,p=(h,y)=>{for(var C in y||(y={}))Ce.call(y,C)&&ye(h,C,y[C]);if(Z)for(var C of Z(y))we.call(y,C)&&ye(h,C,y[C]);return h},O=(h,y)=>Bt(h,$t(y));var z=(h,y)=>{var C={};for(var w in h)Ce.call(h,w)&&y.indexOf(w)<0&&(C[w]=h[w]);if(h!=null&&Z)for(var w of Z(h))y.indexOf(w)<0&&we.call(h,w)&&(C[w]=h[w]);return C};function Q(n){return n&&typeof n=="object"&&"default"in n?n:{default:n}}function _e(n){if(n&&n.__esModule)return n;var i=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});return n&&Object.keys(n).forEach(function(r){if(r!=="default"){var o=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(i,r,o.get?o:{enumerable:!0,get:function(){return n[r]}})}}),i.default=n,Object.freeze(i)}var u=Q(y),T=Q(C),Ge=Q(Te),ne=Q(De),W=_e(Ie),de=Q(ze),A=(n=>(n.Use="use",n.Edit="edit",n))(A||{});const Pe={layoutFrozen:!1,freezeLayout:()=>{},mode:A.Edit,inEditMode:!1},V=u.default.createContext(Pe),Le=(n=>(i,r,o={})=>{const a=p({"X-Requested-With":"XMLHttpRequest","Content-Type":o.string?"application/x-www-form-urlencoded":"application/json"},o.headers),s={baseURL:"http://localhost:31200",method:n,url:i,params:n==="GET"?r:o.params,headers:a};return n==="POST"&&(s.data=o.string?JSON.stringify(r):r),Ge.default(s).then(l=>l.data).catch(l=>Promise.reject(l))})("POST");function ce(n,i){const r=Object.keys(i),o=Object.values(i);try{return new Function(...r,`return \`${n}\`;`)(...o)}catch(a){throw r.length===0&&n.includes("$")?new Error("[formatSQL] insufficient params"):a}}function ke(n,i){const r=i.sqlSnippets.reduce((o,a)=>(o[a.key]=ce(a.value,n),o),{});return T.default.merge({},r,n)}const pe=({context:n,definitions:i,title:r,dataSource:o})=>async()=>{if(!o||!o.sql)return[];const{type:a,key:s,sql:l}=o,d=l.includes("$");try{const m=ke(n,i),f=ce(l,m);return d&&(console.groupCollapsed(`Final SQL for: ${r}`),console.log(f),console.groupEnd()),await Le("/query",{type:a,key:s,sql:f})}catch(m){return console.error(m),[]}},he={},Ee=he,j=u.default.createContext(he),Oe={data:[],loading:!1,title:"",setTitle:()=>{},description:"",setDescription:()=>{},dataSourceID:"",setDataSourceID:()=>{},viz:{type:"",conf:{}},setViz:()=>{},refreshData:()=>{}},P=u.default.createContext(Oe);var U={exports:{}},Y={};/**
2
2
  * @license React
3
3
  * react-jsx-runtime.production.min.js
4
4
  *
@@ -6,7 +6,7 @@
6
6
  *
7
7
  * This source code is licensed under the MIT license found in the
8
8
  * LICENSE file in the root directory of this source tree.
9
- */var Ae=u.default,Me=Symbol.for("react.element"),Be=Symbol.for("react.fragment"),$e=Object.prototype.hasOwnProperty,Fe=Ae.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Ne={key:!0,ref:!0,__self:!0,__source:!0};function me(n,i,r){var o,a={},s=null,l=null;r!==void 0&&(s=""+r),i.key!==void 0&&(s=""+i.key),i.ref!==void 0&&(l=i.ref);for(o in i)$e.call(i,o)&&!Ne.hasOwnProperty(o)&&(a[o]=i[o]);if(n&&n.defaultProps)for(o in i=n.defaultProps,i)a[o]===void 0&&(a[o]=i[o]);return{$$typeof:Me,type:n,key:s,ref:l,props:a,_owner:Fe.current}}Y.Fragment=Be,Y.jsx=me,Y.jsxs=me,U.exports=Y;const e=U.exports.jsx,c=U.exports.jsxs,ie=U.exports.Fragment;function he({id:n}){const i=u.default.useContext(P),r=u.default.useContext(R),o=u.default.useMemo(()=>i.dataSources.find(l=>l.id===n),[i.dataSources,n]),{data:a=[],loading:s}=se.useRequest(ce({context:r,definitions:i,title:n,dataSource:o}),{refreshDeps:[r,i,o]});return s?e(t.LoadingOverlay,{visible:s}):a.length===0?e(t.Table,{}):c(t.Group,{my:"xl",direction:"column",grow:!0,sx:{border:"1px solid #eee"},children:[e(t.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:e(t.Text,{weight:500,children:"Preview Data"})}),c(t.Table,{children:[e("thead",{children:e("tr",{children:Object.keys(a==null?void 0:a[0]).map(l=>e("th",{children:l},l))})}),e("tbody",{children:a.map((l,d)=>e("tr",{children:Object.values(l).map((h,f)=>e("td",{children:e(t.Group,{sx:{"&, .mantine-Text-root":{fontFamily:"monospace"}},children:e(t.Text,{children:h})})},`${h}--${f}`))},`row-${d}`))})]})]})}function Ve({}){const{dataSources:n}=u.default.useContext(P),{dataSourceID:i,setDataSourceID:r,data:o,loading:a}=u.default.useContext(q),s=u.default.useMemo(()=>n.map(l=>({value:l.id,label:l.id})),[n]);return c(t.Group,{direction:"column",grow:!0,noWrap:!0,children:[c(t.Group,{position:"left",sx:{maxWidth:"600px",alignItems:"baseline"},children:[e(t.Text,{children:"Select a Data Source"}),e(t.Select,{data:s,value:i,onChange:r,allowDeselect:!1,clearable:!1,sx:{flexGrow:1}})]}),e(he,{id:i})]})}function je(){const{description:n,setDescription:i}=u.default.useContext(q),[r,o]=z.useInputState(n),a=n!==r,s=u.default.useCallback(()=>{!a||i(r)},[a,r]);return e(t.Textarea,{label:"Panel Description",value:r,onChange:o,minRows:2,rightSection:e(t.ActionIcon,{disabled:!a,onClick:s,sx:{alignSelf:"flex-start",marginTop:"4px"},children:e(v.DeviceFloppy,{size:20})})})}class fe extends u.default.Component{constructor(i){super(i),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?e("h1",{children:"Something went wrong."}):this.props.children}}W.use([ee.SunburstChart,te.CanvasRenderer]);const Re={tooltip:{show:!0},series:{type:"sunburst",radius:[0,"90%"],emphasis:{focus:"ancestor"}}};function We({conf:n,data:i,width:r,height:o}){const b=n,{label_field:a="name",value_field:s="value"}=b,l=_(b,["label_field","value_field"]),d=u.default.useMemo(()=>i.map(x=>({name:x[a],value:Number(x[s])})),[i,a,s]),h=u.default.useMemo(()=>{var x,S;return(S=(x=T.default.maxBy(d,D=>D.value))==null?void 0:x.value)!=null?S:1},[d]),f=u.default.useMemo(()=>({series:{label:{formatter:({name:x,value:S})=>S/h<.2?" ":x}}}),[h]),g=T.default.merge({},Re,f,l,{series:{data:d}});return e(ne.default,{echarts:W,option:g,style:{width:r,height:o}})}W.use([ee.BarChart,ee.LineChart,N.GridComponent,N.LegendComponent,N.TooltipComponent,te.CanvasRenderer]);const Qe={legend:{show:!0},tooltip:{trigger:"axis"},xAxis:{type:"category"},yAxis:{},grid:{top:30,left:10,right:10,bottom:10,containLabel:!0}};function Je({conf:n,data:i,width:r,height:o}){const a=u.default.useMemo(()=>{const s={dataset:{source:i}},l={xAxis:{data:i.map(h=>h[n.x_axis_data_key])}},d=n.series.map(g=>{var b=g,{y_axis_data_key:h}=b,f=_(b,["y_axis_data_key"]);return p({data:i.map(x=>x[h])},f)});return T.default.assign({},Qe,s,l,{series:d})},[n,i]);return!r||!o?null:e(ne.default,{echarts:W,option:a,style:{width:r,height:o}})}var B=(n=>(n.string="string",n.number="number",n.eloc="eloc",n.percentage="percentage",n))(B||{});function Ue({value:n}){return e(t.Text,{component:"span",children:n})}function Ye({value:n}){return e(t.Text,{component:"span",children:n})}function He({value:n}){const i=ue.default(n).format({thousandSeparated:!0});return e(t.Text,{component:"span",children:i})}function Ke({value:n}){const i=ue.default(n).format({output:"percent",mantissa:3});return e(t.Text,{component:"span",children:i})}function Xe({value:n,type:i}){switch(i){case B.string:return e(Ue,{value:n});case B.eloc:return e(Ye,{value:n});case B.number:return e(He,{value:n});case B.percentage:return e(Ke,{value:n})}}function Ze({conf:n,data:i,width:r,height:o}){const g=n,{id_field:a,use_raw_columns:s,columns:l}=g,d=_(g,["id_field","use_raw_columns","columns"]),h=u.default.useMemo(()=>s?Object.keys(i==null?void 0:i[0]):l.map(b=>b.label),[s,l,i]),f=u.default.useMemo(()=>s?Object.keys(i==null?void 0:i[0]).map(b=>({label:b,value_field:b,value_type:B.string})):l,[s,l,i]);return c(t.Table,E(p({sx:{maxHeight:o}},d),{children:[e("thead",{children:e("tr",{children:h.map(b=>e("th",{children:b},b))})}),e("tbody",{children:i.map((b,x)=>e("tr",{children:f.map(({value_field:S,value_type:D})=>e("td",{children:e(t.Group,{sx:{"&, .mantine-Text-root":{fontFamily:"monospace"}},children:e(Xe,{value:b[S],type:D})})},b[S]))},a?b[a]:`row-${x}`))})]}))}function et(n,i={}){const r=Object.keys(i),o=Object.values(i);try{return new Function(...r,`return \`${n}\`;`)(...o)}catch(a){return a.message}}function tt({conf:{paragraphs:n},data:i}){return e(ie,{children:n.map((l,s)=>{var d=l,{template:r,size:o}=d,a=_(d,["template","size"]);return e(t.Text,E(p({},a),{sx:{fontSize:o},children:et(r,i[0])}),`${r}---${s}`)})})}W.use([N.GridComponent,N.VisualMapComponent,N.LegendComponent,N.TooltipComponent,te.CanvasRenderer]);function nt({conf:n,data:i,width:r,height:o}){const b=n,{x_axis_data_key:a,y_axis_data_key:s,z_axis_data_key:l}=b,d=_(b,["x_axis_data_key","y_axis_data_key","z_axis_data_key"]),h=u.default.useMemo(()=>T.default.minBy(i,x=>x[l])[l],[i,l]),f=u.default.useMemo(()=>T.default.maxBy(i,x=>x[l])[l],[i,l]),g=E(p({tooltip:{},backgroundColor:"#fff",visualMap:{show:!0,dimension:2,min:h,max:f,inRange:{color:["#313695","#4575b4","#74add1","#abd9e9","#e0f3f8","#ffffbf","#fee090","#fdae61","#f46d43","#d73027","#a50026"]}},xAxis3D:{type:"value"},yAxis3D:{type:"value"},zAxis3D:{type:"value"},grid3D:{viewControl:{projection:"orthographic",autoRotate:!1},light:{main:{shadow:!0,quality:"ultra",intensity:1.5}}}},d),{series:[{type:"bar3D",wireframe:{},data:i.map(x=>[x[a],x[s],x[l]])}]});return e(ne.default,{echarts:W,option:g,style:{width:r,height:o}})}var Ft="";function it(n,i,r,o){const a={width:n,height:i,data:r,conf:o.conf};switch(o.type){case"sunburst":return e(We,p({},a));case"line-bar":return e(Je,p({},a));case"table":return e(Ze,p({},a));case"text":return e(tt,p({},a));case"bar-3d":return e(nt,p({},a));default:return null}}function xe({viz:n,data:i,loading:r}){const{ref:o,width:a,height:s}=z.useElementSize(),l=u.default.useMemo(()=>!Array.isArray(i)||i.length===0,[i]);return r?e("div",{className:"viz-root",ref:o,children:e(t.LoadingOverlay,{visible:r})}):c("div",{className:"viz-root",ref:o,children:[l&&e(t.Text,{color:"gray",align:"center",children:"nothing to show"}),!l&&it(a,s,i,n)]})}function rt({}){const{data:n,loading:i,viz:r}=u.default.useContext(q);return e(fe,{children:e(xe,{viz:r,data:n,loading:i})})}function ot(){const{title:n,setTitle:i}=u.default.useContext(q),[r,o]=z.useInputState(n),a=n!==r,s=u.default.useCallback(()=>{!a||i(r)},[a,r]);return e(t.TextInput,{label:"Panel Title",value:r,onChange:o,rightSection:e(t.ActionIcon,{disabled:!a,onClick:s,children:e(v.DeviceFloppy,{size:20})})})}function at({conf:n,setConf:i}){const r=T.default.assign({},{x_axis_data_key:"x",y_axis_data_key:"y",z_axis_data_key:"z",xAxis3D:{type:"value",name:"X Axis Name"},yAxis3D:{type:"value",name:"Y Axis Name"},zAxis3D:{type:"value",name:"Z Axis Name"}},n),{control:o,handleSubmit:a,formState:s}=V.useForm({defaultValues:r});return e(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:c("form",{onSubmit:a(i),children:[e(t.Text,{children:"X Axis"}),c(t.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[e(V.Controller,{name:"x_axis_data_key",control:o,render:({field:l})=>e(t.TextInput,p({sx:{flexGrow:1},size:"md",label:"Data Key"},l))}),e(V.Controller,{name:"xAxis3D.name",control:o,render:({field:l})=>e(t.TextInput,p({sx:{flexGrow:1},size:"md",label:"Name"},l))})]}),e(t.Text,{mt:"lg",children:"Y Axis"}),c(t.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[e(V.Controller,{name:"y_axis_data_key",control:o,render:({field:l})=>e(t.TextInput,p({sx:{flexGrow:1},size:"md",label:"Data Key"},l))}),e(V.Controller,{name:"yAxis3D.name",control:o,render:({field:l})=>e(t.TextInput,p({sx:{flexGrow:1},size:"md",label:"Name"},l))})]}),e(t.Text,{mt:"lg",children:"Z Axis"}),c(t.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[e(V.Controller,{name:"z_axis_data_key",control:o,render:({field:l})=>e(t.TextInput,p({sx:{flexGrow:1},size:"md",label:"Data Key"},l))}),e(V.Controller,{name:"zAxis3D.name",control:o,render:({field:l})=>e(t.TextInput,p({sx:{flexGrow:1},size:"md",label:"Name"},l))})]}),e(t.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"60%"},mx:"auto",children:c(t.Button,{color:"blue",type:"submit",children:[e(v.DeviceFloppy,{size:20}),e(t.Text,{ml:"md",children:"Save"})]})})]})})}function ge({value:n,onChange:i}){const r=t.useMantineTheme(),o=u.default.useMemo(()=>Object.entries(r.colors).map(([s,l])=>({label:s,value:l[6]})),[r]),a=u.default.useMemo(()=>o.some(s=>s.value===n),[n,o]);return c(t.Group,{position:"apart",spacing:"xs",children:[e(t.TextInput,{placeholder:"Set any color",value:a?"":n,onChange:s=>i(s.currentTarget.value),rightSection:e(t.ColorSwatch,{color:a?"transparent":n,radius:4}),variant:a?"filled":"default",sx:{maxWidth:"100%",flexGrow:1}}),e(t.Text,{sx:{flexGrow:0},children:"or"}),e(t.Select,{data:o,value:n,onChange:i,variant:a?"default":"filled",placeholder:"Pick a theme color",icon:e(t.ColorSwatch,{color:a?n:"transparent",radius:4}),sx:{maxWidth:"100%",flexGrow:1}})]})}function lt({conf:n,setConf:i}){const d=n,{series:r}=d,o=_(d,["series"]),a=u.default.useMemo(()=>p({series:G.formList(r!=null?r:[])},o),[r,o]),s=G.useForm({initialValues:a}),l=()=>s.addListItem("series",{type:"bar",name:z.randomId(),showSymbol:!1,y_axis_data_key:"value",stack:"",color:"#000"});return u.default.useMemo(()=>!T.default.isEqual(s.values,a),[s.values,a]),e(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:c("form",{onSubmit:s.onSubmit(i),children:[c(t.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[e(t.Text,{children:"Chart Config"}),e(t.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:e(v.DeviceFloppy,{size:20})})]}),e(t.TextInput,p({size:"md",mb:"lg",label:"X Axis Data Key"},s.getInputProps("x_axis_data_key"))),c(t.Group,{direction:"column",grow:!0,children:[e(t.Text,{mt:"xl",mb:0,children:"Series"}),s.values.series.map((h,f)=>c(t.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[e(t.TextInput,p({label:"Label",required:!0,sx:{flex:1}},s.getListInputProps("series",f,"name"))),c(t.Group,{direction:"row",grow:!0,noWrap:!0,children:[e(t.TextInput,p({label:"Y Axis Data key",required:!0},s.getListInputProps("series",f,"y_axis_data_key"))),e(t.TextInput,p({label:"Stack ID",placeholder:"Stack bars by this ID"},s.getListInputProps("series",f,"stack")))]}),c(t.Group,{direction:"column",grow:!0,children:[e(t.Text,{children:"Color"}),e(ge,p({},s.getListInputProps("series",f,"color")))]}),e(t.ActionIcon,{color:"red",variant:"hover",onClick:()=>s.removeListItem("series",f),sx:{position:"absolute",top:15,right:5},children:e(v.Trash,{size:16})})]},f)),e(t.Group,{position:"center",mt:"xs",children:e(t.Button,{onClick:l,children:"Add a Series"})})]})]})})}function st({conf:{label_field:n,value_field:i},setConf:r}){const o=G.useForm({initialValues:{label_field:n,value_field:i}});return e(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:c("form",{onSubmit:o.onSubmit(r),children:[c(t.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[e(t.Text,{children:"Sunburst Config"}),e(t.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:e(v.DeviceFloppy,{size:20})})]}),c(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[e(t.TextInput,p({label:"Label Field",required:!0,sx:{flex:1}},o.getInputProps("label_field"))),e(t.TextInput,p({label:"Value Field",placeholder:"get column value by this field",required:!0,sx:{flex:1}},o.getInputProps("value_field")))]})]})})}const ut=Object.values(B).map(n=>({label:n,value:n}));function dt({label:n,value:i,onChange:r,sx:o}){return e(t.Select,{label:n,data:ut,value:i,onChange:r,sx:o})}function ct(o){var a=o,{conf:s}=a,l=s,{columns:n}=l,i=_(l,["columns"]),{setConf:r}=a;const d=G.useForm({initialValues:p({id_field:"id",use_raw_columns:!0,columns:G.formList(n!=null?n:[]),size:"sm",horizontalSpacing:"sm",verticalSpacing:"sm",striped:!1,highlightOnHover:!1},i)}),h=()=>d.addListItem("columns",{label:z.randomId(),value_field:"value",value_type:B.string});return e(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:c("form",{onSubmit:d.onSubmit(r),children:[c(t.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[e(t.Text,{children:"Table Config"}),e(t.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:e(v.DeviceFloppy,{size:20})})]}),c(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[e(t.TextInput,p({size:"md",mb:"lg",label:"ID Field"},d.getInputProps("id_field"))),c(t.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:[e(t.TextInput,p({label:"Horizontal Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1}},d.getInputProps("horizontalSpacing"))),e(t.TextInput,p({label:"Vertical Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1}},d.getInputProps("verticalSpacing")))]}),e(t.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:e(t.TextInput,p({label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1}},d.getInputProps("size")))}),c(t.Group,{direction:"column",grow:!0,children:[e(t.Text,{children:"Other"}),c(t.Group,{position:"apart",grow:!0,children:[e(t.Switch,p({label:"Striped"},d.getInputProps("striped",{type:"checkbox"}))),e(t.Switch,p({label:"Highlight on hover"},d.getInputProps("highlightOnHover",{type:"checkbox"})))]})]})]}),c(t.Group,{direction:"column",mt:"xs",spacing:"xs",grow:!0,p:"md",mb:"xl",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[e(t.Switch,p({label:"Use Original Data Columns"},d.getInputProps("use_raw_columns",{type:"checkbox"}))),!d.values.use_raw_columns&&c(t.Group,{direction:"column",grow:!0,children:[e(t.Text,{mt:"xl",mb:0,children:"Custom Columns"}),d.values.columns.map((f,g)=>c(t.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[c(t.Group,{position:"apart",grow:!0,sx:{"> *":{flexGrow:1,maxWidth:"100%"}},children:[e(t.TextInput,p({label:"Label",required:!0,sx:{flex:1}},d.getListInputProps("columns",g,"label"))),e(t.TextInput,p({label:"Value Field",placeholder:"get column value by this field",required:!0,sx:{flex:1}},d.getListInputProps("columns",g,"value_field"))),e(dt,p({label:"Value Type",sx:{flex:1}},d.getListInputProps("columns",g,"value_type")))]}),e(t.ActionIcon,{color:"red",variant:"hover",onClick:()=>d.removeListItem("columns",g),sx:{position:"absolute",top:15,right:5},children:e(v.Trash,{size:16})})]},g)),e(t.Group,{position:"center",mt:"xs",children:e(t.Button,{onClick:h,children:"Add a Column"})})]})]}),e(t.Text,{weight:500,mb:"md",children:"Current Configuration:"}),e(M.Prism,{language:"json",colorScheme:"dark",noCopy:!0,children:JSON.stringify(d.values,null,2)})]})})}const H=[{label:"initial",value:0},{label:"500",value:25},{label:"700",value:50},{label:"semibold",value:75},{label:"bold",value:100}];function pt({label:n,value:i,onChange:r}){var s,l;const[o,a]=u.default.useState((l=(s=H.find(d=>d.label===i))==null?void 0:s.value)!=null?l:H[0].value);return u.default.useEffect(()=>{const d=H.find(h=>h.value===o);d&&r(d.label)},[o]),c(t.Group,{direction:"column",grow:!0,spacing:"xs",mb:"lg",children:[e(t.Text,{children:n}),e(t.Slider,{label:null,marks:H,value:o,onChange:a,step:25,placeholder:"Pick a font size"})]})}const be=[{align:"center",size:"xl",weight:"bold",color:"black",template:"Time: ${new Date().toISOString()}"},{align:"center",size:"md",weight:"bold",color:"red",template:"Platform: ${navigator.userAgentData.platform}."}];function mt({conf:n,setConf:i}){var a;const r=G.useForm({initialValues:{paragraphs:G.formList((a=n.paragraphs)!=null?a:be)}}),o=()=>r.addListItem("paragraphs",E(p({},be[0]),{template:z.randomId()}));return e(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:c("form",{onSubmit:r.onSubmit(i),children:[r.values.paragraphs.length===0&&e(t.Text,{color:"dimmed",align:"center",children:"Empty"}),c(t.Group,{position:"apart",mb:"xs",sx:{" + .mantine-Group-root":{marginTop:0}},children:[e(t.Text,{children:"Paragraphs"}),e(t.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:e(v.DeviceFloppy,{size:20})})]}),r.values.paragraphs.map((s,l)=>c(t.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[e(t.TextInput,p({placeholder:"Time: ${new Date().toISOString()}",label:"Content Template",required:!0,sx:{flex:1}},r.getListInputProps("paragraphs",l,"template"))),c(t.Group,{direction:"column",grow:!0,children:[e(t.Text,{children:"Color"}),e(ge,p({},r.getListInputProps("paragraphs",l,"color")))]}),e(t.Group,{direction:"column",grow:!0,children:e(t.TextInput,p({label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",sx:{flex:1}},r.getListInputProps("paragraphs",l,"size")))}),e(t.Group,{position:"apart",grow:!0,sx:{"> *":{flexGrow:1,maxWidth:"100%"}},children:e(pt,p({label:"Font Weight"},r.getListInputProps("paragraphs",l,"weight")))}),e(t.ActionIcon,{color:"red",variant:"hover",onClick:()=>r.removeListItem("paragraphs",l),sx:{position:"absolute",top:15,right:5},children:e(v.Trash,{size:16})})]},l)),e(t.Group,{position:"center",mt:"md",children:e(t.Button,{onClick:o,children:"Add a Paragraph"})}),e(t.Text,{size:"sm",weight:500,mt:"md",children:"Current Configuration:"}),e(M.Prism,{language:"json",colorScheme:"dark",noCopy:!0,children:JSON.stringify(r.values,null,2)})]})})}const re=[{value:"text",label:"Text",Panel:mt},{value:"table",label:"Table",Panel:ct},{value:"sunburst",label:"Sunburst",Panel:st},{value:"bar-3d",label:"Bar Chart (3D)",Panel:at},{value:"line-bar",label:"Line-Bar Chart",Panel:lt}];function ht(){const{viz:n,setViz:i}=u.default.useContext(q),[r,o]=z.useInputState(n.type),a=n.type!==r,s=u.default.useCallback(()=>{!a||i(f=>E(p({},f),{type:r}))},[a,r]),l=f=>{i(g=>E(p({},g),{conf:f}))},d=f=>{try{l(JSON.parse(f))}catch(g){console.error(g)}},h=u.default.useMemo(()=>{var f;return(f=re.find(g=>g.value===r))==null?void 0:f.Panel},[r,re]);return c(ie,{children:[e(t.Select,{label:"Visualization",value:r,onChange:o,data:re,rightSection:e(t.ActionIcon,{disabled:!a,onClick:s,children:e(v.DeviceFloppy,{size:20})})}),h&&e(h,{conf:n.conf,setConf:l}),!h&&e(t.JsonInput,{minRows:20,label:"Config",value:JSON.stringify(n.conf,null,2),onChange:d})]})}function ft({}){return c(t.Group,{direction:"row",grow:!0,noWrap:!0,align:"stretch",sx:{height:"100%"},children:[c(t.Group,{grow:!0,direction:"column",sx:{width:"40%",flexShrink:0,flexGrow:0},children:[e(ot,{}),e(je,{}),e(t.Divider,{sx:{flexGrow:0}}),e(ht,{})]}),e(t.Box,{sx:{height:"100%",flexGrow:1,maxWidth:"60%"},children:e(rt,{})})]})}function xt({opened:n,close:i}){const{freezeLayout:r}=u.default.useContext(j),{data:o,loading:a,viz:s,title:l}=u.default.useContext(q);return u.default.useEffect(()=>{r(n)},[n]),e(t.Modal,{size:"96vw",overflow:"inside",opened:n,onClose:i,title:l,trapFocus:!0,onDragStart:d=>{d.stopPropagation()},children:e(t.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 185px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",width:"100%"}},padding:"md",children:c(t.Tabs,{initialTab:2,children:[c(t.Tabs.Tab,{label:"Data Source",children:[e(t.LoadingOverlay,{visible:a}),e(Ve,{})]}),e(t.Tabs.Tab,{label:"Viz Config",children:e(ft,{})})]})})})}function gt({}){const[n,i]=u.default.useState(!1),r=()=>i(!0),o=()=>i(!1),{title:a,description:s,loading:l,refreshData:d}=u.default.useContext(q),{inEditMode:h}=u.default.useContext(j);return c(t.Group,{position:"apart",noWrap:!0,sx:{borderBottom:"1px solid #eee",paddingBottom:"5px"},children:[e(t.Group,{children:s&&e(t.Tooltip,{label:s,withArrow:!0,children:e(v.InfoCircle,{size:12,style:{verticalAlign:"baseline",cursor:"pointer"}})})}),e(t.Group,{grow:!0,position:"center",children:e(t.Text,{lineClamp:1,weight:"bold",children:a})}),e(t.Group,{position:"right",spacing:0,sx:{height:"28px"},children:c(t.Menu,{children:[e(t.Menu.Item,{onClick:d,icon:e(v.Refresh,{size:14}),children:"Refresh"}),h&&e(t.Menu.Item,{onClick:r,icon:e(v.Settings,{size:14}),children:"Settings"}),e(t.Divider,{}),e(t.Menu.Item,{color:"red",disabled:!0,icon:e(v.Trash,{size:14}),children:"Delete"})]})}),h&&e(xt,{opened:n,close:o})]})}var Nt="";function oe({viz:n,dataSourceID:i,title:r,description:o,update:a,layout:s,id:l}){const d=u.default.useContext(R),h=u.default.useContext(P),[f,g]=u.default.useState(r),[b,x]=u.default.useState(o),[S,D]=u.default.useState(i),[I,L]=u.default.useState(n),$=u.default.useMemo(()=>{if(!!S)return h.dataSources.find(J=>J.id===S)},[S,h.dataSources]);u.default.useEffect(()=>{a==null||a({id:l,layout:s,title:f,description:b,dataSourceID:S,viz:I})},[f,b,$,I,l,s,S]);const{data:k=[],loading:K,refresh:ae}=se.useRequest(ce({context:d,definitions:h,title:f,dataSource:$}),{refreshDeps:[d,h,$]}),le=ae;return e(q.Provider,{value:{data:k,loading:K,title:f,setTitle:g,description:b,setDescription:x,dataSourceID:S,setDataSourceID:D,viz:I,setViz:L,refreshData:le},children:c(t.Container,{className:"panel-root",children:[e(gt,{}),e(fe,{children:e(xe,{viz:I,data:k,loading:K})})]})})}var Vt="";const bt=w.WidthProvider(w.Responsive);function Se({panels:n,setPanels:i,className:r="layout",cols:o={lg:12,md:10,sm:8,xs:6,xxs:4},rowHeight:a=10,onRemoveItem:s,isDraggable:l,isResizable:d,setLocalCols:h,setBreakpoint:f}){const g=(x,S)=>{f(x),h(S)},b=u.default.useCallback(x=>{const S=new Map;x.forEach($=>{var k=$,{i:I}=k,L=_(k,["i"]);S.set(I,L)});const D=n.map(I=>E(p({},I),{layout:S.get(I.id)}));i(D)},[n,i]);return e(bt,{onBreakpointChange:g,onLayoutChange:b,className:r,cols:o,rowHeight:a,isDraggable:l,isResizable:d,children:n.map((I,D)=>{var L=I,{id:x}=L,S=_(L,["id"]);return e("div",{"data-grid":S.layout,children:e(oe,E(p({id:x},S),{destroy:()=>s(x),update:$=>{i(k=>(k.splice(D,1,$),k))}}))},x)})})}function ve(n,i){return c(t.Text,{sx:{svg:{verticalAlign:"text-bottom"}},children:[n," ",i]})}function St({mode:n,setMode:i}){return e(t.SegmentedControl,{value:n,onChange:i,data:[{label:ve(e(v.PlayerPlay,{size:20}),"Use"),value:O.Use},{label:ve(e(v.Paint,{size:20}),"Edit"),value:O.Edit}]})}const vt=`
9
+ */var Ae=u.default,qe=Symbol.for("react.element"),Me=Symbol.for("react.fragment"),Be=Object.prototype.hasOwnProperty,$e=Ae.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Fe={key:!0,ref:!0,__self:!0,__source:!0};function me(n,i,r){var o,a={},s=null,l=null;r!==void 0&&(s=""+r),i.key!==void 0&&(s=""+i.key),i.ref!==void 0&&(l=i.ref);for(o in i)Be.call(i,o)&&!Fe.hasOwnProperty(o)&&(a[o]=i[o]);if(n&&n.defaultProps)for(o in i=n.defaultProps,i)a[o]===void 0&&(a[o]=i[o]);return{$$typeof:qe,type:n,key:s,ref:l,props:a,_owner:$e.current}}Y.Fragment=Me,Y.jsx=me,Y.jsxs=me,U.exports=Y;const e=U.exports.jsx,c=U.exports.jsxs,ie=U.exports.Fragment;function Ne(){const{description:n,setDescription:i}=u.default.useContext(P),[r,o]=_.useInputState(n),a=n!==r,s=u.default.useCallback(()=>{!a||i(r)},[a,r]);return e(t.Textarea,{label:"Panel Description",value:r,onChange:o,minRows:10,autosize:!0,maxRows:30,rightSection:e(t.ActionIcon,{disabled:!a,onClick:s,sx:{alignSelf:"flex-start",marginTop:"4px"},children:e(v.DeviceFloppy,{size:20})})})}const Re={sqlSnippets:[],setSQLSnippets:()=>{},dataSources:[],setDataSources:()=>{}},L=u.default.createContext(Re);class re extends u.default.Component{constructor(i){super(i),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?e("h1",{children:"Something went wrong."}):this.props.children}}function Ve(){const{title:n,description:i}=u.default.useContext(P);return e(re,{children:e(t.Container,{mt:"xl",p:"5px",sx:{width:"600px",height:"450px",background:"transparent",borderRadius:"5px",boxShadow:"0px 0px 10px 0px rgba(0,0,0,.2)"},children:c(t.Group,{position:"apart",noWrap:!0,sx:{borderBottom:"1px solid #eee",paddingBottom:"5px"},children:[e(t.Group,{children:i&&e(t.Tooltip,{label:i,withArrow:!0,children:e(v.InfoCircle,{size:12,style:{verticalAlign:"baseline",cursor:"pointer"}})})}),e(t.Group,{grow:!0,position:"center",children:e(t.Text,{lineClamp:1,weight:"bold",children:n})}),e(t.Group,{position:"right",spacing:0,sx:{height:"28px"}})]})})})}function je(){const{title:n,setTitle:i}=u.default.useContext(P),[r,o]=_.useInputState(n),a=n!==r,s=u.default.useCallback(()=>{!a||i(r)},[a,r]);return e(t.TextInput,{label:"Panel Title",value:r,onChange:o,rightSection:e(t.ActionIcon,{disabled:!a,onClick:s,children:e(v.DeviceFloppy,{size:20})})})}function We({}){return c(t.Group,{direction:"row",grow:!0,noWrap:!0,align:"stretch",sx:{height:"100%"},children:[c(t.Group,{grow:!0,direction:"column",sx:{width:"40%",flexShrink:0,flexGrow:0},children:[e(je,{}),e(Ne,{})]}),e(t.Box,{sx:{height:"100%",flexGrow:1,maxWidth:"60%"},children:e(Ve,{})})]})}function fe({id:n}){const i=u.default.useContext(L),r=u.default.useContext(j),o=u.default.useMemo(()=>i.dataSources.find(l=>l.id===n),[i.dataSources,n]),{data:a=[],loading:s}=ue.useRequest(pe({context:r,definitions:i,title:n,dataSource:o}),{refreshDeps:[r,i,o]});return s?e(t.LoadingOverlay,{visible:s}):a.length===0?e(t.Table,{}):c(t.Group,{my:"xl",direction:"column",grow:!0,sx:{border:"1px solid #eee"},children:[e(t.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:e(t.Text,{weight:500,children:"Preview Data"})}),c(t.Table,{children:[e("thead",{children:e("tr",{children:Object.keys(a==null?void 0:a[0]).map(l=>e("th",{children:l},l))})}),e("tbody",{children:a.map((l,d)=>e("tr",{children:Object.values(l).map((m,f)=>e("td",{children:e(t.Group,{sx:{"&, .mantine-Text-root":{fontFamily:"monospace"}},children:e(t.Text,{children:m})})},`${m}--${f}`))},`row-${d}`))})]})]})}function Qe({}){const{dataSources:n}=u.default.useContext(L),{dataSourceID:i,setDataSourceID:r,data:o,loading:a}=u.default.useContext(P),s=u.default.useMemo(()=>n.map(l=>({value:l.id,label:l.id})),[n]);return c(t.Group,{direction:"column",grow:!0,noWrap:!0,children:[c(t.Group,{position:"left",sx:{maxWidth:"600px",alignItems:"baseline"},children:[e(t.Text,{children:"Select a Data Source"}),e(t.Select,{data:s,value:i,onChange:r,allowDeselect:!1,clearable:!1,sx:{flexGrow:1}})]}),e(fe,{id:i})]})}W.use([ee.SunburstChart,te.CanvasRenderer]);const Je={tooltip:{show:!0},series:{type:"sunburst",radius:[0,"90%"],emphasis:{focus:"ancestor"}}};function Ue({conf:n,data:i,width:r,height:o}){const b=n,{label_field:a="name",value_field:s="value"}=b,l=z(b,["label_field","value_field"]),d=u.default.useMemo(()=>i.map(x=>({name:x[a],value:Number(x[s])})),[i,a,s]),m=u.default.useMemo(()=>{var x,S;return(S=(x=T.default.maxBy(d,D=>D.value))==null?void 0:x.value)!=null?S:1},[d]),f=u.default.useMemo(()=>({series:{label:{formatter:({name:x,value:S})=>S/m<.2?" ":x}}}),[m]),g=T.default.merge({},Je,f,l,{series:{data:d}});return e(ne.default,{echarts:W,option:g,style:{width:r,height:o}})}W.use([ee.BarChart,ee.LineChart,N.GridComponent,N.LegendComponent,N.TooltipComponent,te.CanvasRenderer]);const Ye={legend:{show:!0},tooltip:{trigger:"axis"},xAxis:{type:"category"},yAxis:{},grid:{top:30,left:10,right:10,bottom:10,containLabel:!0}};function He({conf:n,data:i,width:r,height:o}){const a=u.default.useMemo(()=>{const s={dataset:{source:i}},l={xAxis:{data:i.map(m=>m[n.x_axis_data_key])}},d=n.series.map(g=>{var b=g,{y_axis_data_key:m}=b,f=z(b,["y_axis_data_key"]);return p({data:i.map(x=>x[m])},f)});return T.default.assign({},Ye,s,l,{series:d})},[n,i]);return!r||!o?null:e(ne.default,{echarts:W,option:a,style:{width:r,height:o}})}var B=(n=>(n.string="string",n.number="number",n.eloc="eloc",n.percentage="percentage",n))(B||{});function Ke({value:n}){return e(t.Text,{component:"span",children:n})}function Xe({value:n}){return e(t.Text,{component:"span",children:n})}function Ze({value:n}){const i=de.default(n).format({thousandSeparated:!0});return e(t.Text,{component:"span",children:i})}function et({value:n}){const i=de.default(n).format({output:"percent",mantissa:3});return e(t.Text,{component:"span",children:i})}function tt({value:n,type:i}){switch(i){case B.string:return e(Ke,{value:n});case B.eloc:return e(Xe,{value:n});case B.number:return e(Ze,{value:n});case B.percentage:return e(et,{value:n})}}function nt({conf:n,data:i,width:r,height:o}){const g=n,{id_field:a,use_raw_columns:s,columns:l}=g,d=z(g,["id_field","use_raw_columns","columns"]),m=u.default.useMemo(()=>s?Object.keys(i==null?void 0:i[0]):l.map(b=>b.label),[s,l,i]),f=u.default.useMemo(()=>s?Object.keys(i==null?void 0:i[0]).map(b=>({label:b,value_field:b,value_type:B.string})):l,[s,l,i]);return c(t.Table,O(p({sx:{maxHeight:o}},d),{children:[e("thead",{children:e("tr",{children:m.map(b=>e("th",{children:b},b))})}),e("tbody",{children:i.map((b,x)=>e("tr",{children:f.map(({value_field:S,value_type:D})=>e("td",{children:e(t.Group,{sx:{"&, .mantine-Text-root":{fontFamily:"monospace"}},children:e(tt,{value:b[S],type:D})})},b[S]))},a?b[a]:`row-${x}`))})]}))}function it(n,i={}){const r=Object.keys(i),o=Object.values(i);try{return new Function(...r,`return \`${n}\`;`)(...o)}catch(a){return a.message}}function rt({conf:{paragraphs:n},data:i}){return e(ie,{children:n.map((l,s)=>{var d=l,{template:r,size:o}=d,a=z(d,["template","size"]);return e(t.Text,O(p({},a),{sx:{fontSize:o},children:it(r,i[0])}),`${r}---${s}`)})})}W.use([N.GridComponent,N.VisualMapComponent,N.LegendComponent,N.TooltipComponent,te.CanvasRenderer]);function ot({conf:n,data:i,width:r,height:o}){const b=n,{x_axis_data_key:a,y_axis_data_key:s,z_axis_data_key:l}=b,d=z(b,["x_axis_data_key","y_axis_data_key","z_axis_data_key"]),m=u.default.useMemo(()=>T.default.minBy(i,x=>x[l])[l],[i,l]),f=u.default.useMemo(()=>T.default.maxBy(i,x=>x[l])[l],[i,l]),g=O(p({tooltip:{},backgroundColor:"#fff",visualMap:{show:!0,dimension:2,min:m,max:f,inRange:{color:["#313695","#4575b4","#74add1","#abd9e9","#e0f3f8","#ffffbf","#fee090","#fdae61","#f46d43","#d73027","#a50026"]}},xAxis3D:{type:"value"},yAxis3D:{type:"value"},zAxis3D:{type:"value"},grid3D:{viewControl:{projection:"orthographic",autoRotate:!1},light:{main:{shadow:!0,quality:"ultra",intensity:1.5}}}},d),{series:[{type:"bar3D",wireframe:{},data:i.map(x=>[x[a],x[s],x[l]])}]});return e(ne.default,{echarts:W,option:g,style:{width:r,height:o}})}var Rt="";function at(n,i,r,o){const a={width:n,height:i,data:r,conf:o.conf};switch(o.type){case"sunburst":return e(Ue,p({},a));case"line-bar":return e(He,p({},a));case"table":return e(nt,p({},a));case"text":return e(rt,p({},a));case"bar-3d":return e(ot,p({},a));default:return null}}function xe({viz:n,data:i,loading:r}){const{ref:o,width:a,height:s}=_.useElementSize(),l=u.default.useMemo(()=>!Array.isArray(i)||i.length===0,[i]);return r?e("div",{className:"viz-root",ref:o,children:e(t.LoadingOverlay,{visible:r})}):c("div",{className:"viz-root",ref:o,children:[l&&e(t.Text,{color:"gray",align:"center",children:"nothing to show"}),!l&&at(a,s,i,n)]})}function lt({}){const{data:n,loading:i,viz:r}=u.default.useContext(P);return e(re,{children:e(xe,{viz:r,data:n,loading:i})})}function st({conf:n,setConf:i}){const r=T.default.assign({},{x_axis_data_key:"x",y_axis_data_key:"y",z_axis_data_key:"z",xAxis3D:{type:"value",name:"X Axis Name"},yAxis3D:{type:"value",name:"Y Axis Name"},zAxis3D:{type:"value",name:"Z Axis Name"}},n),{control:o,handleSubmit:a,formState:s}=R.useForm({defaultValues:r});return e(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:c("form",{onSubmit:a(i),children:[e(t.Text,{children:"X Axis"}),c(t.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[e(R.Controller,{name:"x_axis_data_key",control:o,render:({field:l})=>e(t.TextInput,p({sx:{flexGrow:1},size:"md",label:"Data Key"},l))}),e(R.Controller,{name:"xAxis3D.name",control:o,render:({field:l})=>e(t.TextInput,p({sx:{flexGrow:1},size:"md",label:"Name"},l))})]}),e(t.Text,{mt:"lg",children:"Y Axis"}),c(t.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[e(R.Controller,{name:"y_axis_data_key",control:o,render:({field:l})=>e(t.TextInput,p({sx:{flexGrow:1},size:"md",label:"Data Key"},l))}),e(R.Controller,{name:"yAxis3D.name",control:o,render:({field:l})=>e(t.TextInput,p({sx:{flexGrow:1},size:"md",label:"Name"},l))})]}),e(t.Text,{mt:"lg",children:"Z Axis"}),c(t.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[e(R.Controller,{name:"z_axis_data_key",control:o,render:({field:l})=>e(t.TextInput,p({sx:{flexGrow:1},size:"md",label:"Data Key"},l))}),e(R.Controller,{name:"zAxis3D.name",control:o,render:({field:l})=>e(t.TextInput,p({sx:{flexGrow:1},size:"md",label:"Name"},l))})]}),e(t.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"60%"},mx:"auto",children:c(t.Button,{color:"blue",type:"submit",children:[e(v.DeviceFloppy,{size:20}),e(t.Text,{ml:"md",children:"Save"})]})})]})})}function ge({value:n,onChange:i}){const r=t.useMantineTheme(),o=u.default.useMemo(()=>Object.entries(r.colors).map(([s,l])=>({label:s,value:l[6]})),[r]),a=u.default.useMemo(()=>o.some(s=>s.value===n),[n,o]);return c(t.Group,{position:"apart",spacing:"xs",children:[e(t.TextInput,{placeholder:"Set any color",value:a?"":n,onChange:s=>i(s.currentTarget.value),rightSection:e(t.ColorSwatch,{color:a?"transparent":n,radius:4}),variant:a?"filled":"default",sx:{maxWidth:"100%",flexGrow:1}}),e(t.Text,{sx:{flexGrow:0},children:"or"}),e(t.Select,{data:o,value:n,onChange:i,variant:a?"default":"filled",placeholder:"Pick a theme color",icon:e(t.ColorSwatch,{color:a?n:"transparent",radius:4}),sx:{maxWidth:"100%",flexGrow:1}})]})}function ut({conf:n,setConf:i}){const d=n,{series:r}=d,o=z(d,["series"]),a=u.default.useMemo(()=>p({series:G.formList(r!=null?r:[])},o),[r,o]),s=G.useForm({initialValues:a}),l=()=>s.addListItem("series",{type:"bar",name:_.randomId(),showSymbol:!1,y_axis_data_key:"value",stack:"",color:"#000"});return u.default.useMemo(()=>!T.default.isEqual(s.values,a),[s.values,a]),e(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:c("form",{onSubmit:s.onSubmit(i),children:[c(t.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[e(t.Text,{children:"Chart Config"}),e(t.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:e(v.DeviceFloppy,{size:20})})]}),e(t.TextInput,p({size:"md",mb:"lg",label:"X Axis Data Key"},s.getInputProps("x_axis_data_key"))),c(t.Group,{direction:"column",grow:!0,children:[e(t.Text,{mt:"xl",mb:0,children:"Series"}),s.values.series.map((m,f)=>c(t.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[e(t.TextInput,p({label:"Label",required:!0,sx:{flex:1}},s.getListInputProps("series",f,"name"))),c(t.Group,{direction:"row",grow:!0,noWrap:!0,children:[e(t.TextInput,p({label:"Y Axis Data key",required:!0},s.getListInputProps("series",f,"y_axis_data_key"))),e(t.TextInput,p({label:"Stack ID",placeholder:"Stack bars by this ID"},s.getListInputProps("series",f,"stack")))]}),c(t.Group,{direction:"column",grow:!0,children:[e(t.Text,{children:"Color"}),e(ge,p({},s.getListInputProps("series",f,"color")))]}),e(t.ActionIcon,{color:"red",variant:"hover",onClick:()=>s.removeListItem("series",f),sx:{position:"absolute",top:15,right:5},children:e(v.Trash,{size:16})})]},f)),e(t.Group,{position:"center",mt:"xs",children:e(t.Button,{onClick:l,children:"Add a Series"})})]})]})})}function dt({conf:{label_field:n,value_field:i},setConf:r}){const o=G.useForm({initialValues:{label_field:n,value_field:i}});return e(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:c("form",{onSubmit:o.onSubmit(r),children:[c(t.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[e(t.Text,{children:"Sunburst Config"}),e(t.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:e(v.DeviceFloppy,{size:20})})]}),c(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[e(t.TextInput,p({label:"Label Field",required:!0,sx:{flex:1}},o.getInputProps("label_field"))),e(t.TextInput,p({label:"Value Field",placeholder:"get column value by this field",required:!0,sx:{flex:1}},o.getInputProps("value_field")))]})]})})}const ct=Object.values(B).map(n=>({label:n,value:n}));function pt({label:n,value:i,onChange:r,sx:o}){return e(t.Select,{label:n,data:ct,value:i,onChange:r,sx:o})}function ht(o){var a=o,{conf:s}=a,l=s,{columns:n}=l,i=z(l,["columns"]),{setConf:r}=a;const d=G.useForm({initialValues:p({id_field:"id",use_raw_columns:!0,columns:G.formList(n!=null?n:[]),size:"sm",horizontalSpacing:"sm",verticalSpacing:"sm",striped:!1,highlightOnHover:!1},i)}),m=()=>d.addListItem("columns",{label:_.randomId(),value_field:"value",value_type:B.string});return e(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:c("form",{onSubmit:d.onSubmit(r),children:[c(t.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[e(t.Text,{children:"Table Config"}),e(t.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:e(v.DeviceFloppy,{size:20})})]}),c(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[e(t.TextInput,p({size:"md",mb:"lg",label:"ID Field"},d.getInputProps("id_field"))),c(t.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:[e(t.TextInput,p({label:"Horizontal Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1}},d.getInputProps("horizontalSpacing"))),e(t.TextInput,p({label:"Vertical Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1}},d.getInputProps("verticalSpacing")))]}),e(t.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:e(t.TextInput,p({label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1}},d.getInputProps("size")))}),c(t.Group,{direction:"column",grow:!0,children:[e(t.Text,{children:"Other"}),c(t.Group,{position:"apart",grow:!0,children:[e(t.Switch,p({label:"Striped"},d.getInputProps("striped",{type:"checkbox"}))),e(t.Switch,p({label:"Highlight on hover"},d.getInputProps("highlightOnHover",{type:"checkbox"})))]})]})]}),c(t.Group,{direction:"column",mt:"xs",spacing:"xs",grow:!0,p:"md",mb:"xl",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[e(t.Switch,p({label:"Use Original Data Columns"},d.getInputProps("use_raw_columns",{type:"checkbox"}))),!d.values.use_raw_columns&&c(t.Group,{direction:"column",grow:!0,children:[e(t.Text,{mt:"xl",mb:0,children:"Custom Columns"}),d.values.columns.map((f,g)=>c(t.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[c(t.Group,{position:"apart",grow:!0,sx:{"> *":{flexGrow:1,maxWidth:"100%"}},children:[e(t.TextInput,p({label:"Label",required:!0,sx:{flex:1}},d.getListInputProps("columns",g,"label"))),e(t.TextInput,p({label:"Value Field",placeholder:"get column value by this field",required:!0,sx:{flex:1}},d.getListInputProps("columns",g,"value_field"))),e(pt,p({label:"Value Type",sx:{flex:1}},d.getListInputProps("columns",g,"value_type")))]}),e(t.ActionIcon,{color:"red",variant:"hover",onClick:()=>d.removeListItem("columns",g),sx:{position:"absolute",top:15,right:5},children:e(v.Trash,{size:16})})]},g)),e(t.Group,{position:"center",mt:"xs",children:e(t.Button,{onClick:m,children:"Add a Column"})})]})]}),e(t.Text,{weight:500,mb:"md",children:"Current Configuration:"}),e(M.Prism,{language:"json",colorScheme:"dark",noCopy:!0,children:JSON.stringify(d.values,null,2)})]})})}const H=[{label:"initial",value:0},{label:"500",value:25},{label:"700",value:50},{label:"semibold",value:75},{label:"bold",value:100}];function mt({label:n,value:i,onChange:r}){var s,l;const[o,a]=u.default.useState((l=(s=H.find(d=>d.label===i))==null?void 0:s.value)!=null?l:H[0].value);return u.default.useEffect(()=>{const d=H.find(m=>m.value===o);d&&r(d.label)},[o]),c(t.Group,{direction:"column",grow:!0,spacing:"xs",mb:"lg",children:[e(t.Text,{children:n}),e(t.Slider,{label:null,marks:H,value:o,onChange:a,step:25,placeholder:"Pick a font size"})]})}const be=[{align:"center",size:"xl",weight:"bold",color:"black",template:"Time: ${new Date().toISOString()}"},{align:"center",size:"md",weight:"bold",color:"red",template:"Platform: ${navigator.userAgentData.platform}."}];function ft({conf:n,setConf:i}){var a;const r=G.useForm({initialValues:{paragraphs:G.formList((a=n.paragraphs)!=null?a:be)}}),o=()=>r.addListItem("paragraphs",O(p({},be[0]),{template:_.randomId()}));return e(t.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:c("form",{onSubmit:r.onSubmit(i),children:[r.values.paragraphs.length===0&&e(t.Text,{color:"dimmed",align:"center",children:"Empty"}),c(t.Group,{position:"apart",mb:"xs",sx:{" + .mantine-Group-root":{marginTop:0}},children:[e(t.Text,{children:"Paragraphs"}),e(t.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:e(v.DeviceFloppy,{size:20})})]}),r.values.paragraphs.map((s,l)=>c(t.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[e(t.TextInput,p({placeholder:"Time: ${new Date().toISOString()}",label:"Content Template",required:!0,sx:{flex:1}},r.getListInputProps("paragraphs",l,"template"))),c(t.Group,{direction:"column",grow:!0,children:[e(t.Text,{children:"Color"}),e(ge,p({},r.getListInputProps("paragraphs",l,"color")))]}),e(t.Group,{direction:"column",grow:!0,children:e(t.TextInput,p({label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",sx:{flex:1}},r.getListInputProps("paragraphs",l,"size")))}),e(t.Group,{position:"apart",grow:!0,sx:{"> *":{flexGrow:1,maxWidth:"100%"}},children:e(mt,p({label:"Font Weight"},r.getListInputProps("paragraphs",l,"weight")))}),e(t.ActionIcon,{color:"red",variant:"hover",onClick:()=>r.removeListItem("paragraphs",l),sx:{position:"absolute",top:15,right:5},children:e(v.Trash,{size:16})})]},l)),e(t.Group,{position:"center",mt:"md",children:e(t.Button,{onClick:o,children:"Add a Paragraph"})}),e(t.Text,{size:"sm",weight:500,mt:"md",children:"Current Configuration:"}),e(M.Prism,{language:"json",colorScheme:"dark",noCopy:!0,children:JSON.stringify(r.values,null,2)})]})})}const oe=[{value:"text",label:"Text",Panel:ft},{value:"table",label:"Table",Panel:ht},{value:"sunburst",label:"Sunburst",Panel:dt},{value:"bar-3d",label:"Bar Chart (3D)",Panel:st},{value:"line-bar",label:"Line-Bar Chart",Panel:ut}];function xt(){const{viz:n,setViz:i}=u.default.useContext(P),[r,o]=_.useInputState(n.type),a=n.type!==r,s=u.default.useCallback(()=>{!a||i(f=>O(p({},f),{type:r}))},[a,r]),l=f=>{i(g=>O(p({},g),{conf:f}))},d=f=>{try{l(JSON.parse(f))}catch(g){console.error(g)}},m=u.default.useMemo(()=>{var f;return(f=oe.find(g=>g.value===r))==null?void 0:f.Panel},[r,oe]);return c(ie,{children:[e(t.Select,{label:"Visualization",value:r,onChange:o,data:oe,rightSection:e(t.ActionIcon,{disabled:!a,onClick:s,children:e(v.DeviceFloppy,{size:20})})}),m&&e(m,{conf:n.conf,setConf:l}),!m&&e(t.JsonInput,{minRows:20,label:"Config",value:JSON.stringify(n.conf,null,2),onChange:d})]})}function gt({}){return c(t.Group,{direction:"row",grow:!0,noWrap:!0,align:"stretch",sx:{height:"100%"},children:[e(t.Group,{grow:!0,direction:"column",sx:{width:"40%",flexShrink:0,flexGrow:0},children:e(xt,{})}),e(t.Box,{sx:{height:"100%",flexGrow:1,maxWidth:"60%"},children:e(lt,{})})]})}function bt({opened:n,close:i}){const{freezeLayout:r}=u.default.useContext(V),{data:o,loading:a,viz:s,title:l}=u.default.useContext(P);return u.default.useEffect(()=>{r(n)},[n]),e(t.Modal,{size:"96vw",overflow:"inside",opened:n,onClose:i,title:l,trapFocus:!0,onDragStart:d=>{d.stopPropagation()},children:e(t.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 185px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",width:"100%"}},padding:"md",children:c(t.Tabs,{initialTab:2,children:[c(t.Tabs.Tab,{label:"Data Source",children:[e(t.LoadingOverlay,{visible:a}),e(Qe,{})]}),e(t.Tabs.Tab,{label:"Panel",children:e(We,{})}),e(t.Tabs.Tab,{label:"Visualization",children:e(gt,{})})]})})})}function St({}){const[n,i]=u.default.useState(!1),r=()=>i(!0),o=()=>i(!1),{title:a,description:s,loading:l,refreshData:d}=u.default.useContext(P),{inEditMode:m}=u.default.useContext(V);return c(t.Group,{position:"apart",noWrap:!0,sx:{borderBottom:"1px solid #eee",paddingBottom:"5px"},children:[e(t.Group,{children:s&&e(t.Tooltip,{label:s,withArrow:!0,children:e(v.InfoCircle,{size:12,style:{verticalAlign:"baseline",cursor:"pointer"}})})}),e(t.Group,{grow:!0,position:"center",children:e(t.Text,{lineClamp:1,weight:"bold",children:a})}),e(t.Group,{position:"right",spacing:0,sx:{height:"28px"},children:c(t.Menu,{children:[e(t.Menu.Item,{onClick:d,icon:e(v.Refresh,{size:14}),children:"Refresh"}),m&&e(t.Menu.Item,{onClick:r,icon:e(v.Settings,{size:14}),children:"Settings"}),e(t.Divider,{}),e(t.Menu.Item,{color:"red",disabled:!0,icon:e(v.Trash,{size:14}),children:"Delete"})]})}),m&&e(bt,{opened:n,close:o})]})}var Vt="";function ae({viz:n,dataSourceID:i,title:r,description:o,update:a,layout:s,id:l}){const d=u.default.useContext(j),m=u.default.useContext(L),[f,g]=u.default.useState(r),[b,x]=u.default.useState(o),[S,D]=u.default.useState(i),[I,k]=u.default.useState(n),$=u.default.useMemo(()=>{if(!!S)return m.dataSources.find(J=>J.id===S)},[S,m.dataSources]);u.default.useEffect(()=>{a==null||a({id:l,layout:s,title:f,description:b,dataSourceID:S,viz:I})},[f,b,$,I,l,s,S]);const{data:E=[],loading:K,refresh:le}=ue.useRequest(pe({context:d,definitions:m,title:f,dataSource:$}),{refreshDeps:[d,m,$]}),se=le;return e(P.Provider,{value:{data:E,loading:K,title:f,setTitle:g,description:b,setDescription:x,dataSourceID:S,setDataSourceID:D,viz:I,setViz:k,refreshData:se},children:c(t.Container,{className:"panel-root",children:[e(St,{}),e(re,{children:e(xe,{viz:I,data:E,loading:K})})]})})}var jt="";const vt=w.WidthProvider(w.Responsive);function Se({panels:n,setPanels:i,className:r="layout",cols:o={lg:12,md:10,sm:8,xs:6,xxs:4},rowHeight:a=10,onRemoveItem:s,isDraggable:l,isResizable:d,setLocalCols:m,setBreakpoint:f}){const g=(x,S)=>{f(x),m(S)},b=u.default.useCallback(x=>{const S=new Map;x.forEach($=>{var E=$,{i:I}=E,k=z(E,["i"]);S.set(I,k)});const D=n.map(I=>O(p({},I),{layout:S.get(I.id)}));i(D)},[n,i]);return e(vt,{onBreakpointChange:g,onLayoutChange:b,className:r,cols:o,rowHeight:a,isDraggable:l,isResizable:d,children:n.map((I,D)=>{var k=I,{id:x}=k,S=z(k,["id"]);return e("div",{"data-grid":S.layout,children:e(ae,O(p({id:x},S),{destroy:()=>s(x),update:$=>{i(E=>(E.splice(D,1,$),E))}}))},x)})})}function ve(n,i){return c(t.Text,{sx:{svg:{verticalAlign:"text-bottom"}},children:[n," ",i]})}function yt({mode:n,setMode:i}){return e(t.SegmentedControl,{value:n,onChange:i,data:[{label:ve(e(v.PlayerPlay,{size:20}),"Use"),value:A.Use},{label:ve(e(v.Paint,{size:20}),"Edit"),value:A.Edit}]})}const Ct=`
10
10
  -- You may reference context data or SQL snippets *by name*
11
11
  -- in SQL or VizConfig.
12
12
  SELECT *
@@ -17,16 +17,16 @@ WHERE
17
17
  -- SQL snippets
18
18
  AND \${author_email_condition}
19
19
  \${order_by_clause}
20
- `;function yt({}){const n=u.default.useContext(R),{sqlSnippets:i}=u.default.useContext(P),r=u.default.useMemo(()=>{const a=i.reduce((s,l)=>(s[l.key]=l.value,s),{});return JSON.stringify(a,null,2)},[i]),o=u.default.useMemo(()=>JSON.stringify(n,null,2),[n]);return c(t.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee",maxWidth:"48%",overflow:"hidden"},children:[e(t.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:e(t.Text,{weight:500,children:"Context"})}),c(t.Group,{direction:"column",px:"md",pb:"md",sx:{width:"100%"},children:[e(M.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:vt}),e(t.Text,{weight:500,sx:{flexGrow:0},children:"Avaiable context"}),e(M.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:o}),e(t.Text,{weight:500,sx:{flexGrow:0},children:"Avaiable SQL Snippets"}),e(M.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:r})]})]})}function Ct({value:n,onChange:i}){const r=G.useForm({initialValues:n}),o=u.default.useCallback(s=>{i(s)},[i]),a=u.default.useMemo(()=>!T.default.isEqual(n,r.values),[n,r.values]);return u.default.useEffect(()=>{r.reset()},[n]),e(t.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee",flexGrow:1},children:c("form",{onSubmit:r.onSubmit(o),children:[c(t.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[e(t.Text,{weight:500,children:"Data Source Configuration"}),e(t.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!a,children:e(v.DeviceFloppy,{size:20})})]}),c(t.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,children:[c(t.Group,{grow:!0,children:[e(t.TextInput,p({placeholder:"An ID unique in this dashboard",label:"ID",required:!0,sx:{flex:1}},r.getInputProps("id"))),e(t.TextInput,p({placeholder:"TODO: use a dedicated UI component for this",label:"Data Source Key",required:!0,sx:{flex:1}},r.getInputProps("key"))),e(t.TextInput,p({placeholder:"Type of the data source",label:"Type",disabled:!0,sx:{flex:1}},r.getInputProps("type")))]}),e(t.Textarea,p({autosize:!0,minRows:12,maxRows:24},r.getInputProps("sql")))]})]})})}function wt({id:n}){const{dataSources:i,setDataSources:r}=u.default.useContext(P),o=u.default.useMemo(()=>i.find(s=>s.id===n),[i,n]),a=u.default.useCallback(s=>{if(!i.findIndex(d=>d.id===s.id)){console.error(new Error("Invalid data source id when updating by id"));return}r(d=>d.map(h=>h.id===s.id?s:h))},[r]);return o?c(t.Group,{direction:"row",position:"apart",grow:!0,align:"stretch",noWrap:!0,children:[e(Ct,{value:o,onChange:a}),e(yt,{})]}):e("span",{children:"Invalid Data Source ID"})}function Tt({id:n,setID:i}){const{dataSources:r,setDataSources:o}=u.default.useContext(P);u.default.useEffect(()=>{var l,d;n||i((d=(l=r[0])==null?void 0:l.id)!=null?d:"")},[n,i,r]);const a=u.default.useMemo(()=>r.map(l=>({value:l.id,label:l.id})),[r]),s=u.default.useCallback(()=>{const l={id:z.randomId(),type:"postgresql",key:"",sql:""};o(d=>[...d,l])},[o]);return e(t.Group,{pb:"xl",children:c(t.Group,{position:"left",sx:{maxWidth:"600px",alignItems:"baseline"},children:[e(t.Text,{children:"Select a Data Source"}),e(t.Select,{data:a,value:n,onChange:i,allowDeselect:!1,clearable:!1,sx:{flexGrow:1}}),e(t.Text,{children:"or"}),e(t.Group,{position:"center",mt:"md",children:e(t.Button,{onClick:s,children:"Add a Data Source"})})]})})}function Dt({opened:n,close:i}){const[r,o]=u.default.useState(""),{freezeLayout:a}=u.default.useContext(j);return u.default.useEffect(()=>{a(n)},[n]),e(t.Modal,{size:"96vw",overflow:"inside",opened:n,onClose:i,title:"Data Sources",trapFocus:!0,onDragStart:s=>{s.stopPropagation()},children:c(t.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 185px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",width:"100%",padding:0,margin:0}},padding:"md",header:e(Tt,{id:r,setID:o}),children:[e(wt,{id:r}),e(he,{id:r})]})})}function It({}){const n=u.default.useContext(R),i="SELECT *\nFROM commit\nWHERE author_time BETWEEN '${timeRange?.[0].toISOString()}' AND '${timeRange?.[1].toISOString()}'";return c(t.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee",maxWidth:"48%",overflow:"hidden"},children:[e(t.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:e(t.Text,{weight:500,children:"Context"})}),c(t.Group,{direction:"column",px:"md",pb:"md",sx:{width:"100%"},children:[e(M.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:`-- You may refer context data *by name*
20
+ `;function wt({}){const n=u.default.useContext(j),{sqlSnippets:i}=u.default.useContext(L),r=u.default.useMemo(()=>{const a=i.reduce((s,l)=>(s[l.key]=l.value,s),{});return JSON.stringify(a,null,2)},[i]),o=u.default.useMemo(()=>JSON.stringify(n,null,2),[n]);return c(t.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee",maxWidth:"48%",overflow:"hidden"},children:[e(t.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:e(t.Text,{weight:500,children:"Context"})}),c(t.Group,{direction:"column",px:"md",pb:"md",sx:{width:"100%"},children:[e(M.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:Ct}),e(t.Text,{weight:500,sx:{flexGrow:0},children:"Avaiable context"}),e(M.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:o}),e(t.Text,{weight:500,sx:{flexGrow:0},children:"Avaiable SQL Snippets"}),e(M.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:r})]})]})}function Tt({value:n,onChange:i}){const r=G.useForm({initialValues:n}),o=u.default.useCallback(s=>{i(s)},[i]),a=u.default.useMemo(()=>!T.default.isEqual(n,r.values),[n,r.values]);return u.default.useEffect(()=>{r.reset()},[n]),e(t.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee",flexGrow:1},children:c("form",{onSubmit:r.onSubmit(o),children:[c(t.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[e(t.Text,{weight:500,children:"Data Source Configuration"}),e(t.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!a,children:e(v.DeviceFloppy,{size:20})})]}),c(t.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,children:[c(t.Group,{grow:!0,children:[e(t.TextInput,p({placeholder:"An ID unique in this dashboard",label:"ID",required:!0,sx:{flex:1}},r.getInputProps("id"))),e(t.TextInput,p({placeholder:"TODO: use a dedicated UI component for this",label:"Data Source Key",required:!0,sx:{flex:1}},r.getInputProps("key"))),e(t.TextInput,p({placeholder:"Type of the data source",label:"Type",disabled:!0,sx:{flex:1}},r.getInputProps("type")))]}),e(t.Textarea,p({autosize:!0,minRows:12,maxRows:24},r.getInputProps("sql")))]})]})})}function Dt({id:n}){const{dataSources:i,setDataSources:r}=u.default.useContext(L),o=u.default.useMemo(()=>i.find(s=>s.id===n),[i,n]),a=u.default.useCallback(s=>{if(!i.findIndex(d=>d.id===s.id)){console.error(new Error("Invalid data source id when updating by id"));return}r(d=>d.map(m=>m.id===s.id?s:m))},[r]);return o?c(t.Group,{direction:"row",position:"apart",grow:!0,align:"stretch",noWrap:!0,children:[e(Tt,{value:o,onChange:a}),e(wt,{})]}):e("span",{children:"Invalid Data Source ID"})}function It({id:n,setID:i}){const{dataSources:r,setDataSources:o}=u.default.useContext(L);u.default.useEffect(()=>{var l,d;n||i((d=(l=r[0])==null?void 0:l.id)!=null?d:"")},[n,i,r]);const a=u.default.useMemo(()=>r.map(l=>({value:l.id,label:l.id})),[r]),s=u.default.useCallback(()=>{const l={id:_.randomId(),type:"postgresql",key:"",sql:""};o(d=>[...d,l])},[o]);return e(t.Group,{pb:"xl",children:c(t.Group,{position:"left",sx:{maxWidth:"600px",alignItems:"baseline"},children:[e(t.Text,{children:"Select a Data Source"}),e(t.Select,{data:a,value:n,onChange:i,allowDeselect:!1,clearable:!1,sx:{flexGrow:1}}),e(t.Text,{children:"or"}),e(t.Group,{position:"center",mt:"md",children:e(t.Button,{onClick:s,children:"Add a Data Source"})})]})})}function zt({opened:n,close:i}){const[r,o]=u.default.useState(""),{freezeLayout:a}=u.default.useContext(V);return u.default.useEffect(()=>{a(n)},[n]),e(t.Modal,{size:"96vw",overflow:"inside",opened:n,onClose:i,title:"Data Sources",trapFocus:!0,onDragStart:s=>{s.stopPropagation()},children:c(t.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 185px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",width:"100%",padding:0,margin:0}},padding:"md",header:e(It,{id:r,setID:o}),children:[e(Dt,{id:r}),e(fe,{id:r})]})})}function _t({}){const n=u.default.useContext(j),i="SELECT *\nFROM commit\nWHERE author_time BETWEEN '${timeRange?.[0].toISOString()}' AND '${timeRange?.[1].toISOString()}'";return c(t.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee",maxWidth:"48%",overflow:"hidden"},children:[e(t.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:e(t.Text,{weight:500,children:"Context"})}),c(t.Group,{direction:"column",px:"md",pb:"md",sx:{width:"100%"},children:[e(M.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:`-- You may refer context data *by name*
21
21
  -- in SQL or VizConfig.
22
22
 
23
- ${i}`}),e(t.Text,{weight:500,sx:{flexGrow:0},children:"Avaiable context entries"}),e(M.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:JSON.stringify(n,null,2)})]})]})}function _t({}){const{sqlSnippets:n,setSQLSnippets:i}=u.default.useContext(P),r=`SELECT *
23
+ ${i}`}),e(t.Text,{weight:500,sx:{flexGrow:0},children:"Avaiable context entries"}),e(M.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:JSON.stringify(n,null,2)})]})]})}function Gt({}){const{sqlSnippets:n,setSQLSnippets:i}=u.default.useContext(L),r=`SELECT *
24
24
  FROM commit
25
- WHERE \${author_time_condition}`,o=u.default.useMemo(()=>({snippets:G.formList(n!=null?n:[])}),[n]),a=G.useForm({initialValues:o}),s=()=>a.addListItem("snippets",{key:z.randomId(),value:""}),l=u.default.useMemo(()=>!T.default.isEqual(a.values,o),[a.values,o]),d=({snippets:h})=>{i(h)};return c(t.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee"},children:[c(t.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:[e(t.Text,{weight:500,children:"SQL Snippets"}),e(t.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!l,children:e(v.DeviceFloppy,{size:20})})]}),c(t.Group,{px:"md",pb:"md",children:[e(M.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,trim:!1,colorScheme:"dark",children:`-- You may refer context data *by name*
25
+ WHERE \${author_time_condition}`,o=u.default.useMemo(()=>({snippets:G.formList(n!=null?n:[])}),[n]),a=G.useForm({initialValues:o}),s=()=>a.addListItem("snippets",{key:_.randomId(),value:""}),l=u.default.useMemo(()=>!T.default.isEqual(a.values,o),[a.values,o]),d=({snippets:m})=>{i(m)};return c(t.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee"},children:[c(t.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:[e(t.Text,{weight:500,children:"SQL Snippets"}),e(t.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!l,children:e(v.DeviceFloppy,{size:20})})]}),c(t.Group,{px:"md",pb:"md",children:[e(M.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,trim:!1,colorScheme:"dark",children:`-- You may refer context data *by name*
26
26
  -- in SQL or VizConfig.
27
27
 
28
28
  ${r}
29
29
 
30
30
  -- where author_time_condition is:
31
31
  author_time BETWEEN '\${timeRange?.[0].toISOString()}' AND '\${timeRange?.[1].toISOString()}'
32
- `}),e(t.Group,{direction:"column",sx:{width:"100%",position:"relative"},grow:!0,children:c("form",{onSubmit:a.onSubmit(d),children:[a.values.snippets.map((h,f)=>c(t.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[e(t.TextInput,p({label:"Key",required:!0},a.getListInputProps("snippets",f,"key"))),e(t.Textarea,p({minRows:3,label:"Value",required:!0},a.getListInputProps("snippets",f,"value"))),e(t.ActionIcon,{color:"red",variant:"hover",onClick:()=>a.removeListItem("snippets",f),sx:{position:"absolute",top:15,right:5},children:e(v.Trash,{size:16})})]},f)),e(t.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"40%"},mx:"auto",children:e(t.Button,{variant:"default",onClick:s,children:"Add a snippet"})})]})})]})]})}function zt({opened:n,close:i}){const{freezeLayout:r}=u.default.useContext(j);return u.default.useEffect(()=>{r(n)},[n]),e(t.Modal,{size:"96vw",overflow:"inside",opened:n,onClose:i,title:"SQL Snippets",trapFocus:!0,onDragStart:o=>{o.stopPropagation()},children:e(t.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 185px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",width:"100%",padding:0,margin:0}},padding:"md",children:c(t.Group,{direction:"row",position:"apart",grow:!0,align:"stretch",noWrap:!0,children:[e(_t,{}),e(It,{})]})})})}function Gt({mode:n,setMode:i,hasChanges:r,addPanel:o,saveChanges:a}){const[s,l]=u.default.useState(!1),d=()=>l(!0),h=()=>l(!1),[f,g]=u.default.useState(!1),b=()=>g(!0),x=()=>g(!1),S=n===O.Edit;return c(t.Group,{position:"apart",pt:"sm",pb:"xs",children:[e(t.Group,{position:"left",children:e(St,{mode:n,setMode:i})}),S&&c(ie,{children:[c(t.Group,{position:"right",children:[e(t.Button,{variant:"default",size:"sm",onClick:o,leftIcon:e(v.PlaylistAdd,{size:20}),children:"Add a Panel"}),e(t.Button,{variant:"default",size:"sm",onClick:b,leftIcon:e(v.ClipboardText,{size:20}),children:"SQL Snippets"}),e(t.Button,{variant:"default",size:"sm",onClick:d,leftIcon:e(v.Database,{size:20}),children:"Data Sources"}),e(t.Button,{variant:"default",size:"sm",onClick:a,disabled:!r,leftIcon:e(v.DeviceFloppy,{size:20}),children:"Save Changes"}),e(t.Button,{color:"red",size:"sm",disabled:!r,leftIcon:e(v.Recycle,{size:20}),children:"Revert Changes"})]}),e(Dt,{opened:s,close:h}),e(zt,{opened:f,close:x})]}),!S&&e(t.Button,{variant:"default",size:"sm",disabled:!0,leftIcon:e(v.Share,{size:20}),children:"Share"})]})}function Pt({context:n,dashboard:i,update:r,className:o="dashboard"}){const[a,s]=u.default.useState(!1),[l,d]=u.default.useState(),[h,f]=u.default.useState(),[g,b]=u.default.useState(i.panels),[x,S]=u.default.useState(i.definition.sqlSnippets),[D,I]=u.default.useState(i.definition.dataSources),[L,$]=u.default.useState(O.Edit),k=u.default.useMemo(()=>{const A=F=>JSON.parse(JSON.stringify(F));return!T.default.isEqual(A(g),A(i.panels))||!T.default.isEqual(x,i.definition.sqlSnippets)?!0:!T.default.isEqual(D,i.definition.dataSources)},[i,g,x,D]),K=async()=>{const A=T.default.merge({},i,{panels:g},{definition:{sqlSnippets:x}});await r(A)},ae=()=>{const A=z.randomId(),X={id:A,layout:{x:0,y:1/0,w:3,h:4},title:`New Panel - ${A}`,description:"description goes here",dataSourceID:"",viz:{type:"table",conf:{}}};b(F=>[...F,X])},le=A=>{const X=g.findIndex(F=>F.id===A);b(F=>(F.splice(X,1),F))},J=L===O.Edit,Ot=u.default.useMemo(()=>({sqlSnippets:x,setSQLSnippets:S,dataSources:D,setDataSources:I}),[x,S,D,I]);return e(R.Provider,{value:n,children:e("div",{className:o,children:e(P.Provider,{value:Ot,children:c(j.Provider,{value:{layoutFrozen:a,freezeLayout:s,mode:L,inEditMode:J},children:[e(Gt,{mode:L,setMode:$,hasChanges:k,addPanel:ae,saveChanges:K}),e(Se,{panels:g,setPanels:b,isDraggable:J&&!a,isResizable:J&&!a,onRemoveItem:le,setLocalCols:f,setBreakpoint:d})]})})})})}const Lt=w.WidthProvider(w.Responsive);function kt({panels:n,className:i="layout",cols:r={lg:12,md:10,sm:8,xs:6,xxs:4},rowHeight:o=10}){return e(Lt,{className:i,cols:r,rowHeight:o,isDraggable:!1,isResizable:!1,children:n.map(l=>{var d=l,{id:a}=d,s=_(d,["id"]);return e("div",{"data-grid":s.layout,children:e(oe,p({id:a},s))},a)})})}function Et({context:n,dashboard:i,className:r="dashboard"}){const o=u.default.useMemo(()=>E(p({},i.definition),{setSQLSnippets:()=>{},setDataSources:()=>{}}),[i]);return e(R.Provider,{value:n,children:e("div",{className:r,children:e(P.Provider,{value:o,children:e(j.Provider,{value:{layoutFrozen:!0,freezeLayout:()=>{},mode:O.Use,inEditMode:!1},children:e(kt,{panels:i.panels})})})})})}m.ContextInfoContext=R,m.Dashboard=Pt,m.DashboardLayout=Se,m.DashboardMode=O,m.DefinitionContext=P,m.LayoutStateContext=j,m.Panel=oe,m.PanelContext=q,m.ReadOnlyDashboard=Et,m.initialContextInfoContext=Ee,Object.defineProperties(m,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
32
+ `}),e(t.Group,{direction:"column",sx:{width:"100%",position:"relative"},grow:!0,children:c("form",{onSubmit:a.onSubmit(d),children:[a.values.snippets.map((m,f)=>c(t.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[e(t.TextInput,p({label:"Key",required:!0},a.getListInputProps("snippets",f,"key"))),e(t.Textarea,p({minRows:3,label:"Value",required:!0},a.getListInputProps("snippets",f,"value"))),e(t.ActionIcon,{color:"red",variant:"hover",onClick:()=>a.removeListItem("snippets",f),sx:{position:"absolute",top:15,right:5},children:e(v.Trash,{size:16})})]},f)),e(t.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"40%"},mx:"auto",children:e(t.Button,{variant:"default",onClick:s,children:"Add a snippet"})})]})})]})]})}function Pt({opened:n,close:i}){const{freezeLayout:r}=u.default.useContext(V);return u.default.useEffect(()=>{r(n)},[n]),e(t.Modal,{size:"96vw",overflow:"inside",opened:n,onClose:i,title:"SQL Snippets",trapFocus:!0,onDragStart:o=>{o.stopPropagation()},children:e(t.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 185px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",width:"100%",padding:0,margin:0}},padding:"md",children:c(t.Group,{direction:"row",position:"apart",grow:!0,align:"stretch",noWrap:!0,children:[e(Gt,{}),e(_t,{})]})})})}function Lt({mode:n,setMode:i,hasChanges:r,addPanel:o,saveChanges:a}){const[s,l]=u.default.useState(!1),d=()=>l(!0),m=()=>l(!1),[f,g]=u.default.useState(!1),b=()=>g(!0),x=()=>g(!1),S=n===A.Edit;return c(t.Group,{position:"apart",pt:"sm",pb:"xs",children:[e(t.Group,{position:"left",children:e(yt,{mode:n,setMode:i})}),S&&c(ie,{children:[c(t.Group,{position:"right",children:[e(t.Button,{variant:"default",size:"sm",onClick:o,leftIcon:e(v.PlaylistAdd,{size:20}),children:"Add a Panel"}),e(t.Button,{variant:"default",size:"sm",onClick:b,leftIcon:e(v.ClipboardText,{size:20}),children:"SQL Snippets"}),e(t.Button,{variant:"default",size:"sm",onClick:d,leftIcon:e(v.Database,{size:20}),children:"Data Sources"}),e(t.Button,{variant:"default",size:"sm",onClick:a,disabled:!r,leftIcon:e(v.DeviceFloppy,{size:20}),children:"Save Changes"}),e(t.Button,{color:"red",size:"sm",disabled:!r,leftIcon:e(v.Recycle,{size:20}),children:"Revert Changes"})]}),e(zt,{opened:s,close:m}),e(Pt,{opened:f,close:x})]}),!S&&e(t.Button,{variant:"default",size:"sm",disabled:!0,leftIcon:e(v.Share,{size:20}),children:"Share"})]})}function kt({context:n,dashboard:i,update:r,className:o="dashboard"}){const[a,s]=u.default.useState(!1),[l,d]=u.default.useState(),[m,f]=u.default.useState(),[g,b]=u.default.useState(i.panels),[x,S]=u.default.useState(i.definition.sqlSnippets),[D,I]=u.default.useState(i.definition.dataSources),[k,$]=u.default.useState(A.Edit),E=u.default.useMemo(()=>{const q=F=>JSON.parse(JSON.stringify(F));return!T.default.isEqual(q(g),q(i.panels))||!T.default.isEqual(x,i.definition.sqlSnippets)?!0:!T.default.isEqual(D,i.definition.dataSources)},[i,g,x,D]),K=async()=>{const q=T.default.merge({},i,{panels:g},{definition:{sqlSnippets:x}});await r(q)},le=()=>{const q=_.randomId(),X={id:q,layout:{x:0,y:1/0,w:3,h:4},title:`New Panel - ${q}`,description:"description goes here",dataSourceID:"",viz:{type:"table",conf:{}}};b(F=>[...F,X])},se=q=>{const X=g.findIndex(F=>F.id===q);b(F=>(F.splice(X,1),F))},J=k===A.Edit,qt=u.default.useMemo(()=>({sqlSnippets:x,setSQLSnippets:S,dataSources:D,setDataSources:I}),[x,S,D,I]);return e(j.Provider,{value:n,children:e("div",{className:o,children:e(L.Provider,{value:qt,children:c(V.Provider,{value:{layoutFrozen:a,freezeLayout:s,mode:k,inEditMode:J},children:[e(Lt,{mode:k,setMode:$,hasChanges:E,addPanel:le,saveChanges:K}),e(Se,{panels:g,setPanels:b,isDraggable:J&&!a,isResizable:J&&!a,onRemoveItem:se,setLocalCols:f,setBreakpoint:d})]})})})})}const Et=w.WidthProvider(w.Responsive);function Ot({panels:n,className:i="layout",cols:r={lg:12,md:10,sm:8,xs:6,xxs:4},rowHeight:o=10}){return e(Et,{className:i,cols:r,rowHeight:o,isDraggable:!1,isResizable:!1,children:n.map(l=>{var d=l,{id:a}=d,s=z(d,["id"]);return e("div",{"data-grid":s.layout,children:e(ae,p({id:a},s))},a)})})}function At({context:n,dashboard:i,className:r="dashboard"}){const o=u.default.useMemo(()=>O(p({},i.definition),{setSQLSnippets:()=>{},setDataSources:()=>{}}),[i]);return e(j.Provider,{value:n,children:e("div",{className:r,children:e(L.Provider,{value:o,children:e(V.Provider,{value:{layoutFrozen:!0,freezeLayout:()=>{},mode:A.Use,inEditMode:!1},children:e(Ot,{panels:i.panels})})})})})}h.ContextInfoContext=j,h.Dashboard=kt,h.DashboardLayout=Se,h.DashboardMode=A,h.DefinitionContext=L,h.LayoutStateContext=V,h.Panel=ae,h.PanelContext=P,h.ReadOnlyDashboard=At,h.initialContextInfoContext=Ee,Object.defineProperties(h,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ interface IPanelConfig {
3
+ }
4
+ export declare function PanelConfig({}: IPanelConfig): JSX.Element;
5
+ export {};
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare function PreviewPanel(): JSX.Element;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devtable/dashboard",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org/"