@doneisbetter/gds-core 2.6.6 → 3.0.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.
@@ -444,8 +444,51 @@ function ReferenceLinkGrid({
444
444
  ] }) }, item.id)) });
445
445
  }
446
446
 
447
+ // src/SurfacePresentation.ts
448
+ var toCssLength = (value) => {
449
+ if (typeof value === "number") {
450
+ return `${value}px`;
451
+ }
452
+ return value;
453
+ };
454
+ function resolveSurfacePresentationStyles(props) {
455
+ const {
456
+ presentation = "inline",
457
+ minHeight,
458
+ contentAlign,
459
+ contentJustify
460
+ } = props;
461
+ if (presentation === "inline") {
462
+ return {
463
+ minHeight: toCssLength(minHeight)
464
+ };
465
+ }
466
+ const align = contentAlign ?? "center";
467
+ const justify = contentJustify ?? (presentation === "centered" ? "center" : "start");
468
+ if (presentation === "fill") {
469
+ return {
470
+ minHeight: toCssLength(minHeight),
471
+ display: "flex",
472
+ flex: 1,
473
+ flexDirection: "column",
474
+ alignItems: align === "center" ? "center" : "flex-start",
475
+ justifyContent: justify === "center" ? "center" : "flex-start"
476
+ };
477
+ }
478
+ return {
479
+ minHeight: toCssLength(minHeight),
480
+ display: "flex",
481
+ flexDirection: "column",
482
+ alignItems: align === "center" ? "center" : "flex-start",
483
+ justifyContent: justify === "center" ? "center" : "flex-start"
484
+ };
485
+ }
486
+ function isPresentationMode(value) {
487
+ return value === "inline" || value === "centered" || value === "fill";
488
+ }
489
+
447
490
  // src/SectionPanel.tsx
