executable-stories-react 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +244 -158
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +18 -1
- package/dist/index.d.ts +18 -1
- package/dist/index.js +243 -158
- package/dist/index.js.map +1 -1
- package/dist/interactive.cjs +328 -244
- package/dist/interactive.cjs.map +1 -1
- package/dist/interactive.js +328 -244
- package/dist/interactive.js.map +1 -1
- package/dist/report-island.global.js +29 -29
- package/dist/ssr.cjs +210 -126
- package/dist/ssr.cjs.map +1 -1
- package/dist/ssr.js +210 -126
- package/dist/ssr.js.map +1 -1
- package/dist/tailwind.css +1 -1
- package/package.json +1 -1
package/dist/interactive.js
CHANGED
|
@@ -225,7 +225,7 @@ function DocLink({ entry }) {
|
|
|
225
225
|
// src/components/doc/DocSection.tsx
|
|
226
226
|
import { marked } from "marked";
|
|
227
227
|
|
|
228
|
-
//
|
|
228
|
+
// ../executable-stories-core/dist/utils/url.js
|
|
229
229
|
function safeUrl(value) {
|
|
230
230
|
if (!value) return void 0;
|
|
231
231
|
const trimmed = value.trim();
|
|
@@ -520,18 +520,101 @@ function ReportStepItem({ step }) {
|
|
|
520
520
|
);
|
|
521
521
|
}
|
|
522
522
|
|
|
523
|
+
// ../executable-stories-core/dist/storyboard.js
|
|
524
|
+
function findScreenshot(entries) {
|
|
525
|
+
for (const entry of entries) {
|
|
526
|
+
if (entry.kind === "screenshot") return entry;
|
|
527
|
+
if (entry.children) {
|
|
528
|
+
const nested = findScreenshot(entry.children);
|
|
529
|
+
if (nested) return nested;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
return void 0;
|
|
533
|
+
}
|
|
534
|
+
function extractStoryboardFrames(scenario) {
|
|
535
|
+
const frames = [];
|
|
536
|
+
for (const step of scenario.steps) {
|
|
537
|
+
const shot = findScreenshot(step.docEntries);
|
|
538
|
+
if (!shot) continue;
|
|
539
|
+
frames.push({
|
|
540
|
+
stepId: step.id,
|
|
541
|
+
stepIndex: step.index,
|
|
542
|
+
keyword: step.keyword,
|
|
543
|
+
text: step.text,
|
|
544
|
+
status: step.status,
|
|
545
|
+
path: shot.path,
|
|
546
|
+
...shot.alt !== void 0 && { alt: shot.alt }
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
return frames;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
// src/components/ReportStoryboard.tsx
|
|
553
|
+
import { jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
554
|
+
var FRAME_GLYPH = {
|
|
555
|
+
passed: "\u2713",
|
|
556
|
+
failed: "\u2717",
|
|
557
|
+
skipped: "\u25CB",
|
|
558
|
+
pending: "\u25CB"
|
|
559
|
+
};
|
|
560
|
+
var FRAME_GLYPH_COLOR = {
|
|
561
|
+
passed: "text-pass",
|
|
562
|
+
failed: "text-fail",
|
|
563
|
+
skipped: "text-skip",
|
|
564
|
+
pending: "text-pend"
|
|
565
|
+
};
|
|
566
|
+
function ReportStoryboard({ scenario }) {
|
|
567
|
+
const frames = extractStoryboardFrames(scenario);
|
|
568
|
+
if (frames.length < 2) return null;
|
|
569
|
+
return /* @__PURE__ */ jsxs11("section", { "data-slot": "storyboard", "aria-label": "Storyboard", className: "mb-3", children: [
|
|
570
|
+
/* @__PURE__ */ jsx18("h4", { className: "mb-1.5 text-xs font-semibold tracking-wide text-muted-foreground uppercase", children: "Storyboard" }),
|
|
571
|
+
/* @__PURE__ */ jsx18("ol", { className: "flex gap-3 overflow-x-auto pb-2", children: frames.map((frame) => /* @__PURE__ */ jsx18(StoryboardFrameItem, { frame }, frame.stepId)) })
|
|
572
|
+
] });
|
|
573
|
+
}
|
|
574
|
+
function StoryboardFrameItem({ frame }) {
|
|
575
|
+
const src = isLocalFsPath(frame.path) ? void 0 : safeImageUrl(frame.path);
|
|
576
|
+
const label = `${frame.keyword} ${frame.text}`;
|
|
577
|
+
return /* @__PURE__ */ jsxs11("li", { className: "w-40 shrink-0", children: [
|
|
578
|
+
/* @__PURE__ */ jsx18(
|
|
579
|
+
"a",
|
|
580
|
+
{
|
|
581
|
+
href: `#${frame.stepId}`,
|
|
582
|
+
"aria-label": `Jump to step: ${label}`,
|
|
583
|
+
className: "block overflow-hidden rounded-md border border-border transition-colors hover:border-ring",
|
|
584
|
+
children: src ? /* @__PURE__ */ jsx18(
|
|
585
|
+
"img",
|
|
586
|
+
{
|
|
587
|
+
src,
|
|
588
|
+
alt: frame.alt ?? label,
|
|
589
|
+
loading: "lazy",
|
|
590
|
+
className: "h-24 w-full bg-muted object-cover object-top"
|
|
591
|
+
}
|
|
592
|
+
) : /* @__PURE__ */ jsx18("span", { className: "flex h-24 w-full items-center justify-center border-b border-dashed border-border bg-muted px-2 text-center text-[0.6875rem] text-muted-foreground", children: "Screenshot unavailable" })
|
|
593
|
+
}
|
|
594
|
+
),
|
|
595
|
+
/* @__PURE__ */ jsxs11("p", { className: "mt-1 flex items-baseline gap-1.5 text-[0.6875rem] leading-snug", children: [
|
|
596
|
+
/* @__PURE__ */ jsx18("span", { "aria-hidden": true, className: cn("shrink-0", FRAME_GLYPH_COLOR[frame.status]), children: FRAME_GLYPH[frame.status] ?? "\u25CB" }),
|
|
597
|
+
/* @__PURE__ */ jsxs11("span", { className: "min-w-0", children: [
|
|
598
|
+
/* @__PURE__ */ jsx18("span", { className: "font-mono font-semibold text-keyword", children: frame.keyword }),
|
|
599
|
+
" ",
|
|
600
|
+
/* @__PURE__ */ jsx18("span", { className: "text-muted-foreground", children: frame.alt ?? frame.text })
|
|
601
|
+
] })
|
|
602
|
+
] })
|
|
603
|
+
] });
|
|
604
|
+
}
|
|
605
|
+
|
|
523
606
|
// src/components/ReportAttachments.tsx
|
|
524
|
-
import { Fragment as Fragment6, jsx as
|
|
607
|
+
import { Fragment as Fragment6, jsx as jsx19, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
525
608
|
function ReportAttachments({ attachments }) {
|
|
526
609
|
if (attachments.length === 0) return null;
|
|
527
610
|
return (
|
|
528
611
|
// role="group" (not a labelled <section>) so multiple scenarios' attachment
|
|
529
612
|
// blocks don't create duplicate "Attachments" region landmarks.
|
|
530
|
-
/* @__PURE__ */
|
|
613
|
+
/* @__PURE__ */ jsx19("div", { role: "group", "aria-label": "Attachments", className: "mt-3 flex flex-col gap-2", children: attachments.map((att, i) => {
|
|
531
614
|
const dataUri = att.contentEncoding === "BASE64" ? `data:${att.mediaType};base64,${att.body}` : `data:${att.mediaType},${encodeURIComponent(att.body)}`;
|
|
532
615
|
const isImage = att.mediaType.startsWith("image/");
|
|
533
|
-
return /* @__PURE__ */
|
|
534
|
-
/* @__PURE__ */
|
|
616
|
+
return /* @__PURE__ */ jsx19("figure", { className: "m-0", children: isImage ? /* @__PURE__ */ jsxs12(Fragment6, { children: [
|
|
617
|
+
/* @__PURE__ */ jsx19(
|
|
535
618
|
"img",
|
|
536
619
|
{
|
|
537
620
|
src: dataUri,
|
|
@@ -540,8 +623,8 @@ function ReportAttachments({ attachments }) {
|
|
|
540
623
|
className: "max-w-full rounded-md border border-border"
|
|
541
624
|
}
|
|
542
625
|
),
|
|
543
|
-
/* @__PURE__ */
|
|
544
|
-
] }) : /* @__PURE__ */
|
|
626
|
+
/* @__PURE__ */ jsx19("figcaption", { className: "mt-1 text-xs text-muted-foreground", children: att.name })
|
|
627
|
+
] }) : /* @__PURE__ */ jsxs12(
|
|
545
628
|
"a",
|
|
546
629
|
{
|
|
547
630
|
href: dataUri,
|
|
@@ -550,7 +633,7 @@ function ReportAttachments({ attachments }) {
|
|
|
550
633
|
children: [
|
|
551
634
|
att.name,
|
|
552
635
|
" ",
|
|
553
|
-
/* @__PURE__ */
|
|
636
|
+
/* @__PURE__ */ jsxs12("span", { className: "text-muted-foreground", children: [
|
|
554
637
|
"(",
|
|
555
638
|
att.mediaType,
|
|
556
639
|
")"
|
|
@@ -638,7 +721,7 @@ function traceWindow(rows) {
|
|
|
638
721
|
}
|
|
639
722
|
|
|
640
723
|
// src/components/ReportTrace.tsx
|
|
641
|
-
import { jsx as
|
|
724
|
+
import { jsx as jsx20, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
642
725
|
var BAR_COLOR = {
|
|
643
726
|
ok: "bg-pass",
|
|
644
727
|
error: "bg-fail",
|
|
@@ -649,8 +732,8 @@ function ReportTrace({ spans }) {
|
|
|
649
732
|
const rows = toTraceRows(spans);
|
|
650
733
|
if (rows.length === 0) return null;
|
|
651
734
|
const { minStartMs, totalMs } = traceWindow(rows);
|
|
652
|
-
return /* @__PURE__ */
|
|
653
|
-
/* @__PURE__ */
|
|
735
|
+
return /* @__PURE__ */ jsxs13("details", { className: "mt-3 rounded-md border border-border bg-muted/30", children: [
|
|
736
|
+
/* @__PURE__ */ jsxs13("summary", { className: "cursor-pointer px-3 py-2 text-xs font-medium text-muted-foreground", children: [
|
|
654
737
|
"Trace (",
|
|
655
738
|
rows.length,
|
|
656
739
|
" span",
|
|
@@ -659,11 +742,11 @@ function ReportTrace({ spans }) {
|
|
|
659
742
|
formatDuration(totalMs),
|
|
660
743
|
")"
|
|
661
744
|
] }),
|
|
662
|
-
/* @__PURE__ */
|
|
745
|
+
/* @__PURE__ */ jsx20("ul", { className: "flex flex-col gap-0.5 px-3 pb-3 font-mono text-[0.6875rem]", children: rows.map((row, i) => {
|
|
663
746
|
const leftPct = (row.startTimeMs - minStartMs) / totalMs * 100;
|
|
664
747
|
const widthPct = Math.max(row.durationMs / totalMs * 100, 0.5);
|
|
665
|
-
return /* @__PURE__ */
|
|
666
|
-
/* @__PURE__ */
|
|
748
|
+
return /* @__PURE__ */ jsxs13("li", { className: "flex items-center gap-2", children: [
|
|
749
|
+
/* @__PURE__ */ jsx20(
|
|
667
750
|
"span",
|
|
668
751
|
{
|
|
669
752
|
className: "min-w-0 flex-1 truncate text-foreground",
|
|
@@ -672,14 +755,14 @@ function ReportTrace({ spans }) {
|
|
|
672
755
|
children: row.name
|
|
673
756
|
}
|
|
674
757
|
),
|
|
675
|
-
/* @__PURE__ */
|
|
758
|
+
/* @__PURE__ */ jsx20("span", { className: "relative h-3 w-1/2 shrink-0 overflow-hidden rounded-sm bg-border/40", children: /* @__PURE__ */ jsx20(
|
|
676
759
|
"span",
|
|
677
760
|
{
|
|
678
761
|
className: cn("absolute top-0 h-full rounded-sm", BAR_COLOR[row.status]),
|
|
679
762
|
style: { left: `${leftPct}%`, width: `${widthPct}%` }
|
|
680
763
|
}
|
|
681
764
|
) }),
|
|
682
|
-
/* @__PURE__ */
|
|
765
|
+
/* @__PURE__ */ jsx20("span", { className: "w-16 shrink-0 text-right text-muted-foreground", children: formatDuration(row.durationMs) })
|
|
683
766
|
] }, `${row.spanId}-${i}`);
|
|
684
767
|
}) })
|
|
685
768
|
] });
|
|
@@ -748,7 +831,7 @@ function diffSinceLastRun(history2, scenarios) {
|
|
|
748
831
|
}
|
|
749
832
|
|
|
750
833
|
// src/components/ScenarioRunHistory.tsx
|
|
751
|
-
import { Fragment as Fragment7, jsx as
|
|
834
|
+
import { Fragment as Fragment7, jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
752
835
|
var MAX_DOTS = 10;
|
|
753
836
|
var DOT_COLOR = {
|
|
754
837
|
passed: "bg-pass",
|
|
@@ -768,16 +851,16 @@ function ScenarioRunHistory({ scenarioId }) {
|
|
|
768
851
|
const recent = entries.slice(-MAX_DOTS);
|
|
769
852
|
const flaky = flakinessOf(recent) === "flaky";
|
|
770
853
|
const summary = flaky ? `${describeRunHistory(recent)} \xB7 Flaky` : describeRunHistory(recent);
|
|
771
|
-
return /* @__PURE__ */
|
|
772
|
-
flaky ? /* @__PURE__ */
|
|
773
|
-
/* @__PURE__ */
|
|
854
|
+
return /* @__PURE__ */ jsxs14(Fragment7, { children: [
|
|
855
|
+
flaky ? /* @__PURE__ */ jsx21(Badge, { variant: "pending", "aria-label": "Flaky: status flips between recent runs", title: summary, children: "Flaky" }) : null,
|
|
856
|
+
/* @__PURE__ */ jsx21(
|
|
774
857
|
"span",
|
|
775
858
|
{
|
|
776
859
|
role: "img",
|
|
777
860
|
"aria-label": `Run history: ${summary}`,
|
|
778
861
|
title: summary,
|
|
779
862
|
className: "flex shrink-0 items-center gap-[3px]",
|
|
780
|
-
children: recent.map((e, i) => /* @__PURE__ */
|
|
863
|
+
children: recent.map((e, i) => /* @__PURE__ */ jsx21(
|
|
781
864
|
"span",
|
|
782
865
|
{
|
|
783
866
|
"aria-hidden": true,
|
|
@@ -994,9 +1077,9 @@ function scenarioPermalink(scenario) {
|
|
|
994
1077
|
|
|
995
1078
|
// src/components/ui/card.tsx
|
|
996
1079
|
import "react";
|
|
997
|
-
import { jsx as
|
|
1080
|
+
import { jsx as jsx22 } from "react/jsx-runtime";
|
|
998
1081
|
function Card({ className, ...props }) {
|
|
999
|
-
return /* @__PURE__ */
|
|
1082
|
+
return /* @__PURE__ */ jsx22(
|
|
1000
1083
|
"div",
|
|
1001
1084
|
{
|
|
1002
1085
|
"data-slot": "card",
|
|
@@ -1009,7 +1092,7 @@ function Card({ className, ...props }) {
|
|
|
1009
1092
|
);
|
|
1010
1093
|
}
|
|
1011
1094
|
function CardHeader({ className, ...props }) {
|
|
1012
|
-
return /* @__PURE__ */
|
|
1095
|
+
return /* @__PURE__ */ jsx22(
|
|
1013
1096
|
"div",
|
|
1014
1097
|
{
|
|
1015
1098
|
"data-slot": "card-header",
|
|
@@ -1022,7 +1105,7 @@ function CardHeader({ className, ...props }) {
|
|
|
1022
1105
|
);
|
|
1023
1106
|
}
|
|
1024
1107
|
function CardContent({ className, ...props }) {
|
|
1025
|
-
return /* @__PURE__ */
|
|
1108
|
+
return /* @__PURE__ */ jsx22(
|
|
1026
1109
|
"div",
|
|
1027
1110
|
{
|
|
1028
1111
|
"data-slot": "card-content",
|
|
@@ -1036,13 +1119,13 @@ function CardContent({ className, ...props }) {
|
|
|
1036
1119
|
import "react";
|
|
1037
1120
|
import { Menu as MenuPrimitive } from "@base-ui/react/menu";
|
|
1038
1121
|
import { CheckIcon } from "lucide-react";
|
|
1039
|
-
import { jsx as
|
|
1122
|
+
import { jsx as jsx23, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
1040
1123
|
var itemClasses = "relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 [&_svg:not([class*='text-'])]:text-muted-foreground";
|
|
1041
1124
|
function DropdownMenu(props) {
|
|
1042
|
-
return /* @__PURE__ */
|
|
1125
|
+
return /* @__PURE__ */ jsx23(MenuPrimitive.Root, { "data-slot": "dropdown-menu", ...props });
|
|
1043
1126
|
}
|
|
1044
1127
|
function DropdownMenuTrigger(props) {
|
|
1045
|
-
return /* @__PURE__ */
|
|
1128
|
+
return /* @__PURE__ */ jsx23(MenuPrimitive.Trigger, { "data-slot": "dropdown-menu-trigger", ...props });
|
|
1046
1129
|
}
|
|
1047
1130
|
function DropdownMenuContent({
|
|
1048
1131
|
className,
|
|
@@ -1050,14 +1133,14 @@ function DropdownMenuContent({
|
|
|
1050
1133
|
sideOffset = 4,
|
|
1051
1134
|
...props
|
|
1052
1135
|
}) {
|
|
1053
|
-
return /* @__PURE__ */
|
|
1136
|
+
return /* @__PURE__ */ jsx23(MenuPrimitive.Portal, { children: /* @__PURE__ */ jsx23(
|
|
1054
1137
|
MenuPrimitive.Positioner,
|
|
1055
1138
|
{
|
|
1056
1139
|
"data-slot": "dropdown-menu-positioner",
|
|
1057
1140
|
className: "z-50",
|
|
1058
1141
|
align,
|
|
1059
1142
|
sideOffset,
|
|
1060
|
-
children: /* @__PURE__ */
|
|
1143
|
+
children: /* @__PURE__ */ jsx23(
|
|
1061
1144
|
MenuPrimitive.Popup,
|
|
1062
1145
|
{
|
|
1063
1146
|
"data-slot": "dropdown-menu-content",
|
|
@@ -1075,7 +1158,7 @@ function DropdownMenuItem({
|
|
|
1075
1158
|
className,
|
|
1076
1159
|
...props
|
|
1077
1160
|
}) {
|
|
1078
|
-
return /* @__PURE__ */
|
|
1161
|
+
return /* @__PURE__ */ jsx23(
|
|
1079
1162
|
MenuPrimitive.Item,
|
|
1080
1163
|
{
|
|
1081
1164
|
"data-slot": "dropdown-menu-item",
|
|
@@ -1087,7 +1170,7 @@ function DropdownMenuItem({
|
|
|
1087
1170
|
|
|
1088
1171
|
// src/components/ReportScenario.tsx
|
|
1089
1172
|
import { LinkIcon, FileTextIcon, SparklesIcon, MoreHorizontalIcon } from "lucide-react";
|
|
1090
|
-
import { jsx as
|
|
1173
|
+
import { jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
1091
1174
|
var STATUS_META = {
|
|
1092
1175
|
passed: { label: "Passed", glyph: "\u2713", glyphColor: "text-pass", badgeVariant: "passed", showPill: false },
|
|
1093
1176
|
failed: { label: "Failed", glyph: "\u2717", glyphColor: "text-fail", badgeVariant: "failed", showPill: true },
|
|
@@ -1103,7 +1186,7 @@ function ReportScenario({ scenario, hideTitle = false }) {
|
|
|
1103
1186
|
const collapsible = collapse !== null && !hideTitle;
|
|
1104
1187
|
const collapsed = collapsible ? collapse.isCollapsed(scenario.id) : false;
|
|
1105
1188
|
const actions = useScenarioActions();
|
|
1106
|
-
return /* @__PURE__ */
|
|
1189
|
+
return /* @__PURE__ */ jsxs16(
|
|
1107
1190
|
Card,
|
|
1108
1191
|
{
|
|
1109
1192
|
id: scenario.id,
|
|
@@ -1111,10 +1194,10 @@ function ReportScenario({ scenario, hideTitle = false }) {
|
|
|
1111
1194
|
...hideTitle ? { "aria-label": `${scenario.title}, ${label}` } : { "aria-labelledby": titleId },
|
|
1112
1195
|
className: "gap-0 py-0",
|
|
1113
1196
|
children: [
|
|
1114
|
-
/* @__PURE__ */
|
|
1115
|
-
/* @__PURE__ */
|
|
1116
|
-
hideTitle ? null : /* @__PURE__ */
|
|
1117
|
-
collapsible ? /* @__PURE__ */
|
|
1197
|
+
/* @__PURE__ */ jsxs16(CardHeader, { className: "px-4 py-3", children: [
|
|
1198
|
+
/* @__PURE__ */ jsxs16("div", { className: cn("flex items-start gap-4", hideTitle ? "justify-end" : "justify-between"), children: [
|
|
1199
|
+
hideTitle ? null : /* @__PURE__ */ jsxs16("h3", { id: titleId, className: "flex items-center gap-2 text-sm font-medium text-foreground", children: [
|
|
1200
|
+
collapsible ? /* @__PURE__ */ jsx24(
|
|
1118
1201
|
"button",
|
|
1119
1202
|
{
|
|
1120
1203
|
type: "button",
|
|
@@ -1123,49 +1206,49 @@ function ReportScenario({ scenario, hideTitle = false }) {
|
|
|
1123
1206
|
"aria-controls": bodyId,
|
|
1124
1207
|
"aria-label": `Toggle ${scenario.title}`,
|
|
1125
1208
|
className: "shrink-0 cursor-pointer text-muted-foreground hover:text-foreground",
|
|
1126
|
-
children: /* @__PURE__ */
|
|
1209
|
+
children: /* @__PURE__ */ jsx24("span", { "aria-hidden": true, className: cn("inline-block text-xs transition-transform", !collapsed && "rotate-90"), children: "\u25B8" })
|
|
1127
1210
|
}
|
|
1128
1211
|
) : null,
|
|
1129
|
-
/* @__PURE__ */
|
|
1130
|
-
/* @__PURE__ */
|
|
1212
|
+
/* @__PURE__ */ jsx24("span", { "aria-hidden": true, className: cn("text-sm leading-none", meta.glyphColor), children: meta.glyph }),
|
|
1213
|
+
/* @__PURE__ */ jsx24("span", { children: scenario.title })
|
|
1131
1214
|
] }),
|
|
1132
|
-
/* @__PURE__ */
|
|
1133
|
-
/* @__PURE__ */
|
|
1134
|
-
scenario.durationMs > 0 ? /* @__PURE__ */
|
|
1135
|
-
meta.showPill ? /* @__PURE__ */
|
|
1136
|
-
actions ? /* @__PURE__ */
|
|
1137
|
-
/* @__PURE__ */
|
|
1215
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex shrink-0 items-center gap-2", children: [
|
|
1216
|
+
/* @__PURE__ */ jsx24(ScenarioRunHistory, { scenarioId: scenario.id }),
|
|
1217
|
+
scenario.durationMs > 0 ? /* @__PURE__ */ jsx24("span", { className: "whitespace-nowrap font-mono text-[0.6875rem] text-muted-foreground", children: formatDuration(scenario.durationMs) }) : null,
|
|
1218
|
+
meta.showPill ? /* @__PURE__ */ jsx24(Badge, { variant: meta.badgeVariant, "aria-label": `Status: ${label}`, children: label }) : /* @__PURE__ */ jsx24("span", { className: "sr-only", children: `Status: ${label}` }),
|
|
1219
|
+
actions ? /* @__PURE__ */ jsxs16(DropdownMenu, { children: [
|
|
1220
|
+
/* @__PURE__ */ jsx24(
|
|
1138
1221
|
DropdownMenuTrigger,
|
|
1139
1222
|
{
|
|
1140
1223
|
"aria-label": `Actions for ${scenario.title}`,
|
|
1141
1224
|
className: "cursor-pointer rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground [&_svg]:size-4",
|
|
1142
|
-
children: /* @__PURE__ */
|
|
1225
|
+
children: /* @__PURE__ */ jsx24(MoreHorizontalIcon, { "aria-hidden": true })
|
|
1143
1226
|
}
|
|
1144
1227
|
),
|
|
1145
|
-
/* @__PURE__ */
|
|
1146
|
-
/* @__PURE__ */
|
|
1147
|
-
/* @__PURE__ */
|
|
1228
|
+
/* @__PURE__ */ jsxs16(DropdownMenuContent, { align: "end", children: [
|
|
1229
|
+
/* @__PURE__ */ jsxs16(DropdownMenuItem, { onClick: () => actions.copyLink(scenario), children: [
|
|
1230
|
+
/* @__PURE__ */ jsx24(LinkIcon, {}),
|
|
1148
1231
|
" Copy link"
|
|
1149
1232
|
] }),
|
|
1150
|
-
/* @__PURE__ */
|
|
1151
|
-
/* @__PURE__ */
|
|
1233
|
+
/* @__PURE__ */ jsxs16(DropdownMenuItem, { onClick: () => actions.copyMarkdown(scenario), children: [
|
|
1234
|
+
/* @__PURE__ */ jsx24(FileTextIcon, {}),
|
|
1152
1235
|
" Copy as Markdown"
|
|
1153
1236
|
] }),
|
|
1154
|
-
/* @__PURE__ */
|
|
1155
|
-
/* @__PURE__ */
|
|
1237
|
+
/* @__PURE__ */ jsxs16(DropdownMenuItem, { onClick: () => actions.copyPrompt(scenario), children: [
|
|
1238
|
+
/* @__PURE__ */ jsx24(SparklesIcon, {}),
|
|
1156
1239
|
" Explain with AI"
|
|
1157
1240
|
] })
|
|
1158
1241
|
] })
|
|
1159
1242
|
] }) : null
|
|
1160
1243
|
] })
|
|
1161
1244
|
] }),
|
|
1162
|
-
scenario.tags.length > 0 || (scenario.tickets?.length ?? 0) > 0 ? /* @__PURE__ */
|
|
1163
|
-
scenario.tags.map((t) => /* @__PURE__ */
|
|
1164
|
-
(scenario.tickets ?? []).map((ticket) => /* @__PURE__ */
|
|
1245
|
+
scenario.tags.length > 0 || (scenario.tickets?.length ?? 0) > 0 ? /* @__PURE__ */ jsxs16("ul", { "aria-label": "Tags and tickets", className: "flex flex-wrap gap-1.5", children: [
|
|
1246
|
+
scenario.tags.map((t) => /* @__PURE__ */ jsx24("li", { children: /* @__PURE__ */ jsx24(Badge, { variant: "tag", children: t }) }, `tag-${t}`)),
|
|
1247
|
+
(scenario.tickets ?? []).map((ticket) => /* @__PURE__ */ jsx24("li", { children: ticket.url ? /* @__PURE__ */ jsx24("a", { href: ticket.url, target: "_blank", rel: "noreferrer noopener", children: /* @__PURE__ */ jsx24(Badge, { variant: "outline", children: ticket.id }) }) : /* @__PURE__ */ jsx24(Badge, { variant: "outline", children: ticket.id }) }, `ticket-${ticket.id}`))
|
|
1165
1248
|
] }) : null
|
|
1166
1249
|
] }),
|
|
1167
|
-
/* @__PURE__ */
|
|
1168
|
-
scenario.errorMessage ? /* @__PURE__ */
|
|
1250
|
+
/* @__PURE__ */ jsxs16(CardContent, { id: bodyId, hidden: collapsed, className: "px-4 pt-0 pb-4", children: [
|
|
1251
|
+
scenario.errorMessage ? /* @__PURE__ */ jsx24(
|
|
1169
1252
|
"pre",
|
|
1170
1253
|
{
|
|
1171
1254
|
role: "alert",
|
|
@@ -1173,10 +1256,11 @@ function ReportScenario({ scenario, hideTitle = false }) {
|
|
|
1173
1256
|
children: scenario.errorMessage
|
|
1174
1257
|
}
|
|
1175
1258
|
) : null,
|
|
1176
|
-
/* @__PURE__ */
|
|
1177
|
-
|
|
1178
|
-
/* @__PURE__ */
|
|
1179
|
-
/* @__PURE__ */
|
|
1259
|
+
/* @__PURE__ */ jsx24(ReportStoryboard, { scenario }),
|
|
1260
|
+
/* @__PURE__ */ jsx24(ReportSteps, { scenario }),
|
|
1261
|
+
scenario.docEntries.length > 0 ? /* @__PURE__ */ jsx24("div", { "data-es-docs": true, className: "mt-3", children: /* @__PURE__ */ jsx24(ReportDocEntries, { entries: scenario.docEntries }) }) : null,
|
|
1262
|
+
/* @__PURE__ */ jsx24(ReportAttachments, { attachments: scenario.attachments }),
|
|
1263
|
+
/* @__PURE__ */ jsx24(ReportTrace, { spans: scenario.otelSpans })
|
|
1180
1264
|
] })
|
|
1181
1265
|
]
|
|
1182
1266
|
}
|
|
@@ -1184,13 +1268,13 @@ function ReportScenario({ scenario, hideTitle = false }) {
|
|
|
1184
1268
|
}
|
|
1185
1269
|
|
|
1186
1270
|
// src/components/ReportScenarioList.tsx
|
|
1187
|
-
import { Fragment as Fragment8, jsx as
|
|
1271
|
+
import { Fragment as Fragment8, jsx as jsx25 } from "react/jsx-runtime";
|
|
1188
1272
|
function ReportScenarioList({ feature }) {
|
|
1189
|
-
return /* @__PURE__ */
|
|
1273
|
+
return /* @__PURE__ */ jsx25(Fragment8, { children: feature.scenarios.map((scenario) => /* @__PURE__ */ jsx25(ReportScenario, { scenario }, scenario.id)) });
|
|
1190
1274
|
}
|
|
1191
1275
|
|
|
1192
1276
|
// src/components/ReportFeature.tsx
|
|
1193
|
-
import { Fragment as Fragment9, jsx as
|
|
1277
|
+
import { Fragment as Fragment9, jsx as jsx26, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
1194
1278
|
function ReportFeature({ feature }) {
|
|
1195
1279
|
const titleId = `${feature.id}-title`;
|
|
1196
1280
|
const bodyId = `${feature.id}-body`;
|
|
@@ -1201,7 +1285,7 @@ function ReportFeature({ feature }) {
|
|
|
1201
1285
|
return (
|
|
1202
1286
|
// Suite = a section heading + a divider, NOT another bordered card. Drops a
|
|
1203
1287
|
// layer of nesting so the scenario cards below read as the primary unit.
|
|
1204
|
-
/* @__PURE__ */
|
|
1288
|
+
/* @__PURE__ */ jsxs17(
|
|
1205
1289
|
"section",
|
|
1206
1290
|
{
|
|
1207
1291
|
id: feature.id,
|
|
@@ -1209,9 +1293,9 @@ function ReportFeature({ feature }) {
|
|
|
1209
1293
|
"aria-labelledby": titleId,
|
|
1210
1294
|
className: "flex flex-col gap-3",
|
|
1211
1295
|
children: [
|
|
1212
|
-
/* @__PURE__ */
|
|
1213
|
-
/* @__PURE__ */
|
|
1214
|
-
/* @__PURE__ */
|
|
1296
|
+
/* @__PURE__ */ jsxs17("div", { className: "flex items-end justify-between gap-4 border-b border-border pb-2", children: [
|
|
1297
|
+
/* @__PURE__ */ jsxs17("div", { className: "min-w-0", children: [
|
|
1298
|
+
/* @__PURE__ */ jsx26("h2", { id: titleId, className: "text-base font-semibold tracking-tight text-foreground", children: collapse ? /* @__PURE__ */ jsxs17(
|
|
1215
1299
|
"button",
|
|
1216
1300
|
{
|
|
1217
1301
|
type: "button",
|
|
@@ -1220,31 +1304,31 @@ function ReportFeature({ feature }) {
|
|
|
1220
1304
|
"aria-controls": bodyId,
|
|
1221
1305
|
className: "flex w-full cursor-pointer items-center gap-2 text-left hover:text-foreground/80",
|
|
1222
1306
|
children: [
|
|
1223
|
-
/* @__PURE__ */
|
|
1224
|
-
/* @__PURE__ */
|
|
1307
|
+
/* @__PURE__ */ jsx26("span", { "aria-hidden": true, className: cn("shrink-0 text-xs text-muted-foreground transition-transform", !collapsed && "rotate-90"), children: "\u25B8" }),
|
|
1308
|
+
/* @__PURE__ */ jsx26("span", { className: "truncate", children: feature.title })
|
|
1225
1309
|
]
|
|
1226
1310
|
}
|
|
1227
1311
|
) : feature.title }),
|
|
1228
|
-
/* @__PURE__ */
|
|
1312
|
+
/* @__PURE__ */ jsx26("p", { className: cn("mt-0.5 truncate font-mono text-xs text-muted-foreground", collapse && "pl-5"), children: feature.sourceFile })
|
|
1229
1313
|
] }),
|
|
1230
|
-
/* @__PURE__ */
|
|
1314
|
+
/* @__PURE__ */ jsxs17(
|
|
1231
1315
|
"p",
|
|
1232
1316
|
{
|
|
1233
1317
|
className: "flex shrink-0 items-center gap-1.5 text-xs text-muted-foreground",
|
|
1234
1318
|
"aria-label": `${s.passed} passed, ${s.failed} failed, ${skipped} skipped`,
|
|
1235
1319
|
children: [
|
|
1236
|
-
/* @__PURE__ */
|
|
1320
|
+
/* @__PURE__ */ jsxs17("span", { children: [
|
|
1237
1321
|
s.passed,
|
|
1238
1322
|
" passed"
|
|
1239
1323
|
] }),
|
|
1240
|
-
/* @__PURE__ */
|
|
1241
|
-
/* @__PURE__ */
|
|
1324
|
+
/* @__PURE__ */ jsx26("span", { "aria-hidden": true, children: "\xB7" }),
|
|
1325
|
+
/* @__PURE__ */ jsxs17("span", { className: cn(s.failed > 0 && "font-medium text-fail"), children: [
|
|
1242
1326
|
s.failed,
|
|
1243
1327
|
" failed"
|
|
1244
1328
|
] }),
|
|
1245
|
-
skipped > 0 ? /* @__PURE__ */
|
|
1246
|
-
/* @__PURE__ */
|
|
1247
|
-
/* @__PURE__ */
|
|
1329
|
+
skipped > 0 ? /* @__PURE__ */ jsxs17(Fragment9, { children: [
|
|
1330
|
+
/* @__PURE__ */ jsx26("span", { "aria-hidden": true, children: "\xB7" }),
|
|
1331
|
+
/* @__PURE__ */ jsxs17("span", { children: [
|
|
1248
1332
|
skipped,
|
|
1249
1333
|
" skipped"
|
|
1250
1334
|
] })
|
|
@@ -1253,7 +1337,7 @@ function ReportFeature({ feature }) {
|
|
|
1253
1337
|
}
|
|
1254
1338
|
)
|
|
1255
1339
|
] }),
|
|
1256
|
-
/* @__PURE__ */
|
|
1340
|
+
/* @__PURE__ */ jsx26("div", { id: bodyId, hidden: collapsed, className: "flex flex-col gap-3", children: /* @__PURE__ */ jsx26(ReportScenarioList, { feature }) })
|
|
1257
1341
|
]
|
|
1258
1342
|
}
|
|
1259
1343
|
)
|
|
@@ -1261,17 +1345,17 @@ function ReportFeature({ feature }) {
|
|
|
1261
1345
|
}
|
|
1262
1346
|
|
|
1263
1347
|
// src/components/ReportFeatureList.tsx
|
|
1264
|
-
import { jsx as
|
|
1348
|
+
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
1265
1349
|
function ReportFeatureList() {
|
|
1266
1350
|
const report = useReport();
|
|
1267
|
-
return /* @__PURE__ */
|
|
1351
|
+
return /* @__PURE__ */ jsx27("div", { className: "flex flex-col gap-8", children: report.features.map((feature) => /* @__PURE__ */ jsx27(ReportFeature, { feature }, feature.id)) });
|
|
1268
1352
|
}
|
|
1269
1353
|
|
|
1270
1354
|
// src/components/ui/empty.tsx
|
|
1271
1355
|
import { cva as cva2 } from "class-variance-authority";
|
|
1272
|
-
import { jsx as
|
|
1356
|
+
import { jsx as jsx28 } from "react/jsx-runtime";
|
|
1273
1357
|
function Empty({ className, ...props }) {
|
|
1274
|
-
return /* @__PURE__ */
|
|
1358
|
+
return /* @__PURE__ */ jsx28(
|
|
1275
1359
|
"div",
|
|
1276
1360
|
{
|
|
1277
1361
|
"data-slot": "empty",
|
|
@@ -1284,7 +1368,7 @@ function Empty({ className, ...props }) {
|
|
|
1284
1368
|
);
|
|
1285
1369
|
}
|
|
1286
1370
|
function EmptyHeader({ className, ...props }) {
|
|
1287
|
-
return /* @__PURE__ */
|
|
1371
|
+
return /* @__PURE__ */ jsx28(
|
|
1288
1372
|
"div",
|
|
1289
1373
|
{
|
|
1290
1374
|
"data-slot": "empty-header",
|
|
@@ -1311,7 +1395,7 @@ var emptyMediaVariants = cva2(
|
|
|
1311
1395
|
}
|
|
1312
1396
|
);
|
|
1313
1397
|
function EmptyTitle({ className, ...props }) {
|
|
1314
|
-
return /* @__PURE__ */
|
|
1398
|
+
return /* @__PURE__ */ jsx28(
|
|
1315
1399
|
"div",
|
|
1316
1400
|
{
|
|
1317
1401
|
"data-slot": "empty-title",
|
|
@@ -1322,16 +1406,16 @@ function EmptyTitle({ className, ...props }) {
|
|
|
1322
1406
|
}
|
|
1323
1407
|
|
|
1324
1408
|
// src/components/ReportEmpty.tsx
|
|
1325
|
-
import { jsx as
|
|
1409
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
|
1326
1410
|
function ReportEmpty({ message }) {
|
|
1327
|
-
return /* @__PURE__ */
|
|
1411
|
+
return /* @__PURE__ */ jsx29(Empty, { "aria-live": "polite", className: "border", children: /* @__PURE__ */ jsx29(EmptyHeader, { children: /* @__PURE__ */ jsx29(EmptyTitle, { children: message ?? "No scenarios in this report." }) }) });
|
|
1328
1412
|
}
|
|
1329
1413
|
|
|
1330
1414
|
// src/components/ReportSummary.tsx
|
|
1331
|
-
import { jsx as
|
|
1415
|
+
import { jsx as jsx30, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1332
1416
|
function ReportSummary({ className }) {
|
|
1333
1417
|
const report = useReport();
|
|
1334
|
-
return /* @__PURE__ */
|
|
1418
|
+
return /* @__PURE__ */ jsx30(
|
|
1335
1419
|
ReportSummaryView,
|
|
1336
1420
|
{
|
|
1337
1421
|
summary: report.summary,
|
|
@@ -1357,7 +1441,7 @@ function ReportSummaryView({ summary, className, ariaLabel }) {
|
|
|
1357
1441
|
if (summary.pending > 0) {
|
|
1358
1442
|
cards.push({ status: "pending", label: "Pending", value: summary.pending });
|
|
1359
1443
|
}
|
|
1360
|
-
return /* @__PURE__ */
|
|
1444
|
+
return /* @__PURE__ */ jsx30(
|
|
1361
1445
|
"dl",
|
|
1362
1446
|
{
|
|
1363
1447
|
className: cn(
|
|
@@ -1370,17 +1454,17 @@ function ReportSummaryView({ summary, className, ariaLabel }) {
|
|
|
1370
1454
|
"aria-label": ariaLabel,
|
|
1371
1455
|
children: cards.map((c) => {
|
|
1372
1456
|
const tone = TONE[c.status];
|
|
1373
|
-
return /* @__PURE__ */
|
|
1457
|
+
return /* @__PURE__ */ jsxs18(
|
|
1374
1458
|
"div",
|
|
1375
1459
|
{
|
|
1376
1460
|
"data-status": c.status,
|
|
1377
1461
|
className: "rounded-lg border bg-card px-4 py-3",
|
|
1378
1462
|
children: [
|
|
1379
|
-
/* @__PURE__ */
|
|
1380
|
-
/* @__PURE__ */
|
|
1463
|
+
/* @__PURE__ */ jsxs18("dt", { className: "flex items-center gap-1.5 font-mono text-[11px] font-medium uppercase tracking-wider text-muted-foreground", children: [
|
|
1464
|
+
/* @__PURE__ */ jsx30("span", { className: cn("size-1.5 shrink-0 rounded-full", tone.dot), "aria-hidden": "true" }),
|
|
1381
1465
|
c.label
|
|
1382
1466
|
] }),
|
|
1383
|
-
/* @__PURE__ */
|
|
1467
|
+
/* @__PURE__ */ jsx30("dd", { className: cn("mt-2 text-3xl font-semibold leading-none tracking-tight tabular-nums", tone.num), children: c.value })
|
|
1384
1468
|
]
|
|
1385
1469
|
},
|
|
1386
1470
|
c.status
|
|
@@ -1440,7 +1524,7 @@ function prUrl(ci) {
|
|
|
1440
1524
|
}
|
|
1441
1525
|
|
|
1442
1526
|
// src/components/ReportMeta.tsx
|
|
1443
|
-
import { jsx as
|
|
1527
|
+
import { jsx as jsx31, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1444
1528
|
function ReportMeta() {
|
|
1445
1529
|
const report = useReport();
|
|
1446
1530
|
const items = [];
|
|
@@ -1463,13 +1547,13 @@ function ReportMeta() {
|
|
|
1463
1547
|
const short = sha.slice(0, 8);
|
|
1464
1548
|
items.push({
|
|
1465
1549
|
label: "Commit",
|
|
1466
|
-
value: url ? /* @__PURE__ */
|
|
1550
|
+
value: url ? /* @__PURE__ */ jsx31("a", { href: url, target: "_blank", rel: "noreferrer noopener", className: linkClass, children: short }) : short
|
|
1467
1551
|
});
|
|
1468
1552
|
}
|
|
1469
1553
|
if (report.ci) {
|
|
1470
1554
|
items.push({
|
|
1471
1555
|
label: "CI",
|
|
1472
|
-
value: report.ci.url ? /* @__PURE__ */
|
|
1556
|
+
value: report.ci.url ? /* @__PURE__ */ jsxs19("a", { href: report.ci.url, target: "_blank", rel: "noreferrer noopener", className: linkClass, children: [
|
|
1473
1557
|
ciDisplayName(report.ci.name),
|
|
1474
1558
|
report.ci.buildNumber ? ` #${report.ci.buildNumber}` : ""
|
|
1475
1559
|
] }) : `${ciDisplayName(report.ci.name)}${report.ci.buildNumber ? ` #${report.ci.buildNumber}` : ""}`
|
|
@@ -1480,7 +1564,7 @@ function ReportMeta() {
|
|
|
1480
1564
|
const label = `#${report.ci.prNumber}`;
|
|
1481
1565
|
items.push({
|
|
1482
1566
|
label: "PR",
|
|
1483
|
-
value: url ? /* @__PURE__ */
|
|
1567
|
+
value: url ? /* @__PURE__ */ jsx31("a", { href: url, target: "_blank", rel: "noreferrer noopener", className: linkClass, children: label }) : label
|
|
1484
1568
|
});
|
|
1485
1569
|
}
|
|
1486
1570
|
if (items.length === 0) return null;
|
|
@@ -1488,50 +1572,50 @@ function ReportMeta() {
|
|
|
1488
1572
|
// Run metadata is useful but secondary to "what failed" — tuck it into a
|
|
1489
1573
|
// collapsed disclosure so it doesn't push the result down. Native <details>
|
|
1490
1574
|
// so it works with no JS (the SSR/no-hydration report still toggles).
|
|
1491
|
-
/* @__PURE__ */
|
|
1492
|
-
/* @__PURE__ */
|
|
1493
|
-
/* @__PURE__ */
|
|
1575
|
+
/* @__PURE__ */ jsxs19("details", { "data-es-meta-card": true, className: "es-run-details group rounded-lg border border-border bg-card text-xs", children: [
|
|
1576
|
+
/* @__PURE__ */ jsxs19("summary", { className: "flex cursor-pointer list-none select-none items-center gap-1.5 px-4 py-2 font-medium text-muted-foreground [&::-webkit-details-marker]:hidden", children: [
|
|
1577
|
+
/* @__PURE__ */ jsx31("span", { "aria-hidden": true, className: "text-xs transition-transform group-open:rotate-90", children: "\u25B8" }),
|
|
1494
1578
|
"Run details"
|
|
1495
1579
|
] }),
|
|
1496
|
-
/* @__PURE__ */
|
|
1497
|
-
/* @__PURE__ */
|
|
1498
|
-
/* @__PURE__ */
|
|
1580
|
+
/* @__PURE__ */ jsx31("dl", { className: "flex flex-wrap gap-x-5 gap-y-2 border-t border-border px-4 py-3 text-muted-foreground", "aria-label": "Run metadata", children: items.map((item) => /* @__PURE__ */ jsxs19("div", { className: "flex items-baseline gap-1.5", children: [
|
|
1581
|
+
/* @__PURE__ */ jsx31("dt", { className: "font-medium", children: item.label }),
|
|
1582
|
+
/* @__PURE__ */ jsx31("dd", { className: "font-mono text-foreground", children: item.value })
|
|
1499
1583
|
] }, item.label)) })
|
|
1500
1584
|
] })
|
|
1501
1585
|
);
|
|
1502
1586
|
}
|
|
1503
1587
|
|
|
1504
1588
|
// src/components/ReportSchemaError.tsx
|
|
1505
|
-
import { jsx as
|
|
1589
|
+
import { jsx as jsx32, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1506
1590
|
function ReportSchemaError({ error }) {
|
|
1507
|
-
return /* @__PURE__ */
|
|
1508
|
-
/* @__PURE__ */
|
|
1509
|
-
/* @__PURE__ */
|
|
1510
|
-
error.code === "SCHEMA_VERSION_MISMATCH" ? /* @__PURE__ */
|
|
1591
|
+
return /* @__PURE__ */ jsxs20("section", { className: "es-schema-error", role: "alert", "aria-live": "assertive", children: [
|
|
1592
|
+
/* @__PURE__ */ jsx32("p", { children: /* @__PURE__ */ jsx32("strong", { children: "Report could not be displayed." }) }),
|
|
1593
|
+
/* @__PURE__ */ jsx32("p", { children: error.message }),
|
|
1594
|
+
error.code === "SCHEMA_VERSION_MISMATCH" ? /* @__PURE__ */ jsxs20("p", { children: [
|
|
1511
1595
|
"The report bundle is newer than this version of ",
|
|
1512
|
-
/* @__PURE__ */
|
|
1596
|
+
/* @__PURE__ */ jsx32("code", { children: "executable-stories-react" }),
|
|
1513
1597
|
". Upgrade the package, or regenerate the report with an older formatters CLI."
|
|
1514
1598
|
] }) : null,
|
|
1515
|
-
error.issues && error.issues.length > 0 ? /* @__PURE__ */
|
|
1516
|
-
/* @__PURE__ */
|
|
1599
|
+
error.issues && error.issues.length > 0 ? /* @__PURE__ */ jsxs20("details", { children: [
|
|
1600
|
+
/* @__PURE__ */ jsxs20("summary", { children: [
|
|
1517
1601
|
error.issues.length,
|
|
1518
1602
|
" validation issue",
|
|
1519
1603
|
error.issues.length === 1 ? "" : "s"
|
|
1520
1604
|
] }),
|
|
1521
|
-
/* @__PURE__ */
|
|
1605
|
+
/* @__PURE__ */ jsx32("pre", { children: error.issues.slice(0, 20).map((i) => `${i.path}: ${i.message}`).join("\n") })
|
|
1522
1606
|
] }) : null
|
|
1523
1607
|
] });
|
|
1524
1608
|
}
|
|
1525
1609
|
|
|
1526
1610
|
// src/components/ReportShell.tsx
|
|
1527
|
-
import { Fragment as Fragment10, jsx as
|
|
1611
|
+
import { Fragment as Fragment10, jsx as jsx33, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
1528
1612
|
function ReportErrorShell({
|
|
1529
1613
|
error,
|
|
1530
1614
|
className,
|
|
1531
1615
|
title,
|
|
1532
1616
|
dataTheme
|
|
1533
1617
|
}) {
|
|
1534
|
-
return /* @__PURE__ */
|
|
1618
|
+
return /* @__PURE__ */ jsx33("main", { className: cn("es-report", className), "aria-label": title ?? "Test report", "data-theme": dataTheme, children: /* @__PURE__ */ jsx33(ReportSchemaError, { error }) });
|
|
1535
1619
|
}
|
|
1536
1620
|
|
|
1537
1621
|
// src/interactive/ReportInteractive.tsx
|
|
@@ -1540,12 +1624,12 @@ import { Monitor, Moon, Sun } from "lucide-react";
|
|
|
1540
1624
|
// src/components/ui/switch.tsx
|
|
1541
1625
|
import "react";
|
|
1542
1626
|
import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
|
|
1543
|
-
import { jsx as
|
|
1627
|
+
import { jsx as jsx34 } from "react/jsx-runtime";
|
|
1544
1628
|
function Switch({
|
|
1545
1629
|
className,
|
|
1546
1630
|
...props
|
|
1547
1631
|
}) {
|
|
1548
|
-
return /* @__PURE__ */
|
|
1632
|
+
return /* @__PURE__ */ jsx34(
|
|
1549
1633
|
SwitchPrimitive.Root,
|
|
1550
1634
|
{
|
|
1551
1635
|
"data-slot": "switch",
|
|
@@ -1554,7 +1638,7 @@ function Switch({
|
|
|
1554
1638
|
className
|
|
1555
1639
|
),
|
|
1556
1640
|
...props,
|
|
1557
|
-
children: /* @__PURE__ */
|
|
1641
|
+
children: /* @__PURE__ */ jsx34(
|
|
1558
1642
|
SwitchPrimitive.Thumb,
|
|
1559
1643
|
{
|
|
1560
1644
|
"data-slot": "switch-thumb",
|
|
@@ -1570,7 +1654,7 @@ import * as React5 from "react";
|
|
|
1570
1654
|
import { ToggleGroup as ToggleGroupPrimitive } from "@base-ui/react/toggle-group";
|
|
1571
1655
|
import { Toggle as TogglePrimitive } from "@base-ui/react/toggle";
|
|
1572
1656
|
import { cva as cva3 } from "class-variance-authority";
|
|
1573
|
-
import { jsx as
|
|
1657
|
+
import { jsx as jsx35 } from "react/jsx-runtime";
|
|
1574
1658
|
var toggleItemVariants = cva3(
|
|
1575
1659
|
"inline-flex items-center justify-center gap-1.5 rounded-md font-medium whitespace-nowrap text-muted-foreground transition-[color,background-color,box-shadow] outline-none hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[pressed]:bg-background data-[pressed]:text-foreground data-[pressed]:shadow-sm [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
1576
1660
|
{
|
|
@@ -1592,13 +1676,13 @@ function ToggleGroup({
|
|
|
1592
1676
|
children,
|
|
1593
1677
|
...props
|
|
1594
1678
|
}) {
|
|
1595
|
-
return /* @__PURE__ */
|
|
1679
|
+
return /* @__PURE__ */ jsx35(
|
|
1596
1680
|
ToggleGroupPrimitive,
|
|
1597
1681
|
{
|
|
1598
1682
|
"data-slot": "toggle-group",
|
|
1599
1683
|
className: cn("flex w-fit items-center gap-0.5 rounded-lg bg-muted p-0.5", className),
|
|
1600
1684
|
...props,
|
|
1601
|
-
children: /* @__PURE__ */
|
|
1685
|
+
children: /* @__PURE__ */ jsx35(ToggleGroupContext.Provider, { value: { size }, children })
|
|
1602
1686
|
}
|
|
1603
1687
|
);
|
|
1604
1688
|
}
|
|
@@ -1609,7 +1693,7 @@ function ToggleGroupItem({
|
|
|
1609
1693
|
...props
|
|
1610
1694
|
}) {
|
|
1611
1695
|
const context = React5.useContext(ToggleGroupContext);
|
|
1612
|
-
return /* @__PURE__ */
|
|
1696
|
+
return /* @__PURE__ */ jsx35(
|
|
1613
1697
|
TogglePrimitive,
|
|
1614
1698
|
{
|
|
1615
1699
|
"data-slot": "toggle-group-item",
|
|
@@ -1629,9 +1713,9 @@ import { Search } from "lucide-react";
|
|
|
1629
1713
|
|
|
1630
1714
|
// src/components/ui/input.tsx
|
|
1631
1715
|
import "react";
|
|
1632
|
-
import { jsx as
|
|
1716
|
+
import { jsx as jsx36 } from "react/jsx-runtime";
|
|
1633
1717
|
function Input({ className, type, ...props }) {
|
|
1634
|
-
return /* @__PURE__ */
|
|
1718
|
+
return /* @__PURE__ */ jsx36(
|
|
1635
1719
|
"input",
|
|
1636
1720
|
{
|
|
1637
1721
|
type,
|
|
@@ -1648,7 +1732,7 @@ function Input({ className, type, ...props }) {
|
|
|
1648
1732
|
}
|
|
1649
1733
|
|
|
1650
1734
|
// src/interactive/ReportSearch.tsx
|
|
1651
|
-
import { jsx as
|
|
1735
|
+
import { jsx as jsx37, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
1652
1736
|
var ReportSearch = forwardRef(
|
|
1653
1737
|
function ReportSearch2(props, ref) {
|
|
1654
1738
|
const {
|
|
@@ -1670,17 +1754,17 @@ var ReportSearch = forwardRef(
|
|
|
1670
1754
|
e.preventDefault();
|
|
1671
1755
|
}
|
|
1672
1756
|
}
|
|
1673
|
-
return /* @__PURE__ */
|
|
1674
|
-
/* @__PURE__ */
|
|
1675
|
-
/* @__PURE__ */
|
|
1676
|
-
/* @__PURE__ */
|
|
1757
|
+
return /* @__PURE__ */ jsxs22("div", { className: cn("es-search flex flex-col gap-1", className), children: [
|
|
1758
|
+
/* @__PURE__ */ jsx37("label", { htmlFor: inputId, className: "sr-only", children: "Search" }),
|
|
1759
|
+
/* @__PURE__ */ jsxs22("div", { className: "relative w-full sm:w-72", children: [
|
|
1760
|
+
/* @__PURE__ */ jsx37(
|
|
1677
1761
|
Search,
|
|
1678
1762
|
{
|
|
1679
1763
|
"aria-hidden": true,
|
|
1680
1764
|
className: "pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground"
|
|
1681
1765
|
}
|
|
1682
1766
|
),
|
|
1683
|
-
/* @__PURE__ */
|
|
1767
|
+
/* @__PURE__ */ jsx37(
|
|
1684
1768
|
Input,
|
|
1685
1769
|
{
|
|
1686
1770
|
ref,
|
|
@@ -1697,7 +1781,7 @@ var ReportSearch = forwardRef(
|
|
|
1697
1781
|
}
|
|
1698
1782
|
)
|
|
1699
1783
|
] }),
|
|
1700
|
-
showCounts ? /* @__PURE__ */
|
|
1784
|
+
showCounts ? /* @__PURE__ */ jsxs22(
|
|
1701
1785
|
"span",
|
|
1702
1786
|
{
|
|
1703
1787
|
className: "text-xs tabular-nums text-muted-foreground",
|
|
@@ -1738,7 +1822,7 @@ function scrollToScenarioId(scenarioId, options = {}) {
|
|
|
1738
1822
|
}
|
|
1739
1823
|
|
|
1740
1824
|
// src/interactive/ReportFailureBanner.tsx
|
|
1741
|
-
import { jsx as
|
|
1825
|
+
import { jsx as jsx38, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
1742
1826
|
function ReportFailureBanner({ failures }) {
|
|
1743
1827
|
const first = failures[0];
|
|
1744
1828
|
const jumpToFirst = useCallback2(() => {
|
|
@@ -1746,7 +1830,7 @@ function ReportFailureBanner({ failures }) {
|
|
|
1746
1830
|
scrollToScenarioId(first.scenarioId);
|
|
1747
1831
|
}, [first]);
|
|
1748
1832
|
if (failures.length === 0) return null;
|
|
1749
|
-
return /* @__PURE__ */
|
|
1833
|
+
return /* @__PURE__ */ jsxs23(
|
|
1750
1834
|
"div",
|
|
1751
1835
|
{
|
|
1752
1836
|
className: "es-failure-banner",
|
|
@@ -1754,13 +1838,13 @@ function ReportFailureBanner({ failures }) {
|
|
|
1754
1838
|
"aria-live": "polite",
|
|
1755
1839
|
"aria-label": "Failure summary",
|
|
1756
1840
|
children: [
|
|
1757
|
-
/* @__PURE__ */
|
|
1758
|
-
/* @__PURE__ */
|
|
1841
|
+
/* @__PURE__ */ jsxs23("span", { className: "es-failure-banner-text", children: [
|
|
1842
|
+
/* @__PURE__ */ jsx38("strong", { children: failures.length }),
|
|
1759
1843
|
" ",
|
|
1760
1844
|
"failure",
|
|
1761
1845
|
failures.length === 1 ? "" : "s"
|
|
1762
1846
|
] }),
|
|
1763
|
-
/* @__PURE__ */
|
|
1847
|
+
/* @__PURE__ */ jsx38(
|
|
1764
1848
|
"button",
|
|
1765
1849
|
{
|
|
1766
1850
|
type: "button",
|
|
@@ -1777,7 +1861,7 @@ function ReportFailureBanner({ failures }) {
|
|
|
1777
1861
|
|
|
1778
1862
|
// src/interactive/ReportFreshness.tsx
|
|
1779
1863
|
import { useEffect, useState as useState2 } from "react";
|
|
1780
|
-
import { Fragment as Fragment11, jsx as
|
|
1864
|
+
import { Fragment as Fragment11, jsx as jsx39, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
1781
1865
|
function ReportFreshness({ lastRunMs, ciUrl, staleAfterDays, nowMs }) {
|
|
1782
1866
|
const [now, setNow] = useState2(nowMs);
|
|
1783
1867
|
useEffect(() => {
|
|
@@ -1785,7 +1869,7 @@ function ReportFreshness({ lastRunMs, ciUrl, staleAfterDays, nowMs }) {
|
|
|
1785
1869
|
}, [nowMs]);
|
|
1786
1870
|
if (lastRunMs === void 0 || now === void 0) return null;
|
|
1787
1871
|
const age = formatRelativeAge(lastRunMs, now);
|
|
1788
|
-
const runLink = ciUrl ? /* @__PURE__ */
|
|
1872
|
+
const runLink = ciUrl ? /* @__PURE__ */ jsx39(
|
|
1789
1873
|
"a",
|
|
1790
1874
|
{
|
|
1791
1875
|
href: ciUrl,
|
|
@@ -1796,9 +1880,9 @@ function ReportFreshness({ lastRunMs, ciUrl, staleAfterDays, nowMs }) {
|
|
|
1796
1880
|
}
|
|
1797
1881
|
) : null;
|
|
1798
1882
|
if (isReportStale(lastRunMs, staleAfterDays, now)) {
|
|
1799
|
-
return /* @__PURE__ */
|
|
1800
|
-
/* @__PURE__ */
|
|
1801
|
-
/* @__PURE__ */
|
|
1883
|
+
return /* @__PURE__ */ jsxs24("div", { className: "es-stale-banner", role: "status", "aria-label": "Report freshness", children: [
|
|
1884
|
+
/* @__PURE__ */ jsxs24("span", { children: [
|
|
1885
|
+
/* @__PURE__ */ jsxs24("strong", { children: [
|
|
1802
1886
|
"Last verified ",
|
|
1803
1887
|
age,
|
|
1804
1888
|
"."
|
|
@@ -1808,10 +1892,10 @@ function ReportFreshness({ lastRunMs, ciUrl, staleAfterDays, nowMs }) {
|
|
|
1808
1892
|
runLink
|
|
1809
1893
|
] });
|
|
1810
1894
|
}
|
|
1811
|
-
return /* @__PURE__ */
|
|
1895
|
+
return /* @__PURE__ */ jsxs24("p", { className: "es-freshness", "aria-label": "Report freshness", children: [
|
|
1812
1896
|
"Verified ",
|
|
1813
1897
|
age,
|
|
1814
|
-
runLink ? /* @__PURE__ */
|
|
1898
|
+
runLink ? /* @__PURE__ */ jsxs24(Fragment11, { children: [
|
|
1815
1899
|
" \xB7 ",
|
|
1816
1900
|
runLink
|
|
1817
1901
|
] }) : null
|
|
@@ -1819,15 +1903,15 @@ function ReportFreshness({ lastRunMs, ciUrl, staleAfterDays, nowMs }) {
|
|
|
1819
1903
|
}
|
|
1820
1904
|
|
|
1821
1905
|
// src/interactive/ReportLastRunDelta.tsx
|
|
1822
|
-
import { Fragment as Fragment12, jsx as
|
|
1906
|
+
import { Fragment as Fragment12, jsx as jsx40, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
1823
1907
|
var MAX_LINKS = 5;
|
|
1824
1908
|
function ScenarioLinks({ scenarios, tone }) {
|
|
1825
|
-
return /* @__PURE__ */
|
|
1826
|
-
scenarios.slice(0, MAX_LINKS).map((s, i) => /* @__PURE__ */
|
|
1909
|
+
return /* @__PURE__ */ jsxs25(Fragment12, { children: [
|
|
1910
|
+
scenarios.slice(0, MAX_LINKS).map((s, i) => /* @__PURE__ */ jsxs25("span", { children: [
|
|
1827
1911
|
i > 0 ? ", " : "",
|
|
1828
|
-
/* @__PURE__ */
|
|
1912
|
+
/* @__PURE__ */ jsx40("a", { href: `#${s.id}`, className: cn("underline underline-offset-2 hover:no-underline", tone), children: s.title })
|
|
1829
1913
|
] }, s.id)),
|
|
1830
|
-
scenarios.length > MAX_LINKS ? /* @__PURE__ */
|
|
1914
|
+
scenarios.length > MAX_LINKS ? /* @__PURE__ */ jsxs25("span", { children: [
|
|
1831
1915
|
" and ",
|
|
1832
1916
|
scenarios.length - MAX_LINKS,
|
|
1833
1917
|
" more"
|
|
@@ -1844,23 +1928,23 @@ function ReportLastRunDelta({
|
|
|
1844
1928
|
if (!delta) return null;
|
|
1845
1929
|
const { newlyFailing, newlyPassing, added } = delta;
|
|
1846
1930
|
if (newlyFailing.length === 0 && newlyPassing.length === 0 && added.length === 0) {
|
|
1847
|
-
return /* @__PURE__ */
|
|
1931
|
+
return /* @__PURE__ */ jsx40("p", { className: "text-xs text-muted-foreground", "data-testid": "es-last-run-delta", children: "Since last run: no behavior changes." });
|
|
1848
1932
|
}
|
|
1849
|
-
return /* @__PURE__ */
|
|
1850
|
-
/* @__PURE__ */
|
|
1851
|
-
newlyFailing.length > 0 ? /* @__PURE__ */
|
|
1933
|
+
return /* @__PURE__ */ jsxs25("p", { className: "text-xs text-muted-foreground", "data-testid": "es-last-run-delta", children: [
|
|
1934
|
+
/* @__PURE__ */ jsx40("span", { className: "font-medium text-foreground", children: "Since last run:" }),
|
|
1935
|
+
newlyFailing.length > 0 ? /* @__PURE__ */ jsxs25("span", { className: "ml-2 text-fail", children: [
|
|
1852
1936
|
newlyFailing.length,
|
|
1853
1937
|
" newly failing (",
|
|
1854
|
-
/* @__PURE__ */
|
|
1938
|
+
/* @__PURE__ */ jsx40(ScenarioLinks, { scenarios: newlyFailing, tone: "text-fail" }),
|
|
1855
1939
|
")"
|
|
1856
1940
|
] }) : null,
|
|
1857
|
-
newlyPassing.length > 0 ? /* @__PURE__ */
|
|
1941
|
+
newlyPassing.length > 0 ? /* @__PURE__ */ jsxs25("span", { className: "ml-2 text-pass", children: [
|
|
1858
1942
|
newlyPassing.length,
|
|
1859
1943
|
" fixed (",
|
|
1860
|
-
/* @__PURE__ */
|
|
1944
|
+
/* @__PURE__ */ jsx40(ScenarioLinks, { scenarios: newlyPassing, tone: "text-pass" }),
|
|
1861
1945
|
")"
|
|
1862
1946
|
] }) : null,
|
|
1863
|
-
added.length > 0 ? /* @__PURE__ */
|
|
1947
|
+
added.length > 0 ? /* @__PURE__ */ jsxs25("span", { className: "ml-2", children: [
|
|
1864
1948
|
added.length,
|
|
1865
1949
|
" new"
|
|
1866
1950
|
] }) : null
|
|
@@ -1924,7 +2008,7 @@ function Button({
|
|
|
1924
2008
|
}
|
|
1925
2009
|
|
|
1926
2010
|
// src/interactive/ReportShortcutsHelp.tsx
|
|
1927
|
-
import { jsx as
|
|
2011
|
+
import { jsx as jsx41, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
1928
2012
|
var SHORTCUTS = [
|
|
1929
2013
|
{ keys: "/", description: "Focus search" },
|
|
1930
2014
|
{ keys: "f", description: "Jump to next failure" },
|
|
@@ -1936,9 +2020,9 @@ var SHORTCUTS = [
|
|
|
1936
2020
|
];
|
|
1937
2021
|
function Keys({ keys }) {
|
|
1938
2022
|
const parts = keys.split(" ");
|
|
1939
|
-
return /* @__PURE__ */
|
|
1940
|
-
i > 0 ? /* @__PURE__ */
|
|
1941
|
-
/* @__PURE__ */
|
|
2023
|
+
return /* @__PURE__ */ jsx41("span", { className: "inline-flex items-center gap-1", children: parts.map((k, i) => /* @__PURE__ */ jsxs26("span", { className: "inline-flex items-center gap-1", children: [
|
|
2024
|
+
i > 0 ? /* @__PURE__ */ jsx41("span", { className: "text-xs text-muted-foreground", children: "+" }) : null,
|
|
2025
|
+
/* @__PURE__ */ jsx41("kbd", { className: "inline-flex h-6 min-w-6 items-center justify-center rounded border border-border bg-muted px-1.5 font-mono text-xs font-medium text-muted-foreground", children: k })
|
|
1942
2026
|
] }, k)) });
|
|
1943
2027
|
}
|
|
1944
2028
|
function ReportShortcutsHelp({ open, onClose }) {
|
|
@@ -1949,7 +2033,7 @@ function ReportShortcutsHelp({ open, onClose }) {
|
|
|
1949
2033
|
if (open && !dialog.open) dialog.showModal();
|
|
1950
2034
|
else if (!open && dialog.open) dialog.close();
|
|
1951
2035
|
}, [open]);
|
|
1952
|
-
return /* @__PURE__ */
|
|
2036
|
+
return /* @__PURE__ */ jsxs26(
|
|
1953
2037
|
"dialog",
|
|
1954
2038
|
{
|
|
1955
2039
|
ref: dialogRef,
|
|
@@ -1957,12 +2041,12 @@ function ReportShortcutsHelp({ open, onClose }) {
|
|
|
1957
2041
|
"aria-label": "Keyboard shortcuts",
|
|
1958
2042
|
onClose,
|
|
1959
2043
|
children: [
|
|
1960
|
-
/* @__PURE__ */
|
|
1961
|
-
/* @__PURE__ */
|
|
1962
|
-
/* @__PURE__ */
|
|
1963
|
-
/* @__PURE__ */
|
|
2044
|
+
/* @__PURE__ */ jsx41("h2", { className: "text-base font-semibold", children: "Keyboard shortcuts" }),
|
|
2045
|
+
/* @__PURE__ */ jsx41("dl", { className: "mt-4 grid grid-cols-[auto_1fr] items-center gap-x-4 gap-y-2.5", children: SHORTCUTS.map((s) => /* @__PURE__ */ jsxs26("div", { className: "col-span-2 grid grid-cols-subgrid items-center", children: [
|
|
2046
|
+
/* @__PURE__ */ jsx41("dt", { className: "justify-self-start", children: /* @__PURE__ */ jsx41(Keys, { keys: s.keys }) }),
|
|
2047
|
+
/* @__PURE__ */ jsx41("dd", { className: "text-sm text-muted-foreground", children: s.description })
|
|
1964
2048
|
] }, s.keys)) }),
|
|
1965
|
-
/* @__PURE__ */
|
|
2049
|
+
/* @__PURE__ */ jsx41("form", { method: "dialog", className: "mt-6", children: /* @__PURE__ */ jsx41(Button, { type: "submit", variant: "outline", size: "sm", children: "Close" }) })
|
|
1966
2050
|
]
|
|
1967
2051
|
}
|
|
1968
2052
|
);
|
|
@@ -2163,7 +2247,7 @@ function failuresFirst(report) {
|
|
|
2163
2247
|
|
|
2164
2248
|
// src/interactive/ReportFilters.tsx
|
|
2165
2249
|
import { useState as useState3 } from "react";
|
|
2166
|
-
import { jsx as
|
|
2250
|
+
import { jsx as jsx42, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
2167
2251
|
var TAG_LIMIT = 12;
|
|
2168
2252
|
function ReportFilters({
|
|
2169
2253
|
statuses,
|
|
@@ -2177,10 +2261,10 @@ function ReportFilters({
|
|
|
2177
2261
|
if (statuses.length === 0 && tags.length === 0) return null;
|
|
2178
2262
|
const tagsCollapsed = tags.length > TAG_LIMIT && !showAllTags;
|
|
2179
2263
|
const visibleTags = tagsCollapsed ? tags.slice(0, TAG_LIMIT) : tags;
|
|
2180
|
-
return /* @__PURE__ */
|
|
2181
|
-
statuses.length > 0 ? /* @__PURE__ */
|
|
2264
|
+
return /* @__PURE__ */ jsxs27("div", { className: "flex flex-col gap-2", children: [
|
|
2265
|
+
statuses.length > 0 ? /* @__PURE__ */ jsx42("div", { role: "group", "aria-label": "Filter by status", className: "flex flex-wrap gap-1", children: statuses.map((opt) => {
|
|
2182
2266
|
const active = status === opt.key;
|
|
2183
|
-
return /* @__PURE__ */
|
|
2267
|
+
return /* @__PURE__ */ jsxs27(
|
|
2184
2268
|
"button",
|
|
2185
2269
|
{
|
|
2186
2270
|
type: "button",
|
|
@@ -2192,23 +2276,23 @@ function ReportFilters({
|
|
|
2192
2276
|
),
|
|
2193
2277
|
children: [
|
|
2194
2278
|
opt.label,
|
|
2195
|
-
/* @__PURE__ */
|
|
2279
|
+
/* @__PURE__ */ jsx42("span", { className: "ml-1 font-mono opacity-70", children: opt.count })
|
|
2196
2280
|
]
|
|
2197
2281
|
},
|
|
2198
2282
|
opt.key
|
|
2199
2283
|
);
|
|
2200
2284
|
}) }) : null,
|
|
2201
|
-
tags.length > 0 ? /* @__PURE__ */
|
|
2285
|
+
tags.length > 0 ? /* @__PURE__ */ jsxs27("ul", { "aria-label": "Filter by tag", className: "flex flex-wrap items-center gap-1.5", children: [
|
|
2202
2286
|
visibleTags.map((tag) => {
|
|
2203
2287
|
const active = activeTags.includes(tag);
|
|
2204
|
-
return /* @__PURE__ */
|
|
2288
|
+
return /* @__PURE__ */ jsx42("li", { children: /* @__PURE__ */ jsx42(
|
|
2205
2289
|
"button",
|
|
2206
2290
|
{
|
|
2207
2291
|
type: "button",
|
|
2208
2292
|
"aria-pressed": active,
|
|
2209
2293
|
onClick: () => onToggleTag(tag),
|
|
2210
2294
|
className: "cursor-pointer",
|
|
2211
|
-
children: /* @__PURE__ */
|
|
2295
|
+
children: /* @__PURE__ */ jsx42(
|
|
2212
2296
|
Badge,
|
|
2213
2297
|
{
|
|
2214
2298
|
variant: "tag",
|
|
@@ -2221,7 +2305,7 @@ function ReportFilters({
|
|
|
2221
2305
|
}
|
|
2222
2306
|
) }, tag);
|
|
2223
2307
|
}),
|
|
2224
|
-
tags.length > TAG_LIMIT ? /* @__PURE__ */
|
|
2308
|
+
tags.length > TAG_LIMIT ? /* @__PURE__ */ jsx42("li", { children: /* @__PURE__ */ jsx42(
|
|
2225
2309
|
"button",
|
|
2226
2310
|
{
|
|
2227
2311
|
type: "button",
|
|
@@ -2237,7 +2321,7 @@ function ReportFilters({
|
|
|
2237
2321
|
|
|
2238
2322
|
// src/interactive/ReportToc.tsx
|
|
2239
2323
|
import { useEffect as useEffect5, useMemo as useMemo2, useState as useState4 } from "react";
|
|
2240
|
-
import { jsx as
|
|
2324
|
+
import { jsx as jsx43, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
2241
2325
|
var DOT = {
|
|
2242
2326
|
passed: "bg-pass",
|
|
2243
2327
|
failed: "bg-fail",
|
|
@@ -2266,11 +2350,11 @@ function TocContent({ onNavigate }) {
|
|
|
2266
2350
|
return () => observer.disconnect();
|
|
2267
2351
|
}, [scenarioIds]);
|
|
2268
2352
|
if (report.features.length === 0) return null;
|
|
2269
|
-
return /* @__PURE__ */
|
|
2270
|
-
/* @__PURE__ */
|
|
2271
|
-
/* @__PURE__ */
|
|
2353
|
+
return /* @__PURE__ */ jsx43("ul", { className: "flex list-none flex-col gap-4 pl-0", children: report.features.map((feature) => /* @__PURE__ */ jsxs28("li", { children: [
|
|
2354
|
+
/* @__PURE__ */ jsx43("p", { className: "mb-1.5 font-semibold leading-snug text-foreground", children: feature.title }),
|
|
2355
|
+
/* @__PURE__ */ jsx43("ul", { className: "flex list-none flex-col gap-0.5 pl-0", children: feature.scenarios.map((scenario) => {
|
|
2272
2356
|
const active = activeId === scenario.id;
|
|
2273
|
-
return /* @__PURE__ */
|
|
2357
|
+
return /* @__PURE__ */ jsx43("li", { children: /* @__PURE__ */ jsxs28(
|
|
2274
2358
|
"a",
|
|
2275
2359
|
{
|
|
2276
2360
|
href: `#${scenario.id}`,
|
|
@@ -2285,14 +2369,14 @@ function TocContent({ onNavigate }) {
|
|
|
2285
2369
|
active ? "border-primary font-medium text-foreground" : "border-border text-muted-foreground"
|
|
2286
2370
|
),
|
|
2287
2371
|
children: [
|
|
2288
|
-
/* @__PURE__ */
|
|
2372
|
+
/* @__PURE__ */ jsx43(
|
|
2289
2373
|
"span",
|
|
2290
2374
|
{
|
|
2291
2375
|
"aria-hidden": true,
|
|
2292
2376
|
className: cn("mt-1 size-1.5 shrink-0 rounded-full", DOT[scenario.status])
|
|
2293
2377
|
}
|
|
2294
2378
|
),
|
|
2295
|
-
/* @__PURE__ */
|
|
2379
|
+
/* @__PURE__ */ jsx43("span", { className: "break-words", children: scenario.title })
|
|
2296
2380
|
]
|
|
2297
2381
|
}
|
|
2298
2382
|
) }, scenario.id);
|
|
@@ -2302,14 +2386,14 @@ function TocContent({ onNavigate }) {
|
|
|
2302
2386
|
function ReportToc() {
|
|
2303
2387
|
const report = useReport();
|
|
2304
2388
|
if (report.features.length === 0) return null;
|
|
2305
|
-
return /* @__PURE__ */
|
|
2389
|
+
return /* @__PURE__ */ jsxs28(
|
|
2306
2390
|
"nav",
|
|
2307
2391
|
{
|
|
2308
2392
|
"aria-label": "Table of contents",
|
|
2309
2393
|
className: "sticky top-4 hidden h-fit w-64 shrink-0 self-start text-xs lg:block",
|
|
2310
2394
|
children: [
|
|
2311
|
-
/* @__PURE__ */
|
|
2312
|
-
/* @__PURE__ */
|
|
2395
|
+
/* @__PURE__ */ jsx43("p", { className: "mb-3 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Contents" }),
|
|
2396
|
+
/* @__PURE__ */ jsx43(TocContent, {})
|
|
2313
2397
|
]
|
|
2314
2398
|
}
|
|
2315
2399
|
);
|
|
@@ -2319,31 +2403,31 @@ function ReportToc() {
|
|
|
2319
2403
|
import { useState as useState5 } from "react";
|
|
2320
2404
|
import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
|
|
2321
2405
|
import { ListIcon, XIcon } from "lucide-react";
|
|
2322
|
-
import { jsx as
|
|
2406
|
+
import { jsx as jsx44, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
2323
2407
|
function ReportTocDrawer() {
|
|
2324
2408
|
const report = useReport();
|
|
2325
2409
|
const [open, setOpen] = useState5(false);
|
|
2326
2410
|
if (report.features.length === 0) return null;
|
|
2327
|
-
return /* @__PURE__ */
|
|
2328
|
-
/* @__PURE__ */
|
|
2329
|
-
/* @__PURE__ */
|
|
2411
|
+
return /* @__PURE__ */ jsxs29(DialogPrimitive.Root, { open, onOpenChange: setOpen, children: [
|
|
2412
|
+
/* @__PURE__ */ jsxs29(DialogPrimitive.Trigger, { className: "flex cursor-pointer items-center gap-1 rounded-md border border-border px-2 py-1 text-xs text-muted-foreground hover:bg-muted hover:text-foreground lg:hidden [&_svg]:size-3.5", children: [
|
|
2413
|
+
/* @__PURE__ */ jsx44(ListIcon, { "aria-hidden": true }),
|
|
2330
2414
|
" Contents"
|
|
2331
2415
|
] }),
|
|
2332
|
-
/* @__PURE__ */
|
|
2333
|
-
/* @__PURE__ */
|
|
2334
|
-
/* @__PURE__ */
|
|
2335
|
-
/* @__PURE__ */
|
|
2336
|
-
/* @__PURE__ */
|
|
2337
|
-
/* @__PURE__ */
|
|
2416
|
+
/* @__PURE__ */ jsxs29(DialogPrimitive.Portal, { children: [
|
|
2417
|
+
/* @__PURE__ */ jsx44(DialogPrimitive.Backdrop, { className: "fixed inset-0 z-50 bg-black/50 transition-opacity duration-200 data-[ending-style]:opacity-0 data-[starting-style]:opacity-0" }),
|
|
2418
|
+
/* @__PURE__ */ jsxs29(DialogPrimitive.Popup, { className: "fixed inset-y-0 left-0 z-50 flex w-72 max-w-[80vw] flex-col gap-3 overflow-y-auto border-r border-border bg-background p-4 font-sans text-xs shadow-lg outline-none transition-transform duration-200 data-[ending-style]:-translate-x-full data-[starting-style]:-translate-x-full", children: [
|
|
2419
|
+
/* @__PURE__ */ jsxs29("div", { className: "flex items-center justify-between", children: [
|
|
2420
|
+
/* @__PURE__ */ jsx44(DialogPrimitive.Title, { className: "text-xs font-semibold tracking-wide text-muted-foreground uppercase", children: "Contents" }),
|
|
2421
|
+
/* @__PURE__ */ jsx44(
|
|
2338
2422
|
DialogPrimitive.Close,
|
|
2339
2423
|
{
|
|
2340
2424
|
"aria-label": "Close contents",
|
|
2341
2425
|
className: "cursor-pointer rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground [&_svg]:size-4",
|
|
2342
|
-
children: /* @__PURE__ */
|
|
2426
|
+
children: /* @__PURE__ */ jsx44(XIcon, { "aria-hidden": true })
|
|
2343
2427
|
}
|
|
2344
2428
|
)
|
|
2345
2429
|
] }),
|
|
2346
|
-
/* @__PURE__ */
|
|
2430
|
+
/* @__PURE__ */ jsx44(TocContent, { onNavigate: () => setOpen(false) })
|
|
2347
2431
|
] })
|
|
2348
2432
|
] })
|
|
2349
2433
|
] });
|
|
@@ -2398,14 +2482,14 @@ function useTheme() {
|
|
|
2398
2482
|
}
|
|
2399
2483
|
|
|
2400
2484
|
// src/interactive/ReportInteractive.tsx
|
|
2401
|
-
import { Fragment as Fragment13, jsx as
|
|
2485
|
+
import { Fragment as Fragment13, jsx as jsx45, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
2402
2486
|
function ReportInteractive(props) {
|
|
2403
2487
|
const { report, className, title, dataTheme } = props;
|
|
2404
2488
|
const result = unwrapReport(report);
|
|
2405
2489
|
if (!result.ok) {
|
|
2406
|
-
return /* @__PURE__ */
|
|
2490
|
+
return /* @__PURE__ */ jsx45(ReportErrorShell, { error: result.error, className, title, dataTheme });
|
|
2407
2491
|
}
|
|
2408
|
-
return /* @__PURE__ */
|
|
2492
|
+
return /* @__PURE__ */ jsx45(ReportInteractiveView, { ...props, report: result.data });
|
|
2409
2493
|
}
|
|
2410
2494
|
var THEME_OPTIONS = [
|
|
2411
2495
|
{ value: "light", label: "Light", Icon: Sun },
|
|
@@ -2413,7 +2497,7 @@ var THEME_OPTIONS = [
|
|
|
2413
2497
|
{ value: "dark", label: "Dark", Icon: Moon }
|
|
2414
2498
|
];
|
|
2415
2499
|
function ThemeSegment({ pref, onPref }) {
|
|
2416
|
-
return /* @__PURE__ */
|
|
2500
|
+
return /* @__PURE__ */ jsx45(
|
|
2417
2501
|
ToggleGroup,
|
|
2418
2502
|
{
|
|
2419
2503
|
size: "sm",
|
|
@@ -2423,7 +2507,7 @@ function ThemeSegment({ pref, onPref }) {
|
|
|
2423
2507
|
if (next) onPref(next);
|
|
2424
2508
|
},
|
|
2425
2509
|
"aria-label": "Color theme",
|
|
2426
|
-
children: THEME_OPTIONS.map(({ value, label, Icon }) => /* @__PURE__ */
|
|
2510
|
+
children: THEME_OPTIONS.map(({ value, label, Icon }) => /* @__PURE__ */ jsx45(ToggleGroupItem, { value, "aria-label": label, title: label, className: "px-2", children: /* @__PURE__ */ jsx45(Icon, {}) }, value))
|
|
2427
2511
|
}
|
|
2428
2512
|
);
|
|
2429
2513
|
}
|
|
@@ -2545,13 +2629,13 @@ function ReportInteractiveView({
|
|
|
2545
2629
|
const totalScenarios = report.summary.total;
|
|
2546
2630
|
const matchedScenarios = filtered.summary.total;
|
|
2547
2631
|
const showToc = !hideToc && totalScenarios > 3;
|
|
2548
|
-
return /* @__PURE__ */
|
|
2632
|
+
return /* @__PURE__ */ jsx45(CollapseProvider, { value: collapse.api, children: /* @__PURE__ */ jsx45(ScenarioActionsProvider, { value: scenarioActions, children: /* @__PURE__ */ jsx45(ScenarioHistoryProvider, { value: scenarioHistory ?? null, children: /* @__PURE__ */ jsx45(
|
|
2549
2633
|
ReportRoot,
|
|
2550
2634
|
{
|
|
2551
2635
|
report: filtered,
|
|
2552
2636
|
customRenderers,
|
|
2553
2637
|
renderers,
|
|
2554
|
-
children: /* @__PURE__ */
|
|
2638
|
+
children: /* @__PURE__ */ jsxs30(
|
|
2555
2639
|
"main",
|
|
2556
2640
|
{
|
|
2557
2641
|
className: cn("es-report", "es-report-interactive", className),
|
|
@@ -2560,8 +2644,8 @@ function ReportInteractiveView({
|
|
|
2560
2644
|
"data-theme": dataTheme,
|
|
2561
2645
|
"data-detail-level": detail,
|
|
2562
2646
|
children: [
|
|
2563
|
-
/* @__PURE__ */
|
|
2564
|
-
/* @__PURE__ */
|
|
2647
|
+
/* @__PURE__ */ jsxs30("header", { className: "es-report-header", children: [
|
|
2648
|
+
/* @__PURE__ */ jsxs30(
|
|
2565
2649
|
"div",
|
|
2566
2650
|
{
|
|
2567
2651
|
"data-es-navbar": true,
|
|
@@ -2570,9 +2654,9 @@ function ReportInteractiveView({
|
|
|
2570
2654
|
hideHeader ? "justify-end" : "justify-between"
|
|
2571
2655
|
),
|
|
2572
2656
|
children: [
|
|
2573
|
-
hideHeader ? null : /* @__PURE__ */
|
|
2574
|
-
/* @__PURE__ */
|
|
2575
|
-
/* @__PURE__ */
|
|
2657
|
+
hideHeader ? null : /* @__PURE__ */ jsx45("h1", { className: "min-w-0", children: title ?? "Story Report" }),
|
|
2658
|
+
/* @__PURE__ */ jsxs30("div", { className: "flex items-center gap-2", children: [
|
|
2659
|
+
/* @__PURE__ */ jsx45(
|
|
2576
2660
|
ReportSearch,
|
|
2577
2661
|
{
|
|
2578
2662
|
ref: searchRef,
|
|
@@ -2582,16 +2666,16 @@ function ReportInteractiveView({
|
|
|
2582
2666
|
totalCount: totalScenarios
|
|
2583
2667
|
}
|
|
2584
2668
|
),
|
|
2585
|
-
/* @__PURE__ */
|
|
2669
|
+
/* @__PURE__ */ jsx45(ThemeSegment, { pref: themePref, onPref: setThemePref })
|
|
2586
2670
|
] })
|
|
2587
2671
|
]
|
|
2588
2672
|
}
|
|
2589
2673
|
),
|
|
2590
|
-
hideHeader ? null : /* @__PURE__ */
|
|
2591
|
-
/* @__PURE__ */
|
|
2592
|
-
/* @__PURE__ */
|
|
2674
|
+
hideHeader ? null : /* @__PURE__ */ jsxs30(Fragment13, { children: [
|
|
2675
|
+
/* @__PURE__ */ jsx45(ReportSummary, {}),
|
|
2676
|
+
/* @__PURE__ */ jsx45(ReportMeta, {})
|
|
2593
2677
|
] }),
|
|
2594
|
-
/* @__PURE__ */
|
|
2678
|
+
/* @__PURE__ */ jsx45(
|
|
2595
2679
|
ReportFreshness,
|
|
2596
2680
|
{
|
|
2597
2681
|
lastRunMs: reportLastRunMs(report),
|
|
@@ -2599,8 +2683,8 @@ function ReportInteractiveView({
|
|
|
2599
2683
|
staleAfterDays
|
|
2600
2684
|
}
|
|
2601
2685
|
),
|
|
2602
|
-
/* @__PURE__ */
|
|
2603
|
-
/* @__PURE__ */
|
|
2686
|
+
/* @__PURE__ */ jsx45(ReportLastRunDelta, { history: scenarioHistory, report }),
|
|
2687
|
+
/* @__PURE__ */ jsx45(
|
|
2604
2688
|
ReportFilters,
|
|
2605
2689
|
{
|
|
2606
2690
|
statuses: statusOptions,
|
|
@@ -2611,14 +2695,14 @@ function ReportInteractiveView({
|
|
|
2611
2695
|
onToggleTag: toggleTag
|
|
2612
2696
|
}
|
|
2613
2697
|
),
|
|
2614
|
-
/* @__PURE__ */
|
|
2615
|
-
showToc ? /* @__PURE__ */
|
|
2616
|
-
/* @__PURE__ */
|
|
2617
|
-
/* @__PURE__ */
|
|
2618
|
-
/* @__PURE__ */
|
|
2698
|
+
/* @__PURE__ */ jsxs30("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-2 border-t border-border/60 pt-3", children: [
|
|
2699
|
+
showToc ? /* @__PURE__ */ jsx45(ReportTocDrawer, {}) : null,
|
|
2700
|
+
/* @__PURE__ */ jsxs30("div", { className: "flex items-center gap-2", children: [
|
|
2701
|
+
/* @__PURE__ */ jsx45(Switch, { id: expandId, checked: expandedAll, onCheckedChange: setExpanded }),
|
|
2702
|
+
/* @__PURE__ */ jsx45("label", { htmlFor: expandId, className: "cursor-pointer text-sm text-muted-foreground select-none", children: "Expand all" })
|
|
2619
2703
|
] }),
|
|
2620
|
-
/* @__PURE__ */
|
|
2621
|
-
/* @__PURE__ */
|
|
2704
|
+
/* @__PURE__ */ jsxs30("div", { className: "flex items-center gap-2", children: [
|
|
2705
|
+
/* @__PURE__ */ jsx45(
|
|
2622
2706
|
Switch,
|
|
2623
2707
|
{
|
|
2624
2708
|
id: docsId,
|
|
@@ -2626,16 +2710,16 @@ function ReportInteractiveView({
|
|
|
2626
2710
|
onCheckedChange: (checked) => setDetail(checked ? "full" : "minimal")
|
|
2627
2711
|
}
|
|
2628
2712
|
),
|
|
2629
|
-
/* @__PURE__ */
|
|
2713
|
+
/* @__PURE__ */ jsx45("label", { htmlFor: docsId, className: "cursor-pointer text-sm text-muted-foreground select-none", children: "Show documentation" })
|
|
2630
2714
|
] })
|
|
2631
2715
|
] })
|
|
2632
2716
|
] }),
|
|
2633
|
-
/* @__PURE__ */
|
|
2634
|
-
hasContent ? showToc ? /* @__PURE__ */
|
|
2635
|
-
/* @__PURE__ */
|
|
2636
|
-
/* @__PURE__ */
|
|
2637
|
-
] }) : /* @__PURE__ */
|
|
2638
|
-
/* @__PURE__ */
|
|
2717
|
+
/* @__PURE__ */ jsx45(ReportFailureBanner, { failures }),
|
|
2718
|
+
hasContent ? showToc ? /* @__PURE__ */ jsxs30("div", { className: "flex gap-6", children: [
|
|
2719
|
+
/* @__PURE__ */ jsx45(ReportToc, {}),
|
|
2720
|
+
/* @__PURE__ */ jsx45("div", { className: "flex min-w-0 flex-1 flex-col gap-4", children: /* @__PURE__ */ jsx45(ReportFeatureList, {}) })
|
|
2721
|
+
] }) : /* @__PURE__ */ jsx45("div", { className: "flex flex-col gap-4", children: /* @__PURE__ */ jsx45(ReportFeatureList, {}) }) : /* @__PURE__ */ jsx45(ReportEmpty, { message: query ? "No scenarios match the search." : void 0 }),
|
|
2722
|
+
/* @__PURE__ */ jsx45(
|
|
2639
2723
|
"button",
|
|
2640
2724
|
{
|
|
2641
2725
|
type: "button",
|
|
@@ -2646,8 +2730,8 @@ function ReportInteractiveView({
|
|
|
2646
2730
|
children: "?"
|
|
2647
2731
|
}
|
|
2648
2732
|
),
|
|
2649
|
-
/* @__PURE__ */
|
|
2650
|
-
toast ? /* @__PURE__ */
|
|
2733
|
+
/* @__PURE__ */ jsx45(ReportShortcutsHelp, { open: helpOpen, onClose: () => setHelpOpen(false) }),
|
|
2734
|
+
toast ? /* @__PURE__ */ jsx45(
|
|
2651
2735
|
"div",
|
|
2652
2736
|
{
|
|
2653
2737
|
role: "status",
|
|
@@ -2671,7 +2755,7 @@ import { createElement, useEffect as useEffect8, useState as useState9 } from "r
|
|
|
2671
2755
|
|
|
2672
2756
|
// src/components/doc/MermaidView.tsx
|
|
2673
2757
|
import { useEffect as useEffect7, useRef as useRef4, useState as useState8 } from "react";
|
|
2674
|
-
import { jsx as
|
|
2758
|
+
import { jsx as jsx46, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
2675
2759
|
function prefersDark(el) {
|
|
2676
2760
|
const themed = el?.closest("[data-theme]");
|
|
2677
2761
|
if (themed?.dataset.theme === "dark") return true;
|
|
@@ -2708,9 +2792,9 @@ function MermaidView({ entry, load }) {
|
|
|
2708
2792
|
};
|
|
2709
2793
|
}, [entry.code, load]);
|
|
2710
2794
|
if (svg) {
|
|
2711
|
-
return /* @__PURE__ */
|
|
2712
|
-
entry.title ? /* @__PURE__ */
|
|
2713
|
-
/* @__PURE__ */
|
|
2795
|
+
return /* @__PURE__ */ jsxs31("figure", { ref, className: "my-3", children: [
|
|
2796
|
+
entry.title ? /* @__PURE__ */ jsx46("figcaption", { className: "mb-1.5 text-xs font-medium text-muted-foreground", children: entry.title }) : null,
|
|
2797
|
+
/* @__PURE__ */ jsx46(
|
|
2714
2798
|
"div",
|
|
2715
2799
|
{
|
|
2716
2800
|
role: "img",
|
|
@@ -2721,11 +2805,11 @@ function MermaidView({ entry, load }) {
|
|
|
2721
2805
|
)
|
|
2722
2806
|
] });
|
|
2723
2807
|
}
|
|
2724
|
-
return /* @__PURE__ */
|
|
2808
|
+
return /* @__PURE__ */ jsx46(MermaidSource, { entry, ref });
|
|
2725
2809
|
}
|
|
2726
2810
|
|
|
2727
2811
|
// src/interactive/island-renderers.tsx
|
|
2728
|
-
import { jsx as
|
|
2812
|
+
import { jsx as jsx47 } from "react/jsx-runtime";
|
|
2729
2813
|
var HLJS_ESM = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/es/highlight.min.js";
|
|
2730
2814
|
var MERMAID_ESM = "https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs";
|
|
2731
2815
|
function cachedCdnModule(url) {
|
|
@@ -2759,13 +2843,13 @@ function CdnHighlightedCode({ entry }) {
|
|
|
2759
2843
|
cancelled = true;
|
|
2760
2844
|
};
|
|
2761
2845
|
}, [entry.content, entry.lang]);
|
|
2762
|
-
return /* @__PURE__ */
|
|
2846
|
+
return /* @__PURE__ */ jsx47(CodeFigure, { label: entry.label, children: html !== null ? /* @__PURE__ */ jsx47(
|
|
2763
2847
|
"code",
|
|
2764
2848
|
{
|
|
2765
2849
|
className: cn("hljs font-mono text-xs", entry.lang && `language-${entry.lang}`),
|
|
2766
2850
|
dangerouslySetInnerHTML: { __html: html }
|
|
2767
2851
|
}
|
|
2768
|
-
) : /* @__PURE__ */
|
|
2852
|
+
) : /* @__PURE__ */ jsx47("code", { className: cn("font-mono text-xs", entry.lang && `language-${entry.lang}`), children: entry.content }) });
|
|
2769
2853
|
}
|
|
2770
2854
|
function buildIslandRenderers(opts) {
|
|
2771
2855
|
const renderers = {};
|
|
@@ -2779,7 +2863,7 @@ function buildIslandRenderers(opts) {
|
|
|
2779
2863
|
}
|
|
2780
2864
|
|
|
2781
2865
|
// src/interactive/ReportInteractiveIsland.tsx
|
|
2782
|
-
import { jsx as
|
|
2866
|
+
import { jsx as jsx48 } from "react/jsx-runtime";
|
|
2783
2867
|
function ReportInteractiveIsland({
|
|
2784
2868
|
report,
|
|
2785
2869
|
title,
|
|
@@ -2793,7 +2877,7 @@ function ReportInteractiveIsland({
|
|
|
2793
2877
|
() => buildIslandRenderers({ syntaxHighlighting, mermaid }),
|
|
2794
2878
|
[syntaxHighlighting, mermaid]
|
|
2795
2879
|
);
|
|
2796
|
-
return /* @__PURE__ */
|
|
2880
|
+
return /* @__PURE__ */ jsx48(
|
|
2797
2881
|
ReportInteractive,
|
|
2798
2882
|
{
|
|
2799
2883
|
report,
|