@doneisbetter/gds-core 2.6.7 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,9 +8,24 @@ var statusColorMap = {
8
8
  info: "blue",
9
9
  neutral: "gray"
10
10
  };
11
+ var labelTagColorMap = {
12
+ neutral: "gray",
13
+ info: "blue",
14
+ warning: "yellow",
15
+ success: "green"
16
+ };
11
17
  function StatusBadge({ status, children, ...props }) {
12
18
  return /* @__PURE__ */ jsx(Badge, { color: statusColorMap[status], variant: "light", ...props, children });
13
19
  }
20
+ function LabelTag({ tone = "neutral", label, ...props }) {
21
+ return /* @__PURE__ */ jsx(Badge, { color: labelTagColorMap[tone], variant: "outline", ...props, children: label });
22
+ }
23
+ function CountBadge({ value, cap = 99, srLabel, ...props }) {
24
+ const normalizedValue = Number.isFinite(value) ? Math.max(0, Math.floor(value)) : 0;
25
+ const normalizedCap = Math.max(1, Math.floor(cap));
26
+ const displayValue = normalizedValue > normalizedCap ? `${normalizedCap}+` : String(normalizedValue);
27
+ return /* @__PURE__ */ jsx(Badge, { color: "violet", variant: "filled", "aria-label": srLabel, ...props, children: displayValue });
28
+ }
14
29
 
15
30
  // src/EmptyState.tsx
16
31
  import { Stack, Text, Title, Box } from "@mantine/core";
@@ -631,6 +646,22 @@ function FormField({ label, description, error, children }) {
631
646
  ] }) });
632
647
  }
633
648
 
649
+ // src/CardContracts.ts
650
+ var gdsCardSizePaddingMap = {
651
+ xs: "xs",
652
+ sm: "sm",
653
+ md: "md",
654
+ lg: "lg",
655
+ xl: "xl"
656
+ };
657
+ var gdsCardTitleOrderMap = {
658
+ xs: 6,
659
+ sm: 5,
660
+ md: 4,
661
+ lg: 4,
662
+ xl: 3
663
+ };
664
+
634
665
  // src/ListingCard.tsx
635
666
  import { ActionIcon as ActionIcon2, AspectRatio, Badge as Badge4, Card, Group as Group6, Stack as Stack8, Text as Text7, ThemeIcon, Title as Title5 } from "@mantine/core";
636
667
  import { jsx as jsx10, jsxs as jsxs8 } from "react/jsx-runtime";
