@doneisbetter/gds-core 2.6.6 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-4YTMKBGW.mjs → chunk-NBCULITN.mjs} +303 -87
- package/dist/{chunk-IAP3JU55.mjs → chunk-P7ICTEEB.mjs} +762 -275
- package/dist/client.d.mts +29 -5
- package/dist/client.d.ts +29 -5
- package/dist/client.js +1105 -385
- package/dist/client.mjs +28 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1105 -385
- package/dist/index.mjs +28 -2
- package/dist/{server-CF4gCYQ-.d.mts → server-woziKWie.d.mts} +195 -10
- package/dist/{server-CF4gCYQ-.d.ts → server-woziKWie.d.ts} +195 -10
- package/dist/server.d.mts +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +776 -273
- package/dist/server.mjs +25 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -27,6 +27,7 @@ __export(index_exports, {
|
|
|
27
27
|
ArticleShell: () => ArticleShell,
|
|
28
28
|
AuthShell: () => AuthShell,
|
|
29
29
|
BrowseSurface: () => BrowseSurface,
|
|
30
|
+
ChartTokenPanel: () => ChartTokenPanel,
|
|
30
31
|
ChoiceChip: () => ChoiceChip,
|
|
31
32
|
ConfirmDialog: () => ConfirmDialog,
|
|
32
33
|
ConsumerDashboardGrid: () => ConsumerDashboardGrid,
|
|
@@ -37,9 +38,11 @@ __export(index_exports, {
|
|
|
37
38
|
DiscoveryShell: () => DiscoveryShell,
|
|
38
39
|
DocsCodeBlock: () => DocsCodeBlock,
|
|
39
40
|
DocsPageShell: () => DocsPageShell,
|
|
41
|
+
DocsShell: () => DocsShell,
|
|
40
42
|
EditorialCard: () => EditorialCard,
|
|
41
43
|
EditorialHero: () => EditorialHero,
|
|
42
44
|
EmptyState: () => EmptyState,
|
|
45
|
+
EvidencePanel: () => EvidencePanel,
|
|
43
46
|
FeatureBand: () => FeatureBand,
|
|
44
47
|
FilterDrawer: () => FilterDrawer,
|
|
45
48
|
FoodMenuSection: () => FoodMenuSection,
|
|
@@ -52,11 +55,15 @@ __export(index_exports, {
|
|
|
52
55
|
MediaCard: () => MediaCard,
|
|
53
56
|
MediaField: () => MediaField,
|
|
54
57
|
MetricCard: () => MetricCard,
|
|
58
|
+
PROVIDER_IDENTITY_REGISTRY: () => PROVIDER_IDENTITY_REGISTRY,
|
|
55
59
|
PageHeader: () => PageHeader,
|
|
60
|
+
PeriodSelector: () => PeriodSelector,
|
|
56
61
|
PlaceholderPanel: () => PlaceholderPanel,
|
|
57
62
|
PlaybackSurface: () => PlaybackSurface,
|
|
58
63
|
ProductCard: () => ProductCard,
|
|
59
64
|
ProgressCard: () => ProgressCard,
|
|
65
|
+
ProviderIdentityButton: () => ProviderIdentityButton,
|
|
66
|
+
ProviderIdentityButtonGroup: () => ProviderIdentityButtonGroup,
|
|
60
67
|
PublicBrandFooter: () => PublicBrandFooter,
|
|
61
68
|
PublicFlowShell: () => PublicFlowShell,
|
|
62
69
|
PublicFoodCard: () => PublicFoodCard,
|
|
@@ -68,6 +75,7 @@ __export(index_exports, {
|
|
|
68
75
|
ReferenceLocaleNotice: () => ReferenceLocaleNotice,
|
|
69
76
|
ReferenceSection: () => ReferenceSection,
|
|
70
77
|
ReferenceThemeExplorer: () => ReferenceThemeExplorer,
|
|
78
|
+
ReportingSection: () => ReportingSection,
|
|
71
79
|
SectionPanel: () => SectionPanel,
|
|
72
80
|
SemanticButton: () => SemanticButton,
|
|
73
81
|
ShareButtonGroup: () => ShareButtonGroup,
|
|
@@ -89,14 +97,19 @@ __export(index_exports, {
|
|
|
89
97
|
fr: () => fr,
|
|
90
98
|
gdsLocales: () => gdsLocales,
|
|
91
99
|
getGdsMessages: () => getGdsMessages,
|
|
100
|
+
getProviderIdentityLabel: () => getProviderIdentityLabel,
|
|
101
|
+
getProviderIdentityPolicy: () => getProviderIdentityPolicy,
|
|
92
102
|
getSemanticActionConfig: () => getSemanticActionConfig,
|
|
93
103
|
getSemanticActionLabel: () => getSemanticActionLabel,
|
|
104
|
+
getSupportedProviderIdentityIds: () => getSupportedProviderIdentityIds,
|
|
94
105
|
he: () => he,
|
|
95
106
|
hu: () => hu,
|
|
107
|
+
isPresentationMode: () => isPresentationMode,
|
|
96
108
|
it: () => it,
|
|
97
109
|
mergeGdsVocabularyPacks: () => mergeGdsVocabularyPacks,
|
|
98
110
|
resolveAccentPanelStyles: () => resolveAccentPanelStyles,
|
|
99
111
|
resolveSemanticActionConfig: () => resolveSemanticActionConfig,
|
|
112
|
+
resolveSurfacePresentationStyles: () => resolveSurfacePresentationStyles,
|
|
100
113
|
ru: () => ru
|
|
101
114
|
});
|
|
102
115
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -574,6 +587,51 @@ var import_core9 = require("@mantine/core");
|
|
|
574
587
|
|
|
575
588
|
// src/SectionPanel.tsx
|
|
576
589
|
var import_core8 = require("@mantine/core");
|
|
590
|
+
|
|
591
|
+
// src/SurfacePresentation.ts
|
|
592
|
+
var toCssLength = (value) => {
|
|
593
|
+
if (typeof value === "number") {
|
|
594
|
+
return `${value}px`;
|
|
595
|
+
}
|
|
596
|
+
return value;
|
|
597
|
+
};
|
|
598
|
+
function resolveSurfacePresentationStyles(props) {
|
|
599
|
+
const {
|
|
600
|
+
presentation = "inline",
|
|
601
|
+
minHeight,
|
|
602
|
+
contentAlign,
|
|
603
|
+
contentJustify
|
|
604
|
+
} = props;
|
|
605
|
+
if (presentation === "inline") {
|
|
606
|
+
return {
|
|
607
|
+
minHeight: toCssLength(minHeight)
|
|
608
|
+
};
|
|
609
|
+
}
|
|
610
|
+
const align = contentAlign ?? "center";
|
|
611
|
+
const justify = contentJustify ?? (presentation === "centered" ? "center" : "start");
|
|
612
|
+
if (presentation === "fill") {
|
|
613
|
+
return {
|
|
614
|
+
minHeight: toCssLength(minHeight),
|
|
615
|
+
display: "flex",
|
|
616
|
+
flex: 1,
|
|
617
|
+
flexDirection: "column",
|
|
618
|
+
alignItems: align === "center" ? "center" : "flex-start",
|
|
619
|
+
justifyContent: justify === "center" ? "center" : "flex-start"
|
|
620
|
+
};
|
|
621
|
+
}
|
|
622
|
+
return {
|
|
623
|
+
minHeight: toCssLength(minHeight),
|
|
624
|
+
display: "flex",
|
|
625
|
+
flexDirection: "column",
|
|
626
|
+
alignItems: align === "center" ? "center" : "flex-start",
|
|
627
|
+
justifyContent: justify === "center" ? "center" : "flex-start"
|
|
628
|
+
};
|
|
629
|
+
}
|
|
630
|
+
function isPresentationMode(value) {
|
|
631
|
+
return value === "inline" || value === "centered" || value === "fill";
|
|
632
|
+
}
|
|
633
|
+
|
|
634
|
+
// src/SectionPanel.tsx
|
|
577
635
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
578
636
|
var toneBackgrounds = {
|
|
579
637
|
default: "var(--mantine-color-body)",
|
|
@@ -588,8 +646,18 @@ function SectionPanel({
|
|
|
588
646
|
children,
|
|
589
647
|
tone = "default",
|
|
590
648
|
id,
|
|
591
|
-
divided = true
|
|
649
|
+
divided = true,
|
|
650
|
+
presentation = "inline",
|
|
651
|
+
minHeight,
|
|
652
|
+
contentAlign,
|
|
653
|
+
contentJustify
|
|
592
654
|
}) {
|
|
655
|
+
const bodyLayout = resolveSurfacePresentationStyles({
|
|
656
|
+
presentation,
|
|
657
|
+
minHeight,
|
|
658
|
+
contentAlign,
|
|
659
|
+
contentJustify
|
|
660
|
+
});
|
|
593
661
|
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Paper, { id, withBorder: true, radius: "xl", p: "lg", style: { background: toneBackgrounds[tone] }, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core8.Stack, { gap: "md", children: [
|
|
594
662
|
title || description || action ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
|
|
595
663
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core8.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
|
|
@@ -601,7 +669,7 @@ function SectionPanel({
|
|
|
601
669
|
] }),
|
|
602
670
|
divided ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Divider, {}) : null
|
|
603
671
|
] }) : null,
|
|
604
|
-
children
|
|
672
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Box, { style: bodyLayout, children })
|
|
605
673
|
] }) });
|
|
606
674
|
}
|
|
607
675
|
|
|
@@ -829,20 +897,34 @@ function StateBlock({
|
|
|
829
897
|
description,
|
|
830
898
|
action,
|
|
831
899
|
icon,
|
|
832
|
-
compact = false
|
|
900
|
+
compact = false,
|
|
901
|
+
presentation = "inline",
|
|
902
|
+
minHeight,
|
|
903
|
+
contentAlign,
|
|
904
|
+
contentJustify
|
|
833
905
|
}) {
|
|
834
906
|
const config = variantConfig[variant];
|
|
907
|
+
const layout = resolveSurfacePresentationStyles({
|
|
908
|
+
presentation,
|
|
909
|
+
minHeight,
|
|
910
|
+
contentAlign,
|
|
911
|
+
contentJustify
|
|
912
|
+
});
|
|
913
|
+
const centeredText = presentation !== "inline" ? (contentAlign ?? "center") === "center" : !compact;
|
|
914
|
+
const centeredAlign = presentation !== "inline" ? contentAlign ?? "center" : "start";
|
|
915
|
+
const headingAlign = presentation === "inline" ? compact ? "flex-start" : "center" : centeredAlign === "center" ? "center" : "flex-start";
|
|
835
916
|
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
836
917
|
import_core13.Stack,
|
|
837
918
|
{
|
|
838
|
-
align:
|
|
839
|
-
justify: "center",
|
|
919
|
+
align: headingAlign,
|
|
920
|
+
justify: presentation === "inline" ? "center" : void 0,
|
|
840
921
|
gap: "md",
|
|
841
922
|
py: compact ? "md" : "xl",
|
|
842
|
-
ta:
|
|
923
|
+
ta: centeredText ? "center" : "left",
|
|
924
|
+
style: layout,
|
|
843
925
|
children: [
|
|
844
926
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.ThemeIcon, { variant: "light", color: config.color, size: compact ? "lg" : "xl", radius: "xl", children: icon ?? config.icon }),
|
|
845
|
-
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Stack, { gap: 6, align:
|
|
927
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Stack, { gap: 6, align: headingAlign, children: [
|
|
846
928
|
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Title, { order: compact ? 4 : 3, children: title }),
|
|
847
929
|
description ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Text, { c: "dimmed", maw: compact ? void 0 : 480, children: description }) : null
|
|
848
930
|
] }),
|
|
@@ -855,42 +937,77 @@ function StateBlock({
|
|
|
855
937
|
// src/ReferenceThemeExplorer.tsx
|
|
856
938
|
var import_gds_theme3 = require("@doneisbetter/gds-theme");
|
|
857
939
|
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
940
|
+
function resolvePreviewColorScheme(presetId, requestedScheme) {
|
|
941
|
+
if (presetId === "dark-public") {
|
|
942
|
+
return "dark";
|
|
943
|
+
}
|
|
944
|
+
return requestedScheme;
|
|
945
|
+
}
|
|
858
946
|
var themePresetCatalog = {
|
|
859
947
|
default: {
|
|
860
948
|
label: "Default runtime theme",
|
|
861
949
|
bestFor: "Balanced multi-surface products that need the baseline GDS system.",
|
|
862
950
|
summary: "The default shared runtime lane for most adopters.",
|
|
863
|
-
themeKey: "gdsTheme"
|
|
951
|
+
themeKey: "gdsTheme",
|
|
952
|
+
supportedUse: "Starter products, hybrid public/admin apps, and teams adopting all canonical contracts.",
|
|
953
|
+
avoidFor: "Avoid for products requiring a distinct editorial voice or guaranteed dark-first brand contrast."
|
|
864
954
|
},
|
|
865
955
|
"dark-public": {
|
|
866
956
|
label: "Dark public theme",
|
|
867
957
|
bestFor: "Dark-first public experiences and campaign-style landing surfaces.",
|
|
868
958
|
summary: "A darker public presentation lane with the shipped runtime rhythm intact.",
|
|
869
|
-
themeKey: "gdsDarkPublicTheme"
|
|
959
|
+
themeKey: "gdsDarkPublicTheme",
|
|
960
|
+
supportedUse: "Products with a deliberate dark visual baseline, low-light UX, or premium media-first surfaces.",
|
|
961
|
+
avoidFor: "Avoid when mixed mode and editorial readability are core requirements."
|
|
870
962
|
},
|
|
871
963
|
"flat-surface": {
|
|
872
964
|
label: "Flat surface theme",
|
|
873
965
|
bestFor: "Operational products that prefer quieter elevation and flatter surface contrast.",
|
|
874
966
|
summary: "Removes some visual weight without creating a second token authority.",
|
|
875
|
-
themeKey: "gdsFlatSurfaceTheme"
|
|
967
|
+
themeKey: "gdsFlatSurfaceTheme",
|
|
968
|
+
supportedUse: "Dashboards, admin surfaces, and dense content where elevation becomes distracting.",
|
|
969
|
+
avoidFor: "Avoid for brand-first storytelling or high-expressiveness hero-first pages."
|
|
876
970
|
},
|
|
877
971
|
editorial: {
|
|
878
972
|
label: "Editorial serif theme",
|
|
879
973
|
bestFor: "Documentation, editorial, and content-led experiences.",
|
|
880
974
|
summary: "Adds a more expressive public reading tone while staying inside GDS contracts.",
|
|
881
|
-
themeKey: "gdsEditorialPublicTheme"
|
|
975
|
+
themeKey: "gdsEditorialPublicTheme",
|
|
976
|
+
supportedUse: "Guides, docs, and catalog content where reading comfort matters more than impact.",
|
|
977
|
+
avoidFor: "Avoid for dense transactional or data-first workflows with strict minimal contrast."
|
|
882
978
|
},
|
|
883
979
|
brand: {
|
|
884
980
|
label: "Brand theme generator",
|
|
885
981
|
bestFor: "Consumer teams that need controlled brand expression without forking the system.",
|
|
886
982
|
summary: "Composes the shipped helpers into a governed product-authored theme lane.",
|
|
887
|
-
themeKey: "createPublicBrandTheme(...)"
|
|
983
|
+
themeKey: "createPublicBrandTheme(...)",
|
|
984
|
+
supportedUse: "Whitelisted public branding programs with narrow product-authored intent and policy guardrails.",
|
|
985
|
+
avoidFor: "Avoid for local style experiments or temporary visual fixes without compliance approval."
|
|
888
986
|
}
|
|
889
987
|
};
|
|
988
|
+
var colorSchemeProof = [
|
|
989
|
+
{
|
|
990
|
+
id: "light",
|
|
991
|
+
label: "Light",
|
|
992
|
+
description: "Validates readable default surfaces, controls, badges, and focus states against light backgrounds."
|
|
993
|
+
},
|
|
994
|
+
{
|
|
995
|
+
id: "dark",
|
|
996
|
+
label: "Dark",
|
|
997
|
+
description: "Validates contrast for public, operational, and feedback surfaces when dark mode is active."
|
|
998
|
+
},
|
|
999
|
+
{
|
|
1000
|
+
id: "auto",
|
|
1001
|
+
label: "Auto",
|
|
1002
|
+
description: "Documents the adopter path for OS-controlled schemes while keeping the provider contract unchanged."
|
|
1003
|
+
}
|
|
1004
|
+
];
|
|
890
1005
|
function ThemePreviewSurface({
|
|
891
1006
|
preset,
|
|
892
|
-
colorScheme
|
|
1007
|
+
colorScheme,
|
|
1008
|
+
requestedColorScheme
|
|
893
1009
|
}) {
|
|
1010
|
+
const forcedScheme = requestedColorScheme && requestedColorScheme !== colorScheme;
|
|
894
1011
|
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: "lg", children: [
|
|
895
1012
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Group, { justify: "space-between", align: "flex-start", wrap: "wrap", children: [
|
|
896
1013
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: 4, children: [
|
|
@@ -905,7 +1022,12 @@ function ThemePreviewSurface({
|
|
|
905
1022
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("strong", { children: "Color scheme:" }),
|
|
906
1023
|
" ",
|
|
907
1024
|
colorScheme
|
|
908
|
-
] })
|
|
1025
|
+
] }),
|
|
1026
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Text, { size: "sm", children: [
|
|
1027
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("strong", { children: "Accessibility proof:" }),
|
|
1028
|
+
" status uses text, badge label, and placement, not color alone."
|
|
1029
|
+
] }),
|
|
1030
|
+
forcedScheme ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { size: "sm", c: "dimmed", children: "This lane always previews in dark mode so the runtime stays inside its sanctioned contrast contract." }) : null
|
|
909
1031
|
] }),
|
|
910
1032
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ThemeToggle, {})
|
|
911
1033
|
] }),
|
|
@@ -934,7 +1056,8 @@ function ThemePreviewSurface({
|
|
|
934
1056
|
description: "This preview uses the real shipped design-system runtime rather than a docs-only styling lane.",
|
|
935
1057
|
metadata: [
|
|
936
1058
|
{ id: "runtime", label: "Runtime lane", value: preset.themeKey },
|
|
937
|
-
{ id: "scheme", label: "Color scheme", value: colorScheme }
|
|
1059
|
+
{ id: "scheme", label: "Color scheme", value: colorScheme },
|
|
1060
|
+
{ id: "focus", label: "A11y proof", value: "Keyboard + readable states" }
|
|
938
1061
|
],
|
|
939
1062
|
primaryAction: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Button, { size: "sm", children: "Inspect route" })
|
|
940
1063
|
}
|
|
@@ -972,8 +1095,10 @@ function ReferenceThemeExplorer() {
|
|
|
972
1095
|
const comparisonSummary = themePresetCatalog[comparisonPreset];
|
|
973
1096
|
const selectedTheme = (0, import_react2.useMemo)(() => resolveTheme(preset), [preset, brandPrimary, brandFlatSurfaces, brandEditorialSerif]);
|
|
974
1097
|
const comparedTheme = (0, import_react2.useMemo)(() => resolveTheme(comparisonPreset), [comparisonPreset, brandPrimary, brandFlatSurfaces, brandEditorialSerif]);
|
|
975
|
-
const
|
|
976
|
-
const
|
|
1098
|
+
const effectiveColorScheme = resolvePreviewColorScheme(preset, colorScheme);
|
|
1099
|
+
const effectiveComparisonScheme = resolvePreviewColorScheme(comparisonPreset, colorScheme);
|
|
1100
|
+
const previewKey = `${preset}-${effectiveColorScheme}-${brandPrimary}-${brandFlatSurfaces}-${brandEditorialSerif}`;
|
|
1101
|
+
const comparisonPreviewKey = `${comparisonPreset}-${effectiveComparisonScheme}-${brandPrimary}-${brandFlatSurfaces}-${brandEditorialSerif}`;
|
|
977
1102
|
const reset = () => {
|
|
978
1103
|
setPreset("default");
|
|
979
1104
|
setColorScheme("light");
|
|
@@ -1049,7 +1174,7 @@ function ReferenceThemeExplorer() {
|
|
|
1049
1174
|
),
|
|
1050
1175
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { size: "sm", c: "dimmed", children: "The generator composes shipped helpers instead of creating a second theme authority inside the website." })
|
|
1051
1176
|
] }) }),
|
|
1052
|
-
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: "md", children: [
|
|
1177
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: "md", role: "status", "aria-live": "polite", children: [
|
|
1053
1178
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Title, { order: 4, children: "Current selection summary" }),
|
|
1054
1179
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: 6, children: [
|
|
1055
1180
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { fw: 700, children: selectionSummary.label }),
|
|
@@ -1068,7 +1193,8 @@ function ReferenceThemeExplorer() {
|
|
|
1068
1193
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("strong", { children: "Color scheme:" }),
|
|
1069
1194
|
" ",
|
|
1070
1195
|
colorScheme
|
|
1071
|
-
] })
|
|
1196
|
+
] }),
|
|
1197
|
+
preset === "dark-public" && colorScheme !== effectiveColorScheme ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { size: "sm", c: "dimmed", children: "gdsDarkPublicTheme always renders in dark mode inside the live preview." }) : null
|
|
1072
1198
|
] }),
|
|
1073
1199
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1074
1200
|
import_core14.Checkbox,
|
|
@@ -1101,18 +1227,47 @@ function ReferenceThemeExplorer() {
|
|
|
1101
1227
|
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.SimpleGrid, { cols: { base: 1, md: 2, xl: 5 }, spacing: "md", children: Object.values(themePresetCatalog).map((lane) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Paper, { withBorder: true, radius: "lg", p: "md", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: 6, children: [
|
|
1102
1228
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { fw: 700, size: "sm", children: lane.label }),
|
|
1103
1229
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { size: "sm", c: "dimmed", children: lane.summary }),
|
|
1104
|
-
/* @__PURE__ */ (0, import_jsx_runtime15.
|
|
1230
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Text, { size: "xs", children: [
|
|
1231
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("strong", { children: "Best for:" }),
|
|
1232
|
+
" ",
|
|
1233
|
+
lane.supportedUse
|
|
1234
|
+
] }),
|
|
1235
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Code, { block: true, fz: "10px", children: lane.themeKey }),
|
|
1236
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Text, { size: "xs", c: "dimmed", children: [
|
|
1237
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("strong", { children: "Avoid for:" }),
|
|
1238
|
+
" ",
|
|
1239
|
+
lane.avoidFor ?? "No special exclusion noted for this lane."
|
|
1240
|
+
] })
|
|
1105
1241
|
] }) }, lane.themeKey)) })
|
|
1106
1242
|
}
|
|
1107
1243
|
),
|
|
1244
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1245
|
+
ReferenceSection,
|
|
1246
|
+
{
|
|
1247
|
+
title: "Light, dark, and auto proof",
|
|
1248
|
+
description: "Every official lane must remain usable across explicit light, explicit dark, and OS-controlled auto modes. The dark-public lane is intentionally forced to dark in preview to preserve its contrast contract.",
|
|
1249
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.SimpleGrid, { cols: { base: 1, md: 3 }, spacing: "md", children: colorSchemeProof.map((item) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Paper, { withBorder: true, radius: "lg", p: "md", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: 6, children: [
|
|
1250
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Badge, { variant: "light", color: item.id === "dark" ? "violet" : item.id === "auto" ? "teal" : "blue", w: "fit-content", children: item.label }),
|
|
1251
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { size: "sm", children: item.description }),
|
|
1252
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { size: "xs", c: "dimmed", children: "Required proof: semantic text, visible focus, and contrast-safe state treatment." })
|
|
1253
|
+
] }) }, item.id)) })
|
|
1254
|
+
}
|
|
1255
|
+
),
|
|
1108
1256
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1109
1257
|
ReferenceSection,
|
|
1110
1258
|
{
|
|
1111
1259
|
title: "Live Theme Preview",
|
|
1112
1260
|
description: "Visitors can test the shipped presets, compare lanes, and inspect actual GDS surfaces under each theme.",
|
|
1113
1261
|
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.SimpleGrid, { cols: { base: 1, xl: comparisonEnabled ? 2 : 1 }, spacing: "lg", children: [
|
|
1114
|
-
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_gds_theme3.GdsProvider, { theme: selectedTheme, defaultColorScheme:
|
|
1115
|
-
|
|
1262
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_gds_theme3.GdsProvider, { theme: selectedTheme, defaultColorScheme: effectiveColorScheme, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1263
|
+
ThemePreviewSurface,
|
|
1264
|
+
{
|
|
1265
|
+
preset: selectionSummary,
|
|
1266
|
+
colorScheme: effectiveColorScheme,
|
|
1267
|
+
requestedColorScheme: colorScheme
|
|
1268
|
+
}
|
|
1269
|
+
) }, previewKey),
|
|
1270
|
+
comparisonEnabled ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_gds_theme3.GdsProvider, { theme: comparedTheme, defaultColorScheme: effectiveComparisonScheme, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: "md", children: [
|
|
1116
1271
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Group, { justify: "space-between", align: "flex-start", wrap: "wrap", children: [
|
|
1117
1272
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: 4, children: [
|
|
1118
1273
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { fw: 700, children: "Comparison Preview Surface" }),
|
|
@@ -1120,7 +1275,14 @@ function ReferenceThemeExplorer() {
|
|
|
1120
1275
|
] }),
|
|
1121
1276
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Badge, { color: "violet", variant: "light", children: comparisonSummary.label })
|
|
1122
1277
|
] }),
|
|
1123
|
-
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1278
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1279
|
+
ThemePreviewSurface,
|
|
1280
|
+
{
|
|
1281
|
+
preset: comparisonSummary,
|
|
1282
|
+
colorScheme: effectiveComparisonScheme,
|
|
1283
|
+
requestedColorScheme: colorScheme
|
|
1284
|
+
}
|
|
1285
|
+
)
|
|
1124
1286
|
] }) }) }, comparisonPreviewKey) : null
|
|
1125
1287
|
] })
|
|
1126
1288
|
}
|
|
@@ -1128,18 +1290,34 @@ function ReferenceThemeExplorer() {
|
|
|
1128
1290
|
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1129
1291
|
ReferenceSection,
|
|
1130
1292
|
{
|
|
1131
|
-
title: "
|
|
1132
|
-
description: "
|
|
1293
|
+
title: "Unsupported lane boundary",
|
|
1294
|
+
description: "Unsupported local theme lanes are blocked by policy and compliance because they create parallel design-system authority.",
|
|
1133
1295
|
tone: "supporting",
|
|
1134
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime15.
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1296
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: "md", children: [
|
|
1297
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1298
|
+
StateBlock,
|
|
1299
|
+
{
|
|
1300
|
+
variant: "permission",
|
|
1301
|
+
title: "Do not create local branding-layer helpers",
|
|
1302
|
+
description: "If a consumer needs brand expression, use createPublicBrandTheme(...). If a lane is missing, request it for GDS instead of building extendGdsTheme(...), createTheme(...), or mergeMantineTheme(...) ownership locally.",
|
|
1303
|
+
compact: true
|
|
1304
|
+
}
|
|
1305
|
+
),
|
|
1306
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.SimpleGrid, { cols: { base: 1, md: 2 }, spacing: "md", children: [
|
|
1307
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Paper, { withBorder: true, radius: "lg", p: "md", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: 6, children: [
|
|
1308
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { fw: 700, size: "sm", children: "Approved remediation" }),
|
|
1309
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Code, { block: true, children: [
|
|
1310
|
+
"createPublicBrandTheme(",
|
|
1311
|
+
`{ flatSurfaces: true, overrides: { primaryColor: 'blue' } }`,
|
|
1312
|
+
")"
|
|
1313
|
+
] })
|
|
1314
|
+
] }) }),
|
|
1315
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Paper, { withBorder: true, radius: "lg", p: "md", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: 6, children: [
|
|
1316
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { fw: 700, size: "sm", children: "Prohibited ownership" }),
|
|
1317
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Code, { block: true, children: "extendGdsTheme(...) / createTheme(...) / mergeMantineTheme(...)" })
|
|
1318
|
+
] }) })
|
|
1319
|
+
] })
|
|
1320
|
+
] })
|
|
1143
1321
|
}
|
|
1144
1322
|
)
|
|
1145
1323
|
] });
|
|
@@ -2105,21 +2283,97 @@ function DiscoveryShell({
|
|
|
2105
2283
|
);
|
|
2106
2284
|
}
|
|
2107
2285
|
|
|
2108
|
-
// src/
|
|
2286
|
+
// src/DocsShell.tsx
|
|
2109
2287
|
var import_react5 = require("react");
|
|
2110
2288
|
var import_core31 = require("@mantine/core");
|
|
2111
|
-
var import_gds_theme4 = require("@doneisbetter/gds-theme");
|
|
2112
2289
|
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
2290
|
+
function DocsShellSidebar({ primaryNavigation, secondaryNavigation }) {
|
|
2291
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core31.Stack, { gap: "md", h: "100%", children: [
|
|
2292
|
+
primaryNavigation ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core31.Stack, { gap: "xs", children: [
|
|
2293
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Text, { size: "xs", fw: 700, c: "dimmed", children: "Primary" }),
|
|
2294
|
+
primaryNavigation
|
|
2295
|
+
] }) : null,
|
|
2296
|
+
secondaryNavigation ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
|
|
2297
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Divider, {}),
|
|
2298
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core31.Stack, { gap: "xs", children: [
|
|
2299
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Text, { size: "xs", fw: 700, c: "dimmed", children: "More" }),
|
|
2300
|
+
secondaryNavigation
|
|
2301
|
+
] })
|
|
2302
|
+
] }) : null
|
|
2303
|
+
] });
|
|
2304
|
+
}
|
|
2305
|
+
function resolveContentContainerSize(value) {
|
|
2306
|
+
if (value === "full") {
|
|
2307
|
+
return "100%";
|
|
2308
|
+
}
|
|
2309
|
+
return value ?? "lg";
|
|
2310
|
+
}
|
|
2311
|
+
function DocsShell({
|
|
2312
|
+
brand,
|
|
2313
|
+
primaryNavigation,
|
|
2314
|
+
secondaryNavigation,
|
|
2315
|
+
headerContext,
|
|
2316
|
+
actions,
|
|
2317
|
+
mobileNavigation,
|
|
2318
|
+
mobileNavigationMode = "drawer",
|
|
2319
|
+
footer,
|
|
2320
|
+
children,
|
|
2321
|
+
contentWidth = "full"
|
|
2322
|
+
}) {
|
|
2323
|
+
const [mobileNavOpen, setMobileNavOpen] = (0, import_react5.useState)(false);
|
|
2324
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
2325
|
+
DiscoveryShell,
|
|
2326
|
+
{
|
|
2327
|
+
header: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core31.Group, { h: "100%", justify: "space-between", align: "center", wrap: "nowrap", gap: "md", children: [
|
|
2328
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core31.Group, { gap: "sm", align: "center", wrap: "nowrap", style: { minWidth: 0 }, children: [
|
|
2329
|
+
mobileNavigationMode === "inline-collapse" && mobileNavigation ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
|
|
2330
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
2331
|
+
import_core31.Burger,
|
|
2332
|
+
{
|
|
2333
|
+
opened: mobileNavOpen,
|
|
2334
|
+
onClick: () => setMobileNavOpen((value) => !value),
|
|
2335
|
+
hiddenFrom: "sm",
|
|
2336
|
+
size: "sm",
|
|
2337
|
+
"aria-label": "Toggle docs navigation"
|
|
2338
|
+
}
|
|
2339
|
+
),
|
|
2340
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Transition, { mounted: mobileNavOpen, transition: "pop", duration: 120, children: (styles) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Box, { style: styles, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Box, { mt: "xs", p: "sm", style: { borderRadius: 8, border: "1px solid var(--mantine-color-default-border)" }, children: mobileNavigation }) }) })
|
|
2341
|
+
] }) : null,
|
|
2342
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Box, { style: { minWidth: 0 }, children: brand }),
|
|
2343
|
+
headerContext ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Text, { size: "sm", c: "dimmed", lineClamp: 1, children: headerContext }) : null
|
|
2344
|
+
] }),
|
|
2345
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Group, { gap: "sm", wrap: "nowrap", style: { minWidth: 0 }, children: actions })
|
|
2346
|
+
] }),
|
|
2347
|
+
sidebar: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
2348
|
+
DocsShellSidebar,
|
|
2349
|
+
{
|
|
2350
|
+
primaryNavigation,
|
|
2351
|
+
secondaryNavigation
|
|
2352
|
+
}
|
|
2353
|
+
),
|
|
2354
|
+
footer,
|
|
2355
|
+
mobileNavigationLabel: "Open docs navigation",
|
|
2356
|
+
headerHeight: 72,
|
|
2357
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Container, { size: resolveContentContainerSize(contentWidth), px: "md", py: "lg", w: "100%", children })
|
|
2358
|
+
}
|
|
2359
|
+
);
|
|
2360
|
+
}
|
|
2361
|
+
|
|
2362
|
+
// src/SidebarNav.tsx
|
|
2363
|
+
var import_react6 = require("react");
|
|
2364
|
+
var import_core32 = require("@mantine/core");
|
|
2365
|
+
var import_gds_theme4 = require("@doneisbetter/gds-theme");
|
|
2366
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
2113
2367
|
function SidebarNav({ children, ariaLabel = "Primary navigation", gap = "md" }) {
|
|
2114
|
-
return /* @__PURE__ */ (0,
|
|
2368
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core32.Stack, { component: "nav", "aria-label": ariaLabel, gap, h: "100%", children });
|
|
2115
2369
|
}
|
|
2116
2370
|
function SidebarNavSection({ label, children, pushToBottom = false }) {
|
|
2117
|
-
return /* @__PURE__ */ (0,
|
|
2118
|
-
label ? /* @__PURE__ */ (0,
|
|
2119
|
-
/* @__PURE__ */ (0,
|
|
2371
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core32.Stack, { gap: "xs", mt: pushToBottom ? "auto" : void 0, children: [
|
|
2372
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core32.Text, { size: "xs", fw: 700, c: "dimmed", children: label }) : null,
|
|
2373
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core32.Stack, { gap: 4, children })
|
|
2120
2374
|
] });
|
|
2121
2375
|
}
|
|
2122
|
-
var _SidebarNavItem = (0,
|
|
2376
|
+
var _SidebarNavItem = (0, import_react6.forwardRef)(
|
|
2123
2377
|
({
|
|
2124
2378
|
action,
|
|
2125
2379
|
label,
|
|
@@ -2135,14 +2389,14 @@ var _SidebarNavItem = (0, import_react5.forwardRef)(
|
|
|
2135
2389
|
const config = action ? resolveSemanticActionConfig(action, vocabularyPacks) : null;
|
|
2136
2390
|
const Icon = config?.icon;
|
|
2137
2391
|
const resolvedLabel = label ?? (action ? getSemanticActionLabel(action, t, vocabularyPacks) : void 0);
|
|
2138
|
-
return /* @__PURE__ */ (0,
|
|
2139
|
-
|
|
2392
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
2393
|
+
import_core32.NavLink,
|
|
2140
2394
|
{
|
|
2141
2395
|
ref,
|
|
2142
2396
|
label: resolvedLabel,
|
|
2143
2397
|
description,
|
|
2144
|
-
leftSection: icon ?? (Icon ? /* @__PURE__ */ (0,
|
|
2145
|
-
rightSection: badge ? /* @__PURE__ */ (0,
|
|
2398
|
+
leftSection: icon ?? (Icon ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon, { size: "1rem", stroke: 1.5 }) : void 0),
|
|
2399
|
+
rightSection: badge ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core32.Box, { children: badge }) : props.rightSection,
|
|
2146
2400
|
"aria-label": ariaLabel ?? (typeof resolvedLabel === "string" ? resolvedLabel : void 0),
|
|
2147
2401
|
"aria-current": props.active ? "page" : ariaCurrent,
|
|
2148
2402
|
...props
|
|
@@ -2150,21 +2404,21 @@ var _SidebarNavItem = (0, import_react5.forwardRef)(
|
|
|
2150
2404
|
);
|
|
2151
2405
|
}
|
|
2152
2406
|
);
|
|
2153
|
-
var SidebarNavItem = (0,
|
|
2407
|
+
var SidebarNavItem = (0, import_core32.createPolymorphicComponent)(_SidebarNavItem);
|
|
2154
2408
|
|
|
2155
2409
|
// src/PublicSiteFooter.tsx
|
|
2156
|
-
var
|
|
2157
|
-
var
|
|
2410
|
+
var import_core33 = require("@mantine/core");
|
|
2411
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
2158
2412
|
function PublicSiteFooter({ children, meta }) {
|
|
2159
|
-
return /* @__PURE__ */ (0,
|
|
2160
|
-
children ? /* @__PURE__ */ (0,
|
|
2161
|
-
meta ? /* @__PURE__ */ (0,
|
|
2413
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core33.Stack, { component: "footer", gap: "xs", children: [
|
|
2414
|
+
children ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core33.Text, { size: "sm", children }) : null,
|
|
2415
|
+
meta ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core33.Group, { gap: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core33.Text, { size: "xs", c: "dimmed", children: meta }) }) : null
|
|
2162
2416
|
] });
|
|
2163
2417
|
}
|
|
2164
2418
|
|
|
2165
2419
|
// src/PublicBrandFooter.tsx
|
|
2166
|
-
var
|
|
2167
|
-
var
|
|
2420
|
+
var import_core34 = require("@mantine/core");
|
|
2421
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
2168
2422
|
function PublicBrandFooter({
|
|
2169
2423
|
media,
|
|
2170
2424
|
brandTitle,
|
|
@@ -2179,8 +2433,8 @@ function PublicBrandFooter({
|
|
|
2179
2433
|
const mediaSpan = layoutVariant === "immersive-media" ? 5 : 4;
|
|
2180
2434
|
const primarySpan = media ? layoutVariant === "balanced-quote" ? 4 : 4 : secondary ? 6 : 12;
|
|
2181
2435
|
const secondarySpan = media ? Math.max(3, 12 - mediaSpan - primarySpan) : Math.max(4, 12 - primarySpan);
|
|
2182
|
-
return /* @__PURE__ */ (0,
|
|
2183
|
-
|
|
2436
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2437
|
+
import_core34.Paper,
|
|
2184
2438
|
{
|
|
2185
2439
|
component: "footer",
|
|
2186
2440
|
withBorder: true,
|
|
@@ -2188,19 +2442,19 @@ function PublicBrandFooter({
|
|
|
2188
2442
|
p: compact ? "lg" : "xl",
|
|
2189
2443
|
className: classNames?.root,
|
|
2190
2444
|
"data-layout-variant": layoutVariant,
|
|
2191
|
-
children: /* @__PURE__ */ (0,
|
|
2192
|
-
/* @__PURE__ */ (0,
|
|
2193
|
-
media ? /* @__PURE__ */ (0,
|
|
2194
|
-
/* @__PURE__ */ (0,
|
|
2195
|
-
brandTitle ? /* @__PURE__ */ (0,
|
|
2196
|
-
description ? /* @__PURE__ */ (0,
|
|
2197
|
-
actions ? /* @__PURE__ */ (0,
|
|
2445
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Stack, { gap: "lg", children: [
|
|
2446
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Grid, { gutter: compact ? "lg" : "xl", align: "flex-start", children: [
|
|
2447
|
+
media ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Grid.Col, { span: { base: 12, md: mediaSpan }, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Box, { className: classNames?.media, children: media }) }) : null,
|
|
2448
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Grid.Col, { span: { base: 12, md: primarySpan }, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Stack, { gap: compact ? "xs" : "sm", className: classNames?.primary, children: [
|
|
2449
|
+
brandTitle ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Title, { order: 4, children: brandTitle }) : null,
|
|
2450
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Text, { c: "dimmed", children: description }) : null,
|
|
2451
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Box, { children: actions }) : null
|
|
2198
2452
|
] }) }),
|
|
2199
|
-
secondary ? /* @__PURE__ */ (0,
|
|
2453
|
+
secondary ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Grid.Col, { span: { base: 12, md: secondarySpan }, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Stack, { gap: compact ? "xs" : "sm", className: classNames?.secondary, children: secondary }) }) : null
|
|
2200
2454
|
] }),
|
|
2201
|
-
legal ? /* @__PURE__ */ (0,
|
|
2202
|
-
/* @__PURE__ */ (0,
|
|
2203
|
-
/* @__PURE__ */ (0,
|
|
2455
|
+
legal ? /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_jsx_runtime36.Fragment, { children: [
|
|
2456
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Divider, {}),
|
|
2457
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Group, { justify: "space-between", gap: "sm", wrap: "wrap", className: classNames?.legal, children: typeof legal === "string" ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Text, { size: "sm", c: "dimmed", children: legal }) : legal })
|
|
2204
2458
|
] }) : null
|
|
2205
2459
|
] })
|
|
2206
2460
|
}
|
|
@@ -2208,78 +2462,239 @@ function PublicBrandFooter({
|
|
|
2208
2462
|
}
|
|
2209
2463
|
|
|
2210
2464
|
// src/AuthShell.tsx
|
|
2211
|
-
var
|
|
2212
|
-
var
|
|
2465
|
+
var import_core35 = require("@mantine/core");
|
|
2466
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
2213
2467
|
function AuthShell({
|
|
2214
2468
|
title,
|
|
2215
2469
|
description,
|
|
2470
|
+
intent = "sign-in",
|
|
2216
2471
|
brand,
|
|
2217
2472
|
headerActions,
|
|
2218
2473
|
footer,
|
|
2219
2474
|
helper,
|
|
2475
|
+
error,
|
|
2476
|
+
guestAction,
|
|
2477
|
+
supportAction,
|
|
2220
2478
|
socialAuth,
|
|
2221
2479
|
dividerLabel = "Or continue with your account",
|
|
2222
2480
|
children
|
|
2223
2481
|
}) {
|
|
2224
|
-
return /* @__PURE__ */ (0,
|
|
2225
|
-
brand || headerActions ? /* @__PURE__ */ (0,
|
|
2226
|
-
brand ? /* @__PURE__ */ (0,
|
|
2227
|
-
headerActions ? /* @__PURE__ */ (0,
|
|
2482
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Box, { py: { base: "xl", md: "4rem" }, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Container, { size: "xs", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Stack, { gap: "xl", children: [
|
|
2483
|
+
brand || headerActions ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Group, { justify: brand && headerActions ? "space-between" : "center", align: "center", children: [
|
|
2484
|
+
brand ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Box, { children: brand }) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Box, {}),
|
|
2485
|
+
headerActions ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Group, { gap: "sm", children: headerActions }) : null
|
|
2228
2486
|
] }) : null,
|
|
2229
|
-
/* @__PURE__ */ (0,
|
|
2230
|
-
/* @__PURE__ */ (0,
|
|
2231
|
-
/* @__PURE__ */ (0,
|
|
2232
|
-
|
|
2487
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Card, { withBorder: true, radius: "lg", padding: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Stack, { gap: "lg", children: [
|
|
2488
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Stack, { gap: "xs", ta: "center", children: [
|
|
2489
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Group, { justify: "center", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Badge, { variant: "light", color: intent === "account-linking" ? "blue" : intent === "guest-entry" ? "gray" : "teal", children: intent.replace("-", " ") }) }),
|
|
2490
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Title, { order: 2, children: title }),
|
|
2491
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Text, { c: "dimmed", size: "sm", children: description }) : null
|
|
2233
2492
|
] }),
|
|
2234
|
-
|
|
2235
|
-
socialAuth ? /* @__PURE__ */ (0,
|
|
2493
|
+
error ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Alert, { color: "red", variant: "light", role: "alert", children: error }) : null,
|
|
2494
|
+
socialAuth ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Box, { children: socialAuth }) : null,
|
|
2495
|
+
socialAuth ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Divider, { label: dividerLabel, labelPosition: "center" }) : null,
|
|
2236
2496
|
children,
|
|
2237
|
-
|
|
2497
|
+
guestAction || supportAction ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Group, { justify: "center", gap: "sm", children: [
|
|
2498
|
+
guestAction,
|
|
2499
|
+
supportAction
|
|
2500
|
+
] }) : null,
|
|
2501
|
+
helper ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Text, { size: "sm", c: "dimmed", ta: "center", children: helper }) : null
|
|
2238
2502
|
] }) }),
|
|
2239
|
-
footer ? /* @__PURE__ */ (0,
|
|
2503
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Text, { size: "sm", c: "dimmed", ta: "center", children: footer }) : null
|
|
2240
2504
|
] }) }) });
|
|
2241
2505
|
}
|
|
2242
2506
|
|
|
2243
2507
|
// src/SocialAuthButtons.tsx
|
|
2244
|
-
var
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2508
|
+
var import_core37 = require("@mantine/core");
|
|
2509
|
+
|
|
2510
|
+
// src/ProviderIdentityButtons.tsx
|
|
2511
|
+
var import_core36 = require("@mantine/core");
|
|
2512
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
2513
|
+
var PROVIDER_IDENTITY_REGISTRY = {
|
|
2514
|
+
google: {
|
|
2515
|
+
providerLabel: "Google",
|
|
2516
|
+
markLabel: "G",
|
|
2517
|
+
brandColor: "red"
|
|
2518
|
+
},
|
|
2519
|
+
apple: {
|
|
2520
|
+
providerLabel: "Apple",
|
|
2521
|
+
markLabel: "A",
|
|
2522
|
+
brandColor: "dark"
|
|
2523
|
+
},
|
|
2524
|
+
github: {
|
|
2525
|
+
providerLabel: "GitHub",
|
|
2526
|
+
markLabel: "GH",
|
|
2527
|
+
brandColor: "gray"
|
|
2528
|
+
},
|
|
2529
|
+
facebook: {
|
|
2530
|
+
providerLabel: "Facebook",
|
|
2531
|
+
markLabel: "F",
|
|
2532
|
+
brandColor: "blue"
|
|
2533
|
+
},
|
|
2534
|
+
microsoft: {
|
|
2535
|
+
providerLabel: "Microsoft",
|
|
2536
|
+
markLabel: "M",
|
|
2537
|
+
brandColor: "cyan"
|
|
2538
|
+
},
|
|
2539
|
+
linkedin: {
|
|
2540
|
+
providerLabel: "LinkedIn",
|
|
2541
|
+
markLabel: "in",
|
|
2542
|
+
brandColor: "blue"
|
|
2543
|
+
},
|
|
2544
|
+
discord: {
|
|
2545
|
+
providerLabel: "Discord",
|
|
2546
|
+
markLabel: "D",
|
|
2547
|
+
brandColor: "indigo"
|
|
2548
|
+
},
|
|
2549
|
+
x: {
|
|
2550
|
+
providerLabel: "X",
|
|
2551
|
+
markLabel: "X",
|
|
2552
|
+
brandColor: "dark"
|
|
2553
|
+
},
|
|
2554
|
+
email: {
|
|
2555
|
+
providerLabel: "Email",
|
|
2556
|
+
markLabel: "@",
|
|
2557
|
+
brandColor: "gray"
|
|
2558
|
+
}
|
|
2256
2559
|
};
|
|
2257
|
-
function
|
|
2258
|
-
|
|
2259
|
-
|
|
2560
|
+
function normalizeProviderId(provider) {
|
|
2561
|
+
return (provider ?? "").trim().toLowerCase();
|
|
2562
|
+
}
|
|
2563
|
+
function isSupportedProviderId(provider) {
|
|
2564
|
+
return provider in PROVIDER_IDENTITY_REGISTRY;
|
|
2565
|
+
}
|
|
2566
|
+
function getProviderIdentityMeta(provider) {
|
|
2567
|
+
const normalized = normalizeProviderId(provider);
|
|
2568
|
+
if (isSupportedProviderId(normalized)) {
|
|
2569
|
+
return {
|
|
2570
|
+
id: normalized,
|
|
2571
|
+
supported: true,
|
|
2572
|
+
...PROVIDER_IDENTITY_REGISTRY[normalized]
|
|
2573
|
+
};
|
|
2574
|
+
}
|
|
2575
|
+
return {
|
|
2576
|
+
id: normalized || "provider",
|
|
2577
|
+
supported: false,
|
|
2578
|
+
providerLabel: provider ? provider : "Provider",
|
|
2579
|
+
markLabel: (provider ?? "PR").slice(0, 2).toUpperCase(),
|
|
2580
|
+
brandColor: "gray"
|
|
2581
|
+
};
|
|
2582
|
+
}
|
|
2583
|
+
function resolveProviderLabel(provider, customLabel) {
|
|
2584
|
+
const meta = getProviderIdentityMeta(provider);
|
|
2585
|
+
if (customLabel != null) {
|
|
2586
|
+
return customLabel;
|
|
2587
|
+
}
|
|
2588
|
+
return `Continue with ${meta.providerLabel}`;
|
|
2260
2589
|
}
|
|
2261
|
-
function
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2590
|
+
function mapVariant(variant = "neutral") {
|
|
2591
|
+
if (variant === "solid") {
|
|
2592
|
+
return "filled";
|
|
2593
|
+
}
|
|
2594
|
+
if (variant === "outline") {
|
|
2595
|
+
return "outline";
|
|
2596
|
+
}
|
|
2597
|
+
return "default";
|
|
2598
|
+
}
|
|
2599
|
+
function getProviderIdentityLabel(provider, fallbackOverride) {
|
|
2600
|
+
return resolveProviderLabel(provider, fallbackOverride);
|
|
2601
|
+
}
|
|
2602
|
+
function getSupportedProviderIdentityIds() {
|
|
2603
|
+
return Object.keys(PROVIDER_IDENTITY_REGISTRY);
|
|
2604
|
+
}
|
|
2605
|
+
function getProviderIdentityPolicy(provider) {
|
|
2606
|
+
const meta = getProviderIdentityMeta(provider);
|
|
2607
|
+
return {
|
|
2608
|
+
id: meta.id,
|
|
2609
|
+
supported: meta.supported,
|
|
2610
|
+
providerLabel: meta.providerLabel,
|
|
2611
|
+
colorAuthority: meta.supported ? "provider" : "gds-neutral",
|
|
2612
|
+
minTouchTargetPx: 44,
|
|
2613
|
+
allowedVariants: ["solid", "outline", "neutral"]
|
|
2614
|
+
};
|
|
2615
|
+
}
|
|
2616
|
+
function ProviderIdentityMark({ provider }) {
|
|
2617
|
+
const meta = getProviderIdentityMeta(provider);
|
|
2618
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
2619
|
+
import_core36.ThemeIcon,
|
|
2267
2620
|
{
|
|
2268
|
-
variant: "
|
|
2621
|
+
variant: "light",
|
|
2622
|
+
color: meta.brandColor,
|
|
2623
|
+
radius: "xl",
|
|
2624
|
+
size: "md",
|
|
2625
|
+
"aria-hidden": "true",
|
|
2626
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Text, { size: "xs", fw: 700, c: "inherit", children: meta.markLabel })
|
|
2627
|
+
}
|
|
2628
|
+
);
|
|
2629
|
+
}
|
|
2630
|
+
function ProviderIdentityButton({
|
|
2631
|
+
provider,
|
|
2632
|
+
label,
|
|
2633
|
+
description,
|
|
2634
|
+
policyNote,
|
|
2635
|
+
error,
|
|
2636
|
+
href,
|
|
2637
|
+
onClick,
|
|
2638
|
+
disabled,
|
|
2639
|
+
loading,
|
|
2640
|
+
tenantDisabledReason,
|
|
2641
|
+
fullWidth = true,
|
|
2642
|
+
size = "md",
|
|
2643
|
+
variant = "neutral",
|
|
2644
|
+
ariaLabel,
|
|
2645
|
+
describedBy,
|
|
2646
|
+
minTouchTargetPx = 44
|
|
2647
|
+
}) {
|
|
2648
|
+
const meta = getProviderIdentityMeta(provider);
|
|
2649
|
+
const buttonLabel = resolveProviderLabel(provider, label);
|
|
2650
|
+
const resolvedDisabled = disabled || Boolean(tenantDisabledReason);
|
|
2651
|
+
const buttonProps = href ? {
|
|
2652
|
+
component: "a",
|
|
2653
|
+
href
|
|
2654
|
+
} : {
|
|
2655
|
+
onClick
|
|
2656
|
+
};
|
|
2657
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
2658
|
+
import_core36.Button,
|
|
2659
|
+
{
|
|
2660
|
+
variant: mapVariant(variant),
|
|
2661
|
+
color: variant === "solid" ? meta.brandColor : void 0,
|
|
2269
2662
|
justify: "space-between",
|
|
2270
|
-
fullWidth
|
|
2271
|
-
size
|
|
2272
|
-
|
|
2273
|
-
|
|
2274
|
-
|
|
2663
|
+
fullWidth,
|
|
2664
|
+
size,
|
|
2665
|
+
"aria-label": ariaLabel ?? (typeof buttonLabel === "string" ? buttonLabel : void 0),
|
|
2666
|
+
"aria-describedby": describedBy,
|
|
2667
|
+
leftSection: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ProviderIdentityMark, { provider }),
|
|
2668
|
+
disabled: resolvedDisabled,
|
|
2669
|
+
loading,
|
|
2670
|
+
styles: { root: { minHeight: minTouchTargetPx } },
|
|
2275
2671
|
...buttonProps,
|
|
2276
|
-
children: /* @__PURE__ */ (0,
|
|
2277
|
-
/* @__PURE__ */ (0,
|
|
2278
|
-
|
|
2672
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_core36.Stack, { gap: 0, align: "flex-start", children: [
|
|
2673
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Text, { inherit: true, children: buttonLabel }),
|
|
2674
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Text, { size: "xs", c: "dimmed", lh: 1.2, children: description }) : null,
|
|
2675
|
+
policyNote ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Text, { size: "xs", c: "dimmed", lh: 1.2, children: policyNote }) : null,
|
|
2676
|
+
tenantDisabledReason ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Text, { size: "xs", c: "orange.7", lh: 1.2, children: tenantDisabledReason }) : null,
|
|
2677
|
+
error ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Text, { size: "xs", c: "red.7", lh: 1.2, role: "alert", children: error }) : null
|
|
2279
2678
|
] })
|
|
2280
2679
|
}
|
|
2281
2680
|
);
|
|
2282
2681
|
}
|
|
2682
|
+
function ProviderIdentityButtonGroup({ providers, layout = "stack" }) {
|
|
2683
|
+
if (!providers.length) {
|
|
2684
|
+
return null;
|
|
2685
|
+
}
|
|
2686
|
+
const content = providers.map((entry, index) => {
|
|
2687
|
+
const key = `${normalizeProviderId(String(entry.provider)) || "provider"}-${index}`;
|
|
2688
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ProviderIdentityButton, { ...entry }, key);
|
|
2689
|
+
});
|
|
2690
|
+
if (layout === "grid") {
|
|
2691
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: content });
|
|
2692
|
+
}
|
|
2693
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Stack, { gap: "sm", children: content });
|
|
2694
|
+
}
|
|
2695
|
+
|
|
2696
|
+
// src/SocialAuthButtons.tsx
|
|
2697
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
2283
2698
|
function SocialAuthButtons({
|
|
2284
2699
|
providers,
|
|
2285
2700
|
title = "Continue with a trusted provider",
|
|
@@ -2290,44 +2705,57 @@ function SocialAuthButtons({
|
|
|
2290
2705
|
if (!providers.length) {
|
|
2291
2706
|
return null;
|
|
2292
2707
|
}
|
|
2293
|
-
const
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2708
|
+
const buttons = providers.map((provider) => ({
|
|
2709
|
+
provider: provider.id,
|
|
2710
|
+
label: provider.label,
|
|
2711
|
+
description: provider.description,
|
|
2712
|
+
policyNote: provider.policyNote,
|
|
2713
|
+
error: provider.error,
|
|
2714
|
+
href: provider.href,
|
|
2715
|
+
onClick: provider.onClick,
|
|
2716
|
+
disabled: provider.disabled,
|
|
2717
|
+
loading: provider.loading,
|
|
2718
|
+
tenantDisabledReason: provider.tenantDisabledReason,
|
|
2719
|
+
size: provider.size ?? (compact ? "sm" : "md"),
|
|
2720
|
+
variant: provider.variant
|
|
2721
|
+
}));
|
|
2722
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_core37.Stack, { gap: "md", children: [
|
|
2723
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_core37.Stack, { gap: 4, ta: "center", children: [
|
|
2724
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_core37.Group, { justify: "center", gap: "xs", children: [
|
|
2725
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(GdsIcons.Login, { size: "1rem" }),
|
|
2726
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.Text, { fw: 600, children: title })
|
|
2299
2727
|
] }),
|
|
2300
|
-
description ? /* @__PURE__ */ (0,
|
|
2728
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.Text, { size: "sm", c: "dimmed", children: description }) : null
|
|
2301
2729
|
] }),
|
|
2302
|
-
/* @__PURE__ */ (0,
|
|
2303
|
-
|
|
2730
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.Divider, {}),
|
|
2731
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(ProviderIdentityButtonGroup, { providers: buttons, layout })
|
|
2304
2732
|
] });
|
|
2305
2733
|
}
|
|
2306
2734
|
|
|
2307
2735
|
// src/ArticleShell.tsx
|
|
2308
|
-
var
|
|
2309
|
-
var
|
|
2736
|
+
var import_core38 = require("@mantine/core");
|
|
2737
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
2310
2738
|
function ArticleShell({ eyebrow, title, lead, meta, sideRail, children }) {
|
|
2311
|
-
return /* @__PURE__ */ (0,
|
|
2312
|
-
/* @__PURE__ */ (0,
|
|
2313
|
-
/* @__PURE__ */ (0,
|
|
2314
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
2315
|
-
/* @__PURE__ */ (0,
|
|
2316
|
-
lead ? /* @__PURE__ */ (0,
|
|
2317
|
-
meta ? /* @__PURE__ */ (0,
|
|
2739
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Container, { size: "lg", py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core38.Group, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
|
|
2740
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core38.Stack, { gap: "lg", maw: 760, flex: 1, children: [
|
|
2741
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core38.Stack, { gap: "sm", children: [
|
|
2742
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Text, { size: "sm", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
|
|
2743
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Title, { order: 1, children: title }),
|
|
2744
|
+
lead ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Text, { size: "lg", c: "dimmed", children: lead }) : null,
|
|
2745
|
+
meta ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Group, { gap: "md", children: meta }) : null
|
|
2318
2746
|
] }),
|
|
2319
|
-
/* @__PURE__ */ (0,
|
|
2747
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Stack, { gap: "md", children })
|
|
2320
2748
|
] }),
|
|
2321
|
-
sideRail ? /* @__PURE__ */ (0,
|
|
2749
|
+
sideRail ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Stack, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
|
|
2322
2750
|
] }) });
|
|
2323
2751
|
}
|
|
2324
2752
|
|
|
2325
2753
|
// src/DocsCodeBlock.tsx
|
|
2326
|
-
var
|
|
2327
|
-
var
|
|
2328
|
-
var
|
|
2754
|
+
var import_react7 = require("react");
|
|
2755
|
+
var import_core39 = require("@mantine/core");
|
|
2756
|
+
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
2329
2757
|
function DocsCodeBlock({ code, language, title, withCopy = true }) {
|
|
2330
|
-
const [copied, setCopied] = (0,
|
|
2758
|
+
const [copied, setCopied] = (0, import_react7.useState)(false);
|
|
2331
2759
|
const handleCopy = async () => {
|
|
2332
2760
|
if (!navigator?.clipboard) {
|
|
2333
2761
|
return;
|
|
@@ -2336,44 +2764,44 @@ function DocsCodeBlock({ code, language, title, withCopy = true }) {
|
|
|
2336
2764
|
setCopied(true);
|
|
2337
2765
|
window.setTimeout(() => setCopied(false), 1200);
|
|
2338
2766
|
};
|
|
2339
|
-
return /* @__PURE__ */ (0,
|
|
2340
|
-
title || withCopy ? /* @__PURE__ */ (0,
|
|
2341
|
-
/* @__PURE__ */ (0,
|
|
2342
|
-
title ? /* @__PURE__ */ (0,
|
|
2343
|
-
language ? /* @__PURE__ */ (0,
|
|
2767
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core39.Paper, { withBorder: true, radius: "lg", p: "md", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_core39.Stack, { gap: "sm", children: [
|
|
2768
|
+
title || withCopy ? /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_core39.Group, { justify: "space-between", align: "center", children: [
|
|
2769
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_core39.Stack, { gap: 0, children: [
|
|
2770
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core39.Text, { fw: 600, children: title }) : null,
|
|
2771
|
+
language ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core39.Text, { size: "xs", c: "dimmed", children: language }) : null
|
|
2344
2772
|
] }),
|
|
2345
|
-
withCopy ? /* @__PURE__ */ (0,
|
|
2346
|
-
|
|
2773
|
+
withCopy ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
2774
|
+
import_core39.ActionIcon,
|
|
2347
2775
|
{
|
|
2348
2776
|
variant: "subtle",
|
|
2349
2777
|
"aria-label": copied ? "Copied code block" : "Copy code block",
|
|
2350
2778
|
onClick: () => {
|
|
2351
2779
|
void handleCopy();
|
|
2352
2780
|
},
|
|
2353
|
-
children: /* @__PURE__ */ (0,
|
|
2781
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(GdsIcons.Copy, { size: "1rem" })
|
|
2354
2782
|
}
|
|
2355
2783
|
) : null
|
|
2356
2784
|
] }) : null,
|
|
2357
|
-
/* @__PURE__ */ (0,
|
|
2785
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core39.Code, { block: true, children: code })
|
|
2358
2786
|
] }) });
|
|
2359
2787
|
}
|
|
2360
2788
|
|
|
2361
2789
|
// src/CtaButtonGroup.tsx
|
|
2362
|
-
var
|
|
2363
|
-
var
|
|
2790
|
+
var import_core40 = require("@mantine/core");
|
|
2791
|
+
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
2364
2792
|
function CtaButtonGroup({ primary, secondary, tertiary }) {
|
|
2365
|
-
return /* @__PURE__ */ (0,
|
|
2366
|
-
/* @__PURE__ */ (0,
|
|
2367
|
-
/* @__PURE__ */ (0,
|
|
2368
|
-
secondary ? /* @__PURE__ */ (0,
|
|
2793
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_core40.Stack, { gap: "sm", children: [
|
|
2794
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_core40.Group, { gap: "sm", align: "stretch", children: [
|
|
2795
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { children: primary }),
|
|
2796
|
+
secondary ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { children: secondary }) : null
|
|
2369
2797
|
] }),
|
|
2370
|
-
tertiary ? /* @__PURE__ */ (0,
|
|
2798
|
+
tertiary ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { children: tertiary }) : null
|
|
2371
2799
|
] });
|
|
2372
2800
|
}
|
|
2373
2801
|
|
|
2374
2802
|
// src/DocsPageShell.tsx
|
|
2375
|
-
var
|
|
2376
|
-
var
|
|
2803
|
+
var import_core41 = require("@mantine/core");
|
|
2804
|
+
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
2377
2805
|
function DocsPageShell({
|
|
2378
2806
|
breadcrumbs = [],
|
|
2379
2807
|
title,
|
|
@@ -2384,27 +2812,27 @@ function DocsPageShell({
|
|
|
2384
2812
|
footerNext,
|
|
2385
2813
|
children
|
|
2386
2814
|
}) {
|
|
2387
|
-
return /* @__PURE__ */ (0,
|
|
2388
|
-
/* @__PURE__ */ (0,
|
|
2389
|
-
breadcrumbs.length ? /* @__PURE__ */ (0,
|
|
2390
|
-
(crumb) => crumb.href ? /* @__PURE__ */ (0,
|
|
2815
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core41.Container, { fluid: true, py: "xl", px: { base: "md", md: "lg", lg: "xl" }, w: "100%", maw: "100%", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_core41.Group, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
|
|
2816
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_core41.Stack, { component: "article", gap: "lg", flex: 1, miw: 0, children: [
|
|
2817
|
+
breadcrumbs.length ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core41.Breadcrumbs, { children: breadcrumbs.map(
|
|
2818
|
+
(crumb) => crumb.href ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core41.Anchor, { href: crumb.href, children: crumb.label }, `${crumb.label}-${crumb.href}`) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core41.Text, { children: crumb.label }, crumb.label)
|
|
2391
2819
|
) }) : null,
|
|
2392
|
-
/* @__PURE__ */ (0,
|
|
2393
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
2394
|
-
/* @__PURE__ */ (0,
|
|
2395
|
-
lead ? /* @__PURE__ */ (0,
|
|
2396
|
-
meta ? /* @__PURE__ */ (0,
|
|
2820
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_core41.Stack, { gap: "sm", children: [
|
|
2821
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core41.Text, { size: "sm", fw: 700, c: "dimmed", children: eyebrow }) : null,
|
|
2822
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core41.Title, { order: 1, children: title }),
|
|
2823
|
+
lead ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core41.Text, { size: "lg", c: "dimmed", children: lead }) : null,
|
|
2824
|
+
meta ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core41.Group, { gap: "md", children: meta }) : null
|
|
2397
2825
|
] }),
|
|
2398
|
-
/* @__PURE__ */ (0,
|
|
2399
|
-
footerNext ? /* @__PURE__ */ (0,
|
|
2826
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core41.Stack, { gap: "md", children }),
|
|
2827
|
+
footerNext ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core41.Anchor, { href: footerNext.href, fw: 600, children: footerNext.label }) : null
|
|
2400
2828
|
] }),
|
|
2401
|
-
sideRail ? /* @__PURE__ */ (0,
|
|
2829
|
+
sideRail ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core41.Stack, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
|
|
2402
2830
|
] }) });
|
|
2403
2831
|
}
|
|
2404
2832
|
|
|
2405
2833
|
// src/EditorialHero.tsx
|
|
2406
|
-
var
|
|
2407
|
-
var
|
|
2834
|
+
var import_core42 = require("@mantine/core");
|
|
2835
|
+
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
2408
2836
|
function resolveActionVariant(action, index, seenPrimary) {
|
|
2409
2837
|
const requested = action.variant ?? (index === 0 ? "primary" : "secondary");
|
|
2410
2838
|
if (requested === "primary" && !seenPrimary) {
|
|
@@ -2416,8 +2844,8 @@ function resolveActionVariant(action, index, seenPrimary) {
|
|
|
2416
2844
|
return { variant: "default", seenPrimary };
|
|
2417
2845
|
}
|
|
2418
2846
|
function HeroAction({ action, variant }) {
|
|
2419
|
-
const content = /* @__PURE__ */ (0,
|
|
2420
|
-
|
|
2847
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
2848
|
+
import_core42.Anchor,
|
|
2421
2849
|
{
|
|
2422
2850
|
href: action.href,
|
|
2423
2851
|
onClick: action.onClick,
|
|
@@ -2441,8 +2869,8 @@ function HeroAction({ action, variant }) {
|
|
|
2441
2869
|
}
|
|
2442
2870
|
);
|
|
2443
2871
|
if (!action.href) {
|
|
2444
|
-
return /* @__PURE__ */ (0,
|
|
2445
|
-
|
|
2872
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
2873
|
+
import_core42.Box,
|
|
2446
2874
|
{
|
|
2447
2875
|
component: "button",
|
|
2448
2876
|
type: "button",
|
|
@@ -2469,30 +2897,30 @@ function HeroAction({ action, variant }) {
|
|
|
2469
2897
|
return content;
|
|
2470
2898
|
}
|
|
2471
2899
|
function LoadingHero({ compact }) {
|
|
2472
|
-
return /* @__PURE__ */ (0,
|
|
2473
|
-
/* @__PURE__ */ (0,
|
|
2474
|
-
/* @__PURE__ */ (0,
|
|
2475
|
-
/* @__PURE__ */ (0,
|
|
2476
|
-
/* @__PURE__ */ (0,
|
|
2477
|
-
/* @__PURE__ */ (0,
|
|
2478
|
-
/* @__PURE__ */ (0,
|
|
2479
|
-
/* @__PURE__ */ (0,
|
|
2480
|
-
/* @__PURE__ */ (0,
|
|
2900
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Paper, { withBorder: true, radius: "xl", p: compact ? "lg" : "xl", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_core42.Grid, { gutter: compact ? "lg" : "xl", align: "center", children: [
|
|
2901
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Grid.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_core42.Stack, { gap: "md", children: [
|
|
2902
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Skeleton, { height: 16, width: 96, radius: "xl" }),
|
|
2903
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Skeleton, { height: 48, width: "90%", radius: "md" }),
|
|
2904
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Skeleton, { height: 18, width: "100%", radius: "md" }),
|
|
2905
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Skeleton, { height: 18, width: "82%", radius: "md" }),
|
|
2906
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_core42.Group, { children: [
|
|
2907
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Skeleton, { height: 40, width: 140, radius: "md" }),
|
|
2908
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Skeleton, { height: 40, width: 140, radius: "md" })
|
|
2481
2909
|
] })
|
|
2482
2910
|
] }) }),
|
|
2483
|
-
/* @__PURE__ */ (0,
|
|
2911
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Grid.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.AspectRatio, { ratio: 16 / 11, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Skeleton, { radius: "lg" }) }) })
|
|
2484
2912
|
] }) });
|
|
2485
2913
|
}
|
|
2486
2914
|
function MediaFallback() {
|
|
2487
|
-
return /* @__PURE__ */ (0,
|
|
2488
|
-
|
|
2915
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.AspectRatio, { ratio: 16 / 11, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
2916
|
+
import_core42.ThemeIcon,
|
|
2489
2917
|
{
|
|
2490
2918
|
size: "100%",
|
|
2491
2919
|
radius: "lg",
|
|
2492
2920
|
color: "gray",
|
|
2493
2921
|
variant: "light",
|
|
2494
2922
|
"aria-label": "Hero media is unavailable",
|
|
2495
|
-
children: /* @__PURE__ */ (0,
|
|
2923
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(GdsIcons.Gallery, { size: "2.5rem" })
|
|
2496
2924
|
}
|
|
2497
2925
|
) });
|
|
2498
2926
|
}
|
|
@@ -2512,8 +2940,8 @@ function MediaFrame({
|
|
|
2512
2940
|
} else if (mediaFade === "soft-start") {
|
|
2513
2941
|
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%)";
|
|
2514
2942
|
}
|
|
2515
|
-
return /* @__PURE__ */ (0,
|
|
2516
|
-
|
|
2943
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
|
|
2944
|
+
import_core42.Box,
|
|
2517
2945
|
{
|
|
2518
2946
|
component: "figure",
|
|
2519
2947
|
m: 0,
|
|
@@ -2526,9 +2954,9 @@ function MediaFrame({
|
|
|
2526
2954
|
},
|
|
2527
2955
|
"aria-label": mediaAlt,
|
|
2528
2956
|
children: [
|
|
2529
|
-
media ?? /* @__PURE__ */ (0,
|
|
2530
|
-
media && overlayBackground ? /* @__PURE__ */ (0,
|
|
2531
|
-
|
|
2957
|
+
media ?? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(MediaFallback, {}),
|
|
2958
|
+
media && overlayBackground ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
2959
|
+
import_core42.Box,
|
|
2532
2960
|
{
|
|
2533
2961
|
"aria-hidden": true,
|
|
2534
2962
|
style: {
|
|
@@ -2561,7 +2989,7 @@ function EditorialHero({
|
|
|
2561
2989
|
classNames
|
|
2562
2990
|
}) {
|
|
2563
2991
|
if (loading) {
|
|
2564
|
-
return /* @__PURE__ */ (0,
|
|
2992
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(LoadingHero, { compact });
|
|
2565
2993
|
}
|
|
2566
2994
|
const stackAlign = align === "center" ? "center" : "flex-start";
|
|
2567
2995
|
const textAlign = align === "center" ? "center" : "left";
|
|
@@ -2569,15 +2997,15 @@ function EditorialHero({
|
|
|
2569
2997
|
const renderedActions = actions.slice(0, 3).map((action, index) => {
|
|
2570
2998
|
const resolved = resolveActionVariant(action, index, seenPrimary);
|
|
2571
2999
|
seenPrimary = resolved.seenPrimary;
|
|
2572
|
-
return /* @__PURE__ */ (0,
|
|
3000
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(HeroAction, { action, variant: resolved.variant }, `${action.label}-${index}`);
|
|
2573
3001
|
});
|
|
2574
|
-
const textSlot = /* @__PURE__ */ (0,
|
|
2575
|
-
/* @__PURE__ */ (0,
|
|
2576
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
2577
|
-
/* @__PURE__ */ (0,
|
|
2578
|
-
description ? /* @__PURE__ */ (0,
|
|
3002
|
+
const textSlot = /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_core42.Stack, { gap: compact ? "md" : "lg", justify: "center", h: "100%", className: classNames?.content, children: [
|
|
3003
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_core42.Stack, { gap: "sm", align: stackAlign, children: [
|
|
3004
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Text, { size: "sm", fw: 700, c: "dimmed", ta: textAlign, children: eyebrow }) : null,
|
|
3005
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Title, { order: 1, maw: 760, ta: textAlign, children: title }),
|
|
3006
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Text, { size: compact ? "md" : "lg", c: "dimmed", maw: 720, ta: textAlign, children: description }) : null
|
|
2579
3007
|
] }),
|
|
2580
|
-
renderedActions.length ? /* @__PURE__ */ (0,
|
|
3008
|
+
renderedActions.length ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Box, { className: classNames?.actions, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
2581
3009
|
CtaButtonGroup,
|
|
2582
3010
|
{
|
|
2583
3011
|
primary: renderedActions[0],
|
|
@@ -2585,8 +3013,8 @@ function EditorialHero({
|
|
|
2585
3013
|
tertiary: renderedActions[2]
|
|
2586
3014
|
}
|
|
2587
3015
|
) }) : null,
|
|
2588
|
-
meta.length ? /* @__PURE__ */ (0,
|
|
2589
|
-
|
|
3016
|
+
meta.length ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Group, { gap: "sm", wrap: "wrap", "aria-label": "Supporting details", className: classNames?.meta, children: meta.map((item) => /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
|
|
3017
|
+
import_core42.Group,
|
|
2590
3018
|
{
|
|
2591
3019
|
gap: 6,
|
|
2592
3020
|
px: "sm",
|
|
@@ -2597,17 +3025,17 @@ function EditorialHero({
|
|
|
2597
3025
|
},
|
|
2598
3026
|
children: [
|
|
2599
3027
|
item.icon,
|
|
2600
|
-
/* @__PURE__ */ (0,
|
|
3028
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Text, { size: "sm", c: "dimmed", children: item.label })
|
|
2601
3029
|
]
|
|
2602
3030
|
},
|
|
2603
3031
|
item.id
|
|
2604
3032
|
)) }) : null
|
|
2605
3033
|
] });
|
|
2606
|
-
const mediaSlot = error ? /* @__PURE__ */ (0,
|
|
2607
|
-
const textCol = /* @__PURE__ */ (0,
|
|
2608
|
-
const mediaCol = /* @__PURE__ */ (0,
|
|
2609
|
-
return /* @__PURE__ */ (0,
|
|
2610
|
-
|
|
3034
|
+
const mediaSlot = error ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(AccentPanel, { tone: "red", variant: "soft-outline", title: "Media unavailable", children: error }) : /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(MediaFrame, { media, mediaAlt, mediaFade, className: classNames?.media });
|
|
3035
|
+
const textCol = /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Grid.Col, { span: { base: 12, md: 6 }, order: { base: 1, md: mediaPosition === "left" ? 2 : 1 }, children: textSlot });
|
|
3036
|
+
const mediaCol = /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Grid.Col, { span: { base: 12, md: 6 }, order: { base: 2, md: mediaPosition === "left" ? 1 : 2 }, children: mediaSlot });
|
|
3037
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3038
|
+
import_core42.Paper,
|
|
2611
3039
|
{
|
|
2612
3040
|
component: "section",
|
|
2613
3041
|
withBorder: true,
|
|
@@ -2615,7 +3043,7 @@ function EditorialHero({
|
|
|
2615
3043
|
p: compact ? "lg" : "xl",
|
|
2616
3044
|
className: classNames?.root,
|
|
2617
3045
|
style: surfaceVariant === "flat-public" ? { boxShadow: "none" } : void 0,
|
|
2618
|
-
children: /* @__PURE__ */ (0,
|
|
3046
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_core42.Grid, { gutter: compact ? "lg" : "xl", align: "center", children: [
|
|
2619
3047
|
textCol,
|
|
2620
3048
|
mediaCol
|
|
2621
3049
|
] })
|
|
@@ -2624,19 +3052,19 @@ function EditorialHero({
|
|
|
2624
3052
|
}
|
|
2625
3053
|
|
|
2626
3054
|
// src/FeatureBand.tsx
|
|
2627
|
-
var
|
|
2628
|
-
var
|
|
3055
|
+
var import_core43 = require("@mantine/core");
|
|
3056
|
+
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
2629
3057
|
function FeatureBandSkeleton({
|
|
2630
3058
|
columns = 3,
|
|
2631
3059
|
bordered = true,
|
|
2632
3060
|
variant = "default"
|
|
2633
3061
|
}) {
|
|
2634
|
-
return /* @__PURE__ */ (0,
|
|
2635
|
-
/* @__PURE__ */ (0,
|
|
2636
|
-
/* @__PURE__ */ (0,
|
|
2637
|
-
/* @__PURE__ */ (0,
|
|
2638
|
-
/* @__PURE__ */ (0,
|
|
2639
|
-
/* @__PURE__ */ (0,
|
|
3062
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Paper, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_core43.Stack, { gap: "md", children: [
|
|
3063
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Skeleton, { height: variant === "process" ? 28 : 42, width: variant === "process" ? 72 : 42, radius: "xl" }),
|
|
3064
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_core43.Stack, { gap: "xs", children: [
|
|
3065
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Skeleton, { height: 20, width: "75%", radius: "md" }),
|
|
3066
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Skeleton, { height: 14, width: "100%", radius: "md" }),
|
|
3067
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Skeleton, { height: 14, width: "82%", radius: "md" })
|
|
2640
3068
|
] })
|
|
2641
3069
|
] }) }, index)) });
|
|
2642
3070
|
}
|
|
@@ -2649,10 +3077,10 @@ function FeatureBand({
|
|
|
2649
3077
|
variant = "default"
|
|
2650
3078
|
}) {
|
|
2651
3079
|
if (loading) {
|
|
2652
|
-
return /* @__PURE__ */ (0,
|
|
3080
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(FeatureBandSkeleton, { columns, bordered, variant });
|
|
2653
3081
|
}
|
|
2654
3082
|
if (!items.length) {
|
|
2655
|
-
return emptyState ? /* @__PURE__ */ (0,
|
|
3083
|
+
return emptyState ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: emptyState }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
2656
3084
|
EmptyState,
|
|
2657
3085
|
{
|
|
2658
3086
|
title: "No supporting details available",
|
|
@@ -2660,9 +3088,9 @@ function FeatureBand({
|
|
|
2660
3088
|
}
|
|
2661
3089
|
);
|
|
2662
3090
|
}
|
|
2663
|
-
return /* @__PURE__ */ (0,
|
|
2664
|
-
variant === "process" ? /* @__PURE__ */ (0,
|
|
2665
|
-
|
|
3091
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Box, { component: "section", "aria-label": "Supporting features", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Paper, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_core43.Stack, { gap: "md", children: [
|
|
3092
|
+
variant === "process" ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
3093
|
+
import_core43.Text,
|
|
2666
3094
|
{
|
|
2667
3095
|
fw: 800,
|
|
2668
3096
|
size: "sm",
|
|
@@ -2674,18 +3102,18 @@ function FeatureBand({
|
|
|
2674
3102
|
},
|
|
2675
3103
|
children: item.stepLabel ?? `Step ${index + 1}`
|
|
2676
3104
|
}
|
|
2677
|
-
) }) : item.media ? item.media : item.icon ? /* @__PURE__ */ (0,
|
|
2678
|
-
/* @__PURE__ */ (0,
|
|
2679
|
-
/* @__PURE__ */ (0,
|
|
2680
|
-
item.description ? /* @__PURE__ */ (0,
|
|
2681
|
-
item.meta ? /* @__PURE__ */ (0,
|
|
3105
|
+
) }) : item.media ? item.media : item.icon ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.ThemeIcon, { size: "xl", radius: "xl", variant: "light", color: "violet", children: item.icon }) }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.ThemeIcon, { size: "xl", radius: "xl", variant: "light", color: "gray", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(GdsIcons.Info, { size: "1.25rem" }) }) }),
|
|
3106
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_core43.Stack, { gap: "xs", children: [
|
|
3107
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Title, { order: 4, children: item.title }),
|
|
3108
|
+
item.description ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Text, { c: "dimmed", children: item.description }) : null,
|
|
3109
|
+
item.meta ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Text, { size: "sm", c: "dimmed", children: item.meta }) : null
|
|
2682
3110
|
] })
|
|
2683
3111
|
] }) }, item.id)) }) });
|
|
2684
3112
|
}
|
|
2685
3113
|
|
|
2686
3114
|
// src/MapPanel.tsx
|
|
2687
|
-
var
|
|
2688
|
-
var
|
|
3115
|
+
var import_core44 = require("@mantine/core");
|
|
3116
|
+
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
2689
3117
|
function MapPanel({
|
|
2690
3118
|
title,
|
|
2691
3119
|
description,
|
|
@@ -2701,7 +3129,7 @@ function MapPanel({
|
|
|
2701
3129
|
}) {
|
|
2702
3130
|
let body;
|
|
2703
3131
|
if (loading) {
|
|
2704
|
-
body = /* @__PURE__ */ (0,
|
|
3132
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
2705
3133
|
StateBlock,
|
|
2706
3134
|
{
|
|
2707
3135
|
variant: "loading",
|
|
@@ -2711,9 +3139,9 @@ function MapPanel({
|
|
|
2711
3139
|
}
|
|
2712
3140
|
);
|
|
2713
3141
|
} else if (error) {
|
|
2714
|
-
body = /* @__PURE__ */ (0,
|
|
3142
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(StateBlock, { variant: "error", title: "Map unavailable", description: error, compact: true });
|
|
2715
3143
|
} else if (!iframeSrc && !renderMap) {
|
|
2716
|
-
body = /* @__PURE__ */ (0,
|
|
3144
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
2717
3145
|
StateBlock,
|
|
2718
3146
|
{
|
|
2719
3147
|
variant: "empty",
|
|
@@ -2723,9 +3151,9 @@ function MapPanel({
|
|
|
2723
3151
|
}
|
|
2724
3152
|
);
|
|
2725
3153
|
} else if (renderMap) {
|
|
2726
|
-
body = /* @__PURE__ */ (0,
|
|
3154
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_core44.Box, { style: { minHeight }, children: renderMap() });
|
|
2727
3155
|
} else {
|
|
2728
|
-
body = /* @__PURE__ */ (0,
|
|
3156
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_core44.AspectRatio, { ratio: 16 / 9, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
2729
3157
|
"iframe",
|
|
2730
3158
|
{
|
|
2731
3159
|
src: iframeSrc,
|
|
@@ -2737,21 +3165,21 @@ function MapPanel({
|
|
|
2737
3165
|
}
|
|
2738
3166
|
) });
|
|
2739
3167
|
}
|
|
2740
|
-
return /* @__PURE__ */ (0,
|
|
2741
|
-
/* @__PURE__ */ (0,
|
|
2742
|
-
/* @__PURE__ */ (0,
|
|
2743
|
-
/* @__PURE__ */ (0,
|
|
2744
|
-
description ? /* @__PURE__ */ (0,
|
|
3168
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_core44.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_core44.Stack, { gap: "md", children: [
|
|
3169
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_core44.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
|
|
3170
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_core44.Stack, { gap: 4, children: [
|
|
3171
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_core44.Title, { order: 3, children: title }),
|
|
3172
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_core44.Text, { size: "sm", c: "dimmed", children: description }) : null
|
|
2745
3173
|
] }),
|
|
2746
|
-
actions ? /* @__PURE__ */ (0,
|
|
3174
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ActionBar, { ...actions }) : null
|
|
2747
3175
|
] }),
|
|
2748
3176
|
body
|
|
2749
3177
|
] }) });
|
|
2750
3178
|
}
|
|
2751
3179
|
|
|
2752
3180
|
// src/PublicFlowShell.tsx
|
|
2753
|
-
var
|
|
2754
|
-
var
|
|
3181
|
+
var import_core45 = require("@mantine/core");
|
|
3182
|
+
var import_jsx_runtime47 = require("react/jsx-runtime");
|
|
2755
3183
|
var stageTone = {
|
|
2756
3184
|
idle: { label: "Idle", color: "gray" },
|
|
2757
3185
|
loading: { label: "Loading", color: "blue" },
|
|
@@ -2803,7 +3231,7 @@ function PublicFlowShell({
|
|
|
2803
3231
|
const actionBar = toActionBar(stage.actions);
|
|
2804
3232
|
let body = stage.body;
|
|
2805
3233
|
if (stage.status === "loading") {
|
|
2806
|
-
body = /* @__PURE__ */ (0,
|
|
3234
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
2807
3235
|
StateBlock,
|
|
2808
3236
|
{
|
|
2809
3237
|
variant: "loading",
|
|
@@ -2812,7 +3240,7 @@ function PublicFlowShell({
|
|
|
2812
3240
|
}
|
|
2813
3241
|
);
|
|
2814
3242
|
} else if (stage.status === "error") {
|
|
2815
|
-
body = errorState ?? /* @__PURE__ */ (0,
|
|
3243
|
+
body = errorState ?? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
2816
3244
|
StateBlock,
|
|
2817
3245
|
{
|
|
2818
3246
|
variant: "error",
|
|
@@ -2821,7 +3249,7 @@ function PublicFlowShell({
|
|
|
2821
3249
|
}
|
|
2822
3250
|
);
|
|
2823
3251
|
} else if (!stage.body && !hardwareSurface) {
|
|
2824
|
-
body = emptyState ?? /* @__PURE__ */ (0,
|
|
3252
|
+
body = emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
2825
3253
|
EmptyState,
|
|
2826
3254
|
{
|
|
2827
3255
|
title: "No stage content available",
|
|
@@ -2829,29 +3257,29 @@ function PublicFlowShell({
|
|
|
2829
3257
|
}
|
|
2830
3258
|
);
|
|
2831
3259
|
}
|
|
2832
|
-
return /* @__PURE__ */ (0,
|
|
2833
|
-
/* @__PURE__ */ (0,
|
|
2834
|
-
/* @__PURE__ */ (0,
|
|
2835
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
2836
|
-
/* @__PURE__ */ (0,
|
|
2837
|
-
/* @__PURE__ */ (0,
|
|
2838
|
-
/* @__PURE__ */ (0,
|
|
3260
|
+
return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_core45.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_core45.Stack, { gap: "lg", children: [
|
|
3261
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_core45.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
|
|
3262
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_core45.Stack, { gap: 4, children: [
|
|
3263
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_core45.Text, { size: "xs", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
|
|
3264
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_core45.Group, { gap: "sm", wrap: "wrap", children: [
|
|
3265
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_core45.Title, { order: 2, children: stage.title }),
|
|
3266
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_core45.Badge, { variant: "light", color: tone.color, children: tone.label })
|
|
2839
3267
|
] }),
|
|
2840
|
-
stage.description ? /* @__PURE__ */ (0,
|
|
3268
|
+
stage.description ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_core45.Text, { size: "sm", c: "dimmed", children: stage.description }) : null
|
|
2841
3269
|
] }),
|
|
2842
3270
|
exitAction
|
|
2843
3271
|
] }),
|
|
2844
|
-
stage.notice ? /* @__PURE__ */ (0,
|
|
3272
|
+
stage.notice ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_core45.Text, { size: "sm", c: "dimmed", children: stage.notice }) : null,
|
|
2845
3273
|
body,
|
|
2846
3274
|
hardwareSurface,
|
|
2847
3275
|
stage.aside,
|
|
2848
|
-
actionBar ? /* @__PURE__ */ (0,
|
|
3276
|
+
actionBar ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ActionBar, { ...actionBar }) : null
|
|
2849
3277
|
] }) });
|
|
2850
3278
|
}
|
|
2851
3279
|
|
|
2852
3280
|
// src/PlaybackSurface.tsx
|
|
2853
|
-
var
|
|
2854
|
-
var
|
|
3281
|
+
var import_core46 = require("@mantine/core");
|
|
3282
|
+
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
2855
3283
|
var stateTone = {
|
|
2856
3284
|
loading: { label: "Loading", color: "blue" },
|
|
2857
3285
|
ready: { label: "Ready", color: "teal" },
|
|
@@ -2874,7 +3302,7 @@ function PlaybackSurface({
|
|
|
2874
3302
|
const tone = stateTone[state];
|
|
2875
3303
|
let content;
|
|
2876
3304
|
if (state === "loading") {
|
|
2877
|
-
content = /* @__PURE__ */ (0,
|
|
3305
|
+
content = /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
2878
3306
|
StateBlock,
|
|
2879
3307
|
{
|
|
2880
3308
|
variant: "loading",
|
|
@@ -2883,7 +3311,7 @@ function PlaybackSurface({
|
|
|
2883
3311
|
}
|
|
2884
3312
|
);
|
|
2885
3313
|
} else if (state === "empty") {
|
|
2886
|
-
content = emptyState ?? /* @__PURE__ */ (0,
|
|
3314
|
+
content = emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
2887
3315
|
EmptyState,
|
|
2888
3316
|
{
|
|
2889
3317
|
title: "No playback content available",
|
|
@@ -2891,7 +3319,7 @@ function PlaybackSurface({
|
|
|
2891
3319
|
}
|
|
2892
3320
|
);
|
|
2893
3321
|
} else if (state === "error") {
|
|
2894
|
-
content = errorState ?? /* @__PURE__ */ (0,
|
|
3322
|
+
content = errorState ?? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
2895
3323
|
StateBlock,
|
|
2896
3324
|
{
|
|
2897
3325
|
variant: "error",
|
|
@@ -2900,23 +3328,23 @@ function PlaybackSurface({
|
|
|
2900
3328
|
}
|
|
2901
3329
|
);
|
|
2902
3330
|
} else {
|
|
2903
|
-
content = /* @__PURE__ */ (0,
|
|
3331
|
+
content = /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_core46.Stack, { gap: "md", children: [
|
|
2904
3332
|
media,
|
|
2905
3333
|
overlays
|
|
2906
3334
|
] });
|
|
2907
3335
|
}
|
|
2908
|
-
return /* @__PURE__ */ (0,
|
|
2909
|
-
title || statusMessage || controls ? /* @__PURE__ */ (0,
|
|
2910
|
-
/* @__PURE__ */ (0,
|
|
2911
|
-
title ? /* @__PURE__ */ (0,
|
|
2912
|
-
statusMessage ? /* @__PURE__ */ (0,
|
|
3336
|
+
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_core46.Paper, { withBorder: true, radius: "xl", p: "lg", "data-playback-mode": mode, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_core46.Stack, { gap: "md", children: [
|
|
3337
|
+
title || statusMessage || controls ? /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_core46.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
|
|
3338
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_core46.Stack, { gap: 4, children: [
|
|
3339
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_core46.Title, { order: 3, children: title }) : null,
|
|
3340
|
+
statusMessage ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_core46.Text, { size: "sm", c: "dimmed", children: statusMessage }) : null
|
|
2913
3341
|
] }),
|
|
2914
|
-
/* @__PURE__ */ (0,
|
|
2915
|
-
/* @__PURE__ */ (0,
|
|
3342
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(import_core46.Group, { gap: "sm", align: "center", wrap: "wrap", children: [
|
|
3343
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_core46.Badge, { variant: "light", color: tone.color, children: tone.label }),
|
|
2916
3344
|
controls
|
|
2917
3345
|
] })
|
|
2918
3346
|
] }) : null,
|
|
2919
|
-
state === "degraded" ? /* @__PURE__ */ (0,
|
|
3347
|
+
state === "degraded" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
2920
3348
|
StateBlock,
|
|
2921
3349
|
{
|
|
2922
3350
|
variant: "info",
|
|
@@ -2930,9 +3358,9 @@ function PlaybackSurface({
|
|
|
2930
3358
|
}
|
|
2931
3359
|
|
|
2932
3360
|
// src/ShareButtonGroup.tsx
|
|
2933
|
-
var
|
|
2934
|
-
var
|
|
2935
|
-
var
|
|
3361
|
+
var import_react8 = require("react");
|
|
3362
|
+
var import_core47 = require("@mantine/core");
|
|
3363
|
+
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
2936
3364
|
var channelLabels = {
|
|
2937
3365
|
native: "Share",
|
|
2938
3366
|
copy: "Copy link",
|
|
@@ -2967,9 +3395,9 @@ function ShareAction({
|
|
|
2967
3395
|
const label = channelLabels[channel];
|
|
2968
3396
|
const Icon = channel === "copy" ? GdsIcons.Copy : channel === "mail" ? GdsIcons.Mail : channel === "message" ? GdsIcons.Message : GdsIcons.Refer;
|
|
2969
3397
|
if (compact) {
|
|
2970
|
-
return href ? /* @__PURE__ */ (0,
|
|
3398
|
+
return href ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core47.ActionIcon, { component: "a", href, target: "_blank", rel: "noreferrer", variant: "subtle", size: "lg", "aria-label": label, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Icon, { size: "1rem", stroke: 1.75 }) }) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core47.ActionIcon, { variant: "subtle", size: "lg", "aria-label": label, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Icon, { size: "1rem", stroke: 1.75 }) });
|
|
2971
3399
|
}
|
|
2972
|
-
return href ? /* @__PURE__ */ (0,
|
|
3400
|
+
return href ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core47.Button, { component: "a", href, target: "_blank", rel: "noreferrer", variant: "default", leftSection: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Icon, { size: "1rem", stroke: 1.75 }), children: label }) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core47.Button, { variant: "default", leftSection: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Icon, { size: "1rem", stroke: 1.75 }), onClick, children: label });
|
|
2973
3401
|
}
|
|
2974
3402
|
function ShareButtonGroup({
|
|
2975
3403
|
url,
|
|
@@ -2980,8 +3408,8 @@ function ShareButtonGroup({
|
|
|
2980
3408
|
label = "Share this",
|
|
2981
3409
|
description
|
|
2982
3410
|
}) {
|
|
2983
|
-
const [copied, setCopied] = (0,
|
|
2984
|
-
const [shared, setShared] = (0,
|
|
3411
|
+
const [copied, setCopied] = (0, import_react8.useState)(false);
|
|
3412
|
+
const [shared, setShared] = (0, import_react8.useState)(false);
|
|
2985
3413
|
const hrefs = encodeShare(url, title, text);
|
|
2986
3414
|
async function handleCopy() {
|
|
2987
3415
|
await navigator.clipboard?.writeText?.(url);
|
|
@@ -2997,52 +3425,67 @@ function ShareButtonGroup({
|
|
|
2997
3425
|
}
|
|
2998
3426
|
await handleCopy();
|
|
2999
3427
|
}
|
|
3000
|
-
return /* @__PURE__ */ (0,
|
|
3001
|
-
/* @__PURE__ */ (0,
|
|
3002
|
-
/* @__PURE__ */ (0,
|
|
3003
|
-
description ? /* @__PURE__ */ (0,
|
|
3428
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_core47.Stack, { gap: "sm", children: [
|
|
3429
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_core47.Stack, { gap: 2, children: [
|
|
3430
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core47.Text, { fw: 600, children: label }),
|
|
3431
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core47.Text, { size: "sm", c: "dimmed", children: description }) : null
|
|
3004
3432
|
] }),
|
|
3005
|
-
/* @__PURE__ */ (0,
|
|
3433
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core47.Group, { gap: "sm", wrap: "wrap", children: channels.map((channel) => {
|
|
3006
3434
|
if (channel === "copy") {
|
|
3007
|
-
return /* @__PURE__ */ (0,
|
|
3435
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ShareAction, { channel, compact, onClick: () => void handleCopy() }, channel);
|
|
3008
3436
|
}
|
|
3009
3437
|
if (channel === "native") {
|
|
3010
|
-
return /* @__PURE__ */ (0,
|
|
3438
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ShareAction, { channel, compact, onClick: () => void handleNativeShare() }, channel);
|
|
3011
3439
|
}
|
|
3012
|
-
return /* @__PURE__ */ (0,
|
|
3440
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ShareAction, { channel, compact, href: hrefs[channel] }, channel);
|
|
3013
3441
|
}) }),
|
|
3014
|
-
copied ? /* @__PURE__ */ (0,
|
|
3015
|
-
shared ? /* @__PURE__ */ (0,
|
|
3442
|
+
copied ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core47.Text, { size: "sm", c: "teal", children: "Link copied." }) : null,
|
|
3443
|
+
shared ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core47.Text, { size: "sm", c: "teal", children: "Share sheet opened." }) : null
|
|
3016
3444
|
] });
|
|
3017
3445
|
}
|
|
3018
3446
|
|
|
3019
3447
|
// src/UploadDropzone.tsx
|
|
3020
|
-
var
|
|
3021
|
-
var
|
|
3022
|
-
var
|
|
3448
|
+
var import_react9 = require("react");
|
|
3449
|
+
var import_core48 = require("@mantine/core");
|
|
3450
|
+
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
3023
3451
|
function UploadDropzone({
|
|
3024
3452
|
title,
|
|
3025
3453
|
description,
|
|
3026
3454
|
onFilesSelected,
|
|
3027
3455
|
accept,
|
|
3456
|
+
acceptedTypesLabel,
|
|
3457
|
+
maxSizeLabel,
|
|
3028
3458
|
multiple = true,
|
|
3029
3459
|
actionLabel = "Choose files",
|
|
3030
|
-
mode = "panel"
|
|
3460
|
+
mode = "panel",
|
|
3461
|
+
state = "idle",
|
|
3462
|
+
selectedFiles = [],
|
|
3463
|
+
error,
|
|
3464
|
+
policyText,
|
|
3465
|
+
retryAction,
|
|
3466
|
+
removeAction,
|
|
3467
|
+
readonly = false
|
|
3031
3468
|
}) {
|
|
3032
|
-
const inputRef = (0,
|
|
3033
|
-
const [dragging, setDragging] = (0,
|
|
3469
|
+
const inputRef = (0, import_react9.useRef)(null);
|
|
3470
|
+
const [dragging, setDragging] = (0, import_react9.useState)(false);
|
|
3034
3471
|
const UploadIcon = GdsIcons.Upload;
|
|
3472
|
+
const effectiveState = readonly ? "readonly" : dragging ? "drag-active" : state;
|
|
3473
|
+
const isDisabled = readonly || effectiveState === "upload-pending";
|
|
3474
|
+
const isError = ["upload-failed", "unsupported-type", "too-large"].includes(effectiveState);
|
|
3035
3475
|
const forwardFiles = (files) => {
|
|
3036
|
-
if (!files?.length || !onFilesSelected) {
|
|
3476
|
+
if (isDisabled || !files?.length || !onFilesSelected) {
|
|
3037
3477
|
return;
|
|
3038
3478
|
}
|
|
3039
3479
|
onFilesSelected(Array.from(files));
|
|
3040
3480
|
};
|
|
3041
|
-
return /* @__PURE__ */ (0,
|
|
3042
|
-
|
|
3481
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
|
|
3482
|
+
import_core48.Box,
|
|
3043
3483
|
{
|
|
3044
3484
|
onDragOver: (event) => {
|
|
3045
3485
|
event.preventDefault();
|
|
3486
|
+
if (isDisabled) {
|
|
3487
|
+
return;
|
|
3488
|
+
}
|
|
3046
3489
|
setDragging(true);
|
|
3047
3490
|
},
|
|
3048
3491
|
onDragLeave: () => setDragging(false),
|
|
@@ -3053,12 +3496,13 @@ function UploadDropzone({
|
|
|
3053
3496
|
},
|
|
3054
3497
|
p: mode === "inline" ? "md" : "xl",
|
|
3055
3498
|
style: {
|
|
3056
|
-
border: `1px dashed var(${
|
|
3499
|
+
border: `1px dashed var(${effectiveState === "drag-active" ? "--mantine-color-violet-6" : isError ? "--mantine-color-red-6" : "--mantine-color-default-border"})`,
|
|
3057
3500
|
borderRadius: "var(--mantine-radius-lg)",
|
|
3058
|
-
background:
|
|
3501
|
+
background: effectiveState === "drag-active" ? "var(--mantine-color-violet-light)" : "transparent"
|
|
3059
3502
|
},
|
|
3503
|
+
"aria-invalid": isError || void 0,
|
|
3060
3504
|
children: [
|
|
3061
|
-
/* @__PURE__ */ (0,
|
|
3505
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
3062
3506
|
"input",
|
|
3063
3507
|
{
|
|
3064
3508
|
ref: inputRef,
|
|
@@ -3066,14 +3510,30 @@ function UploadDropzone({
|
|
|
3066
3510
|
hidden: true,
|
|
3067
3511
|
accept,
|
|
3068
3512
|
multiple,
|
|
3513
|
+
disabled: isDisabled,
|
|
3069
3514
|
onChange: (event) => forwardFiles(event.currentTarget.files)
|
|
3070
3515
|
}
|
|
3071
3516
|
),
|
|
3072
|
-
/* @__PURE__ */ (0,
|
|
3073
|
-
/* @__PURE__ */ (0,
|
|
3074
|
-
/* @__PURE__ */ (0,
|
|
3075
|
-
|
|
3076
|
-
|
|
3517
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_core48.Stack, { align: mode === "inline" ? "flex-start" : "center", ta: mode === "inline" ? "left" : "center", gap: "sm", children: [
|
|
3518
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(UploadIcon, { size: "1.5rem" }),
|
|
3519
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_core48.Badge, { variant: "light", color: isError ? "red" : effectiveState === "selected" ? "blue" : effectiveState === "upload-pending" ? "violet" : "gray", children: effectiveState.replace("-", " ") }),
|
|
3520
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_core48.Text, { fw: 600, children: title }),
|
|
3521
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_core48.Text, { size: "sm", c: "dimmed", children: description }) : null,
|
|
3522
|
+
acceptedTypesLabel || maxSizeLabel ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_core48.Group, { gap: "xs", justify: mode === "inline" ? "flex-start" : "center", children: [
|
|
3523
|
+
acceptedTypesLabel ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_core48.Badge, { variant: "outline", color: "gray", children: acceptedTypesLabel }) : null,
|
|
3524
|
+
maxSizeLabel ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_core48.Badge, { variant: "outline", color: "gray", children: maxSizeLabel }) : null
|
|
3525
|
+
] }) : null,
|
|
3526
|
+
selectedFiles.length ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_core48.Text, { size: "sm", children: [
|
|
3527
|
+
"Selected: ",
|
|
3528
|
+
selectedFiles.join(", ")
|
|
3529
|
+
] }) : null,
|
|
3530
|
+
policyText ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_core48.Text, { size: "sm", c: isError ? "red.7" : "dimmed", children: policyText }) : null,
|
|
3531
|
+
error ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_core48.Text, { size: "sm", c: "red.7", role: "alert", children: error }) : null,
|
|
3532
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_core48.Group, { children: [
|
|
3533
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_core48.Button, { variant: "light", onClick: () => inputRef.current?.click(), disabled: isDisabled, children: actionLabel }),
|
|
3534
|
+
retryAction,
|
|
3535
|
+
removeAction
|
|
3536
|
+
] })
|
|
3077
3537
|
] })
|
|
3078
3538
|
]
|
|
3079
3539
|
}
|
|
@@ -3081,14 +3541,21 @@ function UploadDropzone({
|
|
|
3081
3541
|
}
|
|
3082
3542
|
|
|
3083
3543
|
// src/MediaField.tsx
|
|
3084
|
-
var
|
|
3085
|
-
var
|
|
3544
|
+
var import_core49 = require("@mantine/core");
|
|
3545
|
+
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
3086
3546
|
var stateLabels = {
|
|
3087
3547
|
empty: { label: "Empty", color: "gray" },
|
|
3548
|
+
"drag-active": { label: "Drop to select", color: "violet" },
|
|
3088
3549
|
selected: { label: "Selected", color: "blue" },
|
|
3550
|
+
"preview-loading": { label: "Preview loading", color: "violet" },
|
|
3089
3551
|
saved: { label: "Saved", color: "teal" },
|
|
3090
3552
|
invalid: { label: "Needs attention", color: "red" },
|
|
3091
|
-
uploading: { label: "Uploading", color: "violet" }
|
|
3553
|
+
uploading: { label: "Uploading", color: "violet" },
|
|
3554
|
+
"upload-failed": { label: "Upload failed", color: "red" },
|
|
3555
|
+
"unsupported-type": { label: "Unsupported type", color: "red" },
|
|
3556
|
+
"too-large": { label: "Too large", color: "red" },
|
|
3557
|
+
removed: { label: "Removed", color: "gray" },
|
|
3558
|
+
readonly: { label: "Read only", color: "gray" }
|
|
3092
3559
|
};
|
|
3093
3560
|
function MediaField({
|
|
3094
3561
|
label,
|
|
@@ -3101,41 +3568,60 @@ function MediaField({
|
|
|
3101
3568
|
policyText,
|
|
3102
3569
|
error,
|
|
3103
3570
|
retryAction,
|
|
3571
|
+
replaceAction,
|
|
3104
3572
|
onRemove,
|
|
3105
3573
|
onReset,
|
|
3106
3574
|
removeAction,
|
|
3107
3575
|
resetAction,
|
|
3108
3576
|
statusAction,
|
|
3577
|
+
acceptedTypes,
|
|
3578
|
+
maxSize,
|
|
3579
|
+
progress,
|
|
3580
|
+
readonly = false,
|
|
3109
3581
|
state = "empty",
|
|
3110
3582
|
mode = "stacked"
|
|
3111
3583
|
}) {
|
|
3112
|
-
const
|
|
3113
|
-
const
|
|
3114
|
-
const
|
|
3115
|
-
|
|
3584
|
+
const resolvedState = readonly ? "readonly" : state;
|
|
3585
|
+
const stateBadge = stateLabels[resolvedState];
|
|
3586
|
+
const resolvedRemoveAction = removeAction ?? (!readonly && onRemove ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core49.Button, { type: "button", variant: "light", color: "red", onClick: onRemove, children: "Remove" }) : null);
|
|
3587
|
+
const resolvedResetAction = resetAction ?? (!readonly && onReset ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core49.Button, { type: "button", variant: "default", onClick: onReset, children: "Reset" }) : null);
|
|
3588
|
+
const boundedProgress = typeof progress === "number" ? Math.max(0, Math.min(100, progress)) : void 0;
|
|
3589
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
3116
3590
|
FormField,
|
|
3117
3591
|
{
|
|
3118
3592
|
label,
|
|
3119
3593
|
description,
|
|
3120
3594
|
error,
|
|
3121
|
-
children: /* @__PURE__ */ (0,
|
|
3122
|
-
/* @__PURE__ */ (0,
|
|
3123
|
-
/* @__PURE__ */ (0,
|
|
3595
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core49.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_core49.Stack, { gap: "md", children: [
|
|
3596
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core49.Group, { justify: "flex-end", align: "center", gap: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_core49.Group, { gap: "xs", justify: "flex-end", children: [
|
|
3597
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core49.Badge, { variant: "light", color: stateBadge.color, children: stateBadge.label }),
|
|
3124
3598
|
statusAction
|
|
3125
3599
|
] }) }),
|
|
3126
3600
|
preview ? preview : null,
|
|
3127
|
-
|
|
3128
|
-
/* @__PURE__ */ (0,
|
|
3129
|
-
/* @__PURE__ */ (0,
|
|
3601
|
+
typeof boundedProgress === "number" ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_core49.Stack, { gap: 4, children: [
|
|
3602
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core49.Progress, { value: boundedProgress, "aria-label": "Upload progress" }),
|
|
3603
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_core49.Text, { size: "xs", c: "dimmed", children: [
|
|
3604
|
+
boundedProgress,
|
|
3605
|
+
"% complete"
|
|
3606
|
+
] })
|
|
3607
|
+
] }) : null,
|
|
3608
|
+
(uploadControl || urlInput) && !readonly ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, { children: [
|
|
3609
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core49.Divider, {}),
|
|
3610
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_core49.Stack, { gap: "sm", style: mode === "split" ? { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))" } : void 0, children: [
|
|
3130
3611
|
uploadControl,
|
|
3131
3612
|
urlInput
|
|
3132
3613
|
] })
|
|
3133
3614
|
] }) : null,
|
|
3134
|
-
value ? /* @__PURE__ */ (0,
|
|
3135
|
-
helpText ? /* @__PURE__ */ (0,
|
|
3136
|
-
|
|
3615
|
+
value ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core49.Text, { size: "sm", c: "dimmed", style: { wordBreak: "break-all" }, children: value }) : null,
|
|
3616
|
+
helpText ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core49.Text, { size: "sm", c: "dimmed", children: helpText }) : null,
|
|
3617
|
+
acceptedTypes || maxSize ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_core49.Group, { gap: "xs", wrap: "wrap", children: [
|
|
3618
|
+
acceptedTypes ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core49.Badge, { variant: "outline", color: "gray", children: acceptedTypes }) : null,
|
|
3619
|
+
maxSize ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core49.Badge, { variant: "outline", color: "gray", children: maxSize }) : null
|
|
3620
|
+
] }) : null,
|
|
3621
|
+
policyText ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core49.Text, { size: "sm", c: error ? "red.7" : "dimmed", children: policyText }) : null,
|
|
3137
3622
|
typeof error !== "string" && error ? error : null,
|
|
3138
|
-
resolvedRemoveAction || resolvedResetAction ? /* @__PURE__ */ (0,
|
|
3623
|
+
replaceAction || resolvedRemoveAction || resolvedResetAction || retryAction ? /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_core49.Group, { gap: "sm", children: [
|
|
3624
|
+
replaceAction,
|
|
3139
3625
|
resolvedResetAction,
|
|
3140
3626
|
retryAction,
|
|
3141
3627
|
resolvedRemoveAction
|
|
@@ -3146,53 +3632,68 @@ function MediaField({
|
|
|
3146
3632
|
}
|
|
3147
3633
|
|
|
3148
3634
|
// src/MediaCard.tsx
|
|
3149
|
-
var
|
|
3150
|
-
var
|
|
3635
|
+
var import_core50 = require("@mantine/core");
|
|
3636
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
3151
3637
|
function MediaCard({ title, image, description, status, overlay, actions = [] }) {
|
|
3152
3638
|
const EyeIcon = GdsIcons.Eye;
|
|
3153
|
-
return /* @__PURE__ */ (0,
|
|
3154
|
-
/* @__PURE__ */ (0,
|
|
3639
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_core50.Card, { withBorder: true, radius: "lg", padding: "md", children: [
|
|
3640
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_core50.Card.Section, { pos: "relative", children: [
|
|
3155
3641
|
image,
|
|
3156
|
-
overlay ? /* @__PURE__ */ (0,
|
|
3642
|
+
overlay ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { style: { position: "absolute", inset: 12, display: "flex", justifyContent: "flex-end", alignItems: "flex-start" }, children: overlay }) : null
|
|
3157
3643
|
] }),
|
|
3158
|
-
/* @__PURE__ */ (0,
|
|
3159
|
-
/* @__PURE__ */ (0,
|
|
3160
|
-
/* @__PURE__ */ (0,
|
|
3161
|
-
/* @__PURE__ */ (0,
|
|
3162
|
-
description ? /* @__PURE__ */ (0,
|
|
3644
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_core50.Stack, { gap: "sm", mt: "md", children: [
|
|
3645
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_core50.Group, { justify: "space-between", align: "flex-start", children: [
|
|
3646
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_core50.Stack, { gap: 4, children: [
|
|
3647
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_core50.Title, { order: 4, children: title }),
|
|
3648
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_core50.Text, { size: "sm", c: "dimmed", lineClamp: 2, children: description }) : null
|
|
3163
3649
|
] }),
|
|
3164
|
-
status ? /* @__PURE__ */ (0,
|
|
3650
|
+
status ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_core50.Badge, { variant: "light", children: status }) : null
|
|
3165
3651
|
] }),
|
|
3166
|
-
actions.length ? /* @__PURE__ */ (0,
|
|
3652
|
+
actions.length ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_core50.Group, { justify: "flex-end", gap: "xs", children: actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_core50.ActionIcon, { variant: "light", "aria-label": action.label, onClick: action.onClick, children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(EyeIcon, { size: "1rem" }) }, action.label)) }) : null
|
|
3167
3653
|
] })
|
|
3168
3654
|
] });
|
|
3169
3655
|
}
|
|
3170
3656
|
|
|
3171
3657
|
// src/AccessSummary.tsx
|
|
3172
|
-
var
|
|
3173
|
-
var
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3658
|
+
var import_core51 = require("@mantine/core");
|
|
3659
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
3660
|
+
var accessStateMeta = {
|
|
3661
|
+
allowed: { label: "Allowed", color: "teal" },
|
|
3662
|
+
blocked: { label: "Blocked", color: "red" },
|
|
3663
|
+
forbidden: { label: "Forbidden", color: "red" },
|
|
3664
|
+
expired: { label: "Expired", color: "orange" },
|
|
3665
|
+
"permission-limited": { label: "Permission limited", color: "grape" }
|
|
3666
|
+
};
|
|
3667
|
+
function AccessSummary({ title, roles, scope, blocked = false, state, owner, recoveryHint, description }) {
|
|
3668
|
+
const resolvedState = state ?? (blocked ? "blocked" : "allowed");
|
|
3669
|
+
const meta = accessStateMeta[resolvedState];
|
|
3670
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_core51.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_core51.Stack, { gap: "sm", children: [
|
|
3671
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_core51.Group, { justify: "space-between", align: "center", children: [
|
|
3672
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_core51.Title, { order: 4, children: title }),
|
|
3673
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_core51.Badge, { color: meta.color, variant: "light", children: meta.label })
|
|
3179
3674
|
] }),
|
|
3180
|
-
/* @__PURE__ */ (0,
|
|
3181
|
-
scope ? /* @__PURE__ */ (0,
|
|
3675
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_core51.Group, { gap: "xs", children: roles.map((role) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_core51.Badge, { variant: "outline", children: role }, role)) }),
|
|
3676
|
+
scope ? /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_core51.Text, { size: "sm", c: "dimmed", children: [
|
|
3182
3677
|
"Scope: ",
|
|
3183
3678
|
scope
|
|
3184
3679
|
] }) : null,
|
|
3185
|
-
|
|
3680
|
+
owner ? /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_core51.Text, { size: "sm", c: "dimmed", children: [
|
|
3681
|
+
"Owner: ",
|
|
3682
|
+
owner
|
|
3683
|
+
] }) : null,
|
|
3684
|
+
recoveryHint ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_core51.Text, { size: "sm", c: resolvedState === "allowed" ? "dimmed" : "red.7", children: recoveryHint }) : null,
|
|
3685
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_core51.Text, { size: "sm", children: description }) : null
|
|
3186
3686
|
] }) });
|
|
3187
3687
|
}
|
|
3188
3688
|
|
|
3189
3689
|
// src/AccessRecoveryPanel.tsx
|
|
3190
|
-
var
|
|
3690
|
+
var import_core52 = require("@mantine/core");
|
|
3191
3691
|
var import_gds_theme5 = require("@doneisbetter/gds-theme");
|
|
3192
|
-
var
|
|
3692
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
3193
3693
|
var stateBlockVariantByState = {
|
|
3194
3694
|
unauthenticated: "permission",
|
|
3195
3695
|
"expired-session": "info",
|
|
3696
|
+
timeout: "error",
|
|
3196
3697
|
forbidden: "permission",
|
|
3197
3698
|
missing: "error",
|
|
3198
3699
|
unavailable: "error"
|
|
@@ -3206,6 +3707,10 @@ var defaultCopyByState = {
|
|
|
3206
3707
|
title: "Session expired",
|
|
3207
3708
|
description: "Sign in again or retry to continue where you left off."
|
|
3208
3709
|
},
|
|
3710
|
+
timeout: {
|
|
3711
|
+
title: "Request timed out",
|
|
3712
|
+
description: "The recovery action took too long. Retry or choose a safe destination."
|
|
3713
|
+
},
|
|
3209
3714
|
forbidden: {
|
|
3210
3715
|
title: "You do not have access",
|
|
3211
3716
|
description: "This content is outside your current permissions or scope."
|
|
@@ -3237,6 +3742,12 @@ function defaultActionsForState(state, {
|
|
|
3237
3742
|
secondary: retryAction && signInAction ? retryAction : backAction,
|
|
3238
3743
|
tertiary: supportAction ?? null
|
|
3239
3744
|
};
|
|
3745
|
+
case "timeout":
|
|
3746
|
+
return {
|
|
3747
|
+
primary: retryAction ?? backAction,
|
|
3748
|
+
secondary: retryAction && backAction ? backAction : supportAction ?? null,
|
|
3749
|
+
tertiary: retryAction && backAction ? supportAction ?? null : null
|
|
3750
|
+
};
|
|
3240
3751
|
case "forbidden":
|
|
3241
3752
|
return { primary: backAction, secondary: supportAction ?? null, tertiary: null };
|
|
3242
3753
|
case "missing":
|
|
@@ -3258,7 +3769,7 @@ function ActionGroup({
|
|
|
3258
3769
|
if (actions.length === 0) {
|
|
3259
3770
|
return null;
|
|
3260
3771
|
}
|
|
3261
|
-
return /* @__PURE__ */ (0,
|
|
3772
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_core52.Group, { gap: "sm", justify: "center", wrap: "wrap", children: actions.map((actionConfig, index) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
3262
3773
|
SemanticButton,
|
|
3263
3774
|
{
|
|
3264
3775
|
action: actionConfig.action,
|
|
@@ -3292,14 +3803,14 @@ function AccessRecoveryPanel({
|
|
|
3292
3803
|
onBack,
|
|
3293
3804
|
supportAction
|
|
3294
3805
|
});
|
|
3295
|
-
return /* @__PURE__ */ (0,
|
|
3806
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
3296
3807
|
StateBlock,
|
|
3297
3808
|
{
|
|
3298
3809
|
variant: stateBlockVariantByState[state],
|
|
3299
3810
|
compact,
|
|
3300
3811
|
title: title ?? t(`gds.accessRecovery.${state}.title`, defaultCopy.title),
|
|
3301
3812
|
description: description ?? t(`gds.accessRecovery.${state}.description`, defaultCopy.description),
|
|
3302
|
-
action: /* @__PURE__ */ (0,
|
|
3813
|
+
action: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
3303
3814
|
ActionGroup,
|
|
3304
3815
|
{
|
|
3305
3816
|
primaryAction: primaryAction ?? defaults.primary,
|
|
@@ -3312,8 +3823,8 @@ function AccessRecoveryPanel({
|
|
|
3312
3823
|
}
|
|
3313
3824
|
|
|
3314
3825
|
// src/PageHeader.tsx
|
|
3315
|
-
var
|
|
3316
|
-
var
|
|
3826
|
+
var import_core53 = require("@mantine/core");
|
|
3827
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
3317
3828
|
function PageHeader({
|
|
3318
3829
|
title,
|
|
3319
3830
|
description,
|
|
@@ -3324,19 +3835,19 @@ function PageHeader({
|
|
|
3324
3835
|
}) {
|
|
3325
3836
|
const resolvedDescription = description ?? subtitle;
|
|
3326
3837
|
const eyebrowProps = eyebrowVariant === "ornamental" ? { tt: "uppercase", style: { letterSpacing: "0.12em" } } : {};
|
|
3327
|
-
return /* @__PURE__ */ (0,
|
|
3328
|
-
/* @__PURE__ */ (0,
|
|
3329
|
-
eyebrow && /* @__PURE__ */ (0,
|
|
3330
|
-
/* @__PURE__ */ (0,
|
|
3331
|
-
resolvedDescription && /* @__PURE__ */ (0,
|
|
3838
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_core53.Group, { justify: "space-between", align: "flex-start", gap: "lg", wrap: "wrap", children: [
|
|
3839
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_core53.Stack, { gap: "xs", children: [
|
|
3840
|
+
eyebrow && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_core53.Text, { size: "xs", fw: 700, c: "dimmed", ...eyebrowProps, children: eyebrow }),
|
|
3841
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_core53.Title, { order: 1, children: title }),
|
|
3842
|
+
resolvedDescription && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_core53.Text, { c: "dimmed", maw: 720, children: resolvedDescription })
|
|
3332
3843
|
] }),
|
|
3333
|
-
actions ? /* @__PURE__ */ (0,
|
|
3844
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_core53.Box, { children: actions }) : null
|
|
3334
3845
|
] });
|
|
3335
3846
|
}
|
|
3336
3847
|
|
|
3337
3848
|
// src/FilterDrawer.tsx
|
|
3338
|
-
var
|
|
3339
|
-
var
|
|
3849
|
+
var import_core54 = require("@mantine/core");
|
|
3850
|
+
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
3340
3851
|
function FilterDrawer({
|
|
3341
3852
|
opened,
|
|
3342
3853
|
onClose,
|
|
@@ -3352,8 +3863,8 @@ function FilterDrawer({
|
|
|
3352
3863
|
}) {
|
|
3353
3864
|
const resolvedPrimaryAction = applyAction ?? primaryAction;
|
|
3354
3865
|
const resolvedSecondaryAction = resetAction ?? secondaryAction;
|
|
3355
|
-
return /* @__PURE__ */ (0,
|
|
3356
|
-
|
|
3866
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
3867
|
+
import_core54.Drawer,
|
|
3357
3868
|
{
|
|
3358
3869
|
opened,
|
|
3359
3870
|
onClose,
|
|
@@ -3361,11 +3872,11 @@ function FilterDrawer({
|
|
|
3361
3872
|
position: mode === "bottom-sheet" ? "bottom" : "right",
|
|
3362
3873
|
size: mode === "bottom-sheet" ? "auto" : "md",
|
|
3363
3874
|
radius: mode === "bottom-sheet" ? "xl" : void 0,
|
|
3364
|
-
children: /* @__PURE__ */ (0,
|
|
3365
|
-
description ? /* @__PURE__ */ (0,
|
|
3875
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_core54.Stack, { gap: "md", children: [
|
|
3876
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(import_core54.Text, { size: "sm", c: "dimmed", children: description }) : null,
|
|
3366
3877
|
children,
|
|
3367
|
-
resolvedPrimaryAction || resolvedSecondaryAction || closeAction ? /* @__PURE__ */ (0,
|
|
3368
|
-
/* @__PURE__ */ (0,
|
|
3878
|
+
resolvedPrimaryAction || resolvedSecondaryAction || closeAction ? /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_core54.Group, { justify: "space-between", mt: "md", children: [
|
|
3879
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(import_core54.Group, { gap: "sm", children: [
|
|
3369
3880
|
closeAction,
|
|
3370
3881
|
resolvedSecondaryAction
|
|
3371
3882
|
] }),
|
|
@@ -3377,8 +3888,8 @@ function FilterDrawer({
|
|
|
3377
3888
|
}
|
|
3378
3889
|
|
|
3379
3890
|
// src/PlaceholderPanel.tsx
|
|
3380
|
-
var
|
|
3381
|
-
var
|
|
3891
|
+
var import_core55 = require("@mantine/core");
|
|
3892
|
+
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
3382
3893
|
function PlaceholderPanel({
|
|
3383
3894
|
title,
|
|
3384
3895
|
description,
|
|
@@ -3388,16 +3899,16 @@ function PlaceholderPanel({
|
|
|
3388
3899
|
mode
|
|
3389
3900
|
}) {
|
|
3390
3901
|
if (mode === "live" && children) {
|
|
3391
|
-
return /* @__PURE__ */ (0,
|
|
3902
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_jsx_runtime57.Fragment, { children });
|
|
3392
3903
|
}
|
|
3393
|
-
return /* @__PURE__ */ (0,
|
|
3394
|
-
badge ? /* @__PURE__ */ (0,
|
|
3395
|
-
/* @__PURE__ */ (0,
|
|
3396
|
-
/* @__PURE__ */ (0,
|
|
3397
|
-
/* @__PURE__ */ (0,
|
|
3904
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_core55.Card, { children: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_core55.Stack, { gap: "md", children: [
|
|
3905
|
+
badge ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_core55.Badge, { variant: "light", color: "blue", w: "fit-content", children: badge }) : null,
|
|
3906
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_core55.Stack, { gap: "xs", children: [
|
|
3907
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_core55.Title, { order: 4, children: title }),
|
|
3908
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_core55.Text, { c: "dimmed", children: description })
|
|
3398
3909
|
] }),
|
|
3399
|
-
footer ? /* @__PURE__ */ (0,
|
|
3400
|
-
/* @__PURE__ */ (0,
|
|
3910
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_core55.Text, { size: "sm", children: footer }) : null,
|
|
3911
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
3401
3912
|
StateBlock,
|
|
3402
3913
|
{
|
|
3403
3914
|
variant: "not-enough-data",
|
|
@@ -3410,8 +3921,8 @@ function PlaceholderPanel({
|
|
|
3410
3921
|
}
|
|
3411
3922
|
|
|
3412
3923
|
// src/SimpleDataTable.tsx
|
|
3413
|
-
var
|
|
3414
|
-
var
|
|
3924
|
+
var import_core56 = require("@mantine/core");
|
|
3925
|
+
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
3415
3926
|
function SimpleDataTable({
|
|
3416
3927
|
columns,
|
|
3417
3928
|
rows,
|
|
@@ -3422,23 +3933,23 @@ function SimpleDataTable({
|
|
|
3422
3933
|
getRowKey
|
|
3423
3934
|
}) {
|
|
3424
3935
|
if (error) {
|
|
3425
|
-
return /* @__PURE__ */ (0,
|
|
3936
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(StateBlock, { variant: "error", title: "Unable to load data", description: error, compact: true });
|
|
3426
3937
|
}
|
|
3427
3938
|
if (loading) {
|
|
3428
|
-
return /* @__PURE__ */ (0,
|
|
3939
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(StateBlock, { variant: "loading", title: "Loading data", description: "Please wait while the shared dataset is prepared.", compact: true });
|
|
3429
3940
|
}
|
|
3430
3941
|
if (!rows.length) {
|
|
3431
|
-
return /* @__PURE__ */ (0,
|
|
3942
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, compact: true });
|
|
3432
3943
|
}
|
|
3433
|
-
return /* @__PURE__ */ (0,
|
|
3434
|
-
/* @__PURE__ */ (0,
|
|
3435
|
-
/* @__PURE__ */ (0,
|
|
3944
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_core56.ScrollArea, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_core56.Table, { striped: true, highlightOnHover: true, withTableBorder: true, withColumnBorders: true, children: [
|
|
3945
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_core56.Table.Thead, { children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_core56.Table.Tr, { children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_core56.Table.Th, { children: column.header }, String(column.key))) }) }),
|
|
3946
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_core56.Table.Tbody, { children: rows.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_core56.Table.Tr, { children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_core56.Table.Td, { children: column.render ? column.render(row) : String(row[column.key] ?? "") }, String(column.key))) }, getRowKey ? getRowKey(row, index) : index)) })
|
|
3436
3947
|
] }) });
|
|
3437
3948
|
}
|
|
3438
3949
|
|
|
3439
3950
|
// src/StatsSection.tsx
|
|
3440
|
-
var
|
|
3441
|
-
var
|
|
3951
|
+
var import_core57 = require("@mantine/core");
|
|
3952
|
+
var import_jsx_runtime59 = require("react/jsx-runtime");
|
|
3442
3953
|
function StatsSection({
|
|
3443
3954
|
title,
|
|
3444
3955
|
loading = false,
|
|
@@ -3450,11 +3961,11 @@ function StatsSection({
|
|
|
3450
3961
|
}) {
|
|
3451
3962
|
let content = children;
|
|
3452
3963
|
if (error) {
|
|
3453
|
-
content = /* @__PURE__ */ (0,
|
|
3964
|
+
content = /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(StateBlock, { variant: "error", title: "Unable to load statistics", description: error, compact: true });
|
|
3454
3965
|
} else if (loading) {
|
|
3455
|
-
content = /* @__PURE__ */ (0,
|
|
3966
|
+
content = /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(StateBlock, { variant: "loading", title: "Loading statistics", description: "This shared data surface is still synchronizing.", compact: true });
|
|
3456
3967
|
} else if (belowThreshold) {
|
|
3457
|
-
content = /* @__PURE__ */ (0,
|
|
3968
|
+
content = /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
3458
3969
|
StateBlock,
|
|
3459
3970
|
{
|
|
3460
3971
|
variant: "not-enough-data",
|
|
@@ -3464,14 +3975,210 @@ function StatsSection({
|
|
|
3464
3975
|
}
|
|
3465
3976
|
);
|
|
3466
3977
|
} else if (placeholder) {
|
|
3467
|
-
content = /* @__PURE__ */ (0,
|
|
3978
|
+
content = /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(PlaceholderPanel, { ...placeholder, mode: "placeholder" });
|
|
3468
3979
|
}
|
|
3469
|
-
return /* @__PURE__ */ (0,
|
|
3470
|
-
/* @__PURE__ */ (0,
|
|
3980
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_core57.Stack, { gap: "md", children: [
|
|
3981
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_core57.Title, { order: 3, children: title }),
|
|
3471
3982
|
content
|
|
3472
3983
|
] });
|
|
3473
3984
|
}
|
|
3474
3985
|
|
|
3986
|
+
// src/PeriodSelector.tsx
|
|
3987
|
+
var import_core58 = require("@mantine/core");
|
|
3988
|
+
var import_jsx_runtime60 = require("react/jsx-runtime");
|
|
3989
|
+
function PeriodSelector({
|
|
3990
|
+
label,
|
|
3991
|
+
description,
|
|
3992
|
+
value,
|
|
3993
|
+
options,
|
|
3994
|
+
onChange,
|
|
3995
|
+
timezone,
|
|
3996
|
+
scope,
|
|
3997
|
+
helperText,
|
|
3998
|
+
error,
|
|
3999
|
+
stale = false,
|
|
4000
|
+
filtered = false,
|
|
4001
|
+
disabled = false
|
|
4002
|
+
}) {
|
|
4003
|
+
const selectedOption = options.find((option) => option.value === value);
|
|
4004
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(FormField, { label, description, error, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_core58.Stack, { gap: "sm", children: [
|
|
4005
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
|
|
4006
|
+
"select",
|
|
4007
|
+
{
|
|
4008
|
+
"aria-label": typeof label === "string" ? label : "Reporting period",
|
|
4009
|
+
value,
|
|
4010
|
+
disabled,
|
|
4011
|
+
onChange: (event) => onChange?.(event.currentTarget.value),
|
|
4012
|
+
children: options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("option", { value: option.value, children: option.label }, option.value))
|
|
4013
|
+
}
|
|
4014
|
+
),
|
|
4015
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_core58.Group, { gap: "xs", wrap: "wrap", children: [
|
|
4016
|
+
timezone ? /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_core58.Badge, { variant: "outline", color: "gray", children: [
|
|
4017
|
+
"Timezone: ",
|
|
4018
|
+
timezone
|
|
4019
|
+
] }) : null,
|
|
4020
|
+
filtered ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_core58.Badge, { variant: "light", color: "blue", children: "Filtered" }) : null,
|
|
4021
|
+
stale ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_core58.Badge, { variant: "light", color: "orange", children: "Stale data" }) : null,
|
|
4022
|
+
scope ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_core58.Badge, { variant: "outline", color: "gray", children: scope }) : null
|
|
4023
|
+
] }),
|
|
4024
|
+
selectedOption?.description ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_core58.Text, { size: "sm", c: "dimmed", children: selectedOption.description }) : null,
|
|
4025
|
+
helperText ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_core58.Text, { size: "sm", c: "dimmed", children: helperText }) : null
|
|
4026
|
+
] }) });
|
|
4027
|
+
}
|
|
4028
|
+
|
|
4029
|
+
// src/EvidencePanel.tsx
|
|
4030
|
+
var import_core59 = require("@mantine/core");
|
|
4031
|
+
var import_jsx_runtime61 = require("react/jsx-runtime");
|
|
4032
|
+
var stateTone2 = {
|
|
4033
|
+
current: { label: "Current", color: "teal" },
|
|
4034
|
+
stale: { label: "Stale", color: "orange" },
|
|
4035
|
+
partial: { label: "Partial data", color: "yellow" },
|
|
4036
|
+
"permission-limited": { label: "Permission limited", color: "grape" },
|
|
4037
|
+
loading: { label: "Loading", color: "blue" },
|
|
4038
|
+
empty: { label: "No evidence", color: "gray" },
|
|
4039
|
+
error: { label: "Needs attention", color: "red" }
|
|
4040
|
+
};
|
|
4041
|
+
function EvidencePanel({
|
|
4042
|
+
title,
|
|
4043
|
+
description,
|
|
4044
|
+
source,
|
|
4045
|
+
freshness,
|
|
4046
|
+
confidence,
|
|
4047
|
+
state = "current",
|
|
4048
|
+
evidenceCount,
|
|
4049
|
+
permissionNote,
|
|
4050
|
+
retryAction,
|
|
4051
|
+
details,
|
|
4052
|
+
children
|
|
4053
|
+
}) {
|
|
4054
|
+
const tone = stateTone2[state];
|
|
4055
|
+
const isProblem = state === "error" || state === "permission-limited" || state === "stale" || state === "partial";
|
|
4056
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_core59.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_core59.Stack, { gap: "md", children: [
|
|
4057
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_core59.Group, { justify: "space-between", align: "flex-start", gap: "sm", children: [
|
|
4058
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_core59.Stack, { gap: 4, children: [
|
|
4059
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_core59.Title, { order: 4, children: title }),
|
|
4060
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_core59.Text, { size: "sm", c: "dimmed", children: description }) : null
|
|
4061
|
+
] }),
|
|
4062
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_core59.Badge, { variant: "light", color: tone.color, children: tone.label })
|
|
4063
|
+
] }),
|
|
4064
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_core59.Group, { gap: "xs", wrap: "wrap", children: [
|
|
4065
|
+
source ? /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_core59.Badge, { variant: "outline", color: "gray", children: [
|
|
4066
|
+
"Source: ",
|
|
4067
|
+
source
|
|
4068
|
+
] }) : null,
|
|
4069
|
+
freshness ? /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_core59.Badge, { variant: "outline", color: "gray", children: [
|
|
4070
|
+
"Freshness: ",
|
|
4071
|
+
freshness
|
|
4072
|
+
] }) : null,
|
|
4073
|
+
confidence ? /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_core59.Badge, { variant: "outline", color: "gray", children: [
|
|
4074
|
+
"Confidence: ",
|
|
4075
|
+
confidence
|
|
4076
|
+
] }) : null,
|
|
4077
|
+
typeof evidenceCount === "number" ? /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(import_core59.Badge, { variant: "outline", color: "gray", children: [
|
|
4078
|
+
"Evidence: ",
|
|
4079
|
+
evidenceCount
|
|
4080
|
+
] }) : null
|
|
4081
|
+
] }),
|
|
4082
|
+
permissionNote ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(import_core59.Alert, { color: isProblem ? tone.color : "gray", variant: "light", children: permissionNote }) : null,
|
|
4083
|
+
details,
|
|
4084
|
+
children,
|
|
4085
|
+
retryAction
|
|
4086
|
+
] }) });
|
|
4087
|
+
}
|
|
4088
|
+
|
|
4089
|
+
// src/ChartTokenPanel.tsx
|
|
4090
|
+
var import_core60 = require("@mantine/core");
|
|
4091
|
+
var import_jsx_runtime62 = require("react/jsx-runtime");
|
|
4092
|
+
function ChartTokenPanel({
|
|
4093
|
+
title,
|
|
4094
|
+
description,
|
|
4095
|
+
summary,
|
|
4096
|
+
state = "ready",
|
|
4097
|
+
legend = [],
|
|
4098
|
+
children,
|
|
4099
|
+
tableFallback,
|
|
4100
|
+
retryAction
|
|
4101
|
+
}) {
|
|
4102
|
+
if (state === "loading") {
|
|
4103
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(StateBlock, { variant: "loading", title: "Loading chart", description: summary, compact: true, action: retryAction });
|
|
4104
|
+
}
|
|
4105
|
+
if (state === "empty") {
|
|
4106
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(StateBlock, { variant: "empty", title: "No chart data", description: summary, compact: true, action: retryAction });
|
|
4107
|
+
}
|
|
4108
|
+
if (state === "below-threshold") {
|
|
4109
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(StateBlock, { variant: "not-enough-data", title: "Not enough data for chart", description: summary, compact: true, action: retryAction });
|
|
4110
|
+
}
|
|
4111
|
+
if (state === "error") {
|
|
4112
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(StateBlock, { variant: "error", title: "Unable to load chart", description: summary, compact: true, action: retryAction });
|
|
4113
|
+
}
|
|
4114
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_core60.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_core60.Stack, { gap: "md", children: [
|
|
4115
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_core60.Group, { justify: "space-between", align: "flex-start", gap: "sm", children: [
|
|
4116
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_core60.Stack, { gap: 4, children: [
|
|
4117
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_core60.Title, { order: 4, children: title }),
|
|
4118
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_core60.Text, { size: "sm", c: "dimmed", children: description }) : null
|
|
4119
|
+
] }),
|
|
4120
|
+
state !== "ready" ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_core60.Badge, { variant: "light", color: state === "permission-limited" ? "grape" : "yellow", children: state.replace("-", " ") }) : null
|
|
4121
|
+
] }),
|
|
4122
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_core60.Text, { size: "sm", children: summary }),
|
|
4123
|
+
legend.length ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_core60.Group, { gap: "xs", wrap: "wrap", "aria-label": "Chart legend", children: legend.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_core60.Badge, { variant: "outline", color: "gray", title: typeof item.description === "string" ? item.description : void 0, children: [
|
|
4124
|
+
item.label,
|
|
4125
|
+
": ",
|
|
4126
|
+
item.token
|
|
4127
|
+
] }, `${String(item.label)}-${index}`)) }) : null,
|
|
4128
|
+
children,
|
|
4129
|
+
tableFallback ? /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(import_core60.Stack, { gap: "xs", children: [
|
|
4130
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(import_core60.Text, { size: "sm", fw: 600, children: "Accessible data fallback" }),
|
|
4131
|
+
tableFallback
|
|
4132
|
+
] }) : null
|
|
4133
|
+
] }) });
|
|
4134
|
+
}
|
|
4135
|
+
|
|
4136
|
+
// src/ReportingSection.tsx
|
|
4137
|
+
var import_core61 = require("@mantine/core");
|
|
4138
|
+
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
4139
|
+
function ReportingSection({
|
|
4140
|
+
title,
|
|
4141
|
+
description,
|
|
4142
|
+
state = "ready",
|
|
4143
|
+
periodControl,
|
|
4144
|
+
evidence,
|
|
4145
|
+
metrics,
|
|
4146
|
+
chart,
|
|
4147
|
+
table,
|
|
4148
|
+
action,
|
|
4149
|
+
stateMessage,
|
|
4150
|
+
retryAction
|
|
4151
|
+
}) {
|
|
4152
|
+
let stateBlock = null;
|
|
4153
|
+
if (state === "loading") {
|
|
4154
|
+
stateBlock = /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(StateBlock, { variant: "loading", title: "Loading report", description: stateMessage ?? "The reporting surface is synchronizing.", compact: true });
|
|
4155
|
+
} else if (state === "empty") {
|
|
4156
|
+
stateBlock = /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(StateBlock, { variant: "empty", title: "No report data", description: stateMessage ?? "No records match this reporting scope yet.", compact: true });
|
|
4157
|
+
} else if (state === "error") {
|
|
4158
|
+
stateBlock = /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(StateBlock, { variant: "error", title: "Unable to load report", description: stateMessage ?? "The report could not be prepared.", compact: true, action: retryAction });
|
|
4159
|
+
} else if (state === "below-threshold") {
|
|
4160
|
+
stateBlock = /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(StateBlock, { variant: "not-enough-data", title: "Not enough data", description: stateMessage ?? "This report is hidden until the threshold is met.", compact: true });
|
|
4161
|
+
} else if (state === "permission-limited") {
|
|
4162
|
+
stateBlock = /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(StateBlock, { variant: "permission", title: "Permission-limited report", description: stateMessage ?? "Some evidence is hidden by access rules.", compact: true, action: retryAction });
|
|
4163
|
+
}
|
|
4164
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_core61.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_core61.Stack, { gap: "lg", children: [
|
|
4165
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_core61.Group, { justify: "space-between", align: "flex-start", gap: "md", children: [
|
|
4166
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(import_core61.Stack, { gap: 4, children: [
|
|
4167
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_core61.Title, { order: 3, children: title }),
|
|
4168
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_core61.Text, { size: "sm", c: "dimmed", children: description }) : null
|
|
4169
|
+
] }),
|
|
4170
|
+
action
|
|
4171
|
+
] }),
|
|
4172
|
+
periodControl,
|
|
4173
|
+
(state === "partial" || state === "stale" || state === "filtered") && stateMessage ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(StateBlock, { variant: "info", title: state === "partial" ? "Partial report" : state === "stale" ? "Stale report" : "Filtered report", description: stateMessage, compact: true }) : null,
|
|
4174
|
+
stateBlock,
|
|
4175
|
+
metrics,
|
|
4176
|
+
chart,
|
|
4177
|
+
table,
|
|
4178
|
+
evidence
|
|
4179
|
+
] }) });
|
|
4180
|
+
}
|
|
4181
|
+
|
|
3475
4182
|
// src/locales/ar.ts
|
|
3476
4183
|
var ar = {
|
|
3477
4184
|
"gds.action.settings": "\u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A",
|
|
@@ -4783,6 +5490,7 @@ function getGdsMessages(locale) {
|
|
|
4783
5490
|
ArticleShell,
|
|
4784
5491
|
AuthShell,
|
|
4785
5492
|
BrowseSurface,
|
|
5493
|
+
ChartTokenPanel,
|
|
4786
5494
|
ChoiceChip,
|
|
4787
5495
|
ConfirmDialog,
|
|
4788
5496
|
ConsumerDashboardGrid,
|
|
@@ -4793,9 +5501,11 @@ function getGdsMessages(locale) {
|
|
|
4793
5501
|
DiscoveryShell,
|
|
4794
5502
|
DocsCodeBlock,
|
|
4795
5503
|
DocsPageShell,
|
|
5504
|
+
DocsShell,
|
|
4796
5505
|
EditorialCard,
|
|
4797
5506
|
EditorialHero,
|
|
4798
5507
|
EmptyState,
|
|
5508
|
+
EvidencePanel,
|
|
4799
5509
|
FeatureBand,
|
|
4800
5510
|
FilterDrawer,
|
|
4801
5511
|
FoodMenuSection,
|
|
@@ -4808,11 +5518,15 @@ function getGdsMessages(locale) {
|
|
|
4808
5518
|
MediaCard,
|
|
4809
5519
|
MediaField,
|
|
4810
5520
|
MetricCard,
|
|
5521
|
+
PROVIDER_IDENTITY_REGISTRY,
|
|
4811
5522
|
PageHeader,
|
|
5523
|
+
PeriodSelector,
|
|
4812
5524
|
PlaceholderPanel,
|
|
4813
5525
|
PlaybackSurface,
|
|
4814
5526
|
ProductCard,
|
|
4815
5527
|
ProgressCard,
|
|
5528
|
+
ProviderIdentityButton,
|
|
5529
|
+
ProviderIdentityButtonGroup,
|
|
4816
5530
|
PublicBrandFooter,
|
|
4817
5531
|
PublicFlowShell,
|
|
4818
5532
|
PublicFoodCard,
|
|
@@ -4824,6 +5538,7 @@ function getGdsMessages(locale) {
|
|
|
4824
5538
|
ReferenceLocaleNotice,
|
|
4825
5539
|
ReferenceSection,
|
|
4826
5540
|
ReferenceThemeExplorer,
|
|
5541
|
+
ReportingSection,
|
|
4827
5542
|
SectionPanel,
|
|
4828
5543
|
SemanticButton,
|
|
4829
5544
|
ShareButtonGroup,
|
|
@@ -4845,13 +5560,18 @@ function getGdsMessages(locale) {
|
|
|
4845
5560
|
fr,
|
|
4846
5561
|
gdsLocales,
|
|
4847
5562
|
getGdsMessages,
|
|
5563
|
+
getProviderIdentityLabel,
|
|
5564
|
+
getProviderIdentityPolicy,
|
|
4848
5565
|
getSemanticActionConfig,
|
|
4849
5566
|
getSemanticActionLabel,
|
|
5567
|
+
getSupportedProviderIdentityIds,
|
|
4850
5568
|
he,
|
|
4851
5569
|
hu,
|
|
5570
|
+
isPresentationMode,
|
|
4852
5571
|
it,
|
|
4853
5572
|
mergeGdsVocabularyPacks,
|
|
4854
5573
|
resolveAccentPanelStyles,
|
|
4855
5574
|
resolveSemanticActionConfig,
|
|
5575
|
+
resolveSurfacePresentationStyles,
|
|
4856
5576
|
ru
|
|
4857
5577
|
});
|