448
- import { Divider, Group as Group3, Paper as Paper3, Stack as Stack4, Text as Text4, Title as Title4 } from "@mantine/core";
491
+ import { Box as Box3, Divider, Group as Group3, Paper as Paper3, Stack as Stack4, Text as Text4, Title as Title4 } from "@mantine/core";
449
492
  import { Fragment, jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
450
493
  var toneBackgrounds = {
451
494
  default: "var(--mantine-color-body)",
@@ -460,8 +503,18 @@ function SectionPanel({
460
503
  children,
461
504
  tone = "default",
462
505
  id,
463
- divided = true
506
+ divided = true,
507
+ presentation = "inline",
508
+ minHeight,
509
+ contentAlign,
510
+ contentJustify
464
511
  }) {
512
+ const bodyLayout = resolveSurfacePresentationStyles({
513
+ presentation,
514
+ minHeight,
515
+ contentAlign,
516
+ contentJustify
517
+ });
465
518
  return /* @__PURE__ */ jsx6(Paper3, { id, withBorder: true, radius: "xl", p: "lg", style: { background: toneBackgrounds[tone] }, children: /* @__PURE__ */ jsxs4(Stack4, { gap: "md", children: [
466
519
  title || description || action ? /* @__PURE__ */ jsxs4(Fragment, { children: [
467
520
  /* @__PURE__ */ jsxs4(Group3, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
@@ -473,7 +526,7 @@ function SectionPanel({
473
526
  ] }),
474
527
  divided ? /* @__PURE__ */ jsx6(Divider, {}) : null
475
528
  ] }) : null,
476
- children
529
+ /* @__PURE__ */ jsx6(Box3, { style: bodyLayout, children })
477
530
  ] }) });
478
531
  }
479
532
 
@@ -567,10 +620,10 @@ function ActionBar({
567
620
  }
568
621
 
569
622
  // src/FormField.tsx
570
- import { Box as Box3, Stack as Stack7, Text as Text6 } from "@mantine/core";
623
+ import { Box as Box4, Stack as Stack7, Text as Text6 } from "@mantine/core";
571
624
  import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
572
625
  function FormField({ label, description, error, children }) {
573
- return /* @__PURE__ */ jsx9(Box3, { component: "label", children: /* @__PURE__ */ jsxs7(Stack7, { gap: 4, children: [
626
+ return /* @__PURE__ */ jsx9(Box4, { component: "label", children: /* @__PURE__ */ jsxs7(Stack7, { gap: 4, children: [
574
627
  typeof label === "string" ? /* @__PURE__ */ jsx9(Text6, { size: "xs", fw: 600, c: "dimmed", children: label }) : label,
575
628
  description ? typeof description === "string" ? /* @__PURE__ */ jsx9(Text6, { size: "xs", c: "dimmed", children: description }) : description : null,
576
629
  children,
@@ -698,20 +751,34 @@ function StateBlock({
698
751
  description,
699
752
  action,
700
753
  icon,
701
- compact = false
754
+ compact = false,
755
+ presentation = "inline",
756
+ minHeight,
757
+ contentAlign,
758
+ contentJustify
702
759
  }) {
703
760
  const config = variantConfig[variant];
761
+ const layout = resolveSurfacePresentationStyles({
762
+ presentation,
763
+ minHeight,
764
+ contentAlign,
765
+ contentJustify
766
+ });
767
+ const centeredText = presentation !== "inline" ? (contentAlign ?? "center") === "center" : !compact;
768
+ const centeredAlign = presentation !== "inline" ? contentAlign ?? "center" : "start";
769
+ const headingAlign = presentation === "inline" ? compact ? "flex-start" : "center" : centeredAlign === "center" ? "center" : "flex-start";
704
770
  return /* @__PURE__ */ jsxs9(
705
771
  Stack9,
706
772
  {
707
- align: compact ? "flex-start" : "center",
708
- justify: "center",
773
+ align: headingAlign,
774
+ justify: presentation === "inline" ? "center" : void 0,
709
775
  gap: "md",
710
776
  py: compact ? "md" : "xl",
711
- ta: compact ? "left" : "center",
777
+ ta: centeredText ? "center" : "left",
778
+ style: layout,
712
779
  children: [
713
780
  /* @__PURE__ */ jsx11(ThemeIcon2, { variant: "light", color: config.color, size: compact ? "lg" : "xl", radius: "xl", children: icon ?? config.icon }),
714
- /* @__PURE__ */ jsxs9(Stack9, { gap: 6, align: compact ? "flex-start" : "center", children: [
781
+ /* @__PURE__ */ jsxs9(Stack9, { gap: 6, align: headingAlign, children: [
715
782
  /* @__PURE__ */ jsx11(Title6, { order: compact ? 4 : 3, children: title }),
716
783
  description ? /* @__PURE__ */ jsx11(Text8, { c: "dimmed", maw: compact ? void 0 : 480, children: description }) : null
717
784
  ] }),
@@ -849,7 +916,7 @@ function ConsumerDashboardGrid({
849
916
  }
850
917
 
851
918
  // src/EditorialCard.tsx
852
- import { Anchor as Anchor3, AspectRatio as AspectRatio2, Badge as Badge7, Box as Box4, Card as Card4, Group as Group9, Stack as Stack12, Text as Text11, Title as Title9 } from "@mantine/core";
919
+ import { Anchor as Anchor3, AspectRatio as AspectRatio2, Badge as Badge7, Box as Box5, Card as Card4, Group as Group9, Stack as Stack12, Text as Text11, Title as Title9 } from "@mantine/core";
853
920
  import { jsx as jsx17, jsxs as jsxs12 } from "react/jsx-runtime";
854
921
  var tonePalette = {
855
922
  default: {
@@ -871,7 +938,7 @@ var tonePalette = {
871
938
  };
872
939
  function EditorialMediaFallback({ compact }) {
873
940
  return /* @__PURE__ */ jsx17(AspectRatio2, { ratio: compact ? 16 / 10 : 4 / 3, children: /* @__PURE__ */ jsx17(
874
- Box4,
941
+ Box5,
875
942
  {
876
943
  style: {
877
944
  display: "grid",
@@ -1219,7 +1286,7 @@ function PublicFoodCard({
1219
1286
  }
1220
1287
 
1221
1288
  // src/FoodMenuSection.tsx
1222
- import { Box as Box5, Group as Group13, SimpleGrid as SimpleGrid3, Stack as Stack16, Text as Text15, Title as Title13 } from "@mantine/core";
1289
+ import { Box as Box6, Group as Group13, SimpleGrid as SimpleGrid3, Stack as Stack16, Text as Text15, Title as Title13 } from "@mantine/core";
1223
1290
  import { Fragment as Fragment2, jsx as jsx21, jsxs as jsxs16 } from "react/jsx-runtime";
1224
1291
  function FoodMenuSection({
1225
1292
  title,
@@ -1243,7 +1310,7 @@ function FoodMenuSection({
1243
1310
  }
1244
1311
  );
1245
1312
  }
1246
- return /* @__PURE__ */ jsx21(Box5, { component: "section", "aria-label": typeof title === "string" ? title : "Food menu section", children: /* @__PURE__ */ jsxs16(Stack16, { gap: "xl", children: [
1313
+ return /* @__PURE__ */ jsx21(Box6, { component: "section", "aria-label": typeof title === "string" ? title : "Food menu section", children: /* @__PURE__ */ jsxs16(Stack16, { gap: "xl", children: [
1247
1314
  /* @__PURE__ */ jsxs16(Group13, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
1248
1315
  /* @__PURE__ */ jsxs16(Stack16, { gap: 4, children: [
1249
1316
  eyebrow ? /* @__PURE__ */ jsx21(Text15, { size: "xs", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
@@ -1308,7 +1375,7 @@ function DataToolbar({
1308
1375
  }
1309
1376
 
1310
1377
  // src/BrowseSurface.tsx
1311
- import { Badge as Badge12, Box as Box6, Button as Button2, Group as Group15, Paper as Paper4, SimpleGrid as SimpleGrid4, Stack as Stack18, Text as Text16, Title as Title14 } from "@mantine/core";
1378
+ import { Badge as Badge12, Box as Box7, Button as Button2, Group as Group15, Paper as Paper4, SimpleGrid as SimpleGrid4, Stack as Stack18, Text as Text16, Title as Title14 } from "@mantine/core";
1312
1379
  import { jsx as jsx23, jsxs as jsxs18 } from "react/jsx-runtime";
1313
1380
  function BrowseSurface({
1314
1381
  eyebrow,
@@ -1392,7 +1459,7 @@ function BrowseSurface({
1392
1459
  ...toolbar,
1393
1460
  activeFilters: toolbarFilters.length ? toolbarFilters : toolbar.fallbackActiveFilters
1394
1461
  }
1395
- ) : /* @__PURE__ */ jsx23(Box6, {}),
1462
+ ) : /* @__PURE__ */ jsx23(Box7, {}),
1396
1463
  sortControl ? /* @__PURE__ */ jsxs18(Stack18, { gap: "xs", align: "stretch", children: [
1397
1464
  /* @__PURE__ */ jsx23(Text16, { size: "sm", fw: 600, c: "dimmed", children: "Sort" }),
1398
1465
  sortControl
@@ -1402,7 +1469,7 @@ function BrowseSurface({
1402
1469
  /* @__PURE__ */ jsx23(Text16, { size: "sm", fw: 600, c: "dimmed", children: "Filters" }),
1403
1470
  mobileFilters
1404
1471
  ] }) : null,
1405
- filterDrawer ? /* @__PURE__ */ jsx23(Box6, { hiddenFrom: "lg", children: filterDrawer }) : null,
1472
+ filterDrawer ? /* @__PURE__ */ jsx23(Box7, { hiddenFrom: "lg", children: filterDrawer }) : null,
1406
1473
  activeFilters.length ? /* @__PURE__ */ jsx23(Group15, { gap: "xs", wrap: "wrap", children: activeFilters.map((filter) => /* @__PURE__ */ jsx23(
1407
1474
  Badge12,
1408
1475
  {
@@ -1474,16 +1541,16 @@ function PublicNav({ items, activeId, renderLink }) {
1474
1541
  }
1475
1542
 
1476
1543
  // src/PublicShell.tsx
1477
- import { AppShell, Box as Box7, Burger, Container, Group as Group17, Stack as Stack20, Text as Text17 } from "@mantine/core";
1544
+ import { AppShell, Box as Box8, Burger, Container, Group as Group17, Stack as Stack20, Text as Text17 } from "@mantine/core";
1478
1545
  import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
1479
1546
  function InlineMobileNavigation({
1480
1547
  mobileNavigation,
1481
1548
  className,
1482
1549
  mode
1483
1550
  }) {
1484
- return /* @__PURE__ */ jsxs20(Box7, { component: "details", hiddenFrom: "sm", className, children: [
1551
+ return /* @__PURE__ */ jsxs20(Box8, { component: "details", hiddenFrom: "sm", className, children: [
1485
1552
  /* @__PURE__ */ jsxs20(
1486
- Box7,
1553
+ Box8,
1487
1554
  {
1488
1555
  component: "summary",
1489
1556
  "aria-label": mode === "drawer" ? "Open site navigation drawer" : "Open site navigation",
@@ -1501,7 +1568,7 @@ function InlineMobileNavigation({
1501
1568
  }
1502
1569
  ),
1503
1570
  /* @__PURE__ */ jsx26(
1504
- Box7,
1571
+ Box8,
1505
1572
  {
1506
1573
  mt: "sm",
1507
1574
  p: "sm",
@@ -1562,7 +1629,7 @@ function PublicShell({
1562
1629
  mode: mobileNavigationMode
1563
1630
  }
1564
1631
  ) : null,
1565
- /* @__PURE__ */ jsx26(Box7, { children: brand })
1632
+ /* @__PURE__ */ jsx26(Box8, { children: brand })
1566
1633
  ] }),
1567
1634
  /* @__PURE__ */ jsx26(Group17, { visibleFrom: "sm", gap: headerVariant === "compact" ? "md" : "lg", className: classNames?.navigation, children: resolvedNavigation }),
1568
1635
  /* @__PURE__ */ jsx26(Group17, { gap: "sm", className: classNames?.actions, children: actions })
@@ -1572,7 +1639,7 @@ function PublicShell({
1572
1639
  usesSheetMobileNavigation ? /* @__PURE__ */ jsx26(AppShell.Footer, { withBorder: true, children: /* @__PURE__ */ jsx26(Container, { size: containerSize, h: "100%", children: /* @__PURE__ */ jsx26(Group17, { h: "100%", justify: "space-around", wrap: "nowrap", children: mobileNavigation }) }) }) : null,
1573
1640
  /* @__PURE__ */ jsxs20(AppShell.Main, { children: [
1574
1641
  /* @__PURE__ */ jsx26(Container, { size: containerSize, py: mainPadding, className: classNames?.content, children: /* @__PURE__ */ jsx26(Stack20, { gap: "xl", children }) }),
1575
- footer ? /* @__PURE__ */ jsx26(Box7, { component: typeof footer === "string" ? "footer" : "div", py: "xl", children: /* @__PURE__ */ jsx26(Container, { size: containerSize, children: typeof footer === "string" ? /* @__PURE__ */ jsx26(Text17, { size: "sm", c: "dimmed", children: footer }) : footer }) }) : null
1642
+ footer ? /* @__PURE__ */ jsx26(Box8, { component: typeof footer === "string" ? "footer" : "div", py: "xl", children: /* @__PURE__ */ jsx26(Container, { size: containerSize, children: typeof footer === "string" ? /* @__PURE__ */ jsx26(Text17, { size: "sm", c: "dimmed", children: footer }) : footer }) }) : null
1576
1643
  ] })
1577
1644
  ]
1578
1645
  }
@@ -1590,7 +1657,7 @@ function PublicSiteFooter({ children, meta }) {
1590
1657
  }
1591
1658
 
1592
1659
  // src/PublicBrandFooter.tsx
1593
- import { Box as Box8, Divider as Divider3, Grid, Group as Group19, Paper as Paper6, Stack as Stack22, Text as Text19, Title as Title15 } from "@mantine/core";
1660
+ import { Box as Box9, Divider as Divider3, Grid, Group as Group19, Paper as Paper6, Stack as Stack22, Text as Text19, Title as Title15 } from "@mantine/core";
1594
1661
  import { Fragment as Fragment4, jsx as jsx28, jsxs as jsxs22 } from "react/jsx-runtime";
1595
1662
  function PublicBrandFooter({
1596
1663
  media,
@@ -1617,11 +1684,11 @@ function PublicBrandFooter({
1617
1684
  "data-layout-variant": layoutVariant,
1618
1685
  children: /* @__PURE__ */ jsxs22(Stack22, { gap: "lg", children: [
1619
1686
  /* @__PURE__ */ jsxs22(Grid, { gutter: compact ? "lg" : "xl", align: "flex-start", children: [
1620
- media ? /* @__PURE__ */ jsx28(Grid.Col, { span: { base: 12, md: mediaSpan }, children: /* @__PURE__ */ jsx28(Box8, { className: classNames?.media, children: media }) }) : null,
1687
+ media ? /* @__PURE__ */ jsx28(Grid.Col, { span: { base: 12, md: mediaSpan }, children: /* @__PURE__ */ jsx28(Box9, { className: classNames?.media, children: media }) }) : null,
1621
1688
  /* @__PURE__ */ jsx28(Grid.Col, { span: { base: 12, md: primarySpan }, children: /* @__PURE__ */ jsxs22(Stack22, { gap: compact ? "xs" : "sm", className: classNames?.primary, children: [
1622
1689
  brandTitle ? /* @__PURE__ */ jsx28(Title15, { order: 4, children: brandTitle }) : null,
1623
1690
  description ? /* @__PURE__ */ jsx28(Text19, { c: "dimmed", children: description }) : null,
1624
- actions ? /* @__PURE__ */ jsx28(Box8, { children: actions }) : null
1691
+ actions ? /* @__PURE__ */ jsx28(Box9, { children: actions }) : null
1625
1692
  ] }) }),
1626
1693
  secondary ? /* @__PURE__ */ jsx28(Grid.Col, { span: { base: 12, md: secondarySpan }, children: /* @__PURE__ */ jsx28(Stack22, { gap: compact ? "xs" : "sm", className: classNames?.secondary, children: secondary }) }) : null
1627
1694
  ] }),
@@ -1635,78 +1702,237 @@ function PublicBrandFooter({
1635
1702
  }
1636
1703
 
1637
1704
  // src/AuthShell.tsx
1638
- import { Box as Box9, Card as Card8, Container as Container2, Divider as Divider4, Group as Group20, Stack as Stack23, Text as Text20, Title as Title16 } from "@mantine/core";
1705
+ import { Alert, Badge as Badge13, Box as Box10, Card as Card8, Container as Container2, Divider as Divider4, Group as Group20, Stack as Stack23, Text as Text20, Title as Title16 } from "@mantine/core";
1639
1706
  import { jsx as jsx29, jsxs as jsxs23 } from "react/jsx-runtime";
1640
1707
  function AuthShell({
1641
1708
  title,
1642
1709
  description,
1710
+ intent = "sign-in",
1643
1711
  brand,
1644
1712
  headerActions,
1645
1713
  footer,
1646
1714
  helper,
1715
+ error,
1716
+ guestAction,
1717
+ supportAction,
1647
1718
  socialAuth,
1648
1719
  dividerLabel = "Or continue with your account",
1649
1720
  children
1650
1721
  }) {
1651
- return /* @__PURE__ */ jsx29(Box9, { py: { base: "xl", md: "4rem" }, children: /* @__PURE__ */ jsx29(Container2, { size: "xs", children: /* @__PURE__ */ jsxs23(Stack23, { gap: "xl", children: [
1722
+ return /* @__PURE__ */ jsx29(Box10, { py: { base: "xl", md: "4rem" }, children: /* @__PURE__ */ jsx29(Container2, { size: "xs", children: /* @__PURE__ */ jsxs23(Stack23, { gap: "xl", children: [
1652
1723
  brand || headerActions ? /* @__PURE__ */ jsxs23(Group20, { justify: brand && headerActions ? "space-between" : "center", align: "center", children: [
1653
- brand ? /* @__PURE__ */ jsx29(Box9, { children: brand }) : /* @__PURE__ */ jsx29(Box9, {}),
1724
+ brand ? /* @__PURE__ */ jsx29(Box10, { children: brand }) : /* @__PURE__ */ jsx29(Box10, {}),
1654
1725
  headerActions ? /* @__PURE__ */ jsx29(Group20, { gap: "sm", children: headerActions }) : null
1655
1726
  ] }) : null,
1656
1727
  /* @__PURE__ */ jsx29(Card8, { withBorder: true, radius: "lg", padding: "xl", children: /* @__PURE__ */ jsxs23(Stack23, { gap: "lg", children: [
1657
1728
  /* @__PURE__ */ jsxs23(Stack23, { gap: "xs", ta: "center", children: [
1729
+ /* @__PURE__ */ jsx29(Group20, { justify: "center", children: /* @__PURE__ */ jsx29(Badge13, { variant: "light", color: intent === "account-linking" ? "blue" : intent === "guest-entry" ? "gray" : "teal", children: intent.replace("-", " ") }) }),
1658
1730
  /* @__PURE__ */ jsx29(Title16, { order: 2, children: title }),
1659
1731
  description ? /* @__PURE__ */ jsx29(Text20, { c: "dimmed", size: "sm", children: description }) : null
1660
1732
  ] }),
1661
- socialAuth ? /* @__PURE__ */ jsx29(Box9, { children: socialAuth }) : null,
1733
+ error ? /* @__PURE__ */ jsx29(Alert, { color: "red", variant: "light", role: "alert", children: error }) : null,
1734
+ socialAuth ? /* @__PURE__ */ jsx29(Box10, { children: socialAuth }) : null,
1662
1735
  socialAuth ? /* @__PURE__ */ jsx29(Divider4, { label: dividerLabel, labelPosition: "center" }) : null,
1663
1736
  children,
1737
+ guestAction || supportAction ? /* @__PURE__ */ jsxs23(Group20, { justify: "center", gap: "sm", children: [
1738
+ guestAction,
1739
+ supportAction
1740
+ ] }) : null,
1664
1741
  helper ? /* @__PURE__ */ jsx29(Text20, { size: "sm", c: "dimmed", ta: "center", children: helper }) : null
1665
1742
  ] }) }),
1666
1743
  footer ? /* @__PURE__ */ jsx29(Text20, { size: "sm", c: "dimmed", ta: "center", children: footer }) : null
1667
1744
  ] }) }) });
1668
1745
  }
1669
1746
 
1670
- // src/SocialAuthButtons.tsx
1671
- import { Button as Button3, Divider as Divider5, Group as Group21, SimpleGrid as SimpleGrid5, Stack as Stack24, Text as Text21, ThemeIcon as ThemeIcon7 } from "@mantine/core";
1747
+ // src/ProviderIdentityButtons.tsx
1748
+ import { Button as Button3, SimpleGrid as SimpleGrid5, Stack as Stack24, Text as Text21, ThemeIcon as ThemeIcon7 } from "@mantine/core";
1672
1749
  import { jsx as jsx30, jsxs as jsxs24 } from "react/jsx-runtime";
1673
- var providerConfig = {
1674
- google: { label: "Google", mark: "G", color: "red" },
1675
- apple: { label: "Apple", mark: "A", color: "dark" },
1676
- github: { label: "GitHub", mark: "GH", color: "gray" },
1677
- facebook: { label: "Facebook", mark: "F", color: "blue" },
1678
- microsoft: { label: "Microsoft", mark: "M", color: "cyan" },
1679
- linkedin: { label: "LinkedIn", mark: "in", color: "blue" },
1680
- discord: { label: "Discord", mark: "D", color: "indigo" },
1681
- x: { label: "X", mark: "X", color: "dark" },
1682
- email: { label: "Email", mark: "@", color: "gray" }
1750
+ var PROVIDER_IDENTITY_REGISTRY = {
1751
+ google: {
1752
+ providerLabel: "Google",
1753
+ markLabel: "G",
1754
+ brandColor: "red"
1755
+ },
1756
+ apple: {
1757
+ providerLabel: "Apple",
1758
+ markLabel: "A",
1759
+ brandColor: "dark"
1760
+ },
1761
+ github: {
1762
+ providerLabel: "GitHub",
1763
+ markLabel: "GH",
1764
+ brandColor: "gray"
1765
+ },
1766
+ facebook: {
1767
+ providerLabel: "Facebook",
1768
+ markLabel: "F",
1769
+ brandColor: "blue"
1770
+ },
1771
+ microsoft: {
1772
+ providerLabel: "Microsoft",
1773
+ markLabel: "M",
1774
+ brandColor: "cyan"
1775
+ },
1776
+ linkedin: {
1777
+ providerLabel: "LinkedIn",
1778
+ markLabel: "in",
1779
+ brandColor: "blue"
1780
+ },
1781
+ discord: {
1782
+ providerLabel: "Discord",
1783
+ markLabel: "D",
1784
+ brandColor: "indigo"
1785
+ },
1786
+ x: {
1787
+ providerLabel: "X",
1788
+ markLabel: "X",
1789
+ brandColor: "dark"
1790
+ },
1791
+ email: {
1792
+ providerLabel: "Email",
1793
+ markLabel: "@",
1794
+ brandColor: "gray"
1795
+ }
1683
1796
  };
1684
- function ProviderMark({ id }) {
1685
- const config = providerConfig[id] ?? { label: id, mark: id.slice(0, 2).toUpperCase(), color: "gray" };
1686
- return /* @__PURE__ */ jsx30(ThemeIcon7, { variant: "light", color: config.color, radius: "xl", size: "md", "aria-hidden": "true", children: /* @__PURE__ */ jsx30(Text21, { size: "xs", fw: 700, children: config.mark }) });
1687
- }
1688
- function SocialAuthButton({ provider, compact = false }) {
1689
- const config = providerConfig[provider.id] ?? { label: provider.id, mark: provider.id.slice(0, 2).toUpperCase(), color: "gray" };
1690
- const label = provider.label ?? `Continue with ${config.label}`;
1691
- const buttonProps = provider.href ? { component: "a", href: provider.href } : { onClick: provider.onClick };
1797
+ function normalizeProviderId(provider) {
1798
+ return (provider ?? "").trim().toLowerCase();
1799
+ }
1800
+ function isSupportedProviderId(provider) {
1801
+ return provider in PROVIDER_IDENTITY_REGISTRY;
1802
+ }
1803
+ function getProviderIdentityMeta(provider) {
1804
+ const normalized = normalizeProviderId(provider);
1805
+ if (isSupportedProviderId(normalized)) {
1806
+ return {
1807
+ id: normalized,
1808
+ supported: true,
1809
+ ...PROVIDER_IDENTITY_REGISTRY[normalized]
1810
+ };
1811
+ }
1812
+ return {
1813
+ id: normalized || "provider",
1814
+ supported: false,
1815
+ providerLabel: provider ? provider : "Provider",
1816
+ markLabel: (provider ?? "PR").slice(0, 2).toUpperCase(),
1817
+ brandColor: "gray"
1818
+ };
1819
+ }
1820
+ function resolveProviderLabel(provider, customLabel) {
1821
+ const meta = getProviderIdentityMeta(provider);
1822
+ if (customLabel != null) {
1823
+ return customLabel;
1824
+ }
1825
+ return `Continue with ${meta.providerLabel}`;
1826
+ }
1827
+ function mapVariant(variant = "neutral") {
1828
+ if (variant === "solid") {
1829
+ return "filled";
1830
+ }
1831
+ if (variant === "outline") {
1832
+ return "outline";
1833
+ }
1834
+ return "default";
1835
+ }
1836
+ function getProviderIdentityLabel(provider, fallbackOverride) {
1837
+ return resolveProviderLabel(provider, fallbackOverride);
1838
+ }
1839
+ function getSupportedProviderIdentityIds() {
1840
+ return Object.keys(PROVIDER_IDENTITY_REGISTRY);
1841
+ }
1842
+ function getProviderIdentityPolicy(provider) {
1843
+ const meta = getProviderIdentityMeta(provider);
1844
+ return {
1845
+ id: meta.id,
1846
+ supported: meta.supported,
1847
+ providerLabel: meta.providerLabel,
1848
+ colorAuthority: meta.supported ? "provider" : "gds-neutral",
1849
+ minTouchTargetPx: 44,
1850
+ allowedVariants: ["solid", "outline", "neutral"]
1851
+ };
1852
+ }
1853
+ function ProviderIdentityMark({ provider }) {
1854
+ const meta = getProviderIdentityMeta(provider);
1855
+ return /* @__PURE__ */ jsx30(
1856
+ ThemeIcon7,
1857
+ {
1858
+ variant: "light",
1859
+ color: meta.brandColor,
1860
+ radius: "xl",
1861
+ size: "md",
1862
+ "aria-hidden": "true",
1863
+ children: /* @__PURE__ */ jsx30(Text21, { size: "xs", fw: 700, c: "inherit", children: meta.markLabel })
1864
+ }
1865
+ );
1866
+ }
1867
+ function ProviderIdentityButton({
1868
+ provider,
1869
+ label,
1870
+ description,
1871
+ policyNote,
1872
+ error,
1873
+ href,
1874
+ onClick,
1875
+ disabled,
1876
+ loading,
1877
+ tenantDisabledReason,
1878
+ fullWidth = true,
1879
+ size = "md",
1880
+ variant = "neutral",
1881
+ ariaLabel,
1882
+ describedBy,
1883
+ minTouchTargetPx = 44
1884
+ }) {
1885
+ const meta = getProviderIdentityMeta(provider);
1886
+ const buttonLabel = resolveProviderLabel(provider, label);
1887
+ const resolvedDisabled = disabled || Boolean(tenantDisabledReason);
1888
+ const buttonProps = href ? {
1889
+ component: "a",
1890
+ href
1891
+ } : {
1892
+ onClick
1893
+ };
1692
1894
  return /* @__PURE__ */ jsx30(
1693
1895
  Button3,
1694
1896
  {
1695
- variant: "default",
1897
+ variant: mapVariant(variant),
1898
+ color: variant === "solid" ? meta.brandColor : void 0,
1696
1899
  justify: "space-between",
1697
- fullWidth: true,
1698
- size: compact ? "sm" : "md",
1699
- leftSection: /* @__PURE__ */ jsx30(ProviderMark, { id: provider.id }),
1700
- disabled: provider.disabled,
1701
- loading: provider.loading,
1900
+ fullWidth,
1901
+ size,
1902
+ "aria-label": ariaLabel ?? (typeof buttonLabel === "string" ? buttonLabel : void 0),
1903
+ "aria-describedby": describedBy,
1904
+ leftSection: /* @__PURE__ */ jsx30(ProviderIdentityMark, { provider }),
1905
+ disabled: resolvedDisabled,
1906
+ loading,
1907
+ styles: { root: { minHeight: minTouchTargetPx } },
1702
1908
  ...buttonProps,
1703
1909
  children: /* @__PURE__ */ jsxs24(Stack24, { gap: 0, align: "flex-start", children: [
1704
- /* @__PURE__ */ jsx30(Text21, { inherit: true, children: label }),
1705
- provider.description ? /* @__PURE__ */ jsx30(Text21, { size: "xs", c: "dimmed", lh: 1.2, children: provider.description }) : null
1910
+ /* @__PURE__ */ jsx30(Text21, { inherit: true, children: buttonLabel }),
1911
+ description ? /* @__PURE__ */ jsx30(Text21, { size: "xs", c: "dimmed", lh: 1.2, children: description }) : null,
1912
+ policyNote ? /* @__PURE__ */ jsx30(Text21, { size: "xs", c: "dimmed", lh: 1.2, children: policyNote }) : null,
1913
+ tenantDisabledReason ? /* @__PURE__ */ jsx30(Text21, { size: "xs", c: "orange.7", lh: 1.2, children: tenantDisabledReason }) : null,
1914
+ error ? /* @__PURE__ */ jsx30(Text21, { size: "xs", c: "red.7", lh: 1.2, role: "alert", children: error }) : null
1706
1915
  ] })
1707
1916
  }
1708
1917
  );
1709
1918
  }
1919
+ function ProviderIdentityButtonGroup({ providers, layout = "stack" }) {
1920
+ if (!providers.length) {
1921
+ return null;
1922
+ }
1923
+ const content = providers.map((entry, index) => {
1924
+ const key = `${normalizeProviderId(String(entry.provider)) || "provider"}-${index}`;
1925
+ return /* @__PURE__ */ jsx30(ProviderIdentityButton, { ...entry }, key);
1926
+ });
1927
+ if (layout === "grid") {
1928
+ return /* @__PURE__ */ jsx30(SimpleGrid5, { cols: { base: 1, sm: 2 }, spacing: "sm", children: content });
1929
+ }
1930
+ return /* @__PURE__ */ jsx30(Stack24, { gap: "sm", children: content });
1931
+ }
1932
+
1933
+ // src/SocialAuthButtons.tsx
1934
+ import { Divider as Divider5, Group as Group21, Stack as Stack25, Text as Text22 } from "@mantine/core";
1935
+ import { jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
1710
1936
  function SocialAuthButtons({
1711
1937
  providers,
1712
1938
  title = "Continue with a trusted provider",
@@ -1717,54 +1943,67 @@ function SocialAuthButtons({
1717
1943
  if (!providers.length) {
1718
1944
  return null;
1719
1945
  }
1720
- const content = providers.map((provider) => /* @__PURE__ */ jsx30(SocialAuthButton, { provider, compact }, provider.id));
1721
- return /* @__PURE__ */ jsxs24(Stack24, { gap: "md", children: [
1722
- /* @__PURE__ */ jsxs24(Stack24, { gap: 4, ta: "center", children: [
1723
- /* @__PURE__ */ jsxs24(Group21, { justify: "center", gap: "xs", children: [
1724
- /* @__PURE__ */ jsx30(GdsIcons.Login, { size: "1rem" }),
1725
- /* @__PURE__ */ jsx30(Text21, { fw: 600, children: title })
1946
+ const buttons = providers.map((provider) => ({
1947
+ provider: provider.id,
1948
+ label: provider.label,
1949
+ description: provider.description,
1950
+ policyNote: provider.policyNote,
1951
+ error: provider.error,
1952
+ href: provider.href,
1953
+ onClick: provider.onClick,
1954
+ disabled: provider.disabled,
1955
+ loading: provider.loading,
1956
+ tenantDisabledReason: provider.tenantDisabledReason,
1957
+ size: provider.size ?? (compact ? "sm" : "md"),
1958
+ variant: provider.variant
1959
+ }));
1960
+ return /* @__PURE__ */ jsxs25(Stack25, { gap: "md", children: [
1961
+ /* @__PURE__ */ jsxs25(Stack25, { gap: 4, ta: "center", children: [
1962
+ /* @__PURE__ */ jsxs25(Group21, { justify: "center", gap: "xs", children: [
1963
+ /* @__PURE__ */ jsx31(GdsIcons.Login, { size: "1rem" }),
1964
+ /* @__PURE__ */ jsx31(Text22, { fw: 600, children: title })
1726
1965
  ] }),
1727
- description ? /* @__PURE__ */ jsx30(Text21, { size: "sm", c: "dimmed", children: description }) : null
1966
+ description ? /* @__PURE__ */ jsx31(Text22, { size: "sm", c: "dimmed", children: description }) : null
1728
1967
  ] }),
1729
- /* @__PURE__ */ jsx30(Divider5, {}),
1730
- layout === "grid" ? /* @__PURE__ */ jsx30(SimpleGrid5, { cols: { base: 1, sm: 2 }, spacing: "sm", children: content }) : /* @__PURE__ */ jsx30(Stack24, { gap: "sm", children: content })
1968
+ /* @__PURE__ */ jsx31(Divider5, {}),
1969
+ /* @__PURE__ */ jsx31(ProviderIdentityButtonGroup, { providers: buttons, layout })
1731
1970
  ] });
1732
1971
  }
1733
1972
 
1734
1973
  // src/ArticleShell.tsx
1735
- import { Container as Container3, Group as Group22, Stack as Stack25, Text as Text22, Title as Title17 } from "@mantine/core";
1736
- import { jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
1974
+ import { Container as Container3, Group as Group22, Stack as Stack26, Text as Text23, Title as Title17 } from "@mantine/core";
1975
+ import { jsx as jsx32, jsxs as jsxs26 } from "react/jsx-runtime";
1737
1976
  function ArticleShell({ eyebrow, title, lead, meta, sideRail, children }) {
1738
- return /* @__PURE__ */ jsx31(Container3, { size: "lg", py: "xl", children: /* @__PURE__ */ jsxs25(Group22, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
1739
- /* @__PURE__ */ jsxs25(Stack25, { gap: "lg", maw: 760, flex: 1, children: [
1740
- /* @__PURE__ */ jsxs25(Stack25, { gap: "sm", children: [
1741
- eyebrow ? /* @__PURE__ */ jsx31(Text22, { size: "sm", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
1742
- /* @__PURE__ */ jsx31(Title17, { order: 1, children: title }),
1743
- lead ? /* @__PURE__ */ jsx31(Text22, { size: "lg", c: "dimmed", children: lead }) : null,
1744
- meta ? /* @__PURE__ */ jsx31(Group22, { gap: "md", children: meta }) : null
1977
+ return /* @__PURE__ */ jsx32(Container3, { size: "lg", py: "xl", children: /* @__PURE__ */ jsxs26(Group22, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
1978
+ /* @__PURE__ */ jsxs26(Stack26, { gap: "lg", maw: 760, flex: 1, children: [
1979
+ /* @__PURE__ */ jsxs26(Stack26, { gap: "sm", children: [
1980
+ eyebrow ? /* @__PURE__ */ jsx32(Text23, { size: "sm", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
1981
+ /* @__PURE__ */ jsx32(Title17, { order: 1, children: title }),
1982
+ lead ? /* @__PURE__ */ jsx32(Text23, { size: "lg", c: "dimmed", children: lead }) : null,
1983
+ meta ? /* @__PURE__ */ jsx32(Group22, { gap: "md", children: meta }) : null
1745
1984
  ] }),
1746
- /* @__PURE__ */ jsx31(Stack25, { gap: "md", children })
1985
+ /* @__PURE__ */ jsx32(Stack26, { gap: "md", children })
1747
1986
  ] }),
1748
- sideRail ? /* @__PURE__ */ jsx31(Stack25, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1987
+ sideRail ? /* @__PURE__ */ jsx32(Stack26, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1749
1988
  ] }) });
1750
1989
  }
1751
1990
 
1752
1991
  // src/CtaButtonGroup.tsx
1753
- import { Group as Group23, Stack as Stack26 } from "@mantine/core";
1754
- import { jsx as jsx32, jsxs as jsxs26 } from "react/jsx-runtime";
1992
+ import { Group as Group23, Stack as Stack27 } from "@mantine/core";
1993
+ import { jsx as jsx33, jsxs as jsxs27 } from "react/jsx-runtime";
1755
1994
  function CtaButtonGroup({ primary, secondary, tertiary }) {
1756
- return /* @__PURE__ */ jsxs26(Stack26, { gap: "sm", children: [
1757
- /* @__PURE__ */ jsxs26(Group23, { gap: "sm", align: "stretch", children: [
1758
- /* @__PURE__ */ jsx32("div", { children: primary }),
1759
- secondary ? /* @__PURE__ */ jsx32("div", { children: secondary }) : null
1995
+ return /* @__PURE__ */ jsxs27(Stack27, { gap: "sm", children: [
1996
+ /* @__PURE__ */ jsxs27(Group23, { gap: "sm", align: "stretch", children: [
1997
+ /* @__PURE__ */ jsx33("div", { children: primary }),
1998
+ secondary ? /* @__PURE__ */ jsx33("div", { children: secondary }) : null
1760
1999
  ] }),
1761
- tertiary ? /* @__PURE__ */ jsx32("div", { children: tertiary }) : null
2000
+ tertiary ? /* @__PURE__ */ jsx33("div", { children: tertiary }) : null
1762
2001
  ] });
1763
2002
  }
1764
2003
 
1765
2004
  // src/DocsPageShell.tsx
1766
- import { Anchor as Anchor5, Breadcrumbs, Container as Container4, Group as Group24, Stack as Stack27, Text as Text23, Title as Title18 } from "@mantine/core";
1767
- import { jsx as jsx33, jsxs as jsxs27 } from "react/jsx-runtime";
2005
+ import { Anchor as Anchor5, Breadcrumbs, Container as Container4, Group as Group24, Stack as Stack28, Text as Text24, Title as Title18 } from "@mantine/core";
2006
+ import { jsx as jsx34, jsxs as jsxs28 } from "react/jsx-runtime";
1768
2007
  function DocsPageShell({
1769
2008
  breadcrumbs = [],
1770
2009
  title,
@@ -1775,27 +2014,27 @@ function DocsPageShell({
1775
2014
  footerNext,
1776
2015
  children
1777
2016
  }) {
1778
- return /* @__PURE__ */ jsx33(Container4, { fluid: true, py: "xl", px: "xl", children: /* @__PURE__ */ jsxs27(Group24, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
1779
- /* @__PURE__ */ jsxs27(Stack27, { component: "article", gap: "lg", flex: 1, miw: 0, children: [
1780
- breadcrumbs.length ? /* @__PURE__ */ jsx33(Breadcrumbs, { children: breadcrumbs.map(
1781
- (crumb) => crumb.href ? /* @__PURE__ */ jsx33(Anchor5, { href: crumb.href, children: crumb.label }, `${crumb.label}-${crumb.href}`) : /* @__PURE__ */ jsx33(Text23, { children: crumb.label }, crumb.label)
2017
+ return /* @__PURE__ */ jsx34(Container4, { fluid: true, py: "xl", px: { base: "md", md: "lg", lg: "xl" }, w: "100%", maw: "100%", children: /* @__PURE__ */ jsxs28(Group24, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
2018
+ /* @__PURE__ */ jsxs28(Stack28, { component: "article", gap: "lg", flex: 1, miw: 0, children: [
2019
+ breadcrumbs.length ? /* @__PURE__ */ jsx34(Breadcrumbs, { children: breadcrumbs.map(
2020
+ (crumb) => crumb.href ? /* @__PURE__ */ jsx34(Anchor5, { href: crumb.href, children: crumb.label }, `${crumb.label}-${crumb.href}`) : /* @__PURE__ */ jsx34(Text24, { children: crumb.label }, crumb.label)
1782
2021
  ) }) : null,
1783
- /* @__PURE__ */ jsxs27(Stack27, { gap: "sm", children: [
1784
- eyebrow ? /* @__PURE__ */ jsx33(Text23, { size: "sm", fw: 700, c: "dimmed", children: eyebrow }) : null,
1785
- /* @__PURE__ */ jsx33(Title18, { order: 1, children: title }),
1786
- lead ? /* @__PURE__ */ jsx33(Text23, { size: "lg", c: "dimmed", maw: 920, children: lead }) : null,
1787
- meta ? /* @__PURE__ */ jsx33(Group24, { gap: "md", children: meta }) : null
2022
+ /* @__PURE__ */ jsxs28(Stack28, { gap: "sm", children: [
2023
+ eyebrow ? /* @__PURE__ */ jsx34(Text24, { size: "sm", fw: 700, c: "dimmed", children: eyebrow }) : null,
2024
+ /* @__PURE__ */ jsx34(Title18, { order: 1, children: title }),
2025
+ lead ? /* @__PURE__ */ jsx34(Text24, { size: "lg", c: "dimmed", children: lead }) : null,
2026
+ meta ? /* @__PURE__ */ jsx34(Group24, { gap: "md", children: meta }) : null
1788
2027
  ] }),
1789
- /* @__PURE__ */ jsx33(Stack27, { gap: "md", children }),
1790
- footerNext ? /* @__PURE__ */ jsx33(Anchor5, { href: footerNext.href, fw: 600, children: footerNext.label }) : null
2028
+ /* @__PURE__ */ jsx34(Stack28, { gap: "md", children }),
2029
+ footerNext ? /* @__PURE__ */ jsx34(Anchor5, { href: footerNext.href, fw: 600, children: footerNext.label }) : null
1791
2030
  ] }),
1792
- sideRail ? /* @__PURE__ */ jsx33(Stack27, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
2031
+ sideRail ? /* @__PURE__ */ jsx34(Stack28, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1793
2032
  ] }) });
1794
2033
  }
1795
2034
 
1796
2035
  // src/EditorialHero.tsx
1797
- import { Anchor as Anchor6, AspectRatio as AspectRatio5, Box as Box10, Grid as Grid2, Group as Group25, Paper as Paper7, Skeleton as Skeleton3, Stack as Stack28, Text as Text24, ThemeIcon as ThemeIcon8, Title as Title19 } from "@mantine/core";
1798
- import { jsx as jsx34, jsxs as jsxs28 } from "react/jsx-runtime";
2036
+ import { Anchor as Anchor6, AspectRatio as AspectRatio5, Box as Box11, Grid as Grid2, Group as Group25, Paper as Paper7, Skeleton as Skeleton3, Stack as Stack29, Text as Text25, ThemeIcon as ThemeIcon8, Title as Title19 } from "@mantine/core";
2037
+ import { jsx as jsx35, jsxs as jsxs29 } from "react/jsx-runtime";
1799
2038
  function resolveActionVariant(action, index, seenPrimary) {
1800
2039
  const requested = action.variant ?? (index === 0 ? "primary" : "secondary");
1801
2040
  if (requested === "primary" && !seenPrimary) {
@@ -1807,7 +2046,7 @@ function resolveActionVariant(action, index, seenPrimary) {
1807
2046
  return { variant: "default", seenPrimary };
1808
2047
  }
1809
2048
  function HeroAction({ action, variant }) {
1810
- const content = /* @__PURE__ */ jsx34(
2049
+ const content = /* @__PURE__ */ jsx35(
1811
2050
  Anchor6,
1812
2051
  {
1813
2052
  href: action.href,
@@ -1832,8 +2071,8 @@ function HeroAction({ action, variant }) {
1832
2071
  }
1833
2072
  );
1834
2073
  if (!action.href) {
1835
- return /* @__PURE__ */ jsx34(
1836
- Box10,
2074
+ return /* @__PURE__ */ jsx35(
2075
+ Box11,
1837
2076
  {
1838
2077
  component: "button",
1839
2078
  type: "button",
@@ -1860,22 +2099,22 @@ function HeroAction({ action, variant }) {
1860
2099
  return content;
1861
2100
  }
1862
2101
  function LoadingHero({ compact }) {
1863
- return /* @__PURE__ */ jsx34(Paper7, { withBorder: true, radius: "xl", p: compact ? "lg" : "xl", children: /* @__PURE__ */ jsxs28(Grid2, { gutter: compact ? "lg" : "xl", align: "center", children: [
1864
- /* @__PURE__ */ jsx34(Grid2.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsxs28(Stack28, { gap: "md", children: [
1865
- /* @__PURE__ */ jsx34(Skeleton3, { height: 16, width: 96, radius: "xl" }),
1866
- /* @__PURE__ */ jsx34(Skeleton3, { height: 48, width: "90%", radius: "md" }),
1867
- /* @__PURE__ */ jsx34(Skeleton3, { height: 18, width: "100%", radius: "md" }),
1868
- /* @__PURE__ */ jsx34(Skeleton3, { height: 18, width: "82%", radius: "md" }),
1869
- /* @__PURE__ */ jsxs28(Group25, { children: [
1870
- /* @__PURE__ */ jsx34(Skeleton3, { height: 40, width: 140, radius: "md" }),
1871
- /* @__PURE__ */ jsx34(Skeleton3, { height: 40, width: 140, radius: "md" })
2102
+ return /* @__PURE__ */ jsx35(Paper7, { withBorder: true, radius: "xl", p: compact ? "lg" : "xl", children: /* @__PURE__ */ jsxs29(Grid2, { gutter: compact ? "lg" : "xl", align: "center", children: [
2103
+ /* @__PURE__ */ jsx35(Grid2.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsxs29(Stack29, { gap: "md", children: [
2104
+ /* @__PURE__ */ jsx35(Skeleton3, { height: 16, width: 96, radius: "xl" }),
2105
+ /* @__PURE__ */ jsx35(Skeleton3, { height: 48, width: "90%", radius: "md" }),
2106
+ /* @__PURE__ */ jsx35(Skeleton3, { height: 18, width: "100%", radius: "md" }),
2107
+ /* @__PURE__ */ jsx35(Skeleton3, { height: 18, width: "82%", radius: "md" }),
2108
+ /* @__PURE__ */ jsxs29(Group25, { children: [
2109
+ /* @__PURE__ */ jsx35(Skeleton3, { height: 40, width: 140, radius: "md" }),
2110
+ /* @__PURE__ */ jsx35(Skeleton3, { height: 40, width: 140, radius: "md" })
1872
2111
  ] })
1873
2112
  ] }) }),
1874
- /* @__PURE__ */ jsx34(Grid2.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsx34(AspectRatio5, { ratio: 16 / 11, children: /* @__PURE__ */ jsx34(Skeleton3, { radius: "lg" }) }) })
2113
+ /* @__PURE__ */ jsx35(Grid2.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsx35(AspectRatio5, { ratio: 16 / 11, children: /* @__PURE__ */ jsx35(Skeleton3, { radius: "lg" }) }) })
1875
2114
  ] }) });
1876
2115
  }
1877
2116
  function MediaFallback() {
1878
- return /* @__PURE__ */ jsx34(AspectRatio5, { ratio: 16 / 11, children: /* @__PURE__ */ jsx34(
2117
+ return /* @__PURE__ */ jsx35(AspectRatio5, { ratio: 16 / 11, children: /* @__PURE__ */ jsx35(
1879
2118
  ThemeIcon8,
1880
2119
  {
1881
2120
  size: "100%",
@@ -1883,7 +2122,7 @@ function MediaFallback() {
1883
2122
  color: "gray",
1884
2123
  variant: "light",
1885
2124
  "aria-label": "Hero media is unavailable",
1886
- children: /* @__PURE__ */ jsx34(GdsIcons.Gallery, { size: "2.5rem" })
2125
+ children: /* @__PURE__ */ jsx35(GdsIcons.Gallery, { size: "2.5rem" })
1887
2126
  }
1888
2127
  ) });
1889
2128
  }
@@ -1903,8 +2142,8 @@ function MediaFrame({
1903
2142
  } else if (mediaFade === "soft-start") {
1904
2143
  overlayBackground = "linear-gradient(90deg, light-dark(rgba(255,255,255,0.9), rgba(17,24,39,0.72)) 0%, rgba(255,255,255,0) 28%)";
1905
2144
  }
1906
- return /* @__PURE__ */ jsxs28(
1907
- Box10,
2145
+ return /* @__PURE__ */ jsxs29(
2146
+ Box11,
1908
2147
  {
1909
2148
  component: "figure",
1910
2149
  m: 0,
@@ -1917,9 +2156,9 @@ function MediaFrame({
1917
2156
  },
1918
2157
  "aria-label": mediaAlt,
1919
2158
  children: [
1920
- media ?? /* @__PURE__ */ jsx34(MediaFallback, {}),
1921
- media && overlayBackground ? /* @__PURE__ */ jsx34(
1922
- Box10,
2159
+ media ?? /* @__PURE__ */ jsx35(MediaFallback, {}),
2160
+ media && overlayBackground ? /* @__PURE__ */ jsx35(
2161
+ Box11,
1923
2162
  {
1924
2163
  "aria-hidden": true,
1925
2164
  style: {
@@ -1952,7 +2191,7 @@ function EditorialHero({
1952
2191
  classNames
1953
2192
  }) {
1954
2193
  if (loading) {
1955
- return /* @__PURE__ */ jsx34(LoadingHero, { compact });
2194
+ return /* @__PURE__ */ jsx35(LoadingHero, { compact });
1956
2195
  }
1957
2196
  const stackAlign = align === "center" ? "center" : "flex-start";
1958
2197
  const textAlign = align === "center" ? "center" : "left";
@@ -1960,15 +2199,15 @@ function EditorialHero({
1960
2199
  const renderedActions = actions.slice(0, 3).map((action, index) => {
1961
2200
  const resolved = resolveActionVariant(action, index, seenPrimary);
1962
2201
  seenPrimary = resolved.seenPrimary;
1963
- return /* @__PURE__ */ jsx34(HeroAction, { action, variant: resolved.variant }, `${action.label}-${index}`);
2202
+ return /* @__PURE__ */ jsx35(HeroAction, { action, variant: resolved.variant }, `${action.label}-${index}`);
1964
2203
  });
1965
- const textSlot = /* @__PURE__ */ jsxs28(Stack28, { gap: compact ? "md" : "lg", justify: "center", h: "100%", className: classNames?.content, children: [
1966
- /* @__PURE__ */ jsxs28(Stack28, { gap: "sm", align: stackAlign, children: [
1967
- eyebrow ? /* @__PURE__ */ jsx34(Text24, { size: "sm", fw: 700, c: "dimmed", ta: textAlign, children: eyebrow }) : null,
1968
- /* @__PURE__ */ jsx34(Title19, { order: 1, maw: 760, ta: textAlign, children: title }),
1969
- description ? /* @__PURE__ */ jsx34(Text24, { size: compact ? "md" : "lg", c: "dimmed", maw: 720, ta: textAlign, children: description }) : null
2204
+ const textSlot = /* @__PURE__ */ jsxs29(Stack29, { gap: compact ? "md" : "lg", justify: "center", h: "100%", className: classNames?.content, children: [
2205
+ /* @__PURE__ */ jsxs29(Stack29, { gap: "sm", align: stackAlign, children: [
2206
+ eyebrow ? /* @__PURE__ */ jsx35(Text25, { size: "sm", fw: 700, c: "dimmed", ta: textAlign, children: eyebrow }) : null,
2207
+ /* @__PURE__ */ jsx35(Title19, { order: 1, maw: 760, ta: textAlign, children: title }),
2208
+ description ? /* @__PURE__ */ jsx35(Text25, { size: compact ? "md" : "lg", c: "dimmed", maw: 720, ta: textAlign, children: description }) : null
1970
2209
  ] }),
1971
- renderedActions.length ? /* @__PURE__ */ jsx34(Box10, { className: classNames?.actions, children: /* @__PURE__ */ jsx34(
2210
+ renderedActions.length ? /* @__PURE__ */ jsx35(Box11, { className: classNames?.actions, children: /* @__PURE__ */ jsx35(
1972
2211
  CtaButtonGroup,
1973
2212
  {
1974
2213
  primary: renderedActions[0],
@@ -1976,7 +2215,7 @@ function EditorialHero({
1976
2215
  tertiary: renderedActions[2]
1977
2216
  }
1978
2217
  ) }) : null,
1979
- meta.length ? /* @__PURE__ */ jsx34(Group25, { gap: "sm", wrap: "wrap", "aria-label": "Supporting details", className: classNames?.meta, children: meta.map((item) => /* @__PURE__ */ jsxs28(
2218
+ meta.length ? /* @__PURE__ */ jsx35(Group25, { gap: "sm", wrap: "wrap", "aria-label": "Supporting details", className: classNames?.meta, children: meta.map((item) => /* @__PURE__ */ jsxs29(
1980
2219
  Group25,
1981
2220
  {
1982
2221
  gap: 6,
@@ -1988,16 +2227,16 @@ function EditorialHero({
1988
2227
  },
1989
2228
  children: [
1990
2229
  item.icon,
1991
- /* @__PURE__ */ jsx34(Text24, { size: "sm", c: "dimmed", children: item.label })
2230
+ /* @__PURE__ */ jsx35(Text25, { size: "sm", c: "dimmed", children: item.label })
1992
2231
  ]
1993
2232
  },
1994
2233
  item.id
1995
2234
  )) }) : null
1996
2235
  ] });
1997
- const mediaSlot = error ? /* @__PURE__ */ jsx34(AccentPanel, { tone: "red", variant: "soft-outline", title: "Media unavailable", children: error }) : /* @__PURE__ */ jsx34(MediaFrame, { media, mediaAlt, mediaFade, className: classNames?.media });
1998
- const textCol = /* @__PURE__ */ jsx34(Grid2.Col, { span: { base: 12, md: 6 }, order: { base: 1, md: mediaPosition === "left" ? 2 : 1 }, children: textSlot });
1999
- const mediaCol = /* @__PURE__ */ jsx34(Grid2.Col, { span: { base: 12, md: 6 }, order: { base: 2, md: mediaPosition === "left" ? 1 : 2 }, children: mediaSlot });
2000
- return /* @__PURE__ */ jsx34(
2236
+ const mediaSlot = error ? /* @__PURE__ */ jsx35(AccentPanel, { tone: "red", variant: "soft-outline", title: "Media unavailable", children: error }) : /* @__PURE__ */ jsx35(MediaFrame, { media, mediaAlt, mediaFade, className: classNames?.media });
2237
+ const textCol = /* @__PURE__ */ jsx35(Grid2.Col, { span: { base: 12, md: 6 }, order: { base: 1, md: mediaPosition === "left" ? 2 : 1 }, children: textSlot });
2238
+ const mediaCol = /* @__PURE__ */ jsx35(Grid2.Col, { span: { base: 12, md: 6 }, order: { base: 2, md: mediaPosition === "left" ? 1 : 2 }, children: mediaSlot });
2239
+ return /* @__PURE__ */ jsx35(
2001
2240
  Paper7,
2002
2241
  {
2003
2242
  component: "section",
@@ -2006,7 +2245,7 @@ function EditorialHero({
2006
2245
  p: compact ? "lg" : "xl",
2007
2246
  className: classNames?.root,
2008
2247
  style: surfaceVariant === "flat-public" ? { boxShadow: "none" } : void 0,
2009
- children: /* @__PURE__ */ jsxs28(Grid2, { gutter: compact ? "lg" : "xl", align: "center", children: [
2248
+ children: /* @__PURE__ */ jsxs29(Grid2, { gutter: compact ? "lg" : "xl", align: "center", children: [
2010
2249
  textCol,
2011
2250
  mediaCol
2012
2251
  ] })
@@ -2015,19 +2254,19 @@ function EditorialHero({
2015
2254
  }
2016
2255
 
2017
2256
  // src/FeatureBand.tsx
2018
- import { Box as Box11, Group as Group26, Paper as Paper8, SimpleGrid as SimpleGrid6, Skeleton as Skeleton4, Stack as Stack29, Text as Text25, ThemeIcon as ThemeIcon9, Title as Title20 } from "@mantine/core";
2019
- import { Fragment as Fragment5, jsx as jsx35, jsxs as jsxs29 } from "react/jsx-runtime";
2257
+ import { Box as Box12, Group as Group26, Paper as Paper8, SimpleGrid as SimpleGrid6, Skeleton as Skeleton4, Stack as Stack30, Text as Text26, ThemeIcon as ThemeIcon9, Title as Title20 } from "@mantine/core";
2258
+ import { Fragment as Fragment5, jsx as jsx36, jsxs as jsxs30 } from "react/jsx-runtime";
2020
2259
  function FeatureBandSkeleton({
2021
2260
  columns = 3,
2022
2261
  bordered = true,
2023
2262
  variant = "default"
2024
2263
  }) {
2025
- return /* @__PURE__ */ jsx35(SimpleGrid6, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx35(Paper8, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ jsxs29(Stack29, { gap: "md", children: [
2026
- /* @__PURE__ */ jsx35(Skeleton4, { height: variant === "process" ? 28 : 42, width: variant === "process" ? 72 : 42, radius: "xl" }),
2027
- /* @__PURE__ */ jsxs29(Stack29, { gap: "xs", children: [
2028
- /* @__PURE__ */ jsx35(Skeleton4, { height: 20, width: "75%", radius: "md" }),
2029
- /* @__PURE__ */ jsx35(Skeleton4, { height: 14, width: "100%", radius: "md" }),
2030
- /* @__PURE__ */ jsx35(Skeleton4, { height: 14, width: "82%", radius: "md" })
2264
+ return /* @__PURE__ */ jsx36(SimpleGrid6, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx36(Paper8, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ jsxs30(Stack30, { gap: "md", children: [
2265
+ /* @__PURE__ */ jsx36(Skeleton4, { height: variant === "process" ? 28 : 42, width: variant === "process" ? 72 : 42, radius: "xl" }),
2266
+ /* @__PURE__ */ jsxs30(Stack30, { gap: "xs", children: [
2267
+ /* @__PURE__ */ jsx36(Skeleton4, { height: 20, width: "75%", radius: "md" }),
2268
+ /* @__PURE__ */ jsx36(Skeleton4, { height: 14, width: "100%", radius: "md" }),
2269
+ /* @__PURE__ */ jsx36(Skeleton4, { height: 14, width: "82%", radius: "md" })
2031
2270
  ] })
2032
2271
  ] }) }, index)) });
2033
2272
  }
@@ -2040,10 +2279,10 @@ function FeatureBand({
2040
2279
  variant = "default"
2041
2280
  }) {
2042
2281
  if (loading) {
2043
- return /* @__PURE__ */ jsx35(FeatureBandSkeleton, { columns, bordered, variant });
2282
+ return /* @__PURE__ */ jsx36(FeatureBandSkeleton, { columns, bordered, variant });
2044
2283
  }
2045
2284
  if (!items.length) {
2046
- return emptyState ? /* @__PURE__ */ jsx35(Fragment5, { children: emptyState }) : /* @__PURE__ */ jsx35(
2285
+ return emptyState ? /* @__PURE__ */ jsx36(Fragment5, { children: emptyState }) : /* @__PURE__ */ jsx36(
2047
2286
  EmptyState,
2048
2287
  {
2049
2288
  title: "No supporting details available",
@@ -2051,9 +2290,9 @@ function FeatureBand({
2051
2290
  }
2052
2291
  );
2053
2292
  }
2054
- return /* @__PURE__ */ jsx35(Box11, { component: "section", "aria-label": "Supporting features", children: /* @__PURE__ */ jsx35(SimpleGrid6, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: items.map((item, index) => /* @__PURE__ */ jsx35(Paper8, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ jsxs29(Stack29, { gap: "md", children: [
2055
- variant === "process" ? /* @__PURE__ */ jsx35(Group26, { children: /* @__PURE__ */ jsx35(
2056
- Text25,
2293
+ return /* @__PURE__ */ jsx36(Box12, { component: "section", "aria-label": "Supporting features", children: /* @__PURE__ */ jsx36(SimpleGrid6, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: items.map((item, index) => /* @__PURE__ */ jsx36(Paper8, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ jsxs30(Stack30, { gap: "md", children: [
2294
+ variant === "process" ? /* @__PURE__ */ jsx36(Group26, { children: /* @__PURE__ */ jsx36(
2295
+ Text26,
2057
2296
  {
2058
2297
  fw: 800,
2059
2298
  size: "sm",
@@ -2065,18 +2304,18 @@ function FeatureBand({
2065
2304
  },
2066
2305
  children: item.stepLabel ?? `Step ${index + 1}`
2067
2306
  }
2068
- ) }) : item.media ? item.media : item.icon ? /* @__PURE__ */ jsx35(Group26, { children: /* @__PURE__ */ jsx35(ThemeIcon9, { size: "xl", radius: "xl", variant: "light", color: "violet", children: item.icon }) }) : /* @__PURE__ */ jsx35(Group26, { children: /* @__PURE__ */ jsx35(ThemeIcon9, { size: "xl", radius: "xl", variant: "light", color: "gray", "aria-hidden": true, children: /* @__PURE__ */ jsx35(GdsIcons.Info, { size: "1.25rem" }) }) }),
2069
- /* @__PURE__ */ jsxs29(Stack29, { gap: "xs", children: [
2070
- /* @__PURE__ */ jsx35(Title20, { order: 4, children: item.title }),
2071
- item.description ? /* @__PURE__ */ jsx35(Text25, { c: "dimmed", children: item.description }) : null,
2072
- item.meta ? /* @__PURE__ */ jsx35(Text25, { size: "sm", c: "dimmed", children: item.meta }) : null
2307
+ ) }) : item.media ? item.media : item.icon ? /* @__PURE__ */ jsx36(Group26, { children: /* @__PURE__ */ jsx36(ThemeIcon9, { size: "xl", radius: "xl", variant: "light", color: "violet", children: item.icon }) }) : /* @__PURE__ */ jsx36(Group26, { children: /* @__PURE__ */ jsx36(ThemeIcon9, { size: "xl", radius: "xl", variant: "light", color: "gray", "aria-hidden": true, children: /* @__PURE__ */ jsx36(GdsIcons.Info, { size: "1.25rem" }) }) }),
2308
+ /* @__PURE__ */ jsxs30(Stack30, { gap: "xs", children: [
2309
+ /* @__PURE__ */ jsx36(Title20, { order: 4, children: item.title }),
2310
+ item.description ? /* @__PURE__ */ jsx36(Text26, { c: "dimmed", children: item.description }) : null,
2311
+ item.meta ? /* @__PURE__ */ jsx36(Text26, { size: "sm", c: "dimmed", children: item.meta }) : null
2073
2312
  ] })
2074
2313
  ] }) }, item.id)) }) });
2075
2314
  }
2076
2315
 
2077
2316
  // src/MapPanel.tsx
2078
- import { AspectRatio as AspectRatio6, Box as Box12, Group as Group27, Paper as Paper9, Stack as Stack30, Text as Text26, Title as Title21 } from "@mantine/core";
2079
- import { jsx as jsx36, jsxs as jsxs30 } from "react/jsx-runtime";
2317
+ import { AspectRatio as AspectRatio6, Box as Box13, Group as Group27, Paper as Paper9, Stack as Stack31, Text as Text27, Title as Title21 } from "@mantine/core";
2318
+ import { jsx as jsx37, jsxs as jsxs31 } from "react/jsx-runtime";
2080
2319
  function MapPanel({
2081
2320
  title,
2082
2321
  description,
@@ -2092,7 +2331,7 @@ function MapPanel({
2092
2331
  }) {
2093
2332
  let body;
2094
2333
  if (loading) {
2095
- body = /* @__PURE__ */ jsx36(
2334
+ body = /* @__PURE__ */ jsx37(
2096
2335
  StateBlock,
2097
2336
  {
2098
2337
  variant: "loading",
@@ -2102,9 +2341,9 @@ function MapPanel({
2102
2341
  }
2103
2342
  );
2104
2343
  } else if (error) {
2105
- body = /* @__PURE__ */ jsx36(StateBlock, { variant: "error", title: "Map unavailable", description: error, compact: true });
2344
+ body = /* @__PURE__ */ jsx37(StateBlock, { variant: "error", title: "Map unavailable", description: error, compact: true });
2106
2345
  } else if (!iframeSrc && !renderMap) {
2107
- body = /* @__PURE__ */ jsx36(
2346
+ body = /* @__PURE__ */ jsx37(
2108
2347
  StateBlock,
2109
2348
  {
2110
2349
  variant: "empty",
@@ -2114,9 +2353,9 @@ function MapPanel({
2114
2353
  }
2115
2354
  );
2116
2355
  } else if (renderMap) {
2117
- body = /* @__PURE__ */ jsx36(Box12, { style: { minHeight }, children: renderMap() });
2356
+ body = /* @__PURE__ */ jsx37(Box13, { style: { minHeight }, children: renderMap() });
2118
2357
  } else {
2119
- body = /* @__PURE__ */ jsx36(AspectRatio6, { ratio: 16 / 9, children: /* @__PURE__ */ jsx36(
2358
+ body = /* @__PURE__ */ jsx37(AspectRatio6, { ratio: 16 / 9, children: /* @__PURE__ */ jsx37(
2120
2359
  "iframe",
2121
2360
  {
2122
2361
  src: iframeSrc,
@@ -2128,21 +2367,21 @@ function MapPanel({
2128
2367
  }
2129
2368
  ) });
2130
2369
  }
2131
- return /* @__PURE__ */ jsx36(Paper9, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs30(Stack30, { gap: "md", children: [
2132
- /* @__PURE__ */ jsxs30(Group27, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2133
- /* @__PURE__ */ jsxs30(Stack30, { gap: 4, children: [
2134
- /* @__PURE__ */ jsx36(Title21, { order: 3, children: title }),
2135
- description ? /* @__PURE__ */ jsx36(Text26, { size: "sm", c: "dimmed", children: description }) : null
2370
+ return /* @__PURE__ */ jsx37(Paper9, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs31(Stack31, { gap: "md", children: [
2371
+ /* @__PURE__ */ jsxs31(Group27, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2372
+ /* @__PURE__ */ jsxs31(Stack31, { gap: 4, children: [
2373
+ /* @__PURE__ */ jsx37(Title21, { order: 3, children: title }),
2374
+ description ? /* @__PURE__ */ jsx37(Text27, { size: "sm", c: "dimmed", children: description }) : null
2136
2375
  ] }),
2137
- actions ? /* @__PURE__ */ jsx36(ActionBar, { ...actions }) : null
2376
+ actions ? /* @__PURE__ */ jsx37(ActionBar, { ...actions }) : null
2138
2377
  ] }),
2139
2378
  body
2140
2379
  ] }) });
2141
2380
  }
2142
2381
 
2143
2382
  // src/PublicFlowShell.tsx
2144
- import { Badge as Badge13, Group as Group28, Paper as Paper10, Stack as Stack31, Text as Text27, Title as Title22 } from "@mantine/core";
2145
- import { jsx as jsx37, jsxs as jsxs31 } from "react/jsx-runtime";
2383
+ import { Badge as Badge14, Group as Group28, Paper as Paper10, Stack as Stack32, Text as Text28, Title as Title22 } from "@mantine/core";
2384
+ import { jsx as jsx38, jsxs as jsxs32 } from "react/jsx-runtime";
2146
2385
  var stageTone = {
2147
2386
  idle: { label: "Idle", color: "gray" },
2148
2387
  loading: { label: "Loading", color: "blue" },
@@ -2194,7 +2433,7 @@ function PublicFlowShell({
2194
2433
  const actionBar = toActionBar(stage.actions);
2195
2434
  let body = stage.body;
2196
2435
  if (stage.status === "loading") {
2197
- body = /* @__PURE__ */ jsx37(
2436
+ body = /* @__PURE__ */ jsx38(
2198
2437
  StateBlock,
2199
2438
  {
2200
2439
  variant: "loading",
@@ -2203,7 +2442,7 @@ function PublicFlowShell({
2203
2442
  }
2204
2443
  );
2205
2444
  } else if (stage.status === "error") {
2206
- body = errorState ?? /* @__PURE__ */ jsx37(
2445
+ body = errorState ?? /* @__PURE__ */ jsx38(
2207
2446
  StateBlock,
2208
2447
  {
2209
2448
  variant: "error",
@@ -2212,7 +2451,7 @@ function PublicFlowShell({
2212
2451
  }
2213
2452
  );
2214
2453
  } else if (!stage.body && !hardwareSurface) {
2215
- body = emptyState ?? /* @__PURE__ */ jsx37(
2454
+ body = emptyState ?? /* @__PURE__ */ jsx38(
2216
2455
  EmptyState,
2217
2456
  {
2218
2457
  title: "No stage content available",
@@ -2220,29 +2459,29 @@ function PublicFlowShell({
2220
2459
  }
2221
2460
  );
2222
2461
  }
2223
- return /* @__PURE__ */ jsx37(Paper10, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs31(Stack31, { gap: "lg", children: [
2224
- /* @__PURE__ */ jsxs31(Group28, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2225
- /* @__PURE__ */ jsxs31(Stack31, { gap: 4, children: [
2226
- eyebrow ? /* @__PURE__ */ jsx37(Text27, { size: "xs", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
2227
- /* @__PURE__ */ jsxs31(Group28, { gap: "sm", wrap: "wrap", children: [
2228
- /* @__PURE__ */ jsx37(Title22, { order: 2, children: stage.title }),
2229
- /* @__PURE__ */ jsx37(Badge13, { variant: "light", color: tone.color, children: tone.label })
2462
+ return /* @__PURE__ */ jsx38(Paper10, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs32(Stack32, { gap: "lg", children: [
2463
+ /* @__PURE__ */ jsxs32(Group28, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2464
+ /* @__PURE__ */ jsxs32(Stack32, { gap: 4, children: [
2465
+ eyebrow ? /* @__PURE__ */ jsx38(Text28, { size: "xs", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
2466
+ /* @__PURE__ */ jsxs32(Group28, { gap: "sm", wrap: "wrap", children: [
2467
+ /* @__PURE__ */ jsx38(Title22, { order: 2, children: stage.title }),
2468
+ /* @__PURE__ */ jsx38(Badge14, { variant: "light", color: tone.color, children: tone.label })
2230
2469
  ] }),
2231
- stage.description ? /* @__PURE__ */ jsx37(Text27, { size: "sm", c: "dimmed", children: stage.description }) : null
2470
+ stage.description ? /* @__PURE__ */ jsx38(Text28, { size: "sm", c: "dimmed", children: stage.description }) : null
2232
2471
  ] }),
2233
2472
  exitAction
2234
2473
  ] }),
2235
- stage.notice ? /* @__PURE__ */ jsx37(Text27, { size: "sm", c: "dimmed", children: stage.notice }) : null,
2474
+ stage.notice ? /* @__PURE__ */ jsx38(Text28, { size: "sm", c: "dimmed", children: stage.notice }) : null,
2236
2475
  body,
2237
2476
  hardwareSurface,
2238
2477
  stage.aside,
2239
- actionBar ? /* @__PURE__ */ jsx37(ActionBar, { ...actionBar }) : null
2478
+ actionBar ? /* @__PURE__ */ jsx38(ActionBar, { ...actionBar }) : null
2240
2479
  ] }) });
2241
2480
  }
2242
2481
 
2243
2482
  // src/PlaybackSurface.tsx
2244
- import { Badge as Badge14, Group as Group29, Paper as Paper11, Stack as Stack32, Text as Text28, Title as Title23 } from "@mantine/core";
2245
- import { jsx as jsx38, jsxs as jsxs32 } from "react/jsx-runtime";
2483
+ import { Badge as Badge15, Group as Group29, Paper as Paper11, Stack as Stack33, Text as Text29, Title as Title23 } from "@mantine/core";
2484
+ import { jsx as jsx39, jsxs as jsxs33 } from "react/jsx-runtime";
2246
2485
  var stateTone = {
2247
2486
  loading: { label: "Loading", color: "blue" },
2248
2487
  ready: { label: "Ready", color: "teal" },
@@ -2265,7 +2504,7 @@ function PlaybackSurface({
2265
2504
  const tone = stateTone[state];
2266
2505
  let content;
2267
2506
  if (state === "loading") {
2268
- content = /* @__PURE__ */ jsx38(
2507
+ content = /* @__PURE__ */ jsx39(
2269
2508
  StateBlock,
2270
2509
  {
2271
2510
  variant: "loading",
@@ -2274,7 +2513,7 @@ function PlaybackSurface({
2274
2513
  }
2275
2514
  );
2276
2515
  } else if (state === "empty") {
2277
- content = emptyState ?? /* @__PURE__ */ jsx38(
2516
+ content = emptyState ?? /* @__PURE__ */ jsx39(
2278
2517
  EmptyState,
2279
2518
  {
2280
2519
  title: "No playback content available",
@@ -2282,7 +2521,7 @@ function PlaybackSurface({
2282
2521
  }
2283
2522
  );
2284
2523
  } else if (state === "error") {
2285
- content = errorState ?? /* @__PURE__ */ jsx38(
2524
+ content = errorState ?? /* @__PURE__ */ jsx39(
2286
2525
  StateBlock,
2287
2526
  {
2288
2527
  variant: "error",
@@ -2291,23 +2530,23 @@ function PlaybackSurface({
2291
2530
  }
2292
2531
  );
2293
2532
  } else {
2294
- content = /* @__PURE__ */ jsxs32(Stack32, { gap: "md", children: [
2533
+ content = /* @__PURE__ */ jsxs33(Stack33, { gap: "md", children: [
2295
2534
  media,
2296
2535
  overlays
2297
2536
  ] });
2298
2537
  }
2299
- return /* @__PURE__ */ jsx38(Paper11, { withBorder: true, radius: "xl", p: "lg", "data-playback-mode": mode, children: /* @__PURE__ */ jsxs32(Stack32, { gap: "md", children: [
2300
- title || statusMessage || controls ? /* @__PURE__ */ jsxs32(Group29, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2301
- /* @__PURE__ */ jsxs32(Stack32, { gap: 4, children: [
2302
- title ? /* @__PURE__ */ jsx38(Title23, { order: 3, children: title }) : null,
2303
- statusMessage ? /* @__PURE__ */ jsx38(Text28, { size: "sm", c: "dimmed", children: statusMessage }) : null
2538
+ return /* @__PURE__ */ jsx39(Paper11, { withBorder: true, radius: "xl", p: "lg", "data-playback-mode": mode, children: /* @__PURE__ */ jsxs33(Stack33, { gap: "md", children: [
2539
+ title || statusMessage || controls ? /* @__PURE__ */ jsxs33(Group29, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2540
+ /* @__PURE__ */ jsxs33(Stack33, { gap: 4, children: [
2541
+ title ? /* @__PURE__ */ jsx39(Title23, { order: 3, children: title }) : null,
2542
+ statusMessage ? /* @__PURE__ */ jsx39(Text29, { size: "sm", c: "dimmed", children: statusMessage }) : null
2304
2543
  ] }),
2305
- /* @__PURE__ */ jsxs32(Group29, { gap: "sm", align: "center", wrap: "wrap", children: [
2306
- /* @__PURE__ */ jsx38(Badge14, { variant: "light", color: tone.color, children: tone.label }),
2544
+ /* @__PURE__ */ jsxs33(Group29, { gap: "sm", align: "center", wrap: "wrap", children: [
2545
+ /* @__PURE__ */ jsx39(Badge15, { variant: "light", color: tone.color, children: tone.label }),
2307
2546
  controls
2308
2547
  ] })
2309
2548
  ] }) : null,
2310
- state === "degraded" ? /* @__PURE__ */ jsx38(
2549
+ state === "degraded" ? /* @__PURE__ */ jsx39(
2311
2550
  StateBlock,
2312
2551
  {
2313
2552
  variant: "info",
@@ -2321,14 +2560,21 @@ function PlaybackSurface({
2321
2560
  }
2322
2561
 
2323
2562
  // src/MediaField.tsx
2324
- import { Badge as Badge15, Button as Button4, Divider as Divider6, Group as Group30, Paper as Paper12, Stack as Stack33, Text as Text29 } from "@mantine/core";
2325
- import { Fragment as Fragment6, jsx as jsx39, jsxs as jsxs33 } from "react/jsx-runtime";
2563
+ import { Badge as Badge16, Button as Button4, Divider as Divider6, Group as Group30, Paper as Paper12, Progress as Progress2, Stack as Stack34, Text as Text30 } from "@mantine/core";
2564
+ import { Fragment as Fragment6, jsx as jsx40, jsxs as jsxs34 } from "react/jsx-runtime";
2326
2565
  var stateLabels = {
2327
2566
  empty: { label: "Empty", color: "gray" },
2567
+ "drag-active": { label: "Drop to select", color: "violet" },
2328
2568
  selected: { label: "Selected", color: "blue" },
2569
+ "preview-loading": { label: "Preview loading", color: "violet" },
2329
2570
  saved: { label: "Saved", color: "teal" },
2330
2571
  invalid: { label: "Needs attention", color: "red" },
2331
- uploading: { label: "Uploading", color: "violet" }
2572
+ uploading: { label: "Uploading", color: "violet" },
2573
+ "upload-failed": { label: "Upload failed", color: "red" },
2574
+ "unsupported-type": { label: "Unsupported type", color: "red" },
2575
+ "too-large": { label: "Too large", color: "red" },
2576
+ removed: { label: "Removed", color: "gray" },
2577
+ readonly: { label: "Read only", color: "gray" }
2332
2578
  };
2333
2579
  function MediaField({
2334
2580
  label,
@@ -2341,41 +2587,60 @@ function MediaField({
2341
2587
  policyText,
2342
2588
  error,
2343
2589
  retryAction,
2590
+ replaceAction,
2344
2591
  onRemove,
2345
2592
  onReset,
2346
2593
  removeAction,
2347
2594
  resetAction,
2348
2595
  statusAction,
2596
+ acceptedTypes,
2597
+ maxSize,
2598
+ progress,
2599
+ readonly = false,
2349
2600
  state = "empty",
2350
2601
  mode = "stacked"
2351
2602
  }) {
2352
- const stateBadge = stateLabels[state];
2353
- const resolvedRemoveAction = removeAction ?? (onRemove ? /* @__PURE__ */ jsx39(Button4, { type: "button", variant: "light", color: "red", onClick: onRemove, children: "Remove" }) : null);
2354
- const resolvedResetAction = resetAction ?? (onReset ? /* @__PURE__ */ jsx39(Button4, { type: "button", variant: "default", onClick: onReset, children: "Reset" }) : null);
2355
- return /* @__PURE__ */ jsx39(
2603
+ const resolvedState = readonly ? "readonly" : state;
2604
+ const stateBadge = stateLabels[resolvedState];
2605
+ const resolvedRemoveAction = removeAction ?? (!readonly && onRemove ? /* @__PURE__ */ jsx40(Button4, { type: "button", variant: "light", color: "red", onClick: onRemove, children: "Remove" }) : null);
2606
+ const resolvedResetAction = resetAction ?? (!readonly && onReset ? /* @__PURE__ */ jsx40(Button4, { type: "button", variant: "default", onClick: onReset, children: "Reset" }) : null);
2607
+ const boundedProgress = typeof progress === "number" ? Math.max(0, Math.min(100, progress)) : void 0;
2608
+ return /* @__PURE__ */ jsx40(
2356
2609
  FormField,
2357
2610
  {
2358
2611
  label,
2359
2612
  description,
2360
2613
  error,
2361
- children: /* @__PURE__ */ jsx39(Paper12, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs33(Stack33, { gap: "md", children: [
2362
- /* @__PURE__ */ jsx39(Group30, { justify: "flex-end", align: "center", gap: "sm", children: /* @__PURE__ */ jsxs33(Group30, { gap: "xs", justify: "flex-end", children: [
2363
- /* @__PURE__ */ jsx39(Badge15, { variant: "light", color: stateBadge.color, children: stateBadge.label }),
2614
+ children: /* @__PURE__ */ jsx40(Paper12, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs34(Stack34, { gap: "md", children: [
2615
+ /* @__PURE__ */ jsx40(Group30, { justify: "flex-end", align: "center", gap: "sm", children: /* @__PURE__ */ jsxs34(Group30, { gap: "xs", justify: "flex-end", children: [
2616
+ /* @__PURE__ */ jsx40(Badge16, { variant: "light", color: stateBadge.color, children: stateBadge.label }),
2364
2617
  statusAction
2365
2618
  ] }) }),
2366
2619
  preview ? preview : null,
2367
- uploadControl || urlInput ? /* @__PURE__ */ jsxs33(Fragment6, { children: [
2368
- /* @__PURE__ */ jsx39(Divider6, {}),
2369
- /* @__PURE__ */ jsxs33(Stack33, { gap: "sm", style: mode === "split" ? { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))" } : void 0, children: [
2620
+ typeof boundedProgress === "number" ? /* @__PURE__ */ jsxs34(Stack34, { gap: 4, children: [
2621
+ /* @__PURE__ */ jsx40(Progress2, { value: boundedProgress, "aria-label": "Upload progress" }),
2622
+ /* @__PURE__ */ jsxs34(Text30, { size: "xs", c: "dimmed", children: [
2623
+ boundedProgress,
2624
+ "% complete"
2625
+ ] })
2626
+ ] }) : null,
2627
+ (uploadControl || urlInput) && !readonly ? /* @__PURE__ */ jsxs34(Fragment6, { children: [
2628
+ /* @__PURE__ */ jsx40(Divider6, {}),
2629
+ /* @__PURE__ */ jsxs34(Stack34, { gap: "sm", style: mode === "split" ? { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))" } : void 0, children: [
2370
2630
  uploadControl,
2371
2631
  urlInput
2372
2632
  ] })
2373
2633
  ] }) : null,
2374
- value ? /* @__PURE__ */ jsx39(Text29, { size: "sm", c: "dimmed", style: { wordBreak: "break-all" }, children: value }) : null,
2375
- helpText ? /* @__PURE__ */ jsx39(Text29, { size: "sm", c: "dimmed", children: helpText }) : null,
2376
- policyText ? /* @__PURE__ */ jsx39(Text29, { size: "sm", c: error ? "red.7" : "dimmed", children: policyText }) : null,
2634
+ value ? /* @__PURE__ */ jsx40(Text30, { size: "sm", c: "dimmed", style: { wordBreak: "break-all" }, children: value }) : null,
2635
+ helpText ? /* @__PURE__ */ jsx40(Text30, { size: "sm", c: "dimmed", children: helpText }) : null,
2636
+ acceptedTypes || maxSize ? /* @__PURE__ */ jsxs34(Group30, { gap: "xs", wrap: "wrap", children: [
2637
+ acceptedTypes ? /* @__PURE__ */ jsx40(Badge16, { variant: "outline", color: "gray", children: acceptedTypes }) : null,
2638
+ maxSize ? /* @__PURE__ */ jsx40(Badge16, { variant: "outline", color: "gray", children: maxSize }) : null
2639
+ ] }) : null,
2640
+ policyText ? /* @__PURE__ */ jsx40(Text30, { size: "sm", c: error ? "red.7" : "dimmed", children: policyText }) : null,
2377
2641
  typeof error !== "string" && error ? error : null,
2378
- resolvedRemoveAction || resolvedResetAction ? /* @__PURE__ */ jsxs33(Group30, { gap: "sm", children: [
2642
+ replaceAction || resolvedRemoveAction || resolvedResetAction || retryAction ? /* @__PURE__ */ jsxs34(Group30, { gap: "sm", children: [
2643
+ replaceAction,
2379
2644
  resolvedResetAction,
2380
2645
  retryAction,
2381
2646
  resolvedRemoveAction
@@ -2386,49 +2651,63 @@ function MediaField({
2386
2651
  }
2387
2652
 
2388
2653
  // src/MediaCard.tsx
2389
- import { ActionIcon as ActionIcon4, Badge as Badge16, Card as Card9, Group as Group31, Stack as Stack34, Text as Text30, Title as Title24 } from "@mantine/core";
2390
- import { jsx as jsx40, jsxs as jsxs34 } from "react/jsx-runtime";
2654
+ import { ActionIcon as ActionIcon4, Badge as Badge17, Card as Card9, Group as Group31, Stack as Stack35, Text as Text31, Title as Title24 } from "@mantine/core";
2655
+ import { jsx as jsx41, jsxs as jsxs35 } from "react/jsx-runtime";
2391
2656
  function MediaCard({ title, image, description, status, overlay, actions = [] }) {
2392
2657
  const EyeIcon = GdsIcons.Eye;
2393
- return /* @__PURE__ */ jsxs34(Card9, { withBorder: true, radius: "lg", padding: "md", children: [
2394
- /* @__PURE__ */ jsxs34(Card9.Section, { pos: "relative", children: [
2658
+ return /* @__PURE__ */ jsxs35(Card9, { withBorder: true, radius: "lg", padding: "md", children: [
2659
+ /* @__PURE__ */ jsxs35(Card9.Section, { pos: "relative", children: [
2395
2660
  image,
2396
- overlay ? /* @__PURE__ */ jsx40("div", { style: { position: "absolute", inset: 12, display: "flex", justifyContent: "flex-end", alignItems: "flex-start" }, children: overlay }) : null
2661
+ overlay ? /* @__PURE__ */ jsx41("div", { style: { position: "absolute", inset: 12, display: "flex", justifyContent: "flex-end", alignItems: "flex-start" }, children: overlay }) : null
2397
2662
  ] }),
2398
- /* @__PURE__ */ jsxs34(Stack34, { gap: "sm", mt: "md", children: [
2399
- /* @__PURE__ */ jsxs34(Group31, { justify: "space-between", align: "flex-start", children: [
2400
- /* @__PURE__ */ jsxs34(Stack34, { gap: 4, children: [
2401
- /* @__PURE__ */ jsx40(Title24, { order: 4, children: title }),
2402
- description ? /* @__PURE__ */ jsx40(Text30, { size: "sm", c: "dimmed", lineClamp: 2, children: description }) : null
2663
+ /* @__PURE__ */ jsxs35(Stack35, { gap: "sm", mt: "md", children: [
2664
+ /* @__PURE__ */ jsxs35(Group31, { justify: "space-between", align: "flex-start", children: [
2665
+ /* @__PURE__ */ jsxs35(Stack35, { gap: 4, children: [
2666
+ /* @__PURE__ */ jsx41(Title24, { order: 4, children: title }),
2667
+ description ? /* @__PURE__ */ jsx41(Text31, { size: "sm", c: "dimmed", lineClamp: 2, children: description }) : null
2403
2668
  ] }),
2404
- status ? /* @__PURE__ */ jsx40(Badge16, { variant: "light", children: status }) : null
2669
+ status ? /* @__PURE__ */ jsx41(Badge17, { variant: "light", children: status }) : null
2405
2670
  ] }),
2406
- actions.length ? /* @__PURE__ */ jsx40(Group31, { justify: "flex-end", gap: "xs", children: actions.map((action) => /* @__PURE__ */ jsx40(ActionIcon4, { variant: "light", "aria-label": action.label, onClick: action.onClick, children: /* @__PURE__ */ jsx40(EyeIcon, { size: "1rem" }) }, action.label)) }) : null
2671
+ actions.length ? /* @__PURE__ */ jsx41(Group31, { justify: "flex-end", gap: "xs", children: actions.map((action) => /* @__PURE__ */ jsx41(ActionIcon4, { variant: "light", "aria-label": action.label, onClick: action.onClick, children: /* @__PURE__ */ jsx41(EyeIcon, { size: "1rem" }) }, action.label)) }) : null
2407
2672
  ] })
2408
2673
  ] });
2409
2674
  }
2410
2675
 
2411
2676
  // src/AccessSummary.tsx
2412
- import { Badge as Badge17, Card as Card10, Group as Group32, Stack as Stack35, Text as Text31, Title as Title25 } from "@mantine/core";
2413
- import { jsx as jsx41, jsxs as jsxs35 } from "react/jsx-runtime";
2414
- function AccessSummary({ title, roles, scope, blocked = false, description }) {
2415
- return /* @__PURE__ */ jsx41(Card10, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs35(Stack35, { gap: "sm", children: [
2416
- /* @__PURE__ */ jsxs35(Group32, { justify: "space-between", align: "center", children: [
2417
- /* @__PURE__ */ jsx41(Title25, { order: 4, children: title }),
2418
- /* @__PURE__ */ jsx41(Badge17, { color: blocked ? "red" : "teal", variant: "light", children: blocked ? "Blocked" : "Allowed" })
2677
+ import { Badge as Badge18, Card as Card10, Group as Group32, Stack as Stack36, Text as Text32, Title as Title25 } from "@mantine/core";
2678
+ import { jsx as jsx42, jsxs as jsxs36 } from "react/jsx-runtime";
2679
+ var accessStateMeta = {
2680
+ allowed: { label: "Allowed", color: "teal" },
2681
+ blocked: { label: "Blocked", color: "red" },
2682
+ forbidden: { label: "Forbidden", color: "red" },
2683
+ expired: { label: "Expired", color: "orange" },
2684
+ "permission-limited": { label: "Permission limited", color: "grape" }
2685
+ };
2686
+ function AccessSummary({ title, roles, scope, blocked = false, state, owner, recoveryHint, description }) {
2687
+ const resolvedState = state ?? (blocked ? "blocked" : "allowed");
2688
+ const meta = accessStateMeta[resolvedState];
2689
+ return /* @__PURE__ */ jsx42(Card10, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs36(Stack36, { gap: "sm", children: [
2690
+ /* @__PURE__ */ jsxs36(Group32, { justify: "space-between", align: "center", children: [
2691
+ /* @__PURE__ */ jsx42(Title25, { order: 4, children: title }),
2692
+ /* @__PURE__ */ jsx42(Badge18, { color: meta.color, variant: "light", children: meta.label })
2419
2693
  ] }),
2420
- /* @__PURE__ */ jsx41(Group32, { gap: "xs", children: roles.map((role) => /* @__PURE__ */ jsx41(Badge17, { variant: "outline", children: role }, role)) }),
2421
- scope ? /* @__PURE__ */ jsxs35(Text31, { size: "sm", c: "dimmed", children: [
2694
+ /* @__PURE__ */ jsx42(Group32, { gap: "xs", children: roles.map((role) => /* @__PURE__ */ jsx42(Badge18, { variant: "outline", children: role }, role)) }),
2695
+ scope ? /* @__PURE__ */ jsxs36(Text32, { size: "sm", c: "dimmed", children: [
2422
2696
  "Scope: ",
2423
2697
  scope
2424
2698
  ] }) : null,
2425
- description ? /* @__PURE__ */ jsx41(Text31, { size: "sm", children: description }) : null
2699
+ owner ? /* @__PURE__ */ jsxs36(Text32, { size: "sm", c: "dimmed", children: [
2700
+ "Owner: ",
2701
+ owner
2702
+ ] }) : null,
2703
+ recoveryHint ? /* @__PURE__ */ jsx42(Text32, { size: "sm", c: resolvedState === "allowed" ? "dimmed" : "red.7", children: recoveryHint }) : null,
2704
+ description ? /* @__PURE__ */ jsx42(Text32, { size: "sm", children: description }) : null
2426
2705
  ] }) });
2427
2706
  }
2428
2707
 
2429
2708
  // src/PageHeader.tsx
2430
- import { Box as Box13, Group as Group33, Stack as Stack36, Text as Text32, Title as Title26 } from "@mantine/core";
2431
- import { jsx as jsx42, jsxs as jsxs36 } from "react/jsx-runtime";
2709
+ import { Box as Box14, Group as Group33, Stack as Stack37, Text as Text33, Title as Title26 } from "@mantine/core";
2710
+ import { jsx as jsx43, jsxs as jsxs37 } from "react/jsx-runtime";
2432
2711
  function PageHeader({
2433
2712
  title,
2434
2713
  description,
@@ -2439,19 +2718,19 @@ function PageHeader({
2439
2718
  }) {
2440
2719
  const resolvedDescription = description ?? subtitle;
2441
2720
  const eyebrowProps = eyebrowVariant === "ornamental" ? { tt: "uppercase", style: { letterSpacing: "0.12em" } } : {};
2442
- return /* @__PURE__ */ jsxs36(Group33, { justify: "space-between", align: "flex-start", gap: "lg", wrap: "wrap", children: [
2443
- /* @__PURE__ */ jsxs36(Stack36, { gap: "xs", children: [
2444
- eyebrow && /* @__PURE__ */ jsx42(Text32, { size: "xs", fw: 700, c: "dimmed", ...eyebrowProps, children: eyebrow }),
2445
- /* @__PURE__ */ jsx42(Title26, { order: 1, children: title }),
2446
- resolvedDescription && /* @__PURE__ */ jsx42(Text32, { c: "dimmed", maw: 720, children: resolvedDescription })
2721
+ return /* @__PURE__ */ jsxs37(Group33, { justify: "space-between", align: "flex-start", gap: "lg", wrap: "wrap", children: [
2722
+ /* @__PURE__ */ jsxs37(Stack37, { gap: "xs", children: [
2723
+ eyebrow && /* @__PURE__ */ jsx43(Text33, { size: "xs", fw: 700, c: "dimmed", ...eyebrowProps, children: eyebrow }),
2724
+ /* @__PURE__ */ jsx43(Title26, { order: 1, children: title }),
2725
+ resolvedDescription && /* @__PURE__ */ jsx43(Text33, { c: "dimmed", maw: 720, children: resolvedDescription })
2447
2726
  ] }),
2448
- actions ? /* @__PURE__ */ jsx42(Box13, { children: actions }) : null
2727
+ actions ? /* @__PURE__ */ jsx43(Box14, { children: actions }) : null
2449
2728
  ] });
2450
2729
  }
2451
2730
 
2452
2731
  // src/FilterDrawer.tsx
2453
- import { Drawer, Group as Group34, Stack as Stack37, Text as Text33 } from "@mantine/core";
2454
- import { jsx as jsx43, jsxs as jsxs37 } from "react/jsx-runtime";
2732
+ import { Drawer, Group as Group34, Stack as Stack38, Text as Text34 } from "@mantine/core";
2733
+ import { jsx as jsx44, jsxs as jsxs38 } from "react/jsx-runtime";
2455
2734
  function FilterDrawer({
2456
2735
  opened,
2457
2736
  onClose,
@@ -2467,7 +2746,7 @@ function FilterDrawer({
2467
2746
  }) {
2468
2747
  const resolvedPrimaryAction = applyAction ?? primaryAction;
2469
2748
  const resolvedSecondaryAction = resetAction ?? secondaryAction;
2470
- return /* @__PURE__ */ jsx43(
2749
+ return /* @__PURE__ */ jsx44(
2471
2750
  Drawer,
2472
2751
  {
2473
2752
  opened,
@@ -2476,11 +2755,11 @@ function FilterDrawer({
2476
2755
  position: mode === "bottom-sheet" ? "bottom" : "right",
2477
2756
  size: mode === "bottom-sheet" ? "auto" : "md",
2478
2757
  radius: mode === "bottom-sheet" ? "xl" : void 0,
2479
- children: /* @__PURE__ */ jsxs37(Stack37, { gap: "md", children: [
2480
- description ? /* @__PURE__ */ jsx43(Text33, { size: "sm", c: "dimmed", children: description }) : null,
2758
+ children: /* @__PURE__ */ jsxs38(Stack38, { gap: "md", children: [
2759
+ description ? /* @__PURE__ */ jsx44(Text34, { size: "sm", c: "dimmed", children: description }) : null,
2481
2760
  children,
2482
- resolvedPrimaryAction || resolvedSecondaryAction || closeAction ? /* @__PURE__ */ jsxs37(Group34, { justify: "space-between", mt: "md", children: [
2483
- /* @__PURE__ */ jsxs37(Group34, { gap: "sm", children: [
2761
+ resolvedPrimaryAction || resolvedSecondaryAction || closeAction ? /* @__PURE__ */ jsxs38(Group34, { justify: "space-between", mt: "md", children: [
2762
+ /* @__PURE__ */ jsxs38(Group34, { gap: "sm", children: [
2484
2763
  closeAction,
2485
2764
  resolvedSecondaryAction
2486
2765
  ] }),
@@ -2492,8 +2771,8 @@ function FilterDrawer({
2492
2771
  }
2493
2772
 
2494
2773
  // src/PlaceholderPanel.tsx
2495
- import { Badge as Badge18, Card as Card11, Stack as Stack38, Text as Text34, Title as Title27 } from "@mantine/core";
2496
- import { Fragment as Fragment7, jsx as jsx44, jsxs as jsxs38 } from "react/jsx-runtime";
2774
+ import { Badge as Badge19, Card as Card11, Stack as Stack39, Text as Text35, Title as Title27 } from "@mantine/core";
2775
+ import { Fragment as Fragment7, jsx as jsx45, jsxs as jsxs39 } from "react/jsx-runtime";
2497
2776
  function PlaceholderPanel({
2498
2777
  title,
2499
2778
  description,
@@ -2503,16 +2782,16 @@ function PlaceholderPanel({
2503
2782
  mode
2504
2783
  }) {
2505
2784
  if (mode === "live" && children) {
2506
- return /* @__PURE__ */ jsx44(Fragment7, { children });
2785
+ return /* @__PURE__ */ jsx45(Fragment7, { children });
2507
2786
  }
2508
- return /* @__PURE__ */ jsx44(Card11, { children: /* @__PURE__ */ jsxs38(Stack38, { gap: "md", children: [
2509
- badge ? /* @__PURE__ */ jsx44(Badge18, { variant: "light", color: "blue", w: "fit-content", children: badge }) : null,
2510
- /* @__PURE__ */ jsxs38(Stack38, { gap: "xs", children: [
2511
- /* @__PURE__ */ jsx44(Title27, { order: 4, children: title }),
2512
- /* @__PURE__ */ jsx44(Text34, { c: "dimmed", children: description })
2787
+ return /* @__PURE__ */ jsx45(Card11, { children: /* @__PURE__ */ jsxs39(Stack39, { gap: "md", children: [
2788
+ badge ? /* @__PURE__ */ jsx45(Badge19, { variant: "light", color: "blue", w: "fit-content", children: badge }) : null,
2789
+ /* @__PURE__ */ jsxs39(Stack39, { gap: "xs", children: [
2790
+ /* @__PURE__ */ jsx45(Title27, { order: 4, children: title }),
2791
+ /* @__PURE__ */ jsx45(Text35, { c: "dimmed", children: description })
2513
2792
  ] }),
2514
- footer ? /* @__PURE__ */ jsx44(Text34, { size: "sm", children: footer }) : null,
2515
- /* @__PURE__ */ jsx44(
2793
+ footer ? /* @__PURE__ */ jsx45(Text35, { size: "sm", children: footer }) : null,
2794
+ /* @__PURE__ */ jsx45(
2516
2795
  StateBlock,
2517
2796
  {
2518
2797
  variant: "not-enough-data",
@@ -2526,7 +2805,7 @@ function PlaceholderPanel({
2526
2805
 
2527
2806
  // src/SimpleDataTable.tsx
2528
2807
  import { ScrollArea, Table } from "@mantine/core";
2529
- import { jsx as jsx45, jsxs as jsxs39 } from "react/jsx-runtime";
2808
+ import { jsx as jsx46, jsxs as jsxs40 } from "react/jsx-runtime";
2530
2809
  function SimpleDataTable({
2531
2810
  columns,
2532
2811
  rows,
@@ -2537,23 +2816,23 @@ function SimpleDataTable({
2537
2816
  getRowKey
2538
2817
  }) {
2539
2818
  if (error) {
2540
- return /* @__PURE__ */ jsx45(StateBlock, { variant: "error", title: "Unable to load data", description: error, compact: true });
2819
+ return /* @__PURE__ */ jsx46(StateBlock, { variant: "error", title: "Unable to load data", description: error, compact: true });
2541
2820
  }
2542
2821
  if (loading) {
2543
- return /* @__PURE__ */ jsx45(StateBlock, { variant: "loading", title: "Loading data", description: "Please wait while the shared dataset is prepared.", compact: true });
2822
+ return /* @__PURE__ */ jsx46(StateBlock, { variant: "loading", title: "Loading data", description: "Please wait while the shared dataset is prepared.", compact: true });
2544
2823
  }
2545
2824
  if (!rows.length) {
2546
- return /* @__PURE__ */ jsx45(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, compact: true });
2825
+ return /* @__PURE__ */ jsx46(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, compact: true });
2547
2826
  }
2548
- return /* @__PURE__ */ jsx45(ScrollArea, { children: /* @__PURE__ */ jsxs39(Table, { striped: true, highlightOnHover: true, withTableBorder: true, withColumnBorders: true, children: [
2549
- /* @__PURE__ */ jsx45(Table.Thead, { children: /* @__PURE__ */ jsx45(Table.Tr, { children: columns.map((column) => /* @__PURE__ */ jsx45(Table.Th, { children: column.header }, String(column.key))) }) }),
2550
- /* @__PURE__ */ jsx45(Table.Tbody, { children: rows.map((row, index) => /* @__PURE__ */ jsx45(Table.Tr, { children: columns.map((column) => /* @__PURE__ */ jsx45(Table.Td, { children: column.render ? column.render(row) : String(row[column.key] ?? "") }, String(column.key))) }, getRowKey ? getRowKey(row, index) : index)) })
2827
+ return /* @__PURE__ */ jsx46(ScrollArea, { children: /* @__PURE__ */ jsxs40(Table, { striped: true, highlightOnHover: true, withTableBorder: true, withColumnBorders: true, children: [
2828
+ /* @__PURE__ */ jsx46(Table.Thead, { children: /* @__PURE__ */ jsx46(Table.Tr, { children: columns.map((column) => /* @__PURE__ */ jsx46(Table.Th, { children: column.header }, String(column.key))) }) }),
2829
+ /* @__PURE__ */ jsx46(Table.Tbody, { children: rows.map((row, index) => /* @__PURE__ */ jsx46(Table.Tr, { children: columns.map((column) => /* @__PURE__ */ jsx46(Table.Td, { children: column.render ? column.render(row) : String(row[column.key] ?? "") }, String(column.key))) }, getRowKey ? getRowKey(row, index) : index)) })
2551
2830
  ] }) });
2552
2831
  }
2553
2832
 
2554
2833
  // src/StatsSection.tsx
2555
- import { Stack as Stack39, Title as Title28 } from "@mantine/core";
2556
- import { jsx as jsx46, jsxs as jsxs40 } from "react/jsx-runtime";
2834
+ import { Stack as Stack40, Title as Title28 } from "@mantine/core";
2835
+ import { jsx as jsx47, jsxs as jsxs41 } from "react/jsx-runtime";
2557
2836
  function StatsSection({
2558
2837
  title,
2559
2838
  loading = false,
@@ -2565,11 +2844,11 @@ function StatsSection({
2565
2844
  }) {
2566
2845
  let content = children;
2567
2846
  if (error) {
2568
- content = /* @__PURE__ */ jsx46(StateBlock, { variant: "error", title: "Unable to load statistics", description: error, compact: true });
2847
+ content = /* @__PURE__ */ jsx47(StateBlock, { variant: "error", title: "Unable to load statistics", description: error, compact: true });
2569
2848
  } else if (loading) {
2570
- content = /* @__PURE__ */ jsx46(StateBlock, { variant: "loading", title: "Loading statistics", description: "This shared data surface is still synchronizing.", compact: true });
2849
+ content = /* @__PURE__ */ jsx47(StateBlock, { variant: "loading", title: "Loading statistics", description: "This shared data surface is still synchronizing.", compact: true });
2571
2850
  } else if (belowThreshold) {
2572
- content = /* @__PURE__ */ jsx46(
2851
+ content = /* @__PURE__ */ jsx47(
2573
2852
  StateBlock,
2574
2853
  {
2575
2854
  variant: "not-enough-data",
@@ -2579,14 +2858,210 @@ function StatsSection({
2579
2858
  }
2580
2859
  );
2581
2860
  } else if (placeholder) {
2582
- content = /* @__PURE__ */ jsx46(PlaceholderPanel, { ...placeholder, mode: "placeholder" });
2861
+ content = /* @__PURE__ */ jsx47(PlaceholderPanel, { ...placeholder, mode: "placeholder" });
2583
2862
  }
2584
- return /* @__PURE__ */ jsxs40(Stack39, { gap: "md", children: [
2585
- /* @__PURE__ */ jsx46(Title28, { order: 3, children: title }),
2863
+ return /* @__PURE__ */ jsxs41(Stack40, { gap: "md", children: [
2864
+ /* @__PURE__ */ jsx47(Title28, { order: 3, children: title }),
2586
2865
  content
2587
2866
  ] });
2588
2867
  }
2589
2868
 
2869
+ // src/PeriodSelector.tsx
2870
+ import { Badge as Badge20, Group as Group35, Stack as Stack41, Text as Text36 } from "@mantine/core";
2871
+ import { jsx as jsx48, jsxs as jsxs42 } from "react/jsx-runtime";
2872
+ function PeriodSelector({
2873
+ label,
2874
+ description,
2875
+ value,
2876
+ options,
2877
+ onChange,
2878
+ timezone,
2879
+ scope,
2880
+ helperText,
2881
+ error,
2882
+ stale = false,
2883
+ filtered = false,
2884
+ disabled = false
2885
+ }) {
2886
+ const selectedOption = options.find((option) => option.value === value);
2887
+ return /* @__PURE__ */ jsx48(FormField, { label, description, error, children: /* @__PURE__ */ jsxs42(Stack41, { gap: "sm", children: [
2888
+ /* @__PURE__ */ jsx48(
2889
+ "select",
2890
+ {
2891
+ "aria-label": typeof label === "string" ? label : "Reporting period",
2892
+ value,
2893
+ disabled,
2894
+ onChange: (event) => onChange?.(event.currentTarget.value),
2895
+ children: options.map((option) => /* @__PURE__ */ jsx48("option", { value: option.value, children: option.label }, option.value))
2896
+ }
2897
+ ),
2898
+ /* @__PURE__ */ jsxs42(Group35, { gap: "xs", wrap: "wrap", children: [
2899
+ timezone ? /* @__PURE__ */ jsxs42(Badge20, { variant: "outline", color: "gray", children: [
2900
+ "Timezone: ",
2901
+ timezone
2902
+ ] }) : null,
2903
+ filtered ? /* @__PURE__ */ jsx48(Badge20, { variant: "light", color: "blue", children: "Filtered" }) : null,
2904
+ stale ? /* @__PURE__ */ jsx48(Badge20, { variant: "light", color: "orange", children: "Stale data" }) : null,
2905
+ scope ? /* @__PURE__ */ jsx48(Badge20, { variant: "outline", color: "gray", children: scope }) : null
2906
+ ] }),
2907
+ selectedOption?.description ? /* @__PURE__ */ jsx48(Text36, { size: "sm", c: "dimmed", children: selectedOption.description }) : null,
2908
+ helperText ? /* @__PURE__ */ jsx48(Text36, { size: "sm", c: "dimmed", children: helperText }) : null
2909
+ ] }) });
2910
+ }
2911
+
2912
+ // src/EvidencePanel.tsx
2913
+ import { Alert as Alert2, Badge as Badge21, Group as Group36, Paper as Paper13, Stack as Stack42, Text as Text37, Title as Title29 } from "@mantine/core";
2914
+ import { jsx as jsx49, jsxs as jsxs43 } from "react/jsx-runtime";
2915
+ var stateTone2 = {
2916
+ current: { label: "Current", color: "teal" },
2917
+ stale: { label: "Stale", color: "orange" },
2918
+ partial: { label: "Partial data", color: "yellow" },
2919
+ "permission-limited": { label: "Permission limited", color: "grape" },
2920
+ loading: { label: "Loading", color: "blue" },
2921
+ empty: { label: "No evidence", color: "gray" },
2922
+ error: { label: "Needs attention", color: "red" }
2923
+ };
2924
+ function EvidencePanel({
2925
+ title,
2926
+ description,
2927
+ source,
2928
+ freshness,
2929
+ confidence,
2930
+ state = "current",
2931
+ evidenceCount,
2932
+ permissionNote,
2933
+ retryAction,
2934
+ details,
2935
+ children
2936
+ }) {
2937
+ const tone = stateTone2[state];
2938
+ const isProblem = state === "error" || state === "permission-limited" || state === "stale" || state === "partial";
2939
+ return /* @__PURE__ */ jsx49(Paper13, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs43(Stack42, { gap: "md", children: [
2940
+ /* @__PURE__ */ jsxs43(Group36, { justify: "space-between", align: "flex-start", gap: "sm", children: [
2941
+ /* @__PURE__ */ jsxs43(Stack42, { gap: 4, children: [
2942
+ /* @__PURE__ */ jsx49(Title29, { order: 4, children: title }),
2943
+ description ? /* @__PURE__ */ jsx49(Text37, { size: "sm", c: "dimmed", children: description }) : null
2944
+ ] }),
2945
+ /* @__PURE__ */ jsx49(Badge21, { variant: "light", color: tone.color, children: tone.label })
2946
+ ] }),
2947
+ /* @__PURE__ */ jsxs43(Group36, { gap: "xs", wrap: "wrap", children: [
2948
+ source ? /* @__PURE__ */ jsxs43(Badge21, { variant: "outline", color: "gray", children: [
2949
+ "Source: ",
2950
+ source
2951
+ ] }) : null,
2952
+ freshness ? /* @__PURE__ */ jsxs43(Badge21, { variant: "outline", color: "gray", children: [
2953
+ "Freshness: ",
2954
+ freshness
2955
+ ] }) : null,
2956
+ confidence ? /* @__PURE__ */ jsxs43(Badge21, { variant: "outline", color: "gray", children: [
2957
+ "Confidence: ",
2958
+ confidence
2959
+ ] }) : null,
2960
+ typeof evidenceCount === "number" ? /* @__PURE__ */ jsxs43(Badge21, { variant: "outline", color: "gray", children: [
2961
+ "Evidence: ",
2962
+ evidenceCount
2963
+ ] }) : null
2964
+ ] }),
2965
+ permissionNote ? /* @__PURE__ */ jsx49(Alert2, { color: isProblem ? tone.color : "gray", variant: "light", children: permissionNote }) : null,
2966
+ details,
2967
+ children,
2968
+ retryAction
2969
+ ] }) });
2970
+ }
2971
+
2972
+ // src/ChartTokenPanel.tsx
2973
+ import { Badge as Badge22, Group as Group37, Paper as Paper14, Stack as Stack43, Text as Text38, Title as Title30 } from "@mantine/core";
2974
+ import { jsx as jsx50, jsxs as jsxs44 } from "react/jsx-runtime";
2975
+ function ChartTokenPanel({
2976
+ title,
2977
+ description,
2978
+ summary,
2979
+ state = "ready",
2980
+ legend = [],
2981
+ children,
2982
+ tableFallback,
2983
+ retryAction
2984
+ }) {
2985
+ if (state === "loading") {
2986
+ return /* @__PURE__ */ jsx50(StateBlock, { variant: "loading", title: "Loading chart", description: summary, compact: true, action: retryAction });
2987
+ }
2988
+ if (state === "empty") {
2989
+ return /* @__PURE__ */ jsx50(StateBlock, { variant: "empty", title: "No chart data", description: summary, compact: true, action: retryAction });
2990
+ }
2991
+ if (state === "below-threshold") {
2992
+ return /* @__PURE__ */ jsx50(StateBlock, { variant: "not-enough-data", title: "Not enough data for chart", description: summary, compact: true, action: retryAction });
2993
+ }
2994
+ if (state === "error") {
2995
+ return /* @__PURE__ */ jsx50(StateBlock, { variant: "error", title: "Unable to load chart", description: summary, compact: true, action: retryAction });
2996
+ }
2997
+ return /* @__PURE__ */ jsx50(Paper14, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs44(Stack43, { gap: "md", children: [
2998
+ /* @__PURE__ */ jsxs44(Group37, { justify: "space-between", align: "flex-start", gap: "sm", children: [
2999
+ /* @__PURE__ */ jsxs44(Stack43, { gap: 4, children: [
3000
+ /* @__PURE__ */ jsx50(Title30, { order: 4, children: title }),
3001
+ description ? /* @__PURE__ */ jsx50(Text38, { size: "sm", c: "dimmed", children: description }) : null
3002
+ ] }),
3003
+ state !== "ready" ? /* @__PURE__ */ jsx50(Badge22, { variant: "light", color: state === "permission-limited" ? "grape" : "yellow", children: state.replace("-", " ") }) : null
3004
+ ] }),
3005
+ /* @__PURE__ */ jsx50(Text38, { size: "sm", children: summary }),
3006
+ legend.length ? /* @__PURE__ */ jsx50(Group37, { gap: "xs", wrap: "wrap", "aria-label": "Chart legend", children: legend.map((item, index) => /* @__PURE__ */ jsxs44(Badge22, { variant: "outline", color: "gray", title: typeof item.description === "string" ? item.description : void 0, children: [
3007
+ item.label,
3008
+ ": ",
3009
+ item.token
3010
+ ] }, `${String(item.label)}-${index}`)) }) : null,
3011
+ children,
3012
+ tableFallback ? /* @__PURE__ */ jsxs44(Stack43, { gap: "xs", children: [
3013
+ /* @__PURE__ */ jsx50(Text38, { size: "sm", fw: 600, children: "Accessible data fallback" }),
3014
+ tableFallback
3015
+ ] }) : null
3016
+ ] }) });
3017
+ }
3018
+
3019
+ // src/ReportingSection.tsx
3020
+ import { Group as Group38, Paper as Paper15, Stack as Stack44, Text as Text39, Title as Title31 } from "@mantine/core";
3021
+ import { jsx as jsx51, jsxs as jsxs45 } from "react/jsx-runtime";
3022
+ function ReportingSection({
3023
+ title,
3024
+ description,
3025
+ state = "ready",
3026
+ periodControl,
3027
+ evidence,
3028
+ metrics,
3029
+ chart,
3030
+ table,
3031
+ action,
3032
+ stateMessage,
3033
+ retryAction
3034
+ }) {
3035
+ let stateBlock = null;
3036
+ if (state === "loading") {
3037
+ stateBlock = /* @__PURE__ */ jsx51(StateBlock, { variant: "loading", title: "Loading report", description: stateMessage ?? "The reporting surface is synchronizing.", compact: true });
3038
+ } else if (state === "empty") {
3039
+ stateBlock = /* @__PURE__ */ jsx51(StateBlock, { variant: "empty", title: "No report data", description: stateMessage ?? "No records match this reporting scope yet.", compact: true });
3040
+ } else if (state === "error") {
3041
+ stateBlock = /* @__PURE__ */ jsx51(StateBlock, { variant: "error", title: "Unable to load report", description: stateMessage ?? "The report could not be prepared.", compact: true, action: retryAction });
3042
+ } else if (state === "below-threshold") {
3043
+ stateBlock = /* @__PURE__ */ jsx51(StateBlock, { variant: "not-enough-data", title: "Not enough data", description: stateMessage ?? "This report is hidden until the threshold is met.", compact: true });
3044
+ } else if (state === "permission-limited") {
3045
+ stateBlock = /* @__PURE__ */ jsx51(StateBlock, { variant: "permission", title: "Permission-limited report", description: stateMessage ?? "Some evidence is hidden by access rules.", compact: true, action: retryAction });
3046
+ }
3047
+ return /* @__PURE__ */ jsx51(Paper15, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs45(Stack44, { gap: "lg", children: [
3048
+ /* @__PURE__ */ jsxs45(Group38, { justify: "space-between", align: "flex-start", gap: "md", children: [
3049
+ /* @__PURE__ */ jsxs45(Stack44, { gap: 4, children: [
3050
+ /* @__PURE__ */ jsx51(Title31, { order: 3, children: title }),
3051
+ description ? /* @__PURE__ */ jsx51(Text39, { size: "sm", c: "dimmed", children: description }) : null
3052
+ ] }),
3053
+ action
3054
+ ] }),
3055
+ periodControl,
3056
+ (state === "partial" || state === "stale" || state === "filtered") && stateMessage ? /* @__PURE__ */ jsx51(StateBlock, { variant: "info", title: state === "partial" ? "Partial report" : state === "stale" ? "Stale report" : "Filtered report", description: stateMessage, compact: true }) : null,
3057
+ stateBlock,
3058
+ metrics,
3059
+ chart,
3060
+ table,
3061
+ evidence
3062
+ ] }) });
3063
+ }
3064
+
2590
3065
  // src/locales/ar.ts
2591
3066
  var ar = {
2592
3067
  "gds.action.settings": "\u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A",
@@ -3904,6 +4379,8 @@ export {
3904
4379
  AccentPanel,
3905
4380
  ReferenceLocaleNotice,
3906
4381
  ReferenceLinkGrid,
4382
+ resolveSurfacePresentationStyles,
4383
+ isPresentationMode,
3907
4384
  SectionPanel,
3908
4385
  ReferenceSection,
3909
4386
  ActionBar,
@@ -3928,6 +4405,12 @@ export {
3928
4405
  PublicSiteFooter,
3929
4406
  PublicBrandFooter,
3930
4407
  AuthShell,
4408
+ PROVIDER_IDENTITY_REGISTRY,
4409
+ getProviderIdentityLabel,
4410
+ getSupportedProviderIdentityIds,
4411
+ getProviderIdentityPolicy,
4412
+ ProviderIdentityButton,
4413
+ ProviderIdentityButtonGroup,
3931
4414
  SocialAuthButtons,
3932
4415
  ArticleShell,
3933
4416
  CtaButtonGroup,
@@ -3945,6 +4428,10 @@ export {
3945
4428
  PlaceholderPanel,
3946
4429
  SimpleDataTable,
3947
4430
  StatsSection,
4431
+ PeriodSelector,
4432
+ EvidencePanel,
4433
+ ChartTokenPanel,
4434
+ ReportingSection,
3948
4435
  ar,
3949
4436
  de,
3950
4437
  en,