drizzle-cube 0.1.69 → 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.
- package/dist/adapters/{compiler-CghsDLXl.cjs → compiler-DP1pPIcg.cjs} +9 -9
- package/dist/adapters/{compiler-BnHK-nxh.js → compiler-gcKytLwd.js} +12 -13
- package/dist/adapters/express/index.cjs +1 -1
- package/dist/adapters/express/index.js +1 -1
- package/dist/adapters/fastify/index.cjs +1 -1
- package/dist/adapters/fastify/index.js +1 -1
- package/dist/adapters/hono/index.cjs +1 -1
- package/dist/adapters/hono/index.js +1 -1
- package/dist/adapters/nextjs/index.cjs +1 -1
- package/dist/adapters/nextjs/index.js +1 -1
- package/dist/client/charts/ChartLoader.d.ts +56 -0
- package/dist/client/charts/lazyChartConfigRegistry.d.ts +90 -0
- package/dist/client/charts.d.ts +6 -0
- package/dist/client/charts.js +38 -15
- package/dist/client/charts.js.map +1 -1
- package/dist/client/chunks/chart-activitygridchart-BRk9BNnp.js +3713 -0
- package/dist/client/chunks/chart-activitygridchart-BRk9BNnp.js.map +1 -0
- package/dist/client/chunks/chart-activitygridchart-config-D9CgNH02.js +51 -0
- package/dist/client/chunks/chart-activitygridchart-config-D9CgNH02.js.map +1 -0
- package/dist/client/chunks/chart-areachart-Beu8sO9v.js +204 -0
- package/dist/client/chunks/chart-areachart-Beu8sO9v.js.map +1 -0
- package/dist/client/chunks/chart-areachart-config-InZgxubz.js +66 -0
- package/dist/client/chunks/chart-areachart-config-InZgxubz.js.map +1 -0
- package/dist/client/chunks/chart-barchart-BzoejYkT.js +177 -0
- package/dist/client/chunks/chart-barchart-BzoejYkT.js.map +1 -0
- package/dist/client/chunks/chart-barchart-config-DxatOnVV.js +59 -0
- package/dist/client/chunks/chart-barchart-config-DxatOnVV.js.map +1 -0
- package/dist/client/chunks/chart-bubblechart-Dg7sT_Mm.js +210 -0
- package/dist/client/chunks/chart-bubblechart-Dg7sT_Mm.js.map +1 -0
- package/dist/client/chunks/chart-bubblechart-config-CcZTMTCx.js +59 -0
- package/dist/client/chunks/chart-bubblechart-config-CcZTMTCx.js.map +1 -0
- package/dist/client/chunks/chart-chartcontainer-CdwzIKP1.js +103 -0
- package/dist/client/chunks/chart-chartcontainer-CdwzIKP1.js.map +1 -0
- package/dist/client/chunks/chart-charttooltip-NrFVM1cJ.js +26 -0
- package/dist/client/chunks/chart-charttooltip-NrFVM1cJ.js.map +1 -0
- package/dist/client/chunks/chart-datatable-BvV7gLPZ.js +57 -0
- package/dist/client/chunks/chart-datatable-BvV7gLPZ.js.map +1 -0
- package/dist/client/chunks/chart-datatable-config-D7mojhYA.js +22 -0
- package/dist/client/chunks/chart-datatable-config-D7mojhYA.js.map +1 -0
- package/dist/client/chunks/chart-kpidelta-config-icJXuFxe.js +99 -0
- package/dist/client/chunks/chart-kpidelta-config-icJXuFxe.js.map +1 -0
- package/dist/client/chunks/chart-kpidelta-p1lVVG5v.js +434 -0
- package/dist/client/chunks/chart-kpidelta-p1lVVG5v.js.map +1 -0
- package/dist/client/chunks/chart-kpinumber-BFtxFeqq.js +398 -0
- package/dist/client/chunks/chart-kpinumber-BFtxFeqq.js.map +1 -0
- package/dist/client/chunks/chart-kpinumber-config-T39g03ud.js +77 -0
- package/dist/client/chunks/chart-kpinumber-config-T39g03ud.js.map +1 -0
- package/dist/client/chunks/chart-kpitext-CX1s1u8B.js +165 -0
- package/dist/client/chunks/chart-kpitext-CX1s1u8B.js.map +1 -0
- package/dist/client/chunks/chart-kpitext-config-BbJGXAVk.js +49 -0
- package/dist/client/chunks/chart-kpitext-config-BbJGXAVk.js.map +1 -0
- package/dist/client/chunks/chart-linechart-Dgb10zbj.js +155 -0
- package/dist/client/chunks/chart-linechart-Dgb10zbj.js.map +1 -0
- package/dist/client/chunks/chart-linechart-config-BS1qVC8K.js +54 -0
- package/dist/client/chunks/chart-linechart-config-BS1qVC8K.js.map +1 -0
- package/dist/client/chunks/chart-markdownchart-C3FAQFuO.js +254 -0
- package/dist/client/chunks/chart-markdownchart-C3FAQFuO.js.map +1 -0
- package/dist/client/chunks/chart-markdownchart-config-DMCD8phf.js +62 -0
- package/dist/client/chunks/chart-markdownchart-config-DMCD8phf.js.map +1 -0
- package/dist/client/chunks/chart-piechart-B-0BQh-d.js +121 -0
- package/dist/client/chunks/chart-piechart-B-0BQh-d.js.map +1 -0
- package/dist/client/chunks/chart-piechart-config-6ZK8XaSX.js +32 -0
- package/dist/client/chunks/chart-piechart-config-6ZK8XaSX.js.map +1 -0
- package/dist/client/chunks/chart-radarchart-BwZM1yTd.js +124 -0
- package/dist/client/chunks/chart-radarchart-BwZM1yTd.js.map +1 -0
- package/dist/client/chunks/chart-radarchart-config-CCWOkkwO.js +38 -0
- package/dist/client/chunks/chart-radarchart-config-CCWOkkwO.js.map +1 -0
- package/dist/client/chunks/chart-radialbarchart-CythI1zx.js +109 -0
- package/dist/client/chunks/chart-radialbarchart-CythI1zx.js.map +1 -0
- package/dist/client/chunks/chart-radialbarchart-config-DicXYrMW.js +31 -0
- package/dist/client/chunks/chart-radialbarchart-config-DicXYrMW.js.map +1 -0
- package/dist/client/chunks/chart-scatterchart-config-DgYa-5vm.js +41 -0
- package/dist/client/chunks/chart-scatterchart-config-DgYa-5vm.js.map +1 -0
- package/dist/client/chunks/chart-scatterchart-om9-qmtE.js +201 -0
- package/dist/client/chunks/chart-scatterchart-om9-qmtE.js.map +1 -0
- package/dist/client/chunks/chart-treemapchart-Dc35Miif.js +253 -0
- package/dist/client/chunks/chart-treemapchart-Dc35Miif.js.map +1 -0
- package/dist/client/chunks/chart-treemapchart-config-DGhteyBe.js +40 -0
- package/dist/client/chunks/chart-treemapchart-config-DGhteyBe.js.map +1 -0
- package/dist/client/chunks/charts-DL9XOlaK.js +286 -0
- package/dist/client/chunks/charts-DL9XOlaK.js.map +1 -0
- package/dist/client/chunks/{icons-BWMWCuY7.js → icons-D-n_woAP.js} +614 -614
- package/dist/client/chunks/icons-D-n_woAP.js.map +1 -0
- package/dist/client/chunks/index-DpEuGmcW.js +8707 -0
- package/dist/client/chunks/index-DpEuGmcW.js.map +1 -0
- package/dist/client/components.js +11 -11
- package/dist/client/hooks.js +3 -3
- package/dist/client/index.d.ts +18 -1
- package/dist/client/index.js +9135 -39
- package/dist/client/index.js.map +1 -1
- package/dist/client/providers.js +4 -4
- package/dist/client/styles.css +1 -1
- package/dist/client-bundle-stats.html +1 -1
- package/dist/server/index.cjs +16 -16
- package/dist/server/index.d.ts +0 -286
- package/dist/server/index.js +767 -881
- package/package.json +7 -2
- package/dist/client/chunks/charts-jwgcWeFt.js +0 -2580
- package/dist/client/chunks/charts-jwgcWeFt.js.map +0 -1
- package/dist/client/chunks/components-DALzorPs.js +0 -22432
- package/dist/client/chunks/components-DALzorPs.js.map +0 -1
- package/dist/client/chunks/icons-BWMWCuY7.js.map +0 -1
- package/dist/client/chunks/providers-D7zRgZrO.js +0 -308
- package/dist/client/chunks/providers-D7zRgZrO.js.map +0 -1
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import { jsx as c, jsxs as m } from "react/jsx-runtime";
|
|
2
|
+
function H({
|
|
3
|
+
displayConfig: p = {},
|
|
4
|
+
height: x = "100%",
|
|
5
|
+
colorPalette: g
|
|
6
|
+
}) {
|
|
7
|
+
const k = p.content || "", w = p.accentColorIndex ?? 0, N = p.fontSize || "medium", u = p.alignment || "left", h = g?.colors && w < g.colors.length ? g.colors[w] : "#8884d8", y = {
|
|
8
|
+
small: "text-sm",
|
|
9
|
+
medium: "text-lg",
|
|
10
|
+
large: "text-xl"
|
|
11
|
+
}, v = {
|
|
12
|
+
left: "text-left",
|
|
13
|
+
center: "text-center",
|
|
14
|
+
right: "text-right"
|
|
15
|
+
}, M = (n) => {
|
|
16
|
+
const e = n.split(`
|
|
17
|
+
`), l = [];
|
|
18
|
+
let t = null;
|
|
19
|
+
for (let o = 0; o < e.length; o++) {
|
|
20
|
+
const i = e[o].trim();
|
|
21
|
+
if (!i) {
|
|
22
|
+
t && (l.push(t), t = null), l.push({ type: "break" });
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const a = i.match(/^(#{1,3})\s+(.*)$/);
|
|
26
|
+
if (a) {
|
|
27
|
+
t && (l.push(t), t = null), l.push({
|
|
28
|
+
type: "header",
|
|
29
|
+
level: a[1].length,
|
|
30
|
+
content: a[2]
|
|
31
|
+
});
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const s = i.match(/^[-*+]\s+(.*)$/);
|
|
35
|
+
if (s) {
|
|
36
|
+
(!t || t.ordered) && (t && l.push(t), t = { type: "list", ordered: !1, children: [] }), t.children.push({
|
|
37
|
+
type: "listItem",
|
|
38
|
+
children: $(s[1]),
|
|
39
|
+
parentOrdered: !1
|
|
40
|
+
});
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
const r = i.match(/^\d+\.\s+(.*)$/);
|
|
44
|
+
if (r) {
|
|
45
|
+
(!t || !t.ordered) && (t && l.push(t), t = { type: "list", ordered: !0, children: [] }), t.children.push({
|
|
46
|
+
type: "listItem",
|
|
47
|
+
children: $(r[1]),
|
|
48
|
+
parentOrdered: !0
|
|
49
|
+
});
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
t && (l.push(t), t = null), l.push({
|
|
53
|
+
type: "paragraph",
|
|
54
|
+
children: $(i)
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
return t && l.push(t), l;
|
|
58
|
+
}, $ = (n) => {
|
|
59
|
+
const e = [];
|
|
60
|
+
let l = n;
|
|
61
|
+
for (; l; ) {
|
|
62
|
+
const t = l.match(/^(.*?)\[([^\]]+)\]\(([^)]+)\)(.*)$/);
|
|
63
|
+
if (t) {
|
|
64
|
+
const [, o, i, a, s] = t;
|
|
65
|
+
o && e.push(...C(o)), e.push({
|
|
66
|
+
type: "link",
|
|
67
|
+
content: i,
|
|
68
|
+
url: a
|
|
69
|
+
}), l = s;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
e.push(...C(l));
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
return e;
|
|
76
|
+
}, C = (n) => {
|
|
77
|
+
const e = [];
|
|
78
|
+
let l = n;
|
|
79
|
+
for (; l; ) {
|
|
80
|
+
const t = l.match(/^(.*?)\*\*([^*]+)\*\*(.*)$/);
|
|
81
|
+
if (t) {
|
|
82
|
+
const [, i, a, s] = t;
|
|
83
|
+
i && e.push({ type: "text", content: i }), e.push({ type: "bold", content: a }), l = s;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const o = l.match(/^(.*?)\*([^*]+)\*(.*)$/);
|
|
87
|
+
if (o) {
|
|
88
|
+
const [, i, a, s] = o;
|
|
89
|
+
i && e.push({ type: "text", content: i }), e.push({ type: "italic", content: a }), l = s;
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
e.push({ type: "text", content: l });
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
return e;
|
|
96
|
+
}, d = (n, e, l) => {
|
|
97
|
+
switch (n.type) {
|
|
98
|
+
case "text":
|
|
99
|
+
return /* @__PURE__ */ c("span", { className: "text-dc-text", children: n.content }, e);
|
|
100
|
+
case "bold":
|
|
101
|
+
return /* @__PURE__ */ c("strong", { className: "font-bold text-dc-text", children: n.content }, e);
|
|
102
|
+
case "italic":
|
|
103
|
+
return /* @__PURE__ */ c("em", { className: "italic text-dc-text", children: n.content }, e);
|
|
104
|
+
case "link":
|
|
105
|
+
return /* @__PURE__ */ c(
|
|
106
|
+
"a",
|
|
107
|
+
{
|
|
108
|
+
href: n.url,
|
|
109
|
+
target: "_blank",
|
|
110
|
+
rel: "nofollow noopener noreferrer",
|
|
111
|
+
className: "hover:underline transition-colors",
|
|
112
|
+
style: { color: h },
|
|
113
|
+
children: n.content
|
|
114
|
+
},
|
|
115
|
+
e
|
|
116
|
+
);
|
|
117
|
+
case "header":
|
|
118
|
+
const t = (s, r) => {
|
|
119
|
+
const f = "font-bold", I = {
|
|
120
|
+
1: "mb-4",
|
|
121
|
+
2: "mb-3",
|
|
122
|
+
3: "mb-2"
|
|
123
|
+
};
|
|
124
|
+
let b = "";
|
|
125
|
+
return r === "small" ? b = { 1: "text-lg", 2: "text-base", 3: "text-sm" }[s] || "text-sm" : r === "large" ? b = { 1: "text-5xl", 2: "text-4xl", 3: "text-3xl" }[s] || "text-3xl" : b = { 1: "text-3xl", 2: "text-2xl", 3: "text-xl" }[s] || "text-xl", `${f} ${b} ${I[s]}`;
|
|
126
|
+
}, o = `h${n.level}`;
|
|
127
|
+
return /* @__PURE__ */ c(
|
|
128
|
+
o,
|
|
129
|
+
{
|
|
130
|
+
className: t(n.level, N),
|
|
131
|
+
style: { color: h },
|
|
132
|
+
children: n.content
|
|
133
|
+
},
|
|
134
|
+
e
|
|
135
|
+
);
|
|
136
|
+
case "paragraph":
|
|
137
|
+
return /* @__PURE__ */ c("p", { className: "mb-3 leading-relaxed", children: n.children?.map((s, r) => d(s, r)) }, e);
|
|
138
|
+
case "list":
|
|
139
|
+
const i = n.ordered ? "ol" : "ul";
|
|
140
|
+
let a = "mb-3";
|
|
141
|
+
return u === "center" ? a += " list-none flex flex-col items-center" : u === "right" ? a += " list-none ml-auto max-w-max" : a += " list-none ml-6", /* @__PURE__ */ c(i, { className: a, children: n.children?.map((s, r) => d(s, r, n.ordered ? r + 1 : void 0)) }, e);
|
|
142
|
+
case "listItem":
|
|
143
|
+
if (n.children) {
|
|
144
|
+
if (n.parentOrdered && l !== void 0) {
|
|
145
|
+
const s = y[N];
|
|
146
|
+
return u === "center" ? /* @__PURE__ */ m("li", { className: "mb-1 flex items-center justify-center", children: [
|
|
147
|
+
/* @__PURE__ */ m(
|
|
148
|
+
"span",
|
|
149
|
+
{
|
|
150
|
+
className: `inline-block mr-2 shrink-0 ${s} font-medium`,
|
|
151
|
+
style: { color: h },
|
|
152
|
+
children: [
|
|
153
|
+
l,
|
|
154
|
+
"."
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
),
|
|
158
|
+
/* @__PURE__ */ c("span", { className: "text-center", children: n.children.map((r, f) => d(r, f)) })
|
|
159
|
+
] }, e) : u === "right" ? /* @__PURE__ */ m("li", { className: "mb-1 flex items-start justify-end", children: [
|
|
160
|
+
/* @__PURE__ */ c("span", { className: "text-right", children: n.children.map((r, f) => d(r, f)) }),
|
|
161
|
+
/* @__PURE__ */ m(
|
|
162
|
+
"span",
|
|
163
|
+
{
|
|
164
|
+
className: `inline-block ml-2 shrink-0 ${s} font-medium`,
|
|
165
|
+
style: { color: h },
|
|
166
|
+
children: [
|
|
167
|
+
l,
|
|
168
|
+
"."
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
)
|
|
172
|
+
] }, e) : /* @__PURE__ */ m("li", { className: "mb-1 flex items-start", children: [
|
|
173
|
+
/* @__PURE__ */ m(
|
|
174
|
+
"span",
|
|
175
|
+
{
|
|
176
|
+
className: `inline-block mr-3 shrink-0 ${s} font-medium`,
|
|
177
|
+
style: { color: h },
|
|
178
|
+
children: [
|
|
179
|
+
l,
|
|
180
|
+
"."
|
|
181
|
+
]
|
|
182
|
+
}
|
|
183
|
+
),
|
|
184
|
+
/* @__PURE__ */ c("span", { className: "flex-1", children: n.children.map((r, f) => d(r, f)) })
|
|
185
|
+
] }, e);
|
|
186
|
+
}
|
|
187
|
+
return u === "center" ? /* @__PURE__ */ m("li", { className: "mb-1 flex items-center justify-center", children: [
|
|
188
|
+
/* @__PURE__ */ c(
|
|
189
|
+
"span",
|
|
190
|
+
{
|
|
191
|
+
className: "inline-block w-2 h-2 rounded-full mr-2 shrink-0",
|
|
192
|
+
style: { backgroundColor: h }
|
|
193
|
+
}
|
|
194
|
+
),
|
|
195
|
+
/* @__PURE__ */ c("span", { className: "text-center", children: n.children.map((s, r) => d(s, r)) })
|
|
196
|
+
] }, e) : u === "right" ? /* @__PURE__ */ m("li", { className: "mb-1 flex items-start justify-end", children: [
|
|
197
|
+
/* @__PURE__ */ c("span", { className: "text-right", children: n.children.map((s, r) => d(s, r)) }),
|
|
198
|
+
/* @__PURE__ */ c(
|
|
199
|
+
"span",
|
|
200
|
+
{
|
|
201
|
+
className: "inline-block w-2 h-2 rounded-full ml-2 mt-2 shrink-0",
|
|
202
|
+
style: { backgroundColor: h }
|
|
203
|
+
}
|
|
204
|
+
)
|
|
205
|
+
] }, e) : /* @__PURE__ */ m("li", { className: "mb-1 flex items-start", children: [
|
|
206
|
+
/* @__PURE__ */ c(
|
|
207
|
+
"span",
|
|
208
|
+
{
|
|
209
|
+
className: "inline-block w-2 h-2 rounded-full mr-3 mt-2 shrink-0",
|
|
210
|
+
style: { backgroundColor: h }
|
|
211
|
+
}
|
|
212
|
+
),
|
|
213
|
+
/* @__PURE__ */ c("span", { className: "flex-1", children: n.children.map((s, r) => d(s, r)) })
|
|
214
|
+
] }, e);
|
|
215
|
+
}
|
|
216
|
+
return null;
|
|
217
|
+
case "break":
|
|
218
|
+
return /* @__PURE__ */ c("br", {}, e);
|
|
219
|
+
default:
|
|
220
|
+
return null;
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
if (!k.trim())
|
|
224
|
+
return /* @__PURE__ */ c(
|
|
225
|
+
"div",
|
|
226
|
+
{
|
|
227
|
+
className: "flex items-center justify-center w-full h-full",
|
|
228
|
+
style: {
|
|
229
|
+
height: x === "100%" ? "100%" : x,
|
|
230
|
+
minHeight: x === "100%" ? "200px" : void 0
|
|
231
|
+
},
|
|
232
|
+
children: /* @__PURE__ */ m("div", { className: "text-center text-dc-text-muted", children: [
|
|
233
|
+
/* @__PURE__ */ c("div", { className: "text-sm font-semibold mb-1", children: "No content" }),
|
|
234
|
+
/* @__PURE__ */ c("div", { className: "text-xs text-dc-text-secondary", children: "Add markdown content in the chart configuration" })
|
|
235
|
+
] })
|
|
236
|
+
}
|
|
237
|
+
);
|
|
238
|
+
const j = M(k);
|
|
239
|
+
return /* @__PURE__ */ c(
|
|
240
|
+
"div",
|
|
241
|
+
{
|
|
242
|
+
className: `p-4 w-full h-full overflow-auto ${y[N]} ${v[u]}`,
|
|
243
|
+
style: {
|
|
244
|
+
height: x === "100%" ? "100%" : x,
|
|
245
|
+
minHeight: x === "100%" ? "200px" : void 0
|
|
246
|
+
},
|
|
247
|
+
children: j.map((n, e) => d(n, e))
|
|
248
|
+
}
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
export {
|
|
252
|
+
H as default
|
|
253
|
+
};
|
|
254
|
+
//# sourceMappingURL=chart-markdownchart-C3FAQFuO.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-markdownchart-C3FAQFuO.js","sources":["../../../src/client/components/charts/MarkdownChart.tsx"],"sourcesContent":["import React from 'react'\nimport type { ChartProps } from '../../types'\n\ninterface MarkdownNode {\n type: 'text' | 'bold' | 'italic' | 'link' | 'header' | 'list' | 'listItem' | 'paragraph' | 'break'\n content?: string\n url?: string\n level?: number\n ordered?: boolean\n children?: MarkdownNode[]\n parentOrdered?: boolean // For list items to know if parent list is ordered\n}\n\nexport default function MarkdownChart({ \n displayConfig = {},\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const content = displayConfig.content || ''\n const accentColorIndex = displayConfig.accentColorIndex ?? 0\n const fontSize = displayConfig.fontSize || 'medium'\n const alignment = displayConfig.alignment || 'left'\n\n // Get accent color from palette\n const getAccentColor = (): string => {\n if (colorPalette?.colors && accentColorIndex < colorPalette.colors.length) {\n return colorPalette.colors[accentColorIndex]\n }\n return '#8884d8' // Default color\n }\n\n const accentColor = getAccentColor()\n\n // Font size mapping\n const fontSizeClasses = {\n small: 'text-sm',\n medium: 'text-lg', \n large: 'text-xl'\n }\n\n // Alignment mapping\n const alignmentClasses = {\n left: 'text-left',\n center: 'text-center',\n right: 'text-right'\n }\n\n // Simple markdown parser\n const parseMarkdown = (text: string): MarkdownNode[] => {\n const lines = text.split('\\n')\n const nodes: MarkdownNode[] = []\n let currentList: MarkdownNode | null = null\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim()\n \n if (!line) {\n // Empty line - end current list and add line break\n if (currentList) {\n nodes.push(currentList)\n currentList = null\n }\n nodes.push({ type: 'break' })\n continue\n }\n\n // Headers\n const headerMatch = line.match(/^(#{1,3})\\s+(.*)$/)\n if (headerMatch) {\n if (currentList) {\n nodes.push(currentList)\n currentList = null\n }\n nodes.push({\n type: 'header',\n level: headerMatch[1].length,\n content: headerMatch[2]\n })\n continue\n }\n\n // Unordered list\n const unorderedMatch = line.match(/^[-*+]\\s+(.*)$/)\n if (unorderedMatch) {\n if (!currentList || currentList.ordered) {\n if (currentList) nodes.push(currentList)\n currentList = { type: 'list', ordered: false, children: [] }\n }\n currentList.children!.push({\n type: 'listItem',\n children: parseInline(unorderedMatch[1]),\n parentOrdered: false\n })\n continue\n }\n\n // Ordered list\n const orderedMatch = line.match(/^\\d+\\.\\s+(.*)$/)\n if (orderedMatch) {\n if (!currentList || !currentList.ordered) {\n if (currentList) nodes.push(currentList)\n currentList = { type: 'list', ordered: true, children: [] }\n }\n currentList.children!.push({\n type: 'listItem',\n children: parseInline(orderedMatch[1]),\n parentOrdered: true\n })\n continue\n }\n\n // Regular paragraph\n if (currentList) {\n nodes.push(currentList)\n currentList = null\n }\n \n nodes.push({\n type: 'paragraph',\n children: parseInline(line)\n })\n }\n\n // Add any remaining list\n if (currentList) {\n nodes.push(currentList)\n }\n\n return nodes\n }\n\n // Parse inline elements (bold, italic, links)\n const parseInline = (text: string): MarkdownNode[] => {\n const nodes: MarkdownNode[] = []\n let remaining = text\n \n while (remaining) {\n // Try to match link first [text](url)\n const linkMatch = remaining.match(/^(.*?)\\[([^\\]]+)\\]\\(([^)]+)\\)(.*)$/)\n if (linkMatch) {\n const [, before, linkText, url, after] = linkMatch\n if (before) {\n nodes.push(...parseSimpleInline(before))\n }\n nodes.push({\n type: 'link',\n content: linkText,\n url: url\n })\n remaining = after\n continue\n }\n\n // No more special formatting, parse remaining as simple inline\n nodes.push(...parseSimpleInline(remaining))\n break\n }\n\n return nodes\n }\n\n // Parse bold and italic\n const parseSimpleInline = (text: string): MarkdownNode[] => {\n const nodes: MarkdownNode[] = []\n let remaining = text\n\n while (remaining) {\n // Try bold first **text**\n const boldMatch = remaining.match(/^(.*?)\\*\\*([^*]+)\\*\\*(.*)$/)\n if (boldMatch) {\n const [, before, boldText, after] = boldMatch\n if (before) nodes.push({ type: 'text', content: before })\n nodes.push({ type: 'bold', content: boldText })\n remaining = after\n continue\n }\n\n // Try italic *text*\n const italicMatch = remaining.match(/^(.*?)\\*([^*]+)\\*(.*)$/)\n if (italicMatch) {\n const [, before, italicText, after] = italicMatch\n if (before) nodes.push({ type: 'text', content: before })\n nodes.push({ type: 'italic', content: italicText })\n remaining = after\n continue\n }\n\n // No more formatting, add as text\n nodes.push({ type: 'text', content: remaining })\n break\n }\n\n return nodes\n }\n\n // Render markdown nodes to React elements\n const renderNode = (node: MarkdownNode, key: number, listNumber?: number): React.ReactNode => {\n switch (node.type) {\n case 'text':\n return <span key={key} className=\"text-dc-text\">{node.content}</span>\n\n case 'bold':\n return <strong key={key} className=\"font-bold text-dc-text\">{node.content}</strong>\n\n case 'italic':\n return <em key={key} className=\"italic text-dc-text\">{node.content}</em>\n\n case 'link':\n return (\n <a \n key={key}\n href={node.url}\n target=\"_blank\"\n rel=\"nofollow noopener noreferrer\"\n className=\"hover:underline transition-colors\"\n style={{ color: accentColor }}\n >\n {node.content}\n </a>\n )\n\n case 'header':\n // Header classes that scale with fontSize setting\n const getHeaderClasses = (level: number, fontSize: string) => {\n const baseClasses = 'font-bold'\n const marginClasses = {\n 1: 'mb-4',\n 2: 'mb-3', \n 3: 'mb-2'\n }\n \n let sizeClasses = ''\n if (fontSize === 'small') {\n sizeClasses = { 1: 'text-lg', 2: 'text-base', 3: 'text-sm' }[level] || 'text-sm'\n } else if (fontSize === 'large') {\n sizeClasses = { 1: 'text-5xl', 2: 'text-4xl', 3: 'text-3xl' }[level] || 'text-3xl'\n } else { // medium (default)\n sizeClasses = { 1: 'text-3xl', 2: 'text-2xl', 3: 'text-xl' }[level] || 'text-xl'\n }\n \n return `${baseClasses} ${sizeClasses} ${marginClasses[level as keyof typeof marginClasses]}`\n }\n \n const HeaderTag = `h${node.level}` as keyof JSX.IntrinsicElements\n return (\n <HeaderTag \n key={key} \n className={getHeaderClasses(node.level as number, fontSize)}\n style={{ color: accentColor }}\n >\n {node.content}\n </HeaderTag>\n )\n\n case 'paragraph':\n return (\n <p key={key} className=\"mb-3 leading-relaxed\">\n {node.children?.map((child, i) => renderNode(child, i))}\n </p>\n )\n\n case 'list':\n const ListTag = node.ordered ? 'ol' : 'ul'\n let listClasses = 'mb-3'\n \n if (alignment === 'center') {\n listClasses += ' list-none flex flex-col items-center'\n } else if (alignment === 'right') {\n listClasses += ' list-none ml-auto max-w-max'\n } else {\n listClasses += ' list-none ml-6'\n }\n \n return (\n <ListTag key={key} className={listClasses}>\n {node.children?.map((child, i) => renderNode(child, i, node.ordered ? i + 1 : undefined))}\n </ListTag>\n )\n\n case 'listItem':\n if (node.children) {\n // For ordered lists, use custom colored numbers\n if (node.parentOrdered && listNumber !== undefined) {\n const numberSizeClass = fontSizeClasses[fontSize as keyof typeof fontSizeClasses]\n \n if (alignment === 'center') {\n return (\n <li key={key} className=\"mb-1 flex items-center justify-center\">\n <span \n className={`inline-block mr-2 shrink-0 ${numberSizeClass} font-medium`}\n style={{ color: accentColor }}\n >\n {listNumber}.\n </span>\n <span className=\"text-center\">\n {node.children.map((child, i) => renderNode(child, i))}\n </span>\n </li>\n )\n } else if (alignment === 'right') {\n return (\n <li key={key} className=\"mb-1 flex items-start justify-end\">\n <span className=\"text-right\">\n {node.children.map((child, i) => renderNode(child, i))}\n </span>\n <span \n className={`inline-block ml-2 shrink-0 ${numberSizeClass} font-medium`}\n style={{ color: accentColor }}\n >\n {listNumber}.\n </span>\n </li>\n )\n } else {\n return (\n <li key={key} className=\"mb-1 flex items-start\">\n <span \n className={`inline-block mr-3 shrink-0 ${numberSizeClass} font-medium`}\n style={{ color: accentColor }}\n >\n {listNumber}.\n </span>\n <span className=\"flex-1\">\n {node.children.map((child, i) => renderNode(child, i))}\n </span>\n </li>\n )\n }\n }\n \n // For unordered lists, use custom bullets with alignment\n if (alignment === 'center') {\n return (\n <li key={key} className=\"mb-1 flex items-center justify-center\">\n <span \n className=\"inline-block w-2 h-2 rounded-full mr-2 shrink-0\"\n style={{ backgroundColor: accentColor }}\n />\n <span className=\"text-center\">\n {node.children.map((child, i) => renderNode(child, i))}\n </span>\n </li>\n )\n } else if (alignment === 'right') {\n return (\n <li key={key} className=\"mb-1 flex items-start justify-end\">\n <span className=\"text-right\">\n {node.children.map((child, i) => renderNode(child, i))}\n </span>\n <span \n className=\"inline-block w-2 h-2 rounded-full ml-2 mt-2 shrink-0\"\n style={{ backgroundColor: accentColor }}\n />\n </li>\n )\n } else {\n return (\n <li key={key} className=\"mb-1 flex items-start\">\n <span \n className=\"inline-block w-2 h-2 rounded-full mr-3 mt-2 shrink-0\"\n style={{ backgroundColor: accentColor }}\n />\n <span className=\"flex-1\">\n {node.children.map((child, i) => renderNode(child, i))}\n </span>\n </li>\n )\n }\n }\n return null\n\n case 'break':\n return <br key={key} />\n\n default:\n return null\n }\n }\n\n if (!content.trim()) {\n return (\n <div\n className=\"flex items-center justify-center w-full h-full\"\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? '200px' : undefined\n }}\n >\n <div className=\"text-center text-dc-text-muted\">\n <div className=\"text-sm font-semibold mb-1\">No content</div>\n <div className=\"text-xs text-dc-text-secondary\">Add markdown content in the chart configuration</div>\n </div>\n </div>\n )\n }\n\n const parsedNodes = parseMarkdown(content)\n\n return (\n <div \n className={`p-4 w-full h-full overflow-auto ${fontSizeClasses[fontSize as keyof typeof fontSizeClasses]} ${alignmentClasses[alignment as keyof typeof alignmentClasses]}`}\n style={{ \n height: height === \"100%\" ? \"100%\" : height,\n minHeight: height === \"100%\" ? '200px' : undefined\n }}\n >\n {parsedNodes.map((node, index) => renderNode(node, index))}\n </div>\n )\n}"],"names":["MarkdownChart","displayConfig","height","colorPalette","content","accentColorIndex","fontSize","alignment","accentColor","fontSizeClasses","alignmentClasses","parseMarkdown","text","lines","nodes","currentList","i","line","headerMatch","unorderedMatch","parseInline","orderedMatch","remaining","linkMatch","before","linkText","url","after","parseSimpleInline","boldMatch","boldText","italicMatch","italicText","renderNode","node","key","listNumber","jsx","getHeaderClasses","level","baseClasses","marginClasses","sizeClasses","HeaderTag","child","ListTag","listClasses","numberSizeClass","jsxs","parsedNodes","index"],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { jsx as t } from "react/jsx-runtime";
|
|
2
|
+
import { I as l, k as o } from "./icons-D-n_woAP.js";
|
|
3
|
+
const i = {
|
|
4
|
+
icon: ({ className: e }) => /* @__PURE__ */ t(l, { icon: o, className: e }),
|
|
5
|
+
description: "Display custom markdown content with formatting",
|
|
6
|
+
useCase: "Perfect for adding documentation, notes, instructions, or formatted text to dashboards",
|
|
7
|
+
skipQuery: !0,
|
|
8
|
+
// This chart doesn't require a valid query
|
|
9
|
+
dropZones: [],
|
|
10
|
+
// No drop zones needed for markdown content
|
|
11
|
+
displayOptionsConfig: [
|
|
12
|
+
{
|
|
13
|
+
key: "content",
|
|
14
|
+
label: "Markdown Content",
|
|
15
|
+
type: "string",
|
|
16
|
+
placeholder: `# Welcome
|
|
17
|
+
|
|
18
|
+
Add your **markdown** content here:
|
|
19
|
+
|
|
20
|
+
- Lists with bullets
|
|
21
|
+
- [Links](https://example.com)
|
|
22
|
+
- *Italic* and **bold** text`,
|
|
23
|
+
description: "Enter markdown text. Supports headers (#), bold (**text**), italic (*text*), links ([text](url)), and lists (- item)."
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
key: "accentColorIndex",
|
|
27
|
+
label: "Accent Color",
|
|
28
|
+
type: "paletteColor",
|
|
29
|
+
defaultValue: 0,
|
|
30
|
+
description: "Color from the dashboard palette for headers, bullets, and links"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
key: "fontSize",
|
|
34
|
+
label: "Font Size",
|
|
35
|
+
type: "select",
|
|
36
|
+
defaultValue: "medium",
|
|
37
|
+
options: [
|
|
38
|
+
{ value: "small", label: "Small" },
|
|
39
|
+
{ value: "medium", label: "Medium" },
|
|
40
|
+
{ value: "large", label: "Large" }
|
|
41
|
+
],
|
|
42
|
+
description: "Overall text size for the markdown content"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
key: "alignment",
|
|
46
|
+
label: "Text Alignment",
|
|
47
|
+
type: "select",
|
|
48
|
+
defaultValue: "left",
|
|
49
|
+
options: [
|
|
50
|
+
{ value: "left", label: "Left" },
|
|
51
|
+
{ value: "center", label: "Center" },
|
|
52
|
+
{ value: "right", label: "Right" }
|
|
53
|
+
],
|
|
54
|
+
description: "Horizontal alignment of the markdown content"
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
displayOptions: ["hideHeader"]
|
|
58
|
+
};
|
|
59
|
+
export {
|
|
60
|
+
i as markdownConfig
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=chart-markdownchart-config-DMCD8phf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-markdownchart-config-DMCD8phf.js","sources":["../../../src/client/components/charts/MarkdownChart.config.tsx"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\nimport { Icon } from '@iconify/react'\nimport documentTextIcon from '@iconify-icons/tabler/file-text'\n\n/**\n * Configuration for the Markdown chart type\n */\nexport const markdownConfig: ChartTypeConfig = {\n icon: ({ className }) => <Icon icon={documentTextIcon} className={className} />,\n description: 'Display custom markdown content with formatting',\n useCase: 'Perfect for adding documentation, notes, instructions, or formatted text to dashboards',\n skipQuery: true, // This chart doesn't require a valid query\n dropZones: [], // No drop zones needed for markdown content\n displayOptionsConfig: [\n {\n key: 'content',\n label: 'Markdown Content',\n type: 'string',\n placeholder: '# Welcome\\n\\nAdd your **markdown** content here:\\n\\n- Lists with bullets\\n- [Links](https://example.com)\\n- *Italic* and **bold** text',\n description: 'Enter markdown text. Supports headers (#), bold (**text**), italic (*text*), links ([text](url)), and lists (- item).'\n },\n {\n key: 'accentColorIndex',\n label: 'Accent Color',\n type: 'paletteColor',\n defaultValue: 0,\n description: 'Color from the dashboard palette for headers, bullets, and links'\n },\n {\n key: 'fontSize',\n label: 'Font Size',\n type: 'select',\n defaultValue: 'medium',\n options: [\n { value: 'small', label: 'Small' },\n { value: 'medium', label: 'Medium' },\n { value: 'large', label: 'Large' }\n ],\n description: 'Overall text size for the markdown content'\n },\n {\n key: 'alignment',\n label: 'Text Alignment',\n type: 'select',\n defaultValue: 'left',\n options: [\n { value: 'left', label: 'Left' },\n { value: 'center', label: 'Center' },\n { value: 'right', label: 'Right' }\n ],\n description: 'Horizontal alignment of the markdown content'\n }\n ],\n displayOptions: ['hideHeader']\n}"],"names":["markdownConfig","className","jsx","Icon","documentTextIcon"],"mappings":";;AAOO,MAAMA,IAAkC;AAAA,EAC7C,MAAM,CAAC,EAAE,WAAAC,EAAA,MAAgB,gBAAAC,EAACC,GAAA,EAAK,MAAMC,GAAkB,WAAAH,GAAsB;AAAA,EAC7E,aAAa;AAAA,EACb,SAAS;AAAA,EACT,WAAW;AAAA;AAAA,EACX,WAAW,CAAA;AAAA;AAAA,EACX,sBAAsB;AAAA,IACpB;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACb,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,SAAS;AAAA,QACP,EAAE,OAAO,SAAS,OAAO,QAAA;AAAA,QACzB,EAAE,OAAO,UAAU,OAAO,SAAA;AAAA,QAC1B,EAAE,OAAO,SAAS,OAAO,QAAA;AAAA,MAAQ;AAAA,MAEnC,aAAa;AAAA,IAAA;AAAA,IAEf;AAAA,MACE,KAAK;AAAA,MACL,OAAO;AAAA,MACP,MAAM;AAAA,MACN,cAAc;AAAA,MACd,SAAS;AAAA,QACP,EAAE,OAAO,QAAQ,OAAO,OAAA;AAAA,QACxB,EAAE,OAAO,UAAU,OAAO,SAAA;AAAA,QAC1B,EAAE,OAAO,SAAS,OAAO,QAAA;AAAA,MAAQ;AAAA,MAEnC,aAAa;AAAA,IAAA;AAAA,EACf;AAAA,EAEF,gBAAgB,CAAC,YAAY;AAC/B;"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { jsx as e, jsxs as c } from "react/jsx-runtime";
|
|
2
|
+
import { useState as b } from "react";
|
|
3
|
+
import { PieChart as w, Pie as g, Cell as L, Legend as S } from "recharts";
|
|
4
|
+
import { C as T } from "./chart-chartcontainer-CdwzIKP1.js";
|
|
5
|
+
import { C as j } from "./chart-charttooltip-NrFVM1cJ.js";
|
|
6
|
+
import { u as F, t as C, b as E, c as $, a as N } from "./chart-activitygridchart-BRk9BNnp.js";
|
|
7
|
+
function H({
|
|
8
|
+
data: x,
|
|
9
|
+
chartConfig: s,
|
|
10
|
+
displayConfig: f = {},
|
|
11
|
+
queryObject: y,
|
|
12
|
+
height: o = "100%",
|
|
13
|
+
colorPalette: m
|
|
14
|
+
}) {
|
|
15
|
+
const [v, h] = b(null), { labelMap: A } = F();
|
|
16
|
+
try {
|
|
17
|
+
const d = {
|
|
18
|
+
showLegend: f?.showLegend ?? !0,
|
|
19
|
+
showTooltip: f?.showTooltip ?? !0
|
|
20
|
+
};
|
|
21
|
+
if (!x || x.length === 0)
|
|
22
|
+
return /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-dc-text-muted", style: { height: o }, children: /* @__PURE__ */ c("div", { className: "text-center", children: [
|
|
23
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "No data available" }),
|
|
24
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-secondary", children: "No data points to display in pie chart" })
|
|
25
|
+
] }) });
|
|
26
|
+
let i, a, n, u = [];
|
|
27
|
+
if (s?.xAxis && s?.yAxis)
|
|
28
|
+
a = Array.isArray(s.xAxis) ? s.xAxis[0] : s.xAxis, n = Array.isArray(s.yAxis) ? s.yAxis : [s.yAxis], u = s.series || [];
|
|
29
|
+
else if (s?.x && s?.y)
|
|
30
|
+
a = s.x, n = Array.isArray(s.y) ? s.y : [s.y];
|
|
31
|
+
else
|
|
32
|
+
return /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-yellow-600", style: { height: o }, children: /* @__PURE__ */ c("div", { className: "text-center", children: [
|
|
33
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "Configuration Error" }),
|
|
34
|
+
/* @__PURE__ */ e("div", { className: "text-xs", children: "chartConfig.x/y or chartConfig.xAxis/yAxis required for pie chart" })
|
|
35
|
+
] }) });
|
|
36
|
+
if (!a || !n || n.length === 0)
|
|
37
|
+
return /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-yellow-600", style: { height: o }, children: /* @__PURE__ */ c("div", { className: "text-center", children: [
|
|
38
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "Configuration Error" }),
|
|
39
|
+
/* @__PURE__ */ e("div", { className: "text-xs", children: "Missing required X-axis or Y-axis fields" })
|
|
40
|
+
] }) });
|
|
41
|
+
if (u.length > 0) {
|
|
42
|
+
const { data: l } = C(
|
|
43
|
+
x,
|
|
44
|
+
a,
|
|
45
|
+
n,
|
|
46
|
+
y,
|
|
47
|
+
u,
|
|
48
|
+
A
|
|
49
|
+
);
|
|
50
|
+
if (i = [], l.length > 0) {
|
|
51
|
+
const t = l[0];
|
|
52
|
+
Object.keys(t).forEach((r) => {
|
|
53
|
+
r !== "name" && typeof t[r] == "number" && i.push({
|
|
54
|
+
name: String(r),
|
|
55
|
+
value: t[r]
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
} else {
|
|
60
|
+
const l = E(y, a);
|
|
61
|
+
i = x.map((t) => {
|
|
62
|
+
let r = $(t[a], l) || String(t[a]) || "Unknown";
|
|
63
|
+
return typeof t[a] == "boolean" ? r = t[a] ? "Active" : "Inactive" : (r === "true" || r === "false") && (r = r === "true" ? "Active" : "Inactive"), {
|
|
64
|
+
name: r,
|
|
65
|
+
value: typeof t[n[0]] == "string" ? parseFloat(t[n[0]]) : t[n[0]] || 0
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const p = i.length;
|
|
70
|
+
return i = i.filter(
|
|
71
|
+
(l) => l.value != null && !isNaN(l.value) && l.value !== 0 && l.value > 0
|
|
72
|
+
), i.length === 0 ? /* @__PURE__ */ e("div", { className: "flex items-center justify-center w-full text-dc-text-muted", style: { height: o }, children: /* @__PURE__ */ c("div", { className: "text-center", children: [
|
|
73
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "No valid data" }),
|
|
74
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-secondary", children: p > 0 ? `Filtered out ${p} data points (zero or invalid values)` : "No data points to display in pie chart" })
|
|
75
|
+
] }) }) : /* @__PURE__ */ e(T, { height: o, children: /* @__PURE__ */ c(w, { children: [
|
|
76
|
+
/* @__PURE__ */ e(
|
|
77
|
+
g,
|
|
78
|
+
{
|
|
79
|
+
data: i,
|
|
80
|
+
cx: "50%",
|
|
81
|
+
cy: "50%",
|
|
82
|
+
outerRadius: "70%",
|
|
83
|
+
dataKey: "value",
|
|
84
|
+
label: d.showLegend ? void 0 : ({ name: l, percent: t }) => `${l} ${((t || 0) * 100).toFixed(0)}%`,
|
|
85
|
+
children: i.map((l, t) => /* @__PURE__ */ e(
|
|
86
|
+
L,
|
|
87
|
+
{
|
|
88
|
+
fill: m?.colors && m.colors[t % m.colors.length] || N[t % N.length],
|
|
89
|
+
fillOpacity: v ? v === i[t].name ? 1 : 0.3 : 1
|
|
90
|
+
},
|
|
91
|
+
`cell-${t}`
|
|
92
|
+
))
|
|
93
|
+
}
|
|
94
|
+
),
|
|
95
|
+
d.showTooltip && /* @__PURE__ */ e(j, {}),
|
|
96
|
+
d.showLegend && /* @__PURE__ */ e(
|
|
97
|
+
S,
|
|
98
|
+
{
|
|
99
|
+
wrapperStyle: { fontSize: "12px", paddingTop: "10px" },
|
|
100
|
+
iconType: "circle",
|
|
101
|
+
iconSize: 8,
|
|
102
|
+
layout: "horizontal",
|
|
103
|
+
align: "center",
|
|
104
|
+
verticalAlign: "bottom",
|
|
105
|
+
onMouseEnter: (l) => h(String(l.value || "")),
|
|
106
|
+
onMouseLeave: () => h(null)
|
|
107
|
+
}
|
|
108
|
+
)
|
|
109
|
+
] }) });
|
|
110
|
+
} catch (d) {
|
|
111
|
+
return /* @__PURE__ */ e("div", { className: "flex flex-col items-center justify-center w-full text-red-500 p-4", style: { height: o }, children: /* @__PURE__ */ c("div", { className: "text-center", children: [
|
|
112
|
+
/* @__PURE__ */ e("div", { className: "text-sm font-semibold mb-1", children: "Pie Chart Error" }),
|
|
113
|
+
/* @__PURE__ */ e("div", { className: "text-xs mb-2", children: d instanceof Error ? d.message : "Unknown rendering error" }),
|
|
114
|
+
/* @__PURE__ */ e("div", { className: "text-xs text-dc-text-muted", children: "Check the data and configuration" })
|
|
115
|
+
] }) });
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export {
|
|
119
|
+
H as default
|
|
120
|
+
};
|
|
121
|
+
//# sourceMappingURL=chart-piechart-B-0BQh-d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-piechart-B-0BQh-d.js","sources":["../../../src/client/components/charts/PieChart.tsx"],"sourcesContent":["import { useState } from 'react'\nimport { PieChart as RechartsPieChart, Pie, Cell, Legend } from 'recharts'\nimport ChartContainer from './ChartContainer'\nimport ChartTooltip from './ChartTooltip'\nimport { CHART_COLORS } from '../../utils/chartConstants'\nimport { transformChartDataWithSeries, formatTimeValue, getFieldGranularity } from '../../utils/chartUtils'\nimport { useCubeContext } from '../../providers/CubeProvider'\nimport type { ChartProps } from '../../types'\n\nexport default function PieChart({ \n data, \n chartConfig,\n displayConfig = {},\n queryObject,\n height = \"100%\",\n colorPalette\n}: ChartProps) {\n const [hoveredLegend, setHoveredLegend] = useState<string | null>(null)\n const { labelMap } = useCubeContext()\n \n try {\n const safeDisplayConfig = {\n showLegend: displayConfig?.showLegend ?? true,\n showTooltip: displayConfig?.showTooltip ?? true\n }\n\n if (!data || data.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No data available</div>\n <div className=\"text-xs text-dc-text-secondary\">No data points to display in pie chart</div>\n </div>\n </div>\n )\n }\n\n let pieData: Array<{name: string, value: number}>\n\n // Validate chartConfig - support both legacy and new formats\n let xAxisField: string\n let yAxisFields: string[]\n let seriesFields: string[] = []\n \n if (chartConfig?.xAxis && chartConfig?.yAxis) {\n // New format\n xAxisField = Array.isArray(chartConfig.xAxis) ? chartConfig.xAxis[0] : chartConfig.xAxis\n yAxisFields = Array.isArray(chartConfig.yAxis) ? chartConfig.yAxis : [chartConfig.yAxis]\n seriesFields = chartConfig.series || []\n } else if (chartConfig?.x && chartConfig?.y) {\n // Legacy format\n xAxisField = chartConfig.x\n yAxisFields = Array.isArray(chartConfig.y) ? chartConfig.y : [chartConfig.y]\n } else {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">chartConfig.x/y or chartConfig.xAxis/yAxis required for pie chart</div>\n </div>\n </div>\n )\n }\n\n if (!xAxisField || !yAxisFields || yAxisFields.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-yellow-600\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Configuration Error</div>\n <div className=\"text-xs\">Missing required X-axis or Y-axis fields</div>\n </div>\n </div>\n )\n }\n\n if (seriesFields.length > 0) {\n // Use series-based transformation for dimension-based pie slices\n const { data: chartData } = transformChartDataWithSeries(\n data, \n xAxisField, \n yAxisFields, \n queryObject,\n seriesFields,\n labelMap\n )\n \n // Convert series data to pie format\n pieData = []\n if (chartData.length > 0) {\n const firstRow = chartData[0]\n Object.keys(firstRow).forEach(key => {\n if (key !== 'name' && typeof firstRow[key] === 'number') {\n pieData.push({\n name: String(key),\n value: firstRow[key]\n })\n }\n })\n }\n } else {\n // Standard measure-based pie chart\n const granularity = getFieldGranularity(queryObject, xAxisField)\n pieData = data.map(item => {\n let name = formatTimeValue(item[xAxisField], granularity) || String(item[xAxisField]) || 'Unknown'\n // Handle boolean values with better labels\n if (typeof item[xAxisField] === 'boolean') {\n name = item[xAxisField] ? 'Active' : 'Inactive'\n } else if (name === 'true' || name === 'false') {\n name = name === 'true' ? 'Active' : 'Inactive'\n }\n return {\n name,\n value: typeof item[yAxisFields[0]] === 'string' \n ? parseFloat(item[yAxisFields[0]]) \n : (item[yAxisFields[0]] || 0)\n }\n })\n }\n\n // Filter out invalid values (null, undefined, NaN, or zero)\n const originalLength = pieData.length\n pieData = pieData.filter(item => \n item.value != null && \n !isNaN(item.value) && \n item.value !== 0 && \n item.value > 0\n )\n \n if (pieData.length === 0) {\n return (\n <div className=\"flex items-center justify-center w-full text-dc-text-muted\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">No valid data</div>\n <div className=\"text-xs text-dc-text-secondary\">\n {originalLength > 0\n ? `Filtered out ${originalLength} data points (zero or invalid values)`\n : 'No data points to display in pie chart'\n }\n </div>\n </div>\n </div>\n )\n }\n \n return (\n <ChartContainer height={height}>\n <RechartsPieChart>\n <Pie\n data={pieData}\n cx=\"50%\"\n cy=\"50%\"\n outerRadius=\"70%\"\n dataKey=\"value\"\n label={!safeDisplayConfig.showLegend ? ({ name, percent }) => \n `${name} ${((percent || 0) * 100).toFixed(0)}%`\n : undefined}\n >\n {pieData.map((_entry, index) => (\n <Cell \n key={`cell-${index}`} \n fill={(colorPalette?.colors && colorPalette.colors[index % colorPalette.colors.length]) || CHART_COLORS[index % CHART_COLORS.length]}\n fillOpacity={hoveredLegend ? (hoveredLegend === pieData[index].name ? 1 : 0.3) : 1}\n />\n ))}\n </Pie>\n {safeDisplayConfig.showTooltip && (\n <ChartTooltip />\n )}\n {safeDisplayConfig.showLegend && (\n <Legend \n wrapperStyle={{ fontSize: '12px', paddingTop: '10px' }}\n iconType=\"circle\"\n iconSize={8}\n layout=\"horizontal\"\n align=\"center\"\n verticalAlign=\"bottom\"\n onMouseEnter={(o) => setHoveredLegend(String(o.value || ''))}\n onMouseLeave={() => setHoveredLegend(null)}\n />\n )}\n </RechartsPieChart>\n </ChartContainer>\n )\n } catch (error) {\n // 'PieChart rendering error\n return (\n <div className=\"flex flex-col items-center justify-center w-full text-red-500 p-4\" style={{ height }}>\n <div className=\"text-center\">\n <div className=\"text-sm font-semibold mb-1\">Pie Chart Error</div>\n <div className=\"text-xs mb-2\">{error instanceof Error ? error.message : 'Unknown rendering error'}</div>\n <div className=\"text-xs text-dc-text-muted\">Check the data and configuration</div>\n </div>\n </div>\n )\n }\n}"],"names":["PieChart","data","chartConfig","displayConfig","queryObject","height","colorPalette","hoveredLegend","setHoveredLegend","useState","labelMap","useCubeContext","safeDisplayConfig","jsx","jsxs","pieData","xAxisField","yAxisFields","seriesFields","chartData","transformChartDataWithSeries","firstRow","key","granularity","getFieldGranularity","item","name","formatTimeValue","originalLength","ChartContainer","RechartsPieChart","Pie","percent","_entry","index","Cell","CHART_COLORS","ChartTooltip","Legend","o","error"],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as o } from "react/jsx-runtime";
|
|
2
|
+
import { I as s, l as i } from "./icons-D-n_woAP.js";
|
|
3
|
+
const a = {
|
|
4
|
+
icon: ({ className: e }) => /* @__PURE__ */ o(s, { icon: i, className: e }),
|
|
5
|
+
description: "Show proportions of a whole",
|
|
6
|
+
useCase: "Best for showing percentage distribution or composition of a total (limit to 5-7 slices)",
|
|
7
|
+
dropZones: [
|
|
8
|
+
{
|
|
9
|
+
key: "xAxis",
|
|
10
|
+
label: "Categories",
|
|
11
|
+
description: "Dimension for pie slices",
|
|
12
|
+
mandatory: !0,
|
|
13
|
+
maxItems: 1,
|
|
14
|
+
acceptTypes: ["dimension"],
|
|
15
|
+
emptyText: "Drop a dimension for categories"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
key: "yAxis",
|
|
19
|
+
label: "Values",
|
|
20
|
+
description: "Measure for slice sizes",
|
|
21
|
+
mandatory: !0,
|
|
22
|
+
maxItems: 1,
|
|
23
|
+
acceptTypes: ["measure"],
|
|
24
|
+
emptyText: "Drop a measure for values"
|
|
25
|
+
}
|
|
26
|
+
],
|
|
27
|
+
displayOptions: ["showLegend", "showTooltip", "hideHeader"]
|
|
28
|
+
};
|
|
29
|
+
export {
|
|
30
|
+
a as pieChartConfig
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=chart-piechart-config-6ZK8XaSX.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-piechart-config-6ZK8XaSX.js","sources":["../../../src/client/components/charts/PieChart.config.tsx"],"sourcesContent":["import type { ChartTypeConfig } from '../../charts/chartConfigs'\nimport { Icon } from '@iconify/react'\nimport chartPieIcon from '@iconify-icons/tabler/chart-pie'\n\n/**\n * Configuration for the pie chart type\n */\nexport const pieChartConfig: ChartTypeConfig = {\n icon: ({ className }) => <Icon icon={chartPieIcon} className={className} />,\n description: 'Show proportions of a whole',\n useCase: 'Best for showing percentage distribution or composition of a total (limit to 5-7 slices)',\n dropZones: [\n {\n key: 'xAxis',\n label: 'Categories',\n description: 'Dimension for pie slices',\n mandatory: true,\n maxItems: 1,\n acceptTypes: ['dimension'],\n emptyText: 'Drop a dimension for categories'\n },\n {\n key: 'yAxis',\n label: 'Values',\n description: 'Measure for slice sizes',\n mandatory: true,\n maxItems: 1,\n acceptTypes: ['measure'],\n emptyText: 'Drop a measure for values'\n }\n ],\n displayOptions: ['showLegend', 'showTooltip', 'hideHeader']\n}"],"names":["pieChartConfig","className","jsx","Icon","chartPieIcon"],"mappings":";;AAOO,MAAMA,IAAkC;AAAA,EAC7C,MAAM,CAAC,EAAE,WAAAC,EAAA,MAAgB,gBAAAC,EAACC,GAAA,EAAK,MAAMC,GAAc,WAAAH,GAAsB;AAAA,EACzE,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,WAAW;AAAA,MACzB,WAAW;AAAA,IAAA;AAAA,IAEb;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,EACb;AAAA,EAEF,gBAAgB,CAAC,cAAc,eAAe,YAAY;AAC5D;"}
|