@@ -701,17 +732,27 @@ function ListingCard({
701
732
  primaryAction,
702
733
  saveAction,
703
734
  shareAction,
704
- compact = false
735
+ compact = false,
736
+ size = "md",
737
+ interactiveMode = "none",
738
+ revealContent,
739
+ onSurfaceActivate,
740
+ defaultFlipped = false
705
741
  }) {
742
+ const cardPadding = compact ? "md" : gdsCardSizePaddingMap[size];
706
743
  const titleContent = href && typeof title === "string" ? /* @__PURE__ */ jsx10(Text7, { component: "a", href, inherit: true, td: "none", children: title }) : title;
707
- return /* @__PURE__ */ jsx10(Card, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ jsxs8(Stack8, { gap: compact ? "sm" : "md", children: [
744
+ const interactiveProps = interactiveMode === "surface-link" && href ? { component: "a", href } : interactiveMode === "surface-button" ? { component: "button", type: "button", onClick: onSurfaceActivate } : {};
745
+ if (interactiveMode === "flip" && defaultFlipped && revealContent) {
746
+ return /* @__PURE__ */ jsx10(Card, { withBorder: true, radius: "lg", padding: cardPadding, children: /* @__PURE__ */ jsx10(Stack8, { gap: "sm", children: revealContent }) });
747
+ }
748
+ return /* @__PURE__ */ jsx10(Card, { withBorder: true, radius: "lg", padding: cardPadding, ...interactiveProps, children: /* @__PURE__ */ jsxs8(Stack8, { gap: compact ? "sm" : "md", children: [
708
749
  image ?? /* @__PURE__ */ jsx10(ListingImageFallback, { mediaRatio }),
709
750
  featured || sponsoredDisclosure ? /* @__PURE__ */ jsxs8(Group6, { justify: "space-between", gap: "sm", wrap: "wrap", children: [
710
751
  featured ? /* @__PURE__ */ jsx10(Badge4, { variant: "light", color: "violet", children: "Featured" }) : /* @__PURE__ */ jsx10("span", {}),
711
752
  sponsoredDisclosure ? /* @__PURE__ */ jsx10(Text7, { size: "xs", c: "dimmed", children: sponsoredDisclosure }) : null
712
753
  ] }) : null,
713
754
  /* @__PURE__ */ jsxs8(Stack8, { gap: 4, children: [
714
- /* @__PURE__ */ jsx10(Title5, { order: compact ? 5 : 4, lineClamp: 2, children: titleContent }),
755
+ /* @__PURE__ */ jsx10(Title5, { order: compact ? 5 : gdsCardTitleOrderMap[size], lineClamp: 2, children: titleContent }),
715
756
  description ? /* @__PURE__ */ jsx10(Text7, { size: "sm", c: "dimmed", lineClamp: compact ? 2 : 3, children: description }) : null
716
757
  ] }),
717
758
  metadata.length ? /* @__PURE__ */ jsx10(Stack8, { gap: "xs", children: metadata.map((item) => /* @__PURE__ */ jsxs8(Group6, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "nowrap", children: [
@@ -726,7 +767,8 @@ function ListingCard({
726
767
  /* @__PURE__ */ jsxs8(Group6, { gap: "xs", wrap: "nowrap", justify: "flex-end", style: { marginInlineStart: "auto" }, children: [
727
768
  saveAction ? /* @__PURE__ */ jsx10(ListingAffordance, { affordance: saveAction }) : null,
728
769
  shareAction ? /* @__PURE__ */ jsx10(ListingAffordance, { affordance: shareAction }) : null,
729
- primaryAction
770
+ primaryAction,
771
+ interactiveMode === "flip" && revealContent ? /* @__PURE__ */ jsx10(Text7, { size: "xs", c: "dimmed", children: "Flip mode supports reveal surfaces." }) : null
730
772
  ] })
731
773
  ] })
732
774
  ] }) });
@@ -1028,16 +1070,17 @@ function ProductCard({
1028
1070
  metadata = [],
1029
1071
  primaryAction,
1030
1072
  secondaryActions = [],
1031
- footer
1073
+ footer,
1074
+ size = "md"
1032
1075
  }) {
1033
1076
  const MoreIcon = GdsIcons.Menu;
1034
- return /* @__PURE__ */ jsx18(Card5, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs13(Stack13, { gap: "md", children: [
1077
+ return /* @__PURE__ */ jsx18(Card5, { withBorder: true, radius: "lg", padding: gdsCardSizePaddingMap[size], children: /* @__PURE__ */ jsxs13(Stack13, { gap: "md", children: [
1035
1078
  media,
1036
1079
  /* @__PURE__ */ jsxs13(Group10, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
1037
1080
  /* @__PURE__ */ jsxs13(Group10, { align: "flex-start", gap: "sm", wrap: "nowrap", children: [
1038
1081
  icon ? /* @__PURE__ */ jsx18(ThemeIcon4, { variant: "light", size: "xl", radius: "xl", "aria-hidden": true, children: icon }) : null,
1039
1082
  /* @__PURE__ */ jsxs13(Stack13, { gap: 4, children: [
1040
- /* @__PURE__ */ jsx18(Title10, { order: 4, children: title }),
1083
+ /* @__PURE__ */ jsx18(Title10, { order: gdsCardTitleOrderMap[size], children: title }),
1041
1084
  description ? /* @__PURE__ */ jsx18(Text12, { size: "sm", c: "dimmed", lineClamp: 3, children: description }) : null
1042
1085
  ] })
1043
1086
  ] }),
@@ -1121,8 +1164,11 @@ function PublicProductCard({
1121
1164
  secondaryAction,
1122
1165
  metadata = [],
1123
1166
  compact = false,
1167
+ size = "md",
1124
1168
  loading = false,
1125
- disabled = false
1169
+ disabled = false,
1170
+ interactiveMode = "none",
1171
+ onSurfaceActivate
1126
1172
  }) {
1127
1173
  if (loading) {
1128
1174
  return /* @__PURE__ */ jsx19(LoadingCard, { compact });
@@ -1138,11 +1184,12 @@ function PublicProductCard({
1138
1184
  const pickupHelper = helperKind === "pickup" ? helperText : pickupNote;
1139
1185
  const inventoryHelper = helperKind === "inventory" ? helperText : inventoryNote;
1140
1186
  const hasSupportingRegion = Boolean(price || supportingHelper || pickupHelper || inventoryHelper);
1141
- return /* @__PURE__ */ jsx19(Card6, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ jsxs14(Stack14, { gap: compact ? "sm" : "md", children: [
1187
+ const interactiveProps = interactiveMode === "surface-button" ? { component: "button", type: "button", onClick: onSurfaceActivate } : {};
1188
+ return /* @__PURE__ */ jsx19(Card6, { withBorder: true, radius: "lg", padding: compact ? "md" : gdsCardSizePaddingMap[size], ...interactiveProps, children: /* @__PURE__ */ jsxs14(Stack14, { gap: compact ? "sm" : "md", children: [
1142
1189
  image ?? /* @__PURE__ */ jsx19(ImageFallback, { compact }),
1143
1190
  /* @__PURE__ */ jsxs14(Group11, { justify: "space-between", align: "flex-start", wrap: "nowrap", gap: "sm", children: [
1144
1191
  /* @__PURE__ */ jsxs14(Stack14, { gap: 4, style: { minWidth: 0, flex: 1 }, children: [
1145
- /* @__PURE__ */ jsx19(Title11, { order: compact ? 5 : 4, lineClamp: 2, children: title }),
1192
+ /* @__PURE__ */ jsx19(Title11, { order: compact ? 5 : gdsCardTitleOrderMap[size], lineClamp: 2, children: title }),
1146
1193
  description ? /* @__PURE__ */ jsx19(Text13, { size: "sm", c: "dimmed", lineClamp: compact ? 2 : 3, children: description }) : null
1147
1194
  ] }),
1148
1195
  /* @__PURE__ */ jsx19(Badge9, { variant: "light", color: stateBadge.color, children: stateBadge.label })
@@ -1514,16 +1561,205 @@ function DetailProfileShell({
1514
1561
  ] }) });
1515
1562
  }
1516
1563
 
1564
+ // src/AsyncSurface.tsx
1565
+ import { Fragment as Fragment4, jsx as jsx25 } from "react/jsx-runtime";
1566
+ function getRetryAction(onRetry) {
1567
+ if (!onRetry) {
1568
+ return void 0;
1569
+ }
1570
+ return /* @__PURE__ */ jsx25("button", { type: "button", onClick: onRetry, children: "Retry" });
1571
+ }
1572
+ function renderStateBlock({
1573
+ variant,
1574
+ title,
1575
+ description,
1576
+ compact,
1577
+ presentation,
1578
+ minHeight,
1579
+ contentAlign,
1580
+ contentJustify,
1581
+ action
1582
+ }) {
1583
+ return /* @__PURE__ */ jsx25(
1584
+ StateBlock,
1585
+ {
1586
+ variant,
1587
+ title,
1588
+ description,
1589
+ action,
1590
+ compact,
1591
+ presentation,
1592
+ minHeight,
1593
+ contentAlign,
1594
+ contentJustify
1595
+ }
1596
+ );
1597
+ }
1598
+ function AsyncSurface({
1599
+ state,
1600
+ successContent,
1601
+ idleContent,
1602
+ loadingTitle = "Loading",
1603
+ loadingDescription = "This surface is still synchronizing.",
1604
+ emptyTitle = "No results",
1605
+ emptyDescription = "No data is available for this surface yet.",
1606
+ errorTitle = "Unable to load",
1607
+ errorDescription = "Something went wrong while preparing this surface.",
1608
+ refreshingTitle = "Refreshing",
1609
+ refreshingDescription = "The latest data is being fetched.",
1610
+ onRetry,
1611
+ retryAction,
1612
+ compact = false,
1613
+ presentation = "inline",
1614
+ minHeight,
1615
+ contentAlign,
1616
+ contentJustify
1617
+ }) {
1618
+ const fallbackRetryAction = retryAction ?? getRetryAction(onRetry);
1619
+ if (state === "success") {
1620
+ return /* @__PURE__ */ jsx25(Fragment4, { children: successContent });
1621
+ }
1622
+ if (state === "idle") {
1623
+ return /* @__PURE__ */ jsx25(Fragment4, { children: idleContent ?? successContent ?? null });
1624
+ }
1625
+ if (state === "loading") {
1626
+ return renderStateBlock({
1627
+ variant: "loading",
1628
+ title: loadingTitle,
1629
+ description: loadingDescription,
1630
+ compact,
1631
+ presentation,
1632
+ minHeight,
1633
+ contentAlign,
1634
+ contentJustify
1635
+ });
1636
+ }
1637
+ if (state === "empty") {
1638
+ return renderStateBlock({
1639
+ variant: "empty",
1640
+ title: emptyTitle,
1641
+ description: emptyDescription,
1642
+ compact,
1643
+ presentation,
1644
+ minHeight,
1645
+ contentAlign,
1646
+ contentJustify,
1647
+ action: fallbackRetryAction
1648
+ });
1649
+ }
1650
+ if (state === "error") {
1651
+ return renderStateBlock({
1652
+ variant: "error",
1653
+ title: errorTitle,
1654
+ description: errorDescription,
1655
+ compact,
1656
+ presentation,
1657
+ minHeight,
1658
+ contentAlign,
1659
+ contentJustify,
1660
+ action: fallbackRetryAction
1661
+ });
1662
+ }
1663
+ return renderStateBlock({
1664
+ variant: "info",
1665
+ title: refreshingTitle,
1666
+ description: refreshingDescription,
1667
+ compact,
1668
+ presentation,
1669
+ minHeight,
1670
+ contentAlign,
1671
+ contentJustify
1672
+ });
1673
+ }
1674
+
1675
+ // src/ListingPrimitives.tsx
1676
+ import { Badge as Badge13, Button as Button3, Group as Group16, Select, Stack as Stack20, Text as Text17 } from "@mantine/core";
1677
+ import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
1678
+ function ActiveFilterChips({
1679
+ filters,
1680
+ emptyLabel = "No active filters."
1681
+ }) {
1682
+ if (!filters.length) {
1683
+ return /* @__PURE__ */ jsx26(Text17, { size: "sm", c: "dimmed", children: emptyLabel });
1684
+ }
1685
+ return /* @__PURE__ */ jsx26(Group16, { gap: "xs", children: filters.map((filter) => /* @__PURE__ */ jsx26(
1686
+ Badge13,
1687
+ {
1688
+ variant: "light",
1689
+ rightSection: filter.onRemove ? "\xD7" : void 0,
1690
+ style: filter.onRemove ? { cursor: "pointer" } : void 0,
1691
+ onClick: filter.onRemove,
1692
+ children: filter.label
1693
+ },
1694
+ filter.id
1695
+ )) });
1696
+ }
1697
+ function ResultSummary({
1698
+ resultCount,
1699
+ noun = "results",
1700
+ description
1701
+ }) {
1702
+ return /* @__PURE__ */ jsxs20(Stack20, { gap: 2, children: [
1703
+ /* @__PURE__ */ jsxs20(Text17, { size: "sm", fw: 600, children: [
1704
+ resultCount,
1705
+ " ",
1706
+ noun
1707
+ ] }),
1708
+ description ? /* @__PURE__ */ jsx26(Text17, { size: "xs", c: "dimmed", children: description }) : null
1709
+ ] });
1710
+ }
1711
+ function SortMenu({
1712
+ value,
1713
+ options,
1714
+ onChange,
1715
+ label = "Sort"
1716
+ }) {
1717
+ return /* @__PURE__ */ jsx26(
1718
+ Select,
1719
+ {
1720
+ "aria-label": label,
1721
+ label,
1722
+ value,
1723
+ data: options,
1724
+ onChange: (next) => {
1725
+ if (next) {
1726
+ onChange?.(next);
1727
+ }
1728
+ },
1729
+ w: 220
1730
+ }
1731
+ );
1732
+ }
1733
+ function BulkActionsBar({
1734
+ selectedCount,
1735
+ actions,
1736
+ clearAction
1737
+ }) {
1738
+ if (selectedCount <= 0) {
1739
+ return null;
1740
+ }
1741
+ return /* @__PURE__ */ jsxs20(Group16, { justify: "space-between", align: "center", children: [
1742
+ /* @__PURE__ */ jsxs20(Text17, { size: "sm", fw: 600, children: [
1743
+ selectedCount,
1744
+ " selected"
1745
+ ] }),
1746
+ /* @__PURE__ */ jsxs20(Group16, { gap: "xs", children: [
1747
+ actions,
1748
+ clearAction ?? /* @__PURE__ */ jsx26(Button3, { variant: "subtle", size: "xs", children: "Clear selection" })
1749
+ ] })
1750
+ ] });
1751
+ }
1752
+
1517
1753
  // src/PublicNav.tsx
1518
- import { Anchor as Anchor4, Group as Group16 } from "@mantine/core";
1519
- import { jsx as jsx25 } from "react/jsx-runtime";
1754
+ import { Anchor as Anchor4, Group as Group17 } from "@mantine/core";
1755
+ import { jsx as jsx27 } from "react/jsx-runtime";
1520
1756
  function PublicNav({ items, activeId, renderLink }) {
1521
- return /* @__PURE__ */ jsx25(Group16, { component: "nav", "aria-label": "Primary", gap: "lg", wrap: "nowrap", children: items.map((item) => {
1757
+ return /* @__PURE__ */ jsx27(Group17, { component: "nav", "aria-label": "Primary", gap: "lg", wrap: "nowrap", children: items.map((item) => {
1522
1758
  const active = item.id === activeId;
1523
1759
  if (renderLink) {
1524
- return /* @__PURE__ */ jsx25("span", { children: renderLink(item, active) }, item.id);
1760
+ return /* @__PURE__ */ jsx27("span", { children: renderLink(item, active) }, item.id);
1525
1761
  }
1526
- return /* @__PURE__ */ jsx25(
1762
+ return /* @__PURE__ */ jsx27(
1527
1763
  Anchor4,
1528
1764
  {
1529
1765
  href: item.href,
@@ -1541,15 +1777,15 @@ function PublicNav({ items, activeId, renderLink }) {
1541
1777
  }
1542
1778
 
1543
1779
  // src/PublicShell.tsx
1544
- import { AppShell, Box as Box8, Burger, Container, Group as Group17, Stack as Stack20, Text as Text17 } from "@mantine/core";
1545
- import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
1780
+ import { AppShell, Box as Box8, Burger, Container, Group as Group18, Stack as Stack21, Text as Text18 } from "@mantine/core";
1781
+ import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
1546
1782
  function InlineMobileNavigation({
1547
1783
  mobileNavigation,
1548
1784
  className,
1549
1785
  mode
1550
1786
  }) {
1551
- return /* @__PURE__ */ jsxs20(Box8, { component: "details", hiddenFrom: "sm", className, children: [
1552
- /* @__PURE__ */ jsxs20(
1787
+ return /* @__PURE__ */ jsxs21(Box8, { component: "details", hiddenFrom: "sm", className, children: [
1788
+ /* @__PURE__ */ jsxs21(
1553
1789
  Box8,
1554
1790
  {
1555
1791
  component: "summary",
@@ -1562,12 +1798,12 @@ function InlineMobileNavigation({
1562
1798
  gap: "0.5rem"
1563
1799
  },
1564
1800
  children: [
1565
- /* @__PURE__ */ jsx26(Burger, { opened: false, "aria-hidden": true }),
1566
- /* @__PURE__ */ jsx26(Text17, { size: "sm", fw: 600, children: "Menu" })
1801
+ /* @__PURE__ */ jsx28(Burger, { opened: false, "aria-hidden": true }),
1802
+ /* @__PURE__ */ jsx28(Text18, { size: "sm", fw: 600, children: "Menu" })
1567
1803
  ]
1568
1804
  }
1569
1805
  ),
1570
- /* @__PURE__ */ jsx26(
1806
+ /* @__PURE__ */ jsx28(
1571
1807
  Box8,
1572
1808
  {
1573
1809
  mt: "sm",
@@ -1577,7 +1813,7 @@ function InlineMobileNavigation({
1577
1813
  border: "1px solid var(--mantine-color-default-border)",
1578
1814
  background: mode === "drawer" ? "light-dark(var(--mantine-color-white), color-mix(in srgb, var(--mantine-color-dark-7) 92%, black))" : "var(--mantine-color-body)"
1579
1815
  },
1580
- children: /* @__PURE__ */ jsx26(Stack20, { gap: "sm", children: mobileNavigation })
1816
+ children: /* @__PURE__ */ jsx28(Stack21, { gap: "sm", children: mobileNavigation })
1581
1817
  }
1582
1818
  )
1583
1819
  ] });
@@ -1598,13 +1834,13 @@ function PublicShell({
1598
1834
  mobileNavigationMode = "sheet",
1599
1835
  classNames
1600
1836
  }) {
1601
- const resolvedNavigation = navigation ?? (navItems ? /* @__PURE__ */ jsx26(PublicNav, { items: navItems, activeId: activeNavId }) : null);
1837
+ const resolvedNavigation = navigation ?? (navItems ? /* @__PURE__ */ jsx28(PublicNav, { items: navItems, activeId: activeNavId }) : null);
1602
1838
  const containerSize = maxContentWidth ?? (compact ? "md" : "lg");
1603
1839
  const headerHeight = headerVariant === "compact" ? 64 : headerVariant === "branded-quiet" ? 88 : 72;
1604
1840
  const mainPadding = headerVariant === "compact" ? "lg" : "xl";
1605
1841
  const usesInlineMobileNavigation = Boolean(mobileNavigation) && mobileNavigationMode !== "sheet";
1606
1842
  const usesSheetMobileNavigation = Boolean(mobileNavigation) && mobileNavigationMode === "sheet";
1607
- return /* @__PURE__ */ jsxs20(
1843
+ return /* @__PURE__ */ jsxs21(
1608
1844
  AppShell,
1609
1845
  {
1610
1846
  className: classNames?.root,
@@ -1612,16 +1848,16 @@ function PublicShell({
1612
1848
  footer: usesSheetMobileNavigation ? { height: 68 } : void 0,
1613
1849
  padding: 0,
1614
1850
  children: [
1615
- /* @__PURE__ */ jsx26(AppShell.Header, { withBorder: headerBordered, className: classNames?.header, "data-header-variant": headerVariant, children: /* @__PURE__ */ jsx26(Container, { size: containerSize, h: "100%", py: headerVariant === "branded-quiet" ? "sm" : 0, children: /* @__PURE__ */ jsxs20(
1616
- Group17,
1851
+ /* @__PURE__ */ jsx28(AppShell.Header, { withBorder: headerBordered, className: classNames?.header, "data-header-variant": headerVariant, children: /* @__PURE__ */ jsx28(Container, { size: containerSize, h: "100%", py: headerVariant === "branded-quiet" ? "sm" : 0, children: /* @__PURE__ */ jsxs21(
1852
+ Group18,
1617
1853
  {
1618
1854
  h: "100%",
1619
1855
  justify: "space-between",
1620
1856
  wrap: "nowrap",
1621
1857
  gap: headerVariant === "compact" ? "sm" : "lg",
1622
1858
  children: [
1623
- /* @__PURE__ */ jsxs20(Group17, { wrap: "nowrap", gap: headerVariant === "compact" ? "xs" : "sm", className: classNames?.brand, children: [
1624
- usesInlineMobileNavigation ? /* @__PURE__ */ jsx26(
1859
+ /* @__PURE__ */ jsxs21(Group18, { wrap: "nowrap", gap: headerVariant === "compact" ? "xs" : "sm", className: classNames?.brand, children: [
1860
+ usesInlineMobileNavigation ? /* @__PURE__ */ jsx28(
1625
1861
  InlineMobileNavigation,
1626
1862
  {
1627
1863
  mobileNavigation,
@@ -1629,17 +1865,17 @@ function PublicShell({
1629
1865
  mode: mobileNavigationMode
1630
1866
  }
1631
1867
  ) : null,
1632
- /* @__PURE__ */ jsx26(Box8, { children: brand })
1868
+ /* @__PURE__ */ jsx28(Box8, { children: brand })
1633
1869
  ] }),
1634
- /* @__PURE__ */ jsx26(Group17, { visibleFrom: "sm", gap: headerVariant === "compact" ? "md" : "lg", className: classNames?.navigation, children: resolvedNavigation }),
1635
- /* @__PURE__ */ jsx26(Group17, { gap: "sm", className: classNames?.actions, children: actions })
1870
+ /* @__PURE__ */ jsx28(Group18, { visibleFrom: "sm", gap: headerVariant === "compact" ? "md" : "lg", className: classNames?.navigation, children: resolvedNavigation }),
1871
+ /* @__PURE__ */ jsx28(Group18, { gap: "sm", className: classNames?.actions, children: actions })
1636
1872
  ]
1637
1873
  }
1638
1874
  ) }) }),
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,
1640
- /* @__PURE__ */ jsxs20(AppShell.Main, { children: [
1641
- /* @__PURE__ */ jsx26(Container, { size: containerSize, py: mainPadding, className: classNames?.content, children: /* @__PURE__ */ jsx26(Stack20, { gap: "xl", children }) }),
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
1875
+ usesSheetMobileNavigation ? /* @__PURE__ */ jsx28(AppShell.Footer, { withBorder: true, children: /* @__PURE__ */ jsx28(Container, { size: containerSize, h: "100%", children: /* @__PURE__ */ jsx28(Group18, { h: "100%", justify: "space-around", wrap: "nowrap", children: mobileNavigation }) }) }) : null,
1876
+ /* @__PURE__ */ jsxs21(AppShell.Main, { children: [
1877
+ /* @__PURE__ */ jsx28(Container, { size: containerSize, py: mainPadding, className: classNames?.content, children: /* @__PURE__ */ jsx28(Stack21, { gap: "xl", children }) }),
1878
+ footer ? /* @__PURE__ */ jsx28(Box8, { component: typeof footer === "string" ? "footer" : "div", py: "xl", children: /* @__PURE__ */ jsx28(Container, { size: containerSize, children: typeof footer === "string" ? /* @__PURE__ */ jsx28(Text18, { size: "sm", c: "dimmed", children: footer }) : footer }) }) : null
1643
1879
  ] })
1644
1880
  ]
1645
1881
  }
@@ -1647,18 +1883,18 @@ function PublicShell({
1647
1883
  }
1648
1884
 
1649
1885
  // src/PublicSiteFooter.tsx
1650
- import { Group as Group18, Stack as Stack21, Text as Text18 } from "@mantine/core";
1651
- import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
1886
+ import { Group as Group19, Stack as Stack22, Text as Text19 } from "@mantine/core";
1887
+ import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
1652
1888
  function PublicSiteFooter({ children, meta }) {
1653
- return /* @__PURE__ */ jsxs21(Stack21, { component: "footer", gap: "xs", children: [
1654
- children ? /* @__PURE__ */ jsx27(Text18, { size: "sm", children }) : null,
1655
- meta ? /* @__PURE__ */ jsx27(Group18, { gap: "sm", children: /* @__PURE__ */ jsx27(Text18, { size: "xs", c: "dimmed", children: meta }) }) : null
1889
+ return /* @__PURE__ */ jsxs22(Stack22, { component: "footer", gap: "xs", children: [
1890
+ children ? /* @__PURE__ */ jsx29(Text19, { size: "sm", children }) : null,
1891
+ meta ? /* @__PURE__ */ jsx29(Group19, { gap: "sm", children: /* @__PURE__ */ jsx29(Text19, { size: "xs", c: "dimmed", children: meta }) }) : null
1656
1892
  ] });
1657
1893
  }
1658
1894
 
1659
1895
  // src/PublicBrandFooter.tsx
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";
1661
- import { Fragment as Fragment4, jsx as jsx28, jsxs as jsxs22 } from "react/jsx-runtime";
1896
+ import { Box as Box9, Divider as Divider3, Grid, Group as Group20, Paper as Paper6, Stack as Stack23, Text as Text20, Title as Title15 } from "@mantine/core";
1897
+ import { Fragment as Fragment5, jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
1662
1898
  function PublicBrandFooter({
1663
1899
  media,
1664
1900
  brandTitle,
@@ -1673,7 +1909,7 @@ function PublicBrandFooter({
1673
1909
  const mediaSpan = layoutVariant === "immersive-media" ? 5 : 4;
1674
1910
  const primarySpan = media ? layoutVariant === "balanced-quote" ? 4 : 4 : secondary ? 6 : 12;
1675
1911
  const secondarySpan = media ? Math.max(3, 12 - mediaSpan - primarySpan) : Math.max(4, 12 - primarySpan);
1676
- return /* @__PURE__ */ jsx28(
1912
+ return /* @__PURE__ */ jsx30(
1677
1913
  Paper6,
1678
1914
  {
1679
1915
  component: "footer",
@@ -1682,19 +1918,19 @@ function PublicBrandFooter({
1682
1918
  p: compact ? "lg" : "xl",
1683
1919
  className: classNames?.root,
1684
1920
  "data-layout-variant": layoutVariant,
1685
- children: /* @__PURE__ */ jsxs22(Stack22, { gap: "lg", children: [
1686
- /* @__PURE__ */ jsxs22(Grid, { gutter: compact ? "lg" : "xl", align: "flex-start", children: [
1687
- media ? /* @__PURE__ */ jsx28(Grid.Col, { span: { base: 12, md: mediaSpan }, children: /* @__PURE__ */ jsx28(Box9, { className: classNames?.media, children: media }) }) : null,
1688
- /* @__PURE__ */ jsx28(Grid.Col, { span: { base: 12, md: primarySpan }, children: /* @__PURE__ */ jsxs22(Stack22, { gap: compact ? "xs" : "sm", className: classNames?.primary, children: [
1689
- brandTitle ? /* @__PURE__ */ jsx28(Title15, { order: 4, children: brandTitle }) : null,
1690
- description ? /* @__PURE__ */ jsx28(Text19, { c: "dimmed", children: description }) : null,
1691
- actions ? /* @__PURE__ */ jsx28(Box9, { children: actions }) : null
1921
+ children: /* @__PURE__ */ jsxs23(Stack23, { gap: "lg", children: [
1922
+ /* @__PURE__ */ jsxs23(Grid, { gutter: compact ? "lg" : "xl", align: "flex-start", children: [
1923
+ media ? /* @__PURE__ */ jsx30(Grid.Col, { span: { base: 12, md: mediaSpan }, children: /* @__PURE__ */ jsx30(Box9, { className: classNames?.media, children: media }) }) : null,
1924
+ /* @__PURE__ */ jsx30(Grid.Col, { span: { base: 12, md: primarySpan }, children: /* @__PURE__ */ jsxs23(Stack23, { gap: compact ? "xs" : "sm", className: classNames?.primary, children: [
1925
+ brandTitle ? /* @__PURE__ */ jsx30(Title15, { order: 4, children: brandTitle }) : null,
1926
+ description ? /* @__PURE__ */ jsx30(Text20, { c: "dimmed", children: description }) : null,
1927
+ actions ? /* @__PURE__ */ jsx30(Box9, { children: actions }) : null
1692
1928
  ] }) }),
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
1929
+ secondary ? /* @__PURE__ */ jsx30(Grid.Col, { span: { base: 12, md: secondarySpan }, children: /* @__PURE__ */ jsx30(Stack23, { gap: compact ? "xs" : "sm", className: classNames?.secondary, children: secondary }) }) : null
1694
1930
  ] }),
1695
- legal ? /* @__PURE__ */ jsxs22(Fragment4, { children: [
1696
- /* @__PURE__ */ jsx28(Divider3, {}),
1697
- /* @__PURE__ */ jsx28(Group19, { justify: "space-between", gap: "sm", wrap: "wrap", className: classNames?.legal, children: typeof legal === "string" ? /* @__PURE__ */ jsx28(Text19, { size: "sm", c: "dimmed", children: legal }) : legal })
1931
+ legal ? /* @__PURE__ */ jsxs23(Fragment5, { children: [
1932
+ /* @__PURE__ */ jsx30(Divider3, {}),
1933
+ /* @__PURE__ */ jsx30(Group20, { justify: "space-between", gap: "sm", wrap: "wrap", className: classNames?.legal, children: typeof legal === "string" ? /* @__PURE__ */ jsx30(Text20, { size: "sm", c: "dimmed", children: legal }) : legal })
1698
1934
  ] }) : null
1699
1935
  ] })
1700
1936
  }
@@ -1702,41 +1938,51 @@ function PublicBrandFooter({
1702
1938
  }
1703
1939
 
1704
1940
  // src/AuthShell.tsx
1705
- import { 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";
1706
- import { jsx as jsx29, jsxs as jsxs23 } from "react/jsx-runtime";
1941
+ import { Alert, Badge as Badge14, Box as Box10, Card as Card8, Container as Container2, Divider as Divider4, Group as Group21, Stack as Stack24, Text as Text21, Title as Title16 } from "@mantine/core";
1942
+ import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
1707
1943
  function AuthShell({
1708
1944
  title,
1709
1945
  description,
1946
+ intent = "sign-in",
1710
1947
  brand,
1711
1948
  headerActions,
1712
1949
  footer,
1713
1950
  helper,
1951
+ error,
1952
+ guestAction,
1953
+ supportAction,
1714
1954
  socialAuth,
1715
1955
  dividerLabel = "Or continue with your account",
1716
1956
  children
1717
1957
  }) {
1718
- return /* @__PURE__ */ jsx29(Box10, { py: { base: "xl", md: "4rem" }, children: /* @__PURE__ */ jsx29(Container2, { size: "xs", children: /* @__PURE__ */ jsxs23(Stack23, { gap: "xl", children: [
1719
- brand || headerActions ? /* @__PURE__ */ jsxs23(Group20, { justify: brand && headerActions ? "space-between" : "center", align: "center", children: [
1720
- brand ? /* @__PURE__ */ jsx29(Box10, { children: brand }) : /* @__PURE__ */ jsx29(Box10, {}),
1721
- headerActions ? /* @__PURE__ */ jsx29(Group20, { gap: "sm", children: headerActions }) : null
1958
+ return /* @__PURE__ */ jsx31(Box10, { py: { base: "xl", md: "4rem" }, children: /* @__PURE__ */ jsx31(Container2, { size: "xs", children: /* @__PURE__ */ jsxs24(Stack24, { gap: "xl", children: [
1959
+ brand || headerActions ? /* @__PURE__ */ jsxs24(Group21, { justify: brand && headerActions ? "space-between" : "center", align: "center", children: [
1960
+ brand ? /* @__PURE__ */ jsx31(Box10, { children: brand }) : /* @__PURE__ */ jsx31(Box10, {}),
1961
+ headerActions ? /* @__PURE__ */ jsx31(Group21, { gap: "sm", children: headerActions }) : null
1722
1962
  ] }) : null,
1723
- /* @__PURE__ */ jsx29(Card8, { withBorder: true, radius: "lg", padding: "xl", children: /* @__PURE__ */ jsxs23(Stack23, { gap: "lg", children: [
1724
- /* @__PURE__ */ jsxs23(Stack23, { gap: "xs", ta: "center", children: [
1725
- /* @__PURE__ */ jsx29(Title16, { order: 2, children: title }),
1726
- description ? /* @__PURE__ */ jsx29(Text20, { c: "dimmed", size: "sm", children: description }) : null
1963
+ /* @__PURE__ */ jsx31(Card8, { withBorder: true, radius: "lg", padding: "xl", children: /* @__PURE__ */ jsxs24(Stack24, { gap: "lg", children: [
1964
+ /* @__PURE__ */ jsxs24(Stack24, { gap: "xs", ta: "center", children: [
1965
+ /* @__PURE__ */ jsx31(Group21, { justify: "center", children: /* @__PURE__ */ jsx31(Badge14, { variant: "light", color: intent === "account-linking" ? "blue" : intent === "guest-entry" ? "gray" : "teal", children: intent.replace("-", " ") }) }),
1966
+ /* @__PURE__ */ jsx31(Title16, { order: 2, children: title }),
1967
+ description ? /* @__PURE__ */ jsx31(Text21, { c: "dimmed", size: "sm", children: description }) : null
1727
1968
  ] }),
1728
- socialAuth ? /* @__PURE__ */ jsx29(Box10, { children: socialAuth }) : null,
1729
- socialAuth ? /* @__PURE__ */ jsx29(Divider4, { label: dividerLabel, labelPosition: "center" }) : null,
1969
+ error ? /* @__PURE__ */ jsx31(Alert, { color: "red", variant: "light", role: "alert", children: error }) : null,
1970
+ socialAuth ? /* @__PURE__ */ jsx31(Box10, { children: socialAuth }) : null,
1971
+ socialAuth ? /* @__PURE__ */ jsx31(Divider4, { label: dividerLabel, labelPosition: "center" }) : null,
1730
1972
  children,
1731
- helper ? /* @__PURE__ */ jsx29(Text20, { size: "sm", c: "dimmed", ta: "center", children: helper }) : null
1973
+ guestAction || supportAction ? /* @__PURE__ */ jsxs24(Group21, { justify: "center", gap: "sm", children: [
1974
+ guestAction,
1975
+ supportAction
1976
+ ] }) : null,
1977
+ helper ? /* @__PURE__ */ jsx31(Text21, { size: "sm", c: "dimmed", ta: "center", children: helper }) : null
1732
1978
  ] }) }),
1733
- footer ? /* @__PURE__ */ jsx29(Text20, { size: "sm", c: "dimmed", ta: "center", children: footer }) : null
1979
+ footer ? /* @__PURE__ */ jsx31(Text21, { size: "sm", c: "dimmed", ta: "center", children: footer }) : null
1734
1980
  ] }) }) });
1735
1981
  }
1736
1982
 
1737
1983
  // src/ProviderIdentityButtons.tsx
1738
- import { Button as Button3, SimpleGrid as SimpleGrid5, Stack as Stack24, Text as Text21, ThemeIcon as ThemeIcon7 } from "@mantine/core";
1739
- import { jsx as jsx30, jsxs as jsxs24 } from "react/jsx-runtime";
1984
+ import { Button as Button4, SimpleGrid as SimpleGrid5, Stack as Stack25, Text as Text22, ThemeIcon as ThemeIcon7 } from "@mantine/core";
1985
+ import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
1740
1986
  var PROVIDER_IDENTITY_REGISTRY = {
1741
1987
  google: {
1742
1988
  providerLabel: "Google",
@@ -1826,9 +2072,23 @@ function mapVariant(variant = "neutral") {
1826
2072
  function getProviderIdentityLabel(provider, fallbackOverride) {
1827
2073
  return resolveProviderLabel(provider, fallbackOverride);
1828
2074
  }
2075
+ function getSupportedProviderIdentityIds() {
2076
+ return Object.keys(PROVIDER_IDENTITY_REGISTRY);
2077
+ }
2078
+ function getProviderIdentityPolicy(provider) {
2079
+ const meta = getProviderIdentityMeta(provider);
2080
+ return {
2081
+ id: meta.id,
2082
+ supported: meta.supported,
2083
+ providerLabel: meta.providerLabel,
2084
+ colorAuthority: meta.supported ? "provider" : "gds-neutral",
2085
+ minTouchTargetPx: 44,
2086
+ allowedVariants: ["solid", "outline", "neutral"]
2087
+ };
2088
+ }
1829
2089
  function ProviderIdentityMark({ provider }) {
1830
2090
  const meta = getProviderIdentityMeta(provider);
1831
- return /* @__PURE__ */ jsx30(
2091
+ return /* @__PURE__ */ jsx32(
1832
2092
  ThemeIcon7,
1833
2093
  {
1834
2094
  variant: "light",
@@ -1836,7 +2096,7 @@ function ProviderIdentityMark({ provider }) {
1836
2096
  radius: "xl",
1837
2097
  size: "md",
1838
2098
  "aria-hidden": "true",
1839
- children: /* @__PURE__ */ jsx30(Text21, { size: "xs", fw: 700, c: "inherit", children: meta.markLabel })
2099
+ children: /* @__PURE__ */ jsx32(Text22, { size: "xs", fw: 700, c: "inherit", children: meta.markLabel })
1840
2100
  }
1841
2101
  );
1842
2102
  }
@@ -1844,10 +2104,13 @@ function ProviderIdentityButton({
1844
2104
  provider,
1845
2105
  label,
1846
2106
  description,
2107
+ policyNote,
2108
+ error,
1847
2109
  href,
1848
2110
  onClick,
1849
2111
  disabled,
1850
2112
  loading,
2113
+ tenantDisabledReason,
1851
2114
  fullWidth = true,
1852
2115
  size = "md",
1853
2116
  variant = "neutral",
@@ -1857,14 +2120,15 @@ function ProviderIdentityButton({
1857
2120
  }) {
1858
2121
  const meta = getProviderIdentityMeta(provider);
1859
2122
  const buttonLabel = resolveProviderLabel(provider, label);
2123
+ const resolvedDisabled = disabled || Boolean(tenantDisabledReason);
1860
2124
  const buttonProps = href ? {
1861
2125
  component: "a",
1862
2126
  href
1863
2127
  } : {
1864
2128
  onClick
1865
2129
  };
1866
- return /* @__PURE__ */ jsx30(
1867
- Button3,
2130
+ return /* @__PURE__ */ jsx32(
2131
+ Button4,
1868
2132
  {
1869
2133
  variant: mapVariant(variant),
1870
2134
  color: variant === "solid" ? meta.brandColor : void 0,
@@ -1873,14 +2137,17 @@ function ProviderIdentityButton({
1873
2137
  size,
1874
2138
  "aria-label": ariaLabel ?? (typeof buttonLabel === "string" ? buttonLabel : void 0),
1875
2139
  "aria-describedby": describedBy,
1876
- leftSection: /* @__PURE__ */ jsx30(ProviderIdentityMark, { provider }),
1877
- disabled,
2140
+ leftSection: /* @__PURE__ */ jsx32(ProviderIdentityMark, { provider }),
2141
+ disabled: resolvedDisabled,
1878
2142
  loading,
1879
2143
  styles: { root: { minHeight: minTouchTargetPx } },
1880
2144
  ...buttonProps,
1881
- children: /* @__PURE__ */ jsxs24(Stack24, { gap: 0, align: "flex-start", children: [
1882
- /* @__PURE__ */ jsx30(Text21, { inherit: true, children: buttonLabel }),
1883
- description ? /* @__PURE__ */ jsx30(Text21, { size: "xs", c: "dimmed", lh: 1.2, children: description }) : null
2145
+ children: /* @__PURE__ */ jsxs25(Stack25, { gap: 0, align: "flex-start", children: [
2146
+ /* @__PURE__ */ jsx32(Text22, { inherit: true, children: buttonLabel }),
2147
+ description ? /* @__PURE__ */ jsx32(Text22, { size: "xs", c: "dimmed", lh: 1.2, children: description }) : null,
2148
+ policyNote ? /* @__PURE__ */ jsx32(Text22, { size: "xs", c: "dimmed", lh: 1.2, children: policyNote }) : null,
2149
+ tenantDisabledReason ? /* @__PURE__ */ jsx32(Text22, { size: "xs", c: "orange.7", lh: 1.2, children: tenantDisabledReason }) : null,
2150
+ error ? /* @__PURE__ */ jsx32(Text22, { size: "xs", c: "red.7", lh: 1.2, role: "alert", children: error }) : null
1884
2151
  ] })
1885
2152
  }
1886
2153
  );
@@ -1891,17 +2158,17 @@ function ProviderIdentityButtonGroup({ providers, layout = "stack" }) {
1891
2158
  }
1892
2159
  const content = providers.map((entry, index) => {
1893
2160
  const key = `${normalizeProviderId(String(entry.provider)) || "provider"}-${index}`;
1894
- return /* @__PURE__ */ jsx30(ProviderIdentityButton, { ...entry }, key);
2161
+ return /* @__PURE__ */ jsx32(ProviderIdentityButton, { ...entry }, key);
1895
2162
  });
1896
2163
  if (layout === "grid") {
1897
- return /* @__PURE__ */ jsx30(SimpleGrid5, { cols: { base: 1, sm: 2 }, spacing: "sm", children: content });
2164
+ return /* @__PURE__ */ jsx32(SimpleGrid5, { cols: { base: 1, sm: 2 }, spacing: "sm", children: content });
1898
2165
  }
1899
- return /* @__PURE__ */ jsx30(Stack24, { gap: "sm", children: content });
2166
+ return /* @__PURE__ */ jsx32(Stack25, { gap: "sm", children: content });
1900
2167
  }
1901
2168
 
1902
2169
  // src/SocialAuthButtons.tsx
1903
- import { Divider as Divider5, Group as Group21, Stack as Stack25, Text as Text22 } from "@mantine/core";
1904
- import { jsx as jsx31, jsxs as jsxs25 } from "react/jsx-runtime";
2170
+ import { Divider as Divider5, Group as Group22, Stack as Stack26, Text as Text23 } from "@mantine/core";
2171
+ import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
1905
2172
  function SocialAuthButtons({
1906
2173
  providers,
1907
2174
  title = "Continue with a trusted provider",
@@ -1916,60 +2183,63 @@ function SocialAuthButtons({
1916
2183
  provider: provider.id,
1917
2184
  label: provider.label,
1918
2185
  description: provider.description,
2186
+ policyNote: provider.policyNote,
2187
+ error: provider.error,
1919
2188
  href: provider.href,
1920
2189
  onClick: provider.onClick,
1921
2190
  disabled: provider.disabled,
1922
2191
  loading: provider.loading,
2192
+ tenantDisabledReason: provider.tenantDisabledReason,
1923
2193
  size: provider.size ?? (compact ? "sm" : "md"),
1924
2194
  variant: provider.variant
1925
2195
  }));
1926
- return /* @__PURE__ */ jsxs25(Stack25, { gap: "md", children: [
1927
- /* @__PURE__ */ jsxs25(Stack25, { gap: 4, ta: "center", children: [
1928
- /* @__PURE__ */ jsxs25(Group21, { justify: "center", gap: "xs", children: [
1929
- /* @__PURE__ */ jsx31(GdsIcons.Login, { size: "1rem" }),
1930
- /* @__PURE__ */ jsx31(Text22, { fw: 600, children: title })
2196
+ return /* @__PURE__ */ jsxs26(Stack26, { gap: "md", children: [
2197
+ /* @__PURE__ */ jsxs26(Stack26, { gap: 4, ta: "center", children: [
2198
+ /* @__PURE__ */ jsxs26(Group22, { justify: "center", gap: "xs", children: [
2199
+ /* @__PURE__ */ jsx33(GdsIcons.Login, { size: "1rem" }),
2200
+ /* @__PURE__ */ jsx33(Text23, { fw: 600, children: title })
1931
2201
  ] }),
1932
- description ? /* @__PURE__ */ jsx31(Text22, { size: "sm", c: "dimmed", children: description }) : null
2202
+ description ? /* @__PURE__ */ jsx33(Text23, { size: "sm", c: "dimmed", children: description }) : null
1933
2203
  ] }),
1934
- /* @__PURE__ */ jsx31(Divider5, {}),
1935
- /* @__PURE__ */ jsx31(ProviderIdentityButtonGroup, { providers: buttons, layout })
2204
+ /* @__PURE__ */ jsx33(Divider5, {}),
2205
+ /* @__PURE__ */ jsx33(ProviderIdentityButtonGroup, { providers: buttons, layout })
1936
2206
  ] });
1937
2207
  }
1938
2208
 
1939
2209
  // src/ArticleShell.tsx
1940
- import { Container as Container3, Group as Group22, Stack as Stack26, Text as Text23, Title as Title17 } from "@mantine/core";
1941
- import { jsx as jsx32, jsxs as jsxs26 } from "react/jsx-runtime";
2210
+ import { Container as Container3, Group as Group23, Stack as Stack27, Text as Text24, Title as Title17 } from "@mantine/core";
2211
+ import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
1942
2212
  function ArticleShell({ eyebrow, title, lead, meta, sideRail, children }) {
1943
- return /* @__PURE__ */ jsx32(Container3, { size: "lg", py: "xl", children: /* @__PURE__ */ jsxs26(Group22, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
1944
- /* @__PURE__ */ jsxs26(Stack26, { gap: "lg", maw: 760, flex: 1, children: [
1945
- /* @__PURE__ */ jsxs26(Stack26, { gap: "sm", children: [
1946
- eyebrow ? /* @__PURE__ */ jsx32(Text23, { size: "sm", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
1947
- /* @__PURE__ */ jsx32(Title17, { order: 1, children: title }),
1948
- lead ? /* @__PURE__ */ jsx32(Text23, { size: "lg", c: "dimmed", children: lead }) : null,
1949
- meta ? /* @__PURE__ */ jsx32(Group22, { gap: "md", children: meta }) : null
2213
+ return /* @__PURE__ */ jsx34(Container3, { size: "lg", py: "xl", children: /* @__PURE__ */ jsxs27(Group23, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
2214
+ /* @__PURE__ */ jsxs27(Stack27, { gap: "lg", maw: 760, flex: 1, children: [
2215
+ /* @__PURE__ */ jsxs27(Stack27, { gap: "sm", children: [
2216
+ eyebrow ? /* @__PURE__ */ jsx34(Text24, { size: "sm", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
2217
+ /* @__PURE__ */ jsx34(Title17, { order: 1, children: title }),
2218
+ lead ? /* @__PURE__ */ jsx34(Text24, { size: "lg", c: "dimmed", children: lead }) : null,
2219
+ meta ? /* @__PURE__ */ jsx34(Group23, { gap: "md", children: meta }) : null
1950
2220
  ] }),
1951
- /* @__PURE__ */ jsx32(Stack26, { gap: "md", children })
2221
+ /* @__PURE__ */ jsx34(Stack27, { gap: "md", children })
1952
2222
  ] }),
1953
- sideRail ? /* @__PURE__ */ jsx32(Stack26, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
2223
+ sideRail ? /* @__PURE__ */ jsx34(Stack27, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1954
2224
  ] }) });
1955
2225
  }
1956
2226
 
1957
2227
  // src/CtaButtonGroup.tsx
1958
- import { Group as Group23, Stack as Stack27 } from "@mantine/core";
1959
- import { jsx as jsx33, jsxs as jsxs27 } from "react/jsx-runtime";
2228
+ import { Group as Group24, Stack as Stack28 } from "@mantine/core";
2229
+ import { jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
1960
2230
  function CtaButtonGroup({ primary, secondary, tertiary }) {
1961
- return /* @__PURE__ */ jsxs27(Stack27, { gap: "sm", children: [
1962
- /* @__PURE__ */ jsxs27(Group23, { gap: "sm", align: "stretch", children: [
1963
- /* @__PURE__ */ jsx33("div", { children: primary }),
1964
- secondary ? /* @__PURE__ */ jsx33("div", { children: secondary }) : null
2231
+ return /* @__PURE__ */ jsxs28(Stack28, { gap: "sm", children: [
2232
+ /* @__PURE__ */ jsxs28(Group24, { gap: "sm", align: "stretch", children: [
2233
+ /* @__PURE__ */ jsx35("div", { children: primary }),
2234
+ secondary ? /* @__PURE__ */ jsx35("div", { children: secondary }) : null
1965
2235
  ] }),
1966
- tertiary ? /* @__PURE__ */ jsx33("div", { children: tertiary }) : null
2236
+ tertiary ? /* @__PURE__ */ jsx35("div", { children: tertiary }) : null
1967
2237
  ] });
1968
2238
  }
1969
2239
 
1970
2240
  // src/DocsPageShell.tsx
1971
- import { Anchor as Anchor5, Breadcrumbs, Container as Container4, Group as Group24, Stack as Stack28, Text as Text24, Title as Title18 } from "@mantine/core";
1972
- import { jsx as jsx34, jsxs as jsxs28 } from "react/jsx-runtime";
2241
+ import { Anchor as Anchor5, Breadcrumbs, Container as Container4, Group as Group25, Stack as Stack29, Text as Text25, Title as Title18 } from "@mantine/core";
2242
+ import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
1973
2243
  function DocsPageShell({
1974
2244
  breadcrumbs = [],
1975
2245
  title,
@@ -1980,27 +2250,27 @@ function DocsPageShell({
1980
2250
  footerNext,
1981
2251
  children
1982
2252
  }) {
1983
- 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: [
1984
- /* @__PURE__ */ jsxs28(Stack28, { component: "article", gap: "lg", flex: 1, miw: 0, children: [
1985
- breadcrumbs.length ? /* @__PURE__ */ jsx34(Breadcrumbs, { children: breadcrumbs.map(
1986
- (crumb) => crumb.href ? /* @__PURE__ */ jsx34(Anchor5, { href: crumb.href, children: crumb.label }, `${crumb.label}-${crumb.href}`) : /* @__PURE__ */ jsx34(Text24, { children: crumb.label }, crumb.label)
2253
+ return /* @__PURE__ */ jsx36(Container4, { fluid: true, py: "xl", px: { base: "md", md: "lg", lg: "xl" }, w: "100%", maw: "100%", children: /* @__PURE__ */ jsxs29(Group25, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
2254
+ /* @__PURE__ */ jsxs29(Stack29, { component: "article", gap: "lg", flex: 1, miw: 0, children: [
2255
+ breadcrumbs.length ? /* @__PURE__ */ jsx36(Breadcrumbs, { children: breadcrumbs.map(
2256
+ (crumb) => crumb.href ? /* @__PURE__ */ jsx36(Anchor5, { href: crumb.href, children: crumb.label }, `${crumb.label}-${crumb.href}`) : /* @__PURE__ */ jsx36(Text25, { children: crumb.label }, crumb.label)
1987
2257
  ) }) : null,
1988
- /* @__PURE__ */ jsxs28(Stack28, { gap: "sm", children: [
1989
- eyebrow ? /* @__PURE__ */ jsx34(Text24, { size: "sm", fw: 700, c: "dimmed", children: eyebrow }) : null,
1990
- /* @__PURE__ */ jsx34(Title18, { order: 1, children: title }),
1991
- lead ? /* @__PURE__ */ jsx34(Text24, { size: "lg", c: "dimmed", children: lead }) : null,
1992
- meta ? /* @__PURE__ */ jsx34(Group24, { gap: "md", children: meta }) : null
2258
+ /* @__PURE__ */ jsxs29(Stack29, { gap: "sm", children: [
2259
+ eyebrow ? /* @__PURE__ */ jsx36(Text25, { size: "sm", fw: 700, c: "dimmed", children: eyebrow }) : null,
2260
+ /* @__PURE__ */ jsx36(Title18, { order: 1, children: title }),
2261
+ lead ? /* @__PURE__ */ jsx36(Text25, { size: "lg", c: "dimmed", children: lead }) : null,
2262
+ meta ? /* @__PURE__ */ jsx36(Group25, { gap: "md", children: meta }) : null
1993
2263
  ] }),
1994
- /* @__PURE__ */ jsx34(Stack28, { gap: "md", children }),
1995
- footerNext ? /* @__PURE__ */ jsx34(Anchor5, { href: footerNext.href, fw: 600, children: footerNext.label }) : null
2264
+ /* @__PURE__ */ jsx36(Stack29, { gap: "md", children }),
2265
+ footerNext ? /* @__PURE__ */ jsx36(Anchor5, { href: footerNext.href, fw: 600, children: footerNext.label }) : null
1996
2266
  ] }),
1997
- sideRail ? /* @__PURE__ */ jsx34(Stack28, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
2267
+ sideRail ? /* @__PURE__ */ jsx36(Stack29, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1998
2268
  ] }) });
1999
2269
  }
2000
2270
 
2001
2271
  // src/EditorialHero.tsx
2002
- 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";
2003
- import { jsx as jsx35, jsxs as jsxs29 } from "react/jsx-runtime";
2272
+ import { Anchor as Anchor6, AspectRatio as AspectRatio5, Box as Box11, Grid as Grid2, Group as Group26, Paper as Paper7, Skeleton as Skeleton3, Stack as Stack30, Text as Text26, ThemeIcon as ThemeIcon8, Title as Title19 } from "@mantine/core";
2273
+ import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
2004
2274
  function resolveActionVariant(action, index, seenPrimary) {
2005
2275
  const requested = action.variant ?? (index === 0 ? "primary" : "secondary");
2006
2276
  if (requested === "primary" && !seenPrimary) {
@@ -2012,7 +2282,7 @@ function resolveActionVariant(action, index, seenPrimary) {
2012
2282
  return { variant: "default", seenPrimary };
2013
2283
  }
2014
2284
  function HeroAction({ action, variant }) {
2015
- const content = /* @__PURE__ */ jsx35(
2285
+ const content = /* @__PURE__ */ jsx37(
2016
2286
  Anchor6,
2017
2287
  {
2018
2288
  href: action.href,
@@ -2037,7 +2307,7 @@ function HeroAction({ action, variant }) {
2037
2307
  }
2038
2308
  );
2039
2309
  if (!action.href) {
2040
- return /* @__PURE__ */ jsx35(
2310
+ return /* @__PURE__ */ jsx37(
2041
2311
  Box11,
2042
2312
  {
2043
2313
  component: "button",
@@ -2065,22 +2335,22 @@ function HeroAction({ action, variant }) {
2065
2335
  return content;
2066
2336
  }
2067
2337
  function LoadingHero({ compact }) {
2068
- return /* @__PURE__ */ jsx35(Paper7, { withBorder: true, radius: "xl", p: compact ? "lg" : "xl", children: /* @__PURE__ */ jsxs29(Grid2, { gutter: compact ? "lg" : "xl", align: "center", children: [
2069
- /* @__PURE__ */ jsx35(Grid2.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsxs29(Stack29, { gap: "md", children: [
2070
- /* @__PURE__ */ jsx35(Skeleton3, { height: 16, width: 96, radius: "xl" }),
2071
- /* @__PURE__ */ jsx35(Skeleton3, { height: 48, width: "90%", radius: "md" }),
2072
- /* @__PURE__ */ jsx35(Skeleton3, { height: 18, width: "100%", radius: "md" }),
2073
- /* @__PURE__ */ jsx35(Skeleton3, { height: 18, width: "82%", radius: "md" }),
2074
- /* @__PURE__ */ jsxs29(Group25, { children: [
2075
- /* @__PURE__ */ jsx35(Skeleton3, { height: 40, width: 140, radius: "md" }),
2076
- /* @__PURE__ */ jsx35(Skeleton3, { height: 40, width: 140, radius: "md" })
2338
+ return /* @__PURE__ */ jsx37(Paper7, { withBorder: true, radius: "xl", p: compact ? "lg" : "xl", children: /* @__PURE__ */ jsxs30(Grid2, { gutter: compact ? "lg" : "xl", align: "center", children: [
2339
+ /* @__PURE__ */ jsx37(Grid2.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsxs30(Stack30, { gap: "md", children: [
2340
+ /* @__PURE__ */ jsx37(Skeleton3, { height: 16, width: 96, radius: "xl" }),
2341
+ /* @__PURE__ */ jsx37(Skeleton3, { height: 48, width: "90%", radius: "md" }),
2342
+ /* @__PURE__ */ jsx37(Skeleton3, { height: 18, width: "100%", radius: "md" }),
2343
+ /* @__PURE__ */ jsx37(Skeleton3, { height: 18, width: "82%", radius: "md" }),
2344
+ /* @__PURE__ */ jsxs30(Group26, { children: [
2345
+ /* @__PURE__ */ jsx37(Skeleton3, { height: 40, width: 140, radius: "md" }),
2346
+ /* @__PURE__ */ jsx37(Skeleton3, { height: 40, width: 140, radius: "md" })
2077
2347
  ] })
2078
2348
  ] }) }),
2079
- /* @__PURE__ */ jsx35(Grid2.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsx35(AspectRatio5, { ratio: 16 / 11, children: /* @__PURE__ */ jsx35(Skeleton3, { radius: "lg" }) }) })
2349
+ /* @__PURE__ */ jsx37(Grid2.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsx37(AspectRatio5, { ratio: 16 / 11, children: /* @__PURE__ */ jsx37(Skeleton3, { radius: "lg" }) }) })
2080
2350
  ] }) });
2081
2351
  }
2082
2352
  function MediaFallback() {
2083
- return /* @__PURE__ */ jsx35(AspectRatio5, { ratio: 16 / 11, children: /* @__PURE__ */ jsx35(
2353
+ return /* @__PURE__ */ jsx37(AspectRatio5, { ratio: 16 / 11, children: /* @__PURE__ */ jsx37(
2084
2354
  ThemeIcon8,
2085
2355
  {
2086
2356
  size: "100%",
@@ -2088,7 +2358,7 @@ function MediaFallback() {
2088
2358
  color: "gray",
2089
2359
  variant: "light",
2090
2360
  "aria-label": "Hero media is unavailable",
2091
- children: /* @__PURE__ */ jsx35(GdsIcons.Gallery, { size: "2.5rem" })
2361
+ children: /* @__PURE__ */ jsx37(GdsIcons.Gallery, { size: "2.5rem" })
2092
2362
  }
2093
2363
  ) });
2094
2364
  }
@@ -2108,7 +2378,7 @@ function MediaFrame({
2108
2378
  } else if (mediaFade === "soft-start") {
2109
2379
  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%)";
2110
2380
  }
2111
- return /* @__PURE__ */ jsxs29(
2381
+ return /* @__PURE__ */ jsxs30(
2112
2382
  Box11,
2113
2383
  {
2114
2384
  component: "figure",
@@ -2122,8 +2392,8 @@ function MediaFrame({
2122
2392
  },
2123
2393
  "aria-label": mediaAlt,
2124
2394
  children: [
2125
- media ?? /* @__PURE__ */ jsx35(MediaFallback, {}),
2126
- media && overlayBackground ? /* @__PURE__ */ jsx35(
2395
+ media ?? /* @__PURE__ */ jsx37(MediaFallback, {}),
2396
+ media && overlayBackground ? /* @__PURE__ */ jsx37(
2127
2397
  Box11,
2128
2398
  {
2129
2399
  "aria-hidden": true,
@@ -2157,7 +2427,7 @@ function EditorialHero({
2157
2427
  classNames
2158
2428
  }) {
2159
2429
  if (loading) {
2160
- return /* @__PURE__ */ jsx35(LoadingHero, { compact });
2430
+ return /* @__PURE__ */ jsx37(LoadingHero, { compact });
2161
2431
  }
2162
2432
  const stackAlign = align === "center" ? "center" : "flex-start";
2163
2433
  const textAlign = align === "center" ? "center" : "left";
@@ -2165,15 +2435,15 @@ function EditorialHero({
2165
2435
  const renderedActions = actions.slice(0, 3).map((action, index) => {
2166
2436
  const resolved = resolveActionVariant(action, index, seenPrimary);
2167
2437
  seenPrimary = resolved.seenPrimary;
2168
- return /* @__PURE__ */ jsx35(HeroAction, { action, variant: resolved.variant }, `${action.label}-${index}`);
2438
+ return /* @__PURE__ */ jsx37(HeroAction, { action, variant: resolved.variant }, `${action.label}-${index}`);
2169
2439
  });
2170
- const textSlot = /* @__PURE__ */ jsxs29(Stack29, { gap: compact ? "md" : "lg", justify: "center", h: "100%", className: classNames?.content, children: [
2171
- /* @__PURE__ */ jsxs29(Stack29, { gap: "sm", align: stackAlign, children: [
2172
- eyebrow ? /* @__PURE__ */ jsx35(Text25, { size: "sm", fw: 700, c: "dimmed", ta: textAlign, children: eyebrow }) : null,
2173
- /* @__PURE__ */ jsx35(Title19, { order: 1, maw: 760, ta: textAlign, children: title }),
2174
- description ? /* @__PURE__ */ jsx35(Text25, { size: compact ? "md" : "lg", c: "dimmed", maw: 720, ta: textAlign, children: description }) : null
2440
+ const textSlot = /* @__PURE__ */ jsxs30(Stack30, { gap: compact ? "md" : "lg", justify: "center", h: "100%", className: classNames?.content, children: [
2441
+ /* @__PURE__ */ jsxs30(Stack30, { gap: "sm", align: stackAlign, children: [
2442
+ eyebrow ? /* @__PURE__ */ jsx37(Text26, { size: "sm", fw: 700, c: "dimmed", ta: textAlign, children: eyebrow }) : null,
2443
+ /* @__PURE__ */ jsx37(Title19, { order: 1, maw: 760, ta: textAlign, children: title }),
2444
+ description ? /* @__PURE__ */ jsx37(Text26, { size: compact ? "md" : "lg", c: "dimmed", maw: 720, ta: textAlign, children: description }) : null
2175
2445
  ] }),
2176
- renderedActions.length ? /* @__PURE__ */ jsx35(Box11, { className: classNames?.actions, children: /* @__PURE__ */ jsx35(
2446
+ renderedActions.length ? /* @__PURE__ */ jsx37(Box11, { className: classNames?.actions, children: /* @__PURE__ */ jsx37(
2177
2447
  CtaButtonGroup,
2178
2448
  {
2179
2449
  primary: renderedActions[0],
@@ -2181,8 +2451,8 @@ function EditorialHero({
2181
2451
  tertiary: renderedActions[2]
2182
2452
  }
2183
2453
  ) }) : null,
2184
- meta.length ? /* @__PURE__ */ jsx35(Group25, { gap: "sm", wrap: "wrap", "aria-label": "Supporting details", className: classNames?.meta, children: meta.map((item) => /* @__PURE__ */ jsxs29(
2185
- Group25,
2454
+ meta.length ? /* @__PURE__ */ jsx37(Group26, { gap: "sm", wrap: "wrap", "aria-label": "Supporting details", className: classNames?.meta, children: meta.map((item) => /* @__PURE__ */ jsxs30(
2455
+ Group26,
2186
2456
  {
2187
2457
  gap: 6,
2188
2458
  px: "sm",
@@ -2193,16 +2463,16 @@ function EditorialHero({
2193
2463
  },
2194
2464
  children: [
2195
2465
  item.icon,
2196
- /* @__PURE__ */ jsx35(Text25, { size: "sm", c: "dimmed", children: item.label })
2466
+ /* @__PURE__ */ jsx37(Text26, { size: "sm", c: "dimmed", children: item.label })
2197
2467
  ]
2198
2468
  },
2199
2469
  item.id
2200
2470
  )) }) : null
2201
2471
  ] });
2202
- 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 });
2203
- const textCol = /* @__PURE__ */ jsx35(Grid2.Col, { span: { base: 12, md: 6 }, order: { base: 1, md: mediaPosition === "left" ? 2 : 1 }, children: textSlot });
2204
- const mediaCol = /* @__PURE__ */ jsx35(Grid2.Col, { span: { base: 12, md: 6 }, order: { base: 2, md: mediaPosition === "left" ? 1 : 2 }, children: mediaSlot });
2205
- return /* @__PURE__ */ jsx35(
2472
+ const mediaSlot = error ? /* @__PURE__ */ jsx37(AccentPanel, { tone: "red", variant: "soft-outline", title: "Media unavailable", children: error }) : /* @__PURE__ */ jsx37(MediaFrame, { media, mediaAlt, mediaFade, className: classNames?.media });
2473
+ const textCol = /* @__PURE__ */ jsx37(Grid2.Col, { span: { base: 12, md: 6 }, order: { base: 1, md: mediaPosition === "left" ? 2 : 1 }, children: textSlot });
2474
+ const mediaCol = /* @__PURE__ */ jsx37(Grid2.Col, { span: { base: 12, md: 6 }, order: { base: 2, md: mediaPosition === "left" ? 1 : 2 }, children: mediaSlot });
2475
+ return /* @__PURE__ */ jsx37(
2206
2476
  Paper7,
2207
2477
  {
2208
2478
  component: "section",
@@ -2211,7 +2481,7 @@ function EditorialHero({
2211
2481
  p: compact ? "lg" : "xl",
2212
2482
  className: classNames?.root,
2213
2483
  style: surfaceVariant === "flat-public" ? { boxShadow: "none" } : void 0,
2214
- children: /* @__PURE__ */ jsxs29(Grid2, { gutter: compact ? "lg" : "xl", align: "center", children: [
2484
+ children: /* @__PURE__ */ jsxs30(Grid2, { gutter: compact ? "lg" : "xl", align: "center", children: [
2215
2485
  textCol,
2216
2486
  mediaCol
2217
2487
  ] })
@@ -2220,19 +2490,19 @@ function EditorialHero({
2220
2490
  }
2221
2491
 
2222
2492
  // src/FeatureBand.tsx
2223
- 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";
2224
- import { Fragment as Fragment5, jsx as jsx36, jsxs as jsxs30 } from "react/jsx-runtime";
2493
+ import { Box as Box12, Group as Group27, Paper as Paper8, SimpleGrid as SimpleGrid6, Skeleton as Skeleton4, Stack as Stack31, Text as Text27, ThemeIcon as ThemeIcon9, Title as Title20 } from "@mantine/core";
2494
+ import { Fragment as Fragment6, jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
2225
2495
  function FeatureBandSkeleton({
2226
2496
  columns = 3,
2227
2497
  bordered = true,
2228
2498
  variant = "default"
2229
2499
  }) {
2230
- 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: [
2231
- /* @__PURE__ */ jsx36(Skeleton4, { height: variant === "process" ? 28 : 42, width: variant === "process" ? 72 : 42, radius: "xl" }),
2232
- /* @__PURE__ */ jsxs30(Stack30, { gap: "xs", children: [
2233
- /* @__PURE__ */ jsx36(Skeleton4, { height: 20, width: "75%", radius: "md" }),
2234
- /* @__PURE__ */ jsx36(Skeleton4, { height: 14, width: "100%", radius: "md" }),
2235
- /* @__PURE__ */ jsx36(Skeleton4, { height: 14, width: "82%", radius: "md" })
2500
+ return /* @__PURE__ */ jsx38(SimpleGrid6, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx38(Paper8, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ jsxs31(Stack31, { gap: "md", children: [
2501
+ /* @__PURE__ */ jsx38(Skeleton4, { height: variant === "process" ? 28 : 42, width: variant === "process" ? 72 : 42, radius: "xl" }),
2502
+ /* @__PURE__ */ jsxs31(Stack31, { gap: "xs", children: [
2503
+ /* @__PURE__ */ jsx38(Skeleton4, { height: 20, width: "75%", radius: "md" }),
2504
+ /* @__PURE__ */ jsx38(Skeleton4, { height: 14, width: "100%", radius: "md" }),
2505
+ /* @__PURE__ */ jsx38(Skeleton4, { height: 14, width: "82%", radius: "md" })
2236
2506
  ] })
2237
2507
  ] }) }, index)) });
2238
2508
  }
@@ -2245,10 +2515,10 @@ function FeatureBand({
2245
2515
  variant = "default"
2246
2516
  }) {
2247
2517
  if (loading) {
2248
- return /* @__PURE__ */ jsx36(FeatureBandSkeleton, { columns, bordered, variant });
2518
+ return /* @__PURE__ */ jsx38(FeatureBandSkeleton, { columns, bordered, variant });
2249
2519
  }
2250
2520
  if (!items.length) {
2251
- return emptyState ? /* @__PURE__ */ jsx36(Fragment5, { children: emptyState }) : /* @__PURE__ */ jsx36(
2521
+ return emptyState ? /* @__PURE__ */ jsx38(Fragment6, { children: emptyState }) : /* @__PURE__ */ jsx38(
2252
2522
  EmptyState,
2253
2523
  {
2254
2524
  title: "No supporting details available",
@@ -2256,9 +2526,9 @@ function FeatureBand({
2256
2526
  }
2257
2527
  );
2258
2528
  }
2259
- 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: [
2260
- variant === "process" ? /* @__PURE__ */ jsx36(Group26, { children: /* @__PURE__ */ jsx36(
2261
- Text26,
2529
+ return /* @__PURE__ */ jsx38(Box12, { component: "section", "aria-label": "Supporting features", children: /* @__PURE__ */ jsx38(SimpleGrid6, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: items.map((item, index) => /* @__PURE__ */ jsx38(Paper8, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ jsxs31(Stack31, { gap: "md", children: [
2530
+ variant === "process" ? /* @__PURE__ */ jsx38(Group27, { children: /* @__PURE__ */ jsx38(
2531
+ Text27,
2262
2532
  {
2263
2533
  fw: 800,
2264
2534
  size: "sm",
@@ -2270,18 +2540,18 @@ function FeatureBand({
2270
2540
  },
2271
2541
  children: item.stepLabel ?? `Step ${index + 1}`
2272
2542
  }
2273
- ) }) : 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" }) }) }),
2274
- /* @__PURE__ */ jsxs30(Stack30, { gap: "xs", children: [
2275
- /* @__PURE__ */ jsx36(Title20, { order: 4, children: item.title }),
2276
- item.description ? /* @__PURE__ */ jsx36(Text26, { c: "dimmed", children: item.description }) : null,
2277
- item.meta ? /* @__PURE__ */ jsx36(Text26, { size: "sm", c: "dimmed", children: item.meta }) : null
2543
+ ) }) : item.media ? item.media : item.icon ? /* @__PURE__ */ jsx38(Group27, { children: /* @__PURE__ */ jsx38(ThemeIcon9, { size: "xl", radius: "xl", variant: "light", color: "violet", children: item.icon }) }) : /* @__PURE__ */ jsx38(Group27, { children: /* @__PURE__ */ jsx38(ThemeIcon9, { size: "xl", radius: "xl", variant: "light", color: "gray", "aria-hidden": true, children: /* @__PURE__ */ jsx38(GdsIcons.Info, { size: "1.25rem" }) }) }),
2544
+ /* @__PURE__ */ jsxs31(Stack31, { gap: "xs", children: [
2545
+ /* @__PURE__ */ jsx38(Title20, { order: 4, children: item.title }),
2546
+ item.description ? /* @__PURE__ */ jsx38(Text27, { c: "dimmed", children: item.description }) : null,
2547
+ item.meta ? /* @__PURE__ */ jsx38(Text27, { size: "sm", c: "dimmed", children: item.meta }) : null
2278
2548
  ] })
2279
2549
  ] }) }, item.id)) }) });
2280
2550
  }
2281
2551
 
2282
2552
  // src/MapPanel.tsx
2283
- 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";
2284
- import { jsx as jsx37, jsxs as jsxs31 } from "react/jsx-runtime";
2553
+ import { AspectRatio as AspectRatio6, Box as Box13, Group as Group28, Paper as Paper9, Stack as Stack32, Text as Text28, Title as Title21 } from "@mantine/core";
2554
+ import { jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
2285
2555
  function MapPanel({
2286
2556
  title,
2287
2557
  description,
@@ -2297,7 +2567,7 @@ function MapPanel({
2297
2567
  }) {
2298
2568
  let body;
2299
2569
  if (loading) {
2300
- body = /* @__PURE__ */ jsx37(
2570
+ body = /* @__PURE__ */ jsx39(
2301
2571
  StateBlock,
2302
2572
  {
2303
2573
  variant: "loading",
@@ -2307,9 +2577,9 @@ function MapPanel({
2307
2577
  }
2308
2578
  );
2309
2579
  } else if (error) {
2310
- body = /* @__PURE__ */ jsx37(StateBlock, { variant: "error", title: "Map unavailable", description: error, compact: true });
2580
+ body = /* @__PURE__ */ jsx39(StateBlock, { variant: "error", title: "Map unavailable", description: error, compact: true });
2311
2581
  } else if (!iframeSrc && !renderMap) {
2312
- body = /* @__PURE__ */ jsx37(
2582
+ body = /* @__PURE__ */ jsx39(
2313
2583
  StateBlock,
2314
2584
  {
2315
2585
  variant: "empty",
@@ -2319,9 +2589,9 @@ function MapPanel({
2319
2589
  }
2320
2590
  );
2321
2591
  } else if (renderMap) {
2322
- body = /* @__PURE__ */ jsx37(Box13, { style: { minHeight }, children: renderMap() });
2592
+ body = /* @__PURE__ */ jsx39(Box13, { style: { minHeight }, children: renderMap() });
2323
2593
  } else {
2324
- body = /* @__PURE__ */ jsx37(AspectRatio6, { ratio: 16 / 9, children: /* @__PURE__ */ jsx37(
2594
+ body = /* @__PURE__ */ jsx39(AspectRatio6, { ratio: 16 / 9, children: /* @__PURE__ */ jsx39(
2325
2595
  "iframe",
2326
2596
  {
2327
2597
  src: iframeSrc,
@@ -2333,21 +2603,21 @@ function MapPanel({
2333
2603
  }
2334
2604
  ) });
2335
2605
  }
2336
- return /* @__PURE__ */ jsx37(Paper9, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs31(Stack31, { gap: "md", children: [
2337
- /* @__PURE__ */ jsxs31(Group27, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2338
- /* @__PURE__ */ jsxs31(Stack31, { gap: 4, children: [
2339
- /* @__PURE__ */ jsx37(Title21, { order: 3, children: title }),
2340
- description ? /* @__PURE__ */ jsx37(Text27, { size: "sm", c: "dimmed", children: description }) : null
2606
+ return /* @__PURE__ */ jsx39(Paper9, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs32(Stack32, { gap: "md", children: [
2607
+ /* @__PURE__ */ jsxs32(Group28, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2608
+ /* @__PURE__ */ jsxs32(Stack32, { gap: 4, children: [
2609
+ /* @__PURE__ */ jsx39(Title21, { order: 3, children: title }),
2610
+ description ? /* @__PURE__ */ jsx39(Text28, { size: "sm", c: "dimmed", children: description }) : null
2341
2611
  ] }),
2342
- actions ? /* @__PURE__ */ jsx37(ActionBar, { ...actions }) : null
2612
+ actions ? /* @__PURE__ */ jsx39(ActionBar, { ...actions }) : null
2343
2613
  ] }),
2344
2614
  body
2345
2615
  ] }) });
2346
2616
  }
2347
2617
 
2348
2618
  // src/PublicFlowShell.tsx
2349
- import { Badge as Badge13, Group as Group28, Paper as Paper10, Stack as Stack32, Text as Text28, Title as Title22 } from "@mantine/core";
2350
- import { jsx as jsx38, jsxs as jsxs32 } from "react/jsx-runtime";
2619
+ import { Badge as Badge15, Group as Group29, Paper as Paper10, Stack as Stack33, Text as Text29, Title as Title22 } from "@mantine/core";
2620
+ import { jsx as jsx40, jsxs as jsxs33 } from "react/jsx-runtime";
2351
2621
  var stageTone = {
2352
2622
  idle: { label: "Idle", color: "gray" },
2353
2623
  loading: { label: "Loading", color: "blue" },
@@ -2399,7 +2669,7 @@ function PublicFlowShell({
2399
2669
  const actionBar = toActionBar(stage.actions);
2400
2670
  let body = stage.body;
2401
2671
  if (stage.status === "loading") {
2402
- body = /* @__PURE__ */ jsx38(
2672
+ body = /* @__PURE__ */ jsx40(
2403
2673
  StateBlock,
2404
2674
  {
2405
2675
  variant: "loading",
@@ -2408,7 +2678,7 @@ function PublicFlowShell({
2408
2678
  }
2409
2679
  );
2410
2680
  } else if (stage.status === "error") {
2411
- body = errorState ?? /* @__PURE__ */ jsx38(
2681
+ body = errorState ?? /* @__PURE__ */ jsx40(
2412
2682
  StateBlock,
2413
2683
  {
2414
2684
  variant: "error",
@@ -2417,7 +2687,7 @@ function PublicFlowShell({
2417
2687
  }
2418
2688
  );
2419
2689
  } else if (!stage.body && !hardwareSurface) {
2420
- body = emptyState ?? /* @__PURE__ */ jsx38(
2690
+ body = emptyState ?? /* @__PURE__ */ jsx40(
2421
2691
  EmptyState,
2422
2692
  {
2423
2693
  title: "No stage content available",
@@ -2425,29 +2695,29 @@ function PublicFlowShell({
2425
2695
  }
2426
2696
  );
2427
2697
  }
2428
- return /* @__PURE__ */ jsx38(Paper10, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs32(Stack32, { gap: "lg", children: [
2429
- /* @__PURE__ */ jsxs32(Group28, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2430
- /* @__PURE__ */ jsxs32(Stack32, { gap: 4, children: [
2431
- eyebrow ? /* @__PURE__ */ jsx38(Text28, { size: "xs", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
2432
- /* @__PURE__ */ jsxs32(Group28, { gap: "sm", wrap: "wrap", children: [
2433
- /* @__PURE__ */ jsx38(Title22, { order: 2, children: stage.title }),
2434
- /* @__PURE__ */ jsx38(Badge13, { variant: "light", color: tone.color, children: tone.label })
2698
+ return /* @__PURE__ */ jsx40(Paper10, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs33(Stack33, { gap: "lg", children: [
2699
+ /* @__PURE__ */ jsxs33(Group29, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2700
+ /* @__PURE__ */ jsxs33(Stack33, { gap: 4, children: [
2701
+ eyebrow ? /* @__PURE__ */ jsx40(Text29, { size: "xs", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
2702
+ /* @__PURE__ */ jsxs33(Group29, { gap: "sm", wrap: "wrap", children: [
2703
+ /* @__PURE__ */ jsx40(Title22, { order: 2, children: stage.title }),
2704
+ /* @__PURE__ */ jsx40(Badge15, { variant: "light", color: tone.color, children: tone.label })
2435
2705
  ] }),
2436
- stage.description ? /* @__PURE__ */ jsx38(Text28, { size: "sm", c: "dimmed", children: stage.description }) : null
2706
+ stage.description ? /* @__PURE__ */ jsx40(Text29, { size: "sm", c: "dimmed", children: stage.description }) : null
2437
2707
  ] }),
2438
2708
  exitAction
2439
2709
  ] }),
2440
- stage.notice ? /* @__PURE__ */ jsx38(Text28, { size: "sm", c: "dimmed", children: stage.notice }) : null,
2710
+ stage.notice ? /* @__PURE__ */ jsx40(Text29, { size: "sm", c: "dimmed", children: stage.notice }) : null,
2441
2711
  body,
2442
2712
  hardwareSurface,
2443
2713
  stage.aside,
2444
- actionBar ? /* @__PURE__ */ jsx38(ActionBar, { ...actionBar }) : null
2714
+ actionBar ? /* @__PURE__ */ jsx40(ActionBar, { ...actionBar }) : null
2445
2715
  ] }) });
2446
2716
  }
2447
2717
 
2448
2718
  // src/PlaybackSurface.tsx
2449
- import { Badge as Badge14, Group as Group29, Paper as Paper11, Stack as Stack33, Text as Text29, Title as Title23 } from "@mantine/core";
2450
- import { jsx as jsx39, jsxs as jsxs33 } from "react/jsx-runtime";
2719
+ import { Badge as Badge16, Group as Group30, Paper as Paper11, Stack as Stack34, Text as Text30, Title as Title23 } from "@mantine/core";
2720
+ import { jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
2451
2721
  var stateTone = {
2452
2722
  loading: { label: "Loading", color: "blue" },
2453
2723
  ready: { label: "Ready", color: "teal" },
@@ -2470,7 +2740,7 @@ function PlaybackSurface({
2470
2740
  const tone = stateTone[state];
2471
2741
  let content;
2472
2742
  if (state === "loading") {
2473
- content = /* @__PURE__ */ jsx39(
2743
+ content = /* @__PURE__ */ jsx41(
2474
2744
  StateBlock,
2475
2745
  {
2476
2746
  variant: "loading",
@@ -2479,7 +2749,7 @@ function PlaybackSurface({
2479
2749
  }
2480
2750
  );
2481
2751
  } else if (state === "empty") {
2482
- content = emptyState ?? /* @__PURE__ */ jsx39(
2752
+ content = emptyState ?? /* @__PURE__ */ jsx41(
2483
2753
  EmptyState,
2484
2754
  {
2485
2755
  title: "No playback content available",
@@ -2487,7 +2757,7 @@ function PlaybackSurface({
2487
2757
  }
2488
2758
  );
2489
2759
  } else if (state === "error") {
2490
- content = errorState ?? /* @__PURE__ */ jsx39(
2760
+ content = errorState ?? /* @__PURE__ */ jsx41(
2491
2761
  StateBlock,
2492
2762
  {
2493
2763
  variant: "error",
@@ -2496,23 +2766,23 @@ function PlaybackSurface({
2496
2766
  }
2497
2767
  );
2498
2768
  } else {
2499
- content = /* @__PURE__ */ jsxs33(Stack33, { gap: "md", children: [
2769
+ content = /* @__PURE__ */ jsxs34(Stack34, { gap: "md", children: [
2500
2770
  media,
2501
2771
  overlays
2502
2772
  ] });
2503
2773
  }
2504
- return /* @__PURE__ */ jsx39(Paper11, { withBorder: true, radius: "xl", p: "lg", "data-playback-mode": mode, children: /* @__PURE__ */ jsxs33(Stack33, { gap: "md", children: [
2505
- title || statusMessage || controls ? /* @__PURE__ */ jsxs33(Group29, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2506
- /* @__PURE__ */ jsxs33(Stack33, { gap: 4, children: [
2507
- title ? /* @__PURE__ */ jsx39(Title23, { order: 3, children: title }) : null,
2508
- statusMessage ? /* @__PURE__ */ jsx39(Text29, { size: "sm", c: "dimmed", children: statusMessage }) : null
2774
+ return /* @__PURE__ */ jsx41(Paper11, { withBorder: true, radius: "xl", p: "lg", "data-playback-mode": mode, children: /* @__PURE__ */ jsxs34(Stack34, { gap: "md", children: [
2775
+ title || statusMessage || controls ? /* @__PURE__ */ jsxs34(Group30, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2776
+ /* @__PURE__ */ jsxs34(Stack34, { gap: 4, children: [
2777
+ title ? /* @__PURE__ */ jsx41(Title23, { order: 3, children: title }) : null,
2778
+ statusMessage ? /* @__PURE__ */ jsx41(Text30, { size: "sm", c: "dimmed", children: statusMessage }) : null
2509
2779
  ] }),
2510
- /* @__PURE__ */ jsxs33(Group29, { gap: "sm", align: "center", wrap: "wrap", children: [
2511
- /* @__PURE__ */ jsx39(Badge14, { variant: "light", color: tone.color, children: tone.label }),
2780
+ /* @__PURE__ */ jsxs34(Group30, { gap: "sm", align: "center", wrap: "wrap", children: [
2781
+ /* @__PURE__ */ jsx41(Badge16, { variant: "light", color: tone.color, children: tone.label }),
2512
2782
  controls
2513
2783
  ] })
2514
2784
  ] }) : null,
2515
- state === "degraded" ? /* @__PURE__ */ jsx39(
2785
+ state === "degraded" ? /* @__PURE__ */ jsx41(
2516
2786
  StateBlock,
2517
2787
  {
2518
2788
  variant: "info",
@@ -2526,14 +2796,21 @@ function PlaybackSurface({
2526
2796
  }
2527
2797
 
2528
2798
  // src/MediaField.tsx
2529
- import { Badge as Badge15, Button as Button4, Divider as Divider6, Group as Group30, Paper as Paper12, Stack as Stack34, Text as Text30 } from "@mantine/core";
2530
- import { Fragment as Fragment6, jsx as jsx40, jsxs as jsxs34 } from "react/jsx-runtime";
2799
+ import { Badge as Badge17, Button as Button5, Divider as Divider6, Group as Group31, Paper as Paper12, Progress as Progress2, Stack as Stack35, Text as Text31 } from "@mantine/core";
2800
+ import { Fragment as Fragment7, jsx as jsx42, jsxs as jsxs35 } from "react/jsx-runtime";
2531
2801
  var stateLabels = {
2532
2802
  empty: { label: "Empty", color: "gray" },
2803
+ "drag-active": { label: "Drop to select", color: "violet" },
2533
2804
  selected: { label: "Selected", color: "blue" },
2805
+ "preview-loading": { label: "Preview loading", color: "violet" },
2534
2806
  saved: { label: "Saved", color: "teal" },
2535
2807
  invalid: { label: "Needs attention", color: "red" },
2536
- uploading: { label: "Uploading", color: "violet" }
2808
+ uploading: { label: "Uploading", color: "violet" },
2809
+ "upload-failed": { label: "Upload failed", color: "red" },
2810
+ "unsupported-type": { label: "Unsupported type", color: "red" },
2811
+ "too-large": { label: "Too large", color: "red" },
2812
+ removed: { label: "Removed", color: "gray" },
2813
+ readonly: { label: "Read only", color: "gray" }
2537
2814
  };
2538
2815
  function MediaField({
2539
2816
  label,
@@ -2546,41 +2823,60 @@ function MediaField({
2546
2823
  policyText,
2547
2824
  error,
2548
2825
  retryAction,
2826
+ replaceAction,
2549
2827
  onRemove,
2550
2828
  onReset,
2551
2829
  removeAction,
2552
2830
  resetAction,
2553
2831
  statusAction,
2832
+ acceptedTypes,
2833
+ maxSize,
2834
+ progress,
2835
+ readonly = false,
2554
2836
  state = "empty",
2555
2837
  mode = "stacked"
2556
2838
  }) {
2557
- const stateBadge = stateLabels[state];
2558
- const resolvedRemoveAction = removeAction ?? (onRemove ? /* @__PURE__ */ jsx40(Button4, { type: "button", variant: "light", color: "red", onClick: onRemove, children: "Remove" }) : null);
2559
- const resolvedResetAction = resetAction ?? (onReset ? /* @__PURE__ */ jsx40(Button4, { type: "button", variant: "default", onClick: onReset, children: "Reset" }) : null);
2560
- return /* @__PURE__ */ jsx40(
2839
+ const resolvedState = readonly ? "readonly" : state;
2840
+ const stateBadge = stateLabels[resolvedState];
2841
+ const resolvedRemoveAction = removeAction ?? (!readonly && onRemove ? /* @__PURE__ */ jsx42(Button5, { type: "button", variant: "light", color: "red", onClick: onRemove, children: "Remove" }) : null);
2842
+ const resolvedResetAction = resetAction ?? (!readonly && onReset ? /* @__PURE__ */ jsx42(Button5, { type: "button", variant: "default", onClick: onReset, children: "Reset" }) : null);
2843
+ const boundedProgress = typeof progress === "number" ? Math.max(0, Math.min(100, progress)) : void 0;
2844
+ return /* @__PURE__ */ jsx42(
2561
2845
  FormField,
2562
2846
  {
2563
2847
  label,
2564
2848
  description,
2565
2849
  error,
2566
- children: /* @__PURE__ */ jsx40(Paper12, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs34(Stack34, { gap: "md", children: [
2567
- /* @__PURE__ */ jsx40(Group30, { justify: "flex-end", align: "center", gap: "sm", children: /* @__PURE__ */ jsxs34(Group30, { gap: "xs", justify: "flex-end", children: [
2568
- /* @__PURE__ */ jsx40(Badge15, { variant: "light", color: stateBadge.color, children: stateBadge.label }),
2850
+ children: /* @__PURE__ */ jsx42(Paper12, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs35(Stack35, { gap: "md", children: [
2851
+ /* @__PURE__ */ jsx42(Group31, { justify: "flex-end", align: "center", gap: "sm", children: /* @__PURE__ */ jsxs35(Group31, { gap: "xs", justify: "flex-end", children: [
2852
+ /* @__PURE__ */ jsx42(Badge17, { variant: "light", color: stateBadge.color, children: stateBadge.label }),
2569
2853
  statusAction
2570
2854
  ] }) }),
2571
2855
  preview ? preview : null,
2572
- uploadControl || urlInput ? /* @__PURE__ */ jsxs34(Fragment6, { children: [
2573
- /* @__PURE__ */ jsx40(Divider6, {}),
2574
- /* @__PURE__ */ jsxs34(Stack34, { gap: "sm", style: mode === "split" ? { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))" } : void 0, children: [
2856
+ typeof boundedProgress === "number" ? /* @__PURE__ */ jsxs35(Stack35, { gap: 4, children: [
2857
+ /* @__PURE__ */ jsx42(Progress2, { value: boundedProgress, "aria-label": "Upload progress" }),
2858
+ /* @__PURE__ */ jsxs35(Text31, { size: "xs", c: "dimmed", children: [
2859
+ boundedProgress,
2860
+ "% complete"
2861
+ ] })
2862
+ ] }) : null,
2863
+ (uploadControl || urlInput) && !readonly ? /* @__PURE__ */ jsxs35(Fragment7, { children: [
2864
+ /* @__PURE__ */ jsx42(Divider6, {}),
2865
+ /* @__PURE__ */ jsxs35(Stack35, { gap: "sm", style: mode === "split" ? { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))" } : void 0, children: [
2575
2866
  uploadControl,
2576
2867
  urlInput
2577
2868
  ] })
2578
2869
  ] }) : null,
2579
- value ? /* @__PURE__ */ jsx40(Text30, { size: "sm", c: "dimmed", style: { wordBreak: "break-all" }, children: value }) : null,
2580
- helpText ? /* @__PURE__ */ jsx40(Text30, { size: "sm", c: "dimmed", children: helpText }) : null,
2581
- policyText ? /* @__PURE__ */ jsx40(Text30, { size: "sm", c: error ? "red.7" : "dimmed", children: policyText }) : null,
2870
+ value ? /* @__PURE__ */ jsx42(Text31, { size: "sm", c: "dimmed", style: { wordBreak: "break-all" }, children: value }) : null,
2871
+ helpText ? /* @__PURE__ */ jsx42(Text31, { size: "sm", c: "dimmed", children: helpText }) : null,
2872
+ acceptedTypes || maxSize ? /* @__PURE__ */ jsxs35(Group31, { gap: "xs", wrap: "wrap", children: [
2873
+ acceptedTypes ? /* @__PURE__ */ jsx42(Badge17, { variant: "outline", color: "gray", children: acceptedTypes }) : null,
2874
+ maxSize ? /* @__PURE__ */ jsx42(Badge17, { variant: "outline", color: "gray", children: maxSize }) : null
2875
+ ] }) : null,
2876
+ policyText ? /* @__PURE__ */ jsx42(Text31, { size: "sm", c: error ? "red.7" : "dimmed", children: policyText }) : null,
2582
2877
  typeof error !== "string" && error ? error : null,
2583
- resolvedRemoveAction || resolvedResetAction ? /* @__PURE__ */ jsxs34(Group30, { gap: "sm", children: [
2878
+ replaceAction || resolvedRemoveAction || resolvedResetAction || retryAction ? /* @__PURE__ */ jsxs35(Group31, { gap: "sm", children: [
2879
+ replaceAction,
2584
2880
  resolvedResetAction,
2585
2881
  retryAction,
2586
2882
  resolvedRemoveAction
@@ -2591,49 +2887,63 @@ function MediaField({
2591
2887
  }
2592
2888
 
2593
2889
  // src/MediaCard.tsx
2594
- import { ActionIcon as ActionIcon4, Badge as Badge16, Card as Card9, Group as Group31, Stack as Stack35, Text as Text31, Title as Title24 } from "@mantine/core";
2595
- import { jsx as jsx41, jsxs as jsxs35 } from "react/jsx-runtime";
2890
+ import { ActionIcon as ActionIcon4, Badge as Badge18, Card as Card9, Group as Group32, Stack as Stack36, Text as Text32, Title as Title24 } from "@mantine/core";
2891
+ import { jsx as jsx43, jsxs as jsxs36 } from "react/jsx-runtime";
2596
2892
  function MediaCard({ title, image, description, status, overlay, actions = [] }) {
2597
2893
  const EyeIcon = GdsIcons.Eye;
2598
- return /* @__PURE__ */ jsxs35(Card9, { withBorder: true, radius: "lg", padding: "md", children: [
2599
- /* @__PURE__ */ jsxs35(Card9.Section, { pos: "relative", children: [
2894
+ return /* @__PURE__ */ jsxs36(Card9, { withBorder: true, radius: "lg", padding: "md", children: [
2895
+ /* @__PURE__ */ jsxs36(Card9.Section, { pos: "relative", children: [
2600
2896
  image,
2601
- overlay ? /* @__PURE__ */ jsx41("div", { style: { position: "absolute", inset: 12, display: "flex", justifyContent: "flex-end", alignItems: "flex-start" }, children: overlay }) : null
2897
+ overlay ? /* @__PURE__ */ jsx43("div", { style: { position: "absolute", inset: 12, display: "flex", justifyContent: "flex-end", alignItems: "flex-start" }, children: overlay }) : null
2602
2898
  ] }),
2603
- /* @__PURE__ */ jsxs35(Stack35, { gap: "sm", mt: "md", children: [
2604
- /* @__PURE__ */ jsxs35(Group31, { justify: "space-between", align: "flex-start", children: [
2605
- /* @__PURE__ */ jsxs35(Stack35, { gap: 4, children: [
2606
- /* @__PURE__ */ jsx41(Title24, { order: 4, children: title }),
2607
- description ? /* @__PURE__ */ jsx41(Text31, { size: "sm", c: "dimmed", lineClamp: 2, children: description }) : null
2899
+ /* @__PURE__ */ jsxs36(Stack36, { gap: "sm", mt: "md", children: [
2900
+ /* @__PURE__ */ jsxs36(Group32, { justify: "space-between", align: "flex-start", children: [
2901
+ /* @__PURE__ */ jsxs36(Stack36, { gap: 4, children: [
2902
+ /* @__PURE__ */ jsx43(Title24, { order: 4, children: title }),
2903
+ description ? /* @__PURE__ */ jsx43(Text32, { size: "sm", c: "dimmed", lineClamp: 2, children: description }) : null
2608
2904
  ] }),
2609
- status ? /* @__PURE__ */ jsx41(Badge16, { variant: "light", children: status }) : null
2905
+ status ? /* @__PURE__ */ jsx43(Badge18, { variant: "light", children: status }) : null
2610
2906
  ] }),
2611
- 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
2907
+ actions.length ? /* @__PURE__ */ jsx43(Group32, { justify: "flex-end", gap: "xs", children: actions.map((action) => /* @__PURE__ */ jsx43(ActionIcon4, { variant: "light", "aria-label": action.label, onClick: action.onClick, children: /* @__PURE__ */ jsx43(EyeIcon, { size: "1rem" }) }, action.label)) }) : null
2612
2908
  ] })
2613
2909
  ] });
2614
2910
  }
2615
2911
 
2616
2912
  // src/AccessSummary.tsx
2617
- import { Badge as Badge17, Card as Card10, Group as Group32, Stack as Stack36, Text as Text32, Title as Title25 } from "@mantine/core";
2618
- import { jsx as jsx42, jsxs as jsxs36 } from "react/jsx-runtime";
2619
- function AccessSummary({ title, roles, scope, blocked = false, description }) {
2620
- return /* @__PURE__ */ jsx42(Card10, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs36(Stack36, { gap: "sm", children: [
2621
- /* @__PURE__ */ jsxs36(Group32, { justify: "space-between", align: "center", children: [
2622
- /* @__PURE__ */ jsx42(Title25, { order: 4, children: title }),
2623
- /* @__PURE__ */ jsx42(Badge17, { color: blocked ? "red" : "teal", variant: "light", children: blocked ? "Blocked" : "Allowed" })
2913
+ import { Badge as Badge19, Card as Card10, Group as Group33, Stack as Stack37, Text as Text33, Title as Title25 } from "@mantine/core";
2914
+ import { jsx as jsx44, jsxs as jsxs37 } from "react/jsx-runtime";
2915
+ var accessStateMeta = {
2916
+ allowed: { label: "Allowed", color: "teal" },
2917
+ blocked: { label: "Blocked", color: "red" },
2918
+ forbidden: { label: "Forbidden", color: "red" },
2919
+ expired: { label: "Expired", color: "orange" },
2920
+ "permission-limited": { label: "Permission limited", color: "grape" }
2921
+ };
2922
+ function AccessSummary({ title, roles, scope, blocked = false, state, owner, recoveryHint, description }) {
2923
+ const resolvedState = state ?? (blocked ? "blocked" : "allowed");
2924
+ const meta = accessStateMeta[resolvedState];
2925
+ return /* @__PURE__ */ jsx44(Card10, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs37(Stack37, { gap: "sm", children: [
2926
+ /* @__PURE__ */ jsxs37(Group33, { justify: "space-between", align: "center", children: [
2927
+ /* @__PURE__ */ jsx44(Title25, { order: 4, children: title }),
2928
+ /* @__PURE__ */ jsx44(Badge19, { color: meta.color, variant: "light", children: meta.label })
2624
2929
  ] }),
2625
- /* @__PURE__ */ jsx42(Group32, { gap: "xs", children: roles.map((role) => /* @__PURE__ */ jsx42(Badge17, { variant: "outline", children: role }, role)) }),
2626
- scope ? /* @__PURE__ */ jsxs36(Text32, { size: "sm", c: "dimmed", children: [
2930
+ /* @__PURE__ */ jsx44(Group33, { gap: "xs", children: roles.map((role) => /* @__PURE__ */ jsx44(Badge19, { variant: "outline", children: role }, role)) }),
2931
+ scope ? /* @__PURE__ */ jsxs37(Text33, { size: "sm", c: "dimmed", children: [
2627
2932
  "Scope: ",
2628
2933
  scope
2629
2934
  ] }) : null,
2630
- description ? /* @__PURE__ */ jsx42(Text32, { size: "sm", children: description }) : null
2935
+ owner ? /* @__PURE__ */ jsxs37(Text33, { size: "sm", c: "dimmed", children: [
2936
+ "Owner: ",
2937
+ owner
2938
+ ] }) : null,
2939
+ recoveryHint ? /* @__PURE__ */ jsx44(Text33, { size: "sm", c: resolvedState === "allowed" ? "dimmed" : "red.7", children: recoveryHint }) : null,
2940
+ description ? /* @__PURE__ */ jsx44(Text33, { size: "sm", children: description }) : null
2631
2941
  ] }) });
2632
2942
  }
2633
2943
 
2634
2944
  // src/PageHeader.tsx
2635
- import { Box as Box14, Group as Group33, Stack as Stack37, Text as Text33, Title as Title26 } from "@mantine/core";
2636
- import { jsx as jsx43, jsxs as jsxs37 } from "react/jsx-runtime";
2945
+ import { Box as Box14, Group as Group34, Stack as Stack38, Text as Text34, Title as Title26 } from "@mantine/core";
2946
+ import { jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
2637
2947
  function PageHeader({
2638
2948
  title,
2639
2949
  description,
@@ -2644,19 +2954,19 @@ function PageHeader({
2644
2954
  }) {
2645
2955
  const resolvedDescription = description ?? subtitle;
2646
2956
  const eyebrowProps = eyebrowVariant === "ornamental" ? { tt: "uppercase", style: { letterSpacing: "0.12em" } } : {};
2647
- return /* @__PURE__ */ jsxs37(Group33, { justify: "space-between", align: "flex-start", gap: "lg", wrap: "wrap", children: [
2648
- /* @__PURE__ */ jsxs37(Stack37, { gap: "xs", children: [
2649
- eyebrow && /* @__PURE__ */ jsx43(Text33, { size: "xs", fw: 700, c: "dimmed", ...eyebrowProps, children: eyebrow }),
2650
- /* @__PURE__ */ jsx43(Title26, { order: 1, children: title }),
2651
- resolvedDescription && /* @__PURE__ */ jsx43(Text33, { c: "dimmed", maw: 720, children: resolvedDescription })
2957
+ return /* @__PURE__ */ jsxs38(Group34, { justify: "space-between", align: "flex-start", gap: "lg", wrap: "wrap", children: [
2958
+ /* @__PURE__ */ jsxs38(Stack38, { gap: "xs", children: [
2959
+ eyebrow && /* @__PURE__ */ jsx45(Text34, { size: "xs", fw: 700, c: "dimmed", ...eyebrowProps, children: eyebrow }),
2960
+ /* @__PURE__ */ jsx45(Title26, { order: 1, children: title }),
2961
+ resolvedDescription && /* @__PURE__ */ jsx45(Text34, { c: "dimmed", maw: 720, children: resolvedDescription })
2652
2962
  ] }),
2653
- actions ? /* @__PURE__ */ jsx43(Box14, { children: actions }) : null
2963
+ actions ? /* @__PURE__ */ jsx45(Box14, { children: actions }) : null
2654
2964
  ] });
2655
2965
  }
2656
2966
 
2657
2967
  // src/FilterDrawer.tsx
2658
- import { Drawer, Group as Group34, Stack as Stack38, Text as Text34 } from "@mantine/core";
2659
- import { jsx as jsx44, jsxs as jsxs38 } from "react/jsx-runtime";
2968
+ import { Drawer, Group as Group35, Stack as Stack39, Text as Text35 } from "@mantine/core";
2969
+ import { jsx as jsx46, jsxs as jsxs39 } from "react/jsx-runtime";
2660
2970
  function FilterDrawer({
2661
2971
  opened,
2662
2972
  onClose,
@@ -2672,7 +2982,7 @@ function FilterDrawer({
2672
2982
  }) {
2673
2983
  const resolvedPrimaryAction = applyAction ?? primaryAction;
2674
2984
  const resolvedSecondaryAction = resetAction ?? secondaryAction;
2675
- return /* @__PURE__ */ jsx44(
2985
+ return /* @__PURE__ */ jsx46(
2676
2986
  Drawer,
2677
2987
  {
2678
2988
  opened,
@@ -2681,11 +2991,11 @@ function FilterDrawer({
2681
2991
  position: mode === "bottom-sheet" ? "bottom" : "right",
2682
2992
  size: mode === "bottom-sheet" ? "auto" : "md",
2683
2993
  radius: mode === "bottom-sheet" ? "xl" : void 0,
2684
- children: /* @__PURE__ */ jsxs38(Stack38, { gap: "md", children: [
2685
- description ? /* @__PURE__ */ jsx44(Text34, { size: "sm", c: "dimmed", children: description }) : null,
2994
+ children: /* @__PURE__ */ jsxs39(Stack39, { gap: "md", children: [
2995
+ description ? /* @__PURE__ */ jsx46(Text35, { size: "sm", c: "dimmed", children: description }) : null,
2686
2996
  children,
2687
- resolvedPrimaryAction || resolvedSecondaryAction || closeAction ? /* @__PURE__ */ jsxs38(Group34, { justify: "space-between", mt: "md", children: [
2688
- /* @__PURE__ */ jsxs38(Group34, { gap: "sm", children: [
2997
+ resolvedPrimaryAction || resolvedSecondaryAction || closeAction ? /* @__PURE__ */ jsxs39(Group35, { justify: "space-between", mt: "md", children: [
2998
+ /* @__PURE__ */ jsxs39(Group35, { gap: "sm", children: [
2689
2999
  closeAction,
2690
3000
  resolvedSecondaryAction
2691
3001
  ] }),
@@ -2697,8 +3007,8 @@ function FilterDrawer({
2697
3007
  }
2698
3008
 
2699
3009
  // src/PlaceholderPanel.tsx
2700
- import { Badge as Badge18, Card as Card11, Stack as Stack39, Text as Text35, Title as Title27 } from "@mantine/core";
2701
- import { Fragment as Fragment7, jsx as jsx45, jsxs as jsxs39 } from "react/jsx-runtime";
3010
+ import { Badge as Badge20, Card as Card11, Stack as Stack40, Text as Text36, Title as Title27 } from "@mantine/core";
3011
+ import { Fragment as Fragment8, jsx as jsx47, jsxs as jsxs40 } from "react/jsx-runtime";
2702
3012
  function PlaceholderPanel({
2703
3013
  title,
2704
3014
  description,
@@ -2708,16 +3018,16 @@ function PlaceholderPanel({
2708
3018
  mode
2709
3019
  }) {
2710
3020
  if (mode === "live" && children) {
2711
- return /* @__PURE__ */ jsx45(Fragment7, { children });
3021
+ return /* @__PURE__ */ jsx47(Fragment8, { children });
2712
3022
  }
2713
- return /* @__PURE__ */ jsx45(Card11, { children: /* @__PURE__ */ jsxs39(Stack39, { gap: "md", children: [
2714
- badge ? /* @__PURE__ */ jsx45(Badge18, { variant: "light", color: "blue", w: "fit-content", children: badge }) : null,
2715
- /* @__PURE__ */ jsxs39(Stack39, { gap: "xs", children: [
2716
- /* @__PURE__ */ jsx45(Title27, { order: 4, children: title }),
2717
- /* @__PURE__ */ jsx45(Text35, { c: "dimmed", children: description })
3023
+ return /* @__PURE__ */ jsx47(Card11, { children: /* @__PURE__ */ jsxs40(Stack40, { gap: "md", children: [
3024
+ badge ? /* @__PURE__ */ jsx47(Badge20, { variant: "light", color: "blue", w: "fit-content", children: badge }) : null,
3025
+ /* @__PURE__ */ jsxs40(Stack40, { gap: "xs", children: [
3026
+ /* @__PURE__ */ jsx47(Title27, { order: 4, children: title }),
3027
+ /* @__PURE__ */ jsx47(Text36, { c: "dimmed", children: description })
2718
3028
  ] }),
2719
- footer ? /* @__PURE__ */ jsx45(Text35, { size: "sm", children: footer }) : null,
2720
- /* @__PURE__ */ jsx45(
3029
+ footer ? /* @__PURE__ */ jsx47(Text36, { size: "sm", children: footer }) : null,
3030
+ /* @__PURE__ */ jsx47(
2721
3031
  StateBlock,
2722
3032
  {
2723
3033
  variant: "not-enough-data",
@@ -2731,7 +3041,7 @@ function PlaceholderPanel({
2731
3041
 
2732
3042
  // src/SimpleDataTable.tsx
2733
3043
  import { ScrollArea, Table } from "@mantine/core";
2734
- import { jsx as jsx46, jsxs as jsxs40 } from "react/jsx-runtime";
3044
+ import { jsx as jsx48, jsxs as jsxs41 } from "react/jsx-runtime";
2735
3045
  function SimpleDataTable({
2736
3046
  columns,
2737
3047
  rows,
@@ -2742,23 +3052,23 @@ function SimpleDataTable({
2742
3052
  getRowKey
2743
3053
  }) {
2744
3054
  if (error) {
2745
- return /* @__PURE__ */ jsx46(StateBlock, { variant: "error", title: "Unable to load data", description: error, compact: true });
3055
+ return /* @__PURE__ */ jsx48(StateBlock, { variant: "error", title: "Unable to load data", description: error, compact: true });
2746
3056
  }
2747
3057
  if (loading) {
2748
- return /* @__PURE__ */ jsx46(StateBlock, { variant: "loading", title: "Loading data", description: "Please wait while the shared dataset is prepared.", compact: true });
3058
+ return /* @__PURE__ */ jsx48(StateBlock, { variant: "loading", title: "Loading data", description: "Please wait while the shared dataset is prepared.", compact: true });
2749
3059
  }
2750
3060
  if (!rows.length) {
2751
- return /* @__PURE__ */ jsx46(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, compact: true });
3061
+ return /* @__PURE__ */ jsx48(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, compact: true });
2752
3062
  }
2753
- return /* @__PURE__ */ jsx46(ScrollArea, { children: /* @__PURE__ */ jsxs40(Table, { striped: true, highlightOnHover: true, withTableBorder: true, withColumnBorders: true, children: [
2754
- /* @__PURE__ */ jsx46(Table.Thead, { children: /* @__PURE__ */ jsx46(Table.Tr, { children: columns.map((column) => /* @__PURE__ */ jsx46(Table.Th, { children: column.header }, String(column.key))) }) }),
2755
- /* @__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)) })
3063
+ return /* @__PURE__ */ jsx48(ScrollArea, { children: /* @__PURE__ */ jsxs41(Table, { striped: true, highlightOnHover: true, withTableBorder: true, withColumnBorders: true, children: [
3064
+ /* @__PURE__ */ jsx48(Table.Thead, { children: /* @__PURE__ */ jsx48(Table.Tr, { children: columns.map((column) => /* @__PURE__ */ jsx48(Table.Th, { children: column.header }, String(column.key))) }) }),
3065
+ /* @__PURE__ */ jsx48(Table.Tbody, { children: rows.map((row, index) => /* @__PURE__ */ jsx48(Table.Tr, { children: columns.map((column) => /* @__PURE__ */ jsx48(Table.Td, { children: column.render ? column.render(row) : String(row[column.key] ?? "") }, String(column.key))) }, getRowKey ? getRowKey(row, index) : index)) })
2756
3066
  ] }) });
2757
3067
  }
2758
3068
 
2759
3069
  // src/StatsSection.tsx
2760
- import { Stack as Stack40, Title as Title28 } from "@mantine/core";
2761
- import { jsx as jsx47, jsxs as jsxs41 } from "react/jsx-runtime";
3070
+ import { Stack as Stack41, Title as Title28 } from "@mantine/core";
3071
+ import { jsx as jsx49, jsxs as jsxs42 } from "react/jsx-runtime";
2762
3072
  function StatsSection({
2763
3073
  title,
2764
3074
  loading = false,
@@ -2770,11 +3080,11 @@ function StatsSection({
2770
3080
  }) {
2771
3081
  let content = children;
2772
3082
  if (error) {
2773
- content = /* @__PURE__ */ jsx47(StateBlock, { variant: "error", title: "Unable to load statistics", description: error, compact: true });
3083
+ content = /* @__PURE__ */ jsx49(StateBlock, { variant: "error", title: "Unable to load statistics", description: error, compact: true });
2774
3084
  } else if (loading) {
2775
- content = /* @__PURE__ */ jsx47(StateBlock, { variant: "loading", title: "Loading statistics", description: "This shared data surface is still synchronizing.", compact: true });
3085
+ content = /* @__PURE__ */ jsx49(StateBlock, { variant: "loading", title: "Loading statistics", description: "This shared data surface is still synchronizing.", compact: true });
2776
3086
  } else if (belowThreshold) {
2777
- content = /* @__PURE__ */ jsx47(
3087
+ content = /* @__PURE__ */ jsx49(
2778
3088
  StateBlock,
2779
3089
  {
2780
3090
  variant: "not-enough-data",
@@ -2784,14 +3094,380 @@ function StatsSection({
2784
3094
  }
2785
3095
  );
2786
3096
  } else if (placeholder) {
2787
- content = /* @__PURE__ */ jsx47(PlaceholderPanel, { ...placeholder, mode: "placeholder" });
3097
+ content = /* @__PURE__ */ jsx49(PlaceholderPanel, { ...placeholder, mode: "placeholder" });
2788
3098
  }
2789
- return /* @__PURE__ */ jsxs41(Stack40, { gap: "md", children: [
2790
- /* @__PURE__ */ jsx47(Title28, { order: 3, children: title }),
3099
+ return /* @__PURE__ */ jsxs42(Stack41, { gap: "md", children: [
3100
+ /* @__PURE__ */ jsx49(Title28, { order: 3, children: title }),
2791
3101
  content
2792
3102
  ] });
2793
3103
  }
2794
3104
 
3105
+ // src/PeriodSelector.tsx
3106
+ import { Badge as Badge21, Group as Group36, Stack as Stack42, Text as Text37 } from "@mantine/core";
3107
+ import { jsx as jsx50, jsxs as jsxs43 } from "react/jsx-runtime";
3108
+ function PeriodSelector({
3109
+ label,
3110
+ description,
3111
+ value,
3112
+ options,
3113
+ onChange,
3114
+ timezone,
3115
+ scope,
3116
+ helperText,
3117
+ error,
3118
+ stale = false,
3119
+ filtered = false,
3120
+ disabled = false
3121
+ }) {
3122
+ const selectedOption = options.find((option) => option.value === value);
3123
+ return /* @__PURE__ */ jsx50(FormField, { label, description, error, children: /* @__PURE__ */ jsxs43(Stack42, { gap: "sm", children: [
3124
+ /* @__PURE__ */ jsx50(
3125
+ "select",
3126
+ {
3127
+ "aria-label": typeof label === "string" ? label : "Reporting period",
3128
+ value,
3129
+ disabled,
3130
+ onChange: (event) => onChange?.(event.currentTarget.value),
3131
+ children: options.map((option) => /* @__PURE__ */ jsx50("option", { value: option.value, children: option.label }, option.value))
3132
+ }
3133
+ ),
3134
+ /* @__PURE__ */ jsxs43(Group36, { gap: "xs", wrap: "wrap", children: [
3135
+ timezone ? /* @__PURE__ */ jsxs43(Badge21, { variant: "outline", color: "gray", children: [
3136
+ "Timezone: ",
3137
+ timezone
3138
+ ] }) : null,
3139
+ filtered ? /* @__PURE__ */ jsx50(Badge21, { variant: "light", color: "blue", children: "Filtered" }) : null,
3140
+ stale ? /* @__PURE__ */ jsx50(Badge21, { variant: "light", color: "orange", children: "Stale data" }) : null,
3141
+ scope ? /* @__PURE__ */ jsx50(Badge21, { variant: "outline", color: "gray", children: scope }) : null
3142
+ ] }),
3143
+ selectedOption?.description ? /* @__PURE__ */ jsx50(Text37, { size: "sm", c: "dimmed", children: selectedOption.description }) : null,
3144
+ helperText ? /* @__PURE__ */ jsx50(Text37, { size: "sm", c: "dimmed", children: helperText }) : null
3145
+ ] }) });
3146
+ }
3147
+
3148
+ // src/EvidencePanel.tsx
3149
+ import { Alert as Alert2, Badge as Badge22, Group as Group37, Paper as Paper13, Stack as Stack43, Text as Text38, Title as Title29 } from "@mantine/core";
3150
+ import { jsx as jsx51, jsxs as jsxs44 } from "react/jsx-runtime";
3151
+ var stateTone2 = {
3152
+ current: { label: "Current", color: "teal" },
3153
+ stale: { label: "Stale", color: "orange" },
3154
+ partial: { label: "Partial data", color: "yellow" },
3155
+ "permission-limited": { label: "Permission limited", color: "grape" },
3156
+ loading: { label: "Loading", color: "blue" },
3157
+ empty: { label: "No evidence", color: "gray" },
3158
+ error: { label: "Needs attention", color: "red" }
3159
+ };
3160
+ function EvidencePanel({
3161
+ title,
3162
+ description,
3163
+ source,
3164
+ freshness,
3165
+ confidence,
3166
+ state = "current",
3167
+ evidenceCount,
3168
+ permissionNote,
3169
+ retryAction,
3170
+ details,
3171
+ children
3172
+ }) {
3173
+ const tone = stateTone2[state];
3174
+ const isProblem = state === "error" || state === "permission-limited" || state === "stale" || state === "partial";
3175
+ return /* @__PURE__ */ jsx51(Paper13, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs44(Stack43, { gap: "md", children: [
3176
+ /* @__PURE__ */ jsxs44(Group37, { justify: "space-between", align: "flex-start", gap: "sm", children: [
3177
+ /* @__PURE__ */ jsxs44(Stack43, { gap: 4, children: [
3178
+ /* @__PURE__ */ jsx51(Title29, { order: 4, children: title }),
3179
+ description ? /* @__PURE__ */ jsx51(Text38, { size: "sm", c: "dimmed", children: description }) : null
3180
+ ] }),
3181
+ /* @__PURE__ */ jsx51(Badge22, { variant: "light", color: tone.color, children: tone.label })
3182
+ ] }),
3183
+ /* @__PURE__ */ jsxs44(Group37, { gap: "xs", wrap: "wrap", children: [
3184
+ source ? /* @__PURE__ */ jsxs44(Badge22, { variant: "outline", color: "gray", children: [
3185
+ "Source: ",
3186
+ source
3187
+ ] }) : null,
3188
+ freshness ? /* @__PURE__ */ jsxs44(Badge22, { variant: "outline", color: "gray", children: [
3189
+ "Freshness: ",
3190
+ freshness
3191
+ ] }) : null,
3192
+ confidence ? /* @__PURE__ */ jsxs44(Badge22, { variant: "outline", color: "gray", children: [
3193
+ "Confidence: ",
3194
+ confidence
3195
+ ] }) : null,
3196
+ typeof evidenceCount === "number" ? /* @__PURE__ */ jsxs44(Badge22, { variant: "outline", color: "gray", children: [
3197
+ "Evidence: ",
3198
+ evidenceCount
3199
+ ] }) : null
3200
+ ] }),
3201
+ permissionNote ? /* @__PURE__ */ jsx51(Alert2, { color: isProblem ? tone.color : "gray", variant: "light", children: permissionNote }) : null,
3202
+ details,
3203
+ children,
3204
+ retryAction
3205
+ ] }) });
3206
+ }
3207
+
3208
+ // src/ChartTokenPanel.tsx
3209
+ import { Badge as Badge23, Group as Group38, Paper as Paper14, Stack as Stack44, Text as Text39, Title as Title30 } from "@mantine/core";
3210
+ import { jsx as jsx52, jsxs as jsxs45 } from "react/jsx-runtime";
3211
+ function ChartTokenPanel({
3212
+ title,
3213
+ description,
3214
+ summary,
3215
+ state = "ready",
3216
+ legend = [],
3217
+ children,
3218
+ tableFallback,
3219
+ retryAction
3220
+ }) {
3221
+ if (state === "loading") {
3222
+ return /* @__PURE__ */ jsx52(StateBlock, { variant: "loading", title: "Loading chart", description: summary, compact: true, action: retryAction });
3223
+ }
3224
+ if (state === "empty") {
3225
+ return /* @__PURE__ */ jsx52(StateBlock, { variant: "empty", title: "No chart data", description: summary, compact: true, action: retryAction });
3226
+ }
3227
+ if (state === "below-threshold") {
3228
+ return /* @__PURE__ */ jsx52(StateBlock, { variant: "not-enough-data", title: "Not enough data for chart", description: summary, compact: true, action: retryAction });
3229
+ }
3230
+ if (state === "error") {
3231
+ return /* @__PURE__ */ jsx52(StateBlock, { variant: "error", title: "Unable to load chart", description: summary, compact: true, action: retryAction });
3232
+ }
3233
+ return /* @__PURE__ */ jsx52(Paper14, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs45(Stack44, { gap: "md", children: [
3234
+ /* @__PURE__ */ jsxs45(Group38, { justify: "space-between", align: "flex-start", gap: "sm", children: [
3235
+ /* @__PURE__ */ jsxs45(Stack44, { gap: 4, children: [
3236
+ /* @__PURE__ */ jsx52(Title30, { order: 4, children: title }),
3237
+ description ? /* @__PURE__ */ jsx52(Text39, { size: "sm", c: "dimmed", children: description }) : null
3238
+ ] }),
3239
+ state !== "ready" ? /* @__PURE__ */ jsx52(Badge23, { variant: "light", color: state === "permission-limited" ? "grape" : "yellow", children: state.replace("-", " ") }) : null
3240
+ ] }),
3241
+ /* @__PURE__ */ jsx52(Text39, { size: "sm", children: summary }),
3242
+ legend.length ? /* @__PURE__ */ jsx52(Group38, { gap: "xs", wrap: "wrap", "aria-label": "Chart legend", children: legend.map((item, index) => /* @__PURE__ */ jsxs45(Badge23, { variant: "outline", color: "gray", title: typeof item.description === "string" ? item.description : void 0, children: [
3243
+ item.label,
3244
+ ": ",
3245
+ item.token
3246
+ ] }, `${String(item.label)}-${index}`)) }) : null,
3247
+ children,
3248
+ tableFallback ? /* @__PURE__ */ jsxs45(Stack44, { gap: "xs", children: [
3249
+ /* @__PURE__ */ jsx52(Text39, { size: "sm", fw: 600, children: "Accessible data fallback" }),
3250
+ tableFallback
3251
+ ] }) : null
3252
+ ] }) });
3253
+ }
3254
+
3255
+ // src/GdsChart.tsx
3256
+ import { Badge as Badge24, Group as Group39, Paper as Paper15, Stack as Stack45, Text as Text40 } from "@mantine/core";
3257
+ import { jsx as jsx53, jsxs as jsxs46 } from "react/jsx-runtime";
3258
+ function GdsChart({ type, title, summary, data, state = "ready", retryAction }) {
3259
+ const tableRows = data.map((item) => ({ label: item.label, value: String(item.value), group: item.group ?? "-" }));
3260
+ return /* @__PURE__ */ jsx53(
3261
+ ChartTokenPanel,
3262
+ {
3263
+ title,
3264
+ summary,
3265
+ state,
3266
+ retryAction,
3267
+ legend: [
3268
+ { label: "Primary", token: "var(--mantine-color-blue-6)" },
3269
+ { label: "Secondary", token: "var(--mantine-color-teal-6)" }
3270
+ ],
3271
+ tableFallback: /* @__PURE__ */ jsx53(
3272
+ SimpleDataTable,
3273
+ {
3274
+ columns: [
3275
+ { key: "label", header: "Label" },
3276
+ { key: "value", header: "Value" },
3277
+ { key: "group", header: "Group" }
3278
+ ],
3279
+ rows: tableRows
3280
+ }
3281
+ ),
3282
+ children: /* @__PURE__ */ jsx53(Paper15, { withBorder: true, radius: "md", p: "md", children: /* @__PURE__ */ jsxs46(Stack45, { gap: "sm", children: [
3283
+ /* @__PURE__ */ jsxs46(Group39, { justify: "space-between", children: [
3284
+ /* @__PURE__ */ jsx53(Text40, { fw: 700, children: title }),
3285
+ /* @__PURE__ */ jsx53(Badge24, { variant: "light", children: type })
3286
+ ] }),
3287
+ /* @__PURE__ */ jsx53(Text40, { size: "sm", c: "dimmed", children: summary }),
3288
+ /* @__PURE__ */ jsxs46(Text40, { size: "xs", c: "dimmed", children: [
3289
+ "Type lane: ",
3290
+ type
3291
+ ] })
3292
+ ] }) })
3293
+ }
3294
+ );
3295
+ }
3296
+
3297
+ // src/LayoutBlocks.tsx
3298
+ import { Alert as Alert3, Card as Card12, SimpleGrid as SimpleGrid7, Stack as Stack46, Text as Text41, Title as Title31 } from "@mantine/core";
3299
+ import { jsx as jsx54, jsxs as jsxs47 } from "react/jsx-runtime";
3300
+ function renderBlock(block) {
3301
+ switch (block.type) {
3302
+ case "hero":
3303
+ return /* @__PURE__ */ jsx54(SectionPanel, { title: String(block.props.title ?? "Hero"), description: String(block.props.description ?? "Hero block"), children: /* @__PURE__ */ jsx54(Text41, { children: String(block.props.body ?? "Composable hero content") }) });
3304
+ case "stats":
3305
+ return /* @__PURE__ */ jsx54(SimpleGrid7, { cols: { base: 1, md: 3 }, children: block.props.items?.map((item) => /* @__PURE__ */ jsx54(Card12, { withBorder: true, children: /* @__PURE__ */ jsxs47(Stack46, { gap: 2, children: [
3306
+ /* @__PURE__ */ jsx54(Text41, { size: "sm", c: "dimmed", children: item.label }),
3307
+ /* @__PURE__ */ jsx54(Title31, { order: 4, children: item.value })
3308
+ ] }) }, `${block.id}-${item.label}`)) ?? null });
3309
+ case "cards-grid":
3310
+ return /* @__PURE__ */ jsx54(SimpleGrid7, { cols: { base: 1, md: 2 }, children: block.props.items?.map((item) => /* @__PURE__ */ jsx54(ListingCard, { title: item.title, description: item.description, size: "sm" }, `${block.id}-${item.title}`)) ?? null });
3311
+ case "chart":
3312
+ return /* @__PURE__ */ jsx54(
3313
+ GdsChart,
3314
+ {
3315
+ type: block.props.chartType ?? "bar",
3316
+ title: String(block.props.title ?? "Chart block"),
3317
+ summary: String(block.props.summary ?? "Block-composed chart summary"),
3318
+ data: block.props.data ?? [{ label: "A", value: 10 }]
3319
+ }
3320
+ );
3321
+ case "cta":
3322
+ return /* @__PURE__ */ jsx54(
3323
+ ActionBar,
3324
+ {
3325
+ primary: { action: "save" },
3326
+ secondary: [{ action: "cancel" }],
3327
+ tertiary: [{ action: "preview" }]
3328
+ }
3329
+ );
3330
+ case "footer":
3331
+ return /* @__PURE__ */ jsx54(Text41, { size: "sm", c: "dimmed", children: String(block.props.text ?? "Footer block") });
3332
+ default:
3333
+ return /* @__PURE__ */ jsx54(Alert3, { color: "red", children: "Unsupported block type." });
3334
+ }
3335
+ }
3336
+ function renderGdsLayout(schema) {
3337
+ return /* @__PURE__ */ jsx54(Stack46, { gap: "lg", children: schema.blocks.map((block) => /* @__PURE__ */ jsx54("div", { children: renderBlock(block) }, block.id)) });
3338
+ }
3339
+
3340
+ // src/ReportingSection.tsx
3341
+ import { Group as Group40, Paper as Paper16, Stack as Stack47, Text as Text42, Title as Title32 } from "@mantine/core";
3342
+ import { jsx as jsx55, jsxs as jsxs48 } from "react/jsx-runtime";
3343
+ function ReportingSection({
3344
+ title,
3345
+ description,
3346
+ state = "ready",
3347
+ periodControl,
3348
+ evidence,
3349
+ metrics,
3350
+ chart,
3351
+ table,
3352
+ action,
3353
+ stateMessage,
3354
+ retryAction
3355
+ }) {
3356
+ let stateBlock = null;
3357
+ if (state === "loading") {
3358
+ stateBlock = /* @__PURE__ */ jsx55(StateBlock, { variant: "loading", title: "Loading report", description: stateMessage ?? "The reporting surface is synchronizing.", compact: true });
3359
+ } else if (state === "empty") {
3360
+ stateBlock = /* @__PURE__ */ jsx55(StateBlock, { variant: "empty", title: "No report data", description: stateMessage ?? "No records match this reporting scope yet.", compact: true });
3361
+ } else if (state === "error") {
3362
+ stateBlock = /* @__PURE__ */ jsx55(StateBlock, { variant: "error", title: "Unable to load report", description: stateMessage ?? "The report could not be prepared.", compact: true, action: retryAction });
3363
+ } else if (state === "below-threshold") {
3364
+ stateBlock = /* @__PURE__ */ jsx55(StateBlock, { variant: "not-enough-data", title: "Not enough data", description: stateMessage ?? "This report is hidden until the threshold is met.", compact: true });
3365
+ } else if (state === "permission-limited") {
3366
+ stateBlock = /* @__PURE__ */ jsx55(StateBlock, { variant: "permission", title: "Permission-limited report", description: stateMessage ?? "Some evidence is hidden by access rules.", compact: true, action: retryAction });
3367
+ }
3368
+ return /* @__PURE__ */ jsx55(Paper16, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs48(Stack47, { gap: "lg", children: [
3369
+ /* @__PURE__ */ jsxs48(Group40, { justify: "space-between", align: "flex-start", gap: "md", children: [
3370
+ /* @__PURE__ */ jsxs48(Stack47, { gap: 4, children: [
3371
+ /* @__PURE__ */ jsx55(Title32, { order: 3, children: title }),
3372
+ description ? /* @__PURE__ */ jsx55(Text42, { size: "sm", c: "dimmed", children: description }) : null
3373
+ ] }),
3374
+ action
3375
+ ] }),
3376
+ periodControl,
3377
+ (state === "partial" || state === "stale" || state === "filtered") && stateMessage ? /* @__PURE__ */ jsx55(StateBlock, { variant: "info", title: state === "partial" ? "Partial report" : state === "stale" ? "Stale report" : "Filtered report", description: stateMessage, compact: true }) : null,
3378
+ stateBlock,
3379
+ metrics,
3380
+ chart,
3381
+ table,
3382
+ evidence
3383
+ ] }) });
3384
+ }
3385
+
3386
+ // src/Notifications.tsx
3387
+ import { Alert as Alert4, Badge as Badge25, Button as Button6, Group as Group41, Paper as Paper17, Stack as Stack48, Text as Text43, Title as Title33 } from "@mantine/core";
3388
+ import { jsx as jsx56, jsxs as jsxs49 } from "react/jsx-runtime";
3389
+ var notificationColorMap = {
3390
+ success: "teal",
3391
+ error: "red",
3392
+ warning: "yellow",
3393
+ info: "blue",
3394
+ neutral: "gray"
3395
+ };
3396
+ function severityToStateVariant(severity) {
3397
+ if (severity === "success") return "success";
3398
+ if (severity === "error") return "error";
3399
+ if (severity === "warning") return "not-enough-data";
3400
+ if (severity === "neutral") return "disabled";
3401
+ return "info";
3402
+ }
3403
+ function InlineAlert({
3404
+ title,
3405
+ message,
3406
+ severity = "info",
3407
+ action
3408
+ }) {
3409
+ return /* @__PURE__ */ jsx56(
3410
+ Alert4,
3411
+ {
3412
+ variant: "light",
3413
+ color: notificationColorMap[severity],
3414
+ title,
3415
+ icon: /* @__PURE__ */ jsx56(GdsIcons.Info, { size: "1rem" }),
3416
+ role: severity === "error" ? "alert" : "status",
3417
+ children: /* @__PURE__ */ jsxs49(Stack48, { gap: "xs", children: [
3418
+ message ? /* @__PURE__ */ jsx56(Text43, { size: "sm", children: message }) : null,
3419
+ action
3420
+ ] })
3421
+ }
3422
+ );
3423
+ }
3424
+ function BannerNotice({
3425
+ eyebrow,
3426
+ title,
3427
+ message,
3428
+ severity = "info",
3429
+ action
3430
+ }) {
3431
+ return /* @__PURE__ */ jsx56(Paper17, { withBorder: true, radius: "lg", p: "md", children: /* @__PURE__ */ jsxs49(Stack48, { gap: "xs", children: [
3432
+ /* @__PURE__ */ jsxs49(Group41, { justify: "space-between", align: "center", children: [
3433
+ /* @__PURE__ */ jsxs49(Group41, { gap: "xs", children: [
3434
+ eyebrow ? /* @__PURE__ */ jsx56(Badge25, { variant: "light", children: eyebrow }) : null,
3435
+ /* @__PURE__ */ jsx56(Badge25, { variant: "light", color: notificationColorMap[severity], children: severityToStateVariant(severity).replace("-", " ") })
3436
+ ] }),
3437
+ action
3438
+ ] }),
3439
+ /* @__PURE__ */ jsx56(Title33, { order: 4, children: title }),
3440
+ message ? /* @__PURE__ */ jsx56(Text43, { size: "sm", c: "dimmed", children: message }) : null
3441
+ ] }) });
3442
+ }
3443
+ function NotificationCenterView({
3444
+ notifications,
3445
+ onDismiss,
3446
+ onClear,
3447
+ title = "Notifications",
3448
+ emptyMessage = "No active notifications."
3449
+ }) {
3450
+ return /* @__PURE__ */ jsx56(Paper17, { withBorder: true, radius: "lg", p: "md", children: /* @__PURE__ */ jsxs49(Stack48, { gap: "md", children: [
3451
+ /* @__PURE__ */ jsxs49(Group41, { justify: "space-between", align: "center", children: [
3452
+ /* @__PURE__ */ jsx56(Title33, { order: 4, children: title }),
3453
+ /* @__PURE__ */ jsx56(Button6, { size: "xs", variant: "subtle", onClick: onClear, disabled: notifications.length === 0 || !onClear, children: "Clear all" })
3454
+ ] }),
3455
+ notifications.length === 0 ? /* @__PURE__ */ jsx56(Text43, { size: "sm", c: "dimmed", children: emptyMessage }) : /* @__PURE__ */ jsx56(Stack48, { gap: "sm", children: notifications.map((item) => /* @__PURE__ */ jsx56(
3456
+ InlineAlert,
3457
+ {
3458
+ severity: item.severity,
3459
+ title: item.title,
3460
+ message: item.message,
3461
+ action: /* @__PURE__ */ jsxs49(Group41, { gap: "xs", children: [
3462
+ item.actions?.map((action) => /* @__PURE__ */ jsx56(Button6, { size: "xs", variant: "default", onClick: action.onClick, children: action.label }, action.id)),
3463
+ /* @__PURE__ */ jsx56(Button6, { size: "xs", variant: "subtle", onClick: () => onDismiss?.(item.id), disabled: !onDismiss, children: "Dismiss" })
3464
+ ] })
3465
+ },
3466
+ item.id
3467
+ )) })
3468
+ ] }) });
3469
+ }
3470
+
2795
3471
  // src/locales/ar.ts
2796
3472
  var ar = {
2797
3473
  "gds.action.settings": "\u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A",
@@ -4097,6 +4773,8 @@ function getGdsMessages(locale) {
4097
4773
 
4098
4774
  export {
4099
4775
  StatusBadge,
4776
+ LabelTag,
4777
+ CountBadge,
4100
4778
  EmptyState,
4101
4779
  GdsIcons,
4102
4780
  GdsVocabulary,
@@ -4115,6 +4793,8 @@ export {
4115
4793
  ReferenceSection,
4116
4794
  ActionBar,
4117
4795
  FormField,
4796
+ gdsCardSizePaddingMap,
4797
+ gdsCardTitleOrderMap,
4118
4798
  ListingCard,
4119
4799
  StateBlock,
4120
4800
  ChoiceChip,
@@ -4130,6 +4810,11 @@ export {
4130
4810
  DataToolbar,
4131
4811
  BrowseSurface,
4132
4812
  DetailProfileShell,
4813
+ AsyncSurface,
4814
+ ActiveFilterChips,
4815
+ ResultSummary,
4816
+ SortMenu,
4817
+ BulkActionsBar,
4133
4818
  PublicNav,
4134
4819
  PublicShell,
4135
4820
  PublicSiteFooter,
@@ -4137,6 +4822,8 @@ export {
4137
4822
  AuthShell,
4138
4823
  PROVIDER_IDENTITY_REGISTRY,
4139
4824
  getProviderIdentityLabel,
4825
+ getSupportedProviderIdentityIds,
4826
+ getProviderIdentityPolicy,
4140
4827
  ProviderIdentityButton,
4141
4828
  ProviderIdentityButtonGroup,
4142
4829
  SocialAuthButtons,
@@ -4156,6 +4843,15 @@ export {
4156
4843
  PlaceholderPanel,
4157
4844
  SimpleDataTable,
4158
4845
  StatsSection,
4846
+ PeriodSelector,
4847
+ EvidencePanel,
4848
+ ChartTokenPanel,
4849
+ GdsChart,
4850
+ renderGdsLayout,
4851
+ ReportingSection,
4852
+ InlineAlert,
4853
+ BannerNotice,
4854
+ NotificationCenterView,
4159
4855
  ar,
4160
4856
  de,
4161
4857
  en,