@shapesos/clay 0.18.0 → 0.19.1

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 (60) hide show
  1. package/dist/artifacts.cjs +207 -139
  2. package/dist/artifacts.cjs.map +1 -1
  3. package/dist/artifacts.js +5 -2
  4. package/dist/badge.cjs +70 -0
  5. package/dist/badge.cjs.map +1 -0
  6. package/dist/badge.d.cts +28 -0
  7. package/dist/badge.d.ts +28 -0
  8. package/dist/badge.js +9 -0
  9. package/dist/badge.js.map +1 -0
  10. package/dist/blocks.cjs +452 -185
  11. package/dist/blocks.cjs.map +1 -1
  12. package/dist/blocks.css +1 -1
  13. package/dist/blocks.d.cts +14 -3
  14. package/dist/blocks.d.ts +14 -3
  15. package/dist/blocks.js +17 -5
  16. package/dist/chat.cjs +457 -240
  17. package/dist/chat.cjs.map +1 -1
  18. package/dist/chat.d.cts +1 -1
  19. package/dist/chat.d.ts +1 -1
  20. package/dist/chat.js +10 -5
  21. package/dist/{chunk-JGMN6W72.js → chunk-2X4KUXYP.js} +1 -1
  22. package/dist/{chunk-QR4VBGK4.js → chunk-63AGNGKG.js} +81 -200
  23. package/dist/chunk-63AGNGKG.js.map +1 -0
  24. package/dist/chunk-CSTCTO3B.js +161 -0
  25. package/dist/chunk-CSTCTO3B.js.map +1 -0
  26. package/dist/chunk-EIAWZXE4.js +69 -0
  27. package/dist/chunk-EIAWZXE4.js.map +1 -0
  28. package/dist/chunk-EXRNGIQ2.js +41 -0
  29. package/dist/chunk-EXRNGIQ2.js.map +1 -0
  30. package/dist/{chunk-4MZZH3WX.js → chunk-HU5W7CGE.js} +37 -2
  31. package/dist/chunk-HU5W7CGE.js.map +1 -0
  32. package/dist/chunk-PISZYS2H.js +406 -0
  33. package/dist/chunk-PISZYS2H.js.map +1 -0
  34. package/dist/{chunk-CATIRDZP.js → chunk-PWSEEUVL.js} +10 -44
  35. package/dist/chunk-PWSEEUVL.js.map +1 -0
  36. package/dist/copy-button.cjs +439 -0
  37. package/dist/copy-button.cjs.map +1 -0
  38. package/dist/copy-button.d.cts +20 -0
  39. package/dist/copy-button.d.ts +20 -0
  40. package/dist/copy-button.js +12 -0
  41. package/dist/copy-button.js.map +1 -0
  42. package/dist/index.cjs +533 -298
  43. package/dist/index.cjs.map +1 -1
  44. package/dist/index.d.cts +4 -2
  45. package/dist/index.d.ts +4 -2
  46. package/dist/index.js +26 -9
  47. package/dist/table.cjs +40 -0
  48. package/dist/table.cjs.map +1 -1
  49. package/dist/table.d.cts +37 -2
  50. package/dist/table.d.ts +37 -2
  51. package/dist/table.js +11 -1
  52. package/dist/{types-BDYPVP2N.d.cts → types-Bhg0_ES8.d.cts} +74 -2
  53. package/dist/{types-BMwa4bPW.d.ts → types-orOQcI2z.d.ts} +74 -2
  54. package/package.json +11 -1
  55. package/dist/chunk-4MZZH3WX.js.map +0 -1
  56. package/dist/chunk-7MY4X4YL.js +0 -250
  57. package/dist/chunk-7MY4X4YL.js.map +0 -1
  58. package/dist/chunk-CATIRDZP.js.map +0 -1
  59. package/dist/chunk-QR4VBGK4.js.map +0 -1
  60. /package/dist/{chunk-JGMN6W72.js.map → chunk-2X4KUXYP.js.map} +0 -0
@@ -475,6 +475,10 @@ var IconLoader2 = createReactComponent("outline", "loader-2", "Loader2", __iconN
475
475
  var __iconNode11 = [["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" }]];
476
476
  var IconPhoto = createReactComponent("outline", "photo", "Photo", __iconNode11);
477
477
 
478
+ // node_modules/@tabler/icons-react/dist/esm/icons/IconFlask2Filled.mjs
479
+ var __iconNode12 = [["path", { "d": "M15 2a1 1 0 0 1 0 2v5.674l.062 .03a7 7 0 0 1 3.85 5.174l.037 .262a7 7 0 0 1 -3.078 6.693a1 1 0 0 1 -.553 .167h-6.635a1 1 0 0 1 -.552 -.166a7 7 0 0 1 .807 -12.134l.062 -.028v-5.672a1 1 0 1 1 0 -2h6zm-2 2h-2v6.34a1 1 0 0 1 -.551 .894l-.116 .049a5 5 0 0 0 -2.92 2.717h9.172a5 5 0 0 0 -2.918 -2.715a1 1 0 0 1 -.667 -.943v-6.342z", "key": "svg-0" }]];
480
+ var IconFlask2Filled = createReactComponent("filled", "flask-2-filled", "Flask2Filled", __iconNode12);
481
+
478
482
  // src/components/artifacts/artifact-copy-as-image-button/artifact-copy-as-image-button.tsx
479
483
  var import_react6 = require("react");
480
484
 
