@shapesos/clay 0.19.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.
- package/dist/artifacts.cjs +175 -128
- package/dist/artifacts.cjs.map +1 -1
- package/dist/artifacts.js +3 -1
- package/dist/blocks.cjs +172 -163
- package/dist/blocks.cjs.map +1 -1
- package/dist/blocks.js +4 -4
- package/dist/chat.cjs +172 -163
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.js +5 -5
- package/dist/{chunk-DC5KYT2G.js → chunk-63AGNGKG.js} +17 -3
- package/dist/chunk-63AGNGKG.js.map +1 -0
- package/dist/{chunk-JMHE3Q5K.js → chunk-PISZYS2H.js} +5 -5
- package/dist/{chunk-FCSYVF4Z.js → chunk-PWSEEUVL.js} +2 -2
- package/dist/index.cjs +172 -163
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -7
- package/package.json +1 -1
- package/dist/chunk-DC5KYT2G.js.map +0 -1
- /package/dist/{chunk-JMHE3Q5K.js.map → chunk-PISZYS2H.js.map} +0 -0
- /package/dist/{chunk-FCSYVF4Z.js.map → chunk-PWSEEUVL.js.map} +0 -0
package/dist/index.cjs
CHANGED
|
@@ -18435,6 +18435,41 @@ var ChartArtifactService = {
|
|
|
18435
18435
|
// src/components/artifacts/deck-artifact/deck-artifact.tsx
|
|
18436
18436
|
var import_react17 = require("react");
|
|
18437
18437
|
var import_react_dom = require("react-dom");
|
|
18438
|
+
|
|
18439
|
+
// src/components/badge/badge.tsx
|
|
18440
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
18441
|
+
var BASE = "inline-flex items-center whitespace-nowrap rounded-full";
|
|
18442
|
+
var SIZES = {
|
|
18443
|
+
// `sm` is a uniform scale-down of `md` (text 10/12 of caption): padding and line-height keep
|
|
18444
|
+
// md's proportions (caption is 12px text on a 16px line = 1.333 ratio) so the pill shape matches.
|
|
18445
|
+
md: "px-2.5 py-0.5 text-geist-label-caption-medium",
|
|
18446
|
+
sm: "px-2 py-0.5 text-[11px]/[1.333] font-medium"
|
|
18447
|
+
};
|
|
18448
|
+
var SUBTLE = {
|
|
18449
|
+
neutral: "bg-brown-20 text-brown-70",
|
|
18450
|
+
warning: "bg-orange-50 text-orange-600",
|
|
18451
|
+
violet: "bg-violet-50 text-violet-600"
|
|
18452
|
+
};
|
|
18453
|
+
var OUTLINE = {
|
|
18454
|
+
neutral: "border border-brown-30 bg-white text-brown-100",
|
|
18455
|
+
warning: "border border-orange-200 bg-white text-orange-600",
|
|
18456
|
+
violet: "border border-violet-400 bg-white text-violet-600"
|
|
18457
|
+
};
|
|
18458
|
+
var VARIANTS = {
|
|
18459
|
+
subtle: SUBTLE,
|
|
18460
|
+
outline: OUTLINE
|
|
18461
|
+
};
|
|
18462
|
+
function Badge({
|
|
18463
|
+
variant = "subtle",
|
|
18464
|
+
tone = "neutral",
|
|
18465
|
+
size = "md",
|
|
18466
|
+
className,
|
|
18467
|
+
children
|
|
18468
|
+
}) {
|
|
18469
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: cn(BASE, SIZES[size], VARIANTS[variant][tone], className), children });
|
|
18470
|
+
}
|
|
18471
|
+
|
|
18472
|
+
// src/components/artifacts/deck-artifact/deck-artifact.tsx
|
|
18438
18473
|
init_capture_exclude_attribute();
|
|
18439
18474
|
|
|
18440
18475
|
// src/components/artifacts/deck-artifact/deck-artifact-content.tsx
|
|
@@ -18442,23 +18477,23 @@ var import_react16 = require("react");
|
|
|
18442
18477
|
|
|
18443
18478
|
// src/components/ui/table.tsx
|
|
18444
18479
|
var React3 = __toESM(require("react"), 1);
|
|
18445
|
-
var
|
|
18446
|
-
var Table = React3.forwardRef(({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18480
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
18481
|
+
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 }) }));
|
|
18447
18482
|
Table.displayName = "Table";
|
|
18448
18483
|
var TableHeader = React3.forwardRef(
|
|
18449
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18484
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("thead", { ref, className: cn("[&_tr]:border-b", className), ...props })
|
|
18450
18485
|
);
|
|
18451
18486
|
TableHeader.displayName = "TableHeader";
|
|
18452
18487
|
var TableBody = React3.forwardRef(
|
|
18453
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18488
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("tbody", { ref, className: cn("[&_tr:last-child]:border-0", className), ...props })
|
|
18454
18489
|
);
|
|
18455
18490
|
TableBody.displayName = "TableBody";
|
|
18456
18491
|
var TableFooter = React3.forwardRef(
|
|
18457
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18492
|
+
({ 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 })
|
|
18458
18493
|
);
|
|
18459
18494
|
TableFooter.displayName = "TableFooter";
|
|
18460
18495
|
var TableRow = React3.forwardRef(
|
|
18461
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18496
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
18462
18497
|
"tr",
|
|
18463
18498
|
{
|
|
18464
18499
|
ref,
|
|
@@ -18469,7 +18504,7 @@ var TableRow = React3.forwardRef(
|
|
|
18469
18504
|
);
|
|
18470
18505
|
TableRow.displayName = "TableRow";
|
|
18471
18506
|
var TableHead = React3.forwardRef(
|
|
18472
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18507
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
18473
18508
|
"th",
|
|
18474
18509
|
{
|
|
18475
18510
|
ref,
|
|
@@ -18483,11 +18518,11 @@ var TableHead = React3.forwardRef(
|
|
|
18483
18518
|
);
|
|
18484
18519
|
TableHead.displayName = "TableHead";
|
|
18485
18520
|
var TableCell = React3.forwardRef(
|
|
18486
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18521
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("td", { ref, className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className), ...props })
|
|
18487
18522
|
);
|
|
18488
18523
|
TableCell.displayName = "TableCell";
|
|
18489
18524
|
var TableCaption = React3.forwardRef(
|
|
18490
|
-
({ className, ...props }, ref) => /* @__PURE__ */ (0,
|
|
18525
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("caption", { ref, className: cn("mt-4 text-sm text-muted-foreground", className), ...props })
|
|
18491
18526
|
);
|
|
18492
18527
|
TableCaption.displayName = "TableCaption";
|
|
18493
18528
|
|
|
@@ -18518,21 +18553,21 @@ function useScrollShadow() {
|
|
|
18518
18553
|
}
|
|
18519
18554
|
|
|
18520
18555
|
// src/components/table/data-table.tsx
|
|
18521
|
-
var
|
|
18556
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
18522
18557
|
var DATA_TABLE_HEAD_CLASS = "h-auto py-2 px-4 text-xs font-medium text-foreground whitespace-nowrap text-left";
|
|
18523
18558
|
var DATA_TABLE_CELL_CLASS = "p-4 text-sm font-normal text-foreground align-top min-w-[150px] text-left";
|
|
18524
18559
|
var DATA_TABLE_ROW_CLASS = "border-b-brown-30 bg-background/70 hover:bg-secondary";
|
|
18525
18560
|
var DATA_TABLE_SCROLL_SHADOW = "0 1px 2px rgb(0 0 0 / 0.01), 0 6px 12px -2px rgb(0 0 0 / 0.03)";
|
|
18526
18561
|
function DataTable({ header, children, maxBodyHeight, className }) {
|
|
18527
18562
|
const { targetRef, isScrolled } = useScrollShadow();
|
|
18528
|
-
return /* @__PURE__ */ (0,
|
|
18563
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
18529
18564
|
"div",
|
|
18530
18565
|
{
|
|
18531
18566
|
ref: targetRef,
|
|
18532
18567
|
className: cn("overscroll-none", className),
|
|
18533
18568
|
style: maxBodyHeight !== void 0 ? { maxHeight: maxBodyHeight, overflowY: "auto" } : void 0,
|
|
18534
|
-
children: /* @__PURE__ */ (0,
|
|
18535
|
-
/* @__PURE__ */ (0,
|
|
18569
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(Table, { containerClassName: "overflow-visible", children: [
|
|
18570
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
18536
18571
|
TableHeader,
|
|
18537
18572
|
{
|
|
18538
18573
|
"data-scrolled": isScrolled ? "true" : void 0,
|
|
@@ -18541,7 +18576,7 @@ function DataTable({ header, children, maxBodyHeight, className }) {
|
|
|
18541
18576
|
children: header
|
|
18542
18577
|
}
|
|
18543
18578
|
),
|
|
18544
|
-
/* @__PURE__ */ (0,
|
|
18579
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(TableBody, { children })
|
|
18545
18580
|
] })
|
|
18546
18581
|
}
|
|
18547
18582
|
);
|
|
@@ -18562,7 +18597,7 @@ function formatCell(row, column) {
|
|
|
18562
18597
|
var DATA_ROW_CLASSES = `${DATA_TABLE_ROW_CLASS} animate-in fade-in duration-300`;
|
|
18563
18598
|
|
|
18564
18599
|
// src/components/artifacts/table-artifact/table-artifact-content.tsx
|
|
18565
|
-
var
|
|
18600
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
18566
18601
|
function TableArtifactContent({
|
|
18567
18602
|
columns,
|
|
18568
18603
|
data: data2,
|
|
@@ -18572,45 +18607,45 @@ function TableArtifactContent({
|
|
|
18572
18607
|
labels
|
|
18573
18608
|
}) {
|
|
18574
18609
|
if (data2.status === TABLE_STATUS.ERROR) {
|
|
18575
|
-
return /* @__PURE__ */ (0,
|
|
18610
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(StatusMessage, { $tone: "error", children: labels.loadError });
|
|
18576
18611
|
}
|
|
18577
18612
|
if (data2.status === TABLE_STATUS.UNAVAILABLE) {
|
|
18578
|
-
return /* @__PURE__ */ (0,
|
|
18613
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(StatusMessage, { $tone: "info", children: labels.unavailable });
|
|
18579
18614
|
}
|
|
18580
18615
|
if (data2.status === TABLE_STATUS.LOADING) {
|
|
18581
18616
|
if (typeof knownRowCount === "number" && knownRowCount > 0) {
|
|
18582
18617
|
const shimmerCount = Math.min(knownRowCount, maxShimmerRows);
|
|
18583
|
-
return /* @__PURE__ */ (0,
|
|
18618
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ArtifactTable, { columns, maxBodyHeight, children: renderShimmerRows(columns, shimmerCount) });
|
|
18584
18619
|
}
|
|
18585
|
-
return /* @__PURE__ */ (0,
|
|
18620
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(StatusMessage, { $tone: "info", children: labels.loading });
|
|
18586
18621
|
}
|
|
18587
|
-
return /* @__PURE__ */ (0,
|
|
18622
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(ArtifactTable, { columns, maxBodyHeight, children: data2.rows.length === 0 ? renderEmptyRow(columns.length, labels.empty) : renderDataRows(columns, data2.rows) });
|
|
18588
18623
|
}
|
|
18589
18624
|
function ArtifactTable({ columns, maxBodyHeight, children }) {
|
|
18590
|
-
return /* @__PURE__ */ (0,
|
|
18625
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
18591
18626
|
DataTable,
|
|
18592
18627
|
{
|
|
18593
18628
|
maxBodyHeight,
|
|
18594
|
-
header: /* @__PURE__ */ (0,
|
|
18629
|
+
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)) }),
|
|
18595
18630
|
children
|
|
18596
18631
|
}
|
|
18597
18632
|
);
|
|
18598
18633
|
}
|
|
18599
18634
|
function renderShimmerRows(columns, count) {
|
|
18600
|
-
return Array.from({ length: count }).map((_, index2) => /* @__PURE__ */ (0,
|
|
18635
|
+
return Array.from({ length: count }).map((_, index2) => /* @__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-${index2}`));
|
|
18601
18636
|
}
|
|
18602
18637
|
function renderDataRows(columns, rows) {
|
|
18603
|
-
return rows.map((row, index2) => /* @__PURE__ */ (0,
|
|
18638
|
+
return rows.map((row, index2) => /* @__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)) }, index2));
|
|
18604
18639
|
}
|
|
18605
18640
|
function renderEmptyRow(colSpan, emptyMessage) {
|
|
18606
|
-
return /* @__PURE__ */ (0,
|
|
18641
|
+
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 }) });
|
|
18607
18642
|
}
|
|
18608
18643
|
|
|
18609
18644
|
// src/components/artifacts/deck-artifact/deck-markdown.tsx
|
|
18610
18645
|
var import_react_markdown = __toESM(require("react-markdown"), 1);
|
|
18611
18646
|
var import_remark_breaks = __toESM(require("remark-breaks"), 1);
|
|
18612
18647
|
var import_remark_gfm = __toESM(require("remark-gfm"), 1);
|
|
18613
|
-
var
|
|
18648
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
18614
18649
|
function sanitize(text2) {
|
|
18615
18650
|
return text2.split("\n").filter((line) => {
|
|
18616
18651
|
const t = line.trim();
|
|
@@ -18618,45 +18653,45 @@ function sanitize(text2) {
|
|
|
18618
18653
|
}).join("\n");
|
|
18619
18654
|
}
|
|
18620
18655
|
var MARKDOWN_COMPONENTS = {
|
|
18621
|
-
h1: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18622
|
-
h2: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18623
|
-
h3: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18624
|
-
h4: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18625
|
-
h5: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18626
|
-
h6: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18627
|
-
p: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18628
|
-
ul: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18629
|
-
ol: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18656
|
+
h1: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h1", { className: "text-[30px] font-semibold leading-tight text-foreground mb-3", ...props }),
|
|
18657
|
+
h2: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h2", { className: "text-[26px] font-semibold leading-tight text-foreground mb-2", ...props }),
|
|
18658
|
+
h3: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h3", { className: "text-[24px] font-semibold leading-tight text-foreground mb-2", ...props }),
|
|
18659
|
+
h4: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h4", { className: "text-[24px] font-semibold leading-tight text-foreground mb-2", ...props }),
|
|
18660
|
+
h5: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h5", { className: "text-[24px] font-semibold leading-tight text-foreground mb-2", ...props }),
|
|
18661
|
+
h6: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("h6", { className: "text-[24px] font-semibold leading-tight text-foreground mb-2", ...props }),
|
|
18662
|
+
p: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "text-[22px] leading-relaxed text-foreground my-2", ...props }),
|
|
18663
|
+
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 }),
|
|
18664
|
+
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 }),
|
|
18630
18665
|
// react-markdown injects list metadata (`ordered` / `index` / `checked`) that must not leak to the DOM.
|
|
18631
|
-
li: ({ node: _node, ordered: _ordered, index: _index, checked: _checked, ...props }) => /* @__PURE__ */ (0,
|
|
18632
|
-
strong: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18633
|
-
em: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18666
|
+
li: ({ node: _node, ordered: _ordered, index: _index, checked: _checked, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("li", { className: "my-1", ...props }),
|
|
18667
|
+
strong: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("strong", { className: "font-semibold", ...props }),
|
|
18668
|
+
em: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("em", { className: "italic", ...props }),
|
|
18634
18669
|
// Gate `<img src>` against an http(s) allowlist. react-markdown v8 percent-encodes the URL but
|
|
18635
18670
|
// does NOT protocol-filter image src (unlike link href), so an LLM-authored
|
|
18636
18671
|
// `` / `` or a tracking-pixel `` would otherwise render
|
|
18637
18672
|
// with the raw URL. Unsafe src → render nothing.
|
|
18638
|
-
img: ({ node: _node, src, ...props }) => typeof src === "string" && isSafeDownloadUrl(src) ? /* @__PURE__ */ (0,
|
|
18673
|
+
img: ({ node: _node, src, ...props }) => typeof src === "string" && isSafeDownloadUrl(src) ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("img", { src, className: "max-w-full", ...props }) : null,
|
|
18639
18674
|
a: ({ node: _node, ...props }) => (
|
|
18640
18675
|
// `rel` is forced AFTER `{...props}` so it can't be overridden — if a consumer ever adds
|
|
18641
18676
|
// `linkTarget="_blank"`, LLM-authored links still can't reach `window.opener`.
|
|
18642
|
-
/* @__PURE__ */ (0,
|
|
18677
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("a", { className: "underline underline-offset-2", ...props, rel: "noopener noreferrer" })
|
|
18643
18678
|
),
|
|
18644
18679
|
// react-markdown passes `inline` to distinguish inline code from fenced blocks — strip it from the DOM.
|
|
18645
|
-
code: ({ node: _node, inline: _inline, ...props }) => /* @__PURE__ */ (0,
|
|
18646
|
-
blockquote: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18647
|
-
hr: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18648
|
-
table: ({ node: _node, ...props }) => /* @__PURE__ */ (0,
|
|
18680
|
+
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 }),
|
|
18681
|
+
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 }),
|
|
18682
|
+
hr: ({ node: _node, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("hr", { className: "my-4 border-brown-alpha-12", ...props }),
|
|
18683
|
+
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 }) }),
|
|
18649
18684
|
// react-markdown passes `isHeader` to cell renderers — strip it so it never reaches the DOM.
|
|
18650
|
-
th: ({ node: _node, isHeader: _isHeader, ...props }) => /* @__PURE__ */ (0,
|
|
18651
|
-
td: ({ node: _node, isHeader: _isHeader, ...props }) => /* @__PURE__ */ (0,
|
|
18685
|
+
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 }),
|
|
18686
|
+
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 })
|
|
18652
18687
|
};
|
|
18653
18688
|
function DeckMarkdown({ markdown }) {
|
|
18654
|
-
return /* @__PURE__ */ (0,
|
|
18689
|
+
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) });
|
|
18655
18690
|
}
|
|
18656
18691
|
|
|
18657
18692
|
// src/components/artifacts/deck-artifact/slide-renderers.tsx
|
|
18658
18693
|
var import_react15 = require("react");
|
|
18659
|
-
var
|
|
18694
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
18660
18695
|
function safeLogoUrl(meta) {
|
|
18661
18696
|
return meta?.logoUrl && isSafeDownloadUrl(meta.logoUrl) ? meta.logoUrl : null;
|
|
18662
18697
|
}
|
|
@@ -18683,7 +18718,7 @@ function SlideFrame({ meta, children, accent = false, bare = false }) {
|
|
|
18683
18718
|
const eyebrowColor = accent ? "text-white/70" : "text-brown-60";
|
|
18684
18719
|
const borderColor = accent ? "border-white/20" : "border-brown-alpha-12";
|
|
18685
18720
|
const logoSrc = safeLogoUrl(meta);
|
|
18686
|
-
return /* @__PURE__ */ (0,
|
|
18721
|
+
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)(
|
|
18687
18722
|
"div",
|
|
18688
18723
|
{
|
|
18689
18724
|
className: "absolute left-0 top-0 origin-top-left",
|
|
@@ -18694,26 +18729,26 @@ function SlideFrame({ meta, children, accent = false, bare = false }) {
|
|
|
18694
18729
|
visibility: scale2 === null ? "hidden" : "visible"
|
|
18695
18730
|
},
|
|
18696
18731
|
children: [
|
|
18697
|
-
!bare ? /* @__PURE__ */ (0,
|
|
18732
|
+
!bare ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
18698
18733
|
"div",
|
|
18699
18734
|
{
|
|
18700
18735
|
className: `absolute inset-x-0 top-0 flex items-center justify-between border-b px-16 ${borderColor}`,
|
|
18701
18736
|
style: { height: EYEBROW_H },
|
|
18702
18737
|
children: [
|
|
18703
|
-
meta?.eyebrow ? /* @__PURE__ */ (0,
|
|
18704
|
-
logoSrc ? /* @__PURE__ */ (0,
|
|
18738
|
+
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", {}),
|
|
18739
|
+
logoSrc ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("img", { src: logoSrc, alt: "", className: "object-contain", style: { maxHeight: CANVAS_LOGO_MAX_H } }) : null
|
|
18705
18740
|
]
|
|
18706
18741
|
}
|
|
18707
18742
|
) : null,
|
|
18708
|
-
/* @__PURE__ */ (0,
|
|
18743
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "absolute inset-x-0 bottom-0 overflow-hidden", style: { top: bare ? 0 : EYEBROW_H }, children })
|
|
18709
18744
|
]
|
|
18710
18745
|
}
|
|
18711
18746
|
) });
|
|
18712
18747
|
}
|
|
18713
18748
|
function TitleSlide({ slide, meta }) {
|
|
18714
18749
|
const logoSrc = safeLogoUrl(meta);
|
|
18715
|
-
return /* @__PURE__ */ (0,
|
|
18716
|
-
logoSrc ? /* @__PURE__ */ (0,
|
|
18750
|
+
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: [
|
|
18751
|
+
logoSrc ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
18717
18752
|
"img",
|
|
18718
18753
|
{
|
|
18719
18754
|
src: logoSrc,
|
|
@@ -18722,7 +18757,7 @@ function TitleSlide({ slide, meta }) {
|
|
|
18722
18757
|
style: { maxHeight: 56, maxWidth: 380 }
|
|
18723
18758
|
}
|
|
18724
18759
|
) : null,
|
|
18725
|
-
/* @__PURE__ */ (0,
|
|
18760
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
18726
18761
|
"h1",
|
|
18727
18762
|
{
|
|
18728
18763
|
className: "font-bold tracking-tight text-brown-100",
|
|
@@ -18730,36 +18765,36 @@ function TitleSlide({ slide, meta }) {
|
|
|
18730
18765
|
children: slide.title
|
|
18731
18766
|
}
|
|
18732
18767
|
),
|
|
18733
|
-
slide.subtitle ? /* @__PURE__ */ (0,
|
|
18734
|
-
slide.description ? /* @__PURE__ */ (0,
|
|
18735
|
-
meta?.date ? /* @__PURE__ */ (0,
|
|
18768
|
+
slide.subtitle ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "mt-7 text-brown-70", style: { ...ACCENT_FONT, fontSize: 34 }, children: slide.subtitle }) : null,
|
|
18769
|
+
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,
|
|
18770
|
+
meta?.date ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "mt-10 text-brown-70", style: { ...ACCENT_FONT, fontSize: 30 }, children: meta.date }) : null
|
|
18736
18771
|
] }) });
|
|
18737
18772
|
}
|
|
18738
18773
|
function AgendaSlide({ slide, meta, labels }) {
|
|
18739
18774
|
const items = slide.items ?? [];
|
|
18740
|
-
return /* @__PURE__ */ (0,
|
|
18741
|
-
/* @__PURE__ */ (0,
|
|
18742
|
-
/* @__PURE__ */ (0,
|
|
18743
|
-
/* @__PURE__ */ (0,
|
|
18744
|
-
/* @__PURE__ */ (0,
|
|
18775
|
+
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: [
|
|
18776
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { className: "mb-10 font-bold text-brown-90", style: { fontSize: 40 }, children: slide.title || labels.agenda }),
|
|
18777
|
+
/* @__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: [
|
|
18778
|
+
/* @__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") }),
|
|
18779
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "text-brown-90", style: { fontSize: 28 }, children: item })
|
|
18745
18780
|
] }, i)) })
|
|
18746
18781
|
] }) });
|
|
18747
18782
|
}
|
|
18748
18783
|
function SectionSlide({ slide, meta }) {
|
|
18749
|
-
return /* @__PURE__ */ (0,
|
|
18750
|
-
/* @__PURE__ */ (0,
|
|
18751
|
-
/* @__PURE__ */ (0,
|
|
18784
|
+
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: [
|
|
18785
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { className: "font-bold text-white", style: { fontSize: 72, lineHeight: 1.05, maxWidth: 940 }, children: slide.title }),
|
|
18786
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "mt-2 bg-white/50", style: { width: 96, height: 5 } })
|
|
18752
18787
|
] }) });
|
|
18753
18788
|
}
|
|
18754
18789
|
function ClosingSlide({ meta, labels }) {
|
|
18755
|
-
return /* @__PURE__ */ (0,
|
|
18756
|
-
/* @__PURE__ */ (0,
|
|
18757
|
-
/* @__PURE__ */ (0,
|
|
18790
|
+
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: [
|
|
18791
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h1", { className: "font-bold text-brown-100", style: { fontSize: 72 }, children: labels.thankYou }),
|
|
18792
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "text-indigo-600", style: { ...ACCENT_FONT, fontSize: 36 }, children: labels.questions })
|
|
18758
18793
|
] }) });
|
|
18759
18794
|
}
|
|
18760
18795
|
|
|
18761
18796
|
// src/components/artifacts/deck-artifact/deck-artifact-content.tsx
|
|
18762
|
-
var
|
|
18797
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
18763
18798
|
var TABLE_BLOCK_MAX_SHIMMER_ROWS = 10;
|
|
18764
18799
|
var TABLE_CHROME_RESERVE = 56;
|
|
18765
18800
|
var VISUAL_FALLBACK_HEIGHT = 360;
|
|
@@ -18789,14 +18824,14 @@ function DeckArtifactContent({
|
|
|
18789
18824
|
[slides.length, onNavigate, isControlled, onSlideChange]
|
|
18790
18825
|
);
|
|
18791
18826
|
const position2 = labels.position.replace("{current}", String(current + 1)).replace("{total}", String(slides.length));
|
|
18792
|
-
return /* @__PURE__ */ (0,
|
|
18793
|
-
/* @__PURE__ */ (0,
|
|
18794
|
-
/* @__PURE__ */ (0,
|
|
18827
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "flex flex-col gap-3 p-4", children: [
|
|
18828
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SlideDispatch, { slide, labels, meta }),
|
|
18829
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
18795
18830
|
"div",
|
|
18796
18831
|
{
|
|
18797
18832
|
className: `flex items-center justify-between border-t pt-2 ${onDark ? "border-white/20" : "border-brown-alpha-12"}`,
|
|
18798
18833
|
children: [
|
|
18799
|
-
/* @__PURE__ */ (0,
|
|
18834
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
18800
18835
|
IconButton,
|
|
18801
18836
|
{
|
|
18802
18837
|
icon: IconChevronLeft,
|
|
@@ -18807,8 +18842,8 @@ function DeckArtifactContent({
|
|
|
18807
18842
|
onClick: () => goTo(current - 1)
|
|
18808
18843
|
}
|
|
18809
18844
|
),
|
|
18810
|
-
/* @__PURE__ */ (0,
|
|
18811
|
-
/* @__PURE__ */ (0,
|
|
18845
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: `text-xs font-medium ${onDark ? "text-white/70" : "text-brown-70"}`, children: position2 }),
|
|
18846
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
18812
18847
|
IconButton,
|
|
18813
18848
|
{
|
|
18814
18849
|
icon: IconChevronRight,
|
|
@@ -18828,16 +18863,16 @@ function SlideDispatch({ slide, labels, meta }) {
|
|
|
18828
18863
|
const kind = slide.kind ?? deckSlideKinds.CONTENT;
|
|
18829
18864
|
switch (kind) {
|
|
18830
18865
|
case deckSlideKinds.TITLE:
|
|
18831
|
-
return /* @__PURE__ */ (0,
|
|
18866
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(TitleSlide, { slide, meta });
|
|
18832
18867
|
case deckSlideKinds.AGENDA:
|
|
18833
|
-
return /* @__PURE__ */ (0,
|
|
18868
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(AgendaSlide, { slide, meta, labels });
|
|
18834
18869
|
case deckSlideKinds.SECTION:
|
|
18835
|
-
return /* @__PURE__ */ (0,
|
|
18870
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SectionSlide, { slide, meta });
|
|
18836
18871
|
case deckSlideKinds.CLOSING:
|
|
18837
|
-
return /* @__PURE__ */ (0,
|
|
18872
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ClosingSlide, { meta, labels });
|
|
18838
18873
|
case deckSlideKinds.CONTENT:
|
|
18839
18874
|
default:
|
|
18840
|
-
return /* @__PURE__ */ (0,
|
|
18875
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ContentSlide, { slide, meta, labels });
|
|
18841
18876
|
}
|
|
18842
18877
|
}
|
|
18843
18878
|
function isVisualBlock(block) {
|
|
@@ -18850,25 +18885,25 @@ function ContentSlide({ slide, meta, labels }) {
|
|
|
18850
18885
|
(b) => b.type === deckBlockTypes.TEXT
|
|
18851
18886
|
);
|
|
18852
18887
|
if (visuals.length === 1 && texts.length > 0) {
|
|
18853
|
-
return /* @__PURE__ */ (0,
|
|
18854
|
-
/* @__PURE__ */ (0,
|
|
18855
|
-
/* @__PURE__ */ (0,
|
|
18856
|
-
texts.map((block, i) => /* @__PURE__ */ (0,
|
|
18888
|
+
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: [
|
|
18889
|
+
/* @__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: [
|
|
18890
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("h3", { className: "mb-5 font-bold leading-tight text-foreground", style: { fontSize: 34 }, children: slide.title }),
|
|
18891
|
+
texts.map((block, i) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DeckMarkdown, { markdown: block.markdown }, i))
|
|
18857
18892
|
] }) }),
|
|
18858
|
-
/* @__PURE__ */ (0,
|
|
18893
|
+
/* @__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 }) })
|
|
18859
18894
|
] }) });
|
|
18860
18895
|
}
|
|
18861
18896
|
if (visuals.length > 0) {
|
|
18862
|
-
return /* @__PURE__ */ (0,
|
|
18863
|
-
/* @__PURE__ */ (0,
|
|
18897
|
+
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: [
|
|
18898
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("h3", { className: "shrink-0 font-bold leading-tight text-foreground", style: { fontSize: 32 }, children: slide.title }),
|
|
18864
18899
|
content2.map(
|
|
18865
|
-
(block, i) => isVisualBlock(block) ? /* @__PURE__ */ (0,
|
|
18900
|
+
(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)
|
|
18866
18901
|
)
|
|
18867
18902
|
] }) });
|
|
18868
18903
|
}
|
|
18869
|
-
return /* @__PURE__ */ (0,
|
|
18870
|
-
/* @__PURE__ */ (0,
|
|
18871
|
-
texts.map((block, i) => /* @__PURE__ */ (0,
|
|
18904
|
+
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: [
|
|
18905
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("h3", { className: "mb-6 font-bold leading-tight text-foreground", style: { fontSize: 38 }, children: slide.title }),
|
|
18906
|
+
texts.map((block, i) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(DeckMarkdown, { markdown: block.markdown }, i))
|
|
18872
18907
|
] }) }) });
|
|
18873
18908
|
}
|
|
18874
18909
|
function AutoFit({ children }) {
|
|
@@ -18892,7 +18927,7 @@ function AutoFit({ children }) {
|
|
|
18892
18927
|
return () => ro.disconnect();
|
|
18893
18928
|
}, []);
|
|
18894
18929
|
const scaled = fit.scale < 1;
|
|
18895
|
-
return /* @__PURE__ */ (0,
|
|
18930
|
+
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)(
|
|
18896
18931
|
"div",
|
|
18897
18932
|
{
|
|
18898
18933
|
ref: contentRef,
|
|
@@ -18917,12 +18952,12 @@ function FillVisual({ block, labels }) {
|
|
|
18917
18952
|
return () => ro.disconnect();
|
|
18918
18953
|
}, []);
|
|
18919
18954
|
const chartLabels = labels.chart ?? DEFAULT_CHART_ARTIFACT_LABELS;
|
|
18920
|
-
return /* @__PURE__ */ (0,
|
|
18955
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { ref, className: "h-full min-h-0 w-full overflow-hidden", children: block.type === deckBlockTypes.CHART ? (
|
|
18921
18956
|
// ChartArtifactContent assumes a non-empty rowset (the standalone ChartArtifact guards
|
|
18922
18957
|
// `rows.length > 0` upstream); mirror that guard here so an empty inline chart shows the
|
|
18923
18958
|
// localized empty status instead of a blank chart area.
|
|
18924
|
-
block.rows.length === 0 ? /* @__PURE__ */ (0,
|
|
18925
|
-
) : /* @__PURE__ */ (0,
|
|
18959
|
+
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: height2 }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(ChartArtifactContent, { config: block.config, rows: block.rows, labels: chartLabels }) })
|
|
18960
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
18926
18961
|
TableArtifactContent,
|
|
18927
18962
|
{
|
|
18928
18963
|
columns: block.config.columns,
|
|
@@ -18988,7 +19023,7 @@ function isValidDeckBlock(block) {
|
|
|
18988
19023
|
}
|
|
18989
19024
|
|
|
18990
19025
|
// src/components/artifacts/deck-artifact/deck-artifact.tsx
|
|
18991
|
-
var
|
|
19026
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
18992
19027
|
var TITLE_CLASSES2 = "text-sm font-semibold text-foreground";
|
|
18993
19028
|
function DeckArtifact({ artifact, labels, callbacks }) {
|
|
18994
19029
|
const validConfig = isValidDeckConfig(artifact.config);
|
|
@@ -19029,9 +19064,9 @@ function DeckArtifact({ artifact, labels, callbacks }) {
|
|
|
19029
19064
|
const meta = artifact.config?.meta;
|
|
19030
19065
|
const handleOpenFullscreen = () => setIsFullscreen(true);
|
|
19031
19066
|
const handleCloseFullscreen = () => setIsFullscreen(false);
|
|
19032
|
-
const actions = /* @__PURE__ */ (0,
|
|
19033
|
-
showDownload ? /* @__PURE__ */ (0,
|
|
19034
|
-
validConfig ? /* @__PURE__ */ (0,
|
|
19067
|
+
const actions = /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(ArtifactActions, { ...{ [CAPTURE_EXCLUDE_ATTRIBUTE]: "" }, children: [
|
|
19068
|
+
showDownload ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ArtifactDownloadButton, { href: presignedUrl ?? "", label: resolvedLabels.download, onClick: handleDownload }) : null,
|
|
19069
|
+
validConfig ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
19035
19070
|
IconButton,
|
|
19036
19071
|
{
|
|
19037
19072
|
icon: IconArrowsMaximize,
|
|
@@ -19041,22 +19076,29 @@ function DeckArtifact({ artifact, labels, callbacks }) {
|
|
|
19041
19076
|
}
|
|
19042
19077
|
) : null
|
|
19043
19078
|
] });
|
|
19079
|
+
const heading = /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
19080
|
+
artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ArtifactTitle, { className: TITLE_CLASSES2, children: artifact.title }) : null,
|
|
19081
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Badge, { tone: "violet", variant: "subtle", size: "sm", className: "gap-1 py-1", children: [
|
|
19082
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Icon, { icon: IconFlask2Filled, size: 12 }),
|
|
19083
|
+
"Labs"
|
|
19084
|
+
] })
|
|
19085
|
+
] });
|
|
19044
19086
|
if (!validConfig) {
|
|
19045
|
-
return /* @__PURE__ */ (0,
|
|
19046
|
-
/* @__PURE__ */ (0,
|
|
19047
|
-
|
|
19087
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
|
|
19088
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
|
|
19089
|
+
heading,
|
|
19048
19090
|
actions
|
|
19049
19091
|
] }),
|
|
19050
|
-
/* @__PURE__ */ (0,
|
|
19092
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ArtifactContent, { className: "p-0", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(StatusMessage, { $tone: "info", children: resolvedLabels.unavailable }) })
|
|
19051
19093
|
] });
|
|
19052
19094
|
}
|
|
19053
|
-
return /* @__PURE__ */ (0,
|
|
19054
|
-
/* @__PURE__ */ (0,
|
|
19055
|
-
/* @__PURE__ */ (0,
|
|
19056
|
-
|
|
19095
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
|
|
19096
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
|
|
19097
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
|
|
19098
|
+
heading,
|
|
19057
19099
|
actions
|
|
19058
19100
|
] }),
|
|
19059
|
-
/* @__PURE__ */ (0,
|
|
19101
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(ArtifactContent, { className: "p-0", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
19060
19102
|
DeckArtifactContent,
|
|
19061
19103
|
{
|
|
19062
19104
|
slides: artifact.config.slides,
|
|
@@ -19069,7 +19111,7 @@ function DeckArtifact({ artifact, labels, callbacks }) {
|
|
|
19069
19111
|
) })
|
|
19070
19112
|
] }),
|
|
19071
19113
|
isFullscreen && (0, import_react_dom.createPortal)(
|
|
19072
|
-
/* @__PURE__ */ (0,
|
|
19114
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
19073
19115
|
FullscreenOverlay,
|
|
19074
19116
|
{
|
|
19075
19117
|
artifact,
|
|
@@ -19093,15 +19135,15 @@ function FullscreenOverlay({
|
|
|
19093
19135
|
onClose
|
|
19094
19136
|
}) {
|
|
19095
19137
|
const meta = artifact.config?.meta;
|
|
19096
|
-
return /* @__PURE__ */ (0,
|
|
19138
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
19097
19139
|
"div",
|
|
19098
19140
|
{
|
|
19099
19141
|
className: "fixed inset-0 z-[2147483647] flex items-center justify-center bg-black/80",
|
|
19100
19142
|
role: "dialog",
|
|
19101
19143
|
"aria-modal": "true",
|
|
19102
19144
|
"aria-label": resolvedLabels.exitFullscreen,
|
|
19103
|
-
children: /* @__PURE__ */ (0,
|
|
19104
|
-
/* @__PURE__ */ (0,
|
|
19145
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "relative", style: { width: "min(94vw, calc(82vh * 16 / 9))" }, children: [
|
|
19146
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
19105
19147
|
DeckArtifactContent,
|
|
19106
19148
|
{
|
|
19107
19149
|
slides: artifact.config.slides,
|
|
@@ -19113,15 +19155,15 @@ function FullscreenOverlay({
|
|
|
19113
19155
|
onDark: true
|
|
19114
19156
|
}
|
|
19115
19157
|
),
|
|
19116
|
-
/* @__PURE__ */ (0,
|
|
19158
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
19117
19159
|
"button",
|
|
19118
19160
|
{
|
|
19119
19161
|
className: "absolute -top-10 right-6 flex items-center gap-1.5 text-sm text-white/80 hover:text-white",
|
|
19120
19162
|
"aria-label": resolvedLabels.exitFullscreen,
|
|
19121
19163
|
onClick: onClose,
|
|
19122
19164
|
children: [
|
|
19123
|
-
/* @__PURE__ */ (0,
|
|
19124
|
-
/* @__PURE__ */ (0,
|
|
19165
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(IconArrowsMinimize, { size: 16 }),
|
|
19166
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { children: resolvedLabels.exitFullscreen })
|
|
19125
19167
|
]
|
|
19126
19168
|
}
|
|
19127
19169
|
)
|
|
@@ -19198,7 +19240,7 @@ function useTableArtifactData(presignedUrl, columns) {
|
|
|
19198
19240
|
}
|
|
19199
19241
|
|
|
19200
19242
|
// src/components/artifacts/table-artifact/table-artifact.tsx
|
|
19201
|
-
var
|
|
19243
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
19202
19244
|
var TITLE_CLASSES3 = "text-sm font-semibold text-foreground";
|
|
19203
19245
|
var TABLE_MAX_BODY_HEIGHT = 480;
|
|
19204
19246
|
var MAX_SHIMMER_ROWS = 10;
|
|
@@ -19221,10 +19263,10 @@ function TableArtifact({ artifact, labels, callbacks }) {
|
|
|
19221
19263
|
const onDownload = callbacks?.onDownload;
|
|
19222
19264
|
const handleDownloadClick = onDownload ? () => onDownload(artifact) : void 0;
|
|
19223
19265
|
if (!validConfig || !validColumns) {
|
|
19224
|
-
return /* @__PURE__ */ (0,
|
|
19225
|
-
/* @__PURE__ */ (0,
|
|
19226
|
-
artifact.title ? /* @__PURE__ */ (0,
|
|
19227
|
-
presignedUrl ? /* @__PURE__ */ (0,
|
|
19266
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
|
|
19267
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
|
|
19268
|
+
artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ArtifactTitle, { className: TITLE_CLASSES3, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", {}),
|
|
19269
|
+
presignedUrl ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ArtifactActions, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
19228
19270
|
ArtifactDownloadButton,
|
|
19229
19271
|
{
|
|
19230
19272
|
href: presignedUrl,
|
|
@@ -19233,17 +19275,17 @@ function TableArtifact({ artifact, labels, callbacks }) {
|
|
|
19233
19275
|
}
|
|
19234
19276
|
) }) : null
|
|
19235
19277
|
] }),
|
|
19236
|
-
/* @__PURE__ */ (0,
|
|
19278
|
+
/* @__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 }) })
|
|
19237
19279
|
] });
|
|
19238
19280
|
}
|
|
19239
19281
|
return (
|
|
19240
19282
|
// The table body owns its own scroll container (`ArtifactTable` inside `TableArtifactContent`).
|
|
19241
19283
|
// Disable the outer overflow container so only one scroll context exists — this prevents
|
|
19242
19284
|
// double-scroll nesting and lets `useScrollShadow` find the correct scroll ancestor.
|
|
19243
|
-
/* @__PURE__ */ (0,
|
|
19244
|
-
/* @__PURE__ */ (0,
|
|
19245
|
-
artifact.title ? /* @__PURE__ */ (0,
|
|
19246
|
-
/* @__PURE__ */ (0,
|
|
19285
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Artifact, { className: "shadow-none w-full rounded-2xl bg-background/70", children: [
|
|
19286
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(ArtifactHeader, { className: "bg-background/70", children: [
|
|
19287
|
+
artifact.title ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ArtifactTitle, { className: TITLE_CLASSES3, children: artifact.title }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", {}),
|
|
19288
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ArtifactActions, { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
19247
19289
|
ArtifactDownloadButton,
|
|
19248
19290
|
{
|
|
19249
19291
|
href: presignedUrl ?? "",
|
|
@@ -19252,7 +19294,7 @@ function TableArtifact({ artifact, labels, callbacks }) {
|
|
|
19252
19294
|
}
|
|
19253
19295
|
) })
|
|
19254
19296
|
] }),
|
|
19255
|
-
/* @__PURE__ */ (0,
|
|
19297
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ArtifactContent, { className: "p-0 overflow-visible", style: { maxHeight: "none" }, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
19256
19298
|
TableArtifactContent,
|
|
19257
19299
|
{
|
|
19258
19300
|
columns: validColumns,
|
|
@@ -19295,13 +19337,13 @@ function artifactToClipboardText(artifact) {
|
|
|
19295
19337
|
}
|
|
19296
19338
|
|
|
19297
19339
|
// src/components/blocks/artifact-ref-block/artifact-ref-block.tsx
|
|
19298
|
-
var
|
|
19340
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
19299
19341
|
function ArtifactRefBlock({ block }) {
|
|
19300
19342
|
const { artifact, labels, callbacks } = block.payload;
|
|
19301
19343
|
const entry = ArtifactServices[artifact.type];
|
|
19302
19344
|
if (!entry) return null;
|
|
19303
19345
|
const Component = entry.Component;
|
|
19304
|
-
return /* @__PURE__ */ (0,
|
|
19346
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Component, { artifact, labels, callbacks });
|
|
19305
19347
|
}
|
|
19306
19348
|
|
|
19307
19349
|
// src/components/blocks/block-services/artifact-ref-block-service.ts
|
|
@@ -19319,39 +19361,6 @@ var ArtifactRefBlockService = {
|
|
|
19319
19361
|
// src/components/blocks/notification-draft-block/notification-draft-block.tsx
|
|
19320
19362
|
var import_react20 = require("react");
|
|
19321
19363
|
|
|
19322
|
-
// src/components/badge/badge.tsx
|
|
19323
|
-
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
19324
|
-
var BASE = "inline-flex items-center whitespace-nowrap rounded-full";
|
|
19325
|
-
var SIZES = {
|
|
19326
|
-
// `sm` is a uniform scale-down of `md` (text 10/12 of caption): padding and line-height keep
|
|
19327
|
-
// md's proportions (caption is 12px text on a 16px line = 1.333 ratio) so the pill shape matches.
|
|
19328
|
-
md: "px-2.5 py-0.5 text-geist-label-caption-medium",
|
|
19329
|
-
sm: "px-2 py-0.5 text-[11px]/[1.333] font-medium"
|
|
19330
|
-
};
|
|
19331
|
-
var SUBTLE = {
|
|
19332
|
-
neutral: "bg-brown-20 text-brown-70",
|
|
19333
|
-
warning: "bg-orange-50 text-orange-600",
|
|
19334
|
-
violet: "bg-violet-50 text-violet-600"
|
|
19335
|
-
};
|
|
19336
|
-
var OUTLINE = {
|
|
19337
|
-
neutral: "border border-brown-30 bg-white text-brown-100",
|
|
19338
|
-
warning: "border border-orange-200 bg-white text-orange-600",
|
|
19339
|
-
violet: "border border-violet-400 bg-white text-violet-600"
|
|
19340
|
-
};
|
|
19341
|
-
var VARIANTS = {
|
|
19342
|
-
subtle: SUBTLE,
|
|
19343
|
-
outline: OUTLINE
|
|
19344
|
-
};
|
|
19345
|
-
function Badge({
|
|
19346
|
-
variant = "subtle",
|
|
19347
|
-
tone = "neutral",
|
|
19348
|
-
size = "md",
|
|
19349
|
-
className,
|
|
19350
|
-
children
|
|
19351
|
-
}) {
|
|
19352
|
-
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: cn(BASE, SIZES[size], VARIANTS[variant][tone], className), children });
|
|
19353
|
-
}
|
|
19354
|
-
|
|
19355
19364
|
// src/components/chat/hooks/use-copy-to-clipboard.ts
|
|
19356
19365
|
var import_react19 = require("react");
|
|
19357
19366
|
|