drizzle-cube 0.4.5 → 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.
Files changed (48) hide show
  1. package/dist/adapters/express/index.cjs +8 -4
  2. package/dist/adapters/express/index.d.ts +7 -0
  3. package/dist/adapters/express/index.js +189 -139
  4. package/dist/adapters/fastify/index.cjs +8 -4
  5. package/dist/adapters/fastify/index.d.ts +7 -0
  6. package/dist/adapters/fastify/index.js +209 -150
  7. package/dist/adapters/handler-D6l8AbJV.cjs +7 -0
  8. package/dist/adapters/handler-DsNgnIPK.js +458 -0
  9. package/dist/adapters/hono/index.cjs +8 -4
  10. package/dist/adapters/hono/index.d.ts +7 -0
  11. package/dist/adapters/hono/index.js +202 -144
  12. package/dist/adapters/{mcp-transport-BqLo4hKi.cjs → mcp-transport-BB998cy5.cjs} +21 -21
  13. package/dist/adapters/{mcp-transport-YHDZWKOi.js → mcp-transport-DFTCWene.js} +4 -0
  14. package/dist/adapters/nextjs/index.cjs +7 -3
  15. package/dist/adapters/nextjs/index.d.ts +14 -0
  16. package/dist/adapters/nextjs/index.js +220 -144
  17. package/dist/client/charts.js +1 -1
  18. package/dist/client/chunks/{analysis-builder-CG5VIMYB.js → analysis-builder-Dn8xpgPQ.js} +4 -4
  19. package/dist/client/chunks/{analysis-builder-CG5VIMYB.js.map → analysis-builder-Dn8xpgPQ.js.map} +1 -1
  20. package/dist/client/chunks/{analysis-builder-shared-CjlKJgyA.js → analysis-builder-shared-D3xYzXlh.js} +2 -2
  21. package/dist/client/chunks/{analysis-builder-shared-CjlKJgyA.js.map → analysis-builder-shared-D3xYzXlh.js.map} +1 -1
  22. package/dist/client/chunks/chart-markdown-Du4Z2iqK.js +2695 -0
  23. package/dist/client/chunks/chart-markdown-Du4Z2iqK.js.map +1 -0
  24. package/dist/client/chunks/{charts-loader-m5Ussksz.js → charts-loader-DcFWOUeV.js} +2 -2
  25. package/dist/client/chunks/{charts-loader-m5Ussksz.js.map → charts-loader-DcFWOUeV.js.map} +1 -1
  26. package/dist/client/chunks/{components-D-5p1LVQ.js → components-Bdt1AmzS.js} +4 -4
  27. package/dist/client/chunks/{components-D-5p1LVQ.js.map → components-Bdt1AmzS.js.map} +1 -1
  28. package/dist/client/components/AgenticNotebook/AgentChatPanel.d.ts +8 -0
  29. package/dist/client/components/AgenticNotebook/ChatInput.d.ts +14 -0
  30. package/dist/client/components/AgenticNotebook/ChatMessage.d.ts +7 -0
  31. package/dist/client/components/AgenticNotebook/NotebookCanvas.d.ts +3 -0
  32. package/dist/client/components/AgenticNotebook/NotebookMarkdownBlock.d.ts +12 -0
  33. package/dist/client/components/AgenticNotebook/NotebookPortletBlock.d.ts +12 -0
  34. package/dist/client/components/AgenticNotebook/index.d.ts +34 -0
  35. package/dist/client/components.js +1 -1
  36. package/dist/client/hooks/useAgentChat.d.ts +36 -0
  37. package/dist/client/index.d.ts +6 -0
  38. package/dist/client/index.js +923 -187
  39. package/dist/client/index.js.map +1 -1
  40. package/dist/client/stores/notebookStore.d.ts +152 -0
  41. package/dist/client/styles.css +1 -1
  42. package/dist/client-bundle-stats.html +1 -1
  43. package/dist/server/index.cjs +101 -91
  44. package/dist/server/index.d.ts +155 -0
  45. package/dist/server/index.js +4423 -3609
  46. package/package.json +7 -1
  47. package/dist/client/chunks/chart-markdown-Rq6ORisB.js +0 -276
  48. package/dist/client/chunks/chart-markdown-Rq6ORisB.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "drizzle-cube",
3
- "version": "0.4.5",
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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"}