@@ -2038,6 +2042,41 @@ var ChartArtifactService = {
2038
2042
  // src/components/artifacts/deck-artifact/deck-artifact.tsx
2039
2043
  var import_react17 = require("react");
2040
2044
  var import_react_dom = require("react-dom");
2045
+
2046
+ // src/components/badge/badge.tsx
2047
+ var import_jsx_runtime20 = require("react/jsx-runtime");
2048
+ var BASE = "inline-flex items-center whitespace-nowrap rounded-full";
2049
+ var SIZES = {
2050
+ // `sm` is a uniform scale-down of `md` (text 10/12 of caption): padding and line-height keep
2051
+ // md's proportions (caption is 12px text on a 16px line = 1.333 ratio) so the pill shape matches.
2052
+ md: "px-2.5 py-0.5 text-geist-label-caption-medium",
2053
+ sm: "px-2 py-0.5 text-[11px]/[1.333] font-medium"
2054
+ };
2055
+ var SUBTLE = {
2056
+ neutral: "bg-brown-20 text-brown-70",
2057
+ warning: "bg-orange-50 text-orange-600",
2058
+ violet: "bg-violet-50 text-violet-600"
2059
+ };
2060
+ var OUTLINE = {
2061
+ neutral: "border border-brown-30 bg-white text-brown-100",
2062
+ warning: "border border-orange-200 bg-white text-orange-600",
2063
+ violet: "border border-violet-400 bg-white text-violet-600"
2064
+ };
2065
+ var VARIANTS = {
2066
+ subtle: SUBTLE,
2067
+ outline: OUTLINE
2068
+ };
2069
+ function Badge({
2070
+ variant = "subtle",
2071
+ tone = "neutral",
2072
+ size = "md",
2073
+ className,
2074
+ children
2075
+ }) {
2076
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: cn(BASE, SIZES[size], VARIANTS[variant][tone], className), children });
2077
+ }
2078
+
2079
+ // src/components/artifacts/deck-artifact/deck-artifact.tsx
2041
2080
  init_capture_exclude_attribute();
2042
2081
 
2043
2082
  // src/components/artifacts/deck-artifact/deck-artifact-content.tsx
@@ -2045,23 +2084,23 @@ var import_react16 = require("react");
2045
2084
 
2046
2085
  // src/components/ui/table.tsx
2047
2086
  var React3 = __toESM(require("react"), 1);
2048
- var import_jsx_runtime20 = require("react/jsx-runtime");
2049
- 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 }) }));
2087
+ var import_jsx_runtime21 = require("react/jsx-runtime");
2088
+ var Table = React3.forwardRef(({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: cn("relative w-full overflow-auto", containerClassName), children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("table", { ref, className: cn("w-full caption-bottom text-sm", className), ...props }) }));
2050
2089
  Table.displayName = "Table";
2051
2090
  var TableHeader = React3.forwardRef(
2052
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
2091
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
2053
2092
  );
2054
2093
  TableHeader.displayName = "TableHeader";
2055
2094
  var TableBody = React3.forwardRef(
2056
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props })
2095
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props })
2057
2096
  );
2058
2097
  TableBody.displayName = "TableBody";
2059
2098
  var TableFooter = React3.forwardRef(
2060
- ({ 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 })
2099
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("tfoot", { ref, className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className), ...props })
2061
2100
  );
2062
2101
  TableFooter.displayName = "TableFooter";
2063
2102
  var TableRow = React3.forwardRef(
2064
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2103
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2065
2104
  "tr",
2066
2105
  {
2067
2106
  ref,
@@ -2072,7 +2111,7 @@ var TableRow = React3.forwardRef(
2072
2111
  );
2073
2112
  TableRow.displayName = "TableRow";
2074
2113
  var TableHead = React3.forwardRef(
2075
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
2114
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2076
2115
  "th",
2077
2116
  {
2078
2117
  ref,
@@ -2086,11 +2125,11 @@ var TableHead = React3.forwardRef(
2086
2125
  );
2087
2126
  TableHead.displayName = "TableHead";
2088
2127
  var TableCell = React3.forwardRef(
2089
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("td", { ref, className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className), ...props })
2128
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("td", { ref, className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className), ...props })
2090
2129
  );
2091
2130
  TableCell.displayName = "TableCell";
2092
2131
  var TableCaption = React3.forwardRef(
2093
- ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props })
2132
+ ({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props })
2094
2133
  );
2095
2134
  TableCaption.displayName = "TableCaption";
2096
2135
 
@@ -2120,6 +2159,36 @@ function useScrollShadow() {
2120
2159
  return { targetRef, isScrolled };
2121
2160
  }
2122
2161
 
2162
+ // src/components/table/data-table.tsx
2163
+ var import_jsx_runtime22 = require("react/jsx-runtime");
2164
+ var DATA_TABLE_HEAD_CLASS = "h-auto py-2 px-4 text-xs font-medium text-foreground whitespace-nowrap text-left";
2165
+ var DATA_TABLE_CELL_CLASS = "p-4 text-sm font-normal text-foreground align-top min-w-[150px] text-left";
2166
+ var DATA_TABLE_ROW_CLASS = "border-b-brown-30 bg-background/70 hover:bg-secondary";
2167
+ var DATA_TABLE_SCROLL_SHADOW = "0 1px 2px rgb(0 0 0 / 0.01), 0 6px 12px -2px rgb(0 0 0 / 0.03)";
2168
+ function DataTable({ header, children, maxBodyHeight, className }) {
2169
+ const { targetRef, isScrolled } = useScrollShadow();
2170
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2171
+ "div",
2172
+ {
2173
+ ref: targetRef,
2174
+ className: cn("overscroll-none", className),
2175
+ style: maxBodyHeight !== void 0 ? { maxHeight: maxBodyHeight, overflowY: "auto" } : void 0,
2176
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Table, { containerClassName: "overflow-visible", children: [
2177
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
2178
+ TableHeader,
2179
+ {
2180
+ "data-scrolled": isScrolled ? "true" : void 0,
2181
+ className: "sticky top-0 z-10 bg-background/70 backdrop-blur-lg transition-shadow",
2182
+ style: isScrolled ? { boxShadow: DATA_TABLE_SCROLL_SHADOW } : void 0,
2183
+ children: header
2184
+ }
2185
+ ),
2186
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(TableBody, { children })
2187
+ ] })
2188
+ }
2189
+ );
2190
+ }
2191
+
2123
2192
  // src/components/artifacts/table-artifact/table-artifact-content.constants.ts
