@devtable/dashboard 1.13.0 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,5 @@
1
- export declare const get: (url: string, data: any, options?: any) => Promise<any>;
2
- export declare const post: (url: string, data: any, options?: any) => Promise<any>;
1
+ import { Method } from 'axios';
2
+ export declare const APIClient: {
3
+ baseURL: string;
4
+ getRequest(method: Method): (url: string, data: any, options?: any) => Promise<any>;
5
+ };
@@ -36,7 +36,7 @@ var __publicField = (obj, key, value) => {
36
36
  import React from "react";
37
37
  import _ from "lodash";
38
38
  import { WidthProvider, Responsive } from "react-grid-layout";
39
- import { Popover, Tooltip, Group, Text, ActionIcon, TextInput, Box, LoadingOverlay, Table, Select, Button, useMantineTheme, ColorSwatch, SegmentedControl, NumberInput, Switch, Slider, ColorInput, Accordion, JsonInput, Modal, AppShell, Tabs, Menu, Divider, Container, Textarea } from "@mantine/core";
39
+ import { Popover, Tooltip, Group, Text, ActionIcon, Box, Button, TextInput, LoadingOverlay, Table, Select, useMantineTheme, ColorSwatch, SegmentedControl, NumberInput, Switch, Slider, ColorInput, Accordion, JsonInput, Modal, AppShell, Tabs, Menu, Divider, Container, Textarea } from "@mantine/core";
40
40
  import { useRequest } from "ahooks";
41
41
  import axios from "axios";
42
42
  import { InfoCircle, DeviceFloppy, Refresh, Trash, PlaylistAdd, Settings, Resize, Paint, PlayerPlay, ClipboardText, Database, Recycle, Share } from "tabler-icons-react";
@@ -68,31 +68,32 @@ const initialContext$3 = {
68
68
  inUseMode: true
69
69
  };
70
70
  const LayoutStateContext = React.createContext(initialContext$3);
71
- const getRequest = (method) => {
72
- return (url, data, options = {}) => {
73
- const headers = __spreadValues({
74
- "X-Requested-With": "XMLHttpRequest",
75
- "Content-Type": options.string ? "application/x-www-form-urlencoded" : "application/json"
76
- }, options.headers);
77
- const conf = {
78
- baseURL: "http://localhost:31200",
79
- method,
80
- url,
81
- params: method === "GET" ? data : options.params,
82
- headers
71
+ const APIClient = {
72
+ baseURL: "http://localhost:31200",
73
+ getRequest(method) {
74
+ return (url, data, options = {}) => {
75
+ const headers = __spreadValues({
76
+ "X-Requested-With": "XMLHttpRequest",
77
+ "Content-Type": options.string ? "application/x-www-form-urlencoded" : "application/json"
78
+ }, options.headers);
79
+ const conf = {
80
+ baseURL: this.baseURL,
81
+ method,
82
+ url,
83
+ params: method === "GET" ? data : options.params,
84
+ headers
85
+ };
86
+ if (method === "POST") {
87
+ conf.data = options.string ? JSON.stringify(data) : data;
88
+ }
89
+ return axios(conf).then((res) => {
90
+ return res.data;
91
+ }).catch((err) => {
92
+ return Promise.reject(err);
93
+ });
83
94
  };
84
- if (method === "POST") {
85
- conf.data = options.string ? JSON.stringify(data) : data;
86
- }
87
- return axios(conf).then((res) => {
88
- return res.data;
89
- }).catch((err) => {
90
- return Promise.reject(err);
91
- });
92
- };
95
+ }
93
96
  };
94
- const get = getRequest("GET");
95
- const post = getRequest("POST");
96
97
  function formatSQL(sql, params) {
97
98
  const names = Object.keys(params);
98
99
  const vals = Object.values(params);
@@ -126,7 +127,7 @@ const queryBySQL = ({ context, definitions, title, dataSource }) => async () =>
126
127
  console.log(formattedSQL);
127
128
  console.groupEnd();
128
129
  }
129
- const res = await post("/query", { type, key, sql: formattedSQL });
130
+ const res = await APIClient.getRequest("POST")("/query", { type, key, sql: formattedSQL });
130
131
  return res;
131
132
  } catch (error) {
132
133
  console.error(error);
@@ -135,7 +136,7 @@ const queryBySQL = ({ context, definitions, title, dataSource }) => async () =>
135
136
  };
136
137
  async function getQuerySources() {
137
138
  try {
138
- const res = await get("/query/sources", {});
139
+ const res = await APIClient.getRequest("GET")("/query/sources", {});
139
140
  return res;
140
141
  } catch (error) {
141
142
  console.error(error);
@@ -312,18 +313,37 @@ class ErrorBoundary extends React.Component {
312
313
  constructor(props) {
313
314
  super(props);
314
315
  this.state = {
315
- hasError: false
316
+ error: null
316
317
  };
317
318
  }
318
- static getDerivedStateFromError() {
319
- return {
320
- hasError: true
321
- };
319
+ componentDidCatch(error) {
320
+ this.setState({
321
+ error
322
+ });
322
323
  }
323
324
  render() {
324
- if (this.state.hasError) {
325
- return /* @__PURE__ */ jsx("h1", {
326
- children: "Something went wrong."
325
+ var _a;
326
+ if (this.state.error) {
327
+ const retry = () => {
328
+ this.setState({
329
+ error: null
330
+ });
331
+ };
332
+ return /* @__PURE__ */ jsxs(Box, {
333
+ children: [/* @__PURE__ */ jsx(Text, {
334
+ size: "xs",
335
+ children: (_a = this.state.error) == null ? void 0 : _a.message
336
+ }), /* @__PURE__ */ jsx(Button, {
337
+ variant: "subtle",
338
+ size: "xs",
339
+ mx: "auto",
340
+ compact: true,
341
+ sx: {
342
+ display: "block"
343
+ },
344
+ onClick: retry,
345
+ children: "Retry"
346
+ })]
327
347
  });
328
348
  }
329
349
  return this.props.children;
@@ -943,7 +963,7 @@ function VizTable({
943
963
  })]
944
964
  }));
945
965
  }
946
- function interpolateString$1(template, params = {}) {
966
+ function interpolateString(template, params = {}) {
947
967
  const extendedParams = __spreadProps(__spreadValues({}, params), {
948
968
  numbro
949
969
  });
@@ -974,7 +994,7 @@ function VizText({
974
994
  sx: {
975
995
  fontSize: size
976
996
  },
977
- children: interpolateString$1(template, data[0])
997
+ children: interpolateString(template, data[0])
978
998
  }), `${template}---${index2}`);
979
999
  })
980
1000
  });
@@ -1499,18 +1519,6 @@ class InterpolateColor {
1499
1519
  return this.mapper(value);
1500
1520
  }
1501
1521
  }
1502
- function interpolateString(template, params = {}) {
1503
- const extendedParams = __spreadProps(__spreadValues({}, params), {
1504
- numbro
1505
- });
1506
- const names = Object.keys(extendedParams);
1507
- const vals = Object.values(extendedParams);
1508
- try {
1509
- return new Function(...names, `return \`${template}\`;`)(...vals);
1510
- } catch (error) {
1511
- return error.message;
1512
- }
1513
- }
1514
1522
  function getColorByColorConf(conf, dataRow) {
1515
1523
  if (conf.type === "static") {
1516
1524
  return conf.staticColor;
@@ -1526,11 +1534,11 @@ function VizStats(_a) {
1526
1534
  var _b = _a, {
1527
1535
  conf: _c
1528
1536
  } = _b, _d = _c, {
1529
- template,
1537
+ content,
1530
1538
  size,
1531
1539
  color: color2
1532
1540
  } = _d, rest = __objRest(_d, [
1533
- "template",
1541
+ "content",
1534
1542
  "size",
1535
1543
  "color"
1536
1544
  ]), {
@@ -1539,12 +1547,24 @@ function VizStats(_a) {
1539
1547
  const finalColor = React.useMemo(() => {
1540
1548
  return getColorByColorConf(color2, data[0]);
1541
1549
  }, [color2, data]);
1550
+ const finalContent = React.useMemo(() => {
1551
+ var _a2;
1552
+ const {
1553
+ prefix,
1554
+ postfix,
1555
+ data_field,
1556
+ formatter
1557
+ } = content;
1558
+ const contentData = (_a2 = data == null ? void 0 : data[0]) == null ? void 0 : _a2[data_field];
1559
+ const contents = [prefix, numbro(contentData).format(formatter), postfix];
1560
+ return contents.join(" ");
1561
+ }, [content, data]);
1542
1562
  return /* @__PURE__ */ jsx(Text, __spreadProps(__spreadValues({}, rest), {
1543
1563
  color: finalColor,
1544
1564
  sx: {
1545
1565
  fontSize: size
1546
1566
  },
1547
- children: interpolateString(template, data[0])
1567
+ children: finalContent
1548
1568
  }));
1549
1569
  }
1550
1570
  function renderViz(width, height, data, viz) {
@@ -1602,7 +1622,9 @@ function Viz({
1602
1622
  color: "gray",
1603
1623
  align: "center",
1604
1624
  children: "nothing to show"
1605
- }), !empty && renderViz(width, height, data, viz)]
1625
+ }), !empty && /* @__PURE__ */ jsx(ErrorBoundary, {
1626
+ children: renderViz(width, height, data, viz)
1627
+ })]
1606
1628
  });
1607
1629
  }
1608
1630
  function PreviewViz({}) {
@@ -1611,12 +1633,10 @@ function PreviewViz({}) {
1611
1633
  loading,
1612
1634
  viz
1613
1635
  } = React.useContext(PanelContext);
1614
- return /* @__PURE__ */ jsx(ErrorBoundary, {
1615
- children: /* @__PURE__ */ jsx(Viz, {
1616
- viz,
1617
- data,
1618
- loading
1619
- })
1636
+ return /* @__PURE__ */ jsx(Viz, {
1637
+ viz,
1638
+ data,
1639
+ loading
1620
1640
  });
1621
1641
  }
1622
1642
  function VizBar3DPanel({
@@ -1783,10 +1803,10 @@ function VizBar3DPanel({
1783
1803
  })
1784
1804
  });
1785
1805
  }
1786
- function MantineColorSelector({
1806
+ function _MantineColorSelector({
1787
1807
  value,
1788
1808
  onChange
1789
- }) {
1809
+ }, ref) {
1790
1810
  const theme = useMantineTheme();
1791
1811
  const themeColors = React.useMemo(() => {
1792
1812
  return Object.entries(theme.colors).map(([color2, profile]) => ({
@@ -1835,6 +1855,7 @@ function MantineColorSelector({
1835
1855
  })]
1836
1856
  });
1837
1857
  }
1858
+ const MantineColorSelector = React.forwardRef(_MantineColorSelector);
1838
1859
  const labelPositions = [{
1839
1860
  label: "off",
1840
1861
  value: ""
@@ -2112,10 +2133,10 @@ const defaultNumbroFormat = {
2112
2133
  mantissa: 0,
2113
2134
  output: "number"
2114
2135
  };
2115
- function NumbroFormatSelector({
2136
+ function _NumbroFormatSelector({
2116
2137
  value,
2117
2138
  onChange
2118
- }) {
2139
+ }, ref) {
2119
2140
  const changeOutput = (output) => {
2120
2141
  onChange(__spreadProps(__spreadValues({}, value), {
2121
2142
  output
@@ -2137,6 +2158,7 @@ function NumbroFormatSelector({
2137
2158
  direction: "column",
2138
2159
  grow: true,
2139
2160
  noWrap: true,
2161
+ ref,
2140
2162
  children: /* @__PURE__ */ jsxs(Group, {
2141
2163
  direction: "row",
2142
2164
  grow: true,
@@ -2168,6 +2190,7 @@ function NumbroFormatSelector({
2168
2190
  })
2169
2191
  });
2170
2192
  }
2193
+ const NumbroFormatSelector = React.forwardRef(_NumbroFormatSelector);
2171
2194
  function YAxisField({
2172
2195
  control,
2173
2196
  index: index2,
@@ -2480,11 +2503,11 @@ const marks = [{
2480
2503
  label: "bold",
2481
2504
  value: 100
2482
2505
  }];
2483
- function MantineFontWeightSlider({
2506
+ function _MantineFontWeightSlider({
2484
2507
  label,
2485
2508
  value,
2486
2509
  onChange
2487
- }) {
2510
+ }, ref) {
2488
2511
  var _a, _b;
2489
2512
  const [mark, setMark] = React.useState((_b = (_a = marks.find((m2) => m2.label === value)) == null ? void 0 : _a.value) != null ? _b : marks[0].value);
2490
2513
  React.useEffect(() => {
@@ -2506,15 +2529,17 @@ function MantineFontWeightSlider({
2506
2529
  value: mark,
2507
2530
  onChange: setMark,
2508
2531
  step: 25,
2509
- placeholder: "Pick a font size"
2532
+ placeholder: "Pick a font size",
2533
+ ref
2510
2534
  })]
2511
2535
  });
2512
2536
  }
2513
- function TextArrayInput({
2537
+ const MantineFontWeightSlider = React.forwardRef(_MantineFontWeightSlider);
2538
+ function _TextArrayInput({
2514
2539
  label,
2515
2540
  value,
2516
2541
  onChange
2517
- }) {
2542
+ }, ref) {
2518
2543
  const [values, setValues] = React.useState(Array.isArray(value) ? [...value] : []);
2519
2544
  const add = React.useCallback(() => {
2520
2545
  setValues((s) => [...s, ""]);
@@ -2534,6 +2559,7 @@ function TextArrayInput({
2534
2559
  return /* @__PURE__ */ jsxs(Fragment, {
2535
2560
  children: [/* @__PURE__ */ jsxs(Group, {
2536
2561
  position: "left",
2562
+ ref,
2537
2563
  children: [/* @__PURE__ */ jsx(Text, {
2538
2564
  children: label
2539
2565
  }), /* @__PURE__ */ jsx(ActionIcon, {
@@ -2577,11 +2603,12 @@ function TextArrayInput({
2577
2603
  })]
2578
2604
  });
2579
2605
  }
2580
- function ColorArrayInput({
2606
+ const TextArrayInput = React.forwardRef(_TextArrayInput);
2607
+ function _ColorArrayInput({
2581
2608
  label,
2582
2609
  value,
2583
2610
  onChange
2584
- }) {
2611
+ }, ref) {
2585
2612
  const [values, setValues] = React.useState(Array.isArray(value) ? [...value] : []);
2586
2613
  const add = React.useCallback(() => {
2587
2614
  setValues((s) => [...s, ""]);
@@ -2605,6 +2632,7 @@ function ColorArrayInput({
2605
2632
  return /* @__PURE__ */ jsxs(Fragment, {
2606
2633
  children: [/* @__PURE__ */ jsxs(Group, {
2607
2634
  position: "left",
2635
+ ref,
2608
2636
  children: [/* @__PURE__ */ jsx(Text, {
2609
2637
  children: label
2610
2638
  }), /* @__PURE__ */ jsx(ActionIcon, {
@@ -2648,6 +2676,7 @@ function ColorArrayInput({
2648
2676
  })]
2649
2677
  });
2650
2678
  }
2679
+ const ColorArrayInput = React.forwardRef(_ColorArrayInput);
2651
2680
  function VizStatsPanel({
2652
2681
  conf,
2653
2682
  setConf
@@ -2655,11 +2684,19 @@ function VizStatsPanel({
2655
2684
  const defaultValues = _.merge({}, {
2656
2685
  align: "center",
2657
2686
  size: "100px",
2658
- template: "",
2659
2687
  weight: "bold",
2660
2688
  color: {
2661
2689
  type: "static",
2662
2690
  staticColor: "red"
2691
+ },
2692
+ content: {
2693
+ prefix: "",
2694
+ data_field: "",
2695
+ formatter: {
2696
+ output: "number",
2697
+ mantissa: 0
2698
+ },
2699
+ postfix: ""
2663
2700
  }
2664
2701
  }, conf);
2665
2702
  const {
@@ -2712,23 +2749,54 @@ function VizStatsPanel({
2712
2749
  },
2713
2750
  children: [/* @__PURE__ */ jsx(Accordion.Item, {
2714
2751
  label: "Content",
2715
- children: /* @__PURE__ */ jsx(Group, {
2752
+ children: /* @__PURE__ */ jsxs(Group, {
2716
2753
  direction: "column",
2717
2754
  grow: true,
2718
- children: /* @__PURE__ */ jsx(Controller, {
2719
- name: "template",
2755
+ children: [/* @__PURE__ */ jsxs(Group, {
2756
+ direction: "row",
2757
+ grow: true,
2758
+ children: [/* @__PURE__ */ jsx(Controller, {
2759
+ name: "content.prefix",
2760
+ control,
2761
+ render: ({
2762
+ field
2763
+ }) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
2764
+ label: "Prefix",
2765
+ sx: {
2766
+ flexGrow: 1
2767
+ }
2768
+ }, field))
2769
+ }), /* @__PURE__ */ jsx(Controller, {
2770
+ name: "content.data_field",
2771
+ control,
2772
+ render: ({
2773
+ field
2774
+ }) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
2775
+ label: "Data Field",
2776
+ required: true,
2777
+ sx: {
2778
+ flexGrow: 1
2779
+ }
2780
+ }, field))
2781
+ }), /* @__PURE__ */ jsx(Controller, {
2782
+ name: "content.postfix",
2783
+ control,
2784
+ render: ({
2785
+ field
2786
+ }) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
2787
+ label: "Postfix",
2788
+ sx: {
2789
+ flexGrow: 1
2790
+ }
2791
+ }, field))
2792
+ })]
2793
+ }), /* @__PURE__ */ jsx(Controller, {
2794
+ name: "content.formatter",
2720
2795
  control,
2721
2796
  render: ({
2722
2797
  field
2723
- }) => /* @__PURE__ */ jsx(TextInput, __spreadValues({
2724
- placeholder: "Time: ${new Date().toISOString()}",
2725
- label: "Content Template",
2726
- required: true,
2727
- sx: {
2728
- flex: 1
2729
- }
2730
- }, field))
2731
- })
2798
+ }) => /* @__PURE__ */ jsx(NumbroFormatSelector, __spreadValues({}, field))
2799
+ })]
2732
2800
  })
2733
2801
  }), /* @__PURE__ */ jsxs(Accordion.Item, {
2734
2802
  label: "Font",
@@ -3566,12 +3634,10 @@ function Panel({
3566
3634
  },
3567
3635
  children: /* @__PURE__ */ jsxs(Container, {
3568
3636
  className: "panel-root",
3569
- children: [/* @__PURE__ */ jsx(PanelTitleBar, {}), /* @__PURE__ */ jsx(ErrorBoundary, {
3570
- children: /* @__PURE__ */ jsx(Viz, {
3571
- viz,
3572
- data,
3573
- loading
3574
- })
3637
+ children: [/* @__PURE__ */ jsx(PanelTitleBar, {}), /* @__PURE__ */ jsx(Viz, {
3638
+ viz,
3639
+ data,
3640
+ loading
3575
3641
  })]
3576
3642
  })
3577
3643
  });
@@ -4377,8 +4443,12 @@ function Dashboard({
4377
4443
  context,
4378
4444
  dashboard,
4379
4445
  update,
4380
- className = "dashboard"
4446
+ className = "dashboard",
4447
+ config
4381
4448
  }) {
4449
+ if (APIClient.baseURL !== config.apiBaseURL) {
4450
+ APIClient.baseURL = config.apiBaseURL;
4451
+ }
4382
4452
  const [layoutFrozen, freezeLayout] = React.useState(false);
4383
4453
  const [breakpoint, setBreakpoint] = React.useState();
4384
4454
  const [localCols, setLocalCols] = React.useState();
@@ -4515,8 +4585,12 @@ function ReadOnlyDashboardLayout({
4515
4585
  function ReadOnlyDashboard({
4516
4586
  context,
4517
4587
  dashboard,
4518
- className = "dashboard"
4588
+ className = "dashboard",
4589
+ config
4519
4590
  }) {
4591
+ if (APIClient.baseURL !== config.apiBaseURL) {
4592
+ APIClient.baseURL = config.apiBaseURL;
4593
+ }
4520
4594
  const definition = React.useMemo(() => __spreadProps(__spreadValues({}, dashboard.definition), {
4521
4595
  setSQLSnippets: () => {
4522
4596
  },
@@ -1,4 +1,4 @@
1
- (function(b,w){typeof exports=="object"&&typeof module!="undefined"?w(exports,require("react"),require("lodash"),require("react-grid-layout"),require("@mantine/core"),require("ahooks"),require("axios"),require("tabler-icons-react"),require("@mantine/rte"),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/rte","@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"],w):(b=typeof globalThis!="undefined"?globalThis:b||self,w(b.dashboard={},b.React,b._,b["react-grid-layout"],b["@mantine/core"],b.ahooks,b.axios,b["tabler-icons-react"],b["@mantine/rte"],b["@mantine/hooks"],b["echarts-for-react/lib/core"],b["echarts/core"],b["echarts/charts"],b["echarts/renderers"],b["echarts/components"],b.numbro,b["echarts-gl"],b["react-hook-form"],b["@mantine/form"],b["@mantine/prism"]))})(this,function(b,w,G,P,r,pe,dt,S,De,E,ct,pt,ee,te,W,ft,cr,v,q,B){"use strict";var sr=Object.defineProperty,ur=Object.defineProperties;var dr=Object.getOwnPropertyDescriptors;var ce=Object.getOwnPropertySymbols;var at=Object.prototype.hasOwnProperty,st=Object.prototype.propertyIsEnumerable;var Ie=(b,w,G)=>w in b?sr(b,w,{enumerable:!0,configurable:!0,writable:!0,value:G}):b[w]=G,f=(b,w)=>{for(var G in w||(w={}))at.call(w,G)&&Ie(b,G,w[G]);if(ce)for(var G of ce(w))st.call(w,G)&&Ie(b,G,w[G]);return b},_=(b,w)=>ur(b,dr(w));var D=(b,w)=>{var G={};for(var P in b)at.call(b,P)&&w.indexOf(P)<0&&(G[P]=b[P]);if(b!=null&&ce)for(var P of ce(b))w.indexOf(P)<0&&st.call(b,P)&&(G[P]=b[P]);return G};var ut=(b,w,G)=>(Ie(b,typeof w!="symbol"?w+"":w,G),G);function J(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}function mt(e){if(e&&e.__esModule)return e;var n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});return e&&Object.keys(e).forEach(function(i){if(i!=="default"){var o=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(n,i,o.get?o:{enumerable:!0,get:function(){return e[i]}})}}),n.default=e,Object.freeze(n)}var d=J(w),I=J(G),ht=J(dt),xt=J(De),ne=J(ct),V=mt(pt),Y=J(ft),M=(e=>(e.Use="use",e.Layout="layout",e.Edit="edit",e))(M||{});const gt={layoutFrozen:!1,freezeLayout:()=>{},mode:M.Edit,inEditMode:!1,inLayoutMode:!1,inUseMode:!0},$=d.default.createContext(gt),Pe=e=>(n,i,o={})=>{const l=f({"X-Requested-With":"XMLHttpRequest","Content-Type":o.string?"application/x-www-form-urlencoded":"application/json"},o.headers),s={baseURL:"http://localhost:31200",method:e,url:n,params:e==="GET"?i:o.params,headers:l};return e==="POST"&&(s.data=o.string?JSON.stringify(i):i),ht.default(s).then(a=>a.data).catch(a=>Promise.reject(a))},bt=Pe("GET"),yt=Pe("POST");function Ae(e,n){const i=Object.keys(n),o=Object.values(n);try{return new Function(...i,`return \`${e}\`;`)(...o)}catch(l){throw i.length===0&&e.includes("$")?new Error("[formatSQL] insufficient params"):l}}function St(e,n){const i=n.sqlSnippets.reduce((o,l)=>(o[l.key]=Ae(l.value,e),o),{});return I.default.merge({},i,e)}const Le=({context:e,definitions:n,title:i,dataSource:o})=>async()=>{if(!o||!o.sql)return[];const{type:l,key:s,sql:a}=o,u=a.includes("$");try{const c=St(e,n),h=Ae(a,c);return u&&(console.groupCollapsed(`Final SQL for: ${i}`),console.log(h),console.groupEnd()),await yt("/query",{type:l,key:s,sql:h})}catch(c){return console.error(c),[]}};async function Ct(){try{return await bt("/query/sources",{})}catch(e){return console.error(e),{}}}const Me={},vt=Me,Q=d.default.createContext(Me),wt={data:[],loading:!1,title:"",setTitle:()=>{},description:"",setDescription:()=>{},dataSourceID:"",setDataSourceID:()=>{},viz:{type:"",conf:{}},setViz:()=>{},refreshData:()=>{}},O=d.default.createContext(wt),Tt={sqlSnippets:[],setSQLSnippets:()=>{},dataSources:[],setDataSources:()=>{}},k=d.default.createContext(Tt);var re={exports:{}},ie={};/**
1
+ (function(y,T){typeof exports=="object"&&typeof module!="undefined"?T(exports,require("react"),require("lodash"),require("react-grid-layout"),require("@mantine/core"),require("ahooks"),require("axios"),require("tabler-icons-react"),require("@mantine/rte"),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/rte","@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"],T):(y=typeof globalThis!="undefined"?globalThis:y||self,T(y.dashboard={},y.React,y._,y["react-grid-layout"],y["@mantine/core"],y.ahooks,y.axios,y["tabler-icons-react"],y["@mantine/rte"],y["@mantine/hooks"],y["echarts-for-react/lib/core"],y["echarts/core"],y["echarts/charts"],y["echarts/renderers"],y["echarts/components"],y.numbro,y["echarts-gl"],y["react-hook-form"],y["@mantine/form"],y["@mantine/prism"]))})(this,function(y,T,G,L,r,fe,ct,S,De,E,pt,ft,te,ne,W,mt,mr,v,q,B){"use strict";var cr=Object.defineProperty,pr=Object.defineProperties;var fr=Object.getOwnPropertyDescriptors;var pe=Object.getOwnPropertySymbols;var st=Object.prototype.hasOwnProperty,ut=Object.prototype.propertyIsEnumerable;var Ie=(y,T,G)=>T in y?cr(y,T,{enumerable:!0,configurable:!0,writable:!0,value:G}):y[T]=G,f=(y,T)=>{for(var G in T||(T={}))st.call(T,G)&&Ie(y,G,T[G]);if(pe)for(var G of pe(T))ut.call(T,G)&&Ie(y,G,T[G]);return y},I=(y,T)=>pr(y,fr(T));var P=(y,T)=>{var G={};for(var L in y)st.call(y,L)&&T.indexOf(L)<0&&(G[L]=y[L]);if(y!=null&&pe)for(var L of pe(y))T.indexOf(L)<0&&ut.call(y,L)&&(G[L]=y[L]);return G};var dt=(y,T,G)=>(Ie(y,typeof T!="symbol"?T+"":T,G),G);function J(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}function ht(e){if(e&&e.__esModule)return e;var n=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});return e&&Object.keys(e).forEach(function(i){if(i!=="default"){var o=Object.getOwnPropertyDescriptor(e,i);Object.defineProperty(n,i,o.get?o:{enumerable:!0,get:function(){return e[i]}})}}),n.default=e,Object.freeze(n)}var c=J(T),z=J(G),xt=J(ct),gt=J(De),re=J(pt),F=ht(ft),K=J(mt),M=(e=>(e.Use="use",e.Layout="layout",e.Edit="edit",e))(M||{});const bt={layoutFrozen:!1,freezeLayout:()=>{},mode:M.Edit,inEditMode:!1,inLayoutMode:!1,inUseMode:!0},R=c.default.createContext(bt),Y={baseURL:"http://localhost:31200",getRequest(e){return(n,i,o={})=>{const l=f({"X-Requested-With":"XMLHttpRequest","Content-Type":o.string?"application/x-www-form-urlencoded":"application/json"},o.headers),s={baseURL:this.baseURL,method:e,url:n,params:e==="GET"?i:o.params,headers:l};return e==="POST"&&(s.data=o.string?JSON.stringify(i):i),xt.default(s).then(a=>a.data).catch(a=>Promise.reject(a))}}};function Pe(e,n){const i=Object.keys(n),o=Object.values(n);try{return new Function(...i,`return \`${e}\`;`)(...o)}catch(l){throw i.length===0&&e.includes("$")?new Error("[formatSQL] insufficient params"):l}}function yt(e,n){const i=n.sqlSnippets.reduce((o,l)=>(o[l.key]=Pe(l.value,e),o),{});return z.default.merge({},i,e)}const Le=({context:e,definitions:n,title:i,dataSource:o})=>async()=>{if(!o||!o.sql)return[];const{type:l,key:s,sql:a}=o,u=a.includes("$");try{const d=yt(e,n),x=Pe(a,d);return u&&(console.groupCollapsed(`Final SQL for: ${i}`),console.log(x),console.groupEnd()),await Y.getRequest("POST")("/query",{type:l,key:s,sql:x})}catch(d){return console.error(d),[]}};async function St(){try{return await Y.getRequest("GET")("/query/sources",{})}catch(e){return console.error(e),{}}}const Ae={},Ct=Ae,Q=c.default.createContext(Ae),vt={data:[],loading:!1,title:"",setTitle:()=>{},description:"",setDescription:()=>{},dataSourceID:"",setDataSourceID:()=>{},viz:{type:"",conf:{}},setViz:()=>{},refreshData:()=>{}},O=c.default.createContext(vt),wt={sqlSnippets:[],setSQLSnippets:()=>{},dataSources:[],setDataSources:()=>{}},k=c.default.createContext(wt);var ie={exports:{}},oe={};/**
2
2
  * @license React
3
3
  * react-jsx-runtime.production.min.js
4
4
  *
@@ -6,8 +6,8 @@
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 Gt=d.default,zt=Symbol.for("react.element"),_t=Symbol.for("react.fragment"),It=Object.prototype.hasOwnProperty,Dt=Gt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Pt={key:!0,ref:!0,__self:!0,__source:!0};function Oe(e,n,i){var o,l={},s=null,a=null;i!==void 0&&(s=""+i),n.key!==void 0&&(s=""+n.key),n.ref!==void 0&&(a=n.ref);for(o in n)It.call(n,o)&&!Pt.hasOwnProperty(o)&&(l[o]=n[o]);if(e&&e.defaultProps)for(o in n=e.defaultProps,n)l[o]===void 0&&(l[o]=n[o]);return{$$typeof:zt,type:e,key:s,ref:a,props:l,_owner:Dt.current}}ie.Fragment=_t,ie.jsx=Oe,ie.jsxs=Oe,re.exports=ie;const t=re.exports.jsx,p=re.exports.jsxs,K=re.exports.Fragment;function ke({position:e,trigger:n="click"}){const{freezeLayout:i}=d.default.useContext($),[o,l]=d.default.useState(!1),{description:s}=d.default.useContext(O);if(d.default.useEffect(()=>{i(o)},[o]),!s||s==="<p><br></p>")return null;const a=n==="click"?t(r.Tooltip,{label:"Click to see description",openDelay:500,children:t(S.InfoCircle,{size:20,onClick:()=>l(u=>!u),style:{verticalAlign:"baseline",cursor:"pointer"}})}):t(S.InfoCircle,{size:20,onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),style:{verticalAlign:"baseline",cursor:"pointer"}});return t(r.Popover,{opened:o,onClose:()=>l(!1),withCloseButton:!0,withArrow:!0,trapFocus:!0,closeOnEscape:!1,placement:"center",position:e,target:a,children:t(xt.default,{readOnly:!0,value:s,onChange:I.default.noop,sx:{border:"none"}})})}function At(){const{description:e,setDescription:n}=d.default.useContext(O),[i,o]=d.default.useState(e),l=e!==i,s=d.default.useCallback(()=>{!l||n(i)},[l,i]);return p(r.Group,{direction:"column",sx:{flexGrow:1},children:[p(r.Group,{align:"end",children:[t(r.Text,{children:"Description"}),t(r.ActionIcon,{variant:"hover",color:"blue",disabled:!l,onClick:s,children:t(S.DeviceFloppy,{size:20})})]}),t(De.RichTextEditor,{value:i,onChange:o,sx:{flexGrow:1},sticky:!0,p:"0"})]})}class fe extends d.default.Component{constructor(n){super(n),this.state={hasError:!1}}static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?t("h1",{children:"Something went wrong."}):this.props.children}}function Lt(){const{title:e}=d.default.useContext(O);return t(fe,{children:p(r.Group,{direction:"column",grow:!0,noWrap:!0,mx:"auto",mt:"xl",p:"5px",spacing:"xs",sx:{width:"600px",height:"450px",background:"transparent",borderRadius:"5px",boxShadow:"0px 0px 10px 0px rgba(0,0,0,.2)"},children:[p(r.Group,{position:"apart",noWrap:!0,sx:{borderBottom:"1px solid #eee",paddingBottom:"5px",flexGrow:0,flexShrink:0},children:[t(r.Group,{children:t(ke,{position:"bottom",trigger:"hover"})}),t(r.Group,{grow:!0,position:"center",children:t(r.Text,{lineClamp:1,weight:"bold",children:e})}),t(r.Group,{position:"right",spacing:0,sx:{height:"28px"}})]}),t(r.Group,{sx:{background:"#eee",flexGrow:1}})]})})}function Mt(){const{title:e,setTitle:n}=d.default.useContext(O),[i,o]=E.useInputState(e),l=e!==i,s=d.default.useCallback(()=>{!l||n(i)},[l,i]);return t(r.TextInput,{value:i,onChange:o,label:p(r.Group,{align:"end",children:[t(r.Text,{children:"Panel Title"}),t(r.ActionIcon,{variant:"hover",color:"blue",disabled:!l,onClick:s,children:t(S.DeviceFloppy,{size:20})})]})})}function Ot({}){return p(r.Group,{direction:"row",grow:!0,noWrap:!0,align:"stretch",sx:{height:"100%"},children:[p(r.Group,{grow:!0,direction:"column",sx:{width:"40%",flexShrink:0,flexGrow:0,height:"100%"},children:[t(Mt,{}),t(At,{})]}),t(r.Box,{sx:{height:"100%",flexGrow:1,maxWidth:"60%"},children:t(Lt,{})})]})}function Ee({id:e}){const n=d.default.useContext(k),i=d.default.useContext(Q),o=d.default.useMemo(()=>n.dataSources.find(u=>u.id===e),[n.dataSources,e]),{data:l=[],loading:s,refresh:a}=pe.useRequest(Le({context:i,definitions:n,title:e,dataSource:o}),{refreshDeps:[i,n,o]});return s?t(r.LoadingOverlay,{visible:s,exitTransitionDuration:0}):l.length===0?t(r.Table,{}):p(r.Group,{my:"xl",direction:"column",grow:!0,sx:{border:"1px solid #eee"},children:[p(r.Group,{position:"apart",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[p(r.Group,{position:"left",children:[t(r.Text,{weight:500,children:"Preview Data"}),l.length>10&&p(r.Text,{size:"sm",color:"gray",children:["Showing 10 rows of ",l.length]})]}),t(r.ActionIcon,{mr:15,variant:"hover",color:"blue",disabled:s,onClick:a,children:t(S.Refresh,{size:15})})]}),p(r.Table,{children:[t("thead",{children:t("tr",{children:Object.keys(l==null?void 0:l[0]).map(u=>t("th",{children:t(r.Text,{weight:700,color:"#000",children:u})},u))})}),t("tbody",{children:l.slice(0,10).map((u,c)=>t("tr",{children:Object.values(u).map((h,m)=>t("td",{children:t(r.Group,{sx:{"&, .mantine-Text-root":{fontFamily:"monospace"}},children:t(r.Text,{children:h})})},`${h}--${m}`))},`row-${c}`))})]})]})}function kt({}){const{dataSources:e}=d.default.useContext(k),{dataSourceID:n,setDataSourceID:i,data:o,loading:l}=d.default.useContext(O),s=d.default.useMemo(()=>e.map(a=>({value:a.id,label:a.id})),[e]);return p(r.Group,{direction:"column",grow:!0,noWrap:!0,children:[p(r.Group,{position:"left",sx:{maxWidth:"600px",alignItems:"baseline"},children:[t(r.Text,{children:"Select a Data Source"}),t(r.Select,{data:s,value:n,onChange:i,allowDeselect:!1,clearable:!1,sx:{flexGrow:1}})]}),t(Ee,{id:n})]})}V.use([ee.SunburstChart,te.CanvasRenderer]);const Et={tooltip:{show:!0},series:{type:"sunburst",radius:[0,"90%"],emphasis:{focus:"ancestor"}}};function qt({conf:e,data:n,width:i,height:o}){const x=e,{label_field:l="name",value_field:s="value"}=x,a=D(x,["label_field","value_field"]),u=d.default.useMemo(()=>n.map(g=>({name:g[l],value:Number(g[s])})),[n,l,s]),c=d.default.useMemo(()=>{var g,y;return(y=(g=I.default.maxBy(u,C=>C.value))==null?void 0:g.value)!=null?y:1},[u]),h=d.default.useMemo(()=>({series:{label:{formatter:({name:g,value:y})=>y/c<.2?" ":g}}}),[c]),m=I.default.merge({},Et,h,a,{series:{data:u}});return t(ne.default,{echarts:V,option:m,style:{width:i,height:o}})}V.use([ee.BarChart,ee.LineChart,W.GridComponent,W.LegendComponent,W.TooltipComponent,te.CanvasRenderer]);const $t={legend:{show:!0,bottom:0,left:0},tooltip:{trigger:"axis"},xAxis:{type:"category",nameGap:25,nameLocation:"center",nameTextStyle:{fontWeight:"bold"}},grid:{top:30,left:15,right:15,bottom:30,containLabel:!0}};function Ft({conf:e,data:n,width:i,height:o}){const l=d.default.useMemo(()=>{var h;const s=e.y_axes.reduce((m,{label_formatter:x},g)=>(m[g]=function(C){const T=typeof C=="object"?C.value:C;if(!x)return T;try{return Y.default(T).format(x)}catch(z){return console.error(z),T}},m),{default:({value:m})=>m}),a=e.series.reduce((m,{yAxisIndex:x,name:g})=>(m[g]=x,m),{}),u=e.series.map(T=>{var z=T,{y_axis_data_key:m,yAxisIndex:x,label_position:g,name:y}=z,C=D(z,["y_axis_data_key","yAxisIndex","label_position","name"]);return f({data:n.map(L=>L[m]),label:{show:!!g,position:g,formatter:s[x!=null?x:"default"]},name:y,yAxisIndex:x},C)}),c={xAxis:{data:n.map(m=>m[e.x_axis_data_key]),name:(h=e.x_axis_name)!=null?h:""},yAxis:e.y_axes.map((y,g)=>{var C=y,{label_formatter:m}=C,x=D(C,["label_formatter"]);var T;return _(f({},x),{axisLabel:{show:!0,formatter:(T=s[g])!=null?T:s.default}})}),dataset:{source:n},series:u,tooltip:{formatter:function(m){const x=Array.isArray(m)?m:[m];if(x.length===0)return"";const g=x.map(({seriesName:y,value:C})=>{var A;if(!y)return C;const T=a[y],z=(A=s[T])!=null?A:s.default;return`${y}: ${z({value:C})}`});return g.unshift(`<strong>${x[0].name}</strong>`),g.join("<br />")}}};return I.default.merge({},$t,c)},[e,n]);return!i||!o?null:t(ne.default,{echarts:V,option:l,style:{width:i,height:o}})}var j=(e=>(e.string="string",e.number="number",e.eloc="eloc",e.percentage="percentage",e))(j||{});function Bt({value:e}){return t(r.Text,{component:"span",children:e})}function Vt({value:e}){return t(r.Text,{component:"span",children:e})}function jt({value:e}){const n=Y.default(e).format({thousandSeparated:!0});return t(r.Text,{component:"span",children:n})}function Nt({value:e}){const n=Y.default(e).format({output:"percent",mantissa:3});return t(r.Text,{component:"span",children:n})}function Rt({value:e,type:n}){switch(n){case j.string:return t(Bt,{value:e});case j.eloc:return t(Vt,{value:e});case j.number:return t(jt,{value:e});case j.percentage:return t(Nt,{value:e})}}function Wt({conf:e,data:n=[],width:i,height:o}){const m=e,{id_field:l,use_raw_columns:s,columns:a}=m,u=D(m,["id_field","use_raw_columns","columns"]),c=d.default.useMemo(()=>s?Object.keys(n==null?void 0:n[0]):a.map(x=>x.label),[s,a,n]),h=d.default.useMemo(()=>s?Object.keys(n==null?void 0:n[0]).map(x=>({label:x,value_field:x,value_type:j.string})):a,[s,a,n]);return p(r.Table,_(f({sx:{maxHeight:o}},u),{children:[t("thead",{children:t("tr",{children:c.map(x=>t("th",{children:x},x))})}),t("tbody",{children:n.slice(0,30).map((x,g)=>t("tr",{children:h.map(({value_field:y,value_type:C})=>t("td",{children:t(r.Group,{sx:{"&, .mantine-Text-root":{fontFamily:"monospace",fontSize:u.fontSize}},children:t(Rt,{value:x[y],type:C})})},`${y}--${x[y]}`))},l?x[l]:`row-${g}`))}),n.length>100&&t("tfoot",{children:t("tr",{children:t("td",{colSpan:c.length,children:t(r.Text,{color:"red",size:"sm",children:"Showing only the first 30 rows to avoid causing slow performance"})})})})]}))}function Qt(e,n={}){const i=_(f({},n),{numbro:Y.default}),o=Object.keys(i),l=Object.values(i);try{return new Function(...o,`return \`${e}\`;`)(...l)}catch(s){return s.message}}function Ut({conf:{paragraphs:e},data:n}){return t(K,{children:e.map((a,s)=>{var u=a,{template:i,size:o}=u,l=D(u,["template","size"]);return t(r.Text,_(f({},l),{sx:{fontSize:o},children:Qt(i,n[0])}),`${i}---${s}`)})})}V.use([W.GridComponent,W.VisualMapComponent,W.LegendComponent,W.TooltipComponent,te.CanvasRenderer]);function Jt({conf:e,data:n,width:i,height:o}){const x=e,{x_axis_data_key:l,y_axis_data_key:s,z_axis_data_key:a}=x,u=D(x,["x_axis_data_key","y_axis_data_key","z_axis_data_key"]),c=d.default.useMemo(()=>I.default.minBy(n,g=>g[a])[a],[n,a]),h=d.default.useMemo(()=>I.default.maxBy(n,g=>g[a])[a],[n,a]),m=_(f({tooltip:{},backgroundColor:"#fff",visualMap:{show:!0,dimension:2,min:c,max:h,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}}}},u),{series:[{type:"bar3D",wireframe:{},data:n.map(g=>[g[l],g[s],g[a]])}]});return t(ne.default,{echarts:V,option:m,style:{width:i,height:o}})}var pr="";V.use([ee.PieChart,te.CanvasRenderer]);const Yt={tooltip:{show:!0},series:{type:"pie",radius:["50%","80%"],label:{position:"outer",alignTo:"edge",formatter:`{name|{b}}
10
- {percentage|{d}%}`,minMargin:5,edgeDistance:10,lineHeight:15,rich:{percentage:{color:"#999"}},margin:20},labelLine:{length:15,length2:0,maxSurfaceAngle:80,showAbove:!0},top:10,bottom:10,left:10,right:10}};function Kt({conf:e,data:n,width:i,height:o}){const m=e,{label_field:l="name",value_field:s="value"}=m,a=D(m,["label_field","value_field"]),u=d.default.useMemo(()=>n.map(x=>({name:x[l],value:Number(x[s])})),[n,l,s]),c=d.default.useMemo(()=>({series:{labelLayout:function(x){const g=x.labelRect.x<i/2,y=x.labelLinePoints;return y[2][0]=g?x.labelRect.x:x.labelRect.x+x.labelRect.width,{labelLinePoints:y}}}}),[i]),h=I.default.merge({},Yt,c,a,{series:{data:u}});return t(ne.default,{echarts:V,option:h,style:{width:i,height:o}})}var qe=function(){};const Xt=(e,n,i)=>Math.min(Math.max(i,e),n),$e=(e,n,i)=>{const o=n-e;return o===0?1:(i-e)/o},me=(e,n,i)=>-i*e+i*n+e,Fe=(e,n)=>i=>Math.max(Math.min(i,n),e),X=e=>e%1?Number(e.toFixed(5)):e,oe=/(-)?([\d]*\.?[\d])+/g,he=/(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))/gi,Zt=/^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))$/i;function Z(e){return typeof e=="string"}const le={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Be=Object.assign(Object.assign({},le),{transform:Fe(0,1)});Object.assign(Object.assign({},le),{default:1});const H=(e=>({test:n=>Z(n)&&n.endsWith(e)&&n.split(" ").length===1,parse:parseFloat,transform:n=>`${n}${e}`}))("%");Object.assign(Object.assign({},H),{parse:e=>H.parse(e)/100,transform:e=>H.transform(e*100)});const xe=(e,n)=>i=>Boolean(Z(i)&&Zt.test(i)&&i.startsWith(e)||n&&Object.prototype.hasOwnProperty.call(i,n)),Ve=(e,n,i)=>o=>{if(!Z(o))return o;const[l,s,a,u]=o.match(oe);return{[e]:parseFloat(l),[n]:parseFloat(s),[i]:parseFloat(a),alpha:u!==void 0?parseFloat(u):1}},U={test:xe("hsl","hue"),parse:Ve("hue","saturation","lightness"),transform:({hue:e,saturation:n,lightness:i,alpha:o=1})=>"hsla("+Math.round(e)+", "+H.transform(X(n))+", "+H.transform(X(i))+", "+X(Be.transform(o))+")"},Ht=Fe(0,255),ge=Object.assign(Object.assign({},le),{transform:e=>Math.round(Ht(e))}),N={test:xe("rgb","red"),parse:Ve("red","green","blue"),transform:({red:e,green:n,blue:i,alpha:o=1})=>"rgba("+ge.transform(e)+", "+ge.transform(n)+", "+ge.transform(i)+", "+X(Be.transform(o))+")"};function en(e){let n="",i="",o="",l="";return e.length>5?(n=e.substr(1,2),i=e.substr(3,2),o=e.substr(5,2),l=e.substr(7,2)):(n=e.substr(1,1),i=e.substr(2,1),o=e.substr(3,1),l=e.substr(4,1),n+=n,i+=i,o+=o,l+=l),{red:parseInt(n,16),green:parseInt(i,16),blue:parseInt(o,16),alpha:l?parseInt(l,16)/255:1}}const be={test:xe("#"),parse:en,transform:N.transform},ae={test:e=>N.test(e)||be.test(e)||U.test(e),parse:e=>N.test(e)?N.parse(e):U.test(e)?U.parse(e):be.parse(e),transform:e=>Z(e)?e:e.hasOwnProperty("red")?N.transform(e):U.transform(e)},je="${c}",Ne="${n}";function tn(e){var n,i,o,l;return isNaN(e)&&Z(e)&&((i=(n=e.match(oe))===null||n===void 0?void 0:n.length)!==null&&i!==void 0?i:0)+((l=(o=e.match(he))===null||o===void 0?void 0:o.length)!==null&&l!==void 0?l:0)>0}function Re(e){typeof e=="number"&&(e=`${e}`);const n=[];let i=0;const o=e.match(he);o&&(i=o.length,e=e.replace(he,je),n.push(...o.map(ae.parse)));const l=e.match(oe);return l&&(e=e.replace(oe,Ne),n.push(...l.map(le.parse))),{values:n,numColors:i,tokenised:e}}function We(e){return Re(e).values}function Qe(e){const{values:n,numColors:i,tokenised:o}=Re(e),l=n.length;return s=>{let a=o;for(let u=0;u<l;u++)a=a.replace(u<i?je:Ne,u<i?ae.transform(s[u]):X(s[u]));return a}}const nn=e=>typeof e=="number"?0:e;function rn(e){const n=We(e);return Qe(e)(n.map(nn))}const Ue={test:tn,parse:We,createTransformer:Qe,getAnimatableNone:rn};function ye(e,n,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+(n-e)*6*i:i<1/2?n:i<2/3?e+(n-e)*(2/3-i)*6:e}function Je({hue:e,saturation:n,lightness:i,alpha:o}){e/=360,n/=100,i/=100;let l=0,s=0,a=0;if(!n)l=s=a=i;else{const u=i<.5?i*(1+n):i+n-i*n,c=2*i-u;l=ye(c,u,e+1/3),s=ye(c,u,e),a=ye(c,u,e-1/3)}return{red:Math.round(l*255),green:Math.round(s*255),blue:Math.round(a*255),alpha:o}}const on=(e,n,i)=>{const o=e*e,l=n*n;return Math.sqrt(Math.max(0,i*(l-o)+o))},ln=[be,N,U],Ye=e=>ln.find(n=>n.test(e)),Ke=(e,n)=>{let i=Ye(e),o=Ye(n),l=i.parse(e),s=o.parse(n);i===U&&(l=Je(l),i=N),o===U&&(s=Je(s),o=N);const a=Object.assign({},l);return u=>{for(const c in a)c!=="alpha"&&(a[c]=on(l[c],s[c],u));return a.alpha=me(l.alpha,s.alpha,u),i.transform(a)}},an=e=>typeof e=="number",sn=(e,n)=>i=>n(e(i)),Xe=(...e)=>e.reduce(sn);function Ze(e,n){return an(e)?i=>me(e,n,i):ae.test(e)?Ke(e,n):tt(e,n)}const He=(e,n)=>{const i=[...e],o=i.length,l=e.map((s,a)=>Ze(s,n[a]));return s=>{for(let a=0;a<o;a++)i[a]=l[a](s);return i}},un=(e,n)=>{const i=Object.assign(Object.assign({},e),n),o={};for(const l in i)e[l]!==void 0&&n[l]!==void 0&&(o[l]=Ze(e[l],n[l]));return l=>{for(const s in o)i[s]=o[s](l);return i}};function et(e){const n=Ue.parse(e),i=n.length;let o=0,l=0,s=0;for(let a=0;a<i;a++)o||typeof n[a]=="number"?o++:n[a].hue!==void 0?s++:l++;return{parsed:n,numNumbers:o,numRGB:l,numHSL:s}}const tt=(e,n)=>{const i=Ue.createTransformer(n),o=et(e),l=et(n);return o.numHSL===l.numHSL&&o.numRGB===l.numRGB&&o.numNumbers>=l.numNumbers?Xe(He(o.parsed,l.parsed),i):a=>`${a>0?n:e}`},dn=(e,n)=>i=>me(e,n,i);function cn(e){if(typeof e=="number")return dn;if(typeof e=="string")return ae.test(e)?Ke:tt;if(Array.isArray(e))return He;if(typeof e=="object")return un}function pn(e,n,i){const o=[],l=i||cn(e[0]),s=e.length-1;for(let a=0;a<s;a++){let u=l(e[a],e[a+1]);if(n){const c=Array.isArray(n)?n[a]:n;u=Xe(c,u)}o.push(u)}return o}function fn([e,n],[i]){return o=>i($e(e,n,o))}function mn(e,n){const i=e.length,o=i-1;return l=>{let s=0,a=!1;if(l<=e[0]?a=!0:l>=e[o]&&(s=o-1,a=!0),!a){let c=1;for(;c<i&&!(e[c]>l||c===o);c++);s=c-1}const u=$e(e[s],e[s+1],l);return n[s](u)}}function hn(e,n,{clamp:i=!0,ease:o,mixer:l}={}){const s=e.length;qe(s===n.length),qe(!o||!Array.isArray(o)||o.length===s-1),e[0]>e[s-1]&&(e=[].concat(e),n=[].concat(n),e.reverse(),n.reverse());const a=pn(n,o,l),u=s===2?fn(e,a):mn(e,a);return i?c=>u(Xt(e[0],e[s-1],c)):u}class xn{constructor({valueRange:n,colorRange:i}){ut(this,"mapper");this.mapper=hn(n,i)}getColor(n){return this.mapper(n)}}function gn(e,n={}){const i=_(f({},n),{numbro:Y.default}),o=Object.keys(i),l=Object.values(i);try{return new Function(...o,`return \`${e}\`;`)(...l)}catch(s){return s.message}}function bn(e,n){if(e.type==="static")return e.staticColor;if(e.type==="continuous"){const i=new xn(e),o=n[e.valueField];return i.getColor(o)}return"black"}function yn(s){var a=s,{conf:u}=a,c=u,{template:e,size:n,color:i}=c,o=D(c,["template","size","color"]),{data:l}=a;const h=d.default.useMemo(()=>bn(i,l[0]),[i,l]);return t(r.Text,_(f({},o),{color:h,sx:{fontSize:n},children:gn(e,l[0])}))}function Sn(e,n,i,o){const l={width:e,height:n,data:i,conf:o.conf};switch(o.type){case"sunburst":return t(qt,f({},l));case"line-bar":case"cartesian":return t(Ft,f({},l));case"table":return t(Wt,f({},l));case"text":return t(Ut,f({},l));case"stats":return t(yn,f({},l));case"bar-3d":return t(Jt,f({},l));case"pie":return t(Kt,f({},l));default:return null}}function nt({viz:e,data:n,loading:i}){const{ref:o,width:l,height:s}=E.useElementSize(),a=d.default.useMemo(()=>!Array.isArray(n)||n.length===0,[n]);return i?t("div",{className:"viz-root",ref:o,children:t(r.LoadingOverlay,{visible:i,exitTransitionDuration:0})}):p("div",{className:"viz-root",ref:o,children:[a&&t(r.Text,{color:"gray",align:"center",children:"nothing to show"}),!a&&Sn(l,s,n,e)]})}function Cn({}){const{data:e,loading:n,viz:i}=d.default.useContext(O);return t(fe,{children:t(nt,{viz:i,data:e,loading:n})})}function vn({conf:e,setConf:n}){const i=I.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"}},e),{control:o,handleSubmit:l,formState:s}=v.useForm({defaultValues:i});return t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:p("form",{onSubmit:l(n),children:[t(r.Text,{children:"X Axis"}),p(r.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[t(v.Controller,{name:"x_axis_data_key",control:o,render:({field:a})=>t(r.TextInput,f({sx:{flexGrow:1},size:"md",label:"Data Key"},a))}),t(v.Controller,{name:"xAxis3D.name",control:o,render:({field:a})=>t(r.TextInput,f({sx:{flexGrow:1},size:"md",label:"Name"},a))})]}),t(r.Text,{mt:"lg",children:"Y Axis"}),p(r.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[t(v.Controller,{name:"y_axis_data_key",control:o,render:({field:a})=>t(r.TextInput,f({sx:{flexGrow:1},size:"md",label:"Data Key"},a))}),t(v.Controller,{name:"yAxis3D.name",control:o,render:({field:a})=>t(r.TextInput,f({sx:{flexGrow:1},size:"md",label:"Name"},a))})]}),t(r.Text,{mt:"lg",children:"Z Axis"}),p(r.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[t(v.Controller,{name:"z_axis_data_key",control:o,render:({field:a})=>t(r.TextInput,f({sx:{flexGrow:1},size:"md",label:"Data Key"},a))}),t(v.Controller,{name:"zAxis3D.name",control:o,render:({field:a})=>t(r.TextInput,f({sx:{flexGrow:1},size:"md",label:"Name"},a))})]}),t(r.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"60%"},mx:"auto",children:p(r.Button,{color:"blue",type:"submit",children:[t(S.DeviceFloppy,{size:20}),t(r.Text,{ml:"md",children:"Save"})]})})]})})}function Se({value:e,onChange:n}){const i=r.useMantineTheme(),o=d.default.useMemo(()=>Object.entries(i.colors).map(([s,a])=>({label:s,value:a[6]})),[i]),l=d.default.useMemo(()=>o.some(s=>s.value===e),[e,o]);return p(r.Group,{position:"apart",spacing:"xs",children:[t(r.TextInput,{placeholder:"Set any color",value:l?"":e,onChange:s=>n(s.currentTarget.value),rightSection:t(r.ColorSwatch,{color:l?"transparent":e,radius:4}),variant:l?"filled":"default",sx:{maxWidth:"100%",flexGrow:1}}),t(r.Text,{sx:{flexGrow:0},children:"or"}),t(r.Select,{data:o,value:e,onChange:n,variant:l?"default":"filled",placeholder:"Pick a theme color",icon:t(r.ColorSwatch,{color:l?e:"transparent",radius:4}),sx:{maxWidth:"100%",flexGrow:1}})]})}const wn=[{label:"off",value:""},{label:"top",value:"top"},{label:"left",value:"left"},{label:"right",value:"right"},{label:"bottom",value:"bottom"},{label:"inside",value:"inside"},{label:"insideLeft",value:"insideLeft"},{label:"insideRight",value:"insideRight"},{label:"insideTop",value:"insideTop"},{label:"insideBottom",value:"insideBottom"},{label:"insideTopLeft",value:"insideTopLeft"},{label:"insideBottomLeft",value:"insideBottomLeft"},{label:"insideTopRight",value:"insideTopRight"},{label:"insideBottomRight",value:"insideBottomRight"}];function Tn({control:e,index:n,remove:i,seriesItem:o,yAxisOptions:l}){const s=o.type;return p(r.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[t(r.Group,{direction:"column",grow:!0,noWrap:!0,children:t(v.Controller,{name:`series.${n}.type`,control:e,render:({field:a})=>t(r.SegmentedControl,f({data:[{label:"Line",value:"line"},{label:"Bar",value:"bar"},{label:"Scatter",value:"scatter",disabled:!0},{label:"Boxplot",value:"boxplot",disabled:!0}]},a))})}),t(v.Controller,{name:`series.${n}.name`,control:e,render:({field:a})=>t(r.TextInput,f({label:"Name",required:!0,sx:{flex:1}},a))}),p(r.Group,{direction:"row",grow:!0,noWrap:!0,children:[t(v.Controller,{name:`series.${n}.y_axis_data_key`,control:e,render:({field:a})=>t(r.TextInput,f({label:"Value key",required:!0,sx:{flex:1}},a))}),t(v.Controller,{name:`series.${n}.yAxisIndex`,control:e,render:h=>{var{field:m}=h,x=m,{value:a,onChange:u}=x,c=D(x,["value","onChange"]);var g;return t(r.Select,_(f({label:"Y Axis",data:l,disabled:l.length===0},c),{value:(g=a==null?void 0:a.toString())!=null?g:"",onChange:y=>{if(!y){u(0);return}u(Number(y))},sx:{flex:1}}))}})]}),s==="bar"&&p(r.Group,{direction:"row",grow:!0,align:"top",children:[t(v.Controller,{name:`series.${n}.stack`,control:e,render:({field:a})=>t(r.TextInput,f({label:"Stack",placeholder:"Stack bars by this ID",sx:{flexGrow:1}},a))}),t(v.Controller,{name:`series.${n}.barWidth`,control:e,render:({field:a})=>t(r.TextInput,f({label:"Bar Width",sx:{flexGrow:1}},a))})]}),t(v.Controller,{name:`series.${n}.label_position`,control:e,render:({field:a})=>t(r.Select,f({label:"Label Position",data:wn},a))}),p(r.Group,{direction:"column",grow:!0,spacing:4,children:[t(r.Text,{size:"sm",children:"Color"}),t(v.Controller,{name:`series.${n}.color`,control:e,render:({field:a})=>t(Se,f({},a))})]}),t(r.ActionIcon,{color:"red",variant:"hover",onClick:()=>i(n),sx:{position:"absolute",top:15,right:5},children:t(S.Trash,{size:16})})]},n)}function Gn({control:e,watch:n,getValues:i}){const{fields:o,append:l,remove:s}=v.useFieldArray({control:e,name:"series"}),a=n("y_axes"),u=o.map((m,x)=>f(f({},m),a[x])),c=()=>l({type:"bar",name:E.randomId(),showSymbol:!1,y_axis_data_key:"value",yAxisIndex:0,label_position:"top",stack:"",color:"#000"}),h=d.default.useMemo(()=>i().y_axes.map(({name:m},x)=>({label:m,value:x.toString()})),[i]);return p(r.Group,{direction:"column",grow:!0,children:[t(r.Text,{mt:"xl",mb:0,children:"Series"}),u.map((m,x)=>t(Tn,{control:e,index:x,remove:s,seriesItem:m,yAxisOptions:h})),t(r.Group,{position:"center",mt:"xs",children:t(r.Button,{onClick:c,children:"Add a Series"})})]})}const rt={mantissa:0,output:"number"};function zn({value:e,onChange:n}){const i=s=>{n(_(f({},e),{output:s}))},o=s=>{const a=s===0?!1:e.trimMantissa;n(_(f({},e),{mantissa:s,trimMantissa:a}))},l=s=>{n(_(f({},e),{trimMantissa:s.currentTarget.checked}))};return t(r.Group,{direction:"column",grow:!0,noWrap:!0,children:p(r.Group,{direction:"row",grow:!0,children:[t(r.Select,{label:"Format",data:[{label:"1234",value:"number"},{label:"99%",value:"percent"}],value:e.output,onChange:i}),t(r.NumberInput,{label:"Mantissa",defaultValue:0,min:0,step:1,max:4,value:e.mantissa,onChange:o}),t(r.Switch,{label:"Trim mantissa",checked:e.trimMantissa,onChange:l,disabled:e.mantissa===0})]})})}function _n({control:e,index:n,remove:i}){return p(r.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[t(r.Group,{direction:"row",grow:!0,noWrap:!0,children:t(v.Controller,{name:`y_axes.${n}.name`,control:e,render:({field:o})=>t(r.TextInput,f({label:"Name",required:!0,sx:{flex:1}},o))})}),t(r.Group,{direction:"column",grow:!0,noWrap:!0,children:t(v.Controller,{name:`y_axes.${n}.label_formatter`,control:e,render:({field:o})=>t(zn,f({},o))})}),t(r.ActionIcon,{color:"red",variant:"hover",onClick:()=>i(n),sx:{position:"absolute",top:15,right:5},disabled:n===0,children:t(S.Trash,{size:16})})]},n)}function In({control:e,watch:n}){const{fields:i,append:o,remove:l}=v.useFieldArray({control:e,name:"y_axes"}),s=n("y_axes"),a=i.map((c,h)=>f(f({},c),s[h])),u=()=>o({name:"",label_formatter:rt});return p(r.Group,{direction:"column",grow:!0,children:[t(r.Text,{mt:"xl",mb:0,children:"Y Axes"}),a.map((c,h)=>t(_n,{control:e,index:h,remove:l})),t(r.Group,{position:"center",mt:"xs",children:t(r.Button,{onClick:u,children:"Add a Y Axis"})})]})}function Dn(e){function n({type:i,name:o,showSymbol:l,y_axis_data_key:s="value",yAxisIndex:a=0,label_position:u="top",stack:c="1",color:h="black",barWidth:m="30"}){return{type:i,name:o,showSymbol:l,y_axis_data_key:s,yAxisIndex:a,label_position:u,stack:c,color:h,barWidth:m}}return e.map(n)}function Pn({conf:e,setConf:n}){const x=e,{series:i,y_axes:o}=x,l=D(x,["series","y_axes"]),s=d.default.useMemo(()=>{const C=l,{x_axis_name:g=""}=C,y=D(C,["x_axis_name"]);return f({series:Dn(i!=null?i:[]),x_axis_name:g,y_axes:o!=null?o:[{name:"Y Axis",label_formatter:rt}]},y)},[i,l]);d.default.useEffect(()=>{!I.default.isEqual(e,s)&&n(s)},[e,s]);const{control:a,handleSubmit:u,watch:c,formState:{isDirty:h},getValues:m}=v.useForm({defaultValues:s});return t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:p("form",{onSubmit:u(n),children:[p(r.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[t(r.Text,{children:"Chart Config"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!h,children:t(S.DeviceFloppy,{size:20})})]}),t(v.Controller,{name:"x_axis_data_key",control:a,render:({field:g})=>t(r.TextInput,f({size:"md",mb:"lg",label:"X Axis Data Key"},g))}),t(r.Group,{direction:"column",grow:!0,noWrap:!0,mb:"lg",children:t(v.Controller,{name:"x_axis_name",control:a,render:({field:g})=>t(r.TextInput,f({size:"md",label:"X Axis Name"},g))})}),t(In,{control:a,watch:c}),t(Gn,{control:a,watch:c,getValues:m})]})})}function An({conf:{label_field:e,value_field:n},setConf:i}){const o=q.useForm({initialValues:{label_field:e,value_field:n}});return t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:p("form",{onSubmit:o.onSubmit(i),children:[p(r.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[t(r.Text,{children:"Pie Config"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[t(r.TextInput,f({label:"Label Field",required:!0,sx:{flex:1}},o.getInputProps("label_field"))),t(r.TextInput,f({label:"Value Field",placeholder:"get column value by this field",required:!0,sx:{flex:1}},o.getInputProps("value_field")))]})]})})}const se=[{label:"initial",value:0},{label:"500",value:25},{label:"700",value:50},{label:"semibold",value:75},{label:"bold",value:100}];function it({label:e,value:n,onChange:i}){var s,a;const[o,l]=d.default.useState((a=(s=se.find(u=>u.label===n))==null?void 0:s.value)!=null?a:se[0].value);return d.default.useEffect(()=>{const u=se.find(c=>c.value===o);u&&i(u.label)},[o]),p(r.Group,{direction:"column",grow:!0,spacing:"xs",mb:"lg",children:[t(r.Text,{children:e}),t(r.Slider,{label:null,marks:se,value:o,onChange:l,step:25,placeholder:"Pick a font size"})]})}function Ln({label:e,value:n,onChange:i}){const[o,l]=d.default.useState(Array.isArray(n)?[...n]:[]),s=d.default.useCallback(()=>{l(h=>[...h,""])},[l]),a=d.default.useCallback(h=>{l(m=>(m.splice(h,1),[...m]))},[l]),u=d.default.useMemo(()=>!I.default.isEqual(o,n),[o,n]),c=()=>{i(o.map(h=>h.toString()))};return p(K,{children:[p(r.Group,{position:"left",children:[t(r.Text,{children:e}),t(r.ActionIcon,{mr:5,variant:"filled",color:"blue",disabled:!u,onClick:c,children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{children:[o.map((h,m)=>t(r.TextInput,{value:h,onChange:x=>{const g=x.currentTarget.value;l(y=>(y.splice(m,1,g),[...y]))},rightSection:t(r.ActionIcon,{onClick:()=>a(m),color:"red",children:t(S.Trash,{size:14})}),sx:{width:"45%"}})),t(r.ActionIcon,{onClick:s,color:"blue",variant:"outline",children:t(S.PlaylistAdd,{size:20})})]})]})}function Mn({label:e,value:n,onChange:i}){const[o,l]=d.default.useState(Array.isArray(n)?[...n]:[]),s=d.default.useCallback(()=>{l(x=>[...x,""])},[l]),a=d.default.useCallback(x=>{l(g=>(g.splice(x,1),[...g]))},[l]),u=d.default.useMemo(()=>!I.default.isEqual(o,n),[o,n]),c=()=>{i(o.map(x=>x.toString()))},h=r.useMantineTheme(),m=d.default.useMemo(()=>Object.entries(h.colors).map(([x,g])=>g[6]),[h]);return p(K,{children:[p(r.Group,{position:"left",children:[t(r.Text,{children:e}),t(r.ActionIcon,{mr:5,variant:"filled",color:"blue",disabled:!u,onClick:c,children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{children:[o.map((x,g)=>t(r.ColorInput,{value:x,onChange:y=>{l(C=>(C.splice(g,1,y),[...C]))},swatches:m,rightSection:t(r.ActionIcon,{onClick:()=>a(g),color:"red",children:t(S.Trash,{size:14})}),sx:{width:"45%"}})),t(r.ActionIcon,{onClick:s,color:"blue",variant:"outline",children:t(S.PlaylistAdd,{size:20})})]})]})}function On({conf:e,setConf:n}){const i=I.default.merge({},{align:"center",size:"100px",template:"",weight:"bold",color:{type:"static",staticColor:"red"}},e),{control:o,handleSubmit:l,watch:s,formState:{isDirty:a}}=v.useForm({defaultValues:i}),u=s("color.type");return s("color.valueField"),t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,noWrap:!0,children:p("form",{onSubmit:l(n),children:[p(r.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[t(r.Text,{weight:500,children:"Stats Configurations"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!a,children:t(S.DeviceFloppy,{size:20})})]}),p(r.Accordion,{offsetIcon:!1,multiple:!0,initialState:{0:!0,2:!0},children:[t(r.Accordion.Item,{label:"Content",children:t(r.Group,{direction:"column",grow:!0,children:t(v.Controller,{name:"template",control:o,render:({field:c})=>t(r.TextInput,f({placeholder:"Time: ${new Date().toISOString()}",label:"Content Template",required:!0,sx:{flex:1}},c))})})}),p(r.Accordion.Item,{label:"Font",children:[t(r.Group,{direction:"column",grow:!0,children:t(v.Controller,{name:"size",control:o,render:({field:c})=>t(r.TextInput,f({label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",sx:{flex:1}},c))})}),t(r.Group,{position:"apart",grow:!0,sx:{"> *":{flexGrow:1,maxWidth:"100%"}},children:t(v.Controller,{name:"weight",control:o,render:({field:c})=>t(it,f({label:"Font Weight"},c))})})]}),t(r.Accordion.Item,{label:"Color",children:p(r.Group,{direction:"column",grow:!0,children:[t(v.Controller,{name:"color.type",control:o,render:({field:c})=>t(r.Select,f({label:"Color Type",data:[{label:"Static Color",value:"static"},{label:"Continuous Color",value:"continuous"}]},c))}),u==="static"&&t(v.Controller,{name:"color.staticColor",control:o,render:({field:c})=>t(Se,f({},c))}),u==="continuous"&&p(K,{children:[t(v.Controller,{name:"color.valueField",control:o,defaultValue:"",render:({field:c})=>t(r.TextInput,f({placeholder:"Calculate color with this field",label:"Value Field",required:!0,sx:{flex:1}},c))}),t(v.Controller,{name:"color.valueRange",control:o,render:({field:c})=>t(Ln,f({label:"Value Range"},c))}),t(v.Controller,{name:"color.colorRange",control:o,render:({field:c})=>t(Mn,f({label:"Color Range"},c))})]})]})})]})]})})}function kn({conf:{label_field:e,value_field:n},setConf:i}){const o=q.useForm({initialValues:{label_field:e,value_field:n}});return t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:p("form",{onSubmit:o.onSubmit(i),children:[p(r.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[t(r.Text,{children:"Sunburst Config"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[t(r.TextInput,f({label:"Label Field",required:!0,sx:{flex:1}},o.getInputProps("label_field"))),t(r.TextInput,f({label:"Value Field",placeholder:"get column value by this field",required:!0,sx:{flex:1}},o.getInputProps("value_field")))]})]})})}const En=Object.values(j).map(e=>({label:e,value:e}));function qn({label:e,value:n,onChange:i,sx:o}){return t(r.Select,{label:e,data:En,value:n,onChange:i,sx:o})}function $n(o){var l=o,{conf:s}=l,a=s,{columns:e}=a,n=D(a,["columns"]),{setConf:i}=l;const u=q.useForm({initialValues:f({id_field:"id",use_raw_columns:!0,columns:q.formList(e!=null?e:[]),fontSize:"sm",horizontalSpacing:"sm",verticalSpacing:"sm",striped:!1,highlightOnHover:!1},n)}),c=()=>u.addListItem("columns",{label:E.randomId(),value_field:"value",value_type:j.string});return t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:p("form",{onSubmit:u.onSubmit(i),children:[p(r.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[t(r.Text,{children:"Table Config"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[t(r.TextInput,f({size:"md",mb:"lg",label:"ID Field"},u.getInputProps("id_field"))),p(r.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:[t(r.TextInput,f({label:"Horizontal Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1}},u.getInputProps("horizontalSpacing"))),t(r.TextInput,f({label:"Vertical Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1}},u.getInputProps("verticalSpacing")))]}),t(r.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:t(r.TextInput,f({label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1}},u.getInputProps("fontSize")))}),p(r.Group,{direction:"column",grow:!0,children:[t(r.Text,{children:"Other"}),p(r.Group,{position:"apart",grow:!0,children:[t(r.Switch,f({label:"Striped"},u.getInputProps("striped",{type:"checkbox"}))),t(r.Switch,f({label:"Highlight on hover"},u.getInputProps("highlightOnHover",{type:"checkbox"})))]})]})]}),p(r.Group,{direction:"column",mt:"xs",spacing:"xs",grow:!0,p:"md",mb:"xl",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[t(r.Switch,f({label:"Use Original Data Columns"},u.getInputProps("use_raw_columns",{type:"checkbox"}))),!u.values.use_raw_columns&&p(r.Group,{direction:"column",grow:!0,children:[t(r.Text,{mt:"xl",mb:0,children:"Custom Columns"}),u.values.columns.map((h,m)=>p(r.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[p(r.Group,{position:"apart",grow:!0,sx:{"> *":{flexGrow:1,maxWidth:"100%"}},children:[t(r.TextInput,f({label:"Label",required:!0,sx:{flex:1}},u.getListInputProps("columns",m,"label"))),t(r.TextInput,f({label:"Value Field",placeholder:"get column value by this field",required:!0,sx:{flex:1}},u.getListInputProps("columns",m,"value_field"))),t(qn,f({label:"Value Type",sx:{flex:1}},u.getListInputProps("columns",m,"value_type")))]}),t(r.ActionIcon,{color:"red",variant:"hover",onClick:()=>u.removeListItem("columns",m),sx:{position:"absolute",top:15,right:5},children:t(S.Trash,{size:16})})]},m)),t(r.Group,{position:"center",mt:"xs",children:t(r.Button,{onClick:c,children:"Add a Column"})})]})]}),t(r.Text,{weight:500,mb:"md",children:"Current Configuration:"}),t(B.Prism,{language:"json",colorScheme:"dark",noCopy:!0,children:JSON.stringify(u.values,null,2)})]})})}const ot=[{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 Fn({conf:e,setConf:n}){var l;const i=q.useForm({initialValues:{paragraphs:q.formList((l=e.paragraphs)!=null?l:ot)}}),o=()=>i.addListItem("paragraphs",_(f({},ot[0]),{template:E.randomId()}));return t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:p("form",{onSubmit:i.onSubmit(n),children:[i.values.paragraphs.length===0&&t(r.Text,{color:"dimmed",align:"center",children:"Empty"}),p(r.Group,{position:"apart",mb:"xs",sx:{" + .mantine-Group-root":{marginTop:0}},children:[t(r.Text,{children:"Paragraphs"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:t(S.DeviceFloppy,{size:20})})]}),i.values.paragraphs.map((s,a)=>p(r.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[t(r.TextInput,f({placeholder:"Time: ${new Date().toISOString()}",label:"Content Template",required:!0,sx:{flex:1}},i.getListInputProps("paragraphs",a,"template"))),p(r.Group,{direction:"column",grow:!0,children:[t(r.Text,{children:"Color"}),t(Se,f({},i.getListInputProps("paragraphs",a,"color")))]}),t(r.Group,{direction:"column",grow:!0,children:t(r.TextInput,f({label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",sx:{flex:1}},i.getListInputProps("paragraphs",a,"size")))}),t(r.Group,{position:"apart",grow:!0,sx:{"> *":{flexGrow:1,maxWidth:"100%"}},children:t(it,f({label:"Font Weight"},i.getListInputProps("paragraphs",a,"weight")))}),t(r.ActionIcon,{color:"red",variant:"hover",onClick:()=>i.removeListItem("paragraphs",a),sx:{position:"absolute",top:15,right:5},children:t(S.Trash,{size:16})})]},a)),t(r.Group,{position:"center",mt:"md",children:t(r.Button,{onClick:o,children:"Add a Paragraph"})}),t(r.Text,{size:"sm",weight:500,mt:"md",children:"Current Configuration:"}),t(B.Prism,{language:"json",colorScheme:"dark",noCopy:!0,children:JSON.stringify(i.values,null,2)})]})})}const Ce=[{value:"text",label:"Text",Panel:Fn},{value:"stats",label:"Stats",Panel:On},{value:"table",label:"Table",Panel:$n},{value:"sunburst",label:"Sunburst",Panel:kn},{value:"bar-3d",label:"Bar Chart (3D)",Panel:vn},{value:"cartesian",label:"Cartesian Chart",Panel:Pn},{value:"pie",label:"Pie Chart",Panel:An}];function Bn(){const{viz:e,setViz:n}=d.default.useContext(O),[i,o]=E.useInputState(e.type),l=e.type!==i,s=d.default.useCallback(()=>{!l||n(h=>_(f({},h),{type:i}))},[l,i]),a=h=>{n(m=>_(f({},m),{conf:h}))},u=h=>{try{a(JSON.parse(h))}catch(m){console.error(m)}},c=d.default.useMemo(()=>{var h;return(h=Ce.find(m=>m.value===i))==null?void 0:h.Panel},[i,Ce]);return p(K,{children:[t(r.Select,{label:"Visualization",value:i,onChange:o,data:Ce,rightSection:t(r.ActionIcon,{disabled:!l,onClick:s,children:t(S.DeviceFloppy,{size:20})})}),c&&t(c,{conf:e.conf,setConf:a}),!c&&t(r.JsonInput,{minRows:20,label:"Config",value:JSON.stringify(e.conf,null,2),onChange:u})]})}function Vn({}){return p(r.Group,{direction:"row",grow:!0,noWrap:!0,align:"stretch",sx:{height:"100%"},children:[t(r.Group,{grow:!0,direction:"column",noWrap:!0,sx:{width:"40%",flexShrink:0,flexGrow:0},children:t(Bn,{})}),t(r.Box,{sx:{height:"100%",flexGrow:1,maxWidth:"60%"},children:t(Cn,{})})]})}function jn({opened:e,close:n}){const{freezeLayout:i}=d.default.useContext($),{data:o,loading:l,viz:s,title:a}=d.default.useContext(O);return d.default.useEffect(()=>{i(e)},[e]),t(r.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:n,title:a,trapFocus:!0,onDragStart:u=>{u.stopPropagation()},children:t(r.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 185px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",width:"100%"}},padding:"md",children:p(r.Tabs,{initialTab:2,children:[p(r.Tabs.Tab,{label:"Data Source",children:[t(r.LoadingOverlay,{visible:l,exitTransitionDuration:0}),t(kt,{})]}),t(r.Tabs.Tab,{label:"Panel",children:t(Ot,{})}),t(r.Tabs.Tab,{label:"Visualization",children:t(Vn,{})})]})})})}function Nn({}){const[e,n]=d.default.useState(!1),i=()=>n(!0),o=()=>n(!1),{title:l,refreshData:s}=d.default.useContext(O),{inEditMode:a}=d.default.useContext($);return p(r.Group,{position:"apart",noWrap:!0,sx:{borderBottom:"1px solid #eee",paddingBottom:"5px"},children:[t(r.Group,{children:t(ke,{})}),t(r.Group,{grow:!0,position:"center",children:t(r.Text,{lineClamp:1,weight:"bold",children:l})}),t(r.Group,{position:"right",spacing:0,sx:{height:"28px"},children:p(r.Menu,{children:[t(r.Menu.Item,{onClick:s,icon:t(S.Refresh,{size:14}),children:"Refresh"}),a&&t(r.Menu.Item,{onClick:i,icon:t(S.Settings,{size:14}),children:"Settings"}),t(r.Divider,{}),t(r.Menu.Item,{color:"red",disabled:!0,icon:t(S.Trash,{size:14}),children:"Delete"})]})}),a&&t(jn,{opened:e,close:o})]})}var mr="";function ve({viz:e,dataSourceID:n,title:i,description:o,update:l,layout:s,id:a}){const u=d.default.useContext(Q),c=d.default.useContext(k),[h,m]=d.default.useState(i),[x,g]=d.default.useState(o),[y,C]=d.default.useState(n),[T,z]=d.default.useState(e),A=d.default.useMemo(()=>{if(!!y)return c.dataSources.find(ze=>ze.id===y)},[y,c.dataSources]);d.default.useEffect(()=>{l==null||l({id:a,layout:s,title:h,description:x,dataSourceID:y,viz:T})},[h,x,A,T,a,s,y]);const{data:L=[],loading:ue,refresh:Te}=pe.useRequest(Le({context:u,definitions:c,title:h,dataSource:A}),{refreshDeps:[u,c,A]}),Ge=Te;return t(O.Provider,{value:{data:L,loading:ue,title:h,setTitle:m,description:x,setDescription:g,dataSourceID:y,setDataSourceID:C,viz:T,setViz:z,refreshData:Ge},children:p(r.Container,{className:"panel-root",children:[t(Nn,{}),t(fe,{children:t(nt,{viz:T,data:L,loading:ue})})]})})}var hr="";const Rn=P.WidthProvider(P.Responsive);function lt({panels:e,setPanels:n,className:i="layout",cols:o={lg:12,md:10,sm:8,xs:6,xxs:4},rowHeight:l=10,onRemoveItem:s,isDraggable:a,isResizable:u,setLocalCols:c,setBreakpoint:h}){const m=(g,y)=>{h(g),c(y)},x=d.default.useCallback(g=>{const y=new Map;g.forEach(A=>{var L=A,{i:T}=L,z=D(L,["i"]);y.set(T,z)});const C=e.map(T=>_(f({},T),{layout:y.get(T.id)}));n(C)},[e,n]);return t(Rn,{onBreakpointChange:m,onLayoutChange:x,className:i,cols:o,rowHeight:l,isDraggable:a,isResizable:u,children:e.map((T,C)=>{var z=T,{id:g}=z,y=D(z,["id"]);return t("div",{"data-grid":y.layout,children:t(ve,_(f({id:g},y),{destroy:()=>s(g),update:A=>{n(L=>(L.splice(C,1,A),[...L]))}}))},g)})})}function we(e,n){return p(r.Text,{sx:{svg:{verticalAlign:"text-bottom"}},children:[e," ",n]})}function Wn({mode:e,setMode:n}){return t(r.SegmentedControl,{value:e,onChange:n,data:[{label:we(t(S.PlayerPlay,{size:20}),"Use"),value:M.Use},{label:we(t(S.Resize,{size:20}),"Layout"),value:M.Layout},{label:we(t(S.Paint,{size:20}),"Content"),value:M.Edit}]})}const Qn=`
9
+ */var Tt=c.default,Gt=Symbol.for("react.element"),_t=Symbol.for("react.fragment"),zt=Object.prototype.hasOwnProperty,It=Tt.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,Dt={key:!0,ref:!0,__self:!0,__source:!0};function Me(e,n,i){var o,l={},s=null,a=null;i!==void 0&&(s=""+i),n.key!==void 0&&(s=""+n.key),n.ref!==void 0&&(a=n.ref);for(o in n)zt.call(n,o)&&!Dt.hasOwnProperty(o)&&(l[o]=n[o]);if(e&&e.defaultProps)for(o in n=e.defaultProps,n)l[o]===void 0&&(l[o]=n[o]);return{$$typeof:Gt,type:e,key:s,ref:a,props:l,_owner:It.current}}oe.Fragment=_t,oe.jsx=Me,oe.jsxs=Me,ie.exports=oe;const t=ie.exports.jsx,p=ie.exports.jsxs,X=ie.exports.Fragment;function Oe({position:e,trigger:n="click"}){const{freezeLayout:i}=c.default.useContext(R),[o,l]=c.default.useState(!1),{description:s}=c.default.useContext(O);if(c.default.useEffect(()=>{i(o)},[o]),!s||s==="<p><br></p>")return null;const a=n==="click"?t(r.Tooltip,{label:"Click to see description",openDelay:500,children:t(S.InfoCircle,{size:20,onClick:()=>l(u=>!u),style:{verticalAlign:"baseline",cursor:"pointer"}})}):t(S.InfoCircle,{size:20,onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),style:{verticalAlign:"baseline",cursor:"pointer"}});return t(r.Popover,{opened:o,onClose:()=>l(!1),withCloseButton:!0,withArrow:!0,trapFocus:!0,closeOnEscape:!1,placement:"center",position:e,target:a,children:t(gt.default,{readOnly:!0,value:s,onChange:z.default.noop,sx:{border:"none"}})})}function Pt(){const{description:e,setDescription:n}=c.default.useContext(O),[i,o]=c.default.useState(e),l=e!==i,s=c.default.useCallback(()=>{!l||n(i)},[l,i]);return p(r.Group,{direction:"column",sx:{flexGrow:1},children:[p(r.Group,{align:"end",children:[t(r.Text,{children:"Description"}),t(r.ActionIcon,{variant:"hover",color:"blue",disabled:!l,onClick:s,children:t(S.DeviceFloppy,{size:20})})]}),t(De.RichTextEditor,{value:i,onChange:o,sx:{flexGrow:1},sticky:!0,p:"0"})]})}class ke extends c.default.Component{constructor(n){super(n),this.state={error:null}}componentDidCatch(n){this.setState({error:n})}render(){var n;if(this.state.error){const i=()=>{this.setState({error:null})};return p(r.Box,{children:[t(r.Text,{size:"xs",children:(n=this.state.error)==null?void 0:n.message}),t(r.Button,{variant:"subtle",size:"xs",mx:"auto",compact:!0,sx:{display:"block"},onClick:i,children:"Retry"})]})}return this.props.children}}function Lt(){const{title:e}=c.default.useContext(O);return t(ke,{children:p(r.Group,{direction:"column",grow:!0,noWrap:!0,mx:"auto",mt:"xl",p:"5px",spacing:"xs",sx:{width:"600px",height:"450px",background:"transparent",borderRadius:"5px",boxShadow:"0px 0px 10px 0px rgba(0,0,0,.2)"},children:[p(r.Group,{position:"apart",noWrap:!0,sx:{borderBottom:"1px solid #eee",paddingBottom:"5px",flexGrow:0,flexShrink:0},children:[t(r.Group,{children:t(Oe,{position:"bottom",trigger:"hover"})}),t(r.Group,{grow:!0,position:"center",children:t(r.Text,{lineClamp:1,weight:"bold",children:e})}),t(r.Group,{position:"right",spacing:0,sx:{height:"28px"}})]}),t(r.Group,{sx:{background:"#eee",flexGrow:1}})]})})}function At(){const{title:e,setTitle:n}=c.default.useContext(O),[i,o]=E.useInputState(e),l=e!==i,s=c.default.useCallback(()=>{!l||n(i)},[l,i]);return t(r.TextInput,{value:i,onChange:o,label:p(r.Group,{align:"end",children:[t(r.Text,{children:"Panel Title"}),t(r.ActionIcon,{variant:"hover",color:"blue",disabled:!l,onClick:s,children:t(S.DeviceFloppy,{size:20})})]})})}function Mt({}){return p(r.Group,{direction:"row",grow:!0,noWrap:!0,align:"stretch",sx:{height:"100%"},children:[p(r.Group,{grow:!0,direction:"column",sx:{width:"40%",flexShrink:0,flexGrow:0,height:"100%"},children:[t(At,{}),t(Pt,{})]}),t(r.Box,{sx:{height:"100%",flexGrow:1,maxWidth:"60%"},children:t(Lt,{})})]})}function Ee({id:e}){const n=c.default.useContext(k),i=c.default.useContext(Q),o=c.default.useMemo(()=>n.dataSources.find(u=>u.id===e),[n.dataSources,e]),{data:l=[],loading:s,refresh:a}=fe.useRequest(Le({context:i,definitions:n,title:e,dataSource:o}),{refreshDeps:[i,n,o]});return s?t(r.LoadingOverlay,{visible:s,exitTransitionDuration:0}):l.length===0?t(r.Table,{}):p(r.Group,{my:"xl",direction:"column",grow:!0,sx:{border:"1px solid #eee"},children:[p(r.Group,{position:"apart",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[p(r.Group,{position:"left",children:[t(r.Text,{weight:500,children:"Preview Data"}),l.length>10&&p(r.Text,{size:"sm",color:"gray",children:["Showing 10 rows of ",l.length]})]}),t(r.ActionIcon,{mr:15,variant:"hover",color:"blue",disabled:s,onClick:a,children:t(S.Refresh,{size:15})})]}),p(r.Table,{children:[t("thead",{children:t("tr",{children:Object.keys(l==null?void 0:l[0]).map(u=>t("th",{children:t(r.Text,{weight:700,color:"#000",children:u})},u))})}),t("tbody",{children:l.slice(0,10).map((u,d)=>t("tr",{children:Object.values(u).map((x,m)=>t("td",{children:t(r.Group,{sx:{"&, .mantine-Text-root":{fontFamily:"monospace"}},children:t(r.Text,{children:x})})},`${x}--${m}`))},`row-${d}`))})]})]})}function Ot({}){const{dataSources:e}=c.default.useContext(k),{dataSourceID:n,setDataSourceID:i,data:o,loading:l}=c.default.useContext(O),s=c.default.useMemo(()=>e.map(a=>({value:a.id,label:a.id})),[e]);return p(r.Group,{direction:"column",grow:!0,noWrap:!0,children:[p(r.Group,{position:"left",sx:{maxWidth:"600px",alignItems:"baseline"},children:[t(r.Text,{children:"Select a Data Source"}),t(r.Select,{data:s,value:n,onChange:i,allowDeselect:!1,clearable:!1,sx:{flexGrow:1}})]}),t(Ee,{id:n})]})}F.use([te.SunburstChart,ne.CanvasRenderer]);const kt={tooltip:{show:!0},series:{type:"sunburst",radius:[0,"90%"],emphasis:{focus:"ancestor"}}};function Et({conf:e,data:n,width:i,height:o}){const h=e,{label_field:l="name",value_field:s="value"}=h,a=P(h,["label_field","value_field"]),u=c.default.useMemo(()=>n.map(g=>({name:g[l],value:Number(g[s])})),[n,l,s]),d=c.default.useMemo(()=>{var g,b;return(b=(g=z.default.maxBy(u,C=>C.value))==null?void 0:g.value)!=null?b:1},[u]),x=c.default.useMemo(()=>({series:{label:{formatter:({name:g,value:b})=>b/d<.2?" ":g}}}),[d]),m=z.default.merge({},kt,x,a,{series:{data:u}});return t(re.default,{echarts:F,option:m,style:{width:i,height:o}})}F.use([te.BarChart,te.LineChart,W.GridComponent,W.LegendComponent,W.TooltipComponent,ne.CanvasRenderer]);const qt={legend:{show:!0,bottom:0,left:0},tooltip:{trigger:"axis"},xAxis:{type:"category",nameGap:25,nameLocation:"center",nameTextStyle:{fontWeight:"bold"}},grid:{top:30,left:15,right:15,bottom:30,containLabel:!0}};function Rt({conf:e,data:n,width:i,height:o}){const l=c.default.useMemo(()=>{var x;const s=e.y_axes.reduce((m,{label_formatter:h},g)=>(m[g]=function(C){const w=typeof C=="object"?C.value:C;if(!h)return w;try{return K.default(w).format(h)}catch(D){return console.error(D),w}},m),{default:({value:m})=>m}),a=e.series.reduce((m,{yAxisIndex:h,name:g})=>(m[g]=h,m),{}),u=e.series.map(w=>{var D=w,{y_axis_data_key:m,yAxisIndex:h,label_position:g,name:b}=D,C=P(D,["y_axis_data_key","yAxisIndex","label_position","name"]);return f({data:n.map(A=>A[m]),label:{show:!!g,position:g,formatter:s[h!=null?h:"default"]},name:b,yAxisIndex:h},C)}),d={xAxis:{data:n.map(m=>m[e.x_axis_data_key]),name:(x=e.x_axis_name)!=null?x:""},yAxis:e.y_axes.map((b,g)=>{var C=b,{label_formatter:m}=C,h=P(C,["label_formatter"]);var w;return I(f({},h),{axisLabel:{show:!0,formatter:(w=s[g])!=null?w:s.default}})}),dataset:{source:n},series:u,tooltip:{formatter:function(m){const h=Array.isArray(m)?m:[m];if(h.length===0)return"";const g=h.map(({seriesName:b,value:C})=>{var _;if(!b)return C;const w=a[b],D=(_=s[w])!=null?_:s.default;return`${b}: ${D({value:C})}`});return g.unshift(`<strong>${h[0].name}</strong>`),g.join("<br />")}}};return z.default.merge({},qt,d)},[e,n]);return!i||!o?null:t(re.default,{echarts:F,option:l,style:{width:i,height:o}})}var V=(e=>(e.string="string",e.number="number",e.eloc="eloc",e.percentage="percentage",e))(V||{});function $t({value:e}){return t(r.Text,{component:"span",children:e})}function Bt({value:e}){return t(r.Text,{component:"span",children:e})}function Ft({value:e}){const n=K.default(e).format({thousandSeparated:!0});return t(r.Text,{component:"span",children:n})}function Vt({value:e}){const n=K.default(e).format({output:"percent",mantissa:3});return t(r.Text,{component:"span",children:n})}function jt({value:e,type:n}){switch(n){case V.string:return t($t,{value:e});case V.eloc:return t(Bt,{value:e});case V.number:return t(Ft,{value:e});case V.percentage:return t(Vt,{value:e})}}function Nt({conf:e,data:n=[],width:i,height:o}){const m=e,{id_field:l,use_raw_columns:s,columns:a}=m,u=P(m,["id_field","use_raw_columns","columns"]),d=c.default.useMemo(()=>s?Object.keys(n==null?void 0:n[0]):a.map(h=>h.label),[s,a,n]),x=c.default.useMemo(()=>s?Object.keys(n==null?void 0:n[0]).map(h=>({label:h,value_field:h,value_type:V.string})):a,[s,a,n]);return p(r.Table,I(f({sx:{maxHeight:o}},u),{children:[t("thead",{children:t("tr",{children:d.map(h=>t("th",{children:h},h))})}),t("tbody",{children:n.slice(0,30).map((h,g)=>t("tr",{children:x.map(({value_field:b,value_type:C})=>t("td",{children:t(r.Group,{sx:{"&, .mantine-Text-root":{fontFamily:"monospace",fontSize:u.fontSize}},children:t(jt,{value:h[b],type:C})})},`${b}--${h[b]}`))},l?h[l]:`row-${g}`))}),n.length>100&&t("tfoot",{children:t("tr",{children:t("td",{colSpan:d.length,children:t(r.Text,{color:"red",size:"sm",children:"Showing only the first 30 rows to avoid causing slow performance"})})})})]}))}function Wt(e,n={}){const i=I(f({},n),{numbro:K.default}),o=Object.keys(i),l=Object.values(i);try{return new Function(...o,`return \`${e}\`;`)(...l)}catch(s){return s.message}}function Qt({conf:{paragraphs:e},data:n}){return t(X,{children:e.map((a,s)=>{var u=a,{template:i,size:o}=u,l=P(u,["template","size"]);return t(r.Text,I(f({},l),{sx:{fontSize:o},children:Wt(i,n[0])}),`${i}---${s}`)})})}F.use([W.GridComponent,W.VisualMapComponent,W.LegendComponent,W.TooltipComponent,ne.CanvasRenderer]);function Ut({conf:e,data:n,width:i,height:o}){const h=e,{x_axis_data_key:l,y_axis_data_key:s,z_axis_data_key:a}=h,u=P(h,["x_axis_data_key","y_axis_data_key","z_axis_data_key"]),d=c.default.useMemo(()=>z.default.minBy(n,g=>g[a])[a],[n,a]),x=c.default.useMemo(()=>z.default.maxBy(n,g=>g[a])[a],[n,a]),m=I(f({tooltip:{},backgroundColor:"#fff",visualMap:{show:!0,dimension:2,min:d,max:x,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}}}},u),{series:[{type:"bar3D",wireframe:{},data:n.map(g=>[g[l],g[s],g[a]])}]});return t(re.default,{echarts:F,option:m,style:{width:i,height:o}})}var hr="";F.use([te.PieChart,ne.CanvasRenderer]);const Jt={tooltip:{show:!0},series:{type:"pie",radius:["50%","80%"],label:{position:"outer",alignTo:"edge",formatter:`{name|{b}}
10
+ {percentage|{d}%}`,minMargin:5,edgeDistance:10,lineHeight:15,rich:{percentage:{color:"#999"}},margin:20},labelLine:{length:15,length2:0,maxSurfaceAngle:80,showAbove:!0},top:10,bottom:10,left:10,right:10}};function Yt({conf:e,data:n,width:i,height:o}){const m=e,{label_field:l="name",value_field:s="value"}=m,a=P(m,["label_field","value_field"]),u=c.default.useMemo(()=>n.map(h=>({name:h[l],value:Number(h[s])})),[n,l,s]),d=c.default.useMemo(()=>({series:{labelLayout:function(h){const g=h.labelRect.x<i/2,b=h.labelLinePoints;return b[2][0]=g?h.labelRect.x:h.labelRect.x+h.labelRect.width,{labelLinePoints:b}}}}),[i]),x=z.default.merge({},Jt,d,a,{series:{data:u}});return t(re.default,{echarts:F,option:x,style:{width:i,height:o}})}var qe=function(){};const Kt=(e,n,i)=>Math.min(Math.max(i,e),n),Re=(e,n,i)=>{const o=n-e;return o===0?1:(i-e)/o},me=(e,n,i)=>-i*e+i*n+e,$e=(e,n)=>i=>Math.max(Math.min(i,n),e),Z=e=>e%1?Number(e.toFixed(5)):e,le=/(-)?([\d]*\.?[\d])+/g,he=/(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))/gi,Xt=/^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))$/i;function H(e){return typeof e=="string"}const ae={test:e=>typeof e=="number",parse:parseFloat,transform:e=>e},Be=Object.assign(Object.assign({},ae),{transform:$e(0,1)});Object.assign(Object.assign({},ae),{default:1});const ee=(e=>({test:n=>H(n)&&n.endsWith(e)&&n.split(" ").length===1,parse:parseFloat,transform:n=>`${n}${e}`}))("%");Object.assign(Object.assign({},ee),{parse:e=>ee.parse(e)/100,transform:e=>ee.transform(e*100)});const xe=(e,n)=>i=>Boolean(H(i)&&Xt.test(i)&&i.startsWith(e)||n&&Object.prototype.hasOwnProperty.call(i,n)),Fe=(e,n,i)=>o=>{if(!H(o))return o;const[l,s,a,u]=o.match(le);return{[e]:parseFloat(l),[n]:parseFloat(s),[i]:parseFloat(a),alpha:u!==void 0?parseFloat(u):1}},U={test:xe("hsl","hue"),parse:Fe("hue","saturation","lightness"),transform:({hue:e,saturation:n,lightness:i,alpha:o=1})=>"hsla("+Math.round(e)+", "+ee.transform(Z(n))+", "+ee.transform(Z(i))+", "+Z(Be.transform(o))+")"},Zt=$e(0,255),ge=Object.assign(Object.assign({},ae),{transform:e=>Math.round(Zt(e))}),j={test:xe("rgb","red"),parse:Fe("red","green","blue"),transform:({red:e,green:n,blue:i,alpha:o=1})=>"rgba("+ge.transform(e)+", "+ge.transform(n)+", "+ge.transform(i)+", "+Z(Be.transform(o))+")"};function Ht(e){let n="",i="",o="",l="";return e.length>5?(n=e.substr(1,2),i=e.substr(3,2),o=e.substr(5,2),l=e.substr(7,2)):(n=e.substr(1,1),i=e.substr(2,1),o=e.substr(3,1),l=e.substr(4,1),n+=n,i+=i,o+=o,l+=l),{red:parseInt(n,16),green:parseInt(i,16),blue:parseInt(o,16),alpha:l?parseInt(l,16)/255:1}}const be={test:xe("#"),parse:Ht,transform:j.transform},se={test:e=>j.test(e)||be.test(e)||U.test(e),parse:e=>j.test(e)?j.parse(e):U.test(e)?U.parse(e):be.parse(e),transform:e=>H(e)?e:e.hasOwnProperty("red")?j.transform(e):U.transform(e)},Ve="${c}",je="${n}";function en(e){var n,i,o,l;return isNaN(e)&&H(e)&&((i=(n=e.match(le))===null||n===void 0?void 0:n.length)!==null&&i!==void 0?i:0)+((l=(o=e.match(he))===null||o===void 0?void 0:o.length)!==null&&l!==void 0?l:0)>0}function Ne(e){typeof e=="number"&&(e=`${e}`);const n=[];let i=0;const o=e.match(he);o&&(i=o.length,e=e.replace(he,Ve),n.push(...o.map(se.parse)));const l=e.match(le);return l&&(e=e.replace(le,je),n.push(...l.map(ae.parse))),{values:n,numColors:i,tokenised:e}}function We(e){return Ne(e).values}function Qe(e){const{values:n,numColors:i,tokenised:o}=Ne(e),l=n.length;return s=>{let a=o;for(let u=0;u<l;u++)a=a.replace(u<i?Ve:je,u<i?se.transform(s[u]):Z(s[u]));return a}}const tn=e=>typeof e=="number"?0:e;function nn(e){const n=We(e);return Qe(e)(n.map(tn))}const Ue={test:en,parse:We,createTransformer:Qe,getAnimatableNone:nn};function ye(e,n,i){return i<0&&(i+=1),i>1&&(i-=1),i<1/6?e+(n-e)*6*i:i<1/2?n:i<2/3?e+(n-e)*(2/3-i)*6:e}function Je({hue:e,saturation:n,lightness:i,alpha:o}){e/=360,n/=100,i/=100;let l=0,s=0,a=0;if(!n)l=s=a=i;else{const u=i<.5?i*(1+n):i+n-i*n,d=2*i-u;l=ye(d,u,e+1/3),s=ye(d,u,e),a=ye(d,u,e-1/3)}return{red:Math.round(l*255),green:Math.round(s*255),blue:Math.round(a*255),alpha:o}}const rn=(e,n,i)=>{const o=e*e,l=n*n;return Math.sqrt(Math.max(0,i*(l-o)+o))},on=[be,j,U],Ye=e=>on.find(n=>n.test(e)),Ke=(e,n)=>{let i=Ye(e),o=Ye(n),l=i.parse(e),s=o.parse(n);i===U&&(l=Je(l),i=j),o===U&&(s=Je(s),o=j);const a=Object.assign({},l);return u=>{for(const d in a)d!=="alpha"&&(a[d]=rn(l[d],s[d],u));return a.alpha=me(l.alpha,s.alpha,u),i.transform(a)}},ln=e=>typeof e=="number",an=(e,n)=>i=>n(e(i)),Xe=(...e)=>e.reduce(an);function Ze(e,n){return ln(e)?i=>me(e,n,i):se.test(e)?Ke(e,n):tt(e,n)}const He=(e,n)=>{const i=[...e],o=i.length,l=e.map((s,a)=>Ze(s,n[a]));return s=>{for(let a=0;a<o;a++)i[a]=l[a](s);return i}},sn=(e,n)=>{const i=Object.assign(Object.assign({},e),n),o={};for(const l in i)e[l]!==void 0&&n[l]!==void 0&&(o[l]=Ze(e[l],n[l]));return l=>{for(const s in o)i[s]=o[s](l);return i}};function et(e){const n=Ue.parse(e),i=n.length;let o=0,l=0,s=0;for(let a=0;a<i;a++)o||typeof n[a]=="number"?o++:n[a].hue!==void 0?s++:l++;return{parsed:n,numNumbers:o,numRGB:l,numHSL:s}}const tt=(e,n)=>{const i=Ue.createTransformer(n),o=et(e),l=et(n);return o.numHSL===l.numHSL&&o.numRGB===l.numRGB&&o.numNumbers>=l.numNumbers?Xe(He(o.parsed,l.parsed),i):a=>`${a>0?n:e}`},un=(e,n)=>i=>me(e,n,i);function dn(e){if(typeof e=="number")return un;if(typeof e=="string")return se.test(e)?Ke:tt;if(Array.isArray(e))return He;if(typeof e=="object")return sn}function cn(e,n,i){const o=[],l=i||dn(e[0]),s=e.length-1;for(let a=0;a<s;a++){let u=l(e[a],e[a+1]);if(n){const d=Array.isArray(n)?n[a]:n;u=Xe(d,u)}o.push(u)}return o}function pn([e,n],[i]){return o=>i(Re(e,n,o))}function fn(e,n){const i=e.length,o=i-1;return l=>{let s=0,a=!1;if(l<=e[0]?a=!0:l>=e[o]&&(s=o-1,a=!0),!a){let d=1;for(;d<i&&!(e[d]>l||d===o);d++);s=d-1}const u=Re(e[s],e[s+1],l);return n[s](u)}}function mn(e,n,{clamp:i=!0,ease:o,mixer:l}={}){const s=e.length;qe(s===n.length),qe(!o||!Array.isArray(o)||o.length===s-1),e[0]>e[s-1]&&(e=[].concat(e),n=[].concat(n),e.reverse(),n.reverse());const a=cn(n,o,l),u=s===2?pn(e,a):fn(e,a);return i?d=>u(Kt(e[0],e[s-1],d)):u}class hn{constructor({valueRange:n,colorRange:i}){dt(this,"mapper");this.mapper=mn(n,i)}getColor(n){return this.mapper(n)}}function xn(e,n){if(e.type==="static")return e.staticColor;if(e.type==="continuous"){const i=new hn(e),o=n[e.valueField];return i.getColor(o)}return"black"}function gn(s){var a=s,{conf:u}=a,d=u,{content:e,size:n,color:i}=d,o=P(d,["content","size","color"]),{data:l}=a;const x=c.default.useMemo(()=>xn(i,l[0]),[i,l]),m=c.default.useMemo(()=>{var _;const{prefix:h,postfix:g,data_field:b,formatter:C}=e,w=(_=l==null?void 0:l[0])==null?void 0:_[b];return[h,K.default(w).format(C),g].join(" ")},[e,l]);return t(r.Text,I(f({},o),{color:x,sx:{fontSize:n},children:m}))}function bn(e,n,i,o){const l={width:e,height:n,data:i,conf:o.conf};switch(o.type){case"sunburst":return t(Et,f({},l));case"line-bar":case"cartesian":return t(Rt,f({},l));case"table":return t(Nt,f({},l));case"text":return t(Qt,f({},l));case"stats":return t(gn,f({},l));case"bar-3d":return t(Ut,f({},l));case"pie":return t(Yt,f({},l));default:return null}}function nt({viz:e,data:n,loading:i}){const{ref:o,width:l,height:s}=E.useElementSize(),a=c.default.useMemo(()=>!Array.isArray(n)||n.length===0,[n]);return i?t("div",{className:"viz-root",ref:o,children:t(r.LoadingOverlay,{visible:i,exitTransitionDuration:0})}):p("div",{className:"viz-root",ref:o,children:[a&&t(r.Text,{color:"gray",align:"center",children:"nothing to show"}),!a&&t(ke,{children:bn(l,s,n,e)})]})}function yn({}){const{data:e,loading:n,viz:i}=c.default.useContext(O);return t(nt,{viz:i,data:e,loading:n})}function Sn({conf:e,setConf:n}){const i=z.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"}},e),{control:o,handleSubmit:l,formState:s}=v.useForm({defaultValues:i});return t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:p("form",{onSubmit:l(n),children:[t(r.Text,{children:"X Axis"}),p(r.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[t(v.Controller,{name:"x_axis_data_key",control:o,render:({field:a})=>t(r.TextInput,f({sx:{flexGrow:1},size:"md",label:"Data Key"},a))}),t(v.Controller,{name:"xAxis3D.name",control:o,render:({field:a})=>t(r.TextInput,f({sx:{flexGrow:1},size:"md",label:"Name"},a))})]}),t(r.Text,{mt:"lg",children:"Y Axis"}),p(r.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[t(v.Controller,{name:"y_axis_data_key",control:o,render:({field:a})=>t(r.TextInput,f({sx:{flexGrow:1},size:"md",label:"Data Key"},a))}),t(v.Controller,{name:"yAxis3D.name",control:o,render:({field:a})=>t(r.TextInput,f({sx:{flexGrow:1},size:"md",label:"Name"},a))})]}),t(r.Text,{mt:"lg",children:"Z Axis"}),p(r.Group,{position:"apart",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[t(v.Controller,{name:"z_axis_data_key",control:o,render:({field:a})=>t(r.TextInput,f({sx:{flexGrow:1},size:"md",label:"Data Key"},a))}),t(v.Controller,{name:"zAxis3D.name",control:o,render:({field:a})=>t(r.TextInput,f({sx:{flexGrow:1},size:"md",label:"Name"},a))})]}),t(r.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"60%"},mx:"auto",children:p(r.Button,{color:"blue",type:"submit",children:[t(S.DeviceFloppy,{size:20}),t(r.Text,{ml:"md",children:"Save"})]})})]})})}function Cn({value:e,onChange:n},i){const o=r.useMantineTheme(),l=c.default.useMemo(()=>Object.entries(o.colors).map(([a,u])=>({label:a,value:u[6]})),[o]),s=c.default.useMemo(()=>l.some(a=>a.value===e),[e,l]);return p(r.Group,{position:"apart",spacing:"xs",children:[t(r.TextInput,{placeholder:"Set any color",value:s?"":e,onChange:a=>n(a.currentTarget.value),rightSection:t(r.ColorSwatch,{color:s?"transparent":e,radius:4}),variant:s?"filled":"default",sx:{maxWidth:"100%",flexGrow:1}}),t(r.Text,{sx:{flexGrow:0},children:"or"}),t(r.Select,{data:l,value:e,onChange:n,variant:s?"default":"filled",placeholder:"Pick a theme color",icon:t(r.ColorSwatch,{color:s?e:"transparent",radius:4}),sx:{maxWidth:"100%",flexGrow:1}})]})}const Se=c.default.forwardRef(Cn),vn=[{label:"off",value:""},{label:"top",value:"top"},{label:"left",value:"left"},{label:"right",value:"right"},{label:"bottom",value:"bottom"},{label:"inside",value:"inside"},{label:"insideLeft",value:"insideLeft"},{label:"insideRight",value:"insideRight"},{label:"insideTop",value:"insideTop"},{label:"insideBottom",value:"insideBottom"},{label:"insideTopLeft",value:"insideTopLeft"},{label:"insideBottomLeft",value:"insideBottomLeft"},{label:"insideTopRight",value:"insideTopRight"},{label:"insideBottomRight",value:"insideBottomRight"}];function wn({control:e,index:n,remove:i,seriesItem:o,yAxisOptions:l}){const s=o.type;return p(r.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[t(r.Group,{direction:"column",grow:!0,noWrap:!0,children:t(v.Controller,{name:`series.${n}.type`,control:e,render:({field:a})=>t(r.SegmentedControl,f({data:[{label:"Line",value:"line"},{label:"Bar",value:"bar"},{label:"Scatter",value:"scatter",disabled:!0},{label:"Boxplot",value:"boxplot",disabled:!0}]},a))})}),t(v.Controller,{name:`series.${n}.name`,control:e,render:({field:a})=>t(r.TextInput,f({label:"Name",required:!0,sx:{flex:1}},a))}),p(r.Group,{direction:"row",grow:!0,noWrap:!0,children:[t(v.Controller,{name:`series.${n}.y_axis_data_key`,control:e,render:({field:a})=>t(r.TextInput,f({label:"Value key",required:!0,sx:{flex:1}},a))}),t(v.Controller,{name:`series.${n}.yAxisIndex`,control:e,render:x=>{var{field:m}=x,h=m,{value:a,onChange:u}=h,d=P(h,["value","onChange"]);var g;return t(r.Select,I(f({label:"Y Axis",data:l,disabled:l.length===0},d),{value:(g=a==null?void 0:a.toString())!=null?g:"",onChange:b=>{if(!b){u(0);return}u(Number(b))},sx:{flex:1}}))}})]}),s==="bar"&&p(r.Group,{direction:"row",grow:!0,align:"top",children:[t(v.Controller,{name:`series.${n}.stack`,control:e,render:({field:a})=>t(r.TextInput,f({label:"Stack",placeholder:"Stack bars by this ID",sx:{flexGrow:1}},a))}),t(v.Controller,{name:`series.${n}.barWidth`,control:e,render:({field:a})=>t(r.TextInput,f({label:"Bar Width",sx:{flexGrow:1}},a))})]}),t(v.Controller,{name:`series.${n}.label_position`,control:e,render:({field:a})=>t(r.Select,f({label:"Label Position",data:vn},a))}),p(r.Group,{direction:"column",grow:!0,spacing:4,children:[t(r.Text,{size:"sm",children:"Color"}),t(v.Controller,{name:`series.${n}.color`,control:e,render:({field:a})=>t(Se,f({},a))})]}),t(r.ActionIcon,{color:"red",variant:"hover",onClick:()=>i(n),sx:{position:"absolute",top:15,right:5},children:t(S.Trash,{size:16})})]},n)}function Tn({control:e,watch:n,getValues:i}){const{fields:o,append:l,remove:s}=v.useFieldArray({control:e,name:"series"}),a=n("y_axes"),u=o.map((m,h)=>f(f({},m),a[h])),d=()=>l({type:"bar",name:E.randomId(),showSymbol:!1,y_axis_data_key:"value",yAxisIndex:0,label_position:"top",stack:"",color:"#000"}),x=c.default.useMemo(()=>i().y_axes.map(({name:m},h)=>({label:m,value:h.toString()})),[i]);return p(r.Group,{direction:"column",grow:!0,children:[t(r.Text,{mt:"xl",mb:0,children:"Series"}),u.map((m,h)=>t(wn,{control:e,index:h,remove:s,seriesItem:m,yAxisOptions:x})),t(r.Group,{position:"center",mt:"xs",children:t(r.Button,{onClick:d,children:"Add a Series"})})]})}const rt={mantissa:0,output:"number"};function Gn({value:e,onChange:n},i){const o=a=>{n(I(f({},e),{output:a}))},l=a=>{const u=a===0?!1:e.trimMantissa;n(I(f({},e),{mantissa:a,trimMantissa:u}))},s=a=>{n(I(f({},e),{trimMantissa:a.currentTarget.checked}))};return t(r.Group,{direction:"column",grow:!0,noWrap:!0,ref:i,children:p(r.Group,{direction:"row",grow:!0,children:[t(r.Select,{label:"Format",data:[{label:"1234",value:"number"},{label:"99%",value:"percent"}],value:e.output,onChange:o}),t(r.NumberInput,{label:"Mantissa",defaultValue:0,min:0,step:1,max:4,value:e.mantissa,onChange:l}),t(r.Switch,{label:"Trim mantissa",checked:e.trimMantissa,onChange:s,disabled:e.mantissa===0})]})})}const it=c.default.forwardRef(Gn);function _n({control:e,index:n,remove:i}){return p(r.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[t(r.Group,{direction:"row",grow:!0,noWrap:!0,children:t(v.Controller,{name:`y_axes.${n}.name`,control:e,render:({field:o})=>t(r.TextInput,f({label:"Name",required:!0,sx:{flex:1}},o))})}),t(r.Group,{direction:"column",grow:!0,noWrap:!0,children:t(v.Controller,{name:`y_axes.${n}.label_formatter`,control:e,render:({field:o})=>t(it,f({},o))})}),t(r.ActionIcon,{color:"red",variant:"hover",onClick:()=>i(n),sx:{position:"absolute",top:15,right:5},disabled:n===0,children:t(S.Trash,{size:16})})]},n)}function zn({control:e,watch:n}){const{fields:i,append:o,remove:l}=v.useFieldArray({control:e,name:"y_axes"}),s=n("y_axes"),a=i.map((d,x)=>f(f({},d),s[x])),u=()=>o({name:"",label_formatter:rt});return p(r.Group,{direction:"column",grow:!0,children:[t(r.Text,{mt:"xl",mb:0,children:"Y Axes"}),a.map((d,x)=>t(_n,{control:e,index:x,remove:l})),t(r.Group,{position:"center",mt:"xs",children:t(r.Button,{onClick:u,children:"Add a Y Axis"})})]})}function In(e){function n({type:i,name:o,showSymbol:l,y_axis_data_key:s="value",yAxisIndex:a=0,label_position:u="top",stack:d="1",color:x="black",barWidth:m="30"}){return{type:i,name:o,showSymbol:l,y_axis_data_key:s,yAxisIndex:a,label_position:u,stack:d,color:x,barWidth:m}}return e.map(n)}function Dn({conf:e,setConf:n}){const h=e,{series:i,y_axes:o}=h,l=P(h,["series","y_axes"]),s=c.default.useMemo(()=>{const C=l,{x_axis_name:g=""}=C,b=P(C,["x_axis_name"]);return f({series:In(i!=null?i:[]),x_axis_name:g,y_axes:o!=null?o:[{name:"Y Axis",label_formatter:rt}]},b)},[i,l]);c.default.useEffect(()=>{!z.default.isEqual(e,s)&&n(s)},[e,s]);const{control:a,handleSubmit:u,watch:d,formState:{isDirty:x},getValues:m}=v.useForm({defaultValues:s});return t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:p("form",{onSubmit:u(n),children:[p(r.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[t(r.Text,{children:"Chart Config"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!x,children:t(S.DeviceFloppy,{size:20})})]}),t(v.Controller,{name:"x_axis_data_key",control:a,render:({field:g})=>t(r.TextInput,f({size:"md",mb:"lg",label:"X Axis Data Key"},g))}),t(r.Group,{direction:"column",grow:!0,noWrap:!0,mb:"lg",children:t(v.Controller,{name:"x_axis_name",control:a,render:({field:g})=>t(r.TextInput,f({size:"md",label:"X Axis Name"},g))})}),t(zn,{control:a,watch:d}),t(Tn,{control:a,watch:d,getValues:m})]})})}function Pn({conf:{label_field:e,value_field:n},setConf:i}){const o=q.useForm({initialValues:{label_field:e,value_field:n}});return t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:p("form",{onSubmit:o.onSubmit(i),children:[p(r.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[t(r.Text,{children:"Pie Config"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[t(r.TextInput,f({label:"Label Field",required:!0,sx:{flex:1}},o.getInputProps("label_field"))),t(r.TextInput,f({label:"Value Field",placeholder:"get column value by this field",required:!0,sx:{flex:1}},o.getInputProps("value_field")))]})]})})}const ue=[{label:"initial",value:0},{label:"500",value:25},{label:"700",value:50},{label:"semibold",value:75},{label:"bold",value:100}];function Ln({label:e,value:n,onChange:i},o){var a,u;const[l,s]=c.default.useState((u=(a=ue.find(d=>d.label===n))==null?void 0:a.value)!=null?u:ue[0].value);return c.default.useEffect(()=>{const d=ue.find(x=>x.value===l);d&&i(d.label)},[l]),p(r.Group,{direction:"column",grow:!0,spacing:"xs",mb:"lg",children:[t(r.Text,{children:e}),t(r.Slider,{label:null,marks:ue,value:l,onChange:s,step:25,placeholder:"Pick a font size",ref:o})]})}const ot=c.default.forwardRef(Ln);function An({label:e,value:n,onChange:i},o){const[l,s]=c.default.useState(Array.isArray(n)?[...n]:[]),a=c.default.useCallback(()=>{s(m=>[...m,""])},[s]),u=c.default.useCallback(m=>{s(h=>(h.splice(m,1),[...h]))},[s]),d=c.default.useMemo(()=>!z.default.isEqual(l,n),[l,n]),x=()=>{i(l.map(m=>m.toString()))};return p(X,{children:[p(r.Group,{position:"left",ref:o,children:[t(r.Text,{children:e}),t(r.ActionIcon,{mr:5,variant:"filled",color:"blue",disabled:!d,onClick:x,children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{children:[l.map((m,h)=>t(r.TextInput,{value:m,onChange:g=>{const b=g.currentTarget.value;s(C=>(C.splice(h,1,b),[...C]))},rightSection:t(r.ActionIcon,{onClick:()=>u(h),color:"red",children:t(S.Trash,{size:14})}),sx:{width:"45%"}})),t(r.ActionIcon,{onClick:a,color:"blue",variant:"outline",children:t(S.PlaylistAdd,{size:20})})]})]})}const Mn=c.default.forwardRef(An);function On({label:e,value:n,onChange:i},o){const[l,s]=c.default.useState(Array.isArray(n)?[...n]:[]),a=c.default.useCallback(()=>{s(g=>[...g,""])},[s]),u=c.default.useCallback(g=>{s(b=>(b.splice(g,1),[...b]))},[s]),d=c.default.useMemo(()=>!z.default.isEqual(l,n),[l,n]),x=()=>{i(l.map(g=>g.toString()))},m=r.useMantineTheme(),h=c.default.useMemo(()=>Object.entries(m.colors).map(([g,b])=>b[6]),[m]);return p(X,{children:[p(r.Group,{position:"left",ref:o,children:[t(r.Text,{children:e}),t(r.ActionIcon,{mr:5,variant:"filled",color:"blue",disabled:!d,onClick:x,children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{children:[l.map((g,b)=>t(r.ColorInput,{value:g,onChange:C=>{s(w=>(w.splice(b,1,C),[...w]))},swatches:h,rightSection:t(r.ActionIcon,{onClick:()=>u(b),color:"red",children:t(S.Trash,{size:14})}),sx:{width:"45%"}})),t(r.ActionIcon,{onClick:a,color:"blue",variant:"outline",children:t(S.PlaylistAdd,{size:20})})]})]})}const kn=c.default.forwardRef(On);function En({conf:e,setConf:n}){const i=z.default.merge({},{align:"center",size:"100px",weight:"bold",color:{type:"static",staticColor:"red"},content:{prefix:"",data_field:"",formatter:{output:"number",mantissa:0},postfix:""}},e),{control:o,handleSubmit:l,watch:s,formState:{isDirty:a}}=v.useForm({defaultValues:i}),u=s("color.type");return s("color.valueField"),t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,noWrap:!0,children:p("form",{onSubmit:l(n),children:[p(r.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[t(r.Text,{weight:500,children:"Stats Configurations"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!a,children:t(S.DeviceFloppy,{size:20})})]}),p(r.Accordion,{offsetIcon:!1,multiple:!0,initialState:{0:!0,2:!0},children:[t(r.Accordion.Item,{label:"Content",children:p(r.Group,{direction:"column",grow:!0,children:[p(r.Group,{direction:"row",grow:!0,children:[t(v.Controller,{name:"content.prefix",control:o,render:({field:d})=>t(r.TextInput,f({label:"Prefix",sx:{flexGrow:1}},d))}),t(v.Controller,{name:"content.data_field",control:o,render:({field:d})=>t(r.TextInput,f({label:"Data Field",required:!0,sx:{flexGrow:1}},d))}),t(v.Controller,{name:"content.postfix",control:o,render:({field:d})=>t(r.TextInput,f({label:"Postfix",sx:{flexGrow:1}},d))})]}),t(v.Controller,{name:"content.formatter",control:o,render:({field:d})=>t(it,f({},d))})]})}),p(r.Accordion.Item,{label:"Font",children:[t(r.Group,{direction:"column",grow:!0,children:t(v.Controller,{name:"size",control:o,render:({field:d})=>t(r.TextInput,f({label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",sx:{flex:1}},d))})}),t(r.Group,{position:"apart",grow:!0,sx:{"> *":{flexGrow:1,maxWidth:"100%"}},children:t(v.Controller,{name:"weight",control:o,render:({field:d})=>t(ot,f({label:"Font Weight"},d))})})]}),t(r.Accordion.Item,{label:"Color",children:p(r.Group,{direction:"column",grow:!0,children:[t(v.Controller,{name:"color.type",control:o,render:({field:d})=>t(r.Select,f({label:"Color Type",data:[{label:"Static Color",value:"static"},{label:"Continuous Color",value:"continuous"}]},d))}),u==="static"&&t(v.Controller,{name:"color.staticColor",control:o,render:({field:d})=>t(Se,f({},d))}),u==="continuous"&&p(X,{children:[t(v.Controller,{name:"color.valueField",control:o,defaultValue:"",render:({field:d})=>t(r.TextInput,f({placeholder:"Calculate color with this field",label:"Value Field",required:!0,sx:{flex:1}},d))}),t(v.Controller,{name:"color.valueRange",control:o,render:({field:d})=>t(Mn,f({label:"Value Range"},d))}),t(v.Controller,{name:"color.colorRange",control:o,render:({field:d})=>t(kn,f({label:"Color Range"},d))})]})]})})]})]})})}function qn({conf:{label_field:e,value_field:n},setConf:i}){const o=q.useForm({initialValues:{label_field:e,value_field:n}});return t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:p("form",{onSubmit:o.onSubmit(i),children:[p(r.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[t(r.Text,{children:"Sunburst Config"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[t(r.TextInput,f({label:"Label Field",required:!0,sx:{flex:1}},o.getInputProps("label_field"))),t(r.TextInput,f({label:"Value Field",placeholder:"get column value by this field",required:!0,sx:{flex:1}},o.getInputProps("value_field")))]})]})})}const Rn=Object.values(V).map(e=>({label:e,value:e}));function $n({label:e,value:n,onChange:i,sx:o}){return t(r.Select,{label:e,data:Rn,value:n,onChange:i,sx:o})}function Bn(o){var l=o,{conf:s}=l,a=s,{columns:e}=a,n=P(a,["columns"]),{setConf:i}=l;const u=q.useForm({initialValues:f({id_field:"id",use_raw_columns:!0,columns:q.formList(e!=null?e:[]),fontSize:"sm",horizontalSpacing:"sm",verticalSpacing:"sm",striped:!1,highlightOnHover:!1},n)}),d=()=>u.addListItem("columns",{label:E.randomId(),value_field:"value",value_type:V.string});return t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:p("form",{onSubmit:u.onSubmit(i),children:[p(r.Group,{position:"apart",mb:"lg",sx:{position:"relative"},children:[t(r.Text,{children:"Table Config"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,p:"md",mb:"sm",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[t(r.TextInput,f({size:"md",mb:"lg",label:"ID Field"},u.getInputProps("id_field"))),p(r.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:[t(r.TextInput,f({label:"Horizontal Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1}},u.getInputProps("horizontalSpacing"))),t(r.TextInput,f({label:"Vertical Spacing",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1}},u.getInputProps("verticalSpacing")))]}),t(r.Group,{position:"apart",mb:"lg",grow:!0,sx:{"> *":{flexGrow:1}},children:t(r.TextInput,f({label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",required:!0,sx:{flex:1}},u.getInputProps("fontSize")))}),p(r.Group,{direction:"column",grow:!0,children:[t(r.Text,{children:"Other"}),p(r.Group,{position:"apart",grow:!0,children:[t(r.Switch,f({label:"Striped"},u.getInputProps("striped",{type:"checkbox"}))),t(r.Switch,f({label:"Highlight on hover"},u.getInputProps("highlightOnHover",{type:"checkbox"})))]})]})]}),p(r.Group,{direction:"column",mt:"xs",spacing:"xs",grow:!0,p:"md",mb:"xl",sx:{border:"1px solid #eee",borderRadius:"5px"},children:[t(r.Switch,f({label:"Use Original Data Columns"},u.getInputProps("use_raw_columns",{type:"checkbox"}))),!u.values.use_raw_columns&&p(r.Group,{direction:"column",grow:!0,children:[t(r.Text,{mt:"xl",mb:0,children:"Custom Columns"}),u.values.columns.map((x,m)=>p(r.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[p(r.Group,{position:"apart",grow:!0,sx:{"> *":{flexGrow:1,maxWidth:"100%"}},children:[t(r.TextInput,f({label:"Label",required:!0,sx:{flex:1}},u.getListInputProps("columns",m,"label"))),t(r.TextInput,f({label:"Value Field",placeholder:"get column value by this field",required:!0,sx:{flex:1}},u.getListInputProps("columns",m,"value_field"))),t($n,f({label:"Value Type",sx:{flex:1}},u.getListInputProps("columns",m,"value_type")))]}),t(r.ActionIcon,{color:"red",variant:"hover",onClick:()=>u.removeListItem("columns",m),sx:{position:"absolute",top:15,right:5},children:t(S.Trash,{size:16})})]},m)),t(r.Group,{position:"center",mt:"xs",children:t(r.Button,{onClick:d,children:"Add a Column"})})]})]}),t(r.Text,{weight:500,mb:"md",children:"Current Configuration:"}),t(B.Prism,{language:"json",colorScheme:"dark",noCopy:!0,children:JSON.stringify(u.values,null,2)})]})})}const lt=[{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 Fn({conf:e,setConf:n}){var l;const i=q.useForm({initialValues:{paragraphs:q.formList((l=e.paragraphs)!=null?l:lt)}}),o=()=>i.addListItem("paragraphs",I(f({},lt[0]),{template:E.randomId()}));return t(r.Group,{direction:"column",mt:"md",spacing:"xs",grow:!0,children:p("form",{onSubmit:i.onSubmit(n),children:[i.values.paragraphs.length===0&&t(r.Text,{color:"dimmed",align:"center",children:"Empty"}),p(r.Group,{position:"apart",mb:"xs",sx:{" + .mantine-Group-root":{marginTop:0}},children:[t(r.Text,{children:"Paragraphs"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",children:t(S.DeviceFloppy,{size:20})})]}),i.values.paragraphs.map((s,a)=>p(r.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[t(r.TextInput,f({placeholder:"Time: ${new Date().toISOString()}",label:"Content Template",required:!0,sx:{flex:1}},i.getListInputProps("paragraphs",a,"template"))),p(r.Group,{direction:"column",grow:!0,children:[t(r.Text,{children:"Color"}),t(Se,f({},i.getListInputProps("paragraphs",a,"color")))]}),t(r.Group,{direction:"column",grow:!0,children:t(r.TextInput,f({label:"Font Size",placeholder:"10px, 1em, 1rem, 100%...",sx:{flex:1}},i.getListInputProps("paragraphs",a,"size")))}),t(r.Group,{position:"apart",grow:!0,sx:{"> *":{flexGrow:1,maxWidth:"100%"}},children:t(ot,f({label:"Font Weight"},i.getListInputProps("paragraphs",a,"weight")))}),t(r.ActionIcon,{color:"red",variant:"hover",onClick:()=>i.removeListItem("paragraphs",a),sx:{position:"absolute",top:15,right:5},children:t(S.Trash,{size:16})})]},a)),t(r.Group,{position:"center",mt:"md",children:t(r.Button,{onClick:o,children:"Add a Paragraph"})}),t(r.Text,{size:"sm",weight:500,mt:"md",children:"Current Configuration:"}),t(B.Prism,{language:"json",colorScheme:"dark",noCopy:!0,children:JSON.stringify(i.values,null,2)})]})})}const Ce=[{value:"text",label:"Text",Panel:Fn},{value:"stats",label:"Stats",Panel:En},{value:"table",label:"Table",Panel:Bn},{value:"sunburst",label:"Sunburst",Panel:qn},{value:"bar-3d",label:"Bar Chart (3D)",Panel:Sn},{value:"cartesian",label:"Cartesian Chart",Panel:Dn},{value:"pie",label:"Pie Chart",Panel:Pn}];function Vn(){const{viz:e,setViz:n}=c.default.useContext(O),[i,o]=E.useInputState(e.type),l=e.type!==i,s=c.default.useCallback(()=>{!l||n(x=>I(f({},x),{type:i}))},[l,i]),a=x=>{n(m=>I(f({},m),{conf:x}))},u=x=>{try{a(JSON.parse(x))}catch(m){console.error(m)}},d=c.default.useMemo(()=>{var x;return(x=Ce.find(m=>m.value===i))==null?void 0:x.Panel},[i,Ce]);return p(X,{children:[t(r.Select,{label:"Visualization",value:i,onChange:o,data:Ce,rightSection:t(r.ActionIcon,{disabled:!l,onClick:s,children:t(S.DeviceFloppy,{size:20})})}),d&&t(d,{conf:e.conf,setConf:a}),!d&&t(r.JsonInput,{minRows:20,label:"Config",value:JSON.stringify(e.conf,null,2),onChange:u})]})}function jn({}){return p(r.Group,{direction:"row",grow:!0,noWrap:!0,align:"stretch",sx:{height:"100%"},children:[t(r.Group,{grow:!0,direction:"column",noWrap:!0,sx:{width:"40%",flexShrink:0,flexGrow:0},children:t(Vn,{})}),t(r.Box,{sx:{height:"100%",flexGrow:1,maxWidth:"60%"},children:t(yn,{})})]})}function Nn({opened:e,close:n}){const{freezeLayout:i}=c.default.useContext(R),{data:o,loading:l,viz:s,title:a}=c.default.useContext(O);return c.default.useEffect(()=>{i(e)},[e]),t(r.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:n,title:a,trapFocus:!0,onDragStart:u=>{u.stopPropagation()},children:t(r.AppShell,{sx:{height:"90vh",maxHeight:"calc(100vh - 185px)",".mantine-AppShell-body":{height:"100%"},main:{height:"100%",width:"100%"}},padding:"md",children:p(r.Tabs,{initialTab:2,children:[p(r.Tabs.Tab,{label:"Data Source",children:[t(r.LoadingOverlay,{visible:l,exitTransitionDuration:0}),t(Ot,{})]}),t(r.Tabs.Tab,{label:"Panel",children:t(Mt,{})}),t(r.Tabs.Tab,{label:"Visualization",children:t(jn,{})})]})})})}function Wn({}){const[e,n]=c.default.useState(!1),i=()=>n(!0),o=()=>n(!1),{title:l,refreshData:s}=c.default.useContext(O),{inEditMode:a}=c.default.useContext(R);return p(r.Group,{position:"apart",noWrap:!0,sx:{borderBottom:"1px solid #eee",paddingBottom:"5px"},children:[t(r.Group,{children:t(Oe,{})}),t(r.Group,{grow:!0,position:"center",children:t(r.Text,{lineClamp:1,weight:"bold",children:l})}),t(r.Group,{position:"right",spacing:0,sx:{height:"28px"},children:p(r.Menu,{children:[t(r.Menu.Item,{onClick:s,icon:t(S.Refresh,{size:14}),children:"Refresh"}),a&&t(r.Menu.Item,{onClick:i,icon:t(S.Settings,{size:14}),children:"Settings"}),t(r.Divider,{}),t(r.Menu.Item,{color:"red",disabled:!0,icon:t(S.Trash,{size:14}),children:"Delete"})]})}),a&&t(Nn,{opened:e,close:o})]})}var gr="";function ve({viz:e,dataSourceID:n,title:i,description:o,update:l,layout:s,id:a}){const u=c.default.useContext(Q),d=c.default.useContext(k),[x,m]=c.default.useState(i),[h,g]=c.default.useState(o),[b,C]=c.default.useState(n),[w,D]=c.default.useState(e),_=c.default.useMemo(()=>{if(!!b)return d.dataSources.find(_e=>_e.id===b)},[b,d.dataSources]);c.default.useEffect(()=>{l==null||l({id:a,layout:s,title:x,description:h,dataSourceID:b,viz:w})},[x,h,_,w,a,s,b]);const{data:A=[],loading:de,refresh:Te}=fe.useRequest(Le({context:u,definitions:d,title:x,dataSource:_}),{refreshDeps:[u,d,_]}),Ge=Te;return t(O.Provider,{value:{data:A,loading:de,title:x,setTitle:m,description:h,setDescription:g,dataSourceID:b,setDataSourceID:C,viz:w,setViz:D,refreshData:Ge},children:p(r.Container,{className:"panel-root",children:[t(Wn,{}),t(nt,{viz:w,data:A,loading:de})]})})}var br="";const Qn=L.WidthProvider(L.Responsive);function at({panels:e,setPanels:n,className:i="layout",cols:o={lg:12,md:10,sm:8,xs:6,xxs:4},rowHeight:l=10,onRemoveItem:s,isDraggable:a,isResizable:u,setLocalCols:d,setBreakpoint:x}){const m=(g,b)=>{x(g),d(b)},h=c.default.useCallback(g=>{const b=new Map;g.forEach(_=>{var A=_,{i:w}=A,D=P(A,["i"]);b.set(w,D)});const C=e.map(w=>I(f({},w),{layout:b.get(w.id)}));n(C)},[e,n]);return t(Qn,{onBreakpointChange:m,onLayoutChange:h,className:i,cols:o,rowHeight:l,isDraggable:a,isResizable:u,children:e.map((w,C)=>{var D=w,{id:g}=D,b=P(D,["id"]);return t("div",{"data-grid":b.layout,children:t(ve,I(f({id:g},b),{destroy:()=>s(g),update:_=>{n(A=>(A.splice(C,1,_),[...A]))}}))},g)})})}function we(e,n){return p(r.Text,{sx:{svg:{verticalAlign:"text-bottom"}},children:[e," ",n]})}function Un({mode:e,setMode:n}){return t(r.SegmentedControl,{value:e,onChange:n,data:[{label:we(t(S.PlayerPlay,{size:20}),"Use"),value:M.Use},{label:we(t(S.Resize,{size:20}),"Layout"),value:M.Layout},{label:we(t(S.Paint,{size:20}),"Content"),value:M.Edit}]})}const Jn=`
11
11
  -- You may reference context data or SQL snippets *by name*
12
12
  -- in SQL or VizConfig.
13
13
  SELECT *
@@ -18,16 +18,16 @@ WHERE
18
18
  -- SQL snippets
19
19
  AND \${author_email_condition}
20
20
  \${order_by_clause}
21
- `;function Un({}){const e=d.default.useContext(Q),{sqlSnippets:n}=d.default.useContext(k),i=d.default.useMemo(()=>{const l=n.reduce((s,a)=>(s[a.key]=a.value,s),{});return JSON.stringify(l,null,2)},[n]),o=d.default.useMemo(()=>JSON.stringify(e,null,2),[e]);return p(r.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee",maxWidth:"48%",overflow:"hidden"},children:[t(r.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:t(r.Text,{weight:500,children:"Context"})}),p(r.Group,{direction:"column",px:"md",pb:"md",sx:{width:"100%"},children:[t(B.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:Qn}),t(r.Text,{weight:500,sx:{flexGrow:0},children:"Avaiable context"}),t(B.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:o}),t(r.Text,{weight:500,sx:{flexGrow:0},children:"Avaiable SQL Snippets"}),t(B.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:i})]})]})}function Jn({value:e,onChange:n}){const i=q.useForm({initialValues:e}),o=d.default.useCallback(h=>{n(h)},[n]),l=d.default.useMemo(()=>!I.default.isEqual(e,i.values),[e,i.values]);d.default.useEffect(()=>{i.reset()},[e]);const{data:s={},loading:a}=pe.useRequest(Ct,{refreshDeps:[]},[]),u=d.default.useMemo(()=>Object.keys(s).map(h=>({label:h,value:h})),[s]),c=d.default.useMemo(()=>{const h=s[i.values.type];return h?h.map(m=>({label:m,value:m})):[]},[s,i.values.type]);return t(r.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee",flexGrow:1},children:p("form",{onSubmit:i.onSubmit(o),children:[p(r.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[t(r.Text,{weight:500,children:"Data Source Configuration"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!l||a,children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,children:[p(r.Group,{grow:!0,children:[t(r.TextInput,f({placeholder:"An ID unique in this dashboard",label:"ID",required:!0,sx:{flex:1},disabled:a},i.getInputProps("id"))),t(r.Select,f({label:"Data Source Type",data:u,sx:{flex:1},disabled:a},i.getInputProps("type"))),t(r.Select,f({label:"Data Source Key",data:c,sx:{flex:1},disabled:a},i.getInputProps("key")))]}),t(r.Textarea,f({autosize:!0,minRows:12,maxRows:24},i.getInputProps("sql")))]})]})})}function Yn({id:e,setID:n}){const{dataSources:i,setDataSources:o}=d.default.useContext(k),l=d.default.useMemo(()=>i.find(a=>a.id===e),[i,e]),s=d.default.useCallback(a=>{if(i.findIndex(c=>c.id===e)===-1){console.error(new Error("Invalid data source id when updating by id"));return}o(c=>{const h=c.findIndex(m=>m.id===e);return c.splice(h,1,a),[...c]}),n(a.id)},[e,i,o,n]);return e?l?p(r.Group,{direction:"row",position:"apart",grow:!0,align:"stretch",noWrap:!0,children:[t(Jn,{value:l,onChange:s}),t(Un,{})]}):t("span",{children:"Invalid Data Source ID"}):null}function Kn({id:e,setID:n}){const{dataSources:i,setDataSources:o}=d.default.useContext(k),l=d.default.useCallback(()=>{var u,c;n((c=(u=i[0])==null?void 0:u.id)!=null?c:"")},[n,i]);d.default.useEffect(()=>{if(!e){l();return}i.findIndex(c=>c.id===e)===-1&&l()},[e,i,l]);const s=d.default.useMemo(()=>i.map(u=>({value:u.id,label:u.id})),[i]),a=d.default.useCallback(()=>{const u={id:E.randomId(),type:"postgresql",key:"",sql:""};o(c=>[...c,u]),n(u.id)},[o,n]);return t(r.Group,{pb:"xl",children:p(r.Group,{position:"left",sx:{maxWidth:"600px",alignItems:"baseline"},children:[t(r.Text,{children:"Select a Data Source"}),t(r.Select,{data:s,value:e,onChange:n,allowDeselect:!1,clearable:!1,sx:{flexGrow:1}}),t(r.Text,{children:"or"}),t(r.Group,{position:"center",mt:"md",children:t(r.Button,{onClick:a,children:"Add a Data Source"})})]})})}function Xn({opened:e,close:n}){const[i,o]=d.default.useState(""),{freezeLayout:l}=d.default.useContext($);return d.default.useEffect(()=>{l(e)},[e]),t(r.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:n,title:"Data Sources",trapFocus:!0,onDragStart:s=>{s.stopPropagation()},children:p(r.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:t(Kn,{id:i,setID:o}),children:[t(Yn,{id:i,setID:o}),t(Ee,{id:i})]})})}function Zn({}){const e=d.default.useContext(Q),n="SELECT *\nFROM commit\nWHERE author_time BETWEEN '${timeRange?.[0].toISOString()}' AND '${timeRange?.[1].toISOString()}'";return p(r.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee",maxWidth:"48%",overflow:"hidden"},children:[t(r.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:t(r.Text,{weight:500,children:"Context"})}),p(r.Group,{direction:"column",px:"md",pb:"md",sx:{width:"100%"},children:[t(B.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:`-- You may refer context data *by name*
21
+ `;function Yn({}){const e=c.default.useContext(Q),{sqlSnippets:n}=c.default.useContext(k),i=c.default.useMemo(()=>{const l=n.reduce((s,a)=>(s[a.key]=a.value,s),{});return JSON.stringify(l,null,2)},[n]),o=c.default.useMemo(()=>JSON.stringify(e,null,2),[e]);return p(r.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee",maxWidth:"48%",overflow:"hidden"},children:[t(r.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:t(r.Text,{weight:500,children:"Context"})}),p(r.Group,{direction:"column",px:"md",pb:"md",sx:{width:"100%"},children:[t(B.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:Jn}),t(r.Text,{weight:500,sx:{flexGrow:0},children:"Avaiable context"}),t(B.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:o}),t(r.Text,{weight:500,sx:{flexGrow:0},children:"Avaiable SQL Snippets"}),t(B.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:i})]})]})}function Kn({value:e,onChange:n}){const i=q.useForm({initialValues:e}),o=c.default.useCallback(x=>{n(x)},[n]),l=c.default.useMemo(()=>!z.default.isEqual(e,i.values),[e,i.values]);c.default.useEffect(()=>{i.reset()},[e]);const{data:s={},loading:a}=fe.useRequest(St,{refreshDeps:[]},[]),u=c.default.useMemo(()=>Object.keys(s).map(x=>({label:x,value:x})),[s]),d=c.default.useMemo(()=>{const x=s[i.values.type];return x?x.map(m=>({label:m,value:m})):[]},[s,i.values.type]);return t(r.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee",flexGrow:1},children:p("form",{onSubmit:i.onSubmit(o),children:[p(r.Group,{position:"left",py:"md",pl:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef"},children:[t(r.Text,{weight:500,children:"Data Source Configuration"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!l||a,children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,children:[p(r.Group,{grow:!0,children:[t(r.TextInput,f({placeholder:"An ID unique in this dashboard",label:"ID",required:!0,sx:{flex:1},disabled:a},i.getInputProps("id"))),t(r.Select,f({label:"Data Source Type",data:u,sx:{flex:1},disabled:a},i.getInputProps("type"))),t(r.Select,f({label:"Data Source Key",data:d,sx:{flex:1},disabled:a},i.getInputProps("key")))]}),t(r.Textarea,f({autosize:!0,minRows:12,maxRows:24},i.getInputProps("sql")))]})]})})}function Xn({id:e,setID:n}){const{dataSources:i,setDataSources:o}=c.default.useContext(k),l=c.default.useMemo(()=>i.find(a=>a.id===e),[i,e]),s=c.default.useCallback(a=>{if(i.findIndex(d=>d.id===e)===-1){console.error(new Error("Invalid data source id when updating by id"));return}o(d=>{const x=d.findIndex(m=>m.id===e);return d.splice(x,1,a),[...d]}),n(a.id)},[e,i,o,n]);return e?l?p(r.Group,{direction:"row",position:"apart",grow:!0,align:"stretch",noWrap:!0,children:[t(Kn,{value:l,onChange:s}),t(Yn,{})]}):t("span",{children:"Invalid Data Source ID"}):null}function Zn({id:e,setID:n}){const{dataSources:i,setDataSources:o}=c.default.useContext(k),l=c.default.useCallback(()=>{var u,d;n((d=(u=i[0])==null?void 0:u.id)!=null?d:"")},[n,i]);c.default.useEffect(()=>{if(!e){l();return}i.findIndex(d=>d.id===e)===-1&&l()},[e,i,l]);const s=c.default.useMemo(()=>i.map(u=>({value:u.id,label:u.id})),[i]),a=c.default.useCallback(()=>{const u={id:E.randomId(),type:"postgresql",key:"",sql:""};o(d=>[...d,u]),n(u.id)},[o,n]);return t(r.Group,{pb:"xl",children:p(r.Group,{position:"left",sx:{maxWidth:"600px",alignItems:"baseline"},children:[t(r.Text,{children:"Select a Data Source"}),t(r.Select,{data:s,value:e,onChange:n,allowDeselect:!1,clearable:!1,sx:{flexGrow:1}}),t(r.Text,{children:"or"}),t(r.Group,{position:"center",mt:"md",children:t(r.Button,{onClick:a,children:"Add a Data Source"})})]})})}function Hn({opened:e,close:n}){const[i,o]=c.default.useState(""),{freezeLayout:l}=c.default.useContext(R);return c.default.useEffect(()=>{l(e)},[e]),t(r.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:n,title:"Data Sources",trapFocus:!0,onDragStart:s=>{s.stopPropagation()},children:p(r.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:t(Zn,{id:i,setID:o}),children:[t(Xn,{id:i,setID:o}),t(Ee,{id:i})]})})}function er({}){const e=c.default.useContext(Q),n="SELECT *\nFROM commit\nWHERE author_time BETWEEN '${timeRange?.[0].toISOString()}' AND '${timeRange?.[1].toISOString()}'";return p(r.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee",maxWidth:"48%",overflow:"hidden"},children:[t(r.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:t(r.Text,{weight:500,children:"Context"})}),p(r.Group,{direction:"column",px:"md",pb:"md",sx:{width:"100%"},children:[t(B.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:`-- You may refer context data *by name*
22
22
  -- in SQL or VizConfig.
23
23
 
24
- ${n}`}),t(r.Text,{weight:500,sx:{flexGrow:0},children:"Avaiable context entries"}),t(B.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:JSON.stringify(e,null,2)})]})]})}function Hn({}){const{sqlSnippets:e,setSQLSnippets:n}=d.default.useContext(k),i=`SELECT *
24
+ ${n}`}),t(r.Text,{weight:500,sx:{flexGrow:0},children:"Avaiable context entries"}),t(B.Prism,{language:"json",sx:{width:"100%"},noCopy:!0,colorScheme:"dark",children:JSON.stringify(e,null,2)})]})]})}function tr({}){const{sqlSnippets:e,setSQLSnippets:n}=c.default.useContext(k),i=`SELECT *
25
25
  FROM commit
26
- WHERE \${author_time_condition}`,o=d.default.useMemo(()=>({snippets:q.formList(e!=null?e:[])}),[e]),l=q.useForm({initialValues:o}),s=()=>l.addListItem("snippets",{key:E.randomId(),value:""}),a=d.default.useMemo(()=>!I.default.isEqual(l.values,o),[l.values,o]),u=({snippets:c})=>{n(c)};return t(r.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee"},children:p("form",{onSubmit:l.onSubmit(u),children:[p(r.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:[t(r.Text,{weight:500,children:"SQL Snippets"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!a,children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{px:"md",pb:"md",children:[t(B.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,trim:!1,colorScheme:"dark",children:`-- You may refer context data *by name*
26
+ WHERE \${author_time_condition}`,o=c.default.useMemo(()=>({snippets:q.formList(e!=null?e:[])}),[e]),l=q.useForm({initialValues:o}),s=()=>l.addListItem("snippets",{key:E.randomId(),value:""}),a=c.default.useMemo(()=>!z.default.isEqual(l.values,o),[l.values,o]),u=({snippets:d})=>{n(d)};return t(r.Group,{direction:"column",grow:!0,sx:{border:"1px solid #eee"},children:p("form",{onSubmit:l.onSubmit(u),children:[p(r.Group,{position:"left",pl:"md",py:"md",sx:{borderBottom:"1px solid #eee",background:"#efefef",flexGrow:0},children:[t(r.Text,{weight:500,children:"SQL Snippets"}),t(r.ActionIcon,{type:"submit",mr:5,variant:"filled",color:"blue",disabled:!a,children:t(S.DeviceFloppy,{size:20})})]}),p(r.Group,{px:"md",pb:"md",children:[t(B.Prism,{language:"sql",sx:{width:"100%"},noCopy:!0,trim:!1,colorScheme:"dark",children:`-- You may refer context data *by name*
27
27
  -- in SQL or VizConfig.
28
28
 
29
29
  ${i}
30
30
 
31
31
  -- where author_time_condition is:
32
32
  author_time BETWEEN '\${timeRange?.[0].toISOString()}' AND '\${timeRange?.[1].toISOString()}'
33
- `}),p(r.Group,{direction:"column",sx:{width:"100%",position:"relative"},grow:!0,children:[l.values.snippets.map((c,h)=>p(r.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[t(r.TextInput,f({label:"Key",required:!0},l.getListInputProps("snippets",h,"key"))),t(r.Textarea,f({minRows:3,label:"Value",required:!0},l.getListInputProps("snippets",h,"value"))),t(r.ActionIcon,{color:"red",variant:"hover",onClick:()=>l.removeListItem("snippets",h),sx:{position:"absolute",top:15,right:5},children:t(S.Trash,{size:16})})]},h)),t(r.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"40%"},mx:"auto",children:t(r.Button,{variant:"default",onClick:s,children:"Add a snippet"})})]})]})]})})}function er({opened:e,close:n}){const{freezeLayout:i}=d.default.useContext($);return d.default.useEffect(()=>{i(e)},[e]),t(r.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:n,title:"SQL Snippets",trapFocus:!0,onDragStart:o=>{o.stopPropagation()},children:t(r.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:p(r.Group,{direction:"row",position:"apart",grow:!0,align:"stretch",noWrap:!0,children:[t(Hn,{}),t(Zn,{})]})})})}function tr({mode:e,setMode:n,hasChanges:i,addPanel:o,saveChanges:l}){const{inLayoutMode:s,inEditMode:a,inUseMode:u}=d.default.useContext($),[c,h]=d.default.useState(!1),m=()=>h(!0),x=()=>h(!1),[g,y]=d.default.useState(!1),C=()=>y(!0),T=()=>y(!1);return p(r.Group,{position:"apart",pt:"sm",pb:"xs",children:[t(r.Group,{position:"left",children:t(Wn,{mode:e,setMode:n})}),p(r.Group,{position:"right",children:[!u&&t(r.Button,{variant:"default",size:"sm",onClick:o,leftIcon:t(S.PlaylistAdd,{size:20}),children:"Add a Panel"}),a&&t(r.Button,{variant:"default",size:"sm",onClick:C,leftIcon:t(S.ClipboardText,{size:20}),children:"SQL Snippets"}),a&&t(r.Button,{variant:"default",size:"sm",onClick:m,leftIcon:t(S.Database,{size:20}),children:"Data Sources"}),!u&&t(r.Button,{variant:"default",size:"sm",onClick:l,disabled:!i,leftIcon:t(S.DeviceFloppy,{size:20}),children:"Save Changes"}),!u&&t(r.Button,{color:"red",size:"sm",disabled:!i,leftIcon:t(S.Recycle,{size:20}),children:"Revert Changes"})]}),t(Xn,{opened:c,close:x}),t(er,{opened:g,close:T}),u&&t(r.Button,{variant:"default",size:"sm",disabled:!0,leftIcon:t(S.Share,{size:20}),children:"Share"})]})}function nr({context:e,dashboard:n,update:i,className:o="dashboard"}){const[l,s]=d.default.useState(!1),[a,u]=d.default.useState(),[c,h]=d.default.useState(),[m,x]=d.default.useState(n.panels),[g,y]=d.default.useState(n.definition.sqlSnippets),[C,T]=d.default.useState(n.definition.dataSources),[z,A]=d.default.useState(M.Edit),L=d.default.useMemo(()=>{const F=R=>JSON.parse(JSON.stringify(R));return!I.default.isEqual(F(m),F(n.panels))||!I.default.isEqual(g,n.definition.sqlSnippets)?!0:!I.default.isEqual(C,n.definition.dataSources)},[n,m,g,C]),ue=async()=>{const F=_(f({},n),{panels:m,definition:{sqlSnippets:g,dataSources:C}});await i(F)},Te=()=>{const F=E.randomId(),de={id:F,layout:{x:0,y:1/0,w:3,h:15},title:`New Panel - ${F}`,description:"",dataSourceID:"",viz:{type:"text",conf:{}}};x(R=>[...R,de])},Ge=F=>{const de=m.findIndex(R=>R.id===F);x(R=>(R.splice(de,1),[...R]))},ze=z===M.Edit,_e=z===M.Layout,lr=z===M.Use,ar=d.default.useMemo(()=>({sqlSnippets:g,setSQLSnippets:y,dataSources:C,setDataSources:T}),[g,y,C,T]);return t(Q.Provider,{value:e,children:t("div",{className:o,children:t(k.Provider,{value:ar,children:p($.Provider,{value:{layoutFrozen:l,freezeLayout:s,mode:z,inEditMode:ze,inLayoutMode:_e,inUseMode:lr},children:[t(tr,{mode:z,setMode:A,hasChanges:L,addPanel:Te,saveChanges:ue}),t(lt,{panels:m,setPanels:x,isDraggable:_e,isResizable:_e,onRemoveItem:Ge,setLocalCols:h,setBreakpoint:u})]})})})})}const rr=P.WidthProvider(P.Responsive);function ir({panels:e,className:n="layout",cols:i={lg:12,md:10,sm:8,xs:6,xxs:4},rowHeight:o=10}){return t(rr,{className:n,cols:i,rowHeight:o,isDraggable:!1,isResizable:!1,children:e.map(a=>{var u=a,{id:l}=u,s=D(u,["id"]);return t("div",{"data-grid":s.layout,children:t(ve,f({id:l},s))},l)})})}function or({context:e,dashboard:n,className:i="dashboard"}){const o=d.default.useMemo(()=>_(f({},n.definition),{setSQLSnippets:()=>{},setDataSources:()=>{}}),[n]);return t(Q.Provider,{value:e,children:t("div",{className:i,children:t(k.Provider,{value:o,children:t($.Provider,{value:{layoutFrozen:!0,freezeLayout:()=>{},mode:M.Use,inEditMode:!1,inLayoutMode:!1,inUseMode:!0},children:t(ir,{panels:n.panels})})})})})}b.ContextInfoContext=Q,b.Dashboard=nr,b.DashboardLayout=lt,b.DashboardMode=M,b.DefinitionContext=k,b.LayoutStateContext=$,b.Panel=ve,b.PanelContext=O,b.ReadOnlyDashboard=or,b.initialContextInfoContext=vt,Object.defineProperties(b,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
33
+ `}),p(r.Group,{direction:"column",sx:{width:"100%",position:"relative"},grow:!0,children:[l.values.snippets.map((d,x)=>p(r.Group,{direction:"column",grow:!0,my:0,p:"md",pr:40,sx:{border:"1px solid #eee",position:"relative"},children:[t(r.TextInput,f({label:"Key",required:!0},l.getListInputProps("snippets",x,"key"))),t(r.Textarea,f({minRows:3,label:"Value",required:!0},l.getListInputProps("snippets",x,"value"))),t(r.ActionIcon,{color:"red",variant:"hover",onClick:()=>l.removeListItem("snippets",x),sx:{position:"absolute",top:15,right:5},children:t(S.Trash,{size:16})})]},x)),t(r.Group,{position:"center",mt:"xl",grow:!0,sx:{width:"40%"},mx:"auto",children:t(r.Button,{variant:"default",onClick:s,children:"Add a snippet"})})]})]})]})})}function nr({opened:e,close:n}){const{freezeLayout:i}=c.default.useContext(R);return c.default.useEffect(()=>{i(e)},[e]),t(r.Modal,{size:"96vw",overflow:"inside",opened:e,onClose:n,title:"SQL Snippets",trapFocus:!0,onDragStart:o=>{o.stopPropagation()},children:t(r.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:p(r.Group,{direction:"row",position:"apart",grow:!0,align:"stretch",noWrap:!0,children:[t(tr,{}),t(er,{})]})})})}function rr({mode:e,setMode:n,hasChanges:i,addPanel:o,saveChanges:l}){const{inLayoutMode:s,inEditMode:a,inUseMode:u}=c.default.useContext(R),[d,x]=c.default.useState(!1),m=()=>x(!0),h=()=>x(!1),[g,b]=c.default.useState(!1),C=()=>b(!0),w=()=>b(!1);return p(r.Group,{position:"apart",pt:"sm",pb:"xs",children:[t(r.Group,{position:"left",children:t(Un,{mode:e,setMode:n})}),p(r.Group,{position:"right",children:[!u&&t(r.Button,{variant:"default",size:"sm",onClick:o,leftIcon:t(S.PlaylistAdd,{size:20}),children:"Add a Panel"}),a&&t(r.Button,{variant:"default",size:"sm",onClick:C,leftIcon:t(S.ClipboardText,{size:20}),children:"SQL Snippets"}),a&&t(r.Button,{variant:"default",size:"sm",onClick:m,leftIcon:t(S.Database,{size:20}),children:"Data Sources"}),!u&&t(r.Button,{variant:"default",size:"sm",onClick:l,disabled:!i,leftIcon:t(S.DeviceFloppy,{size:20}),children:"Save Changes"}),!u&&t(r.Button,{color:"red",size:"sm",disabled:!i,leftIcon:t(S.Recycle,{size:20}),children:"Revert Changes"})]}),t(Hn,{opened:d,close:h}),t(nr,{opened:g,close:w}),u&&t(r.Button,{variant:"default",size:"sm",disabled:!0,leftIcon:t(S.Share,{size:20}),children:"Share"})]})}function ir({context:e,dashboard:n,update:i,className:o="dashboard",config:l}){Y.baseURL!==l.apiBaseURL&&(Y.baseURL=l.apiBaseURL);const[s,a]=c.default.useState(!1),[u,d]=c.default.useState(),[x,m]=c.default.useState(),[h,g]=c.default.useState(n.panels),[b,C]=c.default.useState(n.definition.sqlSnippets),[w,D]=c.default.useState(n.definition.dataSources),[_,A]=c.default.useState(M.Edit),de=c.default.useMemo(()=>{const $=N=>JSON.parse(JSON.stringify(N));return!z.default.isEqual($(h),$(n.panels))||!z.default.isEqual(b,n.definition.sqlSnippets)?!0:!z.default.isEqual(w,n.definition.dataSources)},[n,h,b,w]),Te=async()=>{const $=I(f({},n),{panels:h,definition:{sqlSnippets:b,dataSources:w}});await i($)},Ge=()=>{const $=E.randomId(),ce={id:$,layout:{x:0,y:1/0,w:3,h:15},title:`New Panel - ${$}`,description:"",dataSourceID:"",viz:{type:"text",conf:{}}};g(N=>[...N,ce])},_e=$=>{const ce=h.findIndex(N=>N.id===$);g(N=>(N.splice(ce,1),[...N]))},sr=_===M.Edit,ze=_===M.Layout,ur=_===M.Use,dr=c.default.useMemo(()=>({sqlSnippets:b,setSQLSnippets:C,dataSources:w,setDataSources:D}),[b,C,w,D]);return t(Q.Provider,{value:e,children:t("div",{className:o,children:t(k.Provider,{value:dr,children:p(R.Provider,{value:{layoutFrozen:s,freezeLayout:a,mode:_,inEditMode:sr,inLayoutMode:ze,inUseMode:ur},children:[t(rr,{mode:_,setMode:A,hasChanges:de,addPanel:Ge,saveChanges:Te}),t(at,{panels:h,setPanels:g,isDraggable:ze,isResizable:ze,onRemoveItem:_e,setLocalCols:m,setBreakpoint:d})]})})})})}const or=L.WidthProvider(L.Responsive);function lr({panels:e,className:n="layout",cols:i={lg:12,md:10,sm:8,xs:6,xxs:4},rowHeight:o=10}){return t(or,{className:n,cols:i,rowHeight:o,isDraggable:!1,isResizable:!1,children:e.map(a=>{var u=a,{id:l}=u,s=P(u,["id"]);return t("div",{"data-grid":s.layout,children:t(ve,f({id:l},s))},l)})})}function ar({context:e,dashboard:n,className:i="dashboard",config:o}){Y.baseURL!==o.apiBaseURL&&(Y.baseURL=o.apiBaseURL);const l=c.default.useMemo(()=>I(f({},n.definition),{setSQLSnippets:()=>{},setDataSources:()=>{}}),[n]);return t(Q.Provider,{value:e,children:t("div",{className:i,children:t(k.Provider,{value:l,children:t(R.Provider,{value:{layoutFrozen:!0,freezeLayout:()=>{},mode:M.Use,inEditMode:!1,inLayoutMode:!1,inUseMode:!0},children:t(lr,{panels:n.panels})})})})})}y.ContextInfoContext=Q,y.Dashboard=ir,y.DashboardLayout=at,y.DashboardMode=M,y.DefinitionContext=k,y.LayoutStateContext=R,y.Panel=ve,y.PanelContext=O,y.ReadOnlyDashboard=ar,y.initialContextInfoContext=Ct,Object.defineProperties(y,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -1,11 +1,12 @@
1
1
  /// <reference types="react" />
2
- import { IDashboard } from "../types/dashboard";
2
+ import { IDashboard, IDashboardConfig } from "../types/dashboard";
3
3
  import { ContextInfoContextType } from "../contexts";
4
4
  interface IDashboardProps {
5
5
  context: ContextInfoContextType;
6
6
  dashboard: IDashboard;
7
7
  className?: string;
8
8
  update: (dashboard: IDashboard) => Promise<void>;
9
+ config: IDashboardConfig;
9
10
  }
10
- export declare function Dashboard({ context, dashboard, update, className, }: IDashboardProps): JSX.Element;
11
+ export declare function Dashboard({ context, dashboard, update, className, config, }: IDashboardProps): JSX.Element;
11
12
  export {};
@@ -1,10 +1,11 @@
1
1
  /// <reference types="react" />
2
- import { IDashboard } from "../types/dashboard";
2
+ import { IDashboard, IDashboardConfig } from "../types/dashboard";
3
3
  import { ContextInfoContextType } from "../contexts";
4
4
  interface IReadOnlyDashboard {
5
5
  context: ContextInfoContextType;
6
6
  dashboard: IDashboard;
7
7
  className?: string;
8
+ config: IDashboardConfig;
8
9
  }
9
- export declare function ReadOnlyDashboard({ context, dashboard, className, }: IReadOnlyDashboard): JSX.Element;
10
+ export declare function ReadOnlyDashboard({ context, dashboard, className, config, }: IReadOnlyDashboard): JSX.Element;
10
11
  export {};
@@ -1,8 +1,13 @@
1
1
  import React from "react";
2
- export declare class ErrorBoundary extends React.Component {
3
- constructor(props: any);
4
- static getDerivedStateFromError(): {
5
- hasError: boolean;
6
- };
7
- render(): any;
2
+ declare type PropType = {
3
+ children: React.ReactNode;
4
+ };
5
+ declare type StateType = {
6
+ error: null | any;
7
+ };
8
+ export declare class ErrorBoundary extends React.Component<PropType, StateType> {
9
+ constructor(props: PropType);
10
+ componentDidCatch(error: any): void;
11
+ render(): string | number | boolean | React.ReactFragment | JSX.Element | null | undefined;
8
12
  }
13
+ export {};
@@ -4,5 +4,5 @@ interface IColorArrayInput {
4
4
  value: string[];
5
5
  onChange: (value: string[]) => void;
6
6
  }
7
- export declare function ColorArrayInput({ label, value, onChange }: IColorArrayInput): JSX.Element;
7
+ export declare const ColorArrayInput: React.ForwardRefExoticComponent<IColorArrayInput & React.RefAttributes<unknown>>;
8
8
  export {};
@@ -1,7 +1,7 @@
1
- /// <reference types="react" />
1
+ import React from "react";
2
2
  interface IMantineColorSelector {
3
3
  value?: string;
4
4
  onChange: (value: string) => void;
5
5
  }
6
- export declare function MantineColorSelector({ value, onChange }: IMantineColorSelector): JSX.Element;
6
+ export declare const MantineColorSelector: React.ForwardRefExoticComponent<IMantineColorSelector & React.RefAttributes<unknown>>;
7
7
  export {};
@@ -1,8 +1,8 @@
1
- /// <reference types="react" />
1
+ import React from "react";
2
2
  interface IMantineFontWeightSlider {
3
3
  label: string;
4
4
  value: string;
5
5
  onChange: (value: string) => void;
6
6
  }
7
- export declare function MantineFontWeightSlider({ label, value, onChange }: IMantineFontWeightSlider): JSX.Element;
7
+ export declare const MantineFontWeightSlider: React.ForwardRefExoticComponent<IMantineFontWeightSlider & React.RefAttributes<unknown>>;
8
8
  export {};
@@ -1,4 +1,4 @@
1
- /// <reference types="react" />
1
+ import React from "react";
2
2
  export declare type TNumbroFormat = {
3
3
  mantissa: number;
4
4
  output: 'percent' | 'number';
@@ -9,5 +9,5 @@ interface INumbroFormatSelector {
9
9
  value: TNumbroFormat;
10
10
  onChange: (v: TNumbroFormat) => void;
11
11
  }
12
- export declare function NumbroFormatSelector({ value, onChange }: INumbroFormatSelector): JSX.Element;
12
+ export declare const NumbroFormatSelector: React.ForwardRefExoticComponent<INumbroFormatSelector & React.RefAttributes<unknown>>;
13
13
  export {};
@@ -4,5 +4,5 @@ interface ITextArrayInput {
4
4
  value: string[] | number[];
5
5
  onChange: (value: string[] | number[]) => void;
6
6
  }
7
- export declare function TextArrayInput({ label, value, onChange }: ITextArrayInput): JSX.Element;
7
+ export declare const TextArrayInput: React.ForwardRefExoticComponent<ITextArrayInput & React.RefAttributes<unknown>>;
8
8
  export {};
@@ -1,9 +1,10 @@
1
1
  /// <reference types="react" />
2
+ import { IVizStatsConf } from './types';
2
3
  interface IVizStats {
3
- conf: any;
4
+ conf: IVizStatsConf;
4
5
  data: any;
5
6
  width: number;
6
7
  height: number;
7
8
  }
8
- export declare function VizStats({ conf: { template, size, color, ...rest }, data }: IVizStats): JSX.Element;
9
+ export declare function VizStats({ conf: { content, size, color, ...rest }, data }: IVizStats): JSX.Element;
9
10
  export {};
@@ -1,3 +1,4 @@
1
+ import { TNumbroFormat } from "../../settings/common/numbro-format-selector";
1
2
  export declare type ColorConf = {
2
3
  type: 'static';
3
4
  staticColor: string;
@@ -9,10 +10,16 @@ export declare type ColorConf = {
9
10
  } | {
10
11
  type: 'piecewise';
11
12
  };
13
+ export interface IVizStatsContent {
14
+ prefix: string;
15
+ data_field: string;
16
+ formatter: TNumbroFormat;
17
+ postfix: string;
18
+ }
12
19
  export interface IVizStatsConf {
13
20
  align: 'center';
14
21
  color: ColorConf;
15
22
  size: string;
16
23
  weight: string;
17
- template: string;
24
+ content: IVizStatsContent;
18
25
  }
@@ -42,3 +42,6 @@ export interface IDashboard {
42
42
  definition: IDashboardDefinition;
43
43
  panels: IDashboardPanel[];
44
44
  }
45
+ export interface IDashboardConfig {
46
+ apiBaseURL: string;
47
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devtable/dashboard",
3
- "version": "1.13.0",
3
+ "version": "1.15.1",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org/"