@shapesos/clay 0.11.0 → 0.13.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 (69) hide show
  1. package/README.md +60 -0
  2. package/dist/artifacts.cjs +1420 -245
  3. package/dist/artifacts.cjs.map +1 -1
  4. package/dist/artifacts.d.cts +167 -6
  5. package/dist/artifacts.d.ts +167 -6
  6. package/dist/artifacts.js +18 -3
  7. package/dist/blocks.cjs +1696 -532
  8. package/dist/blocks.cjs.map +1 -1
  9. package/dist/blocks.css +1 -1
  10. package/dist/blocks.d.cts +21 -10
  11. package/dist/blocks.d.ts +21 -10
  12. package/dist/blocks.js +7 -3
  13. package/dist/capture.cjs +220 -0
  14. package/dist/capture.cjs.map +1 -0
  15. package/dist/capture.d.cts +113 -0
  16. package/dist/capture.d.ts +113 -0
  17. package/dist/capture.js +17 -0
  18. package/dist/chart.cjs +594 -0
  19. package/dist/chart.cjs.map +1 -0
  20. package/dist/chart.d.cts +439 -0
  21. package/dist/chart.d.ts +439 -0
  22. package/dist/chart.js +32 -0
  23. package/dist/chart.js.map +1 -0
  24. package/dist/chat.cjs +1687 -532
  25. package/dist/chat.cjs.map +1 -1
  26. package/dist/chat.d.cts +3 -2
  27. package/dist/chat.d.ts +3 -2
  28. package/dist/chat.js +8 -4
  29. package/dist/{chunk-MXOPG747.js → chunk-26XVDY6Z.js} +8 -8
  30. package/dist/chunk-26XVDY6Z.js.map +1 -0
  31. package/dist/{chunk-L35M3OD5.js → chunk-4MZZH3WX.js} +5 -11
  32. package/dist/chunk-4MZZH3WX.js.map +1 -0
  33. package/dist/chunk-DT44KNCV.js +1004 -0
  34. package/dist/chunk-DT44KNCV.js.map +1 -0
  35. package/dist/chunk-JAGNXEWK.js +116 -0
  36. package/dist/chunk-JAGNXEWK.js.map +1 -0
  37. package/dist/chunk-LXYCT4YO.js +7 -0
  38. package/dist/chunk-LXYCT4YO.js.map +1 -0
  39. package/dist/chunk-P6GUNIAE.js +11 -0
  40. package/dist/chunk-P6GUNIAE.js.map +1 -0
  41. package/dist/{chunk-OUW6PUEB.js → chunk-QH2WW2MW.js} +7 -7
  42. package/dist/chunk-QXGYMDIA.js +477 -0
  43. package/dist/chunk-QXGYMDIA.js.map +1 -0
  44. package/dist/chunk-RSRNSWJN.js +1 -0
  45. package/dist/chunk-RSRNSWJN.js.map +1 -0
  46. package/dist/dom-to-image-NATF3446.js +21 -0
  47. package/dist/dom-to-image-NATF3446.js.map +1 -0
  48. package/dist/index.cjs +1489 -317
  49. package/dist/index.cjs.map +1 -1
  50. package/dist/index.d.cts +4 -3
  51. package/dist/index.d.ts +4 -3
  52. package/dist/index.js +28 -15
  53. package/dist/table.js +2 -1
  54. package/dist/types-B2aYk82c.d.cts +29 -0
  55. package/dist/types-B2aYk82c.d.ts +29 -0
  56. package/dist/types-BzXPBy6s.d.cts +330 -0
  57. package/dist/{types-DuuRI4ll.d.cts → types-CW45GBXl.d.cts} +31 -4
  58. package/dist/{types-C9XX-Uhk.d.ts → types-D1b8v7EY.d.ts} +31 -4
  59. package/dist/types-GCkXbyFm.d.ts +330 -0
  60. package/package.json +24 -2
  61. package/dist/chunk-BX5TCEPR.js +0 -436
  62. package/dist/chunk-BX5TCEPR.js.map +0 -1
  63. package/dist/chunk-L35M3OD5.js.map +0 -1
  64. package/dist/chunk-MEJESPTZ.js +0 -1
  65. package/dist/chunk-MXOPG747.js.map +0 -1
  66. package/dist/types-3Gzk7cRt.d.cts +0 -121
  67. package/dist/types-3Gzk7cRt.d.ts +0 -121
  68. /package/dist/{chunk-MEJESPTZ.js.map → capture.js.map} +0 -0
  69. /package/dist/{chunk-OUW6PUEB.js.map → chunk-QH2WW2MW.js.map} +0 -0
package/dist/index.cjs CHANGED
@@ -5,6 +5,9 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __esm = (fn, res) => function __init() {
9
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
+ };
8
11
  var __commonJS = (cb, mod2) => function __require() {
9
12
  return mod2 || (0, cb[__getOwnPropNames(cb)[0]])((mod2 = { exports: {} }).exports, mod2), mod2.exports;
10
13
  };
@@ -30,6 +33,239 @@ var __toESM = (mod2, isNodeMode, target) => (target = mod2 != null ? __create(__
30
33
  ));
31
34
  var __toCommonJS = (mod2) => __copyProps(__defProp({}, "__esModule", { value: true }), mod2);
32
35
 
36
+ // src/tokens/colors.ts
37
+ var colors;
38
+ var init_colors = __esm({
39
+ "src/tokens/colors.ts"() {
40
+ "use strict";
41
+ colors = {
42
+ // White
43
+ white: "#FFFFFF",
44
+ "white-alpha-85": "rgba(255, 255, 255, 0.85)",
45
+ "white-alpha-40": "rgba(255, 255, 255, 0.40)",
46
+ // Brown
47
+ "brown-10": "#FAF9F8",
48
+ "brown-20": "#F5F3F0",
49
+ "brown-30": "#EEEBE5",
50
+ "brown-40": "#E6E2DA",
51
+ "brown-50": "#CFCBC4",
52
+ "brown-60": "#A19E99",
53
+ "brown-70": "#73716D",
54
+ "brown-80": "#5C5A57",
55
+ "brown-90": "#2E2D2C",
56
+ "brown-100": "#171716",
57
+ "brown-alpha-12": "rgba(23, 23, 22, 0.12)",
58
+ "brown-alpha-20": "rgba(23, 23, 22, 0.20)",
59
+ "brown-alpha-55": "rgba(23, 23, 22, 0.55)",
60
+ "brown-alpha-70": "rgba(23, 23, 22, 0.70)",
61
+ "brown-alpha-80": "rgba(23, 23, 22, 0.80)",
62
+ "brown-alpha-90": "rgba(23, 23, 22, 0.90)",
63
+ // Fuchsia
64
+ "fuchsia-50": "#FAF5FF",
65
+ "fuchsia-300": "#F0ABFC",
66
+ "fuchsia-500": "#D946EF",
67
+ "fuchsia-600": "#C026D3",
68
+ "fuchsia-800": "#86198F",
69
+ // Pink
70
+ "pink-50": "#FDF2F8",
71
+ "pink-400": "#F472B6",
72
+ "pink-600": "#DB2777",
73
+ "pink-800": "#9D174D",
74
+ // Violet
75
+ "violet-50": "#F5F3FF",
76
+ "violet-400": "#A78BFA",
77
+ "violet-600": "#7C3AED",
78
+ "violet-800": "#5B21B6",
79
+ // Indigo
80
+ "indigo-50": "#EEF2FF",
81
+ "indigo-400": "#818CF8",
82
+ "indigo-500": "#6366F1",
83
+ "indigo-600": "#4F46E5",
84
+ "indigo-800": "#3730A3",
85
+ // Cyan
86
+ "cyan-50": "#E7FEFF",
87
+ "cyan-300": "#67E8F9",
88
+ "cyan-600": "#0891B2",
89
+ "cyan-900": "#164E63",
90
+ // Teal
91
+ "teal-50": "#EBFDF9",
92
+ "teal-300": "#5EEAD4",
93
+ "teal-600": "#0D9488",
94
+ // Rose
95
+ "rose-400": "#FB7185",
96
+ // Purple
97
+ "purple-400": "#C084FC",
98
+ // Blue
99
+ "blue-50": "#EFF6FF",
100
+ "blue-100": "#DBEAFE",
101
+ "blue-300": "#93C5FD",
102
+ "blue-400": "#60A5FA",
103
+ "blue-600": "#2563EB",
104
+ "blue-800": "#1E40AF",
105
+ // Sky
106
+ "sky-300": "#7DD3FC",
107
+ // Green
108
+ "green-50": "#ECF9F0",
109
+ "green-100": "#D4F1D9",
110
+ "green-400": "#3DC269",
111
+ "green-700": "#277C43",
112
+ "green-800": "#1C5930",
113
+ // Orange
114
+ "orange-50": "#FFF7ED",
115
+ "orange-100": "#FFEDD5",
116
+ "orange-200": "#FED7AA",
117
+ "orange-500": "#F97316",
118
+ "orange-600": "#EA580C",
119
+ // Red
120
+ "red-50": "#FEF2F2",
121
+ "red-100": "#FEE2E2",
122
+ "red-200": "#FECACA",
123
+ "red-400": "#F7776C",
124
+ "red-500": "#EF4444",
125
+ "red-600": "#DC2626"
126
+ };
127
+ }
128
+ });
129
+
130
+ // src/capture/capture-exclude-attribute.ts
131
+ var CAPTURE_EXCLUDE_ATTRIBUTE;
132
+ var init_capture_exclude_attribute = __esm({
133
+ "src/capture/capture-exclude-attribute.ts"() {
134
+ "use strict";
135
+ CAPTURE_EXCLUDE_ATTRIBUTE = "data-clay-capture-exclude";
136
+ }
137
+ });
138
+
139
+ // src/capture/_font-data-urls.generated.ts
140
+ var GEIST_LATIN_WOFF2_DATA_URL, CRIMSON_PRO_LATIN_WOFF2_DATA_URL;
141
+ var init_font_data_urls_generated = __esm({
142
+ "src/capture/_font-data-urls.generated.ts"() {
143
+ "use strict";
144
+ GEIST_LATIN_WOFF2_DATA_URL = "data:font/woff2;base64,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";
145
+ CRIMSON_PRO_LATIN_WOFF2_DATA_URL = "data:font/woff2;base64,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";
146
+ }
147
+ });
148
+
149
+ // src/capture/font-embed.ts
150
+ var CLAY_FONTS_EMBED_CSS;
151
+ var init_font_embed = __esm({
152
+ "src/capture/font-embed.ts"() {
153
+ "use strict";
154
+ init_font_data_urls_generated();
155
+ CLAY_FONTS_EMBED_CSS = `
156
+ @font-face {
157
+ font-family: 'Geist';
158
+ font-style: normal;
159
+ font-weight: 100 900;
160
+ font-display: swap;
161
+ src: url(${GEIST_LATIN_WOFF2_DATA_URL}) format('woff2-variations');
162
+ }
163
+ @font-face {
164
+ font-family: 'Crimson Pro';
165
+ font-style: normal;
166
+ font-weight: 200 900;
167
+ font-display: swap;
168
+ src: url(${CRIMSON_PRO_LATIN_WOFF2_DATA_URL}) format('woff2-variations');
169
+ }
170
+ `.trim();
171
+ }
172
+ });
173
+
174
+ // src/capture/dom-to-image.ts
175
+ var dom_to_image_exports = {};
176
+ __export(dom_to_image_exports, {
177
+ CAPTURE_EXCLUDE_ATTRIBUTE: () => CAPTURE_EXCLUDE_ATTRIBUTE,
178
+ _resetFontEmbedCacheForTests: () => _resetFontEmbedCacheForTests,
179
+ copyNodeAsPng: () => copyNodeAsPng,
180
+ downloadNodeAsPng: () => downloadNodeAsPng,
181
+ nodeToPngBlob: () => nodeToPngBlob,
182
+ truncateErrorMessage: () => truncateErrorMessage
183
+ });
184
+ function defaultFilter(node) {
185
+ if (typeof node.getAttribute !== "function") return true;
186
+ return !node.hasAttribute(CAPTURE_EXCLUDE_ATTRIBUTE);
187
+ }
188
+ function composeFilter(caller) {
189
+ if (!caller) return defaultFilter;
190
+ return (node) => defaultFilter(node) && caller(node);
191
+ }
192
+ async function resolveFontEmbedCSS(node) {
193
+ if (cachedFontEmbedCSS !== null) return cachedFontEmbedCSS;
194
+ if (inflightFontEmbedCSS !== null) return inflightFontEmbedCSS;
195
+ inflightFontEmbedCSS = (0, import_html_to_image.getFontEmbedCSS)(node).catch(() => "").then((dynamicCss) => {
196
+ const combined = `${CLAY_FONTS_EMBED_CSS}
197
+ ${dynamicCss}`;
198
+ cachedFontEmbedCSS = combined;
199
+ return combined;
200
+ }).finally(() => {
201
+ inflightFontEmbedCSS = null;
202
+ });
203
+ return inflightFontEmbedCSS;
204
+ }
205
+ function _resetFontEmbedCacheForTests() {
206
+ cachedFontEmbedCSS = null;
207
+ inflightFontEmbedCSS = null;
208
+ }
209
+ async function nodeToPngBlob(node, options = {}) {
210
+ const fontEmbedCSS = options.fontEmbedCSS ?? await resolveFontEmbedCSS(node).catch(() => void 0);
211
+ const rect = node.getBoundingClientRect();
212
+ const width2 = options.width ?? rect.width;
213
+ const height2 = options.height ?? rect.height;
214
+ const blob = await (0, import_html_to_image.toBlob)(node, {
215
+ backgroundColor: options.backgroundColor ?? DEFAULT_BACKGROUND,
216
+ cacheBust: options.cacheBust ?? true,
217
+ filter: composeFilter(options.filter),
218
+ pixelRatio: options.pixelRatio,
219
+ width: width2,
220
+ height: height2,
221
+ fontEmbedCSS
222
+ });
223
+ if (!blob) throw new Error("Failed to rasterise node \u2014 toBlob returned null (possible cross-origin canvas taint).");
224
+ return blob;
225
+ }
226
+ async function copyNodeAsPng(node, options = {}) {
227
+ if (typeof ClipboardItem === "undefined") {
228
+ throw new Error("Clipboard image writes are not supported in this environment (ClipboardItem missing).");
229
+ }
230
+ if (!navigator.clipboard) {
231
+ throw new Error("Clipboard API unavailable \u2014 secure context (HTTPS) required.");
232
+ }
233
+ const blobPromise = nodeToPngBlob(node, options);
234
+ void blobPromise.catch(() => void 0);
235
+ const item = new ClipboardItem({ "image/png": blobPromise });
236
+ await Promise.all([navigator.clipboard.write([item]), blobPromise]);
237
+ }
238
+ async function downloadNodeAsPng(node, filename, options = {}) {
239
+ const blob = await nodeToPngBlob(node, options);
240
+ const url = URL.createObjectURL(blob);
241
+ const a = document.createElement("a");
242
+ a.href = url;
243
+ a.download = filename;
244
+ a.rel = "noopener noreferrer";
245
+ document.body.appendChild(a);
246
+ a.click();
247
+ a.remove();
248
+ setTimeout(() => URL.revokeObjectURL(url), OBJECT_URL_REVOKE_DELAY_MS);
249
+ }
250
+ function truncateErrorMessage(message, max = MAX_ERROR_MESSAGE_CHARS) {
251
+ return message.length <= max ? message : `${message.slice(0, max - 1)}\u2026`;
252
+ }
253
+ var import_html_to_image, DEFAULT_BACKGROUND, MAX_ERROR_MESSAGE_CHARS, cachedFontEmbedCSS, inflightFontEmbedCSS, OBJECT_URL_REVOKE_DELAY_MS;
254
+ var init_dom_to_image = __esm({
255
+ "src/capture/dom-to-image.ts"() {
256
+ "use strict";
257
+ import_html_to_image = require("html-to-image");
258
+ init_colors();
259
+ init_capture_exclude_attribute();
260
+ init_font_embed();
261
+ DEFAULT_BACKGROUND = colors.white;
262
+ MAX_ERROR_MESSAGE_CHARS = 120;
263
+ cachedFontEmbedCSS = null;
264
+ inflightFontEmbedCSS = null;
265
+ OBJECT_URL_REVOKE_DELAY_MS = 3e4;
266
+ }
267
+ });
268
+
33
269
  // node_modules/lottie-web/build/player/lottie.js