2124
2193
  var TABLE_STATUS = {
2125
2194
  LOADING: "loading",
@@ -2132,14 +2201,10 @@ var TABLE_STATUS = {
2132
2201
  function formatCell(row, column) {
2133
2202
  return row[column.key] ?? "";
2134
2203
  }
2135
- var HEAD_CLASS = "h-auto py-2 px-4 text-xs font-medium text-foreground whitespace-nowrap text-left";
2136
- var CELL_CLASS = "p-4 text-sm font-normal text-foreground align-top min-w-[150px] text-left";
2137
- var ROW_CLASSES = "border-b-brown-30 bg-background/70 hover:bg-secondary";
2138
- var DATA_ROW_CLASSES = `${ROW_CLASSES} animate-in fade-in duration-300`;
2139
- var SCROLL_SHADOW = "0 1px 2px rgb(0 0 0 / 0.01), 0 6px 12px -2px rgb(0 0 0 / 0.03)";
2204
+ var DATA_ROW_CLASSES = `${DATA_TABLE_ROW_CLASS} animate-in fade-in duration-300`;
2140
2205
 
2141
2206
  // src/components/artifacts/table-artifact/table-artifact-content.tsx
2142
- var import_jsx_runtime21 = require("react/jsx-runtime");
2207
+ var import_jsx_runtime23 = require("react/jsx-runtime");
2143
2208
  function TableArtifactContent({
2144
2209
  columns,
2145
2210
  data,
@@ -2149,50 +2214,45 @@ function TableArtifactContent({
2149
2214
  labels
2150
2215
  }) {
2151
2216
  if (data.status === TABLE_STATUS.ERROR) {
2152
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StatusMessage, { $tone: "error", children: labels.loadError });
2217
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(StatusMessage, { $tone: "error", children: labels.loadError });
2153
2218
  }
2154
2219
  if (data.status === TABLE_STATUS.UNAVAILABLE) {
2155
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StatusMessage, { $tone: "info", children: labels.unavailable });
2220
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(StatusMessage, { $tone: "info", children: labels.unavailable });
2156
2221
  }
2157
2222
  if (data.status === TABLE_STATUS.LOADING) {
2158
2223
  if (typeof knownRowCount === "number" && knownRowCount > 0) {
2159
2224
  const shimmerCount = Math.min(knownRowCount, maxShimmerRows);
2160
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ArtifactTable, { columns, maxBodyHeight, children: renderShimmerRows(columns, shimmerCount) });
2225
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ArtifactTable, { columns, maxBodyHeight, children: renderShimmerRows(columns, shimmerCount) });
2161
2226
  }
2162
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StatusMessage, { $tone: "info", children: labels.loading });
2227
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(StatusMessage, { $tone: "info", children: labels.loading });
2163
2228
  }
2164
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ArtifactTable, { columns, maxBodyHeight, children: data.rows.length === 0 ? renderEmptyRow(columns.length, labels.empty) : renderDataRows(columns, data.rows) });
2229
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ArtifactTable, { columns, maxBodyHeight, children: data.rows.length === 0 ? renderEmptyRow(columns.length, labels.empty) : renderDataRows(columns, data.rows) });
2165
2230
  }
2166
2231
  function ArtifactTable({ columns, maxBodyHeight, children }) {
2167
- const { targetRef, isScrolled } = useScrollShadow();
2168
- 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: [
2169
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
2170
- TableHeader,
2171
- {
2172
- "data-scrolled": isScrolled ? "true" : void 0,
2173
- className: "sticky top-0 z-10 bg-background/70 backdrop-blur-lg transition-shadow",
2174
- style: isScrolled ? { boxShadow: SCROLL_SHADOW } : void 0,
2175
- 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)) })
2176
- }
2177
- ),
2178
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TableBody, { children })
2179
- ] }) });
2232
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2233
+ DataTable,
2234
+ {
2235
+ maxBodyHeight,
2236
+ header: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TableRow, { className: "hover:bg-transparent", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TableHead, { scope: "col", className: DATA_TABLE_HEAD_CLASS, children: column.label }, column.key)) }),
2237
+ children
2238
+ }
2239
+ );
2180
2240
  }
