executable-stories-react 0.10.1 → 0.11.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 +183 -102
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +183 -102
- package/dist/index.js.map +1 -1
- package/dist/interactive.cjs +229 -187
- package/dist/interactive.cjs.map +1 -1
- package/dist/interactive.js +229 -187
- package/dist/interactive.js.map +1 -1
- package/dist/parse.cjs +40 -1
- package/dist/parse.cjs.map +1 -1
- package/dist/parse.js +40 -1
- package/dist/parse.js.map +1 -1
- package/dist/report-island.global.js +23 -21
- package/dist/ssr.cjs +109 -67
- package/dist/ssr.cjs.map +1 -1
- package/dist/ssr.js +109 -67
- package/dist/ssr.js.map +1 -1
- package/dist/tailwind.css +1 -1
- package/package.json +2 -2
package/dist/interactive.js
CHANGED
|
@@ -388,21 +388,29 @@ function DocLink({ entry }) {
|
|
|
388
388
|
);
|
|
389
389
|
}
|
|
390
390
|
|
|
391
|
-
// src/
|
|
391
|
+
// src/lib/markdown.ts
|
|
392
392
|
import { marked } from "marked";
|
|
393
393
|
|
|
394
394
|
// src/lib/url.ts
|
|
395
395
|
import { safeUrl, safeImageUrl, isLocalFsPath } from "executable-stories-core/utils/url";
|
|
396
396
|
|
|
397
|
-
// src/
|
|
398
|
-
import { Fragment as Fragment2, jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
399
|
-
function neutralizeUrl(value) {
|
|
400
|
-
return safeUrl(value) ?? "#";
|
|
401
|
-
}
|
|
397
|
+
// src/lib/markdown.ts
|
|
402
398
|
function safeMarkdownHtml(markdown) {
|
|
403
399
|
const raw = marked.parse(markdown, { async: false });
|
|
404
400
|
return raw.replace(/<script\b[^>]*>[\s\S]*?<\/script>/gi, "").replace(/<style\b[^>]*>[\s\S]*?<\/style>/gi, "").replace(/<\/?(?:iframe|object|embed|form|base)\b[^>]*>/gi, "").replace(/\son[a-z]+\s*=\s*"[^"]*"/gi, "").replace(/\son[a-z]+\s*=\s*'[^']*'/gi, "").replace(/\son[a-z]+\s*=\s*[^\s>]+/gi, "").replace(/(href|src)\s*=\s*"([^"]*)"/gi, (_m, attr, val) => `${attr}="${neutralizeUrl(val)}"`).replace(/(href|src)\s*=\s*'([^']*)'/gi, (_m, attr, val) => `${attr}='${neutralizeUrl(val)}'`);
|
|
405
401
|
}
|
|
402
|
+
function dedent(text) {
|
|
403
|
+
const lines = text.replace(/\t/g, " ").split("\n");
|
|
404
|
+
const indents = lines.filter((line) => line.trim().length > 0).map((line) => line.length - line.trimStart().length);
|
|
405
|
+
const shortest = indents.length > 0 ? Math.min(...indents) : 0;
|
|
406
|
+
return lines.map((line) => line.slice(shortest)).join("\n").trim();
|
|
407
|
+
}
|
|
408
|
+
function neutralizeUrl(value) {
|
|
409
|
+
return safeUrl(value) ?? "#";
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// src/components/doc/DocSection.tsx
|
|
413
|
+
import { Fragment as Fragment2, jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
406
414
|
function DocSection({ entry }) {
|
|
407
415
|
const renderers = useBuiltinRenderers();
|
|
408
416
|
if (renderers.section) {
|
|
@@ -1370,8 +1378,35 @@ function ReportScenarioList({ feature }) {
|
|
|
1370
1378
|
return /* @__PURE__ */ jsx27(Fragment8, { children: feature.scenarios.map((scenario) => /* @__PURE__ */ jsx27(ReportScenario, { scenario }, scenario.id)) });
|
|
1371
1379
|
}
|
|
1372
1380
|
|
|
1381
|
+
// src/components/ReportFeatureIntro.tsx
|
|
1382
|
+
import { jsx as jsx28, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1383
|
+
function ReportFeatureIntro({ feature }) {
|
|
1384
|
+
const hasNarrative = Boolean(feature.narrative?.trim());
|
|
1385
|
+
const hasGlossary = Boolean(feature.glossary?.length);
|
|
1386
|
+
if (!hasNarrative && !hasGlossary) return null;
|
|
1387
|
+
return /* @__PURE__ */ jsxs18("div", { className: "flex flex-col gap-3 border-l-2 border-border pl-4 text-sm", children: [
|
|
1388
|
+
hasNarrative ? /* @__PURE__ */ jsx28(
|
|
1389
|
+
"div",
|
|
1390
|
+
{
|
|
1391
|
+
className: "es-doc-prose prose prose-sm max-w-none text-muted-foreground",
|
|
1392
|
+
dangerouslySetInnerHTML: { __html: safeMarkdownHtml(dedent(feature.narrative)) }
|
|
1393
|
+
}
|
|
1394
|
+
) : null,
|
|
1395
|
+
hasGlossary ? /* @__PURE__ */ jsx28("dl", { className: "grid gap-1.5", "aria-label": "Glossary", children: feature.glossary.map((entry) => /* @__PURE__ */ jsxs18("div", { className: "flex flex-wrap gap-x-2 text-xs", children: [
|
|
1396
|
+
/* @__PURE__ */ jsx28("dt", { className: "font-medium text-foreground", children: entry.term }),
|
|
1397
|
+
/* @__PURE__ */ jsx28("dd", { className: "flex-1 text-muted-foreground", children: entry.definition })
|
|
1398
|
+
] }, entry.term)) }) : null
|
|
1399
|
+
] });
|
|
1400
|
+
}
|
|
1401
|
+
function featureKindLabel(kind) {
|
|
1402
|
+
if (kind === "ability") return "Ability";
|
|
1403
|
+
if (kind === "business-need") return "Business need";
|
|
1404
|
+
if (kind === "feature") return "Feature";
|
|
1405
|
+
return null;
|
|
1406
|
+
}
|
|
1407
|
+
|
|
1373
1408
|
// src/components/ReportFeature.tsx
|
|
1374
|
-
import { Fragment as Fragment9, jsx as
|
|
1409
|
+
import { Fragment as Fragment9, jsx as jsx29, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1375
1410
|
function ReportFeature({ feature }) {
|
|
1376
1411
|
const titleId = `${feature.id}-title`;
|
|
1377
1412
|
const bodyId = `${feature.id}-body`;
|
|
@@ -1379,10 +1414,11 @@ function ReportFeature({ feature }) {
|
|
|
1379
1414
|
const skipped = s.skipped + s.pending;
|
|
1380
1415
|
const collapse = useCollapse();
|
|
1381
1416
|
const collapsed = collapse?.isCollapsed(feature.id) ?? false;
|
|
1417
|
+
const kindLabel = featureKindLabel(feature.kind);
|
|
1382
1418
|
return (
|
|
1383
1419
|
// Suite = a section heading + a divider, NOT another bordered card. Drops a
|
|
1384
1420
|
// layer of nesting so the scenario cards below read as the primary unit.
|
|
1385
|
-
/* @__PURE__ */
|
|
1421
|
+
/* @__PURE__ */ jsxs19(
|
|
1386
1422
|
"section",
|
|
1387
1423
|
{
|
|
1388
1424
|
id: feature.id,
|
|
@@ -1390,9 +1426,9 @@ function ReportFeature({ feature }) {
|
|
|
1390
1426
|
"aria-labelledby": titleId,
|
|
1391
1427
|
className: "flex flex-col gap-3",
|
|
1392
1428
|
children: [
|
|
1393
|
-
/* @__PURE__ */
|
|
1394
|
-
/* @__PURE__ */
|
|
1395
|
-
/* @__PURE__ */
|
|
1429
|
+
/* @__PURE__ */ jsxs19("div", { className: "flex items-end justify-between gap-4 border-b border-border pb-2", children: [
|
|
1430
|
+
/* @__PURE__ */ jsxs19("div", { className: "min-w-0", children: [
|
|
1431
|
+
/* @__PURE__ */ jsx29("h2", { id: titleId, className: "text-base font-semibold tracking-tight text-foreground", children: collapse ? /* @__PURE__ */ jsxs19(
|
|
1396
1432
|
"button",
|
|
1397
1433
|
{
|
|
1398
1434
|
type: "button",
|
|
@@ -1401,31 +1437,34 @@ function ReportFeature({ feature }) {
|
|
|
1401
1437
|
"aria-controls": bodyId,
|
|
1402
1438
|
className: "flex w-full cursor-pointer items-center gap-2 text-left hover:text-foreground/80",
|
|
1403
1439
|
children: [
|
|
1404
|
-
/* @__PURE__ */
|
|
1405
|
-
/* @__PURE__ */
|
|
1440
|
+
/* @__PURE__ */ jsx29("span", { "aria-hidden": true, className: cn("shrink-0 text-xs text-muted-foreground transition-transform", !collapsed && "rotate-90"), children: "\u25B8" }),
|
|
1441
|
+
/* @__PURE__ */ jsx29("span", { className: "truncate", children: feature.title })
|
|
1406
1442
|
]
|
|
1407
1443
|
}
|
|
1408
1444
|
) : feature.title }),
|
|
1409
|
-
/* @__PURE__ */
|
|
1445
|
+
/* @__PURE__ */ jsxs19("p", { className: cn("mt-0.5 flex items-center gap-2 text-xs text-muted-foreground", collapse && "pl-5"), children: [
|
|
1446
|
+
kindLabel ? /* @__PURE__ */ jsx29("span", { className: "shrink-0 rounded-sm bg-muted px-1.5 py-0.5 font-medium text-foreground", children: kindLabel }) : null,
|
|
1447
|
+
/* @__PURE__ */ jsx29("span", { className: "truncate font-mono", children: feature.sourceFile })
|
|
1448
|
+
] })
|
|
1410
1449
|
] }),
|
|
1411
|
-
/* @__PURE__ */
|
|
1450
|
+
/* @__PURE__ */ jsxs19(
|
|
1412
1451
|
"p",
|
|
1413
1452
|
{
|
|
1414
1453
|
className: "flex shrink-0 items-center gap-1.5 text-xs text-muted-foreground",
|
|
1415
1454
|
"aria-label": `${s.passed} passed, ${s.failed} failed, ${skipped} skipped`,
|
|
1416
1455
|
children: [
|
|
1417
|
-
/* @__PURE__ */
|
|
1456
|
+
/* @__PURE__ */ jsxs19("span", { children: [
|
|
1418
1457
|
s.passed,
|
|
1419
1458
|
" passed"
|
|
1420
1459
|
] }),
|
|
1421
|
-
/* @__PURE__ */
|
|
1422
|
-
/* @__PURE__ */
|
|
1460
|
+
/* @__PURE__ */ jsx29("span", { "aria-hidden": true, children: "\xB7" }),
|
|
1461
|
+
/* @__PURE__ */ jsxs19("span", { className: cn(s.failed > 0 && "font-medium text-fail"), children: [
|
|
1423
1462
|
s.failed,
|
|
1424
1463
|
" failed"
|
|
1425
1464
|
] }),
|
|
1426
|
-
skipped > 0 ? /* @__PURE__ */
|
|
1427
|
-
/* @__PURE__ */
|
|
1428
|
-
/* @__PURE__ */
|
|
1465
|
+
skipped > 0 ? /* @__PURE__ */ jsxs19(Fragment9, { children: [
|
|
1466
|
+
/* @__PURE__ */ jsx29("span", { "aria-hidden": true, children: "\xB7" }),
|
|
1467
|
+
/* @__PURE__ */ jsxs19("span", { children: [
|
|
1429
1468
|
skipped,
|
|
1430
1469
|
" skipped"
|
|
1431
1470
|
] })
|
|
@@ -1434,7 +1473,10 @@ function ReportFeature({ feature }) {
|
|
|
1434
1473
|
}
|
|
1435
1474
|
)
|
|
1436
1475
|
] }),
|
|
1437
|
-
/* @__PURE__ */
|
|
1476
|
+
/* @__PURE__ */ jsxs19("div", { id: bodyId, hidden: collapsed, className: "flex flex-col gap-3", children: [
|
|
1477
|
+
/* @__PURE__ */ jsx29(ReportFeatureIntro, { feature }),
|
|
1478
|
+
/* @__PURE__ */ jsx29(ReportScenarioList, { feature })
|
|
1479
|
+
] })
|
|
1438
1480
|
]
|
|
1439
1481
|
}
|
|
1440
1482
|
)
|
|
@@ -1442,17 +1484,17 @@ function ReportFeature({ feature }) {
|
|
|
1442
1484
|
}
|
|
1443
1485
|
|
|
1444
1486
|
// src/components/ReportFeatureList.tsx
|
|
1445
|
-
import { jsx as
|
|
1487
|
+
import { jsx as jsx30 } from "react/jsx-runtime";
|
|
1446
1488
|
function ReportFeatureList() {
|
|
1447
1489
|
const report = useReport();
|
|
1448
|
-
return /* @__PURE__ */
|
|
1490
|
+
return /* @__PURE__ */ jsx30("div", { className: "flex flex-col gap-8", children: report.features.map((feature) => /* @__PURE__ */ jsx30(ReportFeature, { feature }, feature.id)) });
|
|
1449
1491
|
}
|
|
1450
1492
|
|
|
1451
1493
|
// src/components/ui/empty.tsx
|
|
1452
1494
|
import { cva as cva2 } from "class-variance-authority";
|
|
1453
|
-
import { jsx as
|
|
1495
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
1454
1496
|
function Empty({ className, ...props }) {
|
|
1455
|
-
return /* @__PURE__ */
|
|
1497
|
+
return /* @__PURE__ */ jsx31(
|
|
1456
1498
|
"div",
|
|
1457
1499
|
{
|
|
1458
1500
|
"data-slot": "empty",
|
|
@@ -1465,7 +1507,7 @@ function Empty({ className, ...props }) {
|
|
|
1465
1507
|
);
|
|
1466
1508
|
}
|
|
1467
1509
|
function EmptyHeader({ className, ...props }) {
|
|
1468
|
-
return /* @__PURE__ */
|
|
1510
|
+
return /* @__PURE__ */ jsx31(
|
|
1469
1511
|
"div",
|
|
1470
1512
|
{
|
|
1471
1513
|
"data-slot": "empty-header",
|
|
@@ -1492,7 +1534,7 @@ var emptyMediaVariants = cva2(
|
|
|
1492
1534
|
}
|
|
1493
1535
|
);
|
|
1494
1536
|
function EmptyTitle({ className, ...props }) {
|
|
1495
|
-
return /* @__PURE__ */
|
|
1537
|
+
return /* @__PURE__ */ jsx31(
|
|
1496
1538
|
"div",
|
|
1497
1539
|
{
|
|
1498
1540
|
"data-slot": "empty-title",
|
|
@@ -1503,16 +1545,16 @@ function EmptyTitle({ className, ...props }) {
|
|
|
1503
1545
|
}
|
|
1504
1546
|
|
|
1505
1547
|
// src/components/ReportEmpty.tsx
|
|
1506
|
-
import { jsx as
|
|
1548
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
1507
1549
|
function ReportEmpty({ message }) {
|
|
1508
|
-
return /* @__PURE__ */
|
|
1550
|
+
return /* @__PURE__ */ jsx32(Empty, { "aria-live": "polite", className: "border", children: /* @__PURE__ */ jsx32(EmptyHeader, { children: /* @__PURE__ */ jsx32(EmptyTitle, { children: message ?? "No scenarios in this report." }) }) });
|
|
1509
1551
|
}
|
|
1510
1552
|
|
|
1511
1553
|
// src/components/ReportSummary.tsx
|
|
1512
|
-
import { jsx as
|
|
1554
|
+
import { jsx as jsx33, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1513
1555
|
function ReportSummary({ className }) {
|
|
1514
1556
|
const report = useReport();
|
|
1515
|
-
return /* @__PURE__ */
|
|
1557
|
+
return /* @__PURE__ */ jsx33(
|
|
1516
1558
|
ReportSummaryView,
|
|
1517
1559
|
{
|
|
1518
1560
|
summary: report.summary,
|
|
@@ -1538,7 +1580,7 @@ function ReportSummaryView({ summary, className, ariaLabel }) {
|
|
|
1538
1580
|
if (summary.pending > 0) {
|
|
1539
1581
|
cards.push({ status: "pending", label: "Pending", value: summary.pending });
|
|
1540
1582
|
}
|
|
1541
|
-
return /* @__PURE__ */
|
|
1583
|
+
return /* @__PURE__ */ jsx33(
|
|
1542
1584
|
"dl",
|
|
1543
1585
|
{
|
|
1544
1586
|
className: cn(
|
|
@@ -1551,17 +1593,17 @@ function ReportSummaryView({ summary, className, ariaLabel }) {
|
|
|
1551
1593
|
"aria-label": ariaLabel,
|
|
1552
1594
|
children: cards.map((c) => {
|
|
1553
1595
|
const tone = TONE[c.status];
|
|
1554
|
-
return /* @__PURE__ */
|
|
1596
|
+
return /* @__PURE__ */ jsxs20(
|
|
1555
1597
|
"div",
|
|
1556
1598
|
{
|
|
1557
1599
|
"data-status": c.status,
|
|
1558
1600
|
className: "rounded-lg border bg-card px-4 py-3",
|
|
1559
1601
|
children: [
|
|
1560
|
-
/* @__PURE__ */
|
|
1561
|
-
/* @__PURE__ */
|
|
1602
|
+
/* @__PURE__ */ jsxs20("dt", { className: "flex items-center gap-1.5 font-mono text-[11px] font-medium uppercase tracking-wider text-muted-foreground", children: [
|
|
1603
|
+
/* @__PURE__ */ jsx33("span", { className: cn("size-1.5 shrink-0 rounded-full", tone.dot), "aria-hidden": "true" }),
|
|
1562
1604
|
c.label
|
|
1563
1605
|
] }),
|
|
1564
|
-
/* @__PURE__ */
|
|
1606
|
+
/* @__PURE__ */ jsx33("dd", { className: cn("mt-2 text-3xl font-semibold leading-none tracking-tight tabular-nums", tone.num), children: c.value })
|
|
1565
1607
|
]
|
|
1566
1608
|
},
|
|
1567
1609
|
c.status
|
|
@@ -1624,7 +1666,7 @@ function prUrl(ci) {
|
|
|
1624
1666
|
}
|
|
1625
1667
|
|
|
1626
1668
|
// src/components/ReportMeta.tsx
|
|
1627
|
-
import { jsx as
|
|
1669
|
+
import { jsx as jsx34, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
1628
1670
|
function ReportMeta() {
|
|
1629
1671
|
const report = useReport();
|
|
1630
1672
|
const items = [];
|
|
@@ -1647,13 +1689,13 @@ function ReportMeta() {
|
|
|
1647
1689
|
const short = sha.slice(0, 8);
|
|
1648
1690
|
items.push({
|
|
1649
1691
|
label: "Commit",
|
|
1650
|
-
value: url ? /* @__PURE__ */
|
|
1692
|
+
value: url ? /* @__PURE__ */ jsx34("a", { href: url, target: "_blank", rel: "noreferrer noopener", className: linkClass, children: short }) : short
|
|
1651
1693
|
});
|
|
1652
1694
|
}
|
|
1653
1695
|
if (report.ci) {
|
|
1654
1696
|
items.push({
|
|
1655
1697
|
label: "CI",
|
|
1656
|
-
value: report.ci.url ? /* @__PURE__ */
|
|
1698
|
+
value: report.ci.url ? /* @__PURE__ */ jsxs21("a", { href: report.ci.url, target: "_blank", rel: "noreferrer noopener", className: linkClass, children: [
|
|
1657
1699
|
ciDisplayName(report.ci.name),
|
|
1658
1700
|
report.ci.buildNumber ? ` #${report.ci.buildNumber}` : ""
|
|
1659
1701
|
] }) : `${ciDisplayName(report.ci.name)}${report.ci.buildNumber ? ` #${report.ci.buildNumber}` : ""}`
|
|
@@ -1664,7 +1706,7 @@ function ReportMeta() {
|
|
|
1664
1706
|
const label = `#${report.ci.prNumber}`;
|
|
1665
1707
|
items.push({
|
|
1666
1708
|
label: "PR",
|
|
1667
|
-
value: url ? /* @__PURE__ */
|
|
1709
|
+
value: url ? /* @__PURE__ */ jsx34("a", { href: url, target: "_blank", rel: "noreferrer noopener", className: linkClass, children: label }) : label
|
|
1668
1710
|
});
|
|
1669
1711
|
}
|
|
1670
1712
|
if (items.length === 0) return null;
|
|
@@ -1672,50 +1714,50 @@ function ReportMeta() {
|
|
|
1672
1714
|
// Run metadata is useful but secondary to "what failed" — tuck it into a
|
|
1673
1715
|
// collapsed disclosure so it doesn't push the result down. Native <details>
|
|
1674
1716
|
// so it works with no JS (the SSR/no-hydration report still toggles).
|
|
1675
|
-
/* @__PURE__ */
|
|
1676
|
-
/* @__PURE__ */
|
|
1677
|
-
/* @__PURE__ */
|
|
1717
|
+
/* @__PURE__ */ jsxs21("details", { "data-es-meta-card": true, className: "es-run-details group rounded-lg border border-border bg-card text-xs", children: [
|
|
1718
|
+
/* @__PURE__ */ jsxs21("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: [
|
|
1719
|
+
/* @__PURE__ */ jsx34("span", { "aria-hidden": true, className: "text-xs transition-transform group-open:rotate-90", children: "\u25B8" }),
|
|
1678
1720
|
"Run details"
|
|
1679
1721
|
] }),
|
|
1680
|
-
/* @__PURE__ */
|
|
1681
|
-
/* @__PURE__ */
|
|
1682
|
-
/* @__PURE__ */
|
|
1722
|
+
/* @__PURE__ */ jsx34("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__ */ jsxs21("div", { className: "flex items-baseline gap-1.5", children: [
|
|
1723
|
+
/* @__PURE__ */ jsx34("dt", { className: "font-medium", children: item.label }),
|
|
1724
|
+
/* @__PURE__ */ jsx34("dd", { className: "font-mono text-foreground", children: item.value })
|
|
1683
1725
|
] }, item.label)) })
|
|
1684
1726
|
] })
|
|
1685
1727
|
);
|
|
1686
1728
|
}
|
|
1687
1729
|
|
|
1688
1730
|
// src/components/ReportSchemaError.tsx
|
|
1689
|
-
import { jsx as
|
|
1731
|
+
import { jsx as jsx35, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
1690
1732
|
function ReportSchemaError({ error }) {
|
|
1691
|
-
return /* @__PURE__ */
|
|
1692
|
-
/* @__PURE__ */
|
|
1693
|
-
/* @__PURE__ */
|
|
1694
|
-
error.code === "SCHEMA_VERSION_MISMATCH" ? /* @__PURE__ */
|
|
1733
|
+
return /* @__PURE__ */ jsxs22("section", { className: "es-schema-error", role: "alert", "aria-live": "assertive", children: [
|
|
1734
|
+
/* @__PURE__ */ jsx35("p", { children: /* @__PURE__ */ jsx35("strong", { children: "Report could not be displayed." }) }),
|
|
1735
|
+
/* @__PURE__ */ jsx35("p", { children: error.message }),
|
|
1736
|
+
error.code === "SCHEMA_VERSION_MISMATCH" ? /* @__PURE__ */ jsxs22("p", { children: [
|
|
1695
1737
|
"The report bundle is newer than this version of ",
|
|
1696
|
-
/* @__PURE__ */
|
|
1738
|
+
/* @__PURE__ */ jsx35("code", { children: "executable-stories-react" }),
|
|
1697
1739
|
". Upgrade the package, or regenerate the report with an older formatters CLI."
|
|
1698
1740
|
] }) : null,
|
|
1699
|
-
error.issues && error.issues.length > 0 ? /* @__PURE__ */
|
|
1700
|
-
/* @__PURE__ */
|
|
1741
|
+
error.issues && error.issues.length > 0 ? /* @__PURE__ */ jsxs22("details", { children: [
|
|
1742
|
+
/* @__PURE__ */ jsxs22("summary", { children: [
|
|
1701
1743
|
error.issues.length,
|
|
1702
1744
|
" validation issue",
|
|
1703
1745
|
error.issues.length === 1 ? "" : "s"
|
|
1704
1746
|
] }),
|
|
1705
|
-
/* @__PURE__ */
|
|
1747
|
+
/* @__PURE__ */ jsx35("pre", { children: error.issues.slice(0, 20).map((i) => `${i.path}: ${i.message}`).join("\n") })
|
|
1706
1748
|
] }) : null
|
|
1707
1749
|
] });
|
|
1708
1750
|
}
|
|
1709
1751
|
|
|
1710
1752
|
// src/components/ReportShell.tsx
|
|
1711
|
-
import { Fragment as Fragment10, jsx as
|
|
1753
|
+
import { Fragment as Fragment10, jsx as jsx36, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
1712
1754
|
function ReportErrorShell({
|
|
1713
1755
|
error,
|
|
1714
1756
|
className,
|
|
1715
1757
|
title,
|
|
1716
1758
|
dataTheme
|
|
1717
1759
|
}) {
|
|
1718
|
-
return /* @__PURE__ */
|
|
1760
|
+
return /* @__PURE__ */ jsx36("main", { className: cn("es-report", className), "aria-label": title ?? "Test report", "data-theme": dataTheme, children: /* @__PURE__ */ jsx36(ReportSchemaError, { error }) });
|
|
1719
1761
|
}
|
|
1720
1762
|
|
|
1721
1763
|
// src/interactive/ReportInteractive.tsx
|
|
@@ -1724,12 +1766,12 @@ import { Monitor, Moon, Sun } from "lucide-react";
|
|
|
1724
1766
|
// src/components/ui/switch.tsx
|
|
1725
1767
|
import "react";
|
|
1726
1768
|
import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
|
|
1727
|
-
import { jsx as
|
|
1769
|
+
import { jsx as jsx37 } from "react/jsx-runtime";
|
|
1728
1770
|
function Switch({
|
|
1729
1771
|
className,
|
|
1730
1772
|
...props
|
|
1731
1773
|
}) {
|
|
1732
|
-
return /* @__PURE__ */
|
|
1774
|
+
return /* @__PURE__ */ jsx37(
|
|
1733
1775
|
SwitchPrimitive.Root,
|
|
1734
1776
|
{
|
|
1735
1777
|
"data-slot": "switch",
|
|
@@ -1738,7 +1780,7 @@ function Switch({
|
|
|
1738
1780
|
className
|
|
1739
1781
|
),
|
|
1740
1782
|
...props,
|
|
1741
|
-
children: /* @__PURE__ */
|
|
1783
|
+
children: /* @__PURE__ */ jsx37(
|
|
1742
1784
|
SwitchPrimitive.Thumb,
|
|
1743
1785
|
{
|
|
1744
1786
|
"data-slot": "switch-thumb",
|
|
@@ -1754,7 +1796,7 @@ import * as React5 from "react";
|
|
|
1754
1796
|
import { ToggleGroup as ToggleGroupPrimitive } from "@base-ui/react/toggle-group";
|
|
1755
1797
|
import { Toggle as TogglePrimitive } from "@base-ui/react/toggle";
|
|
1756
1798
|
import { cva as cva3 } from "class-variance-authority";
|
|
1757
|
-
import { jsx as
|
|
1799
|
+
import { jsx as jsx38 } from "react/jsx-runtime";
|
|
1758
1800
|
var toggleItemVariants = cva3(
|
|
1759
1801
|
"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",
|
|
1760
1802
|
{
|
|
@@ -1776,13 +1818,13 @@ function ToggleGroup({
|
|
|
1776
1818
|
children,
|
|
1777
1819
|
...props
|
|
1778
1820
|
}) {
|
|
1779
|
-
return /* @__PURE__ */
|
|
1821
|
+
return /* @__PURE__ */ jsx38(
|
|
1780
1822
|
ToggleGroupPrimitive,
|
|
1781
1823
|
{
|
|
1782
1824
|
"data-slot": "toggle-group",
|
|
1783
1825
|
className: cn("flex w-fit items-center gap-0.5 rounded-lg bg-muted p-0.5", className),
|
|
1784
1826
|
...props,
|
|
1785
|
-
children: /* @__PURE__ */
|
|
1827
|
+
children: /* @__PURE__ */ jsx38(ToggleGroupContext.Provider, { value: { size }, children })
|
|
1786
1828
|
}
|
|
1787
1829
|
);
|
|
1788
1830
|
}
|
|
@@ -1793,7 +1835,7 @@ function ToggleGroupItem({
|
|
|
1793
1835
|
...props
|
|
1794
1836
|
}) {
|
|
1795
1837
|
const context = React5.useContext(ToggleGroupContext);
|
|
1796
|
-
return /* @__PURE__ */
|
|
1838
|
+
return /* @__PURE__ */ jsx38(
|
|
1797
1839
|
TogglePrimitive,
|
|
1798
1840
|
{
|
|
1799
1841
|
"data-slot": "toggle-group-item",
|
|
@@ -1813,9 +1855,9 @@ import { Search } from "lucide-react";
|
|
|
1813
1855
|
|
|
1814
1856
|
// src/components/ui/input.tsx
|
|
1815
1857
|
import "react";
|
|
1816
|
-
import { jsx as
|
|
1858
|
+
import { jsx as jsx39 } from "react/jsx-runtime";
|
|
1817
1859
|
function Input({ className, type, ...props }) {
|
|
1818
|
-
return /* @__PURE__ */
|
|
1860
|
+
return /* @__PURE__ */ jsx39(
|
|
1819
1861
|
"input",
|
|
1820
1862
|
{
|
|
1821
1863
|
type,
|
|
@@ -1832,7 +1874,7 @@ function Input({ className, type, ...props }) {
|
|
|
1832
1874
|
}
|
|
1833
1875
|
|
|
1834
1876
|
// src/interactive/ReportSearch.tsx
|
|
1835
|
-
import { jsx as
|
|
1877
|
+
import { jsx as jsx40, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
1836
1878
|
var ReportSearch = forwardRef(
|
|
1837
1879
|
function ReportSearch2(props, ref) {
|
|
1838
1880
|
const {
|
|
@@ -1854,17 +1896,17 @@ var ReportSearch = forwardRef(
|
|
|
1854
1896
|
e.preventDefault();
|
|
1855
1897
|
}
|
|
1856
1898
|
}
|
|
1857
|
-
return /* @__PURE__ */
|
|
1858
|
-
/* @__PURE__ */
|
|
1859
|
-
/* @__PURE__ */
|
|
1860
|
-
/* @__PURE__ */
|
|
1899
|
+
return /* @__PURE__ */ jsxs24("div", { className: cn("es-search flex flex-col gap-1", className), children: [
|
|
1900
|
+
/* @__PURE__ */ jsx40("label", { htmlFor: inputId, className: "sr-only", children: "Search" }),
|
|
1901
|
+
/* @__PURE__ */ jsxs24("div", { className: "relative w-full sm:w-72", children: [
|
|
1902
|
+
/* @__PURE__ */ jsx40(
|
|
1861
1903
|
Search,
|
|
1862
1904
|
{
|
|
1863
1905
|
"aria-hidden": true,
|
|
1864
1906
|
className: "pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-muted-foreground"
|
|
1865
1907
|
}
|
|
1866
1908
|
),
|
|
1867
|
-
/* @__PURE__ */
|
|
1909
|
+
/* @__PURE__ */ jsx40(
|
|
1868
1910
|
Input,
|
|
1869
1911
|
{
|
|
1870
1912
|
ref,
|
|
@@ -1881,7 +1923,7 @@ var ReportSearch = forwardRef(
|
|
|
1881
1923
|
}
|
|
1882
1924
|
)
|
|
1883
1925
|
] }),
|
|
1884
|
-
showCounts ? /* @__PURE__ */
|
|
1926
|
+
showCounts ? /* @__PURE__ */ jsxs24(
|
|
1885
1927
|
"span",
|
|
1886
1928
|
{
|
|
1887
1929
|
className: "text-xs tabular-nums text-muted-foreground",
|
|
@@ -1970,7 +2012,7 @@ function scrollToScenarioId(scenarioId, options = {}) {
|
|
|
1970
2012
|
}
|
|
1971
2013
|
|
|
1972
2014
|
// src/interactive/ReportFailureBanner.tsx
|
|
1973
|
-
import { jsx as
|
|
2015
|
+
import { jsx as jsx41, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
1974
2016
|
function ReportFailureBanner({ failures }) {
|
|
1975
2017
|
const first = failures[0];
|
|
1976
2018
|
const jumpToFirst = useCallback2(() => {
|
|
@@ -1978,7 +2020,7 @@ function ReportFailureBanner({ failures }) {
|
|
|
1978
2020
|
scrollToScenarioId(first.scenarioId);
|
|
1979
2021
|
}, [first]);
|
|
1980
2022
|
if (failures.length === 0) return null;
|
|
1981
|
-
return /* @__PURE__ */
|
|
2023
|
+
return /* @__PURE__ */ jsxs25(
|
|
1982
2024
|
"div",
|
|
1983
2025
|
{
|
|
1984
2026
|
className: "es-failure-banner",
|
|
@@ -1986,13 +2028,13 @@ function ReportFailureBanner({ failures }) {
|
|
|
1986
2028
|
"aria-live": "polite",
|
|
1987
2029
|
"aria-label": "Failure summary",
|
|
1988
2030
|
children: [
|
|
1989
|
-
/* @__PURE__ */
|
|
1990
|
-
/* @__PURE__ */
|
|
2031
|
+
/* @__PURE__ */ jsxs25("span", { className: "es-failure-banner-text", children: [
|
|
2032
|
+
/* @__PURE__ */ jsx41("strong", { children: failures.length }),
|
|
1991
2033
|
" ",
|
|
1992
2034
|
"failure",
|
|
1993
2035
|
failures.length === 1 ? "" : "s"
|
|
1994
2036
|
] }),
|
|
1995
|
-
/* @__PURE__ */
|
|
2037
|
+
/* @__PURE__ */ jsx41(
|
|
1996
2038
|
"button",
|
|
1997
2039
|
{
|
|
1998
2040
|
type: "button",
|
|
@@ -2009,7 +2051,7 @@ function ReportFailureBanner({ failures }) {
|
|
|
2009
2051
|
|
|
2010
2052
|
// src/interactive/ReportFreshness.tsx
|
|
2011
2053
|
import { useEffect, useState as useState2 } from "react";
|
|
2012
|
-
import { Fragment as Fragment11, jsx as
|
|
2054
|
+
import { Fragment as Fragment11, jsx as jsx42, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
2013
2055
|
function ReportFreshness({ lastRunMs, ciUrl, staleAfterDays, nowMs }) {
|
|
2014
2056
|
const [now, setNow] = useState2(nowMs);
|
|
2015
2057
|
useEffect(() => {
|
|
@@ -2017,7 +2059,7 @@ function ReportFreshness({ lastRunMs, ciUrl, staleAfterDays, nowMs }) {
|
|
|
2017
2059
|
}, [nowMs]);
|
|
2018
2060
|
if (lastRunMs === void 0 || now === void 0) return null;
|
|
2019
2061
|
const age = formatRelativeAge(lastRunMs, now);
|
|
2020
|
-
const runLink = ciUrl ? /* @__PURE__ */
|
|
2062
|
+
const runLink = ciUrl ? /* @__PURE__ */ jsx42(
|
|
2021
2063
|
"a",
|
|
2022
2064
|
{
|
|
2023
2065
|
href: ciUrl,
|
|
@@ -2028,9 +2070,9 @@ function ReportFreshness({ lastRunMs, ciUrl, staleAfterDays, nowMs }) {
|
|
|
2028
2070
|
}
|
|
2029
2071
|
) : null;
|
|
2030
2072
|
if (isReportStale(lastRunMs, staleAfterDays, now)) {
|
|
2031
|
-
return /* @__PURE__ */
|
|
2032
|
-
/* @__PURE__ */
|
|
2033
|
-
/* @__PURE__ */
|
|
2073
|
+
return /* @__PURE__ */ jsxs26("div", { className: "es-stale-banner", role: "status", "aria-label": "Report freshness", children: [
|
|
2074
|
+
/* @__PURE__ */ jsxs26("span", { children: [
|
|
2075
|
+
/* @__PURE__ */ jsxs26("strong", { children: [
|
|
2034
2076
|
"Last verified ",
|
|
2035
2077
|
age,
|
|
2036
2078
|
"."
|
|
@@ -2040,10 +2082,10 @@ function ReportFreshness({ lastRunMs, ciUrl, staleAfterDays, nowMs }) {
|
|
|
2040
2082
|
runLink
|
|
2041
2083
|
] });
|
|
2042
2084
|
}
|
|
2043
|
-
return /* @__PURE__ */
|
|
2085
|
+
return /* @__PURE__ */ jsxs26("p", { className: "es-freshness", "aria-label": "Report freshness", children: [
|
|
2044
2086
|
"Verified ",
|
|
2045
2087
|
age,
|
|
2046
|
-
runLink ? /* @__PURE__ */
|
|
2088
|
+
runLink ? /* @__PURE__ */ jsxs26(Fragment11, { children: [
|
|
2047
2089
|
" \xB7 ",
|
|
2048
2090
|
runLink
|
|
2049
2091
|
] }) : null
|
|
@@ -2051,15 +2093,15 @@ function ReportFreshness({ lastRunMs, ciUrl, staleAfterDays, nowMs }) {
|
|
|
2051
2093
|
}
|
|
2052
2094
|
|
|
2053
2095
|
// src/interactive/ReportLastRunDelta.tsx
|
|
2054
|
-
import { Fragment as Fragment12, jsx as
|
|
2096
|
+
import { Fragment as Fragment12, jsx as jsx43, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
2055
2097
|
var MAX_LINKS = 5;
|
|
2056
2098
|
function ScenarioLinks({ scenarios, tone }) {
|
|
2057
|
-
return /* @__PURE__ */
|
|
2058
|
-
scenarios.slice(0, MAX_LINKS).map((s, i) => /* @__PURE__ */
|
|
2099
|
+
return /* @__PURE__ */ jsxs27(Fragment12, { children: [
|
|
2100
|
+
scenarios.slice(0, MAX_LINKS).map((s, i) => /* @__PURE__ */ jsxs27("span", { children: [
|
|
2059
2101
|
i > 0 ? ", " : "",
|
|
2060
|
-
/* @__PURE__ */
|
|
2102
|
+
/* @__PURE__ */ jsx43("a", { href: `#${s.id}`, className: cn("underline underline-offset-2 hover:no-underline", tone), children: s.title })
|
|
2061
2103
|
] }, s.id)),
|
|
2062
|
-
scenarios.length > MAX_LINKS ? /* @__PURE__ */
|
|
2104
|
+
scenarios.length > MAX_LINKS ? /* @__PURE__ */ jsxs27("span", { children: [
|
|
2063
2105
|
" and ",
|
|
2064
2106
|
scenarios.length - MAX_LINKS,
|
|
2065
2107
|
" more"
|
|
@@ -2076,23 +2118,23 @@ function ReportLastRunDelta({
|
|
|
2076
2118
|
if (!delta) return null;
|
|
2077
2119
|
const { newlyFailing, newlyPassing, added } = delta;
|
|
2078
2120
|
if (newlyFailing.length === 0 && newlyPassing.length === 0 && added.length === 0) {
|
|
2079
|
-
return /* @__PURE__ */
|
|
2121
|
+
return /* @__PURE__ */ jsx43("p", { className: "text-xs text-muted-foreground", "data-testid": "es-last-run-delta", children: "Since last run: no behavior changes." });
|
|
2080
2122
|
}
|
|
2081
|
-
return /* @__PURE__ */
|
|
2082
|
-
/* @__PURE__ */
|
|
2083
|
-
newlyFailing.length > 0 ? /* @__PURE__ */
|
|
2123
|
+
return /* @__PURE__ */ jsxs27("p", { className: "text-xs text-muted-foreground", "data-testid": "es-last-run-delta", children: [
|
|
2124
|
+
/* @__PURE__ */ jsx43("span", { className: "font-medium text-foreground", children: "Since last run:" }),
|
|
2125
|
+
newlyFailing.length > 0 ? /* @__PURE__ */ jsxs27("span", { className: "ml-2 text-fail", children: [
|
|
2084
2126
|
newlyFailing.length,
|
|
2085
2127
|
" newly failing (",
|
|
2086
|
-
/* @__PURE__ */
|
|
2128
|
+
/* @__PURE__ */ jsx43(ScenarioLinks, { scenarios: newlyFailing, tone: "text-fail" }),
|
|
2087
2129
|
")"
|
|
2088
2130
|
] }) : null,
|
|
2089
|
-
newlyPassing.length > 0 ? /* @__PURE__ */
|
|
2131
|
+
newlyPassing.length > 0 ? /* @__PURE__ */ jsxs27("span", { className: "ml-2 text-pass", children: [
|
|
2090
2132
|
newlyPassing.length,
|
|
2091
2133
|
" fixed (",
|
|
2092
|
-
/* @__PURE__ */
|
|
2134
|
+
/* @__PURE__ */ jsx43(ScenarioLinks, { scenarios: newlyPassing, tone: "text-pass" }),
|
|
2093
2135
|
")"
|
|
2094
2136
|
] }) : null,
|
|
2095
|
-
added.length > 0 ? /* @__PURE__ */
|
|
2137
|
+
added.length > 0 ? /* @__PURE__ */ jsxs27("span", { className: "ml-2", children: [
|
|
2096
2138
|
added.length,
|
|
2097
2139
|
" new"
|
|
2098
2140
|
] }) : null
|
|
@@ -2156,7 +2198,7 @@ function Button({
|
|
|
2156
2198
|
}
|
|
2157
2199
|
|
|
2158
2200
|
// src/interactive/ReportShortcutsHelp.tsx
|
|
2159
|
-
import { jsx as
|
|
2201
|
+
import { jsx as jsx44, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
2160
2202
|
var SHORTCUTS = [
|
|
2161
2203
|
{ keys: "/", description: "Focus search" },
|
|
2162
2204
|
{ keys: "f", description: "Jump to next failure" },
|
|
@@ -2168,9 +2210,9 @@ var SHORTCUTS = [
|
|
|
2168
2210
|
];
|
|
2169
2211
|
function Keys({ keys }) {
|
|
2170
2212
|
const parts = keys.split(" ");
|
|
2171
|
-
return /* @__PURE__ */
|
|
2172
|
-
i > 0 ? /* @__PURE__ */
|
|
2173
|
-
/* @__PURE__ */
|
|
2213
|
+
return /* @__PURE__ */ jsx44("span", { className: "inline-flex items-center gap-1", children: parts.map((k, i) => /* @__PURE__ */ jsxs28("span", { className: "inline-flex items-center gap-1", children: [
|
|
2214
|
+
i > 0 ? /* @__PURE__ */ jsx44("span", { className: "text-xs text-muted-foreground", children: "+" }) : null,
|
|
2215
|
+
/* @__PURE__ */ jsx44("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 })
|
|
2174
2216
|
] }, k)) });
|
|
2175
2217
|
}
|
|
2176
2218
|
function ReportShortcutsHelp({ open, onClose }) {
|
|
@@ -2181,7 +2223,7 @@ function ReportShortcutsHelp({ open, onClose }) {
|
|
|
2181
2223
|
if (open && !dialog.open) dialog.showModal();
|
|
2182
2224
|
else if (!open && dialog.open) dialog.close();
|
|
2183
2225
|
}, [open]);
|
|
2184
|
-
return /* @__PURE__ */
|
|
2226
|
+
return /* @__PURE__ */ jsxs28(
|
|
2185
2227
|
"dialog",
|
|
2186
2228
|
{
|
|
2187
2229
|
ref: dialogRef,
|
|
@@ -2189,12 +2231,12 @@ function ReportShortcutsHelp({ open, onClose }) {
|
|
|
2189
2231
|
"aria-label": "Keyboard shortcuts",
|
|
2190
2232
|
onClose,
|
|
2191
2233
|
children: [
|
|
2192
|
-
/* @__PURE__ */
|
|
2193
|
-
/* @__PURE__ */
|
|
2194
|
-
/* @__PURE__ */
|
|
2195
|
-
/* @__PURE__ */
|
|
2234
|
+
/* @__PURE__ */ jsx44("h2", { className: "text-base font-semibold", children: "Keyboard shortcuts" }),
|
|
2235
|
+
/* @__PURE__ */ jsx44("dl", { className: "mt-4 grid grid-cols-[auto_1fr] items-center gap-x-4 gap-y-2.5", children: SHORTCUTS.map((s) => /* @__PURE__ */ jsxs28("div", { className: "col-span-2 grid grid-cols-subgrid items-center", children: [
|
|
2236
|
+
/* @__PURE__ */ jsx44("dt", { className: "justify-self-start", children: /* @__PURE__ */ jsx44(Keys, { keys: s.keys }) }),
|
|
2237
|
+
/* @__PURE__ */ jsx44("dd", { className: "text-sm text-muted-foreground", children: s.description })
|
|
2196
2238
|
] }, s.keys)) }),
|
|
2197
|
-
/* @__PURE__ */
|
|
2239
|
+
/* @__PURE__ */ jsx44("form", { method: "dialog", className: "mt-6", children: /* @__PURE__ */ jsx44(Button, { type: "submit", variant: "outline", size: "sm", children: "Close" }) })
|
|
2198
2240
|
]
|
|
2199
2241
|
}
|
|
2200
2242
|
);
|
|
@@ -2397,7 +2439,7 @@ function failuresFirst(report) {
|
|
|
2397
2439
|
|
|
2398
2440
|
// src/interactive/ReportFilters.tsx
|
|
2399
2441
|
import { useState as useState3 } from "react";
|
|
2400
|
-
import { jsx as
|
|
2442
|
+
import { jsx as jsx45, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
2401
2443
|
var TAG_LIMIT = 12;
|
|
2402
2444
|
function ReportFilters({
|
|
2403
2445
|
statuses,
|
|
@@ -2411,10 +2453,10 @@ function ReportFilters({
|
|
|
2411
2453
|
if (statuses.length === 0 && tags.length === 0) return null;
|
|
2412
2454
|
const tagsCollapsed = tags.length > TAG_LIMIT && !showAllTags;
|
|
2413
2455
|
const visibleTags = tagsCollapsed ? tags.slice(0, TAG_LIMIT) : tags;
|
|
2414
|
-
return /* @__PURE__ */
|
|
2415
|
-
statuses.length > 0 ? /* @__PURE__ */
|
|
2456
|
+
return /* @__PURE__ */ jsxs29("div", { className: "flex flex-col gap-2", children: [
|
|
2457
|
+
statuses.length > 0 ? /* @__PURE__ */ jsx45("div", { role: "group", "aria-label": "Filter by status", className: "flex flex-wrap gap-1", children: statuses.map((opt) => {
|
|
2416
2458
|
const active = status === opt.key;
|
|
2417
|
-
return /* @__PURE__ */
|
|
2459
|
+
return /* @__PURE__ */ jsxs29(
|
|
2418
2460
|
"button",
|
|
2419
2461
|
{
|
|
2420
2462
|
type: "button",
|
|
@@ -2426,23 +2468,23 @@ function ReportFilters({
|
|
|
2426
2468
|
),
|
|
2427
2469
|
children: [
|
|
2428
2470
|
opt.label,
|
|
2429
|
-
/* @__PURE__ */
|
|
2471
|
+
/* @__PURE__ */ jsx45("span", { className: "ml-1 font-mono opacity-70", children: opt.count })
|
|
2430
2472
|
]
|
|
2431
2473
|
},
|
|
2432
2474
|
opt.key
|
|
2433
2475
|
);
|
|
2434
2476
|
}) }) : null,
|
|
2435
|
-
tags.length > 0 ? /* @__PURE__ */
|
|
2477
|
+
tags.length > 0 ? /* @__PURE__ */ jsxs29("ul", { "aria-label": "Filter by tag", className: "flex flex-wrap items-center gap-1.5", children: [
|
|
2436
2478
|
visibleTags.map((tag) => {
|
|
2437
2479
|
const active = activeTags.includes(tag);
|
|
2438
|
-
return /* @__PURE__ */
|
|
2480
|
+
return /* @__PURE__ */ jsx45("li", { children: /* @__PURE__ */ jsx45(
|
|
2439
2481
|
"button",
|
|
2440
2482
|
{
|
|
2441
2483
|
type: "button",
|
|
2442
2484
|
"aria-pressed": active,
|
|
2443
2485
|
onClick: () => onToggleTag(tag),
|
|
2444
2486
|
className: "cursor-pointer",
|
|
2445
|
-
children: /* @__PURE__ */
|
|
2487
|
+
children: /* @__PURE__ */ jsx45(
|
|
2446
2488
|
Badge,
|
|
2447
2489
|
{
|
|
2448
2490
|
variant: "tag",
|
|
@@ -2455,7 +2497,7 @@ function ReportFilters({
|
|
|
2455
2497
|
}
|
|
2456
2498
|
) }, tag);
|
|
2457
2499
|
}),
|
|
2458
|
-
tags.length > TAG_LIMIT ? /* @__PURE__ */
|
|
2500
|
+
tags.length > TAG_LIMIT ? /* @__PURE__ */ jsx45("li", { children: /* @__PURE__ */ jsx45(
|
|
2459
2501
|
"button",
|
|
2460
2502
|
{
|
|
2461
2503
|
type: "button",
|
|
@@ -2471,7 +2513,7 @@ function ReportFilters({
|
|
|
2471
2513
|
|
|
2472
2514
|
// src/interactive/ReportToc.tsx
|
|
2473
2515
|
import { useEffect as useEffect5, useMemo as useMemo2, useState as useState4 } from "react";
|
|
2474
|
-
import { jsx as
|
|
2516
|
+
import { jsx as jsx46, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
2475
2517
|
var DOT = {
|
|
2476
2518
|
passed: "bg-pass",
|
|
2477
2519
|
failed: "bg-fail",
|
|
@@ -2500,11 +2542,11 @@ function TocContent({ onNavigate }) {
|
|
|
2500
2542
|
return () => observer.disconnect();
|
|
2501
2543
|
}, [scenarioIds]);
|
|
2502
2544
|
if (report.features.length === 0) return null;
|
|
2503
|
-
return /* @__PURE__ */
|
|
2504
|
-
/* @__PURE__ */
|
|
2505
|
-
/* @__PURE__ */
|
|
2545
|
+
return /* @__PURE__ */ jsx46("ul", { className: "flex list-none flex-col gap-4 pl-0", children: report.features.map((feature) => /* @__PURE__ */ jsxs30("li", { children: [
|
|
2546
|
+
/* @__PURE__ */ jsx46("p", { className: "mb-1.5 font-semibold leading-snug text-foreground", children: feature.title }),
|
|
2547
|
+
/* @__PURE__ */ jsx46("ul", { className: "flex list-none flex-col gap-0.5 pl-0", children: feature.scenarios.map((scenario) => {
|
|
2506
2548
|
const active = activeId === scenario.id;
|
|
2507
|
-
return /* @__PURE__ */
|
|
2549
|
+
return /* @__PURE__ */ jsx46("li", { children: /* @__PURE__ */ jsxs30(
|
|
2508
2550
|
"a",
|
|
2509
2551
|
{
|
|
2510
2552
|
href: `#${scenario.id}`,
|
|
@@ -2519,14 +2561,14 @@ function TocContent({ onNavigate }) {
|
|
|
2519
2561
|
active ? "border-primary font-medium text-foreground" : "border-border text-muted-foreground"
|
|
2520
2562
|
),
|
|
2521
2563
|
children: [
|
|
2522
|
-
/* @__PURE__ */
|
|
2564
|
+
/* @__PURE__ */ jsx46(
|
|
2523
2565
|
"span",
|
|
2524
2566
|
{
|
|
2525
2567
|
"aria-hidden": true,
|
|
2526
2568
|
className: cn("mt-1 size-1.5 shrink-0 rounded-full", DOT[scenario.status])
|
|
2527
2569
|
}
|
|
2528
2570
|
),
|
|
2529
|
-
/* @__PURE__ */
|
|
2571
|
+
/* @__PURE__ */ jsx46("span", { className: "break-words", children: scenario.title })
|
|
2530
2572
|
]
|
|
2531
2573
|
}
|
|
2532
2574
|
) }, scenario.id);
|
|
@@ -2536,14 +2578,14 @@ function TocContent({ onNavigate }) {
|
|
|
2536
2578
|
function ReportToc() {
|
|
2537
2579
|
const report = useReport();
|
|
2538
2580
|
if (report.features.length === 0) return null;
|
|
2539
|
-
return /* @__PURE__ */
|
|
2581
|
+
return /* @__PURE__ */ jsxs30(
|
|
2540
2582
|
"nav",
|
|
2541
2583
|
{
|
|
2542
2584
|
"aria-label": "Table of contents",
|
|
2543
2585
|
className: "sticky top-4 hidden h-fit w-64 shrink-0 self-start text-xs lg:block",
|
|
2544
2586
|
children: [
|
|
2545
|
-
/* @__PURE__ */
|
|
2546
|
-
/* @__PURE__ */
|
|
2587
|
+
/* @__PURE__ */ jsx46("p", { className: "mb-3 text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Contents" }),
|
|
2588
|
+
/* @__PURE__ */ jsx46(TocContent, {})
|
|
2547
2589
|
]
|
|
2548
2590
|
}
|
|
2549
2591
|
);
|
|
@@ -2553,31 +2595,31 @@ function ReportToc() {
|
|
|
2553
2595
|
import { useState as useState5 } from "react";
|
|
2554
2596
|
import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
|
|
2555
2597
|
import { ListIcon, XIcon } from "lucide-react";
|
|
2556
|
-
import { jsx as
|
|
2598
|
+
import { jsx as jsx47, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
2557
2599
|
function ReportTocDrawer() {
|
|
2558
2600
|
const report = useReport();
|
|
2559
2601
|
const [open, setOpen] = useState5(false);
|
|
2560
2602
|
if (report.features.length === 0) return null;
|
|
2561
|
-
return /* @__PURE__ */
|
|
2562
|
-
/* @__PURE__ */
|
|
2563
|
-
/* @__PURE__ */
|
|
2603
|
+
return /* @__PURE__ */ jsxs31(DialogPrimitive.Root, { open, onOpenChange: setOpen, children: [
|
|
2604
|
+
/* @__PURE__ */ jsxs31(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: [
|
|
2605
|
+
/* @__PURE__ */ jsx47(ListIcon, { "aria-hidden": true }),
|
|
2564
2606
|
" Contents"
|
|
2565
2607
|
] }),
|
|
2566
|
-
/* @__PURE__ */
|
|
2567
|
-
/* @__PURE__ */
|
|
2568
|
-
/* @__PURE__ */
|
|
2569
|
-
/* @__PURE__ */
|
|
2570
|
-
/* @__PURE__ */
|
|
2571
|
-
/* @__PURE__ */
|
|
2608
|
+
/* @__PURE__ */ jsxs31(DialogPrimitive.Portal, { children: [
|
|
2609
|
+
/* @__PURE__ */ jsx47(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" }),
|
|
2610
|
+
/* @__PURE__ */ jsxs31(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: [
|
|
2611
|
+
/* @__PURE__ */ jsxs31("div", { className: "flex items-center justify-between", children: [
|
|
2612
|
+
/* @__PURE__ */ jsx47(DialogPrimitive.Title, { className: "text-xs font-semibold tracking-wide text-muted-foreground uppercase", children: "Contents" }),
|
|
2613
|
+
/* @__PURE__ */ jsx47(
|
|
2572
2614
|
DialogPrimitive.Close,
|
|
2573
2615
|
{
|
|
2574
2616
|
"aria-label": "Close contents",
|
|
2575
2617
|
className: "cursor-pointer rounded p-1 text-muted-foreground hover:bg-muted hover:text-foreground [&_svg]:size-4",
|
|
2576
|
-
children: /* @__PURE__ */
|
|
2618
|
+
children: /* @__PURE__ */ jsx47(XIcon, { "aria-hidden": true })
|
|
2577
2619
|
}
|
|
2578
2620
|
)
|
|
2579
2621
|
] }),
|
|
2580
|
-
/* @__PURE__ */
|
|
2622
|
+
/* @__PURE__ */ jsx47(TocContent, { onNavigate: () => setOpen(false) })
|
|
2581
2623
|
] })
|
|
2582
2624
|
] })
|
|
2583
2625
|
] });
|
|
@@ -2660,14 +2702,14 @@ function useUrlState() {
|
|
|
2660
2702
|
}
|
|
2661
2703
|
|
|
2662
2704
|
// src/interactive/ReportInteractive.tsx
|
|
2663
|
-
import { Fragment as Fragment13, jsx as
|
|
2705
|
+
import { Fragment as Fragment13, jsx as jsx48, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
2664
2706
|
function ReportInteractive(props) {
|
|
2665
2707
|
const { report, className, title, dataTheme } = props;
|
|
2666
2708
|
const result = unwrapReport(report);
|
|
2667
2709
|
if (!result.ok) {
|
|
2668
|
-
return /* @__PURE__ */
|
|
2710
|
+
return /* @__PURE__ */ jsx48(ReportErrorShell, { error: result.error, className, title, dataTheme });
|
|
2669
2711
|
}
|
|
2670
|
-
return /* @__PURE__ */
|
|
2712
|
+
return /* @__PURE__ */ jsx48(ReportInteractiveView, { ...props, report: result.data });
|
|
2671
2713
|
}
|
|
2672
2714
|
var THEME_OPTIONS = [
|
|
2673
2715
|
{ value: "light", label: "Light", Icon: Sun },
|
|
@@ -2675,7 +2717,7 @@ var THEME_OPTIONS = [
|
|
|
2675
2717
|
{ value: "dark", label: "Dark", Icon: Moon }
|
|
2676
2718
|
];
|
|
2677
2719
|
function ThemeSegment({ pref, onPref }) {
|
|
2678
|
-
return /* @__PURE__ */
|
|
2720
|
+
return /* @__PURE__ */ jsx48(
|
|
2679
2721
|
ToggleGroup,
|
|
2680
2722
|
{
|
|
2681
2723
|
size: "sm",
|
|
@@ -2685,7 +2727,7 @@ function ThemeSegment({ pref, onPref }) {
|
|
|
2685
2727
|
if (next) onPref(next);
|
|
2686
2728
|
},
|
|
2687
2729
|
"aria-label": "Color theme",
|
|
2688
|
-
children: THEME_OPTIONS.map(({ value, label, Icon }) => /* @__PURE__ */
|
|
2730
|
+
children: THEME_OPTIONS.map(({ value, label, Icon }) => /* @__PURE__ */ jsx48(ToggleGroupItem, { value, "aria-label": label, title: label, className: "px-2", children: /* @__PURE__ */ jsx48(Icon, {}) }, value))
|
|
2689
2731
|
}
|
|
2690
2732
|
);
|
|
2691
2733
|
}
|
|
@@ -2816,13 +2858,13 @@ function ReportInteractiveView({
|
|
|
2816
2858
|
const totalScenarios = report.summary.total;
|
|
2817
2859
|
const matchedScenarios = filtered.summary.total;
|
|
2818
2860
|
const showToc = !hideToc && totalScenarios > 3;
|
|
2819
|
-
return /* @__PURE__ */
|
|
2861
|
+
return /* @__PURE__ */ jsx48(CollapseProvider, { value: collapse.api, children: /* @__PURE__ */ jsx48(ScenarioActionsProvider, { value: scenarioActions, children: /* @__PURE__ */ jsx48(ScenarioHistoryProvider, { value: scenarioHistory ?? null, children: /* @__PURE__ */ jsx48(
|
|
2820
2862
|
ReportRoot,
|
|
2821
2863
|
{
|
|
2822
2864
|
report: filtered,
|
|
2823
2865
|
customRenderers,
|
|
2824
2866
|
renderers,
|
|
2825
|
-
children: /* @__PURE__ */
|
|
2867
|
+
children: /* @__PURE__ */ jsxs32(
|
|
2826
2868
|
"main",
|
|
2827
2869
|
{
|
|
2828
2870
|
className: cn("es-report", "es-report-interactive", className),
|
|
@@ -2831,8 +2873,8 @@ function ReportInteractiveView({
|
|
|
2831
2873
|
"data-theme": dataTheme,
|
|
2832
2874
|
"data-detail-level": detail,
|
|
2833
2875
|
children: [
|
|
2834
|
-
/* @__PURE__ */
|
|
2835
|
-
/* @__PURE__ */
|
|
2876
|
+
/* @__PURE__ */ jsxs32("header", { className: "es-report-header", children: [
|
|
2877
|
+
/* @__PURE__ */ jsxs32(
|
|
2836
2878
|
"div",
|
|
2837
2879
|
{
|
|
2838
2880
|
"data-es-navbar": true,
|
|
@@ -2841,9 +2883,9 @@ function ReportInteractiveView({
|
|
|
2841
2883
|
hideHeader ? "justify-end" : "justify-between"
|
|
2842
2884
|
),
|
|
2843
2885
|
children: [
|
|
2844
|
-
hideHeader ? null : /* @__PURE__ */
|
|
2845
|
-
/* @__PURE__ */
|
|
2846
|
-
/* @__PURE__ */
|
|
2886
|
+
hideHeader ? null : /* @__PURE__ */ jsx48("h1", { className: "min-w-0", children: title ?? "Story Report" }),
|
|
2887
|
+
/* @__PURE__ */ jsxs32("div", { className: "flex items-center gap-2", children: [
|
|
2888
|
+
/* @__PURE__ */ jsx48(
|
|
2847
2889
|
ReportSearch,
|
|
2848
2890
|
{
|
|
2849
2891
|
ref: searchRef,
|
|
@@ -2853,16 +2895,16 @@ function ReportInteractiveView({
|
|
|
2853
2895
|
totalCount: totalScenarios
|
|
2854
2896
|
}
|
|
2855
2897
|
),
|
|
2856
|
-
/* @__PURE__ */
|
|
2898
|
+
/* @__PURE__ */ jsx48(ThemeSegment, { pref: themePref, onPref: setThemePref })
|
|
2857
2899
|
] })
|
|
2858
2900
|
]
|
|
2859
2901
|
}
|
|
2860
2902
|
),
|
|
2861
|
-
hideHeader ? null : /* @__PURE__ */
|
|
2862
|
-
/* @__PURE__ */
|
|
2863
|
-
/* @__PURE__ */
|
|
2903
|
+
hideHeader ? null : /* @__PURE__ */ jsxs32(Fragment13, { children: [
|
|
2904
|
+
/* @__PURE__ */ jsx48(ReportSummary, {}),
|
|
2905
|
+
/* @__PURE__ */ jsx48(ReportMeta, {})
|
|
2864
2906
|
] }),
|
|
2865
|
-
/* @__PURE__ */
|
|
2907
|
+
/* @__PURE__ */ jsx48(
|
|
2866
2908
|
ReportFreshness,
|
|
2867
2909
|
{
|
|
2868
2910
|
lastRunMs: reportLastRunMs(report),
|
|
@@ -2870,8 +2912,8 @@ function ReportInteractiveView({
|
|
|
2870
2912
|
staleAfterDays
|
|
2871
2913
|
}
|
|
2872
2914
|
),
|
|
2873
|
-
/* @__PURE__ */
|
|
2874
|
-
/* @__PURE__ */
|
|
2915
|
+
/* @__PURE__ */ jsx48(ReportLastRunDelta, { history: scenarioHistory, report }),
|
|
2916
|
+
/* @__PURE__ */ jsx48(
|
|
2875
2917
|
ReportFilters,
|
|
2876
2918
|
{
|
|
2877
2919
|
statuses: statusOptions,
|
|
@@ -2882,14 +2924,14 @@ function ReportInteractiveView({
|
|
|
2882
2924
|
onToggleTag: toggleTag
|
|
2883
2925
|
}
|
|
2884
2926
|
),
|
|
2885
|
-
/* @__PURE__ */
|
|
2886
|
-
showToc ? /* @__PURE__ */
|
|
2887
|
-
/* @__PURE__ */
|
|
2888
|
-
/* @__PURE__ */
|
|
2889
|
-
/* @__PURE__ */
|
|
2927
|
+
/* @__PURE__ */ jsxs32("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-2 border-t border-border/60 pt-3", children: [
|
|
2928
|
+
showToc ? /* @__PURE__ */ jsx48(ReportTocDrawer, {}) : null,
|
|
2929
|
+
/* @__PURE__ */ jsxs32("div", { className: "flex items-center gap-2", children: [
|
|
2930
|
+
/* @__PURE__ */ jsx48(Switch, { id: expandId, checked: expandedAll, onCheckedChange: setExpanded }),
|
|
2931
|
+
/* @__PURE__ */ jsx48("label", { htmlFor: expandId, className: "cursor-pointer text-sm text-muted-foreground select-none", children: "Expand all" })
|
|
2890
2932
|
] }),
|
|
2891
|
-
/* @__PURE__ */
|
|
2892
|
-
/* @__PURE__ */
|
|
2933
|
+
/* @__PURE__ */ jsxs32("div", { className: "flex items-center gap-2", children: [
|
|
2934
|
+
/* @__PURE__ */ jsx48(
|
|
2893
2935
|
Switch,
|
|
2894
2936
|
{
|
|
2895
2937
|
id: docsId,
|
|
@@ -2897,16 +2939,16 @@ function ReportInteractiveView({
|
|
|
2897
2939
|
onCheckedChange: (checked) => setDetail(checked ? "full" : "minimal")
|
|
2898
2940
|
}
|
|
2899
2941
|
),
|
|
2900
|
-
/* @__PURE__ */
|
|
2942
|
+
/* @__PURE__ */ jsx48("label", { htmlFor: docsId, className: "cursor-pointer text-sm text-muted-foreground select-none", children: "Show documentation" })
|
|
2901
2943
|
] })
|
|
2902
2944
|
] })
|
|
2903
2945
|
] }),
|
|
2904
|
-
/* @__PURE__ */
|
|
2905
|
-
hasContent ? showToc ? /* @__PURE__ */
|
|
2906
|
-
/* @__PURE__ */
|
|
2907
|
-
/* @__PURE__ */
|
|
2908
|
-
] }) : /* @__PURE__ */
|
|
2909
|
-
/* @__PURE__ */
|
|
2946
|
+
/* @__PURE__ */ jsx48(ReportFailureBanner, { failures }),
|
|
2947
|
+
hasContent ? showToc ? /* @__PURE__ */ jsxs32("div", { className: "flex gap-6", children: [
|
|
2948
|
+
/* @__PURE__ */ jsx48(ReportToc, {}),
|
|
2949
|
+
/* @__PURE__ */ jsx48("div", { className: "flex min-w-0 flex-1 flex-col gap-4", children: /* @__PURE__ */ jsx48(ReportFeatureList, {}) })
|
|
2950
|
+
] }) : /* @__PURE__ */ jsx48("div", { className: "flex flex-col gap-4", children: /* @__PURE__ */ jsx48(ReportFeatureList, {}) }) : /* @__PURE__ */ jsx48(ReportEmpty, { message: query ? "No scenarios match the search." : void 0 }),
|
|
2951
|
+
/* @__PURE__ */ jsx48(
|
|
2910
2952
|
"button",
|
|
2911
2953
|
{
|
|
2912
2954
|
type: "button",
|
|
@@ -2917,8 +2959,8 @@ function ReportInteractiveView({
|
|
|
2917
2959
|
children: "?"
|
|
2918
2960
|
}
|
|
2919
2961
|
),
|
|
2920
|
-
/* @__PURE__ */
|
|
2921
|
-
toast ? /* @__PURE__ */
|
|
2962
|
+
/* @__PURE__ */ jsx48(ReportShortcutsHelp, { open: helpOpen, onClose: () => setHelpOpen(false) }),
|
|
2963
|
+
toast ? /* @__PURE__ */ jsx48(
|
|
2922
2964
|
"div",
|
|
2923
2965
|
{
|
|
2924
2966
|
role: "status",
|
|
@@ -2942,7 +2984,7 @@ import { createElement, useEffect as useEffect9, useState as useState10 } from "
|
|
|
2942
2984
|
|
|
2943
2985
|
// src/components/doc/MermaidView.tsx
|
|
2944
2986
|
import { useEffect as useEffect8, useRef as useRef6, useState as useState9 } from "react";
|
|
2945
|
-
import { Fragment as Fragment14, jsx as
|
|
2987
|
+
import { Fragment as Fragment14, jsx as jsx49, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
2946
2988
|
function prefersDark(el) {
|
|
2947
2989
|
const themed = el?.closest("[data-theme]");
|
|
2948
2990
|
if (themed?.dataset.theme === "dark") return true;
|
|
@@ -2996,9 +3038,9 @@ function MermaidView({ entry, load }) {
|
|
|
2996
3038
|
};
|
|
2997
3039
|
}, [entry.code, load]);
|
|
2998
3040
|
if (svg) {
|
|
2999
|
-
return /* @__PURE__ */
|
|
3000
|
-
entry.title ? /* @__PURE__ */
|
|
3001
|
-
/* @__PURE__ */
|
|
3041
|
+
return /* @__PURE__ */ jsxs33("figure", { ref, className: "my-3", children: [
|
|
3042
|
+
entry.title ? /* @__PURE__ */ jsx49("figcaption", { className: "mb-1.5 text-xs font-medium text-muted-foreground", children: entry.title }) : null,
|
|
3043
|
+
/* @__PURE__ */ jsx49(
|
|
3002
3044
|
"div",
|
|
3003
3045
|
{
|
|
3004
3046
|
role: "img",
|
|
@@ -3009,8 +3051,8 @@ function MermaidView({ entry, load }) {
|
|
|
3009
3051
|
)
|
|
3010
3052
|
] });
|
|
3011
3053
|
}
|
|
3012
|
-
return /* @__PURE__ */
|
|
3013
|
-
error ? /* @__PURE__ */
|
|
3054
|
+
return /* @__PURE__ */ jsxs33(Fragment14, { children: [
|
|
3055
|
+
error ? /* @__PURE__ */ jsxs33(
|
|
3014
3056
|
"p",
|
|
3015
3057
|
{
|
|
3016
3058
|
role: "alert",
|
|
@@ -3022,12 +3064,12 @@ function MermaidView({ entry, load }) {
|
|
|
3022
3064
|
]
|
|
3023
3065
|
}
|
|
3024
3066
|
) : null,
|
|
3025
|
-
/* @__PURE__ */
|
|
3067
|
+
/* @__PURE__ */ jsx49(MermaidSource, { entry, ref })
|
|
3026
3068
|
] });
|
|
3027
3069
|
}
|
|
3028
3070
|
|
|
3029
3071
|
// src/interactive/island-renderers.tsx
|
|
3030
|
-
import { jsx as
|
|
3072
|
+
import { jsx as jsx50 } from "react/jsx-runtime";
|
|
3031
3073
|
var HLJS_ESM = "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/es/highlight.min.js";
|
|
3032
3074
|
var MERMAID_ESM = "https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs";
|
|
3033
3075
|
function cachedCdnModule(url) {
|
|
@@ -3061,13 +3103,13 @@ function CdnHighlightedCode({ entry }) {
|
|
|
3061
3103
|
cancelled = true;
|
|
3062
3104
|
};
|
|
3063
3105
|
}, [entry.content, entry.lang]);
|
|
3064
|
-
return /* @__PURE__ */
|
|
3106
|
+
return /* @__PURE__ */ jsx50(CodeFigure, { label: entry.label, children: html !== null ? /* @__PURE__ */ jsx50(
|
|
3065
3107
|
"code",
|
|
3066
3108
|
{
|
|
3067
3109
|
className: cn("hljs font-mono text-xs", entry.lang && `language-${entry.lang}`),
|
|
3068
3110
|
dangerouslySetInnerHTML: { __html: html }
|
|
3069
3111
|
}
|
|
3070
|
-
) : /* @__PURE__ */
|
|
3112
|
+
) : /* @__PURE__ */ jsx50("code", { className: cn("font-mono text-xs", entry.lang && `language-${entry.lang}`), children: entry.content }) });
|
|
3071
3113
|
}
|
|
3072
3114
|
function buildIslandRenderers(opts) {
|
|
3073
3115
|
const renderers = {};
|
|
@@ -3081,7 +3123,7 @@ function buildIslandRenderers(opts) {
|
|
|
3081
3123
|
}
|
|
3082
3124
|
|
|
3083
3125
|
// src/interactive/ReportInteractiveIsland.tsx
|
|
3084
|
-
import { jsx as
|
|
3126
|
+
import { jsx as jsx51 } from "react/jsx-runtime";
|
|
3085
3127
|
function ReportInteractiveIsland({
|
|
3086
3128
|
report,
|
|
3087
3129
|
title,
|
|
@@ -3095,7 +3137,7 @@ function ReportInteractiveIsland({
|
|
|
3095
3137
|
() => buildIslandRenderers({ syntaxHighlighting, mermaid }),
|
|
3096
3138
|
[syntaxHighlighting, mermaid]
|
|
3097
3139
|
);
|
|
3098
|
-
return /* @__PURE__ */
|
|
3140
|
+
return /* @__PURE__ */ jsx51(
|
|
3099
3141
|
ReportInteractive,
|
|
3100
3142
|
{
|
|
3101
3143
|
report,
|