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.
Files changed (99) 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 +13 -13
  18. package/dist/client/chunks/{RetentionCombinedChart-BK8N-MOQ.js → RetentionCombinedChart-CEI8KQ3t.js} +2 -2
  19. package/dist/client/chunks/{RetentionCombinedChart-BK8N-MOQ.js.map → RetentionCombinedChart-CEI8KQ3t.js.map} +1 -1
  20. package/dist/client/chunks/{analysis-builder-CNBmAGAO.js → analysis-builder-Dn8xpgPQ.js} +6 -6
  21. package/dist/client/chunks/{analysis-builder-CNBmAGAO.js.map → analysis-builder-Dn8xpgPQ.js.map} +1 -1
  22. package/dist/client/chunks/{analysis-builder-shared-INGGwyTG.js → analysis-builder-shared-D3xYzXlh.js} +2 -2
  23. package/dist/client/chunks/{analysis-builder-shared-INGGwyTG.js.map → analysis-builder-shared-D3xYzXlh.js.map} +1 -1
  24. package/dist/client/chunks/{chart-activity-grid-DvgTYQaE.js → chart-activity-grid-DStNr34n.js} +2 -2
  25. package/dist/client/chunks/{chart-activity-grid-DvgTYQaE.js.map → chart-activity-grid-DStNr34n.js.map} +1 -1
  26. package/dist/client/chunks/{chart-area-BKjd_STS.js → chart-area-QKKboTbq.js} +3 -3
  27. package/dist/client/chunks/{chart-area-BKjd_STS.js.map → chart-area-QKKboTbq.js.map} +1 -1
  28. package/dist/client/chunks/{chart-bar-DBI41w05.js → chart-bar-HpXF42H1.js} +2 -2
  29. package/dist/client/chunks/{chart-bar-DBI41w05.js.map → chart-bar-HpXF42H1.js.map} +1 -1
  30. package/dist/client/chunks/{chart-bubble-BD-1kneU.js → chart-bubble-Bf42A1-B.js} +2 -2
  31. package/dist/client/chunks/{chart-bubble-BD-1kneU.js.map → chart-bubble-Bf42A1-B.js.map} +1 -1
  32. package/dist/client/chunks/{chart-config-markdown-6fsr-U6_.js → chart-config-markdown-BXKL5TbQ.js} +8 -1
  33. package/dist/client/chunks/{chart-config-markdown-6fsr-U6_.js.map → chart-config-markdown-BXKL5TbQ.js.map} +1 -1
  34. package/dist/client/chunks/{chart-data-table-B74HLpAx.js → chart-data-table-Ch_1c1Zo.js} +2 -2
  35. package/dist/client/chunks/{chart-data-table-B74HLpAx.js.map → chart-data-table-Ch_1c1Zo.js.map} +1 -1
  36. package/dist/client/chunks/{chart-funnel-DQ9cW6j9.js → chart-funnel-C9kenCpp.js} +2 -2
  37. package/dist/client/chunks/{chart-funnel-DQ9cW6j9.js.map → chart-funnel-C9kenCpp.js.map} +1 -1
  38. package/dist/client/chunks/{chart-heat-map-CpIr4tbs.js → chart-heat-map-CYGemyPB.js} +2 -2
  39. package/dist/client/chunks/{chart-heat-map-CpIr4tbs.js.map → chart-heat-map-CYGemyPB.js.map} +1 -1
  40. package/dist/client/chunks/{chart-kpi-delta-DPcSazD3.js → chart-kpi-delta-CWCmi8vL.js} +3 -3
  41. package/dist/client/chunks/{chart-kpi-delta-DPcSazD3.js.map → chart-kpi-delta-CWCmi8vL.js.map} +1 -1
  42. package/dist/client/chunks/{chart-kpi-number-D62PzKZ1.js → chart-kpi-number-C-5m3qt5.js} +2 -2
  43. package/dist/client/chunks/{chart-kpi-number-D62PzKZ1.js.map → chart-kpi-number-C-5m3qt5.js.map} +1 -1
  44. package/dist/client/chunks/{chart-kpi-text-B6Z5tFV1.js → chart-kpi-text--t4ibPmx.js} +3 -3
  45. package/dist/client/chunks/{chart-kpi-text-B6Z5tFV1.js.map → chart-kpi-text--t4ibPmx.js.map} +1 -1
  46. package/dist/client/chunks/{chart-line-Ds4BYA0K.js → chart-line-C7YcMWBw.js} +3 -3
  47. package/dist/client/chunks/{chart-line-Ds4BYA0K.js.map → chart-line-C7YcMWBw.js.map} +1 -1
  48. package/dist/client/chunks/chart-markdown-Du4Z2iqK.js +2695 -0
  49. package/dist/client/chunks/chart-markdown-Du4Z2iqK.js.map +1 -0
  50. package/dist/client/chunks/{chart-pie-BBrLh0iU.js → chart-pie-C4SuxKSN.js} +2 -2
  51. package/dist/client/chunks/{chart-pie-BBrLh0iU.js.map → chart-pie-C4SuxKSN.js.map} +1 -1
  52. package/dist/client/chunks/{chart-radar-vr5FgjHT.js → chart-radar-BW3Z_-Ly.js} +2 -2
  53. package/dist/client/chunks/{chart-radar-vr5FgjHT.js.map → chart-radar-BW3Z_-Ly.js.map} +1 -1
  54. package/dist/client/chunks/{chart-radial-bar-BV_3Nm5P.js → chart-radial-bar-0Fa3aeP5.js} +2 -2
  55. package/dist/client/chunks/{chart-radial-bar-BV_3Nm5P.js.map → chart-radial-bar-0Fa3aeP5.js.map} +1 -1
  56. package/dist/client/chunks/{chart-sankey-CHROzr4S.js → chart-sankey-DBghfbg1.js} +2 -2
  57. package/dist/client/chunks/{chart-sankey-CHROzr4S.js.map → chart-sankey-DBghfbg1.js.map} +1 -1
  58. package/dist/client/chunks/{chart-scatter-DbRTU3FG.js → chart-scatter-DOVu1TNq.js} +2 -2
  59. package/dist/client/chunks/{chart-scatter-DbRTU3FG.js.map → chart-scatter-DOVu1TNq.js.map} +1 -1
  60. package/dist/client/chunks/{chart-sunburst-B-aPUzYL.js → chart-sunburst-LfNthFlZ.js} +2 -2
  61. package/dist/client/chunks/{chart-sunburst-B-aPUzYL.js.map → chart-sunburst-LfNthFlZ.js.map} +1 -1
  62. package/dist/client/chunks/{chart-tree-map-qY148fiC.js → chart-tree-map-DZtQPyWX.js} +2 -2
  63. package/dist/client/chunks/{chart-tree-map-qY148fiC.js.map → chart-tree-map-DZtQPyWX.js.map} +1 -1
  64. package/dist/client/chunks/{chartConfigRegistry-Di34paQH.js → chartConfigRegistry-C5dZm-ZK.js} +2 -2
  65. package/dist/client/chunks/{chartConfigRegistry-Di34paQH.js.map → chartConfigRegistry-C5dZm-ZK.js.map} +1 -1
  66. package/dist/client/chunks/{charts-core-T8UglYyq.js → charts-core-DmGfleFz.js} +199 -187
  67. package/dist/client/chunks/{charts-core-T8UglYyq.js.map → charts-core-DmGfleFz.js.map} +1 -1
  68. package/dist/client/chunks/{charts-loader-YnhJHubD.js → charts-loader-DcFWOUeV.js} +21 -21
  69. package/dist/client/chunks/{charts-loader-YnhJHubD.js.map → charts-loader-DcFWOUeV.js.map} +1 -1
  70. package/dist/client/chunks/{components-D0i1yQsk.js → components-Bdt1AmzS.js} +3521 -3369
  71. package/dist/client/chunks/components-Bdt1AmzS.js.map +1 -0
  72. package/dist/client/components/AgenticNotebook/AgentChatPanel.d.ts +8 -0
  73. package/dist/client/components/AgenticNotebook/ChatInput.d.ts +14 -0
  74. package/dist/client/components/AgenticNotebook/ChatMessage.d.ts +7 -0
  75. package/dist/client/components/AgenticNotebook/NotebookCanvas.d.ts +3 -0
  76. package/dist/client/components/AgenticNotebook/NotebookMarkdownBlock.d.ts +12 -0
  77. package/dist/client/components/AgenticNotebook/NotebookPortletBlock.d.ts +12 -0
  78. package/dist/client/components/AgenticNotebook/index.d.ts +34 -0
  79. package/dist/client/components/DashboardPortletCard.d.ts +3 -2
  80. package/dist/client/components.js +1 -1
  81. package/dist/client/hooks/dashboard/layoutUtils.d.ts +7 -0
  82. package/dist/client/hooks/dashboard/useDashboardController.d.ts +53 -0
  83. package/dist/client/hooks/dashboard/useGridLayoutEngine.d.ts +10 -0
  84. package/dist/client/hooks/dashboard/useRowLayoutEngine.d.ts +18 -0
  85. package/dist/client/hooks/useAgentChat.d.ts +36 -0
  86. package/dist/client/index.d.ts +6 -0
  87. package/dist/client/index.js +923 -187
  88. package/dist/client/index.js.map +1 -1
  89. package/dist/client/stores/notebookStore.d.ts +152 -0
  90. package/dist/client/styles.css +1 -1
  91. package/dist/client/utils.js +4 -4
  92. package/dist/client-bundle-stats.html +1 -1
  93. package/dist/server/index.cjs +101 -91
  94. package/dist/server/index.d.ts +155 -0
  95. package/dist/server/index.js +4423 -3609
  96. package/package.json +7 -1
  97. package/dist/client/chunks/chart-markdown-Rq6ORisB.js +0 -276
  98. package/dist/client/chunks/chart-markdown-Rq6ORisB.js.map +0 -1
  99. 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.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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"}