34
270
  var require_lottie = __commonJS({
35
271
  "node_modules/lottie-web/build/player/lottie.js"(exports, module) {
@@ -16342,7 +16578,9 @@ var require_lottie = __commonJS({
16342
16578
  // src/index.ts
16343
16579
  var src_exports = {};
16344
16580
  __export(src_exports, {
16581
+ ArtifactCopyAsImageButton: () => ArtifactCopyAsImageButton,
16345
16582
  ArtifactDownloadButton: () => ArtifactDownloadButton,
16583
+ ArtifactDownloadMenu: () => ArtifactDownloadMenu,
16346
16584
  ArtifactRefBlock: () => ArtifactRefBlock,
16347
16585
  ArtifactRefBlockService: () => ArtifactRefBlockService,
16348
16586
  ArtifactServices: () => ArtifactServices,
@@ -16353,8 +16591,11 @@ __export(src_exports, {
16353
16591
  BlockContext: () => BlockContext,
16354
16592
  BlockServices: () => BlockServices,
16355
16593
  Button: () => Button2,
16594
+ ChartArtifact: () => ChartArtifact,
16356
16595
  ChatContext: () => ChatContext,
16357
16596
  ChatMessage: () => ChatMessage,
16597
+ DEFAULT_CHART_ARTIFACT_LABELS: () => DEFAULT_CHART_ARTIFACT_LABELS,
16598
+ DEFAULT_TABLE_ARTIFACT_LABELS: () => DEFAULT_TABLE_ARTIFACT_LABELS,
16358
16599
  ICON_POSITION: () => ICON_POSITION,
16359
16600
  Icon: () => Icon,
16360
16601
  IconButton: () => IconButton,
@@ -16387,93 +16628,8 @@ __export(src_exports, {
16387
16628
  });
16388
16629
  module.exports = __toCommonJS(src_exports);
16389
16630
 
16390
- // src/tokens/colors.ts
16391
- var colors = {
16392
- // White
16393
- white: "#FFFFFF",
16394
- "white-alpha-85": "rgba(255, 255, 255, 0.85)",
16395
- "white-alpha-40": "rgba(255, 255, 255, 0.40)",
16396
- // Brown
16397
- "brown-10": "#FAF9F8",
16398
- "brown-20": "#F5F3F0",
16399
- "brown-30": "#EEEBE5",
16400
- "brown-40": "#E6E2DA",
16401
- "brown-50": "#CFCBC4",
16402
- "brown-60": "#A19E99",
16403
- "brown-70": "#73716D",
16404
- "brown-80": "#5C5A57",
16405
- "brown-90": "#2E2D2C",
16406
- "brown-100": "#171716",
16407
- "brown-alpha-12": "rgba(23, 23, 22, 0.12)",
16408
- "brown-alpha-20": "rgba(23, 23, 22, 0.20)",
16409
- "brown-alpha-55": "rgba(23, 23, 22, 0.55)",
16410
- "brown-alpha-70": "rgba(23, 23, 22, 0.70)",
16411
- "brown-alpha-80": "rgba(23, 23, 22, 0.80)",
16412
- "brown-alpha-90": "rgba(23, 23, 22, 0.90)",
16413
- // Fuchsia
16414
- "fuchsia-50": "#FAF5FF",
16415
- "fuchsia-300": "#F0ABFC",
16416
- "fuchsia-500": "#D946EF",
16417
- "fuchsia-600": "#C026D3",
16418
- "fuchsia-800": "#86198F",
16419
- // Pink
16420
- "pink-50": "#FDF2F8",
16421
- "pink-400": "#F472B6",
16422
- "pink-600": "#DB2777",
16423
- "pink-800": "#9D174D",
16424
- // Violet
16425
- "violet-50": "#F5F3FF",
16426
- "violet-400": "#A78BFA",
16427
- "violet-600": "#7C3AED",
16428
- "violet-800": "#5B21B6",
16429
- // Indigo
16430
- "indigo-50": "#EEF2FF",
16431
- "indigo-400": "#818CF8",
16432
- "indigo-500": "#6366F1",
16433
- "indigo-600": "#4F46E5",
16434
- "indigo-800": "#3730A3",
16435
- // Cyan
16436
- "cyan-50": "#E7FEFF",
16437
- "cyan-300": "#67E8F9",
16438
- "cyan-600": "#0891B2",
16439
- "cyan-900": "#164E63",
16440
- // Teal
16441
- "teal-50": "#EBFDF9",
16442
- "teal-300": "#5EEAD4",
16443
- "teal-600": "#0D9488",
16444
- // Rose
16445
- "rose-400": "#FB7185",
16446
- // Purple
16447
- "purple-400": "#C084FC",
16448
- // Blue
16449
- "blue-50": "#EFF6FF",
16450
- "blue-100": "#DBEAFE",
16451
- "blue-300": "#93C5FD",
16452
- "blue-400": "#60A5FA",
16453
- "blue-600": "#2563EB",
16454
- "blue-800": "#1E40AF",
16455
- // Sky
16456
- "sky-300": "#7DD3FC",
16457
- // Green
16458
- "green-50": "#ECF9F0",
16459
- "green-100": "#D4F1D9",
16460
- "green-400": "#3DC269",
16461
- "green-700": "#277C43",
16462
- "green-800": "#1C5930",
16463
- // Orange
16464
- "orange-50": "#FFF7ED",
16465
- "orange-100": "#FFEDD5",
16466
- "orange-200": "#FED7AA",
16467
- "orange-500": "#F97316",
16468
- "orange-600": "#EA580C",
16469
- // Red
16470
- "red-50": "#FEF2F2",
16471
- "red-100": "#FEE2E2",
16472
- "red-200": "#FECACA",
16473
- "red-400": "#F7776C",
16474
- "red-500": "#EF4444",
16475
- "red-600": "#DC2626"
16476
- };
16631
+ // src/tokens/index.ts
16632
+ init_colors();
16477
16633
 
16478
16634
  // src/tokens/typography.ts
16479
16635
  var fontFamilies = {
@@ -16776,13 +16932,39 @@ var blockTypes = {
16776
16932
  ARTIFACT_REF: "ARTIFACT_REF"
16777
16933
  };
16778
16934
 
16779
- // src/components/artifacts/types.ts
16935
+ // src/components/artifacts/artifact-base.ts
16780
16936
  var artifactTypes = {
16781
- TABLE: "TABLE"
16937
+ TABLE: "TABLE",
16938
+ CHART: "CHART"
16782
16939
  };
16783
16940
 
16784
- // src/components/artifacts/table-artifact/table-artifact.tsx
16785
- var import_react7 = require("react");
16941
+ // src/components/artifacts/chart-artifact/types.ts
16942
+ var DEFAULT_CHART_ARTIFACT_LABELS = {
16943
+ download: "Download",
16944
+ downloadCsv: "Download CSV",
16945
+ downloadPng: "Download PNG",
16946
+ copyAsImage: "Copy Image",
16947
+ unavailable: "Chart data is unavailable.",
16948
+ loadError: "Couldn't load chart data.",
16949
+ loading: "Loading chart\u2026",
16950
+ empty: "No data to chart.",
16951
+ othersCategoryLabels: ["Others", "Other"]
16952
+ };
16953
+
16954
+ // src/components/artifacts/table-artifact/types.ts
16955
+ var DEFAULT_TABLE_ARTIFACT_LABELS = {
16956
+ download: "Download CSV",
16957
+ unavailable: "Table data is unavailable.",
16958
+ loadError: "Couldn't load table data.",
16959
+ loading: "Loading table\u2026",
16960
+ empty: "No rows to display."
16961
+ };
16962
+
16963
+ // src/components/artifacts/chart-artifact/chart-artifact.tsx
16964
+ var import_react13 = require("react");
16965
+
16966
+ // src/components/ai-elements/artifact.tsx
16967
+ var import_react = require("react");
16786
16968
 
16787
16969
  // src/lib/utils.ts
16788
16970
  var import_clsx = require("clsx");
@@ -16793,20 +16975,25 @@ function cn(...inputs) {
16793
16975
 
16794
16976
  // src/components/ai-elements/artifact.tsx
16795
16977
  var import_jsx_runtime = require("react/jsx-runtime");
16796
- var Artifact = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
16978
+ var Artifact = (0, import_react.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
16797
16979
  "div",
16798
16980
  {
16981
+ ref,
16799
16982
  className: cn("flex flex-col overflow-hidden rounded-lg border bg-background shadow-sm", className),
16800
16983
  ...props
16801
16984
  }
16802
- );
16985
+ ));
16986
+ Artifact.displayName = "Artifact";
16803
16987
  var ArtifactHeader = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cn("flex items-center justify-between border-b bg-muted/50 px-4 py-3", className), ...props });
16804
16988
  var ArtifactTitle = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: cn("font-medium text-foreground text-sm", className), ...props });
16805
16989
  var ArtifactActions = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cn("flex items-center gap-1", className), ...props });
16806
16990
  var ArtifactContent = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cn("flex-1 overflow-auto p-4", className), ...props });
16807
16991
 
16992
+ // src/components/artifacts/chart-artifact/chart-artifact.tsx
16993
+ init_capture_exclude_attribute();
16994
+
16808
16995
  // node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs
16809
- var import_react = require("react");
16996
+ var import_react2 = require("react");
16810
16997
 
16811
16998
  // node_modules/@tabler/icons-react/dist/esm/defaultAttributes.mjs
16812
16999
  var defaultAttributes = {
@@ -16833,8 +17020,8 @@ var defaultAttributes = {
16833
17020
 
16834
17021
  // node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs
16835
17022
  var createReactComponent = (type, iconName, iconNamePascal, iconNode) => {
16836
- const Component = (0, import_react.forwardRef)(
16837
- ({ color = "currentColor", size = 24, stroke = 2, title, className, children, ...rest }, ref) => (0, import_react.createElement)(
17023
+ const Component = (0, import_react2.forwardRef)(
17024
+ ({ color = "currentColor", size = 24, stroke = 2, title, className, children, ...rest }, ref) => (0, import_react2.createElement)(
16838
17025
  "svg",
16839
17026
  {
16840
17027
  ref,
@@ -16851,8 +17038,8 @@ var createReactComponent = (type, iconName, iconNamePascal, iconNode) => {
16851
17038
  ...rest
16852
17039
  },
16853
17040
  [
16854
- title && (0, import_react.createElement)("title", { key: "svg-title" }, title),
16855
- ...iconNode.map(([tag, attrs]) => (0, import_react.createElement)(tag, attrs)),
17041
+ title && (0, import_react2.createElement)("title", { key: "svg-title" }, title),
17042
+ ...iconNode.map(([tag, attrs]) => (0, import_react2.createElement)(tag, attrs)),
16856
17043
  ...Array.isArray(children) ? children : [children]
16857
17044
  ]
16858
17045
  )
@@ -16861,31 +17048,50 @@ var createReactComponent = (type, iconName, iconNamePascal, iconNode) => {
16861
17048
  return Component;
16862
17049
  };
16863
17050
 
17051
+ // node_modules/@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs
17052
+ var __iconNode = [["path", { "d": "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 8v4", "key": "svg-1" }], ["path", { "d": "M12 16h.01", "key": "svg-2" }]];
17053
+ var IconAlertCircle = createReactComponent("outline", "alert-circle", "AlertCircle", __iconNode);
17054
+
16864
17055
  // node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.mjs
16865
- var __iconNode = [["path", { "d": "M5 12l5 5l10 -10", "key": "svg-0" }]];
16866
- var IconCheck = createReactComponent("outline", "check", "Check", __iconNode);
17056
+ var __iconNode2 = [["path", { "d": "M5 12l5 5l10 -10", "key": "svg-0" }]];
17057
+ var IconCheck = createReactComponent("outline", "check", "Check", __iconNode2);
16867
17058
 
16868
17059
  // node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.mjs
16869
- var __iconNode2 = [["path", { "d": "M7 9.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667l0 -8.666", "key": "svg-0" }], ["path", { "d": "M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1", "key": "svg-1" }]];
16870
- var IconCopy = createReactComponent("outline", "copy", "Copy", __iconNode2);
17060
+ var __iconNode3 = [["path", { "d": "M7 9.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667l0 -8.666", "key": "svg-0" }], ["path", { "d": "M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1", "key": "svg-1" }]];
17061
+ var IconCopy = createReactComponent("outline", "copy", "Copy", __iconNode3);
16871
17062
 
16872
17063
  // node_modules/@tabler/icons-react/dist/esm/icons/IconDownload.mjs
16873
- var __iconNode3 = [["path", { "d": "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M7 11l5 5l5 -5", "key": "svg-1" }], ["path", { "d": "M12 4l0 12", "key": "svg-2" }]];
16874
- var IconDownload = createReactComponent("outline", "download", "Download", __iconNode3);
17064
+ var __iconNode4 = [["path", { "d": "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M7 11l5 5l5 -5", "key": "svg-1" }], ["path", { "d": "M12 4l0 12", "key": "svg-2" }]];
17065
+ var IconDownload = createReactComponent("outline", "download", "Download", __iconNode4);
17066
+
17067
+ // node_modules/@tabler/icons-react/dist/esm/icons/IconFileSpreadsheet.mjs
17068
+ var __iconNode5 = [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2", "key": "svg-1" }], ["path", { "d": "M8 11h8v7h-8l0 -7", "key": "svg-2" }], ["path", { "d": "M8 15h8", "key": "svg-3" }], ["path", { "d": "M11 11v7", "key": "svg-4" }]];
17069
+ var IconFileSpreadsheet = createReactComponent("outline", "file-spreadsheet", "FileSpreadsheet", __iconNode5);
17070
+
17071
+ // node_modules/@tabler/icons-react/dist/esm/icons/IconLoader2.mjs
17072
+ var __iconNode6 = [["path", { "d": "M12 3a9 9 0 1 0 9 9", "key": "svg-0" }]];
17073
+ var IconLoader2 = createReactComponent("outline", "loader-2", "Loader2", __iconNode6);
17074
+
17075
+ // node_modules/@tabler/icons-react/dist/esm/icons/IconPhoto.mjs
17076
+ var __iconNode7 = [["path", { "d": "M15 8h.01", "key": "svg-0" }], ["path", { "d": "M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12", "key": "svg-1" }], ["path", { "d": "M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5", "key": "svg-2" }], ["path", { "d": "M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3", "key": "svg-3" }]];
17077
+ var IconPhoto = createReactComponent("outline", "photo", "Photo", __iconNode7);
16875
17078
 
16876
17079
  // node_modules/@tabler/icons-react/dist/esm/icons/IconThumbDown.mjs
16877
- var __iconNode4 = [["path", { "d": "M7 13v-8a1 1 0 0 0 -1 -1h-2a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h3a4 4 0 0 1 4 4v1a2 2 0 0 0 4 0v-5h3a2 2 0 0 0 2 -2l-1 -5a2 3 0 0 0 -2 -2h-7a3 3 0 0 0 -3 3", "key": "svg-0" }]];
16878
- var IconThumbDown = createReactComponent("outline", "thumb-down", "ThumbDown", __iconNode4);
17080
+ var __iconNode8 = [["path", { "d": "M7 13v-8a1 1 0 0 0 -1 -1h-2a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h3a4 4 0 0 1 4 4v1a2 2 0 0 0 4 0v-5h3a2 2 0 0 0 2 -2l-1 -5a2 3 0 0 0 -2 -2h-7a3 3 0 0 0 -3 3", "key": "svg-0" }]];
17081
+ var IconThumbDown = createReactComponent("outline", "thumb-down", "ThumbDown", __iconNode8);
16879
17082
 
16880
17083
  // node_modules/@tabler/icons-react/dist/esm/icons/IconThumbUp.mjs
16881
- var __iconNode5 = [["path", { "d": "M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3", "key": "svg-0" }]];
16882
- var IconThumbUp = createReactComponent("outline", "thumb-up", "ThumbUp", __iconNode5);
17084
+ var __iconNode9 = [["path", { "d": "M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3", "key": "svg-0" }]];
17085
+ var IconThumbUp = createReactComponent("outline", "thumb-up", "ThumbUp", __iconNode9);
17086
+
17087
+ // src/components/artifacts/artifact-copy-as-image-button/artifact-copy-as-image-button.tsx
17088
+ var import_react6 = require("react");
16883
17089
 
16884
17090
  // src/components/icon-button/icon-button.tsx
16885
- var import_react3 = require("react");
17091
+ var import_react4 = require("react");
16886
17092
 
16887
17093
  // src/components/icon/icon.tsx
16888
- var import_react2 = require("react");
17094
+ var import_react3 = require("react");
16889
17095
 
16890
17096
  // src/components/icon/icon-styles.ts
16891
17097
  var import_styled_components = __toESM(require("styled-components"), 1);
@@ -16912,7 +17118,7 @@ var IconWrapper = import_styled_components.default.span`
16912
17118
  // src/components/icon/icon.tsx
16913
17119
  var import_jsx_runtime2 = require("react/jsx-runtime");
16914
17120
  var DEFAULT_SIZE = 16;
16915
- var Icon = (0, import_react2.forwardRef)(function Icon2({ icon: IconComponent, size = DEFAULT_SIZE, color, className, "aria-label": ariaLabel }, ref) {
17121
+ var Icon = (0, import_react3.forwardRef)(function Icon2({ icon: IconComponent, size = DEFAULT_SIZE, color, className, "aria-label": ariaLabel }, ref) {
16916
17122
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
16917
17123
  IconWrapper,
16918
17124
  {
@@ -16928,6 +17134,7 @@ var Icon = (0, import_react2.forwardRef)(function Icon2({ icon: IconComponent, s
16928
17134
 
16929
17135
  // src/components/icon-button/icon-button-styles.ts
16930
17136
  var import_styled_components2 = __toESM(require("styled-components"), 1);
17137
+ init_colors();
16931
17138
  var PADDING = {
16932
17139
  short: {
16933
17140
  small: "4px",
@@ -16975,7 +17182,7 @@ var ICON_SIZE_BY_BUTTON_SIZE = {
16975
17182
  small: 16,
16976
17183
  medium: 20
16977
17184
  };
16978
- var IconButton = (0, import_react3.forwardRef)(function IconButton2({
17185
+ var IconButton = (0, import_react4.forwardRef)(function IconButton2({
16979
17186
  icon,
16980
17187
  size = "small",
16981
17188
  variant = "short",
@@ -17030,24 +17237,132 @@ var TooltipContent = React.forwardRef(({ className, sideOffset = 4, ...props },
17030
17237
  ));
17031
17238
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
17032
17239
 
17033
- // src/components/artifacts/artifact-download-button/artifact-download-button.tsx
17240
+ // src/components/artifacts/artifact-copy-as-image-button/use-copy-as-image.ts
17241
+ var import_react5 = require("react");
17242
+ var DEFAULT_RESET_AFTER_MS = 1500;
17243
+ function useCopyAsImage(targetRef, options = {}) {
17244
+ const [status, setStatus] = (0, import_react5.useState)("idle");
17245
+ const [error, setError] = (0, import_react5.useState)(null);
17246
+ const resetTimerRef = (0, import_react5.useRef)(null);
17247
+ (0, import_react5.useEffect)(() => {
17248
+ return () => {
17249
+ if (resetTimerRef.current !== null) clearTimeout(resetTimerRef.current);
17250
+ };
17251
+ }, []);
17252
+ const copy = (0, import_react5.useCallback)(async () => {
17253
+ if (resetTimerRef.current !== null) {
17254
+ clearTimeout(resetTimerRef.current);
17255
+ resetTimerRef.current = null;
17256
+ }
17257
+ const { resetAfterMs = DEFAULT_RESET_AFTER_MS, ...nodeOptions } = options;
17258
+ const scheduleReset = () => {
17259
+ if (resetAfterMs <= 0) return;
17260
+ resetTimerRef.current = setTimeout(() => {
17261
+ resetTimerRef.current = null;
17262
+ setStatus("idle");
17263
+ setError(null);
17264
+ }, resetAfterMs);
17265
+ };
17266
+ const node = targetRef.current;
17267
+ if (!node) {
17268
+ const err = new Error("ArtifactCopyAsImageButton: target ref is not attached to a DOM node.");
17269
+ setError(err);
17270
+ setStatus("error");
17271
+ scheduleReset();
17272
+ throw err;
17273
+ }
17274
+ setError(null);
17275
+ setStatus("working");
17276
+ try {
17277
+ const { copyNodeAsPng: copyNodeAsPng2 } = await Promise.resolve().then(() => (init_dom_to_image(), dom_to_image_exports));
17278
+ await copyNodeAsPng2(node, nodeOptions);
17279
+ setStatus("success");
17280
+ scheduleReset();
17281
+ } catch (err) {
17282
+ const wrapped = err instanceof Error ? err : new Error(String(err));
17283
+ setError(wrapped);
17284
+ setStatus("error");
17285
+ scheduleReset();
17286
+ throw wrapped;
17287
+ }
17288
+ }, [targetRef, options]);
17289
+ return { status, error, copy };
17290
+ }
17291
+
17292
+ // src/components/artifacts/artifact-copy-as-image-button/artifact-copy-as-image-button.tsx
17034
17293
  var import_jsx_runtime5 = require("react/jsx-runtime");
17035
- function ArtifactDownloadButton({ href }) {
17036
- if (!isSafeDownloadUrl(href)) return null;
17294
+ var MAX_ERROR_MESSAGE_CHARS2 = 120;
17295
+ function truncateErrorMessage2(message, max = MAX_ERROR_MESSAGE_CHARS2) {
17296
+ return message.length <= max ? message : `${message.slice(0, max - 1)}\u2026`;
17297
+ }
17298
+ var DEFAULT_LABEL = "Copy Image";
17299
+ var ICON_BY_STATUS = {
17300
+ // `IconCopy` reads as the clipboard-copy affordance (action-shaped), distinct from the
17301
+ // download menu's format-shaped icons. The button only ever puts bytes on the clipboard, so
17302
+ // the visual signal stays consistent across copy-aware artifact types.
17303
+ idle: IconCopy,
17304
+ working: IconLoader2,
17305
+ success: IconCheck,
17306
+ error: IconAlertCircle
17307
+ };
17308
+ var TRANSIENT_TOOLTIP_BY_STATUS = {
17309
+ working: "Copying\u2026",
17310
+ success: "Copied",
17311
+ error: "Copy failed"
17312
+ };
17313
+ function ArtifactCopyAsImageButton({
17314
+ targetRef,
17315
+ label = DEFAULT_LABEL,
17316
+ disabled = false,
17317
+ onClick
17318
+ }) {
17319
+ const { status, error, copy } = useCopyAsImage(targetRef);
17320
+ const handleClick = (0, import_react6.useCallback)(() => {
17321
+ onClick?.();
17322
+ copy().catch((err) => {
17323
+ console.warn("[clay] ArtifactCopyAsImageButton: copy failed", err);
17324
+ });
17325
+ }, [copy, onClick]);
17326
+ const statusLabel = status === "idle" ? label : status === "error" && error ? `Copy failed: ${truncateErrorMessage2(error.message)}` : TRANSIENT_TOOLTIP_BY_STATUS[status] ?? label;
17037
17327
  return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(Tooltip, { children: [
17038
17328
  /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
17329
+ IconButton,
17330
+ {
17331
+ icon: ICON_BY_STATUS[status],
17332
+ size: "small",
17333
+ onClick: handleClick,
17334
+ disabled: disabled || status === "working",
17335
+ "aria-label": statusLabel
17336
+ }
17337
+ ) }),
17338
+ /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(TooltipContent, { children: statusLabel })
17339
+ ] }) });
17340
+ }
17341
+
17342
+ // src/components/artifacts/artifact-download-button/artifact-download-button.tsx
17343
+ var import_jsx_runtime6 = require("react/jsx-runtime");
17344
+ var DEFAULT_LABEL2 = "Download CSV";
17345
+ function ArtifactDownloadButton({
17346
+ href,
17347
+ label = DEFAULT_LABEL2,
17348
+ onClick
17349
+ }) {
17350
+ if (!isSafeDownloadUrl(href)) return null;
17351
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(Tooltip, { children: [
17352
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
17039
17353
  IconButton,
17040
17354
  {
17041
17355
  as: "a",
17042
17356
  href,
17043
17357
  download: true,
17044
17358
  rel: "noopener noreferrer",
17359
+ onClick,
17045
17360
  icon: IconDownload,
17046
17361
  size: "small",
17047
- "aria-label": "Download artifact"
17362
+ "aria-label": label
17048
17363
  }
17049
17364
  ) }),
17050
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(TooltipContent, { children: "Download" })
17365
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(TooltipContent, { children: label })
17051
17366
  ] }) });
17052
17367
  }
17053
17368
  function isSafeDownloadUrl(url) {
@@ -17059,25 +17374,927 @@ function isSafeDownloadUrl(url) {
17059
17374
  }
17060
17375
  }
17061
17376
 
17062
- // src/components/ui/table.tsx
17377
+ // src/components/artifacts/artifact-download-menu/artifact-download-menu.tsx
17378
+ var import_react7 = require("react");
17379
+
17380
+ // src/components/ui/dropdown-menu.tsx
17063
17381
  var React2 = __toESM(require("react"), 1);
17064
- var import_jsx_runtime6 = require("react/jsx-runtime");
17065
- var Table = React2.forwardRef(({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: cn("relative w-full overflow-auto", containerClassName), children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("table", { ref, className: cn("w-full caption-bottom text-sm", className), ...props }) }));
17382
+ var DropdownMenuPrimitive = __toESM(require("@radix-ui/react-dropdown-menu"), 1);
17383
+ var import_jsx_runtime7 = require("react/jsx-runtime");
17384
+ var DropdownMenu = DropdownMenuPrimitive.Root;
17385
+ var DropdownMenuTrigger = DropdownMenuPrimitive.Trigger;
17386
+ var DropdownMenuContent = React2.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(DropdownMenuPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
17387
+ DropdownMenuPrimitive.Content,
17388
+ {
17389
+ ref,
17390
+ sideOffset,
17391
+ className: cn(
17392
+ // Stacking is consumer-configurable via the `--z-popover` CSS variable (default `99999`,
17393
+ // declared in clay's generated `_theme-tokens.css` :root block). Consumers whose chat or
17394
+ // modal layer sits even higher override on their own root once:
17395
+ // :root { --z-popover: 9999999; }
17396
+ // and every clay floating surface picks the new value up via cascade. The fallback in
17397
+ // `var(...,99999)` only kicks in if the consumer also strips the clay stylesheet — which
17398
+ // they shouldn't, but the safety net costs nothing.
17399
+ "z-[var(--z-popover,99999)] min-w-[10rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",
17400
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
17401
+ "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
17402
+ className
17403
+ ),
17404
+ ...props
17405
+ }
17406
+ ) }));
17407
+ DropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName;
17408
+ var DropdownMenuItem = React2.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
17409
+ DropdownMenuPrimitive.Item,
17410
+ {
17411
+ ref,
17412
+ className: cn(
17413
+ "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors",
17414
+ "focus:bg-accent focus:text-accent-foreground",
17415
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
17416
+ "[&_svg]:size-4 [&_svg]:shrink-0",
17417
+ inset && "pl-8",
17418
+ className
17419
+ ),
17420
+ ...props
17421
+ }
17422
+ ));
17423
+ DropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName;
17424
+ var DropdownMenuSeparator = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(DropdownMenuPrimitive.Separator, { ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props }));
17425
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName;
17426
+ var DropdownMenuLabel = React2.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
17427
+ DropdownMenuPrimitive.Label,
17428
+ {
17429
+ ref,
17430
+ className: cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className),
17431
+ ...props
17432
+ }
17433
+ ));
17434
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName;
17435
+
17436
+ // src/components/artifacts/artifact-download-menu/artifact-download-menu.tsx
17437
+ var import_jsx_runtime8 = require("react/jsx-runtime");
17438
+ var DEFAULT_TRIGGER_LABEL = "Download";
17439
+ var DEFAULT_CSV_LABEL = "Download CSV";
17440
+ var DEFAULT_PNG_LABEL = "Download PNG";
17441
+ var DEFAULT_PNG_BASENAME = "artifact";
17442
+ function ArtifactDownloadMenu({
17443
+ actions,
17444
+ triggerLabel = DEFAULT_TRIGGER_LABEL
17445
+ }) {
17446
+ const { csv, png } = actions;
17447
+ const showCsv = csv !== void 0 && isSafeDownloadUrl(csv.href);
17448
+ const showPng = png !== void 0;
17449
+ const handlePngSelect = (0, import_react7.useCallback)(async () => {
17450
+ if (!png) return;
17451
+ png.onSelect?.();
17452
+ const node = png.targetRef.current;
17453
+ if (!node) return;
17454
+ const filename = `${png.filename ?? DEFAULT_PNG_BASENAME}.png`;
17455
+ try {
17456
+ const { downloadNodeAsPng: downloadNodeAsPng2 } = await Promise.resolve().then(() => (init_dom_to_image(), dom_to_image_exports));
17457
+ await downloadNodeAsPng2(node, filename);
17458
+ } catch (err) {
17459
+ console.warn("[clay] ArtifactDownloadMenu: PNG download failed", err);
17460
+ }
17461
+ }, [png]);
17462
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(DropdownMenu, { children: [
17463
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipProvider, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Tooltip, { children: [
17464
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(IconButton, { icon: IconDownload, size: "small", "aria-label": triggerLabel }) }) }),
17465
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipContent, { children: triggerLabel })
17466
+ ] }) }),
17467
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(DropdownMenuContent, { align: "end", children: [
17468
+ showCsv ? (
17469
+ // `asChild` lets Radix render the item as our anchor — the browser handles the
17470
+ // download natively and respects `Content-Disposition`. The analytics callback rides
17471
+ // on the anchor's own `onClick` (rather than Radix's `onSelect`) so the same handler
17472
+ // fires whether the user mouse-clicks the item, hits Enter on it, or activates it via
17473
+ // touch — `onSelect` is reliable only for keyboard activation when `asChild` is in use.
17474
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(DropdownMenuItem, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("a", { href: csv.href, download: true, rel: "noopener noreferrer", onClick: csv.onSelect, children: [
17475
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(IconFileSpreadsheet, {}),
17476
+ csv.label ?? DEFAULT_CSV_LABEL
17477
+ ] }) })
17478
+ ) : null,
17479
+ showPng ? /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(DropdownMenuItem, { onSelect: handlePngSelect, disabled: png.disabled ?? false, children: [
17480
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(IconPhoto, {}),
17481
+ png.label ?? DEFAULT_PNG_LABEL
17482
+ ] }) : null
17483
+ ] })
17484
+ ] });
17485
+ }
17486
+
17487
+ // src/components/artifacts/status-message.tsx
17488
+ var import_react8 = require("react");
17489
+ function StatusMessage({ $tone, children }) {
17490
+ return (0, import_react8.createElement)(
17491
+ "div",
17492
+ {
17493
+ className: `py-6 px-2 text-center text-sm font-medium leading-5 ${$tone === "error" ? "text-red-600" : "text-brown-70"}`
17494
+ },
17495
+ children
17496
+ );
17497
+ }
17498
+
17499
+ // src/components/chart/bar-chart/bar-chart.tsx
17500
+ var import_react9 = require("react");
17501
+ var import_recharts2 = require("recharts");
17502
+
17503
+ // src/components/chart/chart-container.tsx
17504
+ var import_recharts = require("recharts");
17505
+ var import_jsx_runtime9 = require("react/jsx-runtime");
17506
+ function ChartContainer({
17507
+ children,
17508
+ height: height2 = 320,
17509
+ width: width2 = "100%",
17510
+ className,
17511
+ style
17512
+ }) {
17513
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: cn("text-xs text-foreground", className), style: { width: width2, height: height2, ...style }, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_recharts.ResponsiveContainer, { width: "100%", height: "100%", children }) });
17514
+ }
17515
+
17516
+ // src/components/chart/chart-legend-content.tsx
17517
+ var import_jsx_runtime10 = require("react/jsx-runtime");
17518
+ function ChartLegendContent({ payload, className, iconType = "square" }) {
17519
+ if (!payload || payload.length === 0) return null;
17520
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
17521
+ "ul",
17522
+ {
17523
+ className: cn("flex flex-wrap items-center justify-center gap-x-4 gap-y-2 text-xs text-brown-80", className),
17524
+ children: payload.map((entry, i) => {
17525
+ const swatchColor = typeof entry.color === "string" ? entry.color : "transparent";
17526
+ const label = entry.value !== void 0 ? String(entry.value) : "";
17527
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("li", { className: "flex items-center gap-1.5", children: [
17528
+ iconType === "square" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "inline-block h-2.5 w-2.5 shrink-0 rounded-sm", style: { background: swatchColor } }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "inline-block h-[3px] w-4 shrink-0 rounded-full", style: { background: swatchColor } }),
17529
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children: label })
17530
+ ] }, `${label}-${i}`);
17531
+ })
17532
+ }
17533
+ );
17534
+ }
17535
+
17536
+ // src/components/chart/chart-tooltip-content.tsx
17537
+ var import_jsx_runtime11 = require("react/jsx-runtime");
17538
+ function ChartTooltipContent({
17539
+ active: active2,
17540
+ payload,
17541
+ label,
17542
+ className,
17543
+ showLabel = true,
17544
+ formatValue
17545
+ }) {
17546
+ if (!active2 || !payload || payload.length === 0) return null;
17547
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
17548
+ "div",
17549
+ {
17550
+ className: cn(
17551
+ "rounded-lg border border-brown-40 bg-brown-10 px-3 py-2 text-xs shadow-sm",
17552
+ "min-w-32 text-foreground",
17553
+ className
17554
+ ),
17555
+ children: [
17556
+ showLabel && label !== void 0 && label !== null ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mb-1.5 font-medium text-brown-90", children: String(label) }) : null,
17557
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("ul", { className: "space-y-1", children: payload.map((entry, i) => {
17558
+ const name2 = entry.name !== void 0 ? String(entry.name) : "";
17559
+ const rawValue = entry.value;
17560
+ const display = formatValue ? formatValue(rawValue, name2) : rawValue === void 0 ? "" : String(rawValue);
17561
+ const swatch = typeof entry.color === "string" ? entry.color : "transparent";
17562
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("li", { className: "flex items-center gap-2", children: [
17563
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "inline-block h-2.5 w-2.5 shrink-0 rounded-sm", style: { background: swatch } }),
17564
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "text-brown-70", children: name2 }),
17565
+ /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "ml-auto font-semibold tabular-nums text-brown-90", children: display })
17566
+ ] }, `${name2}-${i}`);
17567
+ }) })
17568
+ ]
17569
+ }
17570
+ );
17571
+ }
17572
+
17573
+ // src/components/chart/chart-palette.ts
17574
+ var CHART_PALETTE = [
17575
+ colors["blue-600"],
17576
+ // #2563EB — primary
17577
+ colors["blue-400"],
17578
+ // #60A5FA — mid
17579
+ colors["blue-300"],
17580
+ // #93C5FD — light
17581
+ colors["blue-100"],
17582
+ // #DBEAFE — very light
17583
+ colors["indigo-400"],
17584
+ // #818CF8
17585
+ colors["indigo-500"],
17586
+ // #6366F1
17587
+ colors["indigo-600"],
17588
+ // #4F46E5
17589
+ colors["indigo-800"],
17590
+ // #3730A3
17591
+ colors["blue-800"]
17592
+ // #1E40AF — deepest
17593
+ ];
17594
+ var OTHERS_SLICE_COLOR = colors["brown-60"];
17595
+ var DEFAULT_OTHERS_CATEGORY_LABELS = ["others", "other"];
17596
+ function isOthersCategory(value2, labels) {
17597
+ if (value2 === null || value2 === void 0) return false;
17598
+ if (labels.length === 0) return false;
17599
+ const normalized = String(value2).trim().toLowerCase();
17600
+ for (const label of labels) {
17601
+ if (normalized === label.toLowerCase()) return true;
17602
+ }
17603
+ return false;
17604
+ }
17605
+ function colorForSeriesIndex(index2, palette = CHART_PALETTE) {
17606
+ return palette[index2 % palette.length] ?? CHART_PALETTE[0];
17607
+ }
17608
+
17609
+ // src/components/chart/chart-styles.ts
17610
+ var GRID_STROKE = colors["brown-40"];
17611
+ var AXIS_STROKE = colors["brown-50"];
17612
+ var AXIS_TICK_STYLE = {
17613
+ fill: colors["brown-70"],
17614
+ fontSize: 12,
17615
+ fontWeight: 500
17616
+ };
17617
+ var CHART_VALUE_LABEL_STYLE = {
17618
+ fill: colors["brown-70"],
17619
+ fontSize: 12,
17620
+ fontWeight: 500
17621
+ };
17622
+ var BAR_TOOLTIP_CURSOR_FILL = colors["brown-alpha-12"];
17623
+ var LINE_ACTIVE_DOT_STROKE = colors["brown-10"];
17624
+ var CHART_MARGIN = { top: 8, right: 16, left: 0, bottom: 4 };
17625
+ var PIE_CHART_MARGIN = { top: 0, right: 24, left: 24, bottom: 4 };
17626
+ var CHART_AXIS_PROPS = {
17627
+ stroke: AXIS_STROKE,
17628
+ tick: AXIS_TICK_STYLE,
17629
+ tickLine: false,
17630
+ axisLine: false
17631
+ };
17632
+ var CHART_GRID_PROPS = {
17633
+ stroke: GRID_STROKE,
17634
+ strokeDasharray: "3 3",
17635
+ vertical: false
17636
+ };
17637
+
17638
+ // src/components/chart/chart-tick-utils.ts
17639
+ function maxTickCharsByCategoryCount(n) {
17640
+ if (n <= 5) return 24;
17641
+ if (n <= 8) return 14;
17642
+ if (n <= 12) return 10;
17643
+ if (n <= 16) return 7;
17644
+ return 5;
17645
+ }
17646
+ function truncateLabel(value2, maxChars) {
17647
+ const s = String(value2 ?? "");
17648
+ if (s.length <= maxChars) return s;
17649
+ return s.slice(0, Math.max(1, maxChars - 1)).trimEnd() + "\u2026";
17650
+ }
17651
+ function evenlyDistributedVisibleIndices(n, target) {
17652
+ if (n <= target) {
17653
+ return new Set(Array.from({ length: n }, (_, i) => i));
17654
+ }
17655
+ const set = /* @__PURE__ */ new Set();
17656
+ const step = (n - 1) / (target - 1);
17657
+ for (let i = 0; i < target; i++) {
17658
+ set.add(Math.round(i * step));
17659
+ }
17660
+ return set;
17661
+ }
17662
+ function defaultBarTickFormatter(categoryCount) {
17663
+ const max = maxTickCharsByCategoryCount(categoryCount);
17664
+ return (value2) => truncateLabel(value2, max);
17665
+ }
17666
+ function defaultLineChartTickFormatter(categoryCount, visibleIndices) {
17667
+ const max = maxTickCharsByCategoryCount(visibleIndices.size || categoryCount);
17668
+ return (value2, index2) => {
17669
+ if (!visibleIndices.has(index2)) return "";
17670
+ return truncateLabel(value2, max);
17671
+ };
17672
+ }
17673
+
17674
+ // src/components/chart/coerce-numeric.ts
17675
+ function coerceNumericColumns(rows, numericKeys) {
17676
+ return rows.map((row) => {
17677
+ const out = { ...row };
17678
+ for (const k of numericKeys) {
17679
+ const v = out[k];
17680
+ if (v == null) continue;
17681
+ const n = Number(v);
17682
+ out[k] = Number.isFinite(n) ? n : NaN;
17683
+ }
17684
+ return out;
17685
+ });
17686
+ }
17687
+
17688
+ // src/components/chart/bar-chart/bar-chart.tsx
17689
+ var import_jsx_runtime12 = require("react/jsx-runtime");
17690
+ function BarChart({
17691
+ data: data2,
17692
+ xKey,
17693
+ series,
17694
+ stacked = false,
17695
+ height: height2 = 320,
17696
+ width: width2 = "100%",
17697
+ className,
17698
+ palette = CHART_PALETTE,
17699
+ showTooltip = true,
17700
+ showLegend,
17701
+ showGrid = true,
17702
+ showXAxis = true,
17703
+ showYAxis = true,
17704
+ showValueLabels,
17705
+ xAxisInterval = 0,
17706
+ xAxisAngle,
17707
+ xAxisTickFormatter
17708
+ }) {
17709
+ const seriesKeys = (0, import_react9.useMemo)(() => series.map((s) => s.key), [series]);
17710
+ const coercedData = (0, import_react9.useMemo)(
17711
+ () => coerceNumericColumns(data2, seriesKeys),
17712
+ [data2, seriesKeys]
17713
+ );
17714
+ const resolvedShowLegend = showLegend ?? series.length > 1;
17715
+ const resolvedShowValueLabels = showValueLabels ?? (!stacked && series.length === 1);
17716
+ const resolvedAngle = xAxisAngle ?? (coercedData.length >= 8 ? -30 : 0);
17717
+ const resolvedTickFormatter = (0, import_react9.useMemo)(
17718
+ () => xAxisTickFormatter ?? defaultBarTickFormatter(coercedData.length),
17719
+ [xAxisTickFormatter, coercedData.length]
17720
+ );
17721
+ const angledLabelPad = resolvedAngle === 0 ? 0 : Math.min(Math.abs(resolvedAngle) * 0.7, 40);
17722
+ const chartMargin = { ...CHART_MARGIN, bottom: CHART_MARGIN.bottom + angledLabelPad };
17723
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ChartContainer, { height: height2, width: width2, className, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_recharts2.BarChart, { data: coercedData, margin: chartMargin, barCategoryGap: "22%", children: [
17724
+ showGrid ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_recharts2.CartesianGrid, { ...CHART_GRID_PROPS }) : null,
17725
+ showXAxis ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
17726
+ import_recharts2.XAxis,
17727
+ {
17728
+ dataKey: xKey,
17729
+ ...CHART_AXIS_PROPS,
17730
+ interval: xAxisInterval,
17731
+ angle: resolvedAngle,
17732
+ textAnchor: resolvedAngle !== 0 ? "end" : "middle",
17733
+ tickMargin: resolvedAngle === 0 ? 8 : 12,
17734
+ height: resolvedAngle !== 0 ? 60 : void 0,
17735
+ tickFormatter: resolvedTickFormatter
17736
+ }
17737
+ ) : null,
17738
+ showYAxis ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_recharts2.YAxis, { ...CHART_AXIS_PROPS, width: 40 }) : null,
17739
+ showTooltip ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_recharts2.Tooltip, { cursor: { fill: BAR_TOOLTIP_CURSOR_FILL }, content: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ChartTooltipContent, {}) }) : null,
17740
+ resolvedShowLegend ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
17741
+ import_recharts2.Legend,
17742
+ {
17743
+ verticalAlign: "top",
17744
+ align: "center",
17745
+ wrapperStyle: { top: 0 },
17746
+ itemSorter: null,
17747
+ content: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(ChartLegendContent, { iconType: "square" })
17748
+ }
17749
+ ) : null,
17750
+ series.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
17751
+ import_recharts2.Bar,
17752
+ {
17753
+ dataKey: s.key,
17754
+ name: s.label,
17755
+ fill: colorForSeriesIndex(i, palette),
17756
+ stackId: stacked ? "default" : s.key,
17757
+ radius: barRadius(stacked, i, series.length),
17758
+ children: resolvedShowValueLabels ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_recharts2.LabelList, { dataKey: s.key, position: "top", style: CHART_VALUE_LABEL_STYLE }) : null
17759
+ },
17760
+ s.key
17761
+ ))
17762
+ ] }) });
17763
+ }
17764
+ function barRadius(stacked, seriesIndex, seriesCount) {
17765
+ if (!stacked) return [6, 6, 0, 0];
17766
+ const isTopSegment = seriesIndex === seriesCount - 1;
17767
+ return isTopSegment ? [6, 6, 0, 0] : [0, 0, 0, 0];
17768
+ }
17769
+
17770
+ // src/components/artifacts/chart-artifact/chart-variant-services/constants.ts
17771
+ var VARIANT_CHART_HEIGHT = "100%";
17772
+
17773
+ // src/components/artifacts/chart-artifact/chart-variant-services/bar-chart-variant-component.tsx
17774
+ var import_jsx_runtime13 = require("react/jsx-runtime");
17775
+ function BarChartVariantComponent({ config, rows }) {
17776
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
17777
+ BarChart,
17778
+ {
17779
+ data: rows,
17780
+ xKey: config.xKey,
17781
+ series: config.series,
17782
+ stacked: config.stacked,
17783
+ height: VARIANT_CHART_HEIGHT
17784
+ }
17785
+ );
17786
+ }
17787
+
17788
+ // src/components/artifacts/chart-artifact/chart-variant-services/shared-column-keys.ts
17789
+ function seriesBasedColumnKeys(config) {
17790
+ return [config.xKey, ...config.series.map((s) => s.key)];
17791
+ }
17792
+ function pieColumnKeys(config) {
17793
+ return [config.categoryKey, config.valueKey];
17794
+ }
17795
+
17796
+ // src/components/artifacts/chart-artifact/chart-variant-services/shared-validators.ts
17797
+ function isValidChartSeries(series) {
17798
+ if (!series || typeof series !== "object") return false;
17799
+ const candidate = series;
17800
+ if (typeof candidate.key !== "string" || candidate.key.length === 0) return false;
17801
+ if (typeof candidate.label !== "string") return false;
17802
+ return true;
17803
+ }
17804
+
17805
+ // src/components/artifacts/chart-artifact/chart-variant-services/bar-chart-variant-service.tsx
17806
+ function isValidBarChartConfig(config) {
17807
+ if (!config || typeof config !== "object") return false;
17808
+ const candidate = config;
17809
+ if (candidate.variant !== "BAR") return false;
17810
+ if (typeof candidate.xKey !== "string" || candidate.xKey.length === 0) return false;
17811
+ if (!Array.isArray(candidate.series) || candidate.series.length === 0) return false;
17812
+ if (!candidate.series.every(isValidChartSeries)) return false;
17813
+ return true;
17814
+ }
17815
+ var BarChartVariantService = {
17816
+ variant: "BAR",
17817
+ isValidConfig: isValidBarChartConfig,
17818
+ columnKeys: seriesBasedColumnKeys,
17819
+ Component: BarChartVariantComponent
17820
+ };
17821
+
17822
+ // src/components/chart/line-chart/line-chart.tsx
17823
+ var import_react10 = require("react");
17824
+ var import_recharts3 = require("recharts");
17825
+ var import_jsx_runtime14 = require("react/jsx-runtime");
17826
+ var TARGET_VISIBLE_LABELS = 5;
17827
+ function LineChart({
17828
+ data: data2,
17829
+ xKey,
17830
+ series,
17831
+ smooth: smooth2 = true,
17832
+ showDots = true,
17833
+ strokeWidth = 2,
17834
+ height: height2 = 320,
17835
+ width: width2 = "100%",
17836
+ className,
17837
+ palette = CHART_PALETTE,
17838
+ showTooltip = true,
17839
+ showLegend,
17840
+ showGrid = true,
17841
+ showXAxis = true,
17842
+ showYAxis = true,
17843
+ showValueLabels = false,
17844
+ xAxisInterval = 0,
17845
+ xAxisAngle = 0,
17846
+ xAxisTickFormatter
17847
+ }) {
17848
+ const seriesKeys = (0, import_react10.useMemo)(() => series.map((s) => s.key), [series]);
17849
+ const coercedData = (0, import_react10.useMemo)(
17850
+ () => coerceNumericColumns(data2, seriesKeys),
17851
+ [data2, seriesKeys]
17852
+ );
17853
+ const lineType = smooth2 ? "monotone" : "linear";
17854
+ const resolvedShowLegend = showLegend ?? series.length > 1;
17855
+ const resolvedTickFormatter = (0, import_react10.useMemo)(() => {
17856
+ if (xAxisTickFormatter) return xAxisTickFormatter;
17857
+ const visible = evenlyDistributedVisibleIndices(coercedData.length, TARGET_VISIBLE_LABELS);
17858
+ return defaultLineChartTickFormatter(coercedData.length, visible);
17859
+ }, [xAxisTickFormatter, coercedData.length]);
17860
+ const angledLabelPad = xAxisAngle === 0 ? 0 : Math.min(Math.abs(xAxisAngle) * 0.7, 40);
17861
+ const chartMargin = { ...CHART_MARGIN, right: CHART_MARGIN.right + 16, bottom: CHART_MARGIN.bottom + angledLabelPad };
17862
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ChartContainer, { height: height2, width: width2, className, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_recharts3.LineChart, { data: coercedData, margin: chartMargin, children: [
17863
+ showGrid ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_recharts3.CartesianGrid, { ...CHART_GRID_PROPS }) : null,
17864
+ showXAxis ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
17865
+ import_recharts3.XAxis,
17866
+ {
17867
+ dataKey: xKey,
17868
+ ...CHART_AXIS_PROPS,
17869
+ interval: xAxisInterval,
17870
+ angle: xAxisAngle,
17871
+ textAnchor: xAxisAngle !== 0 ? "end" : "middle",
17872
+ tickMargin: xAxisAngle === 0 ? 8 : 12,
17873
+ height: xAxisAngle !== 0 ? 60 : void 0,
17874
+ tickFormatter: resolvedTickFormatter
17875
+ }
17876
+ ) : null,
17877
+ showYAxis ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_recharts3.YAxis, { ...CHART_AXIS_PROPS, width: 40 }) : null,
17878
+ showTooltip ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_recharts3.Tooltip, { content: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ChartTooltipContent, {}) }) : null,
17879
+ resolvedShowLegend ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
17880
+ import_recharts3.Legend,
17881
+ {
17882
+ verticalAlign: "top",
17883
+ align: "center",
17884
+ wrapperStyle: { top: 0 },
17885
+ itemSorter: null,
17886
+ content: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(ChartLegendContent, { iconType: "line" })
17887
+ }
17888
+ ) : null,
17889
+ series.map((s, i) => {
17890
+ const color = colorForSeriesIndex(i, palette);
17891
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
17892
+ import_recharts3.Line,
17893
+ {
17894
+ type: lineType,
17895
+ dataKey: s.key,
17896
+ name: s.label,
17897
+ stroke: color,
17898
+ strokeWidth,
17899
+ dot: showDots ? { r: 3, fill: color, stroke: color, strokeWidth: 0 } : false,
17900
+ activeDot: { r: 5, fill: color, stroke: LINE_ACTIVE_DOT_STROKE, strokeWidth: 2 },
17901
+ children: showValueLabels ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_recharts3.LabelList, { dataKey: s.key, position: "top", style: CHART_VALUE_LABEL_STYLE }) : null
17902
+ },
17903
+ s.key
17904
+ );
17905
+ })
17906
+ ] }) });
17907
+ }
17908
+
17909
+ // src/components/artifacts/chart-artifact/chart-variant-services/line-chart-variant-component.tsx
17910
+ var import_jsx_runtime15 = require("react/jsx-runtime");
17911
+ function LineChartVariantComponent({ config, rows }) {
17912
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(LineChart, { data: rows, xKey: config.xKey, series: config.series, height: VARIANT_CHART_HEIGHT });
17913
+ }
17914
+
17915
+ // src/components/artifacts/chart-artifact/chart-variant-services/line-chart-variant-service.tsx
17916
+ function isValidLineChartConfig(config) {
17917
+ if (!config || typeof config !== "object") return false;
17918
+ const candidate = config;
17919
+ if (candidate.variant !== "LINE") return false;
17920
+ if (typeof candidate.xKey !== "string" || candidate.xKey.length === 0) return false;
17921
+ if (!Array.isArray(candidate.series) || candidate.series.length === 0) return false;
17922
+ if (!candidate.series.every(isValidChartSeries)) return false;
17923
+ return true;
17924
+ }
17925
+ var LineChartVariantService = {
17926
+ variant: "LINE",
17927
+ isValidConfig: isValidLineChartConfig,
17928
+ columnKeys: seriesBasedColumnKeys,
17929
+ Component: LineChartVariantComponent
17930
+ };
17931
+
17932
+ // src/components/chart/pie-chart/pie-chart.tsx
17933
+ var import_react11 = require("react");
17934
+ var import_recharts4 = require("recharts");
17935
+ var import_jsx_runtime16 = require("react/jsx-runtime");
17936
+ function PieChart({
17937
+ data: data2,
17938
+ categoryKey,
17939
+ valueKey,
17940
+ height: height2 = 320,
17941
+ width: width2 = "100%",
17942
+ className,
17943
+ palette = CHART_PALETTE,
17944
+ showLabels = true,
17945
+ showTooltip = true,
17946
+ showLegend = true,
17947
+ innerRadius = 0,
17948
+ outerRadius = "68%",
17949
+ othersCategoryLabels = DEFAULT_OTHERS_CATEGORY_LABELS
17950
+ }) {
17951
+ const { orderedData, sliceColors } = (0, import_react11.useMemo)(() => {
17952
+ const coerced = coerceNumericColumns(data2, [valueKey]);
17953
+ const namedRows = [];
17954
+ const namedColors = [];
17955
+ const othersRows = [];
17956
+ const othersColors = [];
17957
+ for (const row of coerced) {
17958
+ if (isOthersCategory(row[categoryKey], othersCategoryLabels)) {
17959
+ othersRows.push(row);
17960
+ othersColors.push(OTHERS_SLICE_COLOR);
17961
+ } else {
17962
+ namedRows.push(row);
17963
+ namedColors.push(colorForSeriesIndex(namedRows.length - 1, palette));
17964
+ }
17965
+ }
17966
+ return {
17967
+ orderedData: [...namedRows, ...othersRows],
17968
+ sliceColors: [...namedColors, ...othersColors]
17969
+ };
17970
+ }, [data2, valueKey, categoryKey, othersCategoryLabels, palette]);
17971
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ChartContainer, { height: height2, width: width2, className, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_recharts4.PieChart, { margin: PIE_CHART_MARGIN, children: [
17972
+ showTooltip ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_recharts4.Tooltip, { content: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ChartTooltipContent, {}) }) : null,
17973
+ showLegend ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
17974
+ import_recharts4.Legend,
17975
+ {
17976
+ verticalAlign: "top",
17977
+ align: "center",
17978
+ wrapperStyle: { top: 0 },
17979
+ itemSorter: null,
17980
+ content: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ChartLegendContent, { iconType: "square" })
17981
+ }
17982
+ ) : null,
17983
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
17984
+ import_recharts4.Pie,
17985
+ {
17986
+ data: orderedData,
17987
+ dataKey: valueKey,
17988
+ nameKey: categoryKey,
17989
+ cx: "50%",
17990
+ cy: "52%",
17991
+ startAngle: 90,
17992
+ endAngle: -270,
17993
+ innerRadius,
17994
+ outerRadius,
17995
+ label: showLabels ? (entry) => {
17996
+ const v = entry.value;
17997
+ if (v === void 0 || v === null) return null;
17998
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
17999
+ "text",
18000
+ {
18001
+ x: entry.x,
18002
+ y: entry.y,
18003
+ fill: CHART_VALUE_LABEL_STYLE.fill,
18004
+ fontSize: CHART_VALUE_LABEL_STYLE.fontSize,
18005
+ fontWeight: CHART_VALUE_LABEL_STYLE.fontWeight,
18006
+ textAnchor: entry.textAnchor,
18007
+ dominantBaseline: "central",
18008
+ children: String(v)
18009
+ }
18010
+ );
18011
+ } : false,
18012
+ labelLine: false,
18013
+ stroke: "none",
18014
+ strokeWidth: 0,
18015
+ children: orderedData.map((_row, i) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_recharts4.Cell, { fill: sliceColors[i] }, i))
18016
+ }
18017
+ )
18018
+ ] }) });
18019
+ }
18020
+
18021
+ // src/components/artifacts/chart-artifact/chart-variant-services/pie-chart-variant-component.tsx
18022
+ var import_jsx_runtime17 = require("react/jsx-runtime");
18023
+ function PieChartVariantComponent({
18024
+ config,
18025
+ rows,
18026
+ labels
18027
+ }) {
18028
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
18029
+ PieChart,
18030
+ {
18031
+ data: rows,
18032
+ categoryKey: config.categoryKey,
18033
+ valueKey: config.valueKey,
18034
+ othersCategoryLabels: labels.othersCategoryLabels,
18035
+ height: VARIANT_CHART_HEIGHT
18036
+ }
18037
+ );
18038
+ }
18039
+
18040
+ // src/components/artifacts/chart-artifact/chart-variant-services/pie-chart-variant-service.tsx
18041
+ function isValidPieChartConfig(config) {
18042
+ if (!config || typeof config !== "object") return false;
18043
+ const candidate = config;
18044
+ if (candidate.variant !== "PIE") return false;
18045
+ if (typeof candidate.categoryKey !== "string" || candidate.categoryKey.length === 0) return false;
18046
+ if (typeof candidate.valueKey !== "string" || candidate.valueKey.length === 0) return false;
18047
+ if (!Array.isArray(candidate.series)) return false;
18048
+ return true;
18049
+ }
18050
+ var PieChartVariantService = {
18051
+ variant: "PIE",
18052
+ isValidConfig: isValidPieChartConfig,
18053
+ columnKeys: pieColumnKeys,
18054
+ Component: PieChartVariantComponent
18055
+ };
18056
+
18057
+ // src/components/artifacts/chart-artifact/chart-variant-services/index.ts
18058
+ var ChartVariantServices = {
18059
+ LINE: LineChartVariantService,
18060
+ BAR: BarChartVariantService,
18061
+ PIE: PieChartVariantService
18062
+ };
18063
+
18064
+ // src/components/artifacts/chart-artifact/chart-artifact-content.tsx
18065
+ var import_jsx_runtime18 = require("react/jsx-runtime");
18066
+ function ChartArtifactContent({ config, rows, labels }) {
18067
+ const service = ChartVariantServices[config.variant];
18068
+ if (!service) {
18069
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(StatusMessage, { $tone: "info", children: labels.unavailable });
18070
+ }
18071
+ const Component = service.Component;
18072
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Component, { config, rows, labels });
18073
+ }
18074
+
18075
+ // src/components/artifacts/parse-csv.ts
18076
+ var import_papaparse = __toESM(require("papaparse"), 1);
18077
+ function parseCsv(text2, columns) {
18078
+ const result = import_papaparse.default.parse(text2, {
18079
+ header: true,
18080
+ skipEmptyLines: true,
18081
+ dynamicTyping: false
18082
+ });
18083
+ const csvHeaders = new Set(result.meta?.fields ?? []);
18084
+ const presentColumns = columns.filter((col) => csvHeaders.has(col.key));
18085
+ if (presentColumns.length === 0) return [];
18086
+ return result.data.map((rawRow) => {
18087
+ const row = {};
18088
+ for (const column of presentColumns) {
18089
+ const value2 = rawRow[column.key];
18090
+ row[column.key] = value2 === void 0 || value2 === "" ? null : value2;
18091
+ }
18092
+ return row;
18093
+ });
18094
+ }
18095
+
18096
+ // src/components/artifacts/use-rows-artifact-data.ts
18097
+ var import_react12 = require("react");
18098
+ var LOADING = { status: "loading", rows: null, error: null };
18099
+ var UNAVAILABLE = { status: "unavailable", rows: null, error: null };
18100
+ var INITIAL_INTERNAL = { cacheKey: null, data: LOADING };
18101
+ function columnsFingerprint(columns) {
18102
+ return columns.map((c) => c.key).join("|");
18103
+ }
18104
+ function scrubUrl(url) {
18105
+ const q = url.indexOf("?");
18106
+ return q === -1 ? url : `${url.slice(0, q)}?<redacted>`;
18107
+ }
18108
+ function useRowsArtifactData(presignedUrl, columns, parse) {
18109
+ const colsKey = (0, import_react12.useMemo)(() => columnsFingerprint(columns), [columns]);
18110
+ const safeUrl = presignedUrl && isSafeDownloadUrl(presignedUrl) ? presignedUrl : null;
18111
+ const cacheKey = safeUrl ? `${safeUrl}::${colsKey}` : null;
18112
+ const [state, setState] = (0, import_react12.useState)(INITIAL_INTERNAL);
18113
+ (0, import_react12.useEffect)(() => {
18114
+ if (!safeUrl) return;
18115
+ const controller = new AbortController();
18116
+ fetch(safeUrl, {
18117
+ signal: controller.signal,
18118
+ headers: { Accept: "text/csv" },
18119
+ // Presigned URLs are cross-origin S3 in production and don't need credentials. Explicit
18120
+ // omit so a same-origin URL (compromised payload, local dev) can't accidentally receive
18121
+ // session cookies or auth headers.
18122
+ credentials: "omit"
18123
+ }).then(async (response) => {
18124
+ if (!response.ok) throw new Error(`Failed to load artifact data (${response.status})`);
18125
+ return response.text();
18126
+ }).then((text2) => {
18127
+ if (controller.signal.aborted) return;
18128
+ try {
18129
+ const rows = parse(text2, columns);
18130
+ setState({ cacheKey: `${safeUrl}::${colsKey}`, data: { status: "ready", rows, error: null } });
18131
+ } catch (parseError) {
18132
+ const err = parseError instanceof Error ? parseError : new Error(String(parseError));
18133
+ console.error("[ArtifactData] CSV parse failed:", err.message);
18134
+ setState({ cacheKey: `${safeUrl}::${colsKey}`, data: { status: "error", rows: null, error: err } });
18135
+ }
18136
+ }).catch((error) => {
18137
+ if (controller.signal.aborted) return;
18138
+ const err = error instanceof Error ? error : new Error(String(error));
18139
+ console.error(`[ArtifactData] Fetch failed [${scrubUrl(safeUrl)}]:`, err.message);
18140
+ setState({ cacheKey: `${safeUrl}::${colsKey}`, data: { status: "error", rows: null, error: err } });
18141
+ });
18142
+ return () => {
18143
+ controller.abort();
18144
+ };
18145
+ }, [safeUrl, colsKey]);
18146
+ if (!safeUrl) return UNAVAILABLE;
18147
+ if (state.cacheKey !== cacheKey) return LOADING;
18148
+ return state.data;
18149
+ }
18150
+
18151
+ // src/components/artifacts/chart-artifact/use-chart-artifact-data.ts
18152
+ function useChartArtifactData(presignedUrl, config) {
18153
+ const service = ChartVariantServices[config.variant];
18154
+ const keys = service ? service.columnKeys(config) : [];
18155
+ const columns = keys.map((key2) => ({ key: key2 }));
18156
+ return useRowsArtifactData(presignedUrl, columns, parseCsv);
18157
+ }
18158
+
18159
+ // src/components/artifacts/chart-artifact/validate.ts
18160
+ function isValidChartConfig(config) {
18161
+ if (!config || typeof config !== "object") return false;
18162
+ const variant = config.variant;
18163
+ if (typeof variant !== "string") return false;
18164
+ const service = ChartVariantServices[variant];
18165
+ if (!service) return false;
18166
+ return service.isValidConfig(config);
18167
+ }
18168
+
18169
+ // src/components/artifacts/chart-artifact/chart-artifact.tsx
18170
+ var import_jsx_runtime19 = require("react/jsx-runtime");
18171
+ var TITLE_CLASSES = "text-sm font-semibold text-foreground";
18172
+ var CHART_HEIGHT = 320;
18173
+ function ChartArtifact({ artifact, labels, callbacks }) {
18174
+ const validConfig = isValidChartConfig(artifact.config);
18175
+ const cardRef = (0, import_react13.useRef)(null);
18176
+ (0, import_react13.useEffect)(() => {
18177
+ if (validConfig) return;
18178
+ console.warn("[clay] ChartArtifact: malformed `config` \u2014 skipping render.");
18179
+ }, [validConfig]);
18180
+ const presignedUrl = artifact.protectedAsset?.presignedUrl ?? null;
18181
+ const resolvedLabels = (0, import_react13.useMemo)(
18182
+ () => ({ ...DEFAULT_CHART_ARTIFACT_LABELS, ...labels ?? {} }),
18183
+ [labels]
18184
+ );
18185
+ const data2 = useChartArtifactData(
18186
+ validConfig ? presignedUrl : null,
18187
+ validConfig ? artifact.config : { variant: "LINE", series: [], xKey: "x" }
18188
+ );
18189
+ const { onDownload, onDownloadPng, onCopyAsImage } = callbacks ?? {};
18190
+ const handleDownloadCsvSelect = onDownload ? () => onDownload(artifact) : void 0;
18191
+ const handleDownloadPngSelect = onDownloadPng ? () => onDownloadPng(artifact) : void 0;
18192
+ const handleCopyAsImageClick = onCopyAsImage ? () => onCopyAsImage(artifact) : void 0;
18193
+ const canCopyAsImage = data2.status === "ready" && data2.rows.length > 0;
18194
+ const canDownloadPng = data2.status === "ready" && data2.rows.length > 0;
18195
+ const isCsvDownloadAvailable = presignedUrl !== null && isSafeDownloadUrl(presignedUrl);
18196
+ const showDownloadMenu = validConfig && canDownloadPng || isCsvDownloadAvailable;
18197
+ const showActions = validConfig || showDownloadMenu;
18198
+ const pngFilename = (artifact.title ?? "").toLowerCase().split(/[^a-z0-9]+/).filter(Boolean).join("-") || "chart";
18199
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(Artifact, { ref: cardRef, className: "shadow-none w-full rounded-2xl bg-background/70", children: [
18200
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
18201
+ artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ArtifactTitle, { className: TITLE_CLASSES, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", {}),
18202
+ showActions ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(ArtifactActions, { ...{ [CAPTURE_EXCLUDE_ATTRIBUTE]: "" }, children: [
18203
+ validConfig ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18204
+ ArtifactCopyAsImageButton,
18205
+ {
18206
+ targetRef: cardRef,
18207
+ label: resolvedLabels.copyAsImage,
18208
+ disabled: !canCopyAsImage,
18209
+ onClick: handleCopyAsImageClick
18210
+ }
18211
+ ) : null,
18212
+ showDownloadMenu ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18213
+ ArtifactDownloadMenu,
18214
+ {
18215
+ triggerLabel: resolvedLabels.download,
18216
+ actions: {
18217
+ csv: isCsvDownloadAvailable ? {
18218
+ href: presignedUrl ?? "",
18219
+ label: resolvedLabels.downloadCsv,
18220
+ onSelect: handleDownloadCsvSelect
18221
+ } : void 0,
18222
+ png: validConfig ? {
18223
+ targetRef: cardRef,
18224
+ filename: pngFilename,
18225
+ label: resolvedLabels.downloadPng,
18226
+ disabled: !canDownloadPng,
18227
+ onSelect: handleDownloadPngSelect
18228
+ } : void 0
18229
+ }
18230
+ }
18231
+ ) : null
18232
+ ] }) : null
18233
+ ] }),
18234
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
18235
+ ArtifactContent,
18236
+ {
18237
+ className: "p-4 overflow-visible flex flex-none items-center justify-center",
18238
+ style: { height: CHART_HEIGHT },
18239
+ children: renderBody(validConfig, artifact, data2, resolvedLabels)
18240
+ }
18241
+ )
18242
+ ] });
18243
+ }
18244
+ function renderBody(validConfig, artifact, data2, labels) {
18245
+ if (!validConfig) {
18246
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(StatusMessage, { $tone: "info", children: labels.unavailable });
18247
+ }
18248
+ if (data2.status === "error") {
18249
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(StatusMessage, { $tone: "error", children: labels.loadError });
18250
+ }
18251
+ if (data2.status === "unavailable") {
18252
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(StatusMessage, { $tone: "info", children: labels.unavailable });
18253
+ }
18254
+ if (data2.status === "loading") {
18255
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(StatusMessage, { $tone: "info", children: labels.loading });
18256
+ }
18257
+ if (data2.rows.length === 0) {
18258
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(StatusMessage, { $tone: "info", children: labels.empty });
18259
+ }
18260
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ChartArtifactContent, { config: artifact.config, rows: data2.rows, labels });
18261
+ }
18262
+
18263
+ // src/components/artifacts/chart-artifact/to-clipboard-text.ts
18264
+ function chartArtifactToClipboardText(artifact) {
18265
+ const trimmedTitle = artifact.title?.trim();
18266
+ return trimmedTitle || "Chart";
18267
+ }
18268
+
18269
+ // src/components/artifacts/artifact-services/chart-artifact-service.ts
18270
+ var ChartArtifactService = {
18271
+ type: artifactTypes.CHART,
18272
+ Component: ChartArtifact,
18273
+ toClipboardText: chartArtifactToClipboardText
18274
+ };
18275
+
18276
+ // src/components/artifacts/table-artifact/table-artifact.tsx
18277
+ var import_react15 = require("react");
18278
+
18279
+ // src/components/ui/table.tsx
18280
+ var React3 = __toESM(require("react"), 1);
18281
+ var import_jsx_runtime20 = require("react/jsx-runtime");
18282
+ var Table = React3.forwardRef(({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: cn("relative w-full overflow-auto", containerClassName), children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("table", { ref, className: cn("w-full caption-bottom text-sm", className), ...props }) }));
17066
18283
  Table.displayName = "Table";
17067
- var TableHeader = React2.forwardRef(
17068
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
18284
+ var TableHeader = React3.forwardRef(
18285
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
17069
18286
  );
17070
18287
  TableHeader.displayName = "TableHeader";
17071
- var TableBody = React2.forwardRef(
17072
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props })
18288
+ var TableBody = React3.forwardRef(
18289
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props })
17073
18290
  );
17074
18291
  TableBody.displayName = "TableBody";
17075
- var TableFooter = React2.forwardRef(
17076
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("tfoot", { ref, className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className), ...props })
18292
+ var TableFooter = React3.forwardRef(
18293
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("tfoot", { ref, className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className), ...props })
17077
18294
  );
17078
18295
  TableFooter.displayName = "TableFooter";
17079
- var TableRow = React2.forwardRef(
17080
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
18296
+ var TableRow = React3.forwardRef(
18297
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
17081
18298
  "tr",
17082
18299
  {
17083
18300
  ref,
@@ -17087,8 +18304,8 @@ var TableRow = React2.forwardRef(
17087
18304
  )
17088
18305
  );
17089
18306
  TableRow.displayName = "TableRow";
17090
- var TableHead = React2.forwardRef(
17091
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
18307
+ var TableHead = React3.forwardRef(
18308
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
17092
18309
  "th",
17093
18310
  {
17094
18311
  ref,
@@ -17101,21 +18318,21 @@ var TableHead = React2.forwardRef(
17101
18318
  )
17102
18319
  );
17103
18320
  TableHead.displayName = "TableHead";
17104
- var TableCell = React2.forwardRef(
17105
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("td", { ref, className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className), ...props })
18321
+ var TableCell = React3.forwardRef(
18322
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("td", { ref, className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className), ...props })
17106
18323
  );
17107
18324
  TableCell.displayName = "TableCell";
17108
- var TableCaption = React2.forwardRef(
17109
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props })
18325
+ var TableCaption = React3.forwardRef(
18326
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props })
17110
18327
  );
17111
18328
  TableCaption.displayName = "TableCaption";
17112
18329
 
17113
18330
  // src/components/table/use-scroll-shadow.ts
17114
- var import_react4 = require("react");
18331
+ var import_react14 = require("react");
17115
18332
  function useScrollShadow() {
17116
- const targetRef = (0, import_react4.useRef)(null);
17117
- const [isScrolled, setIsScrolled] = (0, import_react4.useState)(false);
17118
- (0, import_react4.useEffect)(() => {
18333
+ const targetRef = (0, import_react14.useRef)(null);
18334
+ const [isScrolled, setIsScrolled] = (0, import_react14.useState)(false);
18335
+ (0, import_react14.useEffect)(() => {
17119
18336
  const target = targetRef.current;
17120
18337
  if (!target) return;
17121
18338
  let scrollContainer = target;
@@ -17136,18 +18353,6 @@ function useScrollShadow() {
17136
18353
  return { targetRef, isScrolled };
17137
18354
  }
17138
18355
 
17139
- // src/components/artifacts/table-artifact/table-artifact-styles.ts
17140
- var import_react5 = require("react");
17141
- function StatusMessage({ $tone, children }) {
17142
- return (0, import_react5.createElement)(
17143
- "div",
17144
- {
17145
- className: `py-6 px-2 text-center text-sm font-medium leading-5 ${$tone === "error" ? "text-red-600" : "text-brown-70"}`
17146
- },
17147
- children
17148
- );
17149
- }
17150
-
17151
18356
  // src/components/artifacts/table-artifact/table-artifact-content.constants.ts
17152
18357
  var TABLE_STATUS = {
17153
18358
  LOADING: "loading",
@@ -17167,125 +18372,58 @@ var DATA_ROW_CLASSES = `${ROW_CLASSES} animate-in fade-in duration-300`;
17167
18372
  var SCROLL_SHADOW = "0 1px 2px rgb(0 0 0 / 0.01), 0 6px 12px -2px rgb(0 0 0 / 0.03)";
17168
18373
 
17169
18374
  // src/components/artifacts/table-artifact/table-artifact-content.tsx
17170
- var import_jsx_runtime7 = require("react/jsx-runtime");
18375
+ var import_jsx_runtime21 = require("react/jsx-runtime");
17171
18376
  function TableArtifactContent({
17172
18377
  columns,
17173
18378
  data: data2,
17174
18379
  knownRowCount,
17175
18380
  maxShimmerRows,
17176
18381
  maxBodyHeight,
17177
- unavailableMessage
18382
+ labels
17178
18383
  }) {
17179
18384
  if (data2.status === TABLE_STATUS.ERROR) {
17180
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(StatusMessage, { $tone: "error", children: "Couldn't load table data." });
18385
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StatusMessage, { $tone: "error", children: labels.loadError });
17181
18386
  }
17182
18387
  if (data2.status === TABLE_STATUS.UNAVAILABLE) {
17183
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(StatusMessage, { $tone: "info", children: unavailableMessage });
18388
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StatusMessage, { $tone: "info", children: labels.unavailable });
17184
18389
  }
17185
18390
  if (data2.status === TABLE_STATUS.LOADING) {
17186
18391
  if (typeof knownRowCount === "number" && knownRowCount > 0) {
17187
18392
  const shimmerCount = Math.min(knownRowCount, maxShimmerRows);
17188
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ArtifactTable, { columns, maxBodyHeight, children: renderShimmerRows(columns, shimmerCount) });
18393
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ArtifactTable, { columns, maxBodyHeight, children: renderShimmerRows(columns, shimmerCount) });
17189
18394
  }
17190
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(StatusMessage, { $tone: "info", children: "Loading table\u2026" });
18395
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StatusMessage, { $tone: "info", children: labels.loading });
17191
18396
  }
17192
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ArtifactTable, { columns, maxBodyHeight, children: data2.rows.length === 0 ? renderEmptyRow(columns.length) : renderDataRows(columns, data2.rows) });
18397
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ArtifactTable, { columns, maxBodyHeight, children: data2.rows.length === 0 ? renderEmptyRow(columns.length, labels.empty) : renderDataRows(columns, data2.rows) });
17193
18398
  }
17194
18399
  function ArtifactTable({ columns, maxBodyHeight, children }) {
17195
18400
  const { targetRef, isScrolled } = useScrollShadow();
17196
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { ref: targetRef, className: "overscroll-none", style: { maxHeight: maxBodyHeight, overflowY: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(Table, { containerClassName: "overflow-visible", children: [
17197
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
18401
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { ref: targetRef, className: "overscroll-none", style: { maxHeight: maxBodyHeight, overflowY: "auto" }, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(Table, { containerClassName: "overflow-visible", children: [
18402
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
17198
18403
  TableHeader,
17199
18404
  {
17200
18405
  "data-scrolled": isScrolled ? "true" : void 0,
17201
18406
  className: "sticky top-0 z-10 bg-background/70 backdrop-blur-lg transition-shadow",
17202
18407
  style: isScrolled ? { boxShadow: SCROLL_SHADOW } : void 0,
17203
- children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TableRow, { className: "hover:bg-transparent", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TableHead, { scope: "col", className: HEAD_CLASS, children: column.label }, column.key)) })
18408
+ children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableRow, { className: "hover:bg-transparent", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableHead, { scope: "col", className: HEAD_CLASS, children: column.label }, column.key)) })
17204
18409
  }
17205
18410
  ),
17206
- /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TableBody, { children })
18411
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableBody, { children })
17207
18412
  ] }) });
17208
18413
  }
17209
18414
  function renderShimmerRows(columns, count) {
17210
- return Array.from({ length: count }).map((_, index2) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TableRow, { className: ROW_CLASSES, "aria-hidden": "true", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TableCell, { className: CELL_CLASS, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "block h-3 w-3/4 animate-pulse rounded bg-muted-foreground/20" }) }, column.key)) }, `shimmer-${index2}`));
18415
+ return Array.from({ length: count }).map((_, index2) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableRow, { className: ROW_CLASSES, "aria-hidden": "true", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableCell, { className: CELL_CLASS, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "block h-3 w-3/4 animate-pulse rounded bg-muted-foreground/20" }) }, column.key)) }, `shimmer-${index2}`));
17211
18416
  }
17212
18417
  function renderDataRows(columns, rows) {
17213
- return rows.map((row, index2) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TableRow, { className: DATA_ROW_CLASSES, children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TableCell, { className: CELL_CLASS, children: formatCell(row, column) }, column.key)) }, index2));
18418
+ return rows.map((row, index2) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableRow, { className: DATA_ROW_CLASSES, children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableCell, { className: CELL_CLASS, children: formatCell(row, column) }, column.key)) }, index2));
17214
18419
  }
17215
- function renderEmptyRow(colSpan) {
17216
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TableRow, { className: "hover:bg-transparent", children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(TableCell, { colSpan, className: "py-6 text-center text-sm text-muted-foreground", children: "No rows to display." }) });
17217
- }
17218
-
17219
- // src/components/artifacts/table-artifact/use-table-artifact-data.ts
17220
- var import_react6 = require("react");
17221
-
17222
- // src/components/artifacts/table-artifact/parse-csv.ts
17223
- var import_papaparse = __toESM(require("papaparse"), 1);
17224
- function parseCsv(text2, columns) {
17225
- const result = import_papaparse.default.parse(text2, {
17226
- header: true,
17227
- skipEmptyLines: true,
17228
- dynamicTyping: false
17229
- });
17230
- const csvHeaders = new Set(result.meta?.fields ?? []);
17231
- const presentColumns = columns.filter((col) => csvHeaders.has(col.key));
17232
- return result.data.map((rawRow) => {
17233
- const row = {};
17234
- for (const column of presentColumns) {
17235
- const value2 = rawRow[column.key];
17236
- row[column.key] = value2 === void 0 || value2 === "" ? null : value2;
17237
- }
17238
- return row;
17239
- });
18420
+ function renderEmptyRow(colSpan, emptyMessage) {
18421
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableRow, { className: "hover:bg-transparent", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableCell, { colSpan, className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }) });
17240
18422
  }
17241
18423
 
17242
18424
  // src/components/artifacts/table-artifact/use-table-artifact-data.ts
17243
- var LOADING = { status: "loading", rows: null, error: null };
17244
- var UNAVAILABLE = { status: "unavailable", rows: null, error: null };
17245
- var INITIAL_INTERNAL = { cacheKey: null, data: LOADING };
17246
- function columnsFingerprint(columns) {
17247
- return columns.map((c) => `${c.key}:${c.type ?? "string"}`).join("|");
17248
- }
17249
18425
  function useTableArtifactData(presignedUrl, columns) {
17250
- const colsKey = (0, import_react6.useMemo)(() => columnsFingerprint(columns), [columns]);
17251
- const cacheKey = presignedUrl ? `${presignedUrl}::${colsKey}` : null;
17252
- const [state, setState] = (0, import_react6.useState)(INITIAL_INTERNAL);
17253
- (0, import_react6.useEffect)(() => {
17254
- if (!presignedUrl) return;
17255
- const controller = new AbortController();
17256
- fetch(presignedUrl, {
17257
- signal: controller.signal,
17258
- headers: { Accept: "text/csv" },
17259
- // Presigned URLs are cross-origin S3 in production and don't need credentials. Explicit
17260
- // omit so a same-origin URL (compromised payload, local dev) can't accidentally receive
17261
- // session cookies or auth headers.
17262
- credentials: "omit"
17263
- }).then(async (response) => {
17264
- if (!response.ok) throw new Error(`Failed to load table data (${response.status})`);
17265
- return response.text();
17266
- }).then((text2) => {
17267
- if (controller.signal.aborted) return;
17268
- try {
17269
- const rows = parseCsv(text2, columns);
17270
- setState({ cacheKey: `${presignedUrl}::${colsKey}`, data: { status: "ready", rows, error: null } });
17271
- } catch (parseError) {
17272
- console.error("[TableArtifact] CSV parse failed", parseError);
17273
- const err = parseError instanceof Error ? parseError : new Error(String(parseError));
17274
- setState({ cacheKey: `${presignedUrl}::${colsKey}`, data: { status: "error", rows: null, error: err } });
17275
- }
17276
- }).catch((error) => {
17277
- if (controller.signal.aborted) return;
17278
- console.error("[TableArtifact] Fetch failed", error);
17279
- const err = error instanceof Error ? error : new Error(String(error));
17280
- setState({ cacheKey: `${presignedUrl}::${colsKey}`, data: { status: "error", rows: null, error: err } });
17281
- });
17282
- return () => {
17283
- controller.abort();
17284
- };
17285
- }, [presignedUrl, colsKey]);
17286
- if (!presignedUrl) return UNAVAILABLE;
17287
- if (state.cacheKey !== cacheKey) return LOADING;
17288
- return state.data;
18426
+ return useRowsArtifactData(presignedUrl, columns, parseCsv);
17289
18427
  }
17290
18428
 
17291
18429
  // src/components/artifacts/table-artifact/validate.ts
@@ -17305,42 +18443,61 @@ function isValidTableColumn(column) {
17305
18443
  }
17306
18444
 
17307
18445
  // src/components/artifacts/table-artifact/table-artifact.tsx
17308
- var import_jsx_runtime8 = require("react/jsx-runtime");
17309
- var TITLE_CLASSES = "text-sm font-semibold text-foreground";
18446
+ var import_jsx_runtime22 = require("react/jsx-runtime");
18447
+ var TITLE_CLASSES2 = "text-sm font-semibold text-foreground";
17310
18448
  var TABLE_MAX_BODY_HEIGHT = 480;
17311
18449
  var MAX_SHIMMER_ROWS = 10;
17312
- var MSG_UNAVAILABLE = "Table data is unavailable.";
17313
- function TableArtifact({ artifact }) {
18450
+ function TableArtifact({ artifact, labels, callbacks }) {
17314
18451
  const validConfig = isValidTableConfig(artifact.config);
17315
18452
  const validColumns = validConfig ? artifact.config.columns : null;
17316
- (0, import_react7.useEffect)(() => {
18453
+ (0, import_react15.useEffect)(() => {
17317
18454
  if (validConfig) return;
17318
18455
  console.warn("[clay] TableArtifact: malformed `config` \u2014 skipping render.");
17319
18456
  }, [validConfig]);
18457
+ const resolvedLabels = (0, import_react15.useMemo)(
18458
+ () => ({ ...DEFAULT_TABLE_ARTIFACT_LABELS, ...labels ?? {} }),
18459
+ [labels]
18460
+ );
17320
18461
  const data2 = useTableArtifactData(
17321
18462
  validConfig ? artifact.protectedAsset?.presignedUrl ?? null : null,
17322
18463
  validColumns ?? []
17323
18464
  );
17324
18465
  const presignedUrl = artifact.protectedAsset?.presignedUrl ?? null;
18466
+ const onDownload = callbacks?.onDownload;
18467
+ const handleDownloadClick = onDownload ? () => onDownload(artifact) : void 0;
17325
18468
  if (!validConfig || !validColumns) {
17326
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
17327
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
17328
- artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ArtifactTitle, { className: TITLE_CLASSES, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", {}),
17329
- presignedUrl ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ArtifactActions, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ArtifactDownloadButton, { href: presignedUrl }) }) : null
18469
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
18470
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
18471
+ artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ArtifactTitle, { className: TITLE_CLASSES2, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", {}),
18472
+ presignedUrl ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ArtifactActions, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
18473
+ ArtifactDownloadButton,
18474
+ {
18475
+ href: presignedUrl,
18476
+ label: resolvedLabels.download,
18477
+ onClick: handleDownloadClick
18478
+ }
18479
+ ) }) : null
17330
18480
  ] }),
17331
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ArtifactContent, { className: "p-0 overflow-auto", style: { maxHeight: TABLE_MAX_BODY_HEIGHT }, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(StatusMessage, { $tone: "info", children: MSG_UNAVAILABLE }) })
18481
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ArtifactContent, { className: "p-0 overflow-auto", style: { maxHeight: TABLE_MAX_BODY_HEIGHT }, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(StatusMessage, { $tone: "info", children: resolvedLabels.unavailable }) })
17332
18482
  ] });
17333
18483
  }
17334
18484
  return (
17335
18485
  // The table body owns its own scroll container (`ArtifactTable` inside `TableArtifactContent`).
17336
18486
  // Disable the outer overflow container so only one scroll context exists — this prevents
17337
18487
  // double-scroll nesting and lets `useScrollShadow` find the correct scroll ancestor.
17338
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
17339
- /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
17340
- artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ArtifactTitle, { className: TITLE_CLASSES, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", {}),
17341
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ArtifactActions, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ArtifactDownloadButton, { href: presignedUrl ?? "" }) })
18488
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
18489
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
18490
+ artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ArtifactTitle, { className: TITLE_CLASSES2, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", {}),
18491
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ArtifactActions, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
18492
+ ArtifactDownloadButton,
18493
+ {
18494
+ href: presignedUrl ?? "",
18495
+ label: resolvedLabels.download,
18496
+ onClick: handleDownloadClick
18497
+ }
18498
+ ) })
17342
18499
  ] }),
17343
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ArtifactContent, { className: "p-0 overflow-visible", style: { maxHeight: "none" }, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
18500
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ArtifactContent, { className: "p-0 overflow-visible", style: { maxHeight: "none" }, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
17344
18501
  TableArtifactContent,
17345
18502
  {
17346
18503
  columns: validColumns,
@@ -17348,7 +18505,7 @@ function TableArtifact({ artifact }) {
17348
18505
  knownRowCount: artifact.config.stats?.rowCount,
17349
18506
  maxShimmerRows: MAX_SHIMMER_ROWS,
17350
18507
  maxBodyHeight: TABLE_MAX_BODY_HEIGHT,
17351
- unavailableMessage: MSG_UNAVAILABLE
18508
+ labels: resolvedLabels
17352
18509
  }
17353
18510
  ) })
17354
18511
  ] })
@@ -17370,7 +18527,8 @@ var TableArtifactService = {
17370
18527
 
17371
18528
  // src/components/artifacts/artifact-services/index.ts
17372
18529
  var ArtifactServices = {
17373
- [artifactTypes.TABLE]: TableArtifactService
18530
+ [artifactTypes.TABLE]: TableArtifactService,
18531
+ [artifactTypes.CHART]: ChartArtifactService
17374
18532
  };
17375
18533
  function artifactToClipboardText(artifact) {
17376
18534
  const entry = ArtifactServices[artifact.type];
@@ -17381,13 +18539,13 @@ function artifactToClipboardText(artifact) {
17381
18539
  }
17382
18540
 
17383
18541
  // src/components/blocks/artifact-ref-block/artifact-ref-block.tsx
17384
- var import_jsx_runtime9 = require("react/jsx-runtime");
18542
+ var import_jsx_runtime23 = require("react/jsx-runtime");
17385
18543
  function ArtifactRefBlock({ block }) {
17386
- const { artifact } = block.payload;
18544
+ const { artifact, labels, callbacks } = block.payload;
17387
18545
  const entry = ArtifactServices[artifact.type];
17388
18546
  if (!entry) return null;
17389
- const { Component } = entry;
17390
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Component, { artifact });
18547
+ const Component = entry.Component;
18548
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Component, { artifact, labels, callbacks });
17391
18549
  }
17392
18550
 
17393
18551
  // src/components/blocks/block-services/artifact-ref-block-service.ts
@@ -17439,9 +18597,9 @@ var TableScroll = import_styled_components3.default.div`
17439
18597
  `;
17440
18598
 
17441
18599
  // src/components/blocks/scrollable-table/scrollable-table.tsx
17442
- var import_jsx_runtime10 = require("react/jsx-runtime");
18600
+ var import_jsx_runtime24 = require("react/jsx-runtime");
17443
18601
  function ScrollableTable({ node: _node, ...props }) {
17444
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(TableScroll, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("table", { ...props }) }) });
18602
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TableContainer, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TableScroll, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("table", { ...props }) }) });
17445
18603
  }
17446
18604
 
17447
18605
  // src/components/blocks/text-block/sanitize.ts
@@ -17454,6 +18612,7 @@ function sanitize(text2) {
17454
18612
 
17455
18613
  // src/components/blocks/text-block/text-block-styles.ts
17456
18614
  var import_styled_components4 = __toESM(require("styled-components"), 1);
18615
+ init_colors();
17457
18616
  var TextBlockWrapper = import_styled_components4.default.div`
17458
18617
  ${typographyMixin(typographyTypes.GEIST_BODY_S_REGULAR)};
17459
18618
  color: ${colors["brown-100"]};
@@ -17572,12 +18731,12 @@ var TextBlockWrapper = import_styled_components4.default.div`
17572
18731
  `;
17573
18732
 
17574
18733
  // src/components/blocks/text-block/text-block.tsx
17575
- var import_jsx_runtime11 = require("react/jsx-runtime");
18734
+ var import_jsx_runtime25 = require("react/jsx-runtime");
17576
18735
  var markdownComponents = {
17577
- table: ((tableProps) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ScrollableTable, { ...tableProps }))
18736
+ table: ((tableProps) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ScrollableTable, { ...tableProps }))
17578
18737
  };
17579
18738
  function TextBlock({ block }) {
17580
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(TextBlockWrapper, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_react_markdown.default, { remarkPlugins: [import_remark_gfm.default, import_remark_breaks.default], components: markdownComponents, children: sanitize(block.payload.text) }) });
18739
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(TextBlockWrapper, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_markdown.default, { remarkPlugins: [import_remark_gfm.default, import_remark_breaks.default], components: markdownComponents, children: sanitize(block.payload.text) }) });
17581
18740
  }
17582
18741
 
17583
18742
  // src/components/blocks/block-services/text-block-service.ts
@@ -17599,23 +18758,23 @@ var BlockServices = {
17599
18758
  };
17600
18759
 
17601
18760
  // src/components/blocks/block/block.tsx
17602
- var import_jsx_runtime12 = require("react/jsx-runtime");
18761
+ var import_jsx_runtime26 = require("react/jsx-runtime");
17603
18762
  function Block({ block }) {
17604
18763
  const service = BlockServices[block.type];
17605
18764
  if (!service) return null;
17606
18765
  const { Component } = service;
17607
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Component, { block });
18766
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Component, { block });
17608
18767
  }
17609
18768
 
17610
18769
  // src/components/blocks/block-context/block-context.tsx
17611
- var import_react8 = require("react");
17612
- var BlockContext = (0, import_react8.createContext)(null);
18770
+ var import_react16 = require("react");
18771
+ var BlockContext = (0, import_react16.createContext)(null);
17613
18772
  function useBlockContext() {
17614
- return (0, import_react8.useContext)(BlockContext) ?? {};
18773
+ return (0, import_react16.useContext)(BlockContext) ?? {};
17615
18774
  }
17616
18775
 
17617
18776
  // src/components/chat/chat-message/chat-message.tsx
17618
- var import_react12 = require("react");
18777
+ var import_react20 = require("react");
17619
18778
 
17620
18779
  // src/components/chat/hooks/copy-message-text.ts
17621
18780
  function copyMessageText(message) {
@@ -17632,13 +18791,13 @@ function copyMessageText(message) {
17632
18791
  }
17633
18792
 
17634
18793
  // src/components/chat/chat-message-actions/chat-message-actions.tsx
17635
- var import_react11 = require("react");
18794
+ var import_react19 = require("react");
17636
18795
 
17637
18796
  // src/components/chat/chat-context/chat-context.ts
17638
- var import_react9 = require("react");
17639
- var ChatContext = (0, import_react9.createContext)(null);
18797
+ var import_react17 = require("react");
18798
+ var ChatContext = (0, import_react17.createContext)(null);
17640
18799
  function useChatContext() {
17641
- const context = (0, import_react9.useContext)(ChatContext);
18800
+ const context = (0, import_react17.useContext)(ChatContext);
17642
18801
  if (!context) {
17643
18802
  throw new Error("useChatContext must be used within a Chat.Root component");
17644
18803
  }
@@ -17646,7 +18805,7 @@ function useChatContext() {
17646
18805
  }
17647
18806
 
17648
18807
  // src/components/chat/hooks/use-copy-to-clipboard.ts
17649
- var import_react10 = require("react");
18808
+ var import_react18 = require("react");
17650
18809
 
17651
18810
  // src/utils/clipboard.ts
17652
18811
  function copyToClipboard(text2, options) {
@@ -17659,14 +18818,14 @@ function copyToClipboard(text2, options) {
17659
18818
  // src/components/chat/hooks/use-copy-to-clipboard.ts
17660
18819
  var RESET_DELAY_MS = 2e3;
17661
18820
  function useCopyToClipboard() {
17662
- const [isCopied, setIsCopied] = (0, import_react10.useState)(false);
17663
- const timeoutRef = (0, import_react10.useRef)(null);
17664
- (0, import_react10.useEffect)(() => {
18821
+ const [isCopied, setIsCopied] = (0, import_react18.useState)(false);
18822
+ const timeoutRef = (0, import_react18.useRef)(null);
18823
+ (0, import_react18.useEffect)(() => {
17665
18824
  return () => {
17666
18825
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
17667
18826
  };
17668
18827
  }, []);
17669
- const copy = (0, import_react10.useCallback)((text2) => {
18828
+ const copy = (0, import_react18.useCallback)((text2) => {
17670
18829
  copyToClipboard(text2, {
17671
18830
  onSuccess: () => {
17672
18831
  setIsCopied(true);
@@ -17706,24 +18865,24 @@ var AnimatedAction = import_styled_components5.default.div`
17706
18865
  `;
17707
18866
 
17708
18867
  // src/components/chat/chat-message-actions/chat-message-actions.tsx
17709
- var import_jsx_runtime13 = require("react/jsx-runtime");
18868
+ var import_jsx_runtime27 = require("react/jsx-runtime");
17710
18869
  function ChatMessageActions({ className, messageId, content: content2, role, isHelpful }) {
17711
18870
  const { onCopyMessage, onThumbUpClick, onThumbDownClick } = useChatContext();
17712
18871
  const { isCopied, copy } = useCopyToClipboard();
17713
- const handleCopy = (0, import_react11.useCallback)(() => {
18872
+ const handleCopy = (0, import_react19.useCallback)(() => {
17714
18873
  copy(content2);
17715
18874
  onCopyMessage?.(messageId);
17716
18875
  }, [content2, messageId, copy, onCopyMessage]);
17717
- const handleThumbUp = (0, import_react11.useCallback)(() => {
18876
+ const handleThumbUp = (0, import_react19.useCallback)(() => {
17718
18877
  onThumbUpClick?.(messageId, isHelpful === true ? null : true);
17719
18878
  }, [messageId, isHelpful, onThumbUpClick]);
17720
- const handleThumbDown = (0, import_react11.useCallback)(() => {
18879
+ const handleThumbDown = (0, import_react19.useCallback)(() => {
17721
18880
  onThumbDownClick?.(messageId, isHelpful === false ? null : false);
17722
18881
  }, [messageId, isHelpful, onThumbDownClick]);
17723
18882
  const isAssistant = role === MESSAGE_ROLE.ASSISTANT;
17724
18883
  const hasFeedback = isAssistant && (onThumbUpClick || onThumbDownClick);
17725
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(ActionsContainer, { $role: role, className, children: [
17726
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
18884
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(ActionsContainer, { $role: role, className, children: [
18885
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
17727
18886
  IconButton,
17728
18887
  {
17729
18888
  icon: isCopied ? IconCheck : IconCopy,
@@ -17731,7 +18890,7 @@ function ChatMessageActions({ className, messageId, content: content2, role, isH
17731
18890
  "aria-label": isCopied ? "Copied" : "Copy message"
17732
18891
  }
17733
18892
  ),
17734
- hasFeedback && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(AnimatedAction, { $visible: isHelpful !== false, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
18893
+ hasFeedback && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(AnimatedAction, { $visible: isHelpful !== false, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
17735
18894
  IconButton,
17736
18895
  {
17737
18896
  icon: IconThumbUp,
@@ -17740,7 +18899,7 @@ function ChatMessageActions({ className, messageId, content: content2, role, isH
17740
18899
  "aria-label": "Good response"
17741
18900
  }
17742
18901
  ) }),
17743
- hasFeedback && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(AnimatedAction, { $visible: isHelpful !== true, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
18902
+ hasFeedback && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(AnimatedAction, { $visible: isHelpful !== true, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
17744
18903
  IconButton,
17745
18904
  {
17746
18905
  icon: IconThumbDown,
@@ -17754,6 +18913,7 @@ function ChatMessageActions({ className, messageId, content: content2, role, isH
17754
18913
 
17755
18914
  // src/components/chat/chat-message/chat-message-styles.ts
17756
18915
  var import_styled_components6 = __toESM(require("styled-components"), 1);
18916
+ init_colors();
17757
18917
  var MessageRow = import_styled_components6.default.div`
17758
18918
  display: flex;
17759
18919
  justify-content: ${({ $role }) => $role === MESSAGE_ROLE.USER ? "flex-end" : "flex-start"};
@@ -17790,12 +18950,12 @@ var MessageBubble = import_styled_components6.default.div`
17790
18950
  `;
17791
18951
 
17792
18952
  // src/components/chat/chat-message/chat-message.tsx
17793
- var import_jsx_runtime14 = require("react/jsx-runtime");
18953
+ var import_jsx_runtime28 = require("react/jsx-runtime");
17794
18954
  function ChatMessage({ message }) {
17795
- const clipboardText = (0, import_react12.useMemo)(() => copyMessageText(message), [message]);
17796
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MessageRow, { $role: message.role, role: "article", "aria-label": `${message.role} message`, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(MessageContainer, { $role: message.role, children: [
17797
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(MessageBubble, { $role: message.role, "data-testid": "message-bubble", children: message.blocks.map((block, index2) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Block, { block }, index2)) }),
17798
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
18955
+ const clipboardText = (0, import_react20.useMemo)(() => copyMessageText(message), [message]);
18956
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(MessageRow, { $role: message.role, role: "article", "aria-label": `${message.role} message`, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(MessageContainer, { $role: message.role, children: [
18957
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(MessageBubble, { $role: message.role, "data-testid": "message-bubble", children: message.blocks.map((block, index2) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Block, { block }, index2)) }),
18958
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
17799
18959
  ChatMessageActions,
17800
18960
  {
17801
18961
  messageId: message.id,
@@ -17809,6 +18969,7 @@ function ChatMessage({ message }) {
17809
18969
 
17810
18970
  // src/components/keyboard-shortcut/keyboard-shortcut-styles.ts
17811
18971
  var import_styled_components7 = __toESM(require("styled-components"), 1);
18972
+ init_colors();
17812
18973
 
17813
18974
  // src/components/keyboard-shortcut/types.ts
17814
18975
  var KEYBOARD_SHORTCUT_VARIANTS = {
@@ -17844,20 +19005,20 @@ var Key = import_styled_components7.default.kbd`
17844
19005
  `;
17845
19006
 
17846
19007
  // src/components/keyboard-shortcut/keyboard-shortcut.tsx
17847
- var import_jsx_runtime15 = require("react/jsx-runtime");
19008
+ var import_jsx_runtime29 = require("react/jsx-runtime");
17848
19009
  function KeyboardShortcut({
17849
19010
  keys,
17850
19011
  variant = KEYBOARD_SHORTCUT_VARIANTS.OUTLINED,
17851
19012
  className
17852
19013
  }) {
17853
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Wrapper, { className, children: keys.map((KeyComponent, index2) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Key, { $variant: variant, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Icon, { icon: KeyComponent, size: 12 }) }, index2)) });
19014
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Wrapper, { className, children: keys.map((KeyComponent, index2) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Key, { $variant: variant, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Icon, { icon: KeyComponent, size: 12 }) }, index2)) });
17854
19015
  }
17855
19016
 
17856
19017
  // src/components/keyboard-shortcut/icons/icon-ctrl.tsx
17857
- var import_jsx_runtime16 = require("react/jsx-runtime");
19018
+ var import_jsx_runtime30 = require("react/jsx-runtime");
17858
19019
  function IconCtrl(props) {
17859
19020
  const { width: width2 = 24, height: height2 = 24, ...rest } = props;
17860
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", width: width2, height: height2, fill: "none", ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
19021
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", width: width2, height: height2, fill: "none", ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
17861
19022
  "text",
17862
19023
  {
17863
19024
  x: "50%",
@@ -17874,7 +19035,7 @@ function IconCtrl(props) {
17874
19035
  }
17875
19036
 
17876
19037
  // src/components/lottie/lottie.tsx
17877
- var import_react14 = require("react");
19038
+ var import_react22 = require("react");
17878
19039
 
17879
19040
  // src/components/lottie/lottie-styles.ts
17880
19041
  var import_styled_components8 = __toESM(require("styled-components"), 1);
@@ -17890,7 +19051,7 @@ var LottieContainer = import_styled_components8.default.div`
17890
19051
  `;
17891
19052
 
17892
19053
  // src/components/lottie/use-lottie.ts
17893
- var import_react13 = require("react");
19054
+ var import_react21 = require("react");
17894
19055
  var import_lottie_web = __toESM(require_lottie(), 1);
17895
19056
  function useLottie({
17896
19057
  animationData: animationData2,
@@ -17905,17 +19066,17 @@ function useLottie({
17905
19066
  onLoopComplete,
17906
19067
  onEnterFrame
17907
19068
  }) {
17908
- const containerRef = (0, import_react13.useRef)(null);
17909
- const animationRef = (0, import_react13.useRef)(null);
17910
- const onAnimationLoadedRef = (0, import_react13.useRef)(onAnimationLoaded);
17911
- const onCompleteRef = (0, import_react13.useRef)(onComplete);
17912
- const onLoopCompleteRef = (0, import_react13.useRef)(onLoopComplete);
17913
- const onEnterFrameRef = (0, import_react13.useRef)(onEnterFrame);
19069
+ const containerRef = (0, import_react21.useRef)(null);
19070
+ const animationRef = (0, import_react21.useRef)(null);
19071
+ const onAnimationLoadedRef = (0, import_react21.useRef)(onAnimationLoaded);
19072
+ const onCompleteRef = (0, import_react21.useRef)(onComplete);
19073
+ const onLoopCompleteRef = (0, import_react21.useRef)(onLoopComplete);
19074
+ const onEnterFrameRef = (0, import_react21.useRef)(onEnterFrame);
17914
19075
  onAnimationLoadedRef.current = onAnimationLoaded;
17915
19076
  onCompleteRef.current = onComplete;
17916
19077
  onLoopCompleteRef.current = onLoopComplete;
17917
19078
  onEnterFrameRef.current = onEnterFrame;
17918
- (0, import_react13.useEffect)(() => {
19079
+ (0, import_react21.useEffect)(() => {
17919
19080
  if (!containerRef.current) return;
17920
19081
  const anim = import_lottie_web.default.loadAnimation({
17921
19082
  container: containerRef.current,
@@ -18007,8 +19168,8 @@ function createLottieRef(animationRef) {
18007
19168
  }
18008
19169
 
18009
19170
  // src/components/lottie/lottie.tsx
18010
- var import_jsx_runtime17 = require("react/jsx-runtime");
18011
- var Lottie = (0, import_react14.forwardRef)(function Lottie2({
19171
+ var import_jsx_runtime31 = require("react/jsx-runtime");
19172
+ var Lottie = (0, import_react22.forwardRef)(function Lottie2({
18012
19173
  animationData: animationData2,
18013
19174
  autoplay,
18014
19175
  loop,
@@ -18038,8 +19199,8 @@ var Lottie = (0, import_react14.forwardRef)(function Lottie2({
18038
19199
  onLoopComplete,
18039
19200
  onEnterFrame
18040
19201
  });
18041
- (0, import_react14.useImperativeHandle)(ref, () => createLottieRef(animationRef), [animationRef]);
18042
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
19202
+ (0, import_react22.useImperativeHandle)(ref, () => createLottieRef(animationRef), [animationRef]);
19203
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
18043
19204
  LottieContainer,
18044
19205
  {
18045
19206
  ref: containerRef,
@@ -18053,7 +19214,7 @@ var Lottie = (0, import_react14.forwardRef)(function Lottie2({
18053
19214
  });
18054
19215
 
18055
19216
  // src/components/text-area/text-area.tsx
18056
- var import_react15 = require("react");
19217
+ var import_react23 = require("react");
18057
19218
 
18058
19219
  // src/utils/merge-refs.ts
18059
19220
  function mergeRefs(...refs) {
@@ -18070,6 +19231,7 @@ function mergeRefs(...refs) {
18070
19231
 
18071
19232
  // src/components/text-area/text-area-styles.ts
18072
19233
  var import_styled_components9 = __toESM(require("styled-components"), 1);
19234
+ init_colors();
18073
19235
  var StyledTextArea = import_styled_components9.default.textarea`
18074
19236
  ${typographyMixin(typographyTypes.GEIST_BODY_S_REGULAR)};
18075
19237
  color: ${colors["brown-100"]};
@@ -18093,23 +19255,23 @@ var StyledTextArea = import_styled_components9.default.textarea`
18093
19255
  `;
18094
19256
 
18095
19257
  // src/components/text-area/text-area.tsx
18096
- var import_jsx_runtime18 = require("react/jsx-runtime");
18097
- var TextArea = (0, import_react15.forwardRef)(function TextArea2({ value: value2, onChange, placeholder, maxHeight, rows = 1, autoFocus, onKeyDown, disabled, className }, externalRef) {
18098
- const internalRef = (0, import_react15.useRef)(null);
18099
- (0, import_react15.useLayoutEffect)(() => {
19258
+ var import_jsx_runtime32 = require("react/jsx-runtime");
19259
+ var TextArea = (0, import_react23.forwardRef)(function TextArea2({ value: value2, onChange, placeholder, maxHeight, rows = 1, autoFocus, onKeyDown, disabled, className }, externalRef) {
19260
+ const internalRef = (0, import_react23.useRef)(null);
19261
+ (0, import_react23.useLayoutEffect)(() => {
18100
19262
  const el = internalRef.current;
18101
19263
  if (el) {
18102
19264
  el.style.height = "auto";
18103
19265
  el.style.height = `${el.scrollHeight}px`;
18104
19266
  }
18105
19267
  }, [value2]);
18106
- const handleChange = (0, import_react15.useCallback)(
19268
+ const handleChange = (0, import_react23.useCallback)(
18107
19269
  (e) => {
18108
19270
  onChange(e.target.value);
18109
19271
  },
18110
19272
  [onChange]
18111
19273
  );
18112
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
19274
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
18113
19275
  StyledTextArea,
18114
19276
  {
18115
19277
  ref: mergeRefs(internalRef, externalRef),
@@ -18198,10 +19360,11 @@ function convertTableToCSV(table) {
18198
19360
  }
18199
19361
 
18200
19362
  // src/components/button/button.tsx
18201
- var import_react16 = require("react");
19363
+ var import_react24 = require("react");
18202
19364
 
18203
19365
  // src/components/button/button-styles.ts
18204
19366
  var import_styled_components10 = __toESM(require("styled-components"), 1);
19367
+ init_colors();
18205
19368
 
18206
19369
  // src/components/button/constants.ts
18207
19370
  var BUTTON_VARIANT = {
@@ -18320,8 +19483,8 @@ var StyledButton = import_styled_components10.default.button`
18320
19483
  `;
18321
19484
 
18322
19485
  // src/components/button/button.tsx
18323
- var import_jsx_runtime19 = require("react/jsx-runtime");
18324
- var Button2 = (0, import_react16.forwardRef)(function Button3({
19486
+ var import_jsx_runtime33 = require("react/jsx-runtime");
19487
+ var Button2 = (0, import_react24.forwardRef)(function Button3({
18325
19488
  children,
18326
19489
  variant = BUTTON_VARIANT.SOLID,
18327
19490
  intent = BUTTON_INTENT.PRIMARY,
@@ -18333,8 +19496,8 @@ var Button2 = (0, import_react16.forwardRef)(function Button3({
18333
19496
  className,
18334
19497
  "aria-label": ariaLabel
18335
19498
  }, ref) {
18336
- const iconElement = icon ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Icon, { icon, size: 16 }) : null;
18337
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
19499
+ const iconElement = icon ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon, { icon, size: 16 }) : null;
19500
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
18338
19501
  StyledButton,
18339
19502
  {
18340
19503
  ref,
@@ -18348,7 +19511,7 @@ var Button2 = (0, import_react16.forwardRef)(function Button3({
18348
19511
  "aria-label": ariaLabel,
18349
19512
  children: [
18350
19513
  iconPosition === ICON_POSITION.LEADING && iconElement,
18351
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { children }),
19514
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { children }),
18352
19515
  iconPosition === ICON_POSITION.TRAILING && iconElement
18353
19516
  ]
18354
19517
  }
@@ -18356,7 +19519,9 @@ var Button2 = (0, import_react16.forwardRef)(function Button3({
18356
19519
  });
18357
19520
  // Annotate the CommonJS export names for ESM import in node:
18358
19521
  0 && (module.exports = {
19522
+ ArtifactCopyAsImageButton,
18359
19523
  ArtifactDownloadButton,
19524
+ ArtifactDownloadMenu,
18360
19525
  ArtifactRefBlock,
18361
19526
  ArtifactRefBlockService,
18362
19527
  ArtifactServices,
@@ -18367,8 +19532,11 @@ var Button2 = (0, import_react16.forwardRef)(function Button3({
18367
19532
  BlockContext,
18368
19533
  BlockServices,
18369
19534
  Button,
19535
+ ChartArtifact,
18370
19536
  ChatContext,
18371
19537
  ChatMessage,
19538
+ DEFAULT_CHART_ARTIFACT_LABELS,
19539
+ DEFAULT_TABLE_ARTIFACT_LABELS,
18372
19540
  ICON_POSITION,
18373
19541
  Icon,
18374
19542
  IconButton,
@@ -18413,9 +19581,13 @@ lottie-web/build/player/lottie.js:
18413
19581
 
18414
19582
  @tabler/icons-react/dist/esm/defaultAttributes.mjs:
18415
19583
  @tabler/icons-react/dist/esm/createReactComponent.mjs:
19584
+ @tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs:
18416
19585
  @tabler/icons-react/dist/esm/icons/IconCheck.mjs:
18417
19586
  @tabler/icons-react/dist/esm/icons/IconCopy.mjs:
18418
19587
  @tabler/icons-react/dist/esm/icons/IconDownload.mjs:
19588
+ @tabler/icons-react/dist/esm/icons/IconFileSpreadsheet.mjs:
19589
+ @tabler/icons-react/dist/esm/icons/IconLoader2.mjs:
19590
+ @tabler/icons-react/dist/esm/icons/IconPhoto.mjs:
18419
19591
  @tabler/icons-react/dist/esm/icons/IconThumbDown.mjs:
18420
19592
  @tabler/icons-react/dist/esm/icons/IconThumbUp.mjs:
18421
19593
  @tabler/icons-react/dist/esm/tabler-icons-react.mjs: