@aigentyc/chat-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +156 -0
  3. package/dist/JsonRenderResult-Ftw4AKwb.d.cts +18 -0
  4. package/dist/JsonRenderResult-Ftw4AKwb.d.ts +18 -0
  5. package/dist/JsonRenderResult-GQOYPLVH.cjs +15 -0
  6. package/dist/JsonRenderResult-GQOYPLVH.cjs.map +1 -0
  7. package/dist/JsonRenderResult-ZFJ6VWMS.js +6 -0
  8. package/dist/JsonRenderResult-ZFJ6VWMS.js.map +1 -0
  9. package/dist/SlotsContext-CBtt36al.d.ts +148 -0
  10. package/dist/SlotsContext-CHvISDJT.d.cts +148 -0
  11. package/dist/VisualizationRenderer-FNFYNN66.js +5 -0
  12. package/dist/VisualizationRenderer-FNFYNN66.js.map +1 -0
  13. package/dist/VisualizationRenderer-VKMZXRUX.cjs +20 -0
  14. package/dist/VisualizationRenderer-VKMZXRUX.cjs.map +1 -0
  15. package/dist/ai-elements.cjs +4608 -0
  16. package/dist/ai-elements.cjs.map +1 -0
  17. package/dist/ai-elements.d.cts +897 -0
  18. package/dist/ai-elements.d.ts +897 -0
  19. package/dist/ai-elements.js +4363 -0
  20. package/dist/ai-elements.js.map +1 -0
  21. package/dist/chunk-3MP2EGEJ.cjs +270 -0
  22. package/dist/chunk-3MP2EGEJ.cjs.map +1 -0
  23. package/dist/chunk-3RW7O444.js +26 -0
  24. package/dist/chunk-3RW7O444.js.map +1 -0
  25. package/dist/chunk-42ARGQXE.js +51 -0
  26. package/dist/chunk-42ARGQXE.js.map +1 -0
  27. package/dist/chunk-4FBVV64J.js +257 -0
  28. package/dist/chunk-4FBVV64J.js.map +1 -0
  29. package/dist/chunk-4QT25AXI.js +21 -0
  30. package/dist/chunk-4QT25AXI.js.map +1 -0
  31. package/dist/chunk-525KS5HM.cjs +30 -0
  32. package/dist/chunk-525KS5HM.cjs.map +1 -0
  33. package/dist/chunk-5F3O3ZJH.js +299 -0
  34. package/dist/chunk-5F3O3ZJH.js.map +1 -0
  35. package/dist/chunk-5QSXB6UL.cjs +259 -0
  36. package/dist/chunk-5QSXB6UL.cjs.map +1 -0
  37. package/dist/chunk-5T4FJ2SR.js +664 -0
  38. package/dist/chunk-5T4FJ2SR.js.map +1 -0
  39. package/dist/chunk-7BNYTOTE.cjs +67 -0
  40. package/dist/chunk-7BNYTOTE.cjs.map +1 -0
  41. package/dist/chunk-AWAJOSFP.cjs +96 -0
  42. package/dist/chunk-AWAJOSFP.cjs.map +1 -0
  43. package/dist/chunk-BKDV2H6Z.js +224 -0
  44. package/dist/chunk-BKDV2H6Z.js.map +1 -0
  45. package/dist/chunk-FQN6OBGN.cjs +171 -0
  46. package/dist/chunk-FQN6OBGN.cjs.map +1 -0
  47. package/dist/chunk-FYPJSHCL.js +190 -0
  48. package/dist/chunk-FYPJSHCL.js.map +1 -0
  49. package/dist/chunk-J2H6MLQF.cjs +680 -0
  50. package/dist/chunk-J2H6MLQF.cjs.map +1 -0
  51. package/dist/chunk-J2K7EJYP.cjs +198 -0
  52. package/dist/chunk-J2K7EJYP.cjs.map +1 -0
  53. package/dist/chunk-JI5KCSOI.cjs +23 -0
  54. package/dist/chunk-JI5KCSOI.cjs.map +1 -0
  55. package/dist/chunk-JOO6C3XT.cjs +44 -0
  56. package/dist/chunk-JOO6C3XT.cjs.map +1 -0
  57. package/dist/chunk-KBGPBUTI.cjs +78 -0
  58. package/dist/chunk-KBGPBUTI.cjs.map +1 -0
  59. package/dist/chunk-MT2AMINB.js +75 -0
  60. package/dist/chunk-MT2AMINB.js.map +1 -0
  61. package/dist/chunk-MZQKGNWF.js +4 -0
  62. package/dist/chunk-MZQKGNWF.js.map +1 -0
  63. package/dist/chunk-NG7OTWXQ.cjs +226 -0
  64. package/dist/chunk-NG7OTWXQ.cjs.map +1 -0
  65. package/dist/chunk-NPJKLYLV.js +68 -0
  66. package/dist/chunk-NPJKLYLV.js.map +1 -0
  67. package/dist/chunk-NW2ESHRV.js +685 -0
  68. package/dist/chunk-NW2ESHRV.js.map +1 -0
  69. package/dist/chunk-NWF735F5.js +1631 -0
  70. package/dist/chunk-NWF735F5.js.map +1 -0
  71. package/dist/chunk-NYQSM3EB.cjs +305 -0
  72. package/dist/chunk-NYQSM3EB.cjs.map +1 -0
  73. package/dist/chunk-OU7OROOE.cjs +1643 -0
  74. package/dist/chunk-OU7OROOE.cjs.map +1 -0
  75. package/dist/chunk-PS3U7T37.js +42 -0
  76. package/dist/chunk-PS3U7T37.js.map +1 -0
  77. package/dist/chunk-Q7T3VAJV.cjs +687 -0
  78. package/dist/chunk-Q7T3VAJV.cjs.map +1 -0
  79. package/dist/chunk-QYCEHFAB.js +265 -0
  80. package/dist/chunk-QYCEHFAB.js.map +1 -0
  81. package/dist/chunk-RPDJXB3U.js +676 -0
  82. package/dist/chunk-RPDJXB3U.js.map +1 -0
  83. package/dist/chunk-UKEL7FWS.js +64 -0
  84. package/dist/chunk-UKEL7FWS.js.map +1 -0
  85. package/dist/chunk-VS3NZ7FX.js +164 -0
  86. package/dist/chunk-VS3NZ7FX.js.map +1 -0
  87. package/dist/chunk-WZLWAVSS.cjs +73 -0
  88. package/dist/chunk-WZLWAVSS.cjs.map +1 -0
  89. package/dist/chunk-X5YEOOPK.cjs +758 -0
  90. package/dist/chunk-X5YEOOPK.cjs.map +1 -0
  91. package/dist/chunk-X7R334SB.cjs +5 -0
  92. package/dist/chunk-X7R334SB.cjs.map +1 -0
  93. package/dist/chunk-XXNDL5SJ.cjs +432 -0
  94. package/dist/chunk-XXNDL5SJ.cjs.map +1 -0
  95. package/dist/chunk-YQELMJW5.js +429 -0
  96. package/dist/chunk-YQELMJW5.js.map +1 -0
  97. package/dist/components.cjs +551 -0
  98. package/dist/components.cjs.map +1 -0
  99. package/dist/components.d.cts +181 -0
  100. package/dist/components.d.ts +181 -0
  101. package/dist/components.js +483 -0
  102. package/dist/components.js.map +1 -0
  103. package/dist/core.cjs +283 -0
  104. package/dist/core.cjs.map +1 -0
  105. package/dist/core.d.cts +455 -0
  106. package/dist/core.d.ts +455 -0
  107. package/dist/core.js +241 -0
  108. package/dist/core.js.map +1 -0
  109. package/dist/hooks.cjs +324 -0
  110. package/dist/hooks.cjs.map +1 -0
  111. package/dist/hooks.d.cts +163 -0
  112. package/dist/hooks.d.ts +163 -0
  113. package/dist/hooks.js +277 -0
  114. package/dist/hooks.js.map +1 -0
  115. package/dist/i18n.cjs +26 -0
  116. package/dist/i18n.cjs.map +1 -0
  117. package/dist/i18n.d.cts +50 -0
  118. package/dist/i18n.d.ts +50 -0
  119. package/dist/i18n.js +5 -0
  120. package/dist/i18n.js.map +1 -0
  121. package/dist/index.cjs +466 -0
  122. package/dist/index.cjs.map +1 -0
  123. package/dist/index.d.cts +80 -0
  124. package/dist/index.d.ts +80 -0
  125. package/dist/index.js +438 -0
  126. package/dist/index.js.map +1 -0
  127. package/dist/interaction-tracker-D9P1Oq4j.d.cts +83 -0
  128. package/dist/interaction-tracker-D9P1Oq4j.d.ts +83 -0
  129. package/dist/json-render.cjs +23 -0
  130. package/dist/json-render.cjs.map +1 -0
  131. package/dist/json-render.d.cts +857 -0
  132. package/dist/json-render.d.ts +857 -0
  133. package/dist/json-render.js +6 -0
  134. package/dist/json-render.js.map +1 -0
  135. package/dist/live-chat-transport-4XLOIPOE.js +4 -0
  136. package/dist/live-chat-transport-4XLOIPOE.js.map +1 -0
  137. package/dist/live-chat-transport-ALVRGWX7.cjs +13 -0
  138. package/dist/live-chat-transport-ALVRGWX7.cjs.map +1 -0
  139. package/dist/select-B4l9yoyn.d.cts +99 -0
  140. package/dist/select-B4l9yoyn.d.ts +99 -0
  141. package/dist/styles.css +2 -0
  142. package/dist/theme.cjs +18 -0
  143. package/dist/theme.cjs.map +1 -0
  144. package/dist/theme.d.cts +55 -0
  145. package/dist/theme.d.ts +55 -0
  146. package/dist/theme.js +5 -0
  147. package/dist/theme.js.map +1 -0
  148. package/dist/tools.cjs +32 -0
  149. package/dist/tools.cjs.map +1 -0
  150. package/dist/tools.d.cts +117 -0
  151. package/dist/tools.d.ts +117 -0
  152. package/dist/tools.js +11 -0
  153. package/dist/tools.js.map +1 -0
  154. package/dist/types-DKJ_-nbG.d.cts +349 -0
  155. package/dist/types-DKJ_-nbG.d.ts +349 -0
  156. package/dist/ui.cjs +667 -0
  157. package/dist/ui.cjs.map +1 -0
  158. package/dist/ui.d.cts +95 -0
  159. package/dist/ui.d.ts +95 -0
  160. package/dist/ui.js +414 -0
  161. package/dist/ui.js.map +1 -0
  162. package/package.json +255 -0
@@ -0,0 +1,687 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var chunk525KS5HM_cjs = require('./chunk-525KS5HM.cjs');
5
+ var RechartsPrimitive = require('recharts');
6
+ var React = require('react');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+ var lucideReact = require('lucide-react');
9
+
10
+ function _interopNamespace(e) {
11
+ if (e && e.__esModule) return e;
12
+ var n = Object.create(null);
13
+ if (e) {
14
+ Object.keys(e).forEach(function (k) {
15
+ if (k !== 'default') {
16
+ var d = Object.getOwnPropertyDescriptor(e, k);
17
+ Object.defineProperty(n, k, d.get ? d : {
18
+ enumerable: true,
19
+ get: function () { return e[k]; }
20
+ });
21
+ }
22
+ });
23
+ }
24
+ n.default = e;
25
+ return Object.freeze(n);
26
+ }
27
+
28
+ var RechartsPrimitive__namespace = /*#__PURE__*/_interopNamespace(RechartsPrimitive);
29
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
30
+
31
+ var THEMES = { light: "", dark: ".dark" };
32
+ var ChartContext = React__namespace.createContext(null);
33
+ function useChart() {
34
+ const context = React__namespace.useContext(ChartContext);
35
+ if (!context) {
36
+ throw new Error("useChart must be used within a <ChartContainer />");
37
+ }
38
+ return context;
39
+ }
40
+ var ChartContainer = React__namespace.forwardRef(({ id, className, children, config, ...props }, ref) => {
41
+ const uniqueId = React__namespace.useId();
42
+ const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
43
+ return /* @__PURE__ */ jsxRuntime.jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxRuntime.jsxs(
44
+ "div",
45
+ {
46
+ "data-chart": chartId,
47
+ ref,
48
+ className: chunk525KS5HM_cjs.cn(
49
+ "flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",
50
+ className
51
+ ),
52
+ ...props,
53
+ children: [
54
+ /* @__PURE__ */ jsxRuntime.jsx(ChartStyle, { id: chartId, config }),
55
+ /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive__namespace.ResponsiveContainer, { children })
56
+ ]
57
+ }
58
+ ) });
59
+ });
60
+ ChartContainer.displayName = "Chart";
61
+ var ChartStyle = ({ id, config }) => {
62
+ const colorConfig = Object.entries(config).filter(
63
+ ([, config2]) => config2.theme || config2.color
64
+ );
65
+ if (!colorConfig.length) {
66
+ return null;
67
+ }
68
+ return /* @__PURE__ */ jsxRuntime.jsx(
69
+ "style",
70
+ {
71
+ dangerouslySetInnerHTML: {
72
+ __html: Object.entries(THEMES).map(
73
+ ([theme, prefix]) => `
74
+ ${prefix} [data-chart=${id}] {
75
+ ${colorConfig.map(([key, itemConfig]) => {
76
+ const color = itemConfig.theme?.[theme] || itemConfig.color;
77
+ return color ? ` --color-${key}: ${color};` : null;
78
+ }).join("\n")}
79
+ }
80
+ `
81
+ ).join("\n")
82
+ }
83
+ }
84
+ );
85
+ };
86
+ var ChartTooltip = RechartsPrimitive__namespace.Tooltip;
87
+ var ChartTooltipContent = React__namespace.forwardRef(
88
+ ({
89
+ active,
90
+ payload,
91
+ className,
92
+ indicator = "dot",
93
+ hideLabel = false,
94
+ hideIndicator = false,
95
+ label,
96
+ labelFormatter,
97
+ labelClassName,
98
+ formatter,
99
+ color,
100
+ nameKey,
101
+ labelKey
102
+ }, ref) => {
103
+ const { config } = useChart();
104
+ const tooltipLabel = React__namespace.useMemo(() => {
105
+ if (hideLabel || !payload?.length) {
106
+ return null;
107
+ }
108
+ const [item] = payload;
109
+ const key = `${labelKey || item?.dataKey || item?.name || "value"}`;
110
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
111
+ const value = !labelKey && typeof label === "string" ? config[label]?.label || label : itemConfig?.label;
112
+ if (labelFormatter) {
113
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk525KS5HM_cjs.cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
114
+ }
115
+ if (!value) {
116
+ return null;
117
+ }
118
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunk525KS5HM_cjs.cn("font-medium", labelClassName), children: value });
119
+ }, [
120
+ label,
121
+ labelFormatter,
122
+ payload,
123
+ hideLabel,
124
+ labelClassName,
125
+ config,
126
+ labelKey
127
+ ]);
128
+ if (!active || !payload?.length) {
129
+ return null;
130
+ }
131
+ const nestLabel = payload.length === 1 && indicator !== "dot";
132
+ return /* @__PURE__ */ jsxRuntime.jsxs(
133
+ "div",
134
+ {
135
+ ref,
136
+ className: chunk525KS5HM_cjs.cn(
137
+ "grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",
138
+ className
139
+ ),
140
+ children: [
141
+ !nestLabel ? tooltipLabel : null,
142
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
143
+ const key = `${nameKey || item.name || item.dataKey || "value"}`;
144
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
145
+ const indicatorColor = color || item.payload.fill || item.color;
146
+ return /* @__PURE__ */ jsxRuntime.jsx(
147
+ "div",
148
+ {
149
+ className: chunk525KS5HM_cjs.cn(
150
+ "flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",
151
+ indicator === "dot" && "items-center"
152
+ ),
153
+ children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
154
+ itemConfig?.icon ? /* @__PURE__ */ jsxRuntime.jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsxRuntime.jsx(
155
+ "div",
156
+ {
157
+ className: chunk525KS5HM_cjs.cn(
158
+ "shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",
159
+ {
160
+ "h-2.5 w-2.5": indicator === "dot",
161
+ "w-1": indicator === "line",
162
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
163
+ "my-0.5": nestLabel && indicator === "dashed"
164
+ }
165
+ ),
166
+ style: {
167
+ "--color-bg": indicatorColor,
168
+ "--color-border": indicatorColor
169
+ }
170
+ }
171
+ ),
172
+ /* @__PURE__ */ jsxRuntime.jsxs(
173
+ "div",
174
+ {
175
+ className: chunk525KS5HM_cjs.cn(
176
+ "flex flex-1 justify-between leading-none",
177
+ nestLabel ? "items-end" : "items-center"
178
+ ),
179
+ children: [
180
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-1.5", children: [
181
+ nestLabel ? tooltipLabel : null,
182
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: itemConfig?.label || item.name })
183
+ ] }),
184
+ item.value && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-mono font-medium tabular-nums text-foreground", children: item.value.toLocaleString() })
185
+ ]
186
+ }
187
+ )
188
+ ] })
189
+ },
190
+ item.dataKey
191
+ );
192
+ }) })
193
+ ]
194
+ }
195
+ );
196
+ }
197
+ );
198
+ ChartTooltipContent.displayName = "ChartTooltip";
199
+ var ChartLegend = RechartsPrimitive__namespace.Legend;
200
+ var ChartLegendContent = React__namespace.forwardRef(
201
+ ({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey }, ref) => {
202
+ const { config } = useChart();
203
+ if (!payload?.length) {
204
+ return null;
205
+ }
206
+ return /* @__PURE__ */ jsxRuntime.jsx(
207
+ "div",
208
+ {
209
+ ref,
210
+ className: chunk525KS5HM_cjs.cn(
211
+ "flex items-center justify-center gap-4",
212
+ verticalAlign === "top" ? "pb-3" : "pt-3",
213
+ className
214
+ ),
215
+ children: payload.filter((item) => item.type !== "none").map((item) => {
216
+ const key = `${nameKey || item.dataKey || "value"}`;
217
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
218
+ return /* @__PURE__ */ jsxRuntime.jsxs(
219
+ "div",
220
+ {
221
+ className: chunk525KS5HM_cjs.cn(
222
+ "flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"
223
+ ),
224
+ children: [
225
+ itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsxRuntime.jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsxRuntime.jsx(
226
+ "div",
227
+ {
228
+ className: "h-2 w-2 shrink-0 rounded-[2px]",
229
+ style: {
230
+ backgroundColor: item.color
231
+ }
232
+ }
233
+ ),
234
+ itemConfig?.label
235
+ ]
236
+ },
237
+ item.value
238
+ );
239
+ })
240
+ }
241
+ );
242
+ }
243
+ );
244
+ ChartLegendContent.displayName = "ChartLegend";
245
+ function getPayloadConfigFromPayload(config, payload, key) {
246
+ if (typeof payload !== "object" || payload === null) {
247
+ return void 0;
248
+ }
249
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
250
+ let configLabelKey = key;
251
+ if (key in payload && typeof payload[key] === "string") {
252
+ configLabelKey = payload[key];
253
+ } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
254
+ configLabelKey = payloadPayload[key];
255
+ }
256
+ return configLabelKey in config ? config[configLabelKey] : config[key];
257
+ }
258
+ var CHART_COLORS = [
259
+ "var(--ac-chart-1, hsl(221, 83%, 53%))",
260
+ "var(--ac-chart-2, hsl(142, 71%, 45%))",
261
+ "var(--ac-chart-3, hsl(38, 92%, 50%))",
262
+ "var(--ac-chart-4, hsl(0, 84%, 60%))",
263
+ "var(--ac-chart-5, hsl(262, 83%, 58%))",
264
+ "var(--ac-chart-6, hsl(173, 80%, 40%))",
265
+ "var(--ac-chart-7, hsl(330, 81%, 60%))",
266
+ "var(--ac-chart-8, hsl(25, 95%, 53%))"
267
+ ];
268
+ function formatValue(value, formatter) {
269
+ switch (formatter) {
270
+ case "currency":
271
+ return `$${value.toLocaleString()}`;
272
+ case "percent":
273
+ return `${value}%`;
274
+ case "compact": {
275
+ if (value >= 1e6) return `${(value / 1e6).toFixed(1)}M`;
276
+ if (value >= 1e3) return `${(value / 1e3).toFixed(1)}K`;
277
+ return value.toLocaleString();
278
+ }
279
+ default:
280
+ return value.toLocaleString();
281
+ }
282
+ }
283
+ function buildChartConfig(series) {
284
+ const cfg = {};
285
+ for (let i = 0; i < series.length; i++) {
286
+ const s = series[i];
287
+ cfg[s.dataKey] = {
288
+ label: s.label,
289
+ color: s.color || CHART_COLORS[i % CHART_COLORS.length]
290
+ };
291
+ }
292
+ return cfg;
293
+ }
294
+ function shouldShowLegend(config, series) {
295
+ if (config?.showLegend !== void 0) return config.showLegend;
296
+ return (series?.length ?? 0) > 1;
297
+ }
298
+ function RenderLineChart({ spec }) {
299
+ const series = spec.config?.series ?? [];
300
+ const chartConfig = buildChartConfig(series);
301
+ const xKey = spec.config?.xAxis ?? "name";
302
+ const showGrid = spec.config?.showGrid !== false;
303
+ return /* @__PURE__ */ jsxRuntime.jsx(ChartContainer, { config: chartConfig, className: "h-[300px] w-full", children: /* @__PURE__ */ jsxRuntime.jsxs(RechartsPrimitive.LineChart, { data: spec.data, accessibilityLayer: true, children: [
304
+ showGrid && /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive.CartesianGrid, { strokeDasharray: "3 3", className: "stroke-muted" }),
305
+ /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive.XAxis, { dataKey: xKey, className: "text-xs", tickLine: false, axisLine: false }),
306
+ /* @__PURE__ */ jsxRuntime.jsx(
307
+ RechartsPrimitive.YAxis,
308
+ {
309
+ className: "text-xs",
310
+ tickLine: false,
311
+ axisLine: false,
312
+ tickFormatter: (v) => formatValue(v, spec.config?.valueFormatter)
313
+ }
314
+ ),
315
+ /* @__PURE__ */ jsxRuntime.jsx(ChartTooltip, { content: /* @__PURE__ */ jsxRuntime.jsx(ChartTooltipContent, {}) }),
316
+ shouldShowLegend(spec.config, series) && /* @__PURE__ */ jsxRuntime.jsx(ChartLegend, { content: /* @__PURE__ */ jsxRuntime.jsx(ChartLegendContent, {}) }),
317
+ series.map((s) => /* @__PURE__ */ jsxRuntime.jsx(
318
+ RechartsPrimitive.Line,
319
+ {
320
+ type: "monotone",
321
+ dataKey: s.dataKey,
322
+ stroke: `var(--color-${s.dataKey})`,
323
+ strokeWidth: 2,
324
+ dot: { r: 3 },
325
+ activeDot: { r: 5 }
326
+ },
327
+ s.dataKey
328
+ ))
329
+ ] }) });
330
+ }
331
+ function RenderBarChart({ spec }) {
332
+ const series = spec.config?.series ?? [];
333
+ const chartConfig = buildChartConfig(series);
334
+ const xKey = spec.config?.xAxis ?? "name";
335
+ const showGrid = spec.config?.showGrid !== false;
336
+ const stacked = spec.config?.stacked ?? false;
337
+ return /* @__PURE__ */ jsxRuntime.jsx(ChartContainer, { config: chartConfig, className: "h-[300px] w-full", children: /* @__PURE__ */ jsxRuntime.jsxs(RechartsPrimitive.BarChart, { data: spec.data, accessibilityLayer: true, children: [
338
+ showGrid && /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive.CartesianGrid, { strokeDasharray: "3 3", className: "stroke-muted" }),
339
+ /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive.XAxis, { dataKey: xKey, className: "text-xs", tickLine: false, axisLine: false }),
340
+ /* @__PURE__ */ jsxRuntime.jsx(
341
+ RechartsPrimitive.YAxis,
342
+ {
343
+ className: "text-xs",
344
+ tickLine: false,
345
+ axisLine: false,
346
+ tickFormatter: (v) => formatValue(v, spec.config?.valueFormatter)
347
+ }
348
+ ),
349
+ /* @__PURE__ */ jsxRuntime.jsx(ChartTooltip, { content: /* @__PURE__ */ jsxRuntime.jsx(ChartTooltipContent, {}) }),
350
+ shouldShowLegend(spec.config, series) && /* @__PURE__ */ jsxRuntime.jsx(ChartLegend, { content: /* @__PURE__ */ jsxRuntime.jsx(ChartLegendContent, {}) }),
351
+ series.map((s) => /* @__PURE__ */ jsxRuntime.jsx(
352
+ RechartsPrimitive.Bar,
353
+ {
354
+ dataKey: s.dataKey,
355
+ fill: `var(--color-${s.dataKey})`,
356
+ radius: [4, 4, 0, 0],
357
+ stackId: stacked ? "stack" : void 0
358
+ },
359
+ s.dataKey
360
+ ))
361
+ ] }) });
362
+ }
363
+ function RenderPieChart({ spec }) {
364
+ const series = spec.config?.series ?? [];
365
+ const valueKey = series[0]?.dataKey ?? "value";
366
+ const chartConfig = buildChartConfig(series);
367
+ const data = (spec.data ?? []).map((d, i) => ({
368
+ ...d,
369
+ fill: CHART_COLORS[i % CHART_COLORS.length]
370
+ }));
371
+ return /* @__PURE__ */ jsxRuntime.jsx(ChartContainer, { config: chartConfig, className: "h-[300px] w-full", children: /* @__PURE__ */ jsxRuntime.jsxs(RechartsPrimitive.PieChart, { accessibilityLayer: true, children: [
372
+ /* @__PURE__ */ jsxRuntime.jsx(ChartTooltip, { content: /* @__PURE__ */ jsxRuntime.jsx(ChartTooltipContent, { nameKey: "name" }) }),
373
+ /* @__PURE__ */ jsxRuntime.jsx(
374
+ RechartsPrimitive.Pie,
375
+ {
376
+ data,
377
+ dataKey: valueKey,
378
+ nameKey: "name",
379
+ cx: "50%",
380
+ cy: "50%",
381
+ outerRadius: 100,
382
+ label: ({ percent }) => `${((percent ?? 0) * 100).toFixed(0)}%`,
383
+ labelLine: false,
384
+ children: data.map((_entry, i) => /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive.Cell, { fill: CHART_COLORS[i % CHART_COLORS.length] }, `cell-${i}`))
385
+ }
386
+ ),
387
+ shouldShowLegend(spec.config, series) && /* @__PURE__ */ jsxRuntime.jsx(ChartLegend, { content: /* @__PURE__ */ jsxRuntime.jsx(ChartLegendContent, { nameKey: "name" }) })
388
+ ] }) });
389
+ }
390
+ function RenderAreaChart({ spec }) {
391
+ const series = spec.config?.series ?? [];
392
+ const chartConfig = buildChartConfig(series);
393
+ const xKey = spec.config?.xAxis ?? "name";
394
+ const showGrid = spec.config?.showGrid !== false;
395
+ const stacked = spec.config?.stacked ?? false;
396
+ return /* @__PURE__ */ jsxRuntime.jsx(ChartContainer, { config: chartConfig, className: "h-[300px] w-full", children: /* @__PURE__ */ jsxRuntime.jsxs(RechartsPrimitive.AreaChart, { data: spec.data, accessibilityLayer: true, children: [
397
+ /* @__PURE__ */ jsxRuntime.jsx("defs", { children: series.map((s) => /* @__PURE__ */ jsxRuntime.jsxs("linearGradient", { id: `fill-${s.dataKey}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [
398
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "5%", stopColor: `var(--color-${s.dataKey})`, stopOpacity: 0.3 }),
399
+ /* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "95%", stopColor: `var(--color-${s.dataKey})`, stopOpacity: 0.05 })
400
+ ] }, s.dataKey)) }),
401
+ showGrid && /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive.CartesianGrid, { strokeDasharray: "3 3", className: "stroke-muted" }),
402
+ /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive.XAxis, { dataKey: xKey, className: "text-xs", tickLine: false, axisLine: false }),
403
+ /* @__PURE__ */ jsxRuntime.jsx(
404
+ RechartsPrimitive.YAxis,
405
+ {
406
+ className: "text-xs",
407
+ tickLine: false,
408
+ axisLine: false,
409
+ tickFormatter: (v) => formatValue(v, spec.config?.valueFormatter)
410
+ }
411
+ ),
412
+ /* @__PURE__ */ jsxRuntime.jsx(ChartTooltip, { content: /* @__PURE__ */ jsxRuntime.jsx(ChartTooltipContent, {}) }),
413
+ shouldShowLegend(spec.config, series) && /* @__PURE__ */ jsxRuntime.jsx(ChartLegend, { content: /* @__PURE__ */ jsxRuntime.jsx(ChartLegendContent, {}) }),
414
+ series.map((s) => /* @__PURE__ */ jsxRuntime.jsx(
415
+ RechartsPrimitive.Area,
416
+ {
417
+ type: "monotone",
418
+ dataKey: s.dataKey,
419
+ stroke: `var(--color-${s.dataKey})`,
420
+ fill: `url(#fill-${s.dataKey})`,
421
+ strokeWidth: 2,
422
+ stackId: stacked ? "stack" : void 0
423
+ },
424
+ s.dataKey
425
+ ))
426
+ ] }) });
427
+ }
428
+ function RenderRadarChart({ spec }) {
429
+ const series = spec.config?.series ?? [];
430
+ const chartConfig = buildChartConfig(series);
431
+ const xKey = spec.config?.xAxis ?? "name";
432
+ return /* @__PURE__ */ jsxRuntime.jsx(ChartContainer, { config: chartConfig, className: "h-[300px] w-full", children: /* @__PURE__ */ jsxRuntime.jsxs(RechartsPrimitive.RadarChart, { data: spec.data, cx: "50%", cy: "50%", outerRadius: "80%", accessibilityLayer: true, children: [
433
+ /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive.PolarGrid, { className: "stroke-muted" }),
434
+ /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive.PolarAngleAxis, { dataKey: xKey, className: "text-xs" }),
435
+ /* @__PURE__ */ jsxRuntime.jsx(ChartTooltip, { content: /* @__PURE__ */ jsxRuntime.jsx(ChartTooltipContent, {}) }),
436
+ shouldShowLegend(spec.config, series) && /* @__PURE__ */ jsxRuntime.jsx(ChartLegend, { content: /* @__PURE__ */ jsxRuntime.jsx(ChartLegendContent, {}) }),
437
+ series.map((s) => /* @__PURE__ */ jsxRuntime.jsx(
438
+ RechartsPrimitive.Radar,
439
+ {
440
+ name: s.label,
441
+ dataKey: s.dataKey,
442
+ stroke: `var(--color-${s.dataKey})`,
443
+ fill: `var(--color-${s.dataKey})`,
444
+ fillOpacity: 0.2
445
+ },
446
+ s.dataKey
447
+ ))
448
+ ] }) });
449
+ }
450
+ function RenderComposedChart({ spec }) {
451
+ const series = spec.config?.series ?? [];
452
+ const chartConfig = buildChartConfig(series);
453
+ const xKey = spec.config?.xAxis ?? "name";
454
+ const showGrid = spec.config?.showGrid !== false;
455
+ return /* @__PURE__ */ jsxRuntime.jsx(ChartContainer, { config: chartConfig, className: "h-[300px] w-full", children: /* @__PURE__ */ jsxRuntime.jsxs(RechartsPrimitive.ComposedChart, { data: spec.data, accessibilityLayer: true, children: [
456
+ showGrid && /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive.CartesianGrid, { strokeDasharray: "3 3", className: "stroke-muted" }),
457
+ /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive.XAxis, { dataKey: xKey, className: "text-xs", tickLine: false, axisLine: false }),
458
+ /* @__PURE__ */ jsxRuntime.jsx(
459
+ RechartsPrimitive.YAxis,
460
+ {
461
+ className: "text-xs",
462
+ tickLine: false,
463
+ axisLine: false,
464
+ tickFormatter: (v) => formatValue(v, spec.config?.valueFormatter)
465
+ }
466
+ ),
467
+ /* @__PURE__ */ jsxRuntime.jsx(ChartTooltip, { content: /* @__PURE__ */ jsxRuntime.jsx(ChartTooltipContent, {}) }),
468
+ shouldShowLegend(spec.config, series) && /* @__PURE__ */ jsxRuntime.jsx(ChartLegend, { content: /* @__PURE__ */ jsxRuntime.jsx(ChartLegendContent, {}) }),
469
+ series.map((s) => {
470
+ const color = `var(--color-${s.dataKey})`;
471
+ switch (s.type) {
472
+ case "area":
473
+ return /* @__PURE__ */ jsxRuntime.jsx(
474
+ RechartsPrimitive.Area,
475
+ {
476
+ type: "monotone",
477
+ dataKey: s.dataKey,
478
+ stroke: color,
479
+ fill: color,
480
+ fillOpacity: 0.15,
481
+ strokeWidth: 2
482
+ },
483
+ s.dataKey
484
+ );
485
+ case "line":
486
+ return /* @__PURE__ */ jsxRuntime.jsx(
487
+ RechartsPrimitive.Line,
488
+ {
489
+ type: "monotone",
490
+ dataKey: s.dataKey,
491
+ stroke: color,
492
+ strokeWidth: 2,
493
+ dot: { r: 3 }
494
+ },
495
+ s.dataKey
496
+ );
497
+ case "bar":
498
+ default:
499
+ return /* @__PURE__ */ jsxRuntime.jsx(
500
+ RechartsPrimitive.Bar,
501
+ {
502
+ dataKey: s.dataKey,
503
+ fill: color,
504
+ radius: [4, 4, 0, 0]
505
+ },
506
+ s.dataKey
507
+ );
508
+ }
509
+ })
510
+ ] }) });
511
+ }
512
+ function RenderMetricCards({ spec }) {
513
+ const metrics = spec.metrics ?? [];
514
+ if (metrics.length === 0) return null;
515
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-2 md:grid-cols-3 gap-3", children: metrics.map((m, i) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "rounded-lg border bg-card p-4 space-y-1.5", children: [
516
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-baseline gap-1", children: [
517
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-2xl font-bold tracking-tight", children: m.value }),
518
+ m.unit && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-muted-foreground", children: m.unit })
519
+ ] }),
520
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-muted-foreground", children: m.label }),
521
+ m.trend && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
522
+ m.trendDirection === "up" && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.TrendingUp, { className: "h-3.5 w-3.5 text-emerald-500" }),
523
+ m.trendDirection === "down" && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.TrendingDown, { className: "h-3.5 w-3.5 text-red-500" }),
524
+ m.trendDirection === "neutral" && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Minus, { className: "h-3.5 w-3.5 text-muted-foreground" }),
525
+ /* @__PURE__ */ jsxRuntime.jsx(
526
+ "span",
527
+ {
528
+ className: `text-xs font-medium ${m.trendDirection === "up" ? "text-emerald-500" : m.trendDirection === "down" ? "text-red-500" : "text-muted-foreground"}`,
529
+ children: m.trend
530
+ }
531
+ )
532
+ ] }),
533
+ m.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground/70", children: m.description })
534
+ ] }, i)) });
535
+ }
536
+ function RenderComparison({ spec }) {
537
+ const items = spec.items ?? [];
538
+ const fields = spec.comparisonFields ?? [];
539
+ if (items.length === 0 || fields.length === 0) return null;
540
+ function renderCellValue(value, type) {
541
+ if (type === "boolean" || typeof value === "boolean") {
542
+ return value ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-4 w-4 text-emerald-500 mx-auto" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "h-4 w-4 text-red-400 mx-auto" });
543
+ }
544
+ if (type === "rating" && typeof value === "number") {
545
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-center gap-0.5", children: Array.from({ length: 5 }).map((_, i) => /* @__PURE__ */ jsxRuntime.jsx(
546
+ lucideReact.Star,
547
+ {
548
+ className: `h-3.5 w-3.5 ${i < value ? "fill-amber-400 text-amber-400" : "text-muted-foreground/30"}`
549
+ },
550
+ i
551
+ )) });
552
+ }
553
+ return /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: String(value) });
554
+ }
555
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-x-auto rounded-lg border", children: /* @__PURE__ */ jsxRuntime.jsxs("table", { className: "w-full text-sm", children: [
556
+ /* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: "border-b bg-muted/50", children: [
557
+ /* @__PURE__ */ jsxRuntime.jsx("th", { className: "px-3 py-2 text-left font-medium text-muted-foreground" }),
558
+ items.map((item, i) => /* @__PURE__ */ jsxRuntime.jsx(
559
+ "th",
560
+ {
561
+ className: `px-3 py-2 text-center font-semibold ${item.highlight ? "bg-primary/5 border-t-2 border-t-primary" : ""}`,
562
+ children: item.name
563
+ },
564
+ i
565
+ ))
566
+ ] }) }),
567
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", { children: fields.map((field, fi) => /* @__PURE__ */ jsxRuntime.jsxs("tr", { className: fi % 2 === 0 ? "" : "bg-muted/20", children: [
568
+ /* @__PURE__ */ jsxRuntime.jsx("td", { className: "px-3 py-2 font-medium text-muted-foreground whitespace-nowrap", children: field.label }),
569
+ items.map((item, ii) => /* @__PURE__ */ jsxRuntime.jsx(
570
+ "td",
571
+ {
572
+ className: `px-3 py-2 text-center ${item.highlight ? "bg-primary/5" : ""}`,
573
+ children: field.key in item.features ? renderCellValue(item.features[field.key], field.type) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground/40", children: "-" })
574
+ },
575
+ ii
576
+ ))
577
+ ] }, field.key)) })
578
+ ] }) });
579
+ }
580
+ function RenderTimeline({ spec }) {
581
+ const events = spec.events ?? [];
582
+ if (events.length === 0) return null;
583
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative pl-6 space-y-6", children: [
584
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-[9px] top-2 bottom-2 w-px bg-border" }),
585
+ events.map((event, i) => {
586
+ const status = event.status ?? "upcoming";
587
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex gap-4", children: [
588
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute -left-6 top-0.5 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
589
+ "div",
590
+ {
591
+ className: `h-[18px] w-[18px] rounded-full border-2 ${status === "completed" ? "border-emerald-500 bg-emerald-500" : status === "current" ? "border-blue-500 bg-blue-500 animate-pulse" : "border-muted-foreground/40 bg-background"}`,
592
+ children: status === "completed" && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { className: "h-3.5 w-3.5 text-white m-auto" })
593
+ }
594
+ ) }),
595
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex-1 min-w-0 pb-1", children: [
596
+ event.date && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground mb-0.5", children: event.date }),
597
+ /* @__PURE__ */ jsxRuntime.jsx(
598
+ "p",
599
+ {
600
+ className: `text-sm font-medium ${status === "upcoming" ? "text-muted-foreground" : ""}`,
601
+ children: event.title
602
+ }
603
+ ),
604
+ event.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground/70 mt-0.5", children: event.description })
605
+ ] })
606
+ ] }, i);
607
+ })
608
+ ] });
609
+ }
610
+ function RenderProgress({ spec }) {
611
+ const goals = spec.goals ?? [];
612
+ if (goals.length === 0) return null;
613
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4", children: goals.map((goal, i) => {
614
+ const pct = goal.target > 0 ? Math.min(goal.current / goal.target * 100, 100) : 0;
615
+ const barColor = pct >= 75 ? "bg-emerald-500" : pct >= 40 ? "bg-amber-500" : "bg-red-500";
616
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-1.5", children: [
617
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between text-sm", children: [
618
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium", children: goal.label }),
619
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground tabular-nums", children: [
620
+ goal.current.toLocaleString(),
621
+ goal.unit ? ` ${goal.unit}` : "",
622
+ " / ",
623
+ goal.target.toLocaleString(),
624
+ goal.unit ? ` ${goal.unit}` : ""
625
+ ] })
626
+ ] }),
627
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-2.5 w-full rounded-full bg-muted overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsx(
628
+ "div",
629
+ {
630
+ className: `h-full rounded-full transition-all ${barColor}`,
631
+ style: { width: `${pct}%` }
632
+ }
633
+ ) }),
634
+ /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-xs text-muted-foreground text-right tabular-nums", children: [
635
+ pct.toFixed(0),
636
+ "%"
637
+ ] })
638
+ ] }, i);
639
+ }) });
640
+ }
641
+ function renderContent(spec) {
642
+ switch (spec.type) {
643
+ case "line_chart":
644
+ return spec.data?.length ? /* @__PURE__ */ jsxRuntime.jsx(RenderLineChart, { spec }) : null;
645
+ case "bar_chart":
646
+ return spec.data?.length ? /* @__PURE__ */ jsxRuntime.jsx(RenderBarChart, { spec }) : null;
647
+ case "pie_chart":
648
+ return spec.data?.length ? /* @__PURE__ */ jsxRuntime.jsx(RenderPieChart, { spec }) : null;
649
+ case "area_chart":
650
+ return spec.data?.length ? /* @__PURE__ */ jsxRuntime.jsx(RenderAreaChart, { spec }) : null;
651
+ case "radar_chart":
652
+ return spec.data?.length ? /* @__PURE__ */ jsxRuntime.jsx(RenderRadarChart, { spec }) : null;
653
+ case "composed_chart":
654
+ return spec.data?.length ? /* @__PURE__ */ jsxRuntime.jsx(RenderComposedChart, { spec }) : null;
655
+ case "metric_cards":
656
+ return /* @__PURE__ */ jsxRuntime.jsx(RenderMetricCards, { spec });
657
+ case "comparison":
658
+ return /* @__PURE__ */ jsxRuntime.jsx(RenderComparison, { spec });
659
+ case "timeline":
660
+ return /* @__PURE__ */ jsxRuntime.jsx(RenderTimeline, { spec });
661
+ case "progress":
662
+ return /* @__PURE__ */ jsxRuntime.jsx(RenderProgress, { spec });
663
+ default:
664
+ return /* @__PURE__ */ jsxRuntime.jsxs("p", { className: "text-sm text-muted-foreground", children: [
665
+ "Unsupported visualization type: ",
666
+ String(spec.type)
667
+ ] });
668
+ }
669
+ }
670
+ function VisualizationRenderer({ spec }) {
671
+ if (!spec || !spec.type) {
672
+ return null;
673
+ }
674
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full space-y-3", children: [
675
+ (spec.title || spec.description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
676
+ spec.title && /* @__PURE__ */ jsxRuntime.jsx("h4", { className: "text-sm font-semibold", children: spec.title }),
677
+ spec.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-muted-foreground", children: spec.description })
678
+ ] }),
679
+ renderContent(spec)
680
+ ] });
681
+ }
682
+ var VisualizationRenderer_default = VisualizationRenderer;
683
+
684
+ exports.VisualizationRenderer = VisualizationRenderer;
685
+ exports.VisualizationRenderer_default = VisualizationRenderer_default;
686
+ //# sourceMappingURL=chunk-Q7T3VAJV.cjs.map
687
+ //# sourceMappingURL=chunk-Q7T3VAJV.cjs.map