drizzle-cube 0.4.4 → 0.4.7
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/express/index.cjs +8 -4
- package/dist/adapters/express/index.d.ts +7 -0
- package/dist/adapters/express/index.js +189 -139
- package/dist/adapters/fastify/index.cjs +8 -4
- package/dist/adapters/fastify/index.d.ts +7 -0
- package/dist/adapters/fastify/index.js +209 -150
- package/dist/adapters/handler-D6l8AbJV.cjs +7 -0
- package/dist/adapters/handler-DsNgnIPK.js +458 -0
- package/dist/adapters/hono/index.cjs +8 -4
- package/dist/adapters/hono/index.d.ts +7 -0
- package/dist/adapters/hono/index.js +202 -144
- package/dist/adapters/{mcp-transport-BqLo4hKi.cjs → mcp-transport-BB998cy5.cjs} +21 -21
- package/dist/adapters/{mcp-transport-YHDZWKOi.js → mcp-transport-DFTCWene.js} +4 -0
- package/dist/adapters/nextjs/index.cjs +7 -3
- package/dist/adapters/nextjs/index.d.ts +14 -0
- package/dist/adapters/nextjs/index.js +220 -144
- package/dist/client/charts.js +13 -13
- package/dist/client/chunks/{RetentionCombinedChart-BK8N-MOQ.js → RetentionCombinedChart-CEI8KQ3t.js} +2 -2
- package/dist/client/chunks/{RetentionCombinedChart-BK8N-MOQ.js.map → RetentionCombinedChart-CEI8KQ3t.js.map} +1 -1
- package/dist/client/chunks/{analysis-builder-CNBmAGAO.js → analysis-builder-Dn8xpgPQ.js} +6 -6
- package/dist/client/chunks/{analysis-builder-CNBmAGAO.js.map → analysis-builder-Dn8xpgPQ.js.map} +1 -1
- package/dist/client/chunks/{analysis-builder-shared-INGGwyTG.js → analysis-builder-shared-D3xYzXlh.js} +2 -2
- package/dist/client/chunks/{analysis-builder-shared-INGGwyTG.js.map → analysis-builder-shared-D3xYzXlh.js.map} +1 -1
- package/dist/client/chunks/{chart-activity-grid-DvgTYQaE.js → chart-activity-grid-DStNr34n.js} +2 -2
- package/dist/client/chunks/{chart-activity-grid-DvgTYQaE.js.map → chart-activity-grid-DStNr34n.js.map} +1 -1
- package/dist/client/chunks/{chart-area-BKjd_STS.js → chart-area-QKKboTbq.js} +3 -3
- package/dist/client/chunks/{chart-area-BKjd_STS.js.map → chart-area-QKKboTbq.js.map} +1 -1
- package/dist/client/chunks/{chart-bar-DBI41w05.js → chart-bar-HpXF42H1.js} +2 -2
- package/dist/client/chunks/{chart-bar-DBI41w05.js.map → chart-bar-HpXF42H1.js.map} +1 -1
- package/dist/client/chunks/{chart-bubble-BD-1kneU.js → chart-bubble-Bf42A1-B.js} +2 -2
- package/dist/client/chunks/{chart-bubble-BD-1kneU.js.map → chart-bubble-Bf42A1-B.js.map} +1 -1
- package/dist/client/chunks/{chart-config-markdown-6fsr-U6_.js → chart-config-markdown-BXKL5TbQ.js} +8 -1
- package/dist/client/chunks/{chart-config-markdown-6fsr-U6_.js.map → chart-config-markdown-BXKL5TbQ.js.map} +1 -1
- package/dist/client/chunks/{chart-data-table-B74HLpAx.js → chart-data-table-Ch_1c1Zo.js} +2 -2
- package/dist/client/chunks/{chart-data-table-B74HLpAx.js.map → chart-data-table-Ch_1c1Zo.js.map} +1 -1
- package/dist/client/chunks/{chart-funnel-DQ9cW6j9.js → chart-funnel-C9kenCpp.js} +2 -2
- package/dist/client/chunks/{chart-funnel-DQ9cW6j9.js.map → chart-funnel-C9kenCpp.js.map} +1 -1
- package/dist/client/chunks/{chart-heat-map-CpIr4tbs.js → chart-heat-map-CYGemyPB.js} +2 -2
- package/dist/client/chunks/{chart-heat-map-CpIr4tbs.js.map → chart-heat-map-CYGemyPB.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-delta-DPcSazD3.js → chart-kpi-delta-CWCmi8vL.js} +3 -3
- package/dist/client/chunks/{chart-kpi-delta-DPcSazD3.js.map → chart-kpi-delta-CWCmi8vL.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-number-D62PzKZ1.js → chart-kpi-number-C-5m3qt5.js} +2 -2
- package/dist/client/chunks/{chart-kpi-number-D62PzKZ1.js.map → chart-kpi-number-C-5m3qt5.js.map} +1 -1
- package/dist/client/chunks/{chart-kpi-text-B6Z5tFV1.js → chart-kpi-text--t4ibPmx.js} +3 -3
- package/dist/client/chunks/{chart-kpi-text-B6Z5tFV1.js.map → chart-kpi-text--t4ibPmx.js.map} +1 -1
- package/dist/client/chunks/{chart-line-Ds4BYA0K.js → chart-line-C7YcMWBw.js} +3 -3
- package/dist/client/chunks/{chart-line-Ds4BYA0K.js.map → chart-line-C7YcMWBw.js.map} +1 -1
- package/dist/client/chunks/chart-markdown-Du4Z2iqK.js +2695 -0
- package/dist/client/chunks/chart-markdown-Du4Z2iqK.js.map +1 -0
- package/dist/client/chunks/{chart-pie-BBrLh0iU.js → chart-pie-C4SuxKSN.js} +2 -2
- package/dist/client/chunks/{chart-pie-BBrLh0iU.js.map → chart-pie-C4SuxKSN.js.map} +1 -1
- package/dist/client/chunks/{chart-radar-vr5FgjHT.js → chart-radar-BW3Z_-Ly.js} +2 -2
- package/dist/client/chunks/{chart-radar-vr5FgjHT.js.map → chart-radar-BW3Z_-Ly.js.map} +1 -1
- package/dist/client/chunks/{chart-radial-bar-BV_3Nm5P.js → chart-radial-bar-0Fa3aeP5.js} +2 -2
- package/dist/client/chunks/{chart-radial-bar-BV_3Nm5P.js.map → chart-radial-bar-0Fa3aeP5.js.map} +1 -1
- package/dist/client/chunks/{chart-sankey-CHROzr4S.js → chart-sankey-DBghfbg1.js} +2 -2
- package/dist/client/chunks/{chart-sankey-CHROzr4S.js.map → chart-sankey-DBghfbg1.js.map} +1 -1
- package/dist/client/chunks/{chart-scatter-DbRTU3FG.js → chart-scatter-DOVu1TNq.js} +2 -2
- package/dist/client/chunks/{chart-scatter-DbRTU3FG.js.map → chart-scatter-DOVu1TNq.js.map} +1 -1
- package/dist/client/chunks/{chart-sunburst-B-aPUzYL.js → chart-sunburst-LfNthFlZ.js} +2 -2
- package/dist/client/chunks/{chart-sunburst-B-aPUzYL.js.map → chart-sunburst-LfNthFlZ.js.map} +1 -1
- package/dist/client/chunks/{chart-tree-map-qY148fiC.js → chart-tree-map-DZtQPyWX.js} +2 -2
- package/dist/client/chunks/{chart-tree-map-qY148fiC.js.map → chart-tree-map-DZtQPyWX.js.map} +1 -1
- package/dist/client/chunks/{chartConfigRegistry-Di34paQH.js → chartConfigRegistry-C5dZm-ZK.js} +2 -2
- package/dist/client/chunks/{chartConfigRegistry-Di34paQH.js.map → chartConfigRegistry-C5dZm-ZK.js.map} +1 -1
- package/dist/client/chunks/{charts-core-T8UglYyq.js → charts-core-DmGfleFz.js} +199 -187
- package/dist/client/chunks/{charts-core-T8UglYyq.js.map → charts-core-DmGfleFz.js.map} +1 -1
- package/dist/client/chunks/{charts-loader-YnhJHubD.js → charts-loader-DcFWOUeV.js} +21 -21
- package/dist/client/chunks/{charts-loader-YnhJHubD.js.map → charts-loader-DcFWOUeV.js.map} +1 -1
- package/dist/client/chunks/{components-D0i1yQsk.js → components-Bdt1AmzS.js} +3521 -3369
- package/dist/client/chunks/components-Bdt1AmzS.js.map +1 -0
- package/dist/client/components/AgenticNotebook/AgentChatPanel.d.ts +8 -0
- package/dist/client/components/AgenticNotebook/ChatInput.d.ts +14 -0
- package/dist/client/components/AgenticNotebook/ChatMessage.d.ts +7 -0
- package/dist/client/components/AgenticNotebook/NotebookCanvas.d.ts +3 -0
- package/dist/client/components/AgenticNotebook/NotebookMarkdownBlock.d.ts +12 -0
- package/dist/client/components/AgenticNotebook/NotebookPortletBlock.d.ts +12 -0
- package/dist/client/components/AgenticNotebook/index.d.ts +34 -0
- package/dist/client/components/DashboardPortletCard.d.ts +3 -2
- package/dist/client/components.js +1 -1
- package/dist/client/hooks/dashboard/layoutUtils.d.ts +7 -0
- package/dist/client/hooks/dashboard/useDashboardController.d.ts +53 -0
- package/dist/client/hooks/dashboard/useGridLayoutEngine.d.ts +10 -0
- package/dist/client/hooks/dashboard/useRowLayoutEngine.d.ts +18 -0
- package/dist/client/hooks/useAgentChat.d.ts +36 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.js +923 -187
- package/dist/client/index.js.map +1 -1
- package/dist/client/stores/notebookStore.d.ts +152 -0
- package/dist/client/styles.css +1 -1
- package/dist/client/utils.js +4 -4
- package/dist/client-bundle-stats.html +1 -1
- package/dist/server/index.cjs +101 -91
- package/dist/server/index.d.ts +155 -0
- package/dist/server/index.js +4423 -3609
- package/package.json +7 -1
- package/dist/client/chunks/chart-markdown-Rq6ORisB.js +0 -276
- package/dist/client/chunks/chart-markdown-Rq6ORisB.js.map +0 -1
- package/dist/client/chunks/components-D0i1yQsk.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "drizzle-cube",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.7",
|
|
4
4
|
"description": "Drizzle ORM-first semantic layer with Cube.js compatibility. Type-safe analytics and dashboards with SQL injection protection.",
|
|
5
5
|
"main": "./dist/server/index.js",
|
|
6
6
|
"types": "./dist/server/index.d.ts",
|
|
@@ -161,6 +161,7 @@
|
|
|
161
161
|
"url": "https://github.com/cliftonc/drizzle-cube/issues"
|
|
162
162
|
},
|
|
163
163
|
"peerDependencies": {
|
|
164
|
+
"@anthropic-ai/sdk": ">=0.30.0",
|
|
164
165
|
"@neondatabase/serverless": "^1.0.1",
|
|
165
166
|
"@nivo/heatmap": "^0.99.0",
|
|
166
167
|
"cors": "^2.8.5",
|
|
@@ -221,6 +222,9 @@
|
|
|
221
222
|
},
|
|
222
223
|
"@leonardovida-md/drizzle-neo-duckdb": {
|
|
223
224
|
"optional": true
|
|
225
|
+
},
|
|
226
|
+
"@anthropic-ai/sdk": {
|
|
227
|
+
"optional": true
|
|
224
228
|
}
|
|
225
229
|
},
|
|
226
230
|
"optionalDependencies": {
|
|
@@ -228,6 +232,7 @@
|
|
|
228
232
|
"@leonardovida-md/drizzle-neo-duckdb": "^1.2.2"
|
|
229
233
|
},
|
|
230
234
|
"devDependencies": {
|
|
235
|
+
"@anthropic-ai/sdk": "^0.78.0",
|
|
231
236
|
"@eslint/eslintrc": "^3.3.1",
|
|
232
237
|
"@eslint/js": "^9.34.0",
|
|
233
238
|
"@fastify/cors": "^11.1.0",
|
|
@@ -305,6 +310,7 @@
|
|
|
305
310
|
"@tanstack/react-query": "^5.90.12",
|
|
306
311
|
"highlight.js": "^11.9.0",
|
|
307
312
|
"lz-string": "^1.5.0",
|
|
313
|
+
"markdown-to-jsx": "^9.7.6",
|
|
308
314
|
"react-intersection-observer": "^10.0.0",
|
|
309
315
|
"react-router-dom": "^7.10.1",
|
|
310
316
|
"zustand": "^5.0.9"
|
|
@@ -1,276 +0,0 @@
|
|
|
1
|
-
import { jsx as l, jsxs as o } from "react/jsx-runtime";
|
|
2
|
-
import B from "react";
|
|
3
|
-
const O = B.memo(function({
|
|
4
|
-
displayConfig: u = {},
|
|
5
|
-
height: f = "100%",
|
|
6
|
-
colorPalette: g
|
|
7
|
-
}) {
|
|
8
|
-
const C = u.content || "", w = u.accentColorIndex ?? 0, N = u.fontSize || "medium", m = u.alignment || "left", $ = !!u.transparentBackground, p = u.accentBorder || "none", a = g?.colors && w < g.colors.length ? g.colors[w] : "#8884d8", v = {
|
|
9
|
-
small: "dc:text-sm",
|
|
10
|
-
medium: "dc:text-lg",
|
|
11
|
-
large: "dc:text-xl"
|
|
12
|
-
}, j = {
|
|
13
|
-
left: "dc:text-left",
|
|
14
|
-
center: "dc:text-center",
|
|
15
|
-
right: "dc:text-right"
|
|
16
|
-
}, I = (c) => {
|
|
17
|
-
const t = c.split(`
|
|
18
|
-
`), r = [];
|
|
19
|
-
let e = null;
|
|
20
|
-
for (let n = 0; n < t.length; n++) {
|
|
21
|
-
const s = t[n].trim();
|
|
22
|
-
if (!s) {
|
|
23
|
-
e && (r.push(e), e = null), r.push({ type: "break" });
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
if (/^[-*_]{3,}$/.test(s)) {
|
|
27
|
-
e && (r.push(e), e = null), r.push({ type: "hr" });
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
const d = s.match(/^(#{1,3})\s+(.*)$/);
|
|
31
|
-
if (d) {
|
|
32
|
-
e && (r.push(e), e = null), r.push({
|
|
33
|
-
type: "header",
|
|
34
|
-
level: d[1].length,
|
|
35
|
-
content: d[2]
|
|
36
|
-
});
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
const i = s.match(/^[-*+]\s+(.*)$/);
|
|
40
|
-
if (i) {
|
|
41
|
-
(!e || e.ordered) && (e && r.push(e), e = { type: "list", ordered: !1, children: [] }), e.children.push({
|
|
42
|
-
type: "listItem",
|
|
43
|
-
children: k(i[1]),
|
|
44
|
-
parentOrdered: !1
|
|
45
|
-
});
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
const x = s.match(/^\d+\.\s+(.*)$/);
|
|
49
|
-
if (x) {
|
|
50
|
-
(!e || !e.ordered) && (e && r.push(e), e = { type: "list", ordered: !0, children: [] }), e.children.push({
|
|
51
|
-
type: "listItem",
|
|
52
|
-
children: k(x[1]),
|
|
53
|
-
parentOrdered: !0
|
|
54
|
-
});
|
|
55
|
-
continue;
|
|
56
|
-
}
|
|
57
|
-
e && (r.push(e), e = null), r.push({
|
|
58
|
-
type: "paragraph",
|
|
59
|
-
children: k(s)
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
return e && r.push(e), r;
|
|
63
|
-
}, k = (c) => {
|
|
64
|
-
const t = [];
|
|
65
|
-
let r = c;
|
|
66
|
-
for (; r; ) {
|
|
67
|
-
const e = r.match(/^(.*?)\[([^\]]+)\]\(([^)]+)\)(.*)$/);
|
|
68
|
-
if (e) {
|
|
69
|
-
const [, n, s, d, i] = e;
|
|
70
|
-
n && t.push(...M(n)), t.push({
|
|
71
|
-
type: "link",
|
|
72
|
-
content: s,
|
|
73
|
-
url: d
|
|
74
|
-
}), r = i;
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
|
-
t.push(...M(r));
|
|
78
|
-
break;
|
|
79
|
-
}
|
|
80
|
-
return t;
|
|
81
|
-
}, M = (c) => {
|
|
82
|
-
const t = [];
|
|
83
|
-
let r = c;
|
|
84
|
-
for (; r; ) {
|
|
85
|
-
const e = r.match(/^(.*?)\*\*([^*]+)\*\*(.*)$/);
|
|
86
|
-
if (e) {
|
|
87
|
-
const [, s, d, i] = e;
|
|
88
|
-
s && t.push({ type: "text", content: s }), t.push({ type: "bold", content: d }), r = i;
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
const n = r.match(/^(.*?)\*([^*]+)\*(.*)$/);
|
|
92
|
-
if (n) {
|
|
93
|
-
const [, s, d, i] = n;
|
|
94
|
-
s && t.push({ type: "text", content: s }), t.push({ type: "italic", content: d }), r = i;
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
t.push({ type: "text", content: r });
|
|
98
|
-
break;
|
|
99
|
-
}
|
|
100
|
-
return t;
|
|
101
|
-
}, h = (c, t, r) => {
|
|
102
|
-
switch (c.type) {
|
|
103
|
-
case "text":
|
|
104
|
-
return /* @__PURE__ */ l("span", { className: "text-dc-text", children: c.content }, t);
|
|
105
|
-
case "bold":
|
|
106
|
-
return /* @__PURE__ */ l("strong", { className: "dc:font-bold text-dc-text", children: c.content }, t);
|
|
107
|
-
case "italic":
|
|
108
|
-
return /* @__PURE__ */ l("em", { className: "dc:italic text-dc-text", children: c.content }, t);
|
|
109
|
-
case "link":
|
|
110
|
-
return /* @__PURE__ */ l(
|
|
111
|
-
"a",
|
|
112
|
-
{
|
|
113
|
-
href: c.url,
|
|
114
|
-
target: "_blank",
|
|
115
|
-
rel: "nofollow noopener noreferrer",
|
|
116
|
-
className: "dc:hover:underline dc:transition-colors",
|
|
117
|
-
style: { color: a },
|
|
118
|
-
children: c.content
|
|
119
|
-
},
|
|
120
|
-
t
|
|
121
|
-
);
|
|
122
|
-
case "header": {
|
|
123
|
-
const e = (s, d) => {
|
|
124
|
-
const i = "dc:font-bold", x = {
|
|
125
|
-
1: "dc:mb-4",
|
|
126
|
-
2: "dc:mb-3",
|
|
127
|
-
3: "dc:mb-2"
|
|
128
|
-
};
|
|
129
|
-
let b = "";
|
|
130
|
-
return d === "small" ? b = { 1: "dc:text-lg", 2: "dc:text-base", 3: "dc:text-sm" }[s] || "dc:text-sm" : d === "large" ? b = { 1: "dc:text-5xl", 2: "dc:text-4xl", 3: "dc:text-3xl" }[s] || "dc:text-3xl" : b = { 1: "dc:text-3xl", 2: "dc:text-2xl", 3: "dc:text-xl" }[s] || "dc:text-xl", `${i} ${b} ${x[s]}`;
|
|
131
|
-
}, n = `h${c.level}`;
|
|
132
|
-
return /* @__PURE__ */ l(
|
|
133
|
-
n,
|
|
134
|
-
{
|
|
135
|
-
className: e(c.level, N),
|
|
136
|
-
style: { color: a },
|
|
137
|
-
children: c.content
|
|
138
|
-
},
|
|
139
|
-
t
|
|
140
|
-
);
|
|
141
|
-
}
|
|
142
|
-
case "paragraph":
|
|
143
|
-
return /* @__PURE__ */ l("p", { className: "dc:mb-3 dc:leading-relaxed", children: c.children?.map((e, n) => h(e, n)) }, t);
|
|
144
|
-
case "list": {
|
|
145
|
-
const e = c.ordered ? "ol" : "ul";
|
|
146
|
-
let n = "mb-3";
|
|
147
|
-
return m === "center" ? n += " list-none flex flex-col items-center" : m === "right" ? n += " list-none ml-auto max-w-max" : n += " list-none ml-6", /* @__PURE__ */ l(e, { className: n, children: c.children?.map((s, d) => h(s, d, c.ordered ? d + 1 : void 0)) }, t);
|
|
148
|
-
}
|
|
149
|
-
case "listItem":
|
|
150
|
-
if (c.children) {
|
|
151
|
-
if (c.parentOrdered && r !== void 0) {
|
|
152
|
-
const e = v[N];
|
|
153
|
-
return m === "center" ? /* @__PURE__ */ o("li", { className: "dc:mb-1 dc:flex dc:items-center dc:justify-center", children: [
|
|
154
|
-
/* @__PURE__ */ o(
|
|
155
|
-
"span",
|
|
156
|
-
{
|
|
157
|
-
className: `dc:inline-block dc:mr-2 dc:shrink-0 ${e} dc:font-medium`,
|
|
158
|
-
style: { color: a },
|
|
159
|
-
children: [
|
|
160
|
-
r,
|
|
161
|
-
"."
|
|
162
|
-
]
|
|
163
|
-
}
|
|
164
|
-
),
|
|
165
|
-
/* @__PURE__ */ l("span", { className: "dc:text-center", children: c.children.map((n, s) => h(n, s)) })
|
|
166
|
-
] }, t) : m === "right" ? /* @__PURE__ */ o("li", { className: "dc:mb-1 dc:flex dc:items-start dc:justify-end", children: [
|
|
167
|
-
/* @__PURE__ */ l("span", { className: "dc:text-right", children: c.children.map((n, s) => h(n, s)) }),
|
|
168
|
-
/* @__PURE__ */ o(
|
|
169
|
-
"span",
|
|
170
|
-
{
|
|
171
|
-
className: `dc:inline-block dc:ml-2 dc:shrink-0 ${e} dc:font-medium`,
|
|
172
|
-
style: { color: a },
|
|
173
|
-
children: [
|
|
174
|
-
r,
|
|
175
|
-
"."
|
|
176
|
-
]
|
|
177
|
-
}
|
|
178
|
-
)
|
|
179
|
-
] }, t) : /* @__PURE__ */ o("li", { className: "dc:mb-1 dc:flex dc:items-start", children: [
|
|
180
|
-
/* @__PURE__ */ o(
|
|
181
|
-
"span",
|
|
182
|
-
{
|
|
183
|
-
className: `dc:inline-block dc:mr-3 dc:shrink-0 ${e} dc:font-medium`,
|
|
184
|
-
style: { color: a },
|
|
185
|
-
children: [
|
|
186
|
-
r,
|
|
187
|
-
"."
|
|
188
|
-
]
|
|
189
|
-
}
|
|
190
|
-
),
|
|
191
|
-
/* @__PURE__ */ l("span", { className: "dc:flex-1", children: c.children.map((n, s) => h(n, s)) })
|
|
192
|
-
] }, t);
|
|
193
|
-
}
|
|
194
|
-
return m === "center" ? /* @__PURE__ */ o("li", { className: "dc:mb-1 dc:flex dc:items-center dc:justify-center", children: [
|
|
195
|
-
/* @__PURE__ */ l(
|
|
196
|
-
"span",
|
|
197
|
-
{
|
|
198
|
-
className: "dc:inline-block dc:w-2 dc:h-2 dc:rounded-full dc:mr-2 dc:shrink-0",
|
|
199
|
-
style: { backgroundColor: a }
|
|
200
|
-
}
|
|
201
|
-
),
|
|
202
|
-
/* @__PURE__ */ l("span", { className: "dc:text-center", children: c.children.map((e, n) => h(e, n)) })
|
|
203
|
-
] }, t) : m === "right" ? /* @__PURE__ */ o("li", { className: "dc:mb-1 dc:flex dc:items-start dc:justify-end", children: [
|
|
204
|
-
/* @__PURE__ */ l("span", { className: "dc:text-right", children: c.children.map((e, n) => h(e, n)) }),
|
|
205
|
-
/* @__PURE__ */ l(
|
|
206
|
-
"span",
|
|
207
|
-
{
|
|
208
|
-
className: "dc:inline-block dc:w-2 dc:h-2 dc:rounded-full dc:ml-2 dc:mt-2 dc:shrink-0",
|
|
209
|
-
style: { backgroundColor: a }
|
|
210
|
-
}
|
|
211
|
-
)
|
|
212
|
-
] }, t) : /* @__PURE__ */ o("li", { className: "dc:mb-1 dc:flex dc:items-start", children: [
|
|
213
|
-
/* @__PURE__ */ l(
|
|
214
|
-
"span",
|
|
215
|
-
{
|
|
216
|
-
className: "dc:inline-block dc:w-2 dc:h-2 dc:rounded-full dc:mr-3 dc:mt-2 dc:shrink-0",
|
|
217
|
-
style: { backgroundColor: a }
|
|
218
|
-
}
|
|
219
|
-
),
|
|
220
|
-
/* @__PURE__ */ l("span", { className: "dc:flex-1", children: c.children.map((e, n) => h(e, n)) })
|
|
221
|
-
] }, t);
|
|
222
|
-
}
|
|
223
|
-
return null;
|
|
224
|
-
case "hr":
|
|
225
|
-
return /* @__PURE__ */ l(
|
|
226
|
-
"hr",
|
|
227
|
-
{
|
|
228
|
-
className: "dc:my-4 dc:border-none",
|
|
229
|
-
style: { height: "2px", backgroundColor: a, opacity: 0.3 }
|
|
230
|
-
},
|
|
231
|
-
t
|
|
232
|
-
);
|
|
233
|
-
case "break":
|
|
234
|
-
return /* @__PURE__ */ l("br", {}, t);
|
|
235
|
-
default:
|
|
236
|
-
return null;
|
|
237
|
-
}
|
|
238
|
-
};
|
|
239
|
-
if (!C.trim())
|
|
240
|
-
return $ ? null : /* @__PURE__ */ l(
|
|
241
|
-
"div",
|
|
242
|
-
{
|
|
243
|
-
className: "dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full",
|
|
244
|
-
style: {
|
|
245
|
-
height: f === "100%" ? "100%" : f
|
|
246
|
-
},
|
|
247
|
-
children: /* @__PURE__ */ o("div", { className: "dc:text-center text-dc-text-muted", children: [
|
|
248
|
-
/* @__PURE__ */ l("div", { className: "dc:text-sm dc:font-semibold dc:mb-1", children: "No content" }),
|
|
249
|
-
/* @__PURE__ */ l("div", { className: "dc:text-xs text-dc-text-secondary", children: "Add markdown content in the chart configuration" })
|
|
250
|
-
] })
|
|
251
|
-
}
|
|
252
|
-
);
|
|
253
|
-
const A = I(C), y = {};
|
|
254
|
-
if (p !== "none") {
|
|
255
|
-
const c = `border${p.charAt(0).toUpperCase() + p.slice(1)}`;
|
|
256
|
-
if (y[c] = `4px solid ${a}`, $) {
|
|
257
|
-
const t = `padding${p.charAt(0).toUpperCase() + p.slice(1)}`;
|
|
258
|
-
p === "left" && (y[t] = "12px");
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
return /* @__PURE__ */ l(
|
|
262
|
-
"div",
|
|
263
|
-
{
|
|
264
|
-
className: `dc:w-full dc:overflow-auto ${$ ? "" : "dc:p-4 "}${v[N]} ${j[m]}`,
|
|
265
|
-
style: {
|
|
266
|
-
height: f === "100%" ? "100%" : f,
|
|
267
|
-
...y
|
|
268
|
-
},
|
|
269
|
-
children: A.map((c, t) => h(c, t))
|
|
270
|
-
}
|
|
271
|
-
);
|
|
272
|
-
});
|
|
273
|
-
export {
|
|
274
|
-
O as default
|
|
275
|
-
};
|
|
276
|
-
//# sourceMappingURL=chart-markdown-Rq6ORisB.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"chart-markdown-Rq6ORisB.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' | 'hr'\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\nconst MarkdownChart = React.memo(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 const transparentBackground = !!displayConfig.transparentBackground\n const accentBorder = displayConfig.accentBorder || 'none'\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: 'dc:text-sm',\n medium: 'dc:text-lg',\n large: 'dc:text-xl'\n }\n\n // Alignment mapping\n const alignmentClasses = {\n left: 'dc:text-left',\n center: 'dc:text-center',\n right: 'dc: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 // Horizontal rule (---, ***, ___ with 3+ chars)\n if (/^[-*_]{3,}$/.test(line)) {\n if (currentList) {\n nodes.push(currentList)\n currentList = null\n }\n nodes.push({ type: 'hr' })\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=\"dc:font-bold text-dc-text\">{node.content}</strong>\n\n case 'italic':\n return <em key={key} className=\"dc: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=\"dc:hover:underline dc: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 = 'dc:font-bold'\n const marginClasses = {\n 1: 'dc:mb-4',\n 2: 'dc:mb-3',\n 3: 'dc:mb-2'\n }\n\n let sizeClasses = ''\n if (fontSize === 'small') {\n sizeClasses = { 1: 'dc:text-lg', 2: 'dc:text-base', 3: 'dc:text-sm' }[level] || 'dc:text-sm'\n } else if (fontSize === 'large') {\n sizeClasses = { 1: 'dc:text-5xl', 2: 'dc:text-4xl', 3: 'dc:text-3xl' }[level] || 'dc:text-3xl'\n } else { // medium (default)\n sizeClasses = { 1: 'dc:text-3xl', 2: 'dc:text-2xl', 3: 'dc:text-xl' }[level] || 'dc:text-xl'\n }\n\n return `${baseClasses} ${sizeClasses} ${marginClasses[level as keyof typeof marginClasses]}`\n }\n\n const HeaderTag = `h${node.level}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'\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\n case 'paragraph':\n return (\n <p key={key} className=\"dc:mb-3 dc: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\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=\"dc:mb-1 dc:flex dc:items-center dc:justify-center\">\n <span \n className={`dc:inline-block dc:mr-2 dc:shrink-0 ${numberSizeClass} dc:font-medium`}\n style={{ color: accentColor }}\n >\n {listNumber}.\n </span>\n <span className=\"dc: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=\"dc:mb-1 dc:flex dc:items-start dc:justify-end\">\n <span className=\"dc:text-right\">\n {node.children.map((child, i) => renderNode(child, i))}\n </span>\n <span \n className={`dc:inline-block dc:ml-2 dc:shrink-0 ${numberSizeClass} dc:font-medium`}\n style={{ color: accentColor }}\n >\n {listNumber}.\n </span>\n </li>\n )\n } else {\n return (\n <li key={key} className=\"dc:mb-1 dc:flex dc:items-start\">\n <span \n className={`dc:inline-block dc:mr-3 dc:shrink-0 ${numberSizeClass} dc:font-medium`}\n style={{ color: accentColor }}\n >\n {listNumber}.\n </span>\n <span className=\"dc: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=\"dc:mb-1 dc:flex dc:items-center dc:justify-center\">\n <span \n className=\"dc:inline-block dc:w-2 dc:h-2 dc:rounded-full dc:mr-2 dc:shrink-0\"\n style={{ backgroundColor: accentColor }}\n />\n <span className=\"dc: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=\"dc:mb-1 dc:flex dc:items-start dc:justify-end\">\n <span className=\"dc:text-right\">\n {node.children.map((child, i) => renderNode(child, i))}\n </span>\n <span \n className=\"dc:inline-block dc:w-2 dc:h-2 dc:rounded-full dc:ml-2 dc:mt-2 dc:shrink-0\"\n style={{ backgroundColor: accentColor }}\n />\n </li>\n )\n } else {\n return (\n <li key={key} className=\"dc:mb-1 dc:flex dc:items-start\">\n <span \n className=\"dc:inline-block dc:w-2 dc:h-2 dc:rounded-full dc:mr-3 dc:mt-2 dc:shrink-0\"\n style={{ backgroundColor: accentColor }}\n />\n <span className=\"dc:flex-1\">\n {node.children.map((child, i) => renderNode(child, i))}\n </span>\n </li>\n )\n }\n }\n return null\n\n case 'hr':\n return (\n <hr\n key={key}\n className=\"dc:my-4 dc:border-none\"\n style={{ height: '2px', backgroundColor: accentColor, opacity: 0.3 }}\n />\n )\n\n case 'break':\n return <br key={key} />\n\n default:\n return null\n }\n }\n\n if (!content.trim()) {\n // When transparent, don't show any placeholder\n if (transparentBackground) return null\n\n return (\n <div\n className=\"dc:flex dc:items-center dc:justify-center dc:w-full dc:h-full\"\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n }}\n >\n <div className=\"dc:text-center text-dc-text-muted\">\n <div className=\"dc:text-sm dc:font-semibold dc:mb-1\">No content</div>\n <div className=\"dc: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 // Build accent border styles\n const accentBorderStyle: React.CSSProperties = {}\n if (accentBorder !== 'none') {\n const borderProp = `border${accentBorder.charAt(0).toUpperCase() + accentBorder.slice(1)}` as 'borderLeft' | 'borderTop' | 'borderBottom'\n accentBorderStyle[borderProp] = `4px solid ${accentColor}`\n // Add small padding on the border side when transparent\n if (transparentBackground) {\n const paddingProp = `padding${accentBorder.charAt(0).toUpperCase() + accentBorder.slice(1)}` as 'paddingLeft' | 'paddingTop' | 'paddingBottom'\n if (accentBorder === 'left') accentBorderStyle[paddingProp] = '12px'\n }\n }\n\n return (\n <div\n className={`dc:w-full dc:overflow-auto ${transparentBackground ? '' : 'dc:p-4 '}${fontSizeClasses[fontSize as keyof typeof fontSizeClasses]} ${alignmentClasses[alignment as keyof typeof alignmentClasses]}`}\n style={{\n height: height === \"100%\" ? \"100%\" : height,\n ...accentBorderStyle\n }}\n >\n {parsedNodes.map((node, index) => renderNode(node, index))}\n </div>\n )\n})\n\nexport default MarkdownChart"],"names":["MarkdownChart","React","displayConfig","height","colorPalette","content","accentColorIndex","fontSize","alignment","transparentBackground","accentBorder","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","accentBorderStyle","borderProp","paddingProp","index"],"mappings":"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"}
|