2181
2241
  function renderShimmerRows(columns, count) {
2182
- return Array.from({ length: count }).map((_, index) => /* @__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-${index}`));
2242
+ return Array.from({ length: count }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TableRow, { className: DATA_TABLE_ROW_CLASS, "aria-hidden": "true", children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TableCell, { className: DATA_TABLE_CELL_CLASS, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "block h-3 w-3/4 animate-pulse rounded bg-muted-foreground/20" }) }, column.key)) }, `shimmer-${index}`));
2183
2243
  }
2184
2244
  function renderDataRows(columns, rows) {
2185
- return rows.map((row, index) => /* @__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)) }, index));
2245
+ return rows.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TableRow, { className: DATA_ROW_CLASSES, children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TableCell, { className: DATA_TABLE_CELL_CLASS, children: formatCell(row, column) }, column.key)) }, index));
2186
2246
  }
2187
2247
  function renderEmptyRow(colSpan, emptyMessage) {
2188
- 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 }) });
2248
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TableRow, { className: "hover:bg-transparent", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(TableCell, { colSpan, className: "py-6 text-center text-sm text-muted-foreground", children: emptyMessage }) });
2189
2249
  }
2190
2250
 
2191
2251
  // src/components/artifacts/deck-artifact/deck-markdown.tsx
2192
2252
  var import_react_markdown = __toESM(require("react-markdown"), 1);
2193
2253
  var import_remark_breaks = __toESM(require("remark-breaks"), 1);
2194
2254
  var import_remark_gfm = __toESM(require("remark-gfm"), 1);
2195
- var import_jsx_runtime22 = require("react/jsx-runtime");
2255
+ var import_jsx_runtime24 = require("react/jsx-runtime");
2196
2256
  function sanitize(text) {
2197
2257
  return text.split("\n").filter((line) => {
2198
2258
  const t = line.trim();
@@ -2200,45 +2260,45 @@ function sanitize(text) {
2200
2260
  }).join("\n");
2201
2261
  }
2202
2262
  var MARKDOWN_COMPONENTS = {
2203
- h1: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h1", { className: "text-[30px] font-semibold leading-tight text-foreground mb-3", ...props }),
2204
- h2: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h2", { className: "text-[26px] font-semibold leading-tight text-foreground mb-2", ...props }),
2205
- h3: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h3", { className: "text-[24px] font-semibold leading-tight text-foreground mb-2", ...props }),
2206
- h4: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h4", { className: "text-[24px] font-semibold leading-tight text-foreground mb-2", ...props }),
2207
- h5: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h5", { className: "text-[24px] font-semibold leading-tight text-foreground mb-2", ...props }),
2208
- h6: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("h6", { className: "text-[24px] font-semibold leading-tight text-foreground mb-2", ...props }),
2209
- p: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("p", { className: "text-[22px] leading-relaxed text-foreground my-2", ...props }),
2210
- ul: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("ul", { className: "list-disc pl-7 text-[22px] leading-relaxed text-foreground my-2", ...props }),
2211
- ol: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("ol", { className: "list-decimal pl-7 text-[22px] leading-relaxed text-foreground my-2", ...props }),
2263
+ h1: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h1", { className: "text-[30px] font-semibold leading-tight text-foreground mb-3", ...props }),
2264
+ h2: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h2", { className: "text-[26px] font-semibold leading-tight text-foreground mb-2", ...props }),
2265
+ h3: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h3", { className: "text-[24px] font-semibold leading-tight text-foreground mb-2", ...props }),
2266
+ h4: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h4", { className: "text-[24px] font-semibold leading-tight text-foreground mb-2", ...props }),
2267
+ h5: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h5", { className: "text-[24px] font-semibold leading-tight text-foreground mb-2", ...props }),
2268
+ h6: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h6", { className: "text-[24px] font-semibold leading-tight text-foreground mb-2", ...props }),
2269
+ p: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-[22px] leading-relaxed text-foreground my-2", ...props }),
2270
+ ul: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("ul", { className: "list-disc pl-7 text-[22px] leading-relaxed text-foreground my-2", ...props }),
2271
+ ol: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("ol", { className: "list-decimal pl-7 text-[22px] leading-relaxed text-foreground my-2", ...props }),
2212
2272
  // react-markdown injects list metadata (`ordered` / `index` / `checked`) that must not leak to the DOM.
2213
- li: ({ node: _node, ordered: _ordered, index: _index, checked: _checked, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("li", { className: "my-1", ...props }),
2214
- strong: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("strong", { className: "font-semibold", ...props }),
2215
- em: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("em", { className: "italic", ...props }),
2273
+ li: ({ node: _node, ordered: _ordered, index: _index, checked: _checked, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("li", { className: "my-1", ...props }),
2274
+ strong: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("strong", { className: "font-semibold", ...props }),
2275
+ em: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("em", { className: "italic", ...props }),
2216
2276
  // Gate `<img src>` against an http(s) allowlist. react-markdown v8 percent-encodes the URL but
2217
2277
  // does NOT protocol-filter image src (unlike link href), so an LLM-authored
2218
2278
  // `![](javascript:…)` / `![](data:…)` or a tracking-pixel `![](http://…)` would otherwise render
2219
2279
  // with the raw URL. Unsafe src → render nothing.
2220
- img: ({ node: _node, src, ...props }) => typeof src === "string" && isSafeDownloadUrl(src) ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("img", { src, className: "max-w-full", ...props }) : null,
2280
+ img: ({ node: _node, src, ...props }) => typeof src === "string" && isSafeDownloadUrl(src) ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("img", { src, className: "max-w-full", ...props }) : null,
2221
2281
  a: ({ node: _node, ...props }) => (
2222
2282
  // `rel` is forced AFTER `{...props}` so it can't be overridden — if a consumer ever adds
2223
2283
  // `linkTarget="_blank"`, LLM-authored links still can't reach `window.opener`.
2224
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("a", { className: "underline underline-offset-2", ...props, rel: "noopener noreferrer" })
2284
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("a", { className: "underline underline-offset-2", ...props, rel: "noopener noreferrer" })
2225
2285
  ),
2226
2286
  // react-markdown passes `inline` to distinguish inline code from fenced blocks — strip it from the DOM.
2227
- code: ({ node: _node, inline: _inline, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("code", { className: "rounded bg-muted px-1.5 py-0.5 font-mono text-[18px]", ...props }),
2228
- blockquote: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("blockquote", { className: "border-l-2 border-brown-alpha-12 pl-4 text-[22px] text-muted-foreground", ...props }),
2229
- hr: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("hr", { className: "my-4 border-brown-alpha-12", ...props }),
2230
- table: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "overflow-x-auto", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("table", { className: "w-full border-collapse text-[20px]", ...props }) }),
2287
+ code: ({ node: _node, inline: _inline, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("code", { className: "rounded bg-muted px-1.5 py-0.5 font-mono text-[18px]", ...props }),
2288
+ blockquote: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("blockquote", { className: "border-l-2 border-brown-alpha-12 pl-4 text-[22px] text-muted-foreground", ...props }),
2289
+ hr: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("hr", { className: "my-4 border-brown-alpha-12", ...props }),
2290
+ table: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "overflow-x-auto", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("table", { className: "w-full border-collapse text-[20px]", ...props }) }),
2231
2291
  // react-markdown passes `isHeader` to cell renderers — strip it so it never reaches the DOM.
2232
- th: ({ node: _node, isHeader: _isHeader, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("th", { className: "border-b border-brown-alpha-12 px-3 py-1.5 text-left font-medium", ...props }),
2233
- td: ({ node: _node, isHeader: _isHeader, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("td", { className: "border-b border-brown-alpha-12 px-3 py-1.5", ...props })
2292
+ th: ({ node: _node, isHeader: _isHeader, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("th", { className: "border-b border-brown-alpha-12 px-3 py-1.5 text-left font-medium", ...props }),
2293
+ td: ({ node: _node, isHeader: _isHeader, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("td", { className: "border-b border-brown-alpha-12 px-3 py-1.5", ...props })
2234
2294
  };
2235
2295
  function DeckMarkdown({ markdown }) {
2236
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_markdown.default, { remarkPlugins: [import_remark_gfm.default, import_remark_breaks.default], components: MARKDOWN_COMPONENTS, children: sanitize(markdown) });
2296
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_markdown.default, { remarkPlugins: [import_remark_gfm.default, import_remark_breaks.default], components: MARKDOWN_COMPONENTS, children: sanitize(markdown) });
2237
2297
  }
2238
2298
 
2239
2299
  // src/components/artifacts/deck-artifact/slide-renderers.tsx
2240
2300
  var import_react15 = require("react");
2241
- var import_jsx_runtime23 = require("react/jsx-runtime");
2301
+ var import_jsx_runtime25 = require("react/jsx-runtime");
2242
2302
  function safeLogoUrl(meta) {
2243
2303
  return meta?.logoUrl && isSafeDownloadUrl(meta.logoUrl) ? meta.logoUrl : null;
2244
2304
  }
@@ -2265,7 +2325,7 @@ function SlideFrame({ meta, children, accent = false, bare = false }) {
2265
2325
  const eyebrowColor = accent ? "text-white/70" : "text-brown-60";
2266
2326
  const borderColor = accent ? "border-white/20" : "border-brown-alpha-12";
2267
2327
  const logoSrc = safeLogoUrl(meta);
2268
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { ref: frameRef, className: `relative aspect-[16/9] w-full overflow-hidden rounded-lg ${bg}`, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2328
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { ref: frameRef, className: `relative aspect-[16/9] w-full overflow-hidden rounded-lg ${bg}`, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
2269
2329
  "div",
2270
2330
  {
2271
2331
  className: "absolute left-0 top-0 origin-top-left",
@@ -2276,26 +2336,26 @@ function SlideFrame({ meta, children, accent = false, bare = false }) {
2276
2336
  visibility: scale === null ? "hidden" : "visible"
2277
2337
  },
2278
2338
  children: [
2279
- !bare ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
2339
+ !bare ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
2280
2340
  "div",
2281
2341
  {
2282
2342
  className: `absolute inset-x-0 top-0 flex items-center justify-between border-b px-16 ${borderColor}`,
2283
2343
  style: { height: EYEBROW_H },
2284
2344
  children: [
2285
- meta?.eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: eyebrowColor, style: { ...ACCENT_FONT, fontSize: 22 }, children: meta.eyebrow }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", {}),
2286
- logoSrc ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("img", { src: logoSrc, alt: "", className: "object-contain", style: { maxHeight: CANVAS_LOGO_MAX_H } }) : null
2345
+ meta?.eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: eyebrowColor, style: { ...ACCENT_FONT, fontSize: 22 }, children: meta.eyebrow }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", {}),
2346
+ logoSrc ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("img", { src: logoSrc, alt: "", className: "object-contain", style: { maxHeight: CANVAS_LOGO_MAX_H } }) : null
2287
2347
  ]
2288
2348
  }
2289
2349
  ) : null,
2290
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "absolute inset-x-0 bottom-0 overflow-hidden", style: { top: bare ? 0 : EYEBROW_H }, children })
2350
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "absolute inset-x-0 bottom-0 overflow-hidden", style: { top: bare ? 0 : EYEBROW_H }, children })
2291
2351
  ]
2292
2352
  }
2293
2353
  ) });
2294
2354
  }
2295
2355
  function TitleSlide({ slide, meta }) {
2296
2356
  const logoSrc = safeLogoUrl(meta);
2297
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SlideFrame, { meta, bare: true, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex h-full flex-col justify-center px-24 py-16", children: [
2298
- logoSrc ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2357
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SlideFrame, { meta, bare: true, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex h-full flex-col justify-center px-24 py-16", children: [
2358
+ logoSrc ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2299
2359
  "img",
2300
2360
  {
2301
2361
  src: logoSrc,
@@ -2304,7 +2364,7 @@ function TitleSlide({ slide, meta }) {
2304
2364
  style: { maxHeight: 56, maxWidth: 380 }
2305
2365
  }
2306
2366
  ) : null,
2307
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2367
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2308
2368
  "h1",
2309
2369
  {
2310
2370
  className: "font-bold tracking-tight text-brown-100",
@@ -2312,36 +2372,36 @@ function TitleSlide({ slide, meta }) {
2312
2372
  children: slide.title
2313
2373
  }
2314
2374
  ),
2315
- slide.subtitle ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "mt-7 text-brown-70", style: { ...ACCENT_FONT, fontSize: 34 }, children: slide.subtitle }) : null,
2316
- slide.description ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "mt-4 leading-relaxed text-brown-70", style: { fontSize: 24, maxWidth: 880 }, children: slide.description }) : null,
2317
- meta?.date ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "mt-10 text-brown-70", style: { ...ACCENT_FONT, fontSize: 30 }, children: meta.date }) : null
2375
+ slide.subtitle ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "mt-7 text-brown-70", style: { ...ACCENT_FONT, fontSize: 34 }, children: slide.subtitle }) : null,
2376
+ slide.description ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "mt-4 leading-relaxed text-brown-70", style: { fontSize: 24, maxWidth: 880 }, children: slide.description }) : null,
2377
+ meta?.date ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "mt-10 text-brown-70", style: { ...ACCENT_FONT, fontSize: 30 }, children: meta.date }) : null
2318
2378
  ] }) });
2319
2379
  }
2320
2380
  function AgendaSlide({ slide, meta, labels }) {
2321
2381
  const items = slide.items ?? [];
2322
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SlideFrame, { meta, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "h-full px-24 py-14", children: [
2323
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("h2", { className: "mb-10 font-bold text-brown-90", style: { fontSize: 40 }, children: slide.title || labels.agenda }),
2324
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "flex flex-col", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex items-baseline gap-6 border-b border-brown-alpha-12 py-5", children: [
2325
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "shrink-0 text-indigo-600", style: { ...ACCENT_FONT, fontSize: 28, width: 64 }, children: String(i + 1).padStart(2, "0") }),
2326
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "text-brown-90", style: { fontSize: 28 }, children: item })
2382
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SlideFrame, { meta, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "h-full px-24 py-14", children: [
2383
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { className: "mb-10 font-bold text-brown-90", style: { fontSize: 40 }, children: slide.title || labels.agenda }),
2384
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "flex flex-col", children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex items-baseline gap-6 border-b border-brown-alpha-12 py-5", children: [
2385
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "shrink-0 text-indigo-600", style: { ...ACCENT_FONT, fontSize: 28, width: 64 }, children: String(i + 1).padStart(2, "0") }),
2386
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-brown-90", style: { fontSize: 28 }, children: item })
2327
2387
  ] }, i)) })
2328
2388
  ] }) });
2329
2389
  }
2330
2390
  function SectionSlide({ slide, meta }) {
2331
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SlideFrame, { meta, accent: true, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex h-full flex-col justify-center gap-6 px-24", children: [
2332
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("h2", { className: "font-bold text-white", style: { fontSize: 72, lineHeight: 1.05, maxWidth: 940 }, children: slide.title }),
2333
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "mt-2 bg-white/50", style: { width: 96, height: 5 } })
2391
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SlideFrame, { meta, accent: true, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex h-full flex-col justify-center gap-6 px-24", children: [
2392
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { className: "font-bold text-white", style: { fontSize: 72, lineHeight: 1.05, maxWidth: 940 }, children: slide.title }),
2393
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "mt-2 bg-white/50", style: { width: 96, height: 5 } })
2334
2394
  ] }) });
2335
2395
  }
2336
2396
  function ClosingSlide({ meta, labels }) {
2337
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(SlideFrame, { meta, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "flex h-full flex-col items-center justify-center gap-6 px-24 text-center", children: [
2338
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("h1", { className: "font-bold text-brown-100", style: { fontSize: 72 }, children: labels.thankYou }),
2339
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("p", { className: "text-indigo-600", style: { ...ACCENT_FONT, fontSize: 36 }, children: labels.questions })
2397
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SlideFrame, { meta, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex h-full flex-col items-center justify-center gap-6 px-24 text-center", children: [
2398
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h1", { className: "font-bold text-brown-100", style: { fontSize: 72 }, children: labels.thankYou }),
2399
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-indigo-600", style: { ...ACCENT_FONT, fontSize: 36 }, children: labels.questions })
2340
2400
  ] }) });
2341
2401
  }
2342
2402
 
2343
2403
  // src/components/artifacts/deck-artifact/deck-artifact-content.tsx
2344
- var import_jsx_runtime24 = require("react/jsx-runtime");
2404
+ var import_jsx_runtime26 = require("react/jsx-runtime");
2345
2405
  var TABLE_BLOCK_MAX_SHIMMER_ROWS = 10;
2346
2406
  var TABLE_CHROME_RESERVE = 56;
2347
2407
  var VISUAL_FALLBACK_HEIGHT = 360;
@@ -2371,14 +2431,14 @@ function DeckArtifactContent({
2371
2431
  [slides.length, onNavigate, isControlled, onSlideChange]
2372
2432
  );
2373
2433
  const position = labels.position.replace("{current}", String(current + 1)).replace("{total}", String(slides.length));
2374
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex flex-col gap-3 p-4", children: [
2375
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SlideDispatch, { slide, labels, meta }),
2376
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
2434
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex flex-col gap-3 p-4", children: [
2435
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SlideDispatch, { slide, labels, meta }),
2436
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
2377
2437
  "div",
2378
2438
  {
2379
2439
  className: `flex items-center justify-between border-t pt-2 ${onDark ? "border-white/20" : "border-brown-alpha-12"}`,
2380
2440
  children: [
2381
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2441
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2382
2442
  IconButton,
2383
2443
  {
2384
2444
  icon: IconChevronLeft,
@@ -2389,8 +2449,8 @@ function DeckArtifactContent({
2389
2449
  onClick: () => goTo(current - 1)
2390
2450
  }
2391
2451
  ),
2392
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: `text-xs font-medium ${onDark ? "text-white/70" : "text-brown-70"}`, children: position }),
2393
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2452
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: `text-xs font-medium ${onDark ? "text-white/70" : "text-brown-70"}`, children: position }),
2453
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2394
2454
  IconButton,
2395
2455
  {
2396
2456
  icon: IconChevronRight,
@@ -2410,16 +2470,16 @@ function SlideDispatch({ slide, labels, meta }) {
2410
2470
  const kind = slide.kind ?? deckSlideKinds.CONTENT;
2411
2471
  switch (kind) {
2412
2472
  case deckSlideKinds.TITLE:
2413
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(TitleSlide, { slide, meta });
2473
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(TitleSlide, { slide, meta });
2414
2474
  case deckSlideKinds.AGENDA:
2415
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(AgendaSlide, { slide, meta, labels });
2475
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(AgendaSlide, { slide, meta, labels });
2416
2476
  case deckSlideKinds.SECTION:
2417
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SectionSlide, { slide, meta });
2477
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SectionSlide, { slide, meta });
2418
2478
  case deckSlideKinds.CLOSING:
2419
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ClosingSlide, { meta, labels });
2479
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ClosingSlide, { meta, labels });
2420
2480
  case deckSlideKinds.CONTENT:
2421
2481
  default:
2422
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ContentSlide, { slide, meta, labels });
2482
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ContentSlide, { slide, meta, labels });
2423
2483
  }
2424
2484
  }
2425
2485
  function isVisualBlock(block) {
@@ -2432,25 +2492,25 @@ function ContentSlide({ slide, meta, labels }) {
2432
2492
  (b) => b.type === deckBlockTypes.TEXT
2433
2493
  );
2434
2494
  if (visuals.length === 1 && texts.length > 0) {
2435
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SlideFrame, { meta, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex h-full items-stretch gap-12 px-16 py-12", children: [
2436
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "flex w-[42%] shrink-0 flex-col overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(AutoFit, { children: [
2437
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h3", { className: "mb-5 font-bold leading-tight text-foreground", style: { fontSize: 34 }, children: slide.title }),
2438
- texts.map((block, i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DeckMarkdown, { markdown: block.markdown }, i))
2495
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SlideFrame, { meta, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex h-full items-stretch gap-12 px-16 py-12", children: [
2496
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "flex w-[42%] shrink-0 flex-col overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(AutoFit, { children: [
2497
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("h3", { className: "mb-5 font-bold leading-tight text-foreground", style: { fontSize: 34 }, children: slide.title }),
2498
+ texts.map((block, i) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DeckMarkdown, { markdown: block.markdown }, i))
2439
2499
  ] }) }),
2440
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "min-h-0 min-w-0 flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(FillVisual, { block: visuals[0], labels }) })
2500
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "min-h-0 min-w-0 flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(FillVisual, { block: visuals[0], labels }) })
2441
2501
  ] }) });
2442
2502
  }
2443
2503
  if (visuals.length > 0) {
2444
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SlideFrame, { meta, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "flex h-full flex-col gap-5 px-16 py-10", children: [
2445
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h3", { className: "shrink-0 font-bold leading-tight text-foreground", style: { fontSize: 32 }, children: slide.title }),
2504
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SlideFrame, { meta, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex h-full flex-col gap-5 px-16 py-10", children: [
2505
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("h3", { className: "shrink-0 font-bold leading-tight text-foreground", style: { fontSize: 32 }, children: slide.title }),
2446
2506
  content.map(
2447
- (block, i) => isVisualBlock(block) ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "min-h-0 min-w-0 flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(FillVisual, { block, labels }) }, i) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "shrink-0 overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DeckMarkdown, { markdown: block.markdown }) }, i)
2507
+ (block, i) => isVisualBlock(block) ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "min-h-0 min-w-0 flex-1", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(FillVisual, { block, labels }) }, i) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "shrink-0 overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DeckMarkdown, { markdown: block.markdown }) }, i)
2448
2508
  )
2449
2509
  ] }) });
2450
2510
  }
2451
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SlideFrame, { meta, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "h-full px-24 py-12", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(AutoFit, { children: [
2452
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h3", { className: "mb-6 font-bold leading-tight text-foreground", style: { fontSize: 38 }, children: slide.title }),
2453
- texts.map((block, i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(DeckMarkdown, { markdown: block.markdown }, i))
2511
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SlideFrame, { meta, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "h-full px-24 py-12", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(AutoFit, { children: [
2512
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("h3", { className: "mb-6 font-bold leading-tight text-foreground", style: { fontSize: 38 }, children: slide.title }),
2513
+ texts.map((block, i) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DeckMarkdown, { markdown: block.markdown }, i))
2454
2514
  ] }) }) });
2455
2515
  }
2456
2516
  function AutoFit({ children }) {
@@ -2474,7 +2534,7 @@ function AutoFit({ children }) {
2474
2534
  return () => ro.disconnect();
2475
2535
  }, []);
2476
2536
  const scaled = fit.scale < 1;
2477
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { ref: boxRef, className: "flex h-full min-h-0 w-full flex-col justify-center overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { style: scaled ? { height: fit.height } : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2537
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { ref: boxRef, className: "flex h-full min-h-0 w-full flex-col justify-center overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { style: scaled ? { height: fit.height } : void 0, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2478
2538
  "div",
2479
2539
  {
2480
2540
  ref: contentRef,
@@ -2499,12 +2559,12 @@ function FillVisual({ block, labels }) {
2499
2559
  return () => ro.disconnect();
2500
2560
  }, []);
2501
2561
  const chartLabels = labels.chart ?? DEFAULT_CHART_ARTIFACT_LABELS;
2502
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { ref, className: "h-full min-h-0 w-full overflow-hidden", children: block.type === deckBlockTypes.CHART ? (
2562
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { ref, className: "h-full min-h-0 w-full overflow-hidden", children: block.type === deckBlockTypes.CHART ? (
2503
2563
  // ChartArtifactContent assumes a non-empty rowset (the standalone ChartArtifact guards
2504
2564
  // `rows.length > 0` upstream); mirror that guard here so an empty inline chart shows the
2505
2565
  // localized empty status instead of a blank chart area.
2506
- block.rows.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(StatusMessage, { $tone: "info", children: chartLabels.empty }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { style: { height }, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(ChartArtifactContent, { config: block.config, rows: block.rows, labels: chartLabels }) })
2507
- ) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2566
+ block.rows.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(StatusMessage, { $tone: "info", children: chartLabels.empty }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { style: { height }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ChartArtifactContent, { config: block.config, rows: block.rows, labels: chartLabels }) })
2567
+ ) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2508
2568
  TableArtifactContent,
2509
2569
  {
2510
2570
  columns: block.config.columns,
@@ -2570,7 +2630,7 @@ function isValidDeckBlock(block) {
2570
2630
  }
2571
2631
 
2572
2632
  // src/components/artifacts/deck-artifact/deck-artifact.tsx
2573
- var import_jsx_runtime25 = require("react/jsx-runtime");
2633
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2574
2634
  var TITLE_CLASSES2 = "text-sm font-semibold text-foreground";
2575
2635
  function DeckArtifact({ artifact, labels, callbacks }) {
2576
2636
  const validConfig = isValidDeckConfig(artifact.config);
@@ -2611,9 +2671,9 @@ function DeckArtifact({ artifact, labels, callbacks }) {
2611
2671
  const meta = artifact.config?.meta;
2612
2672
  const handleOpenFullscreen = () => setIsFullscreen(true);
2613
2673
  const handleCloseFullscreen = () => setIsFullscreen(false);
2614
- const actions = /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(ArtifactActions, { ...{ [CAPTURE_EXCLUDE_ATTRIBUTE]: "" }, children: [
2615
- showDownload ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ArtifactDownloadButton, { href: presignedUrl ?? "", label: resolvedLabels.download, onClick: handleDownload }) : null,
2616
- validConfig ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2674
+ const actions = /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(ArtifactActions, { ...{ [CAPTURE_EXCLUDE_ATTRIBUTE]: "" }, children: [
2675
+ showDownload ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ArtifactDownloadButton, { href: presignedUrl ?? "", label: resolvedLabels.download, onClick: handleDownload }) : null,
2676
+ validConfig ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2617
2677
  IconButton,
2618
2678
  {
2619
2679
  icon: IconArrowsMaximize,
@@ -2623,22 +2683,29 @@ function DeckArtifact({ artifact, labels, callbacks }) {
2623
2683
  }
2624
2684
  ) : null
2625
2685
  ] });
2686
+ const heading = /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center gap-2", children: [
2687
+ artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ArtifactTitle, { className: TITLE_CLASSES2, children: artifact.title }) : null,
2688
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { tone: "violet", variant: "subtle", size: "sm", className: "gap-1 py-1", children: [
2689
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Icon, { icon: IconFlask2Filled, size: 12 }),
2690
+ "Labs"
2691
+ ] })
2692
+ ] });
2626
2693
  if (!validConfig) {
2627
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
2628
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
2629
- artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ArtifactTitle, { className: TITLE_CLASSES2, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", {}),
2694
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
2695
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
2696
+ heading,
2630
2697
  actions
2631
2698
  ] }),
2632
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ArtifactContent, { className: "p-0", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(StatusMessage, { $tone: "info", children: resolvedLabels.unavailable }) })
2699
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ArtifactContent, { className: "p-0", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(StatusMessage, { $tone: "info", children: resolvedLabels.unavailable }) })
2633
2700
  ] });
2634
2701
  }
2635
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_jsx_runtime25.Fragment, { children: [
2636
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
2637
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
2638
- artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ArtifactTitle, { className: TITLE_CLASSES2, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", {}),
2702
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
2703
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
2704
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
2705
+ heading,
2639
2706
  actions
2640
2707
  ] }),
2641
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(ArtifactContent, { className: "p-0", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2708
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ArtifactContent, { className: "p-0", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2642
2709
  DeckArtifactContent,
2643
2710
  {
2644
2711
  slides: artifact.config.slides,
@@ -2651,7 +2718,7 @@ function DeckArtifact({ artifact, labels, callbacks }) {
2651
2718
  ) })
2652
2719
  ] }),
2653
2720
  isFullscreen && (0, import_react_dom.createPortal)(
2654
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2721
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2655
2722
  FullscreenOverlay,
2656
2723
  {
2657
2724
  artifact,
@@ -2675,15 +2742,15 @@ function FullscreenOverlay({
2675
2742
  onClose
2676
2743
  }) {
2677
2744
  const meta = artifact.config?.meta;
2678
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2745
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2679
2746
  "div",
2680
2747
  {
2681
2748
  className: "fixed inset-0 z-[2147483647] flex items-center justify-center bg-black/80",
2682
2749
  role: "dialog",
2683
2750
  "aria-modal": "true",
2684
2751
  "aria-label": resolvedLabels.exitFullscreen,
2685
- children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "relative", style: { width: "min(94vw, calc(82vh * 16 / 9))" }, children: [
2686
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
2752
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "relative", style: { width: "min(94vw, calc(82vh * 16 / 9))" }, children: [
2753
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2687
2754
  DeckArtifactContent,
2688
2755
  {
2689
2756
  slides: artifact.config.slides,
@@ -2695,15 +2762,15 @@ function FullscreenOverlay({
2695
2762
  onDark: true
2696
2763
  }
2697
2764
  ),
2698
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
2765
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
2699
2766
  "button",
2700
2767
  {
2701
2768
  className: "absolute -top-10 right-6 flex items-center gap-1.5 text-sm text-white/80 hover:text-white",
2702
2769
  "aria-label": resolvedLabels.exitFullscreen,
2703
2770
  onClick: onClose,
2704
2771
  children: [
2705
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(IconArrowsMinimize, { size: 16 }),
2706
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: resolvedLabels.exitFullscreen })
2772
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(IconArrowsMinimize, { size: 16 }),
2773
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: resolvedLabels.exitFullscreen })
2707
2774
  ]
2708
2775
  }
2709
2776
  )
@@ -2780,7 +2847,7 @@ function useTableArtifactData(presignedUrl, columns) {
2780
2847
  }
2781
2848
 
2782
2849
  // src/components/artifacts/table-artifact/table-artifact.tsx
2783
- var import_jsx_runtime26 = require("react/jsx-runtime");
2850
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2784
2851
  var TITLE_CLASSES3 = "text-sm font-semibold text-foreground";
2785
2852
  var TABLE_MAX_BODY_HEIGHT = 480;
2786
2853
  var MAX_SHIMMER_ROWS = 10;
@@ -2803,10 +2870,10 @@ function TableArtifact({ artifact, labels, callbacks }) {
2803
2870
  const onDownload = callbacks?.onDownload;
2804
2871
  const handleDownloadClick = onDownload ? () => onDownload(artifact) : void 0;
2805
2872
  if (!validConfig || !validColumns) {
2806
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
2807
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
2808
- artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ArtifactTitle, { className: TITLE_CLASSES3, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", {}),
2809
- presignedUrl ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ArtifactActions, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2873
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
2874
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
2875
+ artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ArtifactTitle, { className: TITLE_CLASSES3, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", {}),
2876
+ presignedUrl ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ArtifactActions, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2810
2877
  ArtifactDownloadButton,
2811
2878
  {
2812
2879
  href: presignedUrl,
@@ -2815,17 +2882,17 @@ function TableArtifact({ artifact, labels, callbacks }) {
2815
2882
  }
2816
2883
  ) }) : null
2817
2884
  ] }),
2818
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ArtifactContent, { className: "p-0 overflow-auto", style: { maxHeight: TABLE_MAX_BODY_HEIGHT }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(StatusMessage, { $tone: "info", children: resolvedLabels.unavailable }) })
2885
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ArtifactContent, { className: "p-0 overflow-auto", style: { maxHeight: TABLE_MAX_BODY_HEIGHT }, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(StatusMessage, { $tone: "info", children: resolvedLabels.unavailable }) })
2819
2886
  ] });
2820
2887
  }
2821
2888
  return (
2822
2889
  // The table body owns its own scroll container (`ArtifactTable` inside `TableArtifactContent`).
2823
2890
  // Disable the outer overflow container so only one scroll context exists — this prevents
2824
2891
  // double-scroll nesting and lets `useScrollShadow` find the correct scroll ancestor.
2825
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
2826
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
2827
- artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ArtifactTitle, { className: TITLE_CLASSES3, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", {}),
2828
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ArtifactActions, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2892
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
2893
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
2894
+ artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ArtifactTitle, { className: TITLE_CLASSES3, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", {}),
2895
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ArtifactActions, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2829
2896
  ArtifactDownloadButton,
2830
2897
  {
2831
2898
  href: presignedUrl ?? "",
@@ -2834,7 +2901,7 @@ function TableArtifact({ artifact, labels, callbacks }) {
2834
2901
  }
2835
2902
  ) })
2836
2903
  ] }),
2837
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ArtifactContent, { className: "p-0 overflow-visible", style: { maxHeight: "none" }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2904
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ArtifactContent, { className: "p-0 overflow-visible", style: { maxHeight: "none" }, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2838
2905
  TableArtifactContent,
2839
2906
  {
2840
2907
  columns: validColumns,
@@ -2908,6 +2975,7 @@ function artifactToClipboardText(artifact) {
2908
2975
  @tabler/icons-react/dist/esm/icons/IconFileSpreadsheet.mjs:
2909
2976
  @tabler/icons-react/dist/esm/icons/IconLoader2.mjs:
2910
2977
  @tabler/icons-react/dist/esm/icons/IconPhoto.mjs:
2978
+ @tabler/icons-react/dist/esm/icons/IconFlask2Filled.mjs:
2911
2979
  @tabler/icons-react/dist/esm/tabler-icons-react.mjs:
2912
2980
  (**
2913
2981
  * @license @tabler/icons-react v3.37.1 - MIT