drizzle-cube 0.1.68 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/adapters/{compiler-CghsDLXl.cjs → compiler-DP1pPIcg.cjs} +9 -9
  2. package/dist/adapters/{compiler-BnHK-nxh.js → compiler-gcKytLwd.js} +12 -13
  3. package/dist/adapters/express/index.cjs +1 -1
  4. package/dist/adapters/express/index.js +1 -1
  5. package/dist/adapters/fastify/index.cjs +1 -1
  6. package/dist/adapters/fastify/index.js +1 -1
  7. package/dist/adapters/hono/index.cjs +1 -1
  8. package/dist/adapters/hono/index.js +1 -1
  9. package/dist/adapters/nextjs/index.cjs +1 -1
  10. package/dist/adapters/nextjs/index.js +1 -1
  11. package/dist/client/charts/ChartLoader.d.ts +56 -0
  12. package/dist/client/charts/lazyChartConfigRegistry.d.ts +90 -0
  13. package/dist/client/charts.d.ts +6 -0
  14. package/dist/client/charts.js +38 -15
  15. package/dist/client/charts.js.map +1 -1
  16. package/dist/client/chunks/chart-activitygridchart-BRk9BNnp.js +3713 -0
  17. package/dist/client/chunks/chart-activitygridchart-BRk9BNnp.js.map +1 -0
  18. package/dist/client/chunks/chart-activitygridchart-config-D9CgNH02.js +51 -0
  19. package/dist/client/chunks/chart-activitygridchart-config-D9CgNH02.js.map +1 -0
  20. package/dist/client/chunks/chart-areachart-Beu8sO9v.js +204 -0
  21. package/dist/client/chunks/chart-areachart-Beu8sO9v.js.map +1 -0
  22. package/dist/client/chunks/chart-areachart-config-InZgxubz.js +66 -0
  23. package/dist/client/chunks/chart-areachart-config-InZgxubz.js.map +1 -0
  24. package/dist/client/chunks/chart-barchart-BzoejYkT.js +177 -0
  25. package/dist/client/chunks/chart-barchart-BzoejYkT.js.map +1 -0
  26. package/dist/client/chunks/chart-barchart-config-DxatOnVV.js +59 -0
  27. package/dist/client/chunks/chart-barchart-config-DxatOnVV.js.map +1 -0
  28. package/dist/client/chunks/chart-bubblechart-Dg7sT_Mm.js +210 -0
  29. package/dist/client/chunks/chart-bubblechart-Dg7sT_Mm.js.map +1 -0
  30. package/dist/client/chunks/chart-bubblechart-config-CcZTMTCx.js +59 -0
  31. package/dist/client/chunks/chart-bubblechart-config-CcZTMTCx.js.map +1 -0
  32. package/dist/client/chunks/chart-chartcontainer-CdwzIKP1.js +103 -0
  33. package/dist/client/chunks/chart-chartcontainer-CdwzIKP1.js.map +1 -0
  34. package/dist/client/chunks/chart-charttooltip-NrFVM1cJ.js +26 -0
  35. package/dist/client/chunks/chart-charttooltip-NrFVM1cJ.js.map +1 -0
  36. package/dist/client/chunks/chart-datatable-BvV7gLPZ.js +57 -0
  37. package/dist/client/chunks/chart-datatable-BvV7gLPZ.js.map +1 -0
  38. package/dist/client/chunks/chart-datatable-config-D7mojhYA.js +22 -0
  39. package/dist/client/chunks/chart-datatable-config-D7mojhYA.js.map +1 -0
  40. package/dist/client/chunks/chart-kpidelta-config-icJXuFxe.js +99 -0
  41. package/dist/client/chunks/chart-kpidelta-config-icJXuFxe.js.map +1 -0
  42. package/dist/client/chunks/chart-kpidelta-p1lVVG5v.js +434 -0
  43. package/dist/client/chunks/chart-kpidelta-p1lVVG5v.js.map +1 -0
  44. package/dist/client/chunks/chart-kpinumber-BFtxFeqq.js +398 -0
  45. package/dist/client/chunks/chart-kpinumber-BFtxFeqq.js.map +1 -0
  46. package/dist/client/chunks/chart-kpinumber-config-T39g03ud.js +77 -0
  47. package/dist/client/chunks/chart-kpinumber-config-T39g03ud.js.map +1 -0
  48. package/dist/client/chunks/chart-kpitext-CX1s1u8B.js +165 -0
  49. package/dist/client/chunks/chart-kpitext-CX1s1u8B.js.map +1 -0
  50. package/dist/client/chunks/chart-kpitext-config-BbJGXAVk.js +49 -0
  51. package/dist/client/chunks/chart-kpitext-config-BbJGXAVk.js.map +1 -0
  52. package/dist/client/chunks/chart-linechart-Dgb10zbj.js +155 -0
  53. package/dist/client/chunks/chart-linechart-Dgb10zbj.js.map +1 -0
  54. package/dist/client/chunks/chart-linechart-config-BS1qVC8K.js +54 -0
  55. package/dist/client/chunks/chart-linechart-config-BS1qVC8K.js.map +1 -0
  56. package/dist/client/chunks/chart-markdownchart-C3FAQFuO.js +254 -0
  57. package/dist/client/chunks/chart-markdownchart-C3FAQFuO.js.map +1 -0
  58. package/dist/client/chunks/chart-markdownchart-config-DMCD8phf.js +62 -0
  59. package/dist/client/chunks/chart-markdownchart-config-DMCD8phf.js.map +1 -0
  60. package/dist/client/chunks/chart-piechart-B-0BQh-d.js +121 -0
  61. package/dist/client/chunks/chart-piechart-B-0BQh-d.js.map +1 -0
  62. package/dist/client/chunks/chart-piechart-config-6ZK8XaSX.js +32 -0
  63. package/dist/client/chunks/chart-piechart-config-6ZK8XaSX.js.map +1 -0
  64. package/dist/client/chunks/chart-radarchart-BwZM1yTd.js +124 -0
  65. package/dist/client/chunks/chart-radarchart-BwZM1yTd.js.map +1 -0
  66. package/dist/client/chunks/chart-radarchart-config-CCWOkkwO.js +38 -0
  67. package/dist/client/chunks/chart-radarchart-config-CCWOkkwO.js.map +1 -0
  68. package/dist/client/chunks/chart-radialbarchart-CythI1zx.js +109 -0
  69. package/dist/client/chunks/chart-radialbarchart-CythI1zx.js.map +1 -0
  70. package/dist/client/chunks/chart-radialbarchart-config-DicXYrMW.js +31 -0
  71. package/dist/client/chunks/chart-radialbarchart-config-DicXYrMW.js.map +1 -0
  72. package/dist/client/chunks/chart-scatterchart-config-DgYa-5vm.js +41 -0
  73. package/dist/client/chunks/chart-scatterchart-config-DgYa-5vm.js.map +1 -0
  74. package/dist/client/chunks/chart-scatterchart-om9-qmtE.js +201 -0
  75. package/dist/client/chunks/chart-scatterchart-om9-qmtE.js.map +1 -0
  76. package/dist/client/chunks/chart-treemapchart-Dc35Miif.js +253 -0
  77. package/dist/client/chunks/chart-treemapchart-Dc35Miif.js.map +1 -0
  78. package/dist/client/chunks/chart-treemapchart-config-DGhteyBe.js +40 -0
  79. package/dist/client/chunks/chart-treemapchart-config-DGhteyBe.js.map +1 -0
  80. package/dist/client/chunks/charts-DL9XOlaK.js +286 -0
  81. package/dist/client/chunks/charts-DL9XOlaK.js.map +1 -0
  82. package/dist/client/chunks/{icons-Bky5w1eH.js → icons-D-n_woAP.js} +833 -783
  83. package/dist/client/chunks/icons-D-n_woAP.js.map +1 -0
  84. package/dist/client/chunks/index-DpEuGmcW.js +8707 -0
  85. package/dist/client/chunks/index-DpEuGmcW.js.map +1 -0
  86. package/dist/client/components/QueryBuilder/ShareWarningModal.d.ts +9 -0
  87. package/dist/client/components/QueryBuilder/shareUtils.d.ts +59 -0
  88. package/dist/client/components/QueryBuilder/types.d.ts +21 -1
  89. package/dist/client/components.js +11 -11
  90. package/dist/client/hooks.js +3 -3
  91. package/dist/client/index.d.ts +18 -1
  92. package/dist/client/index.js +9135 -39
  93. package/dist/client/index.js.map +1 -1
  94. package/dist/client/providers.js +4 -4
  95. package/dist/client/styles.css +1 -1
  96. package/dist/client-bundle-stats.html +1 -1
  97. package/dist/server/index.cjs +16 -16
  98. package/dist/server/index.d.ts +0 -286
  99. package/dist/server/index.js +767 -881
  100. package/package.json +8 -2
  101. package/dist/client/chunks/charts-jwgcWeFt.js +0 -2580
  102. package/dist/client/chunks/charts-jwgcWeFt.js.map +0 -1
  103. package/dist/client/chunks/components-fN-QOY6G.js +0 -21835
  104. package/dist/client/chunks/components-fN-QOY6G.js.map +0 -1
  105. package/dist/client/chunks/icons-Bky5w1eH.js.map +0 -1
  106. package/dist/client/chunks/providers-D7zRgZrO.js +0 -308
  107. package/dist/client/chunks/providers-D7zRgZrO.js.map +0 -1
@@ -0,0 +1,57 @@
1
+ import { jsx as e, jsxs as d } from "react/jsx-runtime";
2
+ import { u as m } from "./chart-activitygridchart-BRk9BNnp.js";
3
+ function b({
4
+ data: t,
5
+ chartConfig: l,
6
+ height: r = 300
7
+ }) {
8
+ const { getFieldLabel: n } = m();
9
+ if (!t || t.length === 0)
10
+ return /* @__PURE__ */ e(
11
+ "div",
12
+ {
13
+ className: "flex items-center justify-center w-full",
14
+ style: { height: r },
15
+ children: /* @__PURE__ */ d("div", { className: "text-center text-dc-text-muted", children: [
16
+ /* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "No data available" }),
17
+ /* @__PURE__ */ e("div", { className: "text-xs text-dc-text-secondary", children: "No data to display in table" })
18
+ ] })
19
+ }
20
+ );
21
+ const a = Object.keys(t[0] || {}), c = l?.xAxis && l.xAxis.length > 0 ? l.xAxis.filter((s) => a.includes(s)) : a;
22
+ return c.length === 0 ? /* @__PURE__ */ e(
23
+ "div",
24
+ {
25
+ className: "flex items-center justify-center w-full",
26
+ style: { height: r },
27
+ children: /* @__PURE__ */ d("div", { className: "text-center text-dc-text-muted", children: [
28
+ /* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "No columns available" }),
29
+ /* @__PURE__ */ e("div", { className: "text-xs text-dc-text-secondary", children: "Data structure is invalid" })
30
+ ] })
31
+ }
32
+ ) : /* @__PURE__ */ e("div", { className: "w-full overflow-auto", style: { height: r }, children: /* @__PURE__ */ d("table", { className: "min-w-full divide-y border-dc-border", children: [
33
+ /* @__PURE__ */ e("thead", { className: "bg-dc-surface-secondary sticky top-0", children: /* @__PURE__ */ e("tr", { children: c.map((s) => /* @__PURE__ */ e(
34
+ "th",
35
+ {
36
+ className: "px-3 py-2 text-left text-xs font-medium text-dc-text-muted uppercase tracking-wider",
37
+ children: n(s)
38
+ },
39
+ s
40
+ )) }) }),
41
+ /* @__PURE__ */ e("tbody", { className: "bg-dc-surface divide-y border-dc-border", children: t.map((s, o) => /* @__PURE__ */ e("tr", { className: "hover:bg-dc-surface-secondary", children: c.map((i) => /* @__PURE__ */ e(
42
+ "td",
43
+ {
44
+ className: "px-3 py-2 whitespace-nowrap text-sm text-dc-text",
45
+ children: x(s[i])
46
+ },
47
+ i
48
+ )) }, o)) })
49
+ ] }) });
50
+ }
51
+ function x(t) {
52
+ return t == null ? "" : typeof t == "number" ? t.toLocaleString() : typeof t == "boolean" ? t ? "Yes" : "No" : String(t);
53
+ }
54
+ export {
55
+ b as default
56
+ };
57
+ //# sourceMappingURL=chart-datatable-BvV7gLPZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-datatable-BvV7gLPZ.js","sources":["../../../src/client/components/charts/DataTable.tsx"],"sourcesContent":["/**\n * Simple Data Table component\n * Minimal styling with Tailwind\n */\n\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function DataTable({ \n data, \n chartConfig,\n height = 300 \n}: ChartProps) {\n const { getFieldLabel } = useCubeContext()\n \n if (!data || data.length === 0) {\n return (\n <div\n className=\"flex items-center justify-center w-full\"\n style={{ height }}\n >\n <div className=\"text-center text-dc-text-muted\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data to display in table</div>\n </div>\n </div>\n )\n }\n\n // Use chartConfig.xAxis to filter columns, or show all if not specified\n const allColumns = Object.keys(data[0] || {})\n const columns = chartConfig?.xAxis && chartConfig.xAxis.length > 0 \n ? chartConfig.xAxis.filter(col => allColumns.includes(col))\n : allColumns\n\n if (columns.length === 0) {\n return (\n <div\n className=\"flex items-center justify-center w-full\"\n style={{ height }}\n >\n <div className=\"text-center text-dc-text-muted\">\n <div className=\"text-sm font-semibold mb-1\">No columns available</div>\n <div className=\"text-xs text-dc-text-secondary\">Data structure is invalid</div>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"w-full overflow-auto\" style={{ height }}>\n <table className=\"min-w-full divide-y border-dc-border\">\n <thead className=\"bg-dc-surface-secondary sticky top-0\">\n <tr>\n {columns.map((column) => (\n <th\n key={column}\n className=\"px-3 py-2 text-left text-xs font-medium text-dc-text-muted uppercase tracking-wider\"\n >\n {getFieldLabel(column)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody className=\"bg-dc-surface divide-y border-dc-border\">\n {data.map((row, index) => (\n <tr key={index} className=\"hover:bg-dc-surface-secondary\">\n {columns.map((column) => (\n <td\n key={column}\n className=\"px-3 py-2 whitespace-nowrap text-sm text-dc-text\"\n >\n {formatCellValue(row[column])}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\nfunction formatCellValue(value: any): string {\n if (value == null) return ''\n if (typeof value === 'number') {\n return value.toLocaleString()\n }\n if (typeof value === 'boolean') {\n return value ? 'Yes' : 'No'\n }\n return String(value)\n}"],"names":["DataTable","data","chartConfig","height","getFieldLabel","useCubeContext","jsx","jsxs","allColumns","columns","col","column","row","index","formatCellValue","value"],"mappings":";;AAQA,SAAwBA,EAAU;AAAA,EAChC,MAAAC;AAAA,EACA,aAAAC;AAAA,EACA,QAAAC,IAAS;AACX,GAAe;AACb,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA;AAE1B,MAAI,CAACJ,KAAQA,EAAK,WAAW;AAC3B,WACE,gBAAAK;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA,QACV,OAAO,EAAE,QAAAH,EAAA;AAAA,QAET,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,UAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,8BAA6B,UAAA,qBAAiB;AAAA,UAC7D,gBAAAA,EAAC,OAAA,EAAI,WAAU,kCAAiC,UAAA,8BAAA,CAA2B;AAAA,QAAA,EAAA,CAC7E;AAAA,MAAA;AAAA,IAAA;AAMN,QAAME,IAAa,OAAO,KAAKP,EAAK,CAAC,KAAK,EAAE,GACtCQ,IAAUP,GAAa,SAASA,EAAY,MAAM,SAAS,IAC7DA,EAAY,MAAM,OAAO,CAAAQ,MAAOF,EAAW,SAASE,CAAG,CAAC,IACxDF;AAEJ,SAAIC,EAAQ,WAAW,IAEnB,gBAAAH;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,OAAO,EAAE,QAAAH,EAAA;AAAA,MAET,UAAA,gBAAAI,EAAC,OAAA,EAAI,WAAU,kCACb,UAAA;AAAA,QAAA,gBAAAD,EAAC,OAAA,EAAI,WAAU,8BAA6B,UAAA,wBAAoB;AAAA,QAChE,gBAAAA,EAAC,OAAA,EAAI,WAAU,kCAAiC,UAAA,4BAAA,CAAyB;AAAA,MAAA,EAAA,CAC3E;AAAA,IAAA;AAAA,EAAA,IAMJ,gBAAAA,EAAC,OAAA,EAAI,WAAU,wBAAuB,OAAO,EAAE,QAAAH,EAAA,GAC7C,UAAA,gBAAAI,EAAC,SAAA,EAAM,WAAU,wCACf,UAAA;AAAA,IAAA,gBAAAD,EAAC,SAAA,EAAM,WAAU,wCACf,UAAA,gBAAAA,EAAC,QACE,UAAAG,EAAQ,IAAI,CAACE,MACZ,gBAAAL;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAET,YAAcK,CAAM;AAAA,MAAA;AAAA,MAHhBA;AAAA,IAAA,CAKR,GACH,EAAA,CACF;AAAA,sBACC,SAAA,EAAM,WAAU,2CACd,UAAAV,EAAK,IAAI,CAACW,GAAKC,MACd,gBAAAP,EAAC,QAAe,WAAU,iCACvB,UAAAG,EAAQ,IAAI,CAACE,MACZ,gBAAAL;AAAA,MAAC;AAAA,MAAA;AAAA,QAEC,WAAU;AAAA,QAET,UAAAQ,EAAgBF,EAAID,CAAM,CAAC;AAAA,MAAA;AAAA,MAHvBA;AAAA,IAAA,CAKR,EAAA,GARME,CAST,CACD,EAAA,CACH;AAAA,EAAA,EAAA,CACF,EAAA,CACF;AAEJ;AAEA,SAASC,EAAgBC,GAAoB;AAC3C,SAAIA,KAAS,OAAa,KACtB,OAAOA,KAAU,WACZA,EAAM,eAAA,IAEX,OAAOA,KAAU,YACZA,IAAQ,QAAQ,OAElB,OAAOA,CAAK;AACrB;"}
@@ -0,0 +1,22 @@
1
+ import { jsx as a } from "react/jsx-runtime";
2
+ import { I as s, e as o } from "./icons-D-n_woAP.js";
3
+ const t = {
4
+ icon: ({ className: e }) => /* @__PURE__ */ a(s, { icon: o, className: e }),
5
+ description: "Display detailed tabular data",
6
+ useCase: "Best for precise values, detailed analysis, sortable/filterable data exploration",
7
+ dropZones: [
8
+ {
9
+ key: "xAxis",
10
+ label: "Columns",
11
+ description: "All fields to display as columns",
12
+ mandatory: !1,
13
+ acceptTypes: ["dimension", "timeDimension", "measure"],
14
+ emptyText: "Drop fields to display as columns (or leave empty for all)"
15
+ }
16
+ ],
17
+ displayOptions: ["hideHeader"]
18
+ };
19
+ export {
20
+ t as dataTableConfig
21
+ };
22
+ //# sourceMappingURL=chart-datatable-config-D7mojhYA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-datatable-config-D7mojhYA.js","sources":["../../../src/client/components/charts/DataTable.config.tsx"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\nimport { Icon } from '@iconify/react'\nimport tableIcon from '@iconify-icons/tabler/table'\n\n/**\n * Configuration for the data table type\n */\nexport const dataTableConfig: ChartTypeConfig = {\n icon: ({ className }) => <Icon icon={tableIcon} className={className} />,\n description: 'Display detailed tabular data',\n useCase: 'Best for precise values, detailed analysis, sortable/filterable data exploration',\n dropZones: [\n {\n key: 'xAxis',\n label: 'Columns',\n description: 'All fields to display as columns',\n mandatory: false,\n acceptTypes: ['dimension', 'timeDimension', 'measure'],\n emptyText: 'Drop fields to display as columns (or leave empty for all)'\n }\n ],\n displayOptions: ['hideHeader']\n}"],"names":["dataTableConfig","className","jsx","Icon","tableIcon"],"mappings":";;AAOO,MAAMA,IAAmC;AAAA,EAC9C,MAAM,CAAC,EAAE,WAAAC,EAAA,MAAgB,gBAAAC,EAACC,GAAA,EAAK,MAAMC,GAAW,WAAAH,GAAsB;AAAA,EACtE,aAAa;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA,IACT;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,aAAa,CAAC,aAAa,iBAAiB,SAAS;AAAA,MACrD,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,gBAAgB,CAAC,YAAY;AAC/B;"}
@@ -0,0 +1,99 @@
1
+ import { jsx as a } from "react/jsx-runtime";
2
+ import { I as t, g as i } from "./icons-D-n_woAP.js";
3
+ const s = {
4
+ icon: ({ className: e }) => /* @__PURE__ */ a(t, { icon: i, className: e }),
5
+ description: "Display change between latest and previous values with trend indicators",
6
+ useCase: "Perfect for showing performance changes over time, such as revenue growth, user acquisition changes, or other metrics where the trend and delta are more important than the absolute value",
7
+ dropZones: [
8
+ {
9
+ key: "yAxis",
10
+ label: "Value",
11
+ description: "Measure to track changes for",
12
+ mandatory: !0,
13
+ maxItems: 1,
14
+ acceptTypes: ["measure"],
15
+ emptyText: "Drop a measure here"
16
+ },
17
+ {
18
+ key: "xAxis",
19
+ label: "Dimension (optional)",
20
+ description: "Dimension for ordering data (typically time)",
21
+ mandatory: !1,
22
+ maxItems: 1,
23
+ acceptTypes: ["dimension", "timeDimension"],
24
+ emptyText: "Drop a dimension for ordering"
25
+ }
26
+ ],
27
+ displayOptionsConfig: [
28
+ {
29
+ key: "prefix",
30
+ label: "Prefix",
31
+ type: "string",
32
+ placeholder: "e.g., $, €, #",
33
+ description: "Text to display before the number"
34
+ },
35
+ {
36
+ key: "suffix",
37
+ label: "Suffix",
38
+ type: "string",
39
+ placeholder: "e.g., %, units, items",
40
+ description: "Text to display after the number"
41
+ },
42
+ {
43
+ key: "decimals",
44
+ label: "Decimal Places",
45
+ type: "number",
46
+ defaultValue: 1,
47
+ min: 0,
48
+ max: 10,
49
+ step: 1,
50
+ description: "Number of decimal places to display"
51
+ },
52
+ {
53
+ key: "positiveColorIndex",
54
+ label: "Positive Change Color",
55
+ type: "paletteColor",
56
+ defaultValue: 2,
57
+ // Typically green in most palettes
58
+ description: "Color for positive changes (increases)"
59
+ },
60
+ {
61
+ key: "negativeColorIndex",
62
+ label: "Negative Change Color",
63
+ type: "paletteColor",
64
+ defaultValue: 3,
65
+ // Typically red in most palettes
66
+ description: "Color for negative changes (decreases)"
67
+ },
68
+ {
69
+ key: "showHistogram",
70
+ label: "Show Variance Histogram",
71
+ type: "boolean",
72
+ defaultValue: !0,
73
+ description: "Display historical variance chart below the delta"
74
+ },
75
+ {
76
+ key: "useLastCompletePeriod",
77
+ label: "Use Last Complete Period",
78
+ type: "boolean",
79
+ defaultValue: !0,
80
+ description: "Exclude current incomplete period from delta calculation (e.g., partial week/month)"
81
+ },
82
+ {
83
+ key: "skipLastPeriod",
84
+ label: "Skip Last Period",
85
+ type: "boolean",
86
+ defaultValue: !1,
87
+ description: "Always exclude the last period regardless of completeness"
88
+ }
89
+ ],
90
+ displayOptions: ["hideHeader"],
91
+ validate: (e) => !e.yAxis || Array.isArray(e.yAxis) && e.yAxis.length === 0 ? {
92
+ isValid: !1,
93
+ message: "A measure is required for KPI Delta charts"
94
+ } : { isValid: !0 }
95
+ };
96
+ export {
97
+ s as kpiDeltaConfig
98
+ };
99
+ //# sourceMappingURL=chart-kpidelta-config-icJXuFxe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-kpidelta-config-icJXuFxe.js","sources":["../../../src/client/components/charts/KpiDelta.config.tsx"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\nimport { Icon } from '@iconify/react'\nimport trendingUpIcon from '@iconify-icons/tabler/trending-up'\n\n/**\n * Configuration for the KPI Delta chart type\n */\nexport const kpiDeltaConfig: ChartTypeConfig = {\n icon: ({ className }) => <Icon icon={trendingUpIcon} className={className} />,\n description: 'Display change between latest and previous values with trend indicators',\n useCase: 'Perfect for showing performance changes over time, such as revenue growth, user acquisition changes, or other metrics where the trend and delta are more important than the absolute value',\n dropZones: [\n {\n key: 'yAxis',\n label: 'Value',\n description: 'Measure to track changes for',\n mandatory: true,\n maxItems: 1,\n acceptTypes: ['measure'],\n emptyText: 'Drop a measure here'\n },\n {\n key: 'xAxis',\n label: 'Dimension (optional)',\n description: 'Dimension for ordering data (typically time)',\n mandatory: false,\n maxItems: 1,\n acceptTypes: ['dimension', 'timeDimension'],\n emptyText: 'Drop a dimension for ordering'\n }\n ],\n displayOptionsConfig: [\n {\n key: 'prefix',\n label: 'Prefix',\n type: 'string',\n placeholder: 'e.g., $, €, #',\n description: 'Text to display before the number'\n },\n {\n key: 'suffix',\n label: 'Suffix',\n type: 'string',\n placeholder: 'e.g., %, units, items',\n description: 'Text to display after the number'\n },\n {\n key: 'decimals',\n label: 'Decimal Places',\n type: 'number',\n defaultValue: 1,\n min: 0,\n max: 10,\n step: 1,\n description: 'Number of decimal places to display'\n },\n {\n key: 'positiveColorIndex',\n label: 'Positive Change Color',\n type: 'paletteColor',\n defaultValue: 2, // Typically green in most palettes\n description: 'Color for positive changes (increases)'\n },\n {\n key: 'negativeColorIndex',\n label: 'Negative Change Color', \n type: 'paletteColor',\n defaultValue: 3, // Typically red in most palettes\n description: 'Color for negative changes (decreases)'\n },\n {\n key: 'showHistogram',\n label: 'Show Variance Histogram',\n type: 'boolean',\n defaultValue: true,\n description: 'Display historical variance chart below the delta'\n },\n {\n key: 'useLastCompletePeriod',\n label: 'Use Last Complete Period',\n type: 'boolean',\n defaultValue: true,\n description: 'Exclude current incomplete period from delta calculation (e.g., partial week/month)'\n },\n {\n key: 'skipLastPeriod',\n label: 'Skip Last Period',\n type: 'boolean',\n defaultValue: false,\n description: 'Always exclude the last period regardless of completeness'\n }\n ],\n displayOptions: ['hideHeader'],\n validate: (config: any) => {\n if (!config.yAxis || (Array.isArray(config.yAxis) && config.yAxis.length === 0)) {\n return {\n isValid: false,\n message: 'A measure is required for KPI Delta charts'\n }\n }\n \n return { isValid: true }\n }\n}"],"names":["kpiDeltaConfig","className","jsx","Icon","trendingUpIcon","config"],"mappings":";;AAOO,MAAMA,IAAkC;AAAA,EAC7C,MAAM,CAAC,EAAE,WAAAC,EAAA,MAAgB,gBAAAC,EAACC,GAAA,EAAK,MAAMC,GAAgB,WAAAH,GAAsB;AAAA,EAC3E,aAAa;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA,IACT;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa,CAAC,SAAS;AAAA,MACvB,WAAW;AAAA,IAAA;AAAA,IAEb;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,aAAa;AAAA,MACb,WAAW;AAAA,MACX,UAAU;AAAA,MACV,aAAa,CAAC,aAAa,eAAe;AAAA,MAC1C,WAAW;AAAA,IAAA;AAAA,EACb;AAAA,EAEF,sBAAsB;AAAA,IACpB;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MACb,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA,MACb,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,KAAK;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,aAAa;AAAA,IAAA;AAAA,EACf;AAAA,EAEF,gBAAgB,CAAC,YAAY;AAAA,EAC7B,UAAU,CAACI,MACL,CAACA,EAAO,SAAU,MAAM,QAAQA,EAAO,KAAK,KAAKA,EAAO,MAAM,WAAW,IACpE;AAAA,IACL,SAAS;AAAA,IACT,SAAS;AAAA,EAAA,IAIN,EAAE,SAAS,GAAA;AAEtB;"}
@@ -0,0 +1,434 @@
1
+ import { jsx as a, jsxs as c } from "react/jsx-runtime";
2
+ import { useState as K, useRef as _, useEffect as te } from "react";
3
+ import { I as ne, f as se } from "./icons-D-n_woAP.js";
4
+ import { u as re } from "./chart-activitygridchart-BRk9BNnp.js";
5
+ function ie(s, r) {
6
+ const e = new Date(s);
7
+ switch (r.toLowerCase()) {
8
+ case "day":
9
+ e.setHours(23, 59, 59, 999);
10
+ break;
11
+ case "week":
12
+ const n = 6 - e.getDay();
13
+ e.setDate(e.getDate() + n), e.setHours(23, 59, 59, 999);
14
+ break;
15
+ case "month":
16
+ e.setMonth(e.getMonth() + 1, 0), e.setHours(23, 59, 59, 999);
17
+ break;
18
+ case "quarter":
19
+ const i = e.getMonth(), o = Math.floor(i / 3) * 3 + 2;
20
+ e.setMonth(o + 1, 0), e.setHours(23, 59, 59, 999);
21
+ break;
22
+ case "year":
23
+ e.setMonth(11, 31), e.setHours(23, 59, 59, 999);
24
+ break;
25
+ default:
26
+ e.setHours(23, 59, 59, 999);
27
+ }
28
+ return e;
29
+ }
30
+ function oe(s, r, e) {
31
+ if (!s || !r || !e)
32
+ return !0;
33
+ const l = s[r];
34
+ if (!l)
35
+ return !0;
36
+ const n = new Date(l);
37
+ return isNaN(n.getTime()) ? !0 : ie(n, e) <= /* @__PURE__ */ new Date();
38
+ }
39
+ function ae(s, r) {
40
+ if (!s?.timeDimensions || s.timeDimensions.length === 0)
41
+ return null;
42
+ if (r) {
43
+ const l = s.timeDimensions.find(
44
+ (n) => n.dimension === r || n.dimension?.includes(r) || r?.includes(n.dimension)
45
+ );
46
+ if (l?.granularity)
47
+ return l.granularity;
48
+ }
49
+ return s.timeDimensions[0]?.granularity || null;
50
+ }
51
+ function ce(s, r, e, l, n = !1) {
52
+ const i = {
53
+ filteredData: s,
54
+ excludedIncompletePeriod: !1,
55
+ skippedLastPeriod: !1,
56
+ granularity: null
57
+ };
58
+ if (s.length < 2)
59
+ return i;
60
+ const o = ae(e, r);
61
+ if (n)
62
+ return {
63
+ filteredData: s.slice(0, -1),
64
+ excludedIncompletePeriod: !1,
65
+ skippedLastPeriod: !0,
66
+ granularity: o
67
+ };
68
+ if (!l)
69
+ return { ...i, granularity: o };
70
+ if (!r)
71
+ return { ...i, granularity: o };
72
+ if (!e?.timeDimensions || e.timeDimensions.length === 0)
73
+ return { ...i, granularity: o };
74
+ if (!o)
75
+ return i;
76
+ const N = s[s.length - 1];
77
+ return oe(N, r, o) ? { ...i, granularity: o } : {
78
+ filteredData: s.slice(0, -1),
79
+ excludedIncompletePeriod: !0,
80
+ skippedLastPeriod: !1,
81
+ granularity: o
82
+ };
83
+ }
84
+ function le({
85
+ values: s,
86
+ lastValue: r,
87
+ positiveColor: e,
88
+ negativeColor: l,
89
+ formatValue: n,
90
+ width: i,
91
+ height: o
92
+ }) {
93
+ const N = Math.max(10, Math.floor(i / 10)), g = s.length > N ? s.slice(-N) : s, y = g.map((h) => h - r), d = Math.min(...y, 0), f = Math.max(...y, 0);
94
+ if (Math.max(Math.abs(d), Math.abs(f)) === 0 || y.length === 0)
95
+ return /* @__PURE__ */ a(
96
+ "div",
97
+ {
98
+ className: "flex items-center justify-center bg-gray-50 rounded-sm border",
99
+ style: { width: `${i}px`, height: `${o}px` },
100
+ children: /* @__PURE__ */ a("span", { className: "text-xs text-gray-500", children: "No variance data" })
101
+ }
102
+ );
103
+ const M = 2, H = i - (g.length - 1) * M, w = Math.max(4, H / g.length), x = f - d, b = x > 0 ? f / x * 100 : 50;
104
+ return /* @__PURE__ */ c("div", { className: "flex items-center space-x-2", children: [
105
+ /* @__PURE__ */ c(
106
+ "div",
107
+ {
108
+ className: "relative",
109
+ style: {
110
+ width: `${i}px`,
111
+ height: `${o}px`
112
+ },
113
+ children: [
114
+ /* @__PURE__ */ a(
115
+ "div",
116
+ {
117
+ className: "absolute left-0 right-0",
118
+ style: {
119
+ height: "1px",
120
+ top: `${b}%`,
121
+ backgroundColor: "var(--dc-border)",
122
+ zIndex: 1
123
+ }
124
+ }
125
+ ),
126
+ y.map((h, D) => {
127
+ const S = Math.abs(h) / x, P = Math.max(2, S * (o - 4)), z = h >= 0, $ = D === g.length - 1, j = z ? e : l, u = D * (w + M);
128
+ return /* @__PURE__ */ a(
129
+ "div",
130
+ {
131
+ className: "absolute rounded-xs",
132
+ style: {
133
+ left: `${u}px`,
134
+ width: `${w}px`,
135
+ height: `${P}px`,
136
+ backgroundColor: j,
137
+ opacity: $ ? 1 : 0.6,
138
+ // Position bar relative to zero line
139
+ ...z ? { bottom: `${100 - b}%` } : { top: `${b}%` },
140
+ zIndex: 2
141
+ },
142
+ title: `${n(g[D])}: ${h >= 0 ? "+" : ""}${n(h)} vs current`
143
+ },
144
+ D
145
+ );
146
+ })
147
+ ]
148
+ }
149
+ ),
150
+ /* @__PURE__ */ c(
151
+ "div",
152
+ {
153
+ className: "flex flex-col justify-between text-xs text-dc-text-muted",
154
+ style: { height: `${o}px` },
155
+ children: [
156
+ /* @__PURE__ */ c("span", { children: [
157
+ "+",
158
+ n(f)
159
+ ] }),
160
+ /* @__PURE__ */ c("span", { children: [
161
+ (d < 0, ""),
162
+ n(d)
163
+ ] })
164
+ ]
165
+ }
166
+ )
167
+ ] });
168
+ }
169
+ function de({
170
+ data: s,
171
+ chartConfig: r,
172
+ displayConfig: e = {},
173
+ queryObject: l,
174
+ height: n = "100%",
175
+ colorPalette: i
176
+ }) {
177
+ const [o, N] = K(32), [g, y] = K(250), d = _(null), f = _(null), { getFieldLabel: W } = re();
178
+ if (te(() => {
179
+ const t = () => {
180
+ if (d.current) {
181
+ const C = d.current.getBoundingClientRect(), I = C.width, B = C.height;
182
+ if (I > 0 && B > 0) {
183
+ const Q = I / 4, J = B / 4, X = Math.min(Q, J), Y = Math.max(28, Math.min(X, 140));
184
+ N(Y), setTimeout(() => {
185
+ if (f.current) {
186
+ const Z = f.current.getBoundingClientRect().width, q = I - 100, ee = Math.max(
187
+ Z,
188
+ Math.min(q, I * 0.7)
189
+ );
190
+ y(Math.max(100, ee));
191
+ }
192
+ }, 10);
193
+ }
194
+ }
195
+ }, p = setTimeout(t, 50), v = new ResizeObserver(() => {
196
+ setTimeout(t, 10);
197
+ });
198
+ return d.current && v.observe(d.current), () => {
199
+ clearTimeout(p), v.disconnect();
200
+ };
201
+ }, [s, r]), !s || s.length === 0)
202
+ return /* @__PURE__ */ a(
203
+ "div",
204
+ {
205
+ className: "flex items-center justify-center w-full h-full",
206
+ style: {
207
+ height: n === "100%" ? "100%" : n,
208
+ minHeight: n === "100%" ? "200px" : void 0
209
+ },
210
+ children: /* @__PURE__ */ c("div", { className: "text-center text-dc-text-muted", children: [
211
+ /* @__PURE__ */ a("div", { className: "text-sm font-semibold mb-1", children: "No data available" }),
212
+ /* @__PURE__ */ a("div", { className: "text-xs text-dc-text-secondary", children: "No data points to display" })
213
+ ] })
214
+ }
215
+ );
216
+ let M = [], H = [];
217
+ if (r?.yAxis && (M = Array.isArray(r.yAxis) ? r.yAxis : [r.yAxis]), r?.xAxis && (H = Array.isArray(r.xAxis) ? r.xAxis : [r.xAxis]), M.length === 0)
218
+ return /* @__PURE__ */ a(
219
+ "div",
220
+ {
221
+ className: "flex items-center justify-center w-full h-full",
222
+ style: {
223
+ height: n === "100%" ? "100%" : n,
224
+ minHeight: n === "100%" ? "200px" : void 0,
225
+ backgroundColor: "var(--dc-danger-bg)",
226
+ color: "var(--dc-danger)",
227
+ borderColor: "var(--dc-danger-border)"
228
+ },
229
+ children: /* @__PURE__ */ c("div", { className: "text-center", children: [
230
+ /* @__PURE__ */ a("div", { className: "text-sm font-semibold mb-1", children: "Configuration Error" }),
231
+ /* @__PURE__ */ a("div", { className: "text-xs", children: "No measure field configured" })
232
+ ] })
233
+ }
234
+ );
235
+ const w = M[0], x = H[0];
236
+ let b = [...s];
237
+ x && (b = b.sort((t, p) => {
238
+ const v = t[x], m = p[x];
239
+ return v < m ? -1 : v > m ? 1 : 0;
240
+ }));
241
+ const { useLastCompletePeriod: h = !0, skipLastPeriod: D = !1 } = e, {
242
+ filteredData: S,
243
+ excludedIncompletePeriod: P,
244
+ skippedLastPeriod: z,
245
+ granularity: $
246
+ } = ce(
247
+ b,
248
+ x,
249
+ l,
250
+ h,
251
+ D
252
+ ), u = S.map((t) => t[w]).filter((t) => t != null && !isNaN(Number(t))).map((t) => Number(t));
253
+ if (u.length < 2)
254
+ return /* @__PURE__ */ a(
255
+ "div",
256
+ {
257
+ className: "flex items-center justify-center w-full h-full",
258
+ style: {
259
+ height: n === "100%" ? "100%" : n,
260
+ minHeight: n === "100%" ? "200px" : void 0,
261
+ backgroundColor: "var(--dc-warning-bg)",
262
+ color: "var(--dc-warning)",
263
+ borderColor: "var(--dc-warning-border)"
264
+ },
265
+ children: /* @__PURE__ */ c("div", { className: "text-center", children: [
266
+ /* @__PURE__ */ a("div", { className: "text-sm font-semibold mb-1", children: "Insufficient Data" }),
267
+ /* @__PURE__ */ a("div", { className: "text-xs", children: "Delta calculation requires at least 2 data points" }),
268
+ /* @__PURE__ */ c("div", { className: "text-xs", children: [
269
+ "Current data points: ",
270
+ u.length
271
+ ] })
272
+ ] })
273
+ }
274
+ );
275
+ const A = u[u.length - 1], L = u[u.length - 2], V = A - L, U = L !== 0 ? V / Math.abs(L) * 100 : 0, k = V >= 0, T = (t) => {
276
+ if (e.formatValue)
277
+ return e.formatValue(t);
278
+ if (t == null)
279
+ return "—";
280
+ const p = e.decimals ?? 0, v = e.prefix ?? "";
281
+ let m;
282
+ return Math.abs(t) >= 1e9 ? m = (t / 1e9).toFixed(p) + "B" : Math.abs(t) >= 1e6 ? m = (t / 1e6).toFixed(p) + "M" : Math.abs(t) >= 1e3 ? m = (t / 1e3).toFixed(p) + "K" : m = t.toFixed(p), v + m;
283
+ }, G = () => {
284
+ if (e.positiveColorIndex !== void 0 && i?.colors) {
285
+ const t = e.positiveColorIndex;
286
+ if (t >= 0 && t < i.colors.length)
287
+ return i.colors[t];
288
+ }
289
+ return "#10b981";
290
+ }, O = () => {
291
+ if (e.negativeColorIndex !== void 0 && i?.colors) {
292
+ const t = e.negativeColorIndex;
293
+ if (t >= 0 && t < i.colors.length)
294
+ return i.colors[t];
295
+ }
296
+ return "#ef4444";
297
+ }, E = G(), F = O(), R = k ? E : F;
298
+ return /* @__PURE__ */ c(
299
+ "div",
300
+ {
301
+ ref: d,
302
+ className: "flex flex-col items-center justify-center w-full h-full p-4",
303
+ style: {
304
+ height: n === "100%" ? "100%" : n,
305
+ minHeight: n === "100%" ? "200px" : void 0
306
+ },
307
+ children: [
308
+ /* @__PURE__ */ c(
309
+ "div",
310
+ {
311
+ className: "text-dc-text-secondary font-bold text-center mb-2 flex items-center justify-center gap-1",
312
+ style: {
313
+ fontSize: "14px",
314
+ lineHeight: "1.2"
315
+ },
316
+ children: [
317
+ /* @__PURE__ */ a("span", { children: (() => {
318
+ const t = W(w);
319
+ return t && t.length > 1 ? t : w;
320
+ })() }),
321
+ (P || z) && /* @__PURE__ */ a(
322
+ "span",
323
+ {
324
+ title: z ? `Excludes last ${$ || "period"}` : `Excludes current incomplete ${$}`,
325
+ className: "cursor-help",
326
+ children: /* @__PURE__ */ a(
327
+ ne,
328
+ {
329
+ icon: se,
330
+ className: "w-4 h-4 text-dc-text-muted opacity-70"
331
+ }
332
+ )
333
+ }
334
+ )
335
+ ]
336
+ }
337
+ ),
338
+ /* @__PURE__ */ c("div", { className: "flex items-center justify-center space-x-4 mb-2", children: [
339
+ /* @__PURE__ */ a(
340
+ "div",
341
+ {
342
+ ref: f,
343
+ className: "font-bold leading-none",
344
+ style: {
345
+ fontSize: `${o}px`,
346
+ color: "var(--dc-text)"
347
+ // Keep main value neutral
348
+ },
349
+ children: T(A)
350
+ }
351
+ ),
352
+ /* @__PURE__ */ c("div", { className: "flex items-center space-x-1", children: [
353
+ /* @__PURE__ */ a(
354
+ "div",
355
+ {
356
+ className: "font-bold",
357
+ style: {
358
+ color: R,
359
+ fontSize: `${o * 0.35}px`
360
+ },
361
+ children: k ? "▲" : "▼"
362
+ }
363
+ ),
364
+ /* @__PURE__ */ c("div", { className: "text-left", children: [
365
+ /* @__PURE__ */ c(
366
+ "div",
367
+ {
368
+ className: "font-bold leading-tight",
369
+ style: {
370
+ fontSize: `${o * 0.35}px`,
371
+ color: R
372
+ },
373
+ children: [
374
+ k ? "+" : "",
375
+ T(V)
376
+ ]
377
+ }
378
+ ),
379
+ /* @__PURE__ */ c(
380
+ "div",
381
+ {
382
+ className: "font-semibold leading-tight",
383
+ style: {
384
+ fontSize: `${o * 0.28}px`,
385
+ color: R,
386
+ opacity: 0.8
387
+ },
388
+ children: [
389
+ k ? "+" : "",
390
+ U.toFixed(1),
391
+ "%"
392
+ ]
393
+ }
394
+ )
395
+ ] })
396
+ ] })
397
+ ] }),
398
+ e.suffix && !e.formatValue && /* @__PURE__ */ a(
399
+ "div",
400
+ {
401
+ className: "text-dc-text-muted text-center mb-3",
402
+ style: {
403
+ fontSize: "14px",
404
+ lineHeight: "1.2",
405
+ opacity: 0.8
406
+ },
407
+ children: e.suffix
408
+ }
409
+ ),
410
+ e.showHistogram !== !1 && u.length > 2 && /* @__PURE__ */ a("div", { className: "mt-2 w-full flex justify-center overflow-hidden", children: /* @__PURE__ */ a(
411
+ le,
412
+ {
413
+ values: u,
414
+ lastValue: A,
415
+ positiveColor: E,
416
+ negativeColor: F,
417
+ formatValue: T,
418
+ width: g,
419
+ height: 64
420
+ }
421
+ ) })
422
+ ]
423
+ }
424
+ );
425
+ }
426
+ const pe = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
427
+ __proto__: null,
428
+ default: de
429
+ }, Symbol.toStringTag, { value: "Module" }));
430
+ export {
431
+ pe as K,
432
+ ce as f
433
+ };
434
+ //# sourceMappingURL=chart-kpidelta-p1lVVG5v.js.map