@doneisbetter/gds-core 2.6.3 → 2.6.5

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/server.js CHANGED
@@ -30,33 +30,45 @@ __export(server_exports, {
30
30
  ConsumerSection: () => ConsumerSection,
31
31
  CtaButtonGroup: () => CtaButtonGroup,
32
32
  DataToolbar: () => DataToolbar,
33
+ DetailProfileShell: () => DetailProfileShell,
33
34
  DocsPageShell: () => DocsPageShell,
34
35
  EditorialCard: () => EditorialCard,
35
36
  EditorialHero: () => EditorialHero,
36
37
  EmptyState: () => EmptyState,
37
38
  FeatureBand: () => FeatureBand,
38
39
  FilterDrawer: () => FilterDrawer,
40
+ FoodMenuSection: () => FoodMenuSection,
39
41
  FormField: () => FormField,
40
42
  GdsIcons: () => GdsIcons,
41
43
  GdsVocabulary: () => GdsVocabulary,
44
+ ListingCard: () => ListingCard,
45
+ MapPanel: () => MapPanel,
42
46
  MediaCard: () => MediaCard,
43
47
  MediaField: () => MediaField,
44
48
  MetricCard: () => MetricCard,
45
49
  PageHeader: () => PageHeader,
46
50
  PlaceholderPanel: () => PlaceholderPanel,
51
+ PlaybackSurface: () => PlaybackSurface,
47
52
  ProductCard: () => ProductCard,
48
53
  ProgressCard: () => ProgressCard,
49
54
  PublicBrandFooter: () => PublicBrandFooter,
55
+ PublicFlowShell: () => PublicFlowShell,
56
+ PublicFoodCard: () => PublicFoodCard,
50
57
  PublicNav: () => PublicNav,
51
58
  PublicProductCard: () => PublicProductCard,
52
59
  PublicShell: () => PublicShell,
53
60
  PublicSiteFooter: () => PublicSiteFooter,
61
+ ReferenceLinkGrid: () => ReferenceLinkGrid,
62
+ ReferenceLocaleNotice: () => ReferenceLocaleNotice,
63
+ ReferenceSection: () => ReferenceSection,
54
64
  SectionPanel: () => SectionPanel,
55
65
  SimpleDataTable: () => SimpleDataTable,
66
+ SocialAuthButtons: () => SocialAuthButtons,
56
67
  StateBlock: () => StateBlock,
57
68
  StatsSection: () => StatsSection,
58
69
  StatusBadge: () => StatusBadge,
59
70
  ar: () => ar,
71
+ createGdsVocabularyPack: () => createGdsVocabularyPack,
60
72
  de: () => de,
61
73
  en: () => en,
62
74
  es: () => es,
@@ -68,7 +80,9 @@ __export(server_exports, {
68
80
  he: () => he,
69
81
  hu: () => hu,
70
82
  it: () => it,
83
+ mergeGdsVocabularyPacks: () => mergeGdsVocabularyPacks,
71
84
  resolveAccentPanelStyles: () => resolveAccentPanelStyles,
85
+ resolveSemanticActionConfig: () => resolveSemanticActionConfig,
72
86
  ru: () => ru
73
87
  });
74
88
  module.exports = __toCommonJS(server_exports);
@@ -183,7 +197,6 @@ var GdsIcons = {
183
197
 
184
198
  // src/vocabulary.ts
185
199
  var GdsVocabulary = {
186
- // Base
187
200
  settings: { id: "gds.action.settings", defaultMessage: "Settings", icon: GdsIcons.Settings, feedback: { icon: GdsIcons.Settings, color: "teal", messageId: "gds.feedback.saved" } },
188
201
  analytics: { id: "gds.action.analytics", defaultMessage: "Analytics", icon: GdsIcons.Analytics, feedback: { icon: GdsIcons.Analytics, color: "teal", messageId: "gds.feedback.loaded" } },
189
202
  dashboard: { id: "gds.action.dashboard", defaultMessage: "Dashboard", icon: GdsIcons.Dashboard, feedback: { icon: GdsIcons.Dashboard, color: "teal", messageId: "gds.feedback.loaded" } },
@@ -199,14 +212,12 @@ var GdsVocabulary = {
199
212
  close: { id: "gds.action.close", defaultMessage: "Close", icon: GdsIcons.Close, feedback: { icon: GdsIcons.Close, color: "gray", messageId: "gds.feedback.closed" } },
200
213
  language: { id: "gds.action.language", defaultMessage: "Language", icon: GdsIcons.Language, feedback: { icon: GdsIcons.Language, color: "teal", messageId: "gds.feedback.changed" } },
201
214
  theme: { id: "gds.action.theme", defaultMessage: "Theme", icon: GdsIcons.Theme, feedback: { icon: GdsIcons.Theme, color: "teal", messageId: "gds.feedback.changed" } },
202
- // Navigation
203
215
  home: { id: "gds.action.home", defaultMessage: "Home", icon: GdsIcons.Home, feedback: { icon: GdsIcons.Home, color: "teal", messageId: "gds.feedback.opened" } },
204
216
  inbox: { id: "gds.action.inbox", defaultMessage: "Inbox", icon: GdsIcons.Inbox, feedback: { icon: GdsIcons.Inbox, color: "teal", messageId: "gds.feedback.opened" } },
205
217
  calendar: { id: "gds.action.calendar", defaultMessage: "Calendar", icon: GdsIcons.Calendar, feedback: { icon: GdsIcons.Calendar, color: "teal", messageId: "gds.feedback.opened" } },
206
218
  gallery: { id: "gds.action.gallery", defaultMessage: "Gallery", icon: GdsIcons.Gallery, feedback: { icon: GdsIcons.Gallery, color: "teal", messageId: "gds.feedback.opened" } },
207
219
  history: { id: "gds.action.history", defaultMessage: "History", icon: GdsIcons.History, feedback: { icon: GdsIcons.History, color: "teal", messageId: "gds.feedback.opened" } },
208
220
  profile: { id: "gds.action.profile", defaultMessage: "Profile", icon: GdsIcons.Profile, feedback: { icon: GdsIcons.Profile, color: "teal", messageId: "gds.feedback.opened" } },
209
- // Actions
210
221
  send: { id: "gds.action.send", defaultMessage: "Send", icon: GdsIcons.Send, feedback: { icon: GdsIcons.Send, color: "blue", messageId: "gds.feedback.sent" } },
211
222
  reply: { id: "gds.action.reply", defaultMessage: "Reply", icon: GdsIcons.Reply, feedback: { icon: GdsIcons.Reply, color: "blue", messageId: "gds.feedback.replied" } },
212
223
  forward: { id: "gds.action.forward", defaultMessage: "Forward", icon: GdsIcons.Forward, feedback: { icon: GdsIcons.Forward, color: "blue", messageId: "gds.feedback.forwarded" } },
@@ -220,12 +231,10 @@ var GdsVocabulary = {
220
231
  uncheck: { id: "gds.action.uncheck", defaultMessage: "Uncheck", icon: GdsIcons.Uncheck, feedback: { icon: GdsIcons.Uncheck, color: "red", messageId: "gds.feedback.unchecked" } },
221
232
  complete: { id: "gds.action.complete", defaultMessage: "Complete", icon: GdsIcons.Complete, feedback: { icon: GdsIcons.Complete, color: "teal", messageId: "gds.feedback.completed" } },
222
233
  clear: { id: "gds.action.clear", defaultMessage: "Clear", icon: GdsIcons.Clear, feedback: { icon: GdsIcons.Clear, color: "red", messageId: "gds.feedback.cleared" } },
223
- // Media (camera project)
224
234
  capture: { id: "gds.action.capture", defaultMessage: "Capture", icon: GdsIcons.Capture, feedback: { icon: GdsIcons.Capture, color: "teal", messageId: "gds.feedback.captured" } },
225
235
  record: { id: "gds.action.record", defaultMessage: "Record", icon: GdsIcons.Record, feedback: { icon: GdsIcons.Record, color: "teal", messageId: "gds.feedback.recorded" } },
226
236
  flip: { id: "gds.action.flip", defaultMessage: "Flip", icon: GdsIcons.Flip, feedback: { icon: GdsIcons.Flip, color: "teal", messageId: "gds.feedback.flipped" } },
227
237
  flash: { id: "gds.action.flash", defaultMessage: "Flash", icon: GdsIcons.Flash, feedback: { icon: GdsIcons.Flash, color: "teal", messageId: "gds.feedback.flashed" } },
228
- // Domain specific (amanoba, classscout, kidex, habigoal)
229
238
  course: { id: "gds.action.course", defaultMessage: "Course", icon: GdsIcons.Course, feedback: { icon: GdsIcons.Course, color: "teal", messageId: "gds.feedback.done" } },
230
239
  lesson: { id: "gds.action.lesson", defaultMessage: "Lesson", icon: GdsIcons.Lesson, feedback: { icon: GdsIcons.Lesson, color: "teal", messageId: "gds.feedback.done" } },
231
240
  certificate: { id: "gds.action.certificate", defaultMessage: "Certificate", icon: GdsIcons.Certificate, feedback: { icon: GdsIcons.Certificate, color: "teal", messageId: "gds.feedback.done" } },
@@ -238,7 +247,6 @@ var GdsVocabulary = {
238
247
  goal: { id: "gds.action.goal", defaultMessage: "Goal", icon: GdsIcons.Goal, feedback: { icon: GdsIcons.Goal, color: "teal", messageId: "gds.feedback.done" } },
239
248
  streak: { id: "gds.action.streak", defaultMessage: "Streak", icon: GdsIcons.Streak, feedback: { icon: GdsIcons.Streak, color: "teal", messageId: "gds.feedback.done" } },
240
249
  reward: { id: "gds.action.reward", defaultMessage: "Reward", icon: GdsIcons.Reward, feedback: { icon: GdsIcons.Reward, color: "yellow", messageId: "gds.feedback.rewarded" } },
241
- // Codebase analysis additions
242
250
  trophy: { id: "gds.action.trophy", defaultMessage: "Trophy", icon: GdsIcons.Trophy, feedback: { icon: GdsIcons.Trophy, color: "yellow", messageId: "gds.feedback.rewarded" } },
243
251
  crown: { id: "gds.action.crown", defaultMessage: "Crown", icon: GdsIcons.Crown, feedback: { icon: GdsIcons.Crown, color: "yellow", messageId: "gds.feedback.rewarded" } },
244
252
  pause: { id: "gds.action.pause", defaultMessage: "Pause", icon: GdsIcons.Pause, feedback: { icon: GdsIcons.Pause, color: "teal", messageId: "gds.feedback.paused" } },
@@ -258,7 +266,6 @@ var GdsVocabulary = {
258
266
  help: { id: "gds.action.help", defaultMessage: "Help", icon: GdsIcons.Help, feedback: { icon: GdsIcons.Help, color: "teal", messageId: "gds.feedback.done" } },
259
267
  filter: { id: "gds.action.filter", defaultMessage: "Filter", icon: GdsIcons.Filter, feedback: { icon: GdsIcons.Filter, color: "teal", messageId: "gds.feedback.filtered" } },
260
268
  sort: { id: "gds.action.sort", defaultMessage: "Sort", icon: GdsIcons.Sort, feedback: { icon: GdsIcons.Sort, color: "teal", messageId: "gds.feedback.sorted" } },
261
- // Audit-driven additions
262
269
  export: { id: "gds.action.export", defaultMessage: "Export", icon: GdsIcons.Export, feedback: { icon: GdsIcons.Export, color: "teal", messageId: "gds.feedback.exported" } },
263
270
  import: { id: "gds.action.import", defaultMessage: "Import", icon: GdsIcons.Import, feedback: { icon: GdsIcons.Import, color: "teal", messageId: "gds.feedback.imported" } },
264
271
  preview: { id: "gds.action.preview", defaultMessage: "Preview", icon: GdsIcons.Preview, feedback: { icon: GdsIcons.Preview, color: "teal", messageId: "gds.feedback.previewed" } },
@@ -276,11 +283,45 @@ var GdsVocabulary = {
276
283
  refer: { id: "gds.action.refer", defaultMessage: "Refer", icon: GdsIcons.Refer, feedback: { icon: GdsIcons.Refer, color: "teal", messageId: "gds.feedback.referred" } },
277
284
  evidence: { id: "gds.action.evidence", defaultMessage: "Evidence", icon: GdsIcons.Evidence, feedback: { icon: GdsIcons.Evidence, color: "teal", messageId: "gds.feedback.added" } }
278
285
  };
279
- function getSemanticActionConfig(action) {
280
- return GdsVocabulary[action];
286
+ function createGdsVocabularyPack(namespace, actions) {
287
+ return {
288
+ namespace,
289
+ actions: Object.fromEntries(
290
+ Object.entries(actions).map(([key, definition]) => [
291
+ `${namespace}:${key}`,
292
+ {
293
+ ...definition,
294
+ id: `gds.action.${namespace}.${key}`
295
+ }
296
+ ])
297
+ )
298
+ };
299
+ }
300
+ function mergeGdsVocabularyPacks(packs = []) {
301
+ return packs.reduce((acc, pack) => {
302
+ for (const [key, definition] of Object.entries(pack.actions)) {
303
+ acc[key] = definition;
304
+ }
305
+ return acc;
306
+ }, {});
281
307
  }
282
- function getSemanticActionLabel(action, translate) {
283
- const config = getSemanticActionConfig(action);
308
+ function resolveSemanticActionConfig(action, packs = []) {
309
+ const baseConfig = GdsVocabulary[action];
310
+ if (baseConfig) {
311
+ return baseConfig;
312
+ }
313
+ const merged = mergeGdsVocabularyPacks(packs);
314
+ const packConfig = merged[action];
315
+ if (packConfig) {
316
+ return packConfig;
317
+ }
318
+ throw new Error(`Unknown semantic action: ${action}`);
319
+ }
320
+ function getSemanticActionConfig(action, packs = []) {
321
+ return resolveSemanticActionConfig(action, packs);
322
+ }
323
+ function getSemanticActionLabel(action, translate, packs = []) {
324
+ const config = resolveSemanticActionConfig(action, packs);
284
325
  return translate ? translate(config.id, config.defaultMessage) : config.defaultMessage;
285
326
  }
286
327
 
@@ -415,9 +456,105 @@ function ProgressCard({
415
456
  ] }) });
416
457
  }
417
458
 
418
- // src/SectionPanel.tsx
459
+ // src/AccentPanel.tsx
419
460
  var import_core6 = require("@mantine/core");
420
461
  var import_jsx_runtime6 = require("react/jsx-runtime");
462
+ var toneStyles = {
463
+ gray: {
464
+ bg: "light-dark(var(--mantine-color-gray-0), color-mix(in srgb, var(--mantine-color-gray-7) 88%, black))",
465
+ border: "light-dark(var(--mantine-color-gray-2), color-mix(in srgb, var(--mantine-color-gray-4) 70%, transparent))",
466
+ color: "light-dark(var(--mantine-color-gray-9), var(--mantine-color-gray-0))"
467
+ },
468
+ violet: {
469
+ bg: "light-dark(var(--mantine-color-violet-0), color-mix(in srgb, var(--mantine-color-violet-9) 70%, black))",
470
+ border: "light-dark(var(--mantine-color-violet-2), color-mix(in srgb, var(--mantine-color-violet-4) 75%, transparent))",
471
+ color: "light-dark(var(--mantine-color-violet-9), var(--mantine-color-violet-0))"
472
+ },
473
+ green: {
474
+ bg: "light-dark(var(--mantine-color-green-0), color-mix(in srgb, var(--mantine-color-green-9) 72%, black))",
475
+ border: "light-dark(var(--mantine-color-green-2), color-mix(in srgb, var(--mantine-color-green-4) 78%, transparent))",
476
+ color: "light-dark(var(--mantine-color-green-9), var(--mantine-color-green-0))"
477
+ },
478
+ red: {
479
+ bg: "light-dark(var(--mantine-color-red-0), color-mix(in srgb, var(--mantine-color-red-9) 72%, black))",
480
+ border: "light-dark(var(--mantine-color-red-2), color-mix(in srgb, var(--mantine-color-red-4) 78%, transparent))",
481
+ color: "light-dark(var(--mantine-color-red-9), var(--mantine-color-red-0))"
482
+ },
483
+ amber: {
484
+ bg: "light-dark(var(--mantine-color-yellow-0), color-mix(in srgb, var(--mantine-color-yellow-8) 78%, black))",
485
+ border: "light-dark(var(--mantine-color-yellow-3), color-mix(in srgb, var(--mantine-color-yellow-5) 70%, transparent))",
486
+ color: "light-dark(var(--mantine-color-yellow-9), var(--mantine-color-yellow-0))"
487
+ },
488
+ blue: {
489
+ bg: "light-dark(var(--mantine-color-blue-0), color-mix(in srgb, var(--mantine-color-blue-9) 74%, black))",
490
+ border: "light-dark(var(--mantine-color-blue-2), color-mix(in srgb, var(--mantine-color-blue-4) 75%, transparent))",
491
+ color: "light-dark(var(--mantine-color-blue-9), var(--mantine-color-blue-0))"
492
+ }
493
+ };
494
+ function resolveAccentPanelStyles(tone = "violet", variant = "subtle") {
495
+ const token = toneStyles[tone];
496
+ if (variant === "soft-outline") {
497
+ return {
498
+ backgroundColor: "light-dark(var(--mantine-color-body), color-mix(in srgb, var(--mantine-color-dark-7) 92%, black))",
499
+ border: `1px solid ${token.border}`,
500
+ color: token.color
501
+ };
502
+ }
503
+ return {
504
+ backgroundColor: token.bg,
505
+ border: `1px solid ${token.border}`,
506
+ color: token.color
507
+ };
508
+ }
509
+ function AccentPanel({
510
+ tone = "violet",
511
+ variant = "subtle",
512
+ title,
513
+ badge,
514
+ children
515
+ }) {
516
+ const styles = resolveAccentPanelStyles(tone, variant);
517
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Paper, { withBorder: true, radius: "lg", p: "lg", style: styles, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_core6.Stack, { gap: "sm", children: [
518
+ title || badge ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_core6.Group, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "wrap", children: [
519
+ title ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Title, { order: 4, c: "inherit", children: title }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Box, {}),
520
+ badge ? typeof badge === "string" ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Badge, { color: tone === "amber" ? "yellow" : tone, variant: "filled", children: badge }) : badge : null
521
+ ] }) : null,
522
+ typeof children === "string" ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Text, { c: "inherit", children }) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Box, { c: "inherit", children })
523
+ ] }) });
524
+ }
525
+
526
+ // src/ReferenceLocaleNotice.tsx
527
+ var import_jsx_runtime7 = require("react/jsx-runtime");
528
+ function ReferenceLocaleNotice({ localeLabel, detail }) {
529
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(AccentPanel, { tone: "amber", variant: "soft-outline", title: "Localization status", badge: localeLabel, children: detail });
530
+ }
531
+
532
+ // src/ReferenceLinkGrid.tsx
533
+ var import_core7 = require("@mantine/core");
534
+ var import_jsx_runtime8 = require("react/jsx-runtime");
535
+ function ReferenceLinkGrid({
536
+ items,
537
+ columns = 3
538
+ }) {
539
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core7.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), xl: columns }, spacing: "lg", children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core7.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_core7.Stack, { gap: "md", children: [
540
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_core7.Group, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "wrap", children: [
541
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_core7.Stack, { gap: 6, maw: 540, children: [
542
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core7.Title, { order: 4, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core7.Anchor, { href: item.href, underline: "never", children: item.title }) }),
543
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core7.Text, { size: "sm", c: "dimmed", children: item.description })
544
+ ] }),
545
+ item.badge ? typeof item.badge === "string" ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core7.Badge, { variant: "light", color: "violet", children: item.badge }) : item.badge : null
546
+ ] }),
547
+ item.meta ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core7.Text, { size: "sm", c: "dimmed", children: item.meta }) : null,
548
+ /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core7.Anchor, { href: item.href, fw: 600, children: "Open section" })
549
+ ] }) }, item.id)) });
550
+ }
551
+
552
+ // src/ReferenceSection.tsx
553
+ var import_core9 = require("@mantine/core");
554
+
555
+ // src/SectionPanel.tsx
556
+ var import_core8 = require("@mantine/core");
557
+ var import_jsx_runtime9 = require("react/jsx-runtime");
421
558
  var toneBackgrounds = {
422
559
  default: "var(--mantine-color-body)",
423
560
  supporting: "light-dark(var(--mantine-color-gray-0), color-mix(in srgb, var(--mantine-color-dark-7) 92%, black))",
@@ -433,23 +570,56 @@ function SectionPanel({
433
570
  id,
434
571
  divided = true
435
572
  }) {
436
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Paper, { id, withBorder: true, radius: "xl", p: "lg", style: { background: toneBackgrounds[tone] }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_core6.Stack, { gap: "md", children: [
437
- title || description || action ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_jsx_runtime6.Fragment, { children: [
438
- /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_core6.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
439
- title || description ? /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_core6.Stack, { gap: 4, children: [
440
- title ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Title, { order: 3, children: title }) : null,
441
- description ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Text, { size: "sm", c: "dimmed", children: description }) : null
573
+ 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: [
574
+ title || description || action ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
575
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core8.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
576
+ title || description ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core8.Stack, { gap: 4, children: [
577
+ title ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Title, { order: 3, children: title }) : null,
578
+ description ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Text, { size: "sm", c: "dimmed", children: description }) : null
442
579
  ] }) : null,
443
580
  action
444
581
  ] }),
445
- divided ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Divider, {}) : null
582
+ divided ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Divider, {}) : null
446
583
  ] }) : null,
447
584
  children
448
585
  ] }) });
449
586
  }
450
587
 
588
+ // src/ReferenceSection.tsx
589
+ var import_jsx_runtime10 = require("react/jsx-runtime");
590
+ function ReferenceSection({
591
+ title,
592
+ description,
593
+ eyebrow,
594
+ action,
595
+ href,
596
+ linkLabel = "Open section",
597
+ tone = "default",
598
+ children
599
+ }) {
600
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
601
+ SectionPanel,
602
+ {
603
+ tone,
604
+ title: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_core9.Stack, { gap: 4, children: [
605
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core9.Text, { size: "xs", fw: 700, c: "dimmed", children: eyebrow }) : null,
606
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_core9.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
607
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_core9.Stack, { gap: 4, children: [
608
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core9.Text, { component: "span", fw: 700, size: "xl", children: title }),
609
+ description ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core9.Text, { size: "sm", c: "dimmed", children: description }) : null
610
+ ] }),
611
+ href ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core9.Anchor, { href, fw: 600, children: linkLabel }) : null
612
+ ] })
613
+ ] }),
614
+ action,
615
+ divided: false,
616
+ children
617
+ }
618
+ );
619
+ }
620
+
451
621
  // src/ConsumerSection.tsx
452
- var import_jsx_runtime7 = require("react/jsx-runtime");
622
+ var import_jsx_runtime11 = require("react/jsx-runtime");
453
623
  function ConsumerSection({
454
624
  title,
455
625
  description,
@@ -457,22 +627,22 @@ function ConsumerSection({
457
627
  children,
458
628
  tone = "default"
459
629
  }) {
460
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(SectionPanel, { title, description, action, tone, children });
630
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SectionPanel, { title, description, action, tone, children });
461
631
  }
462
632
 
463
633
  // src/ConsumerDashboardGrid.tsx
464
- var import_core7 = require("@mantine/core");
465
- var import_jsx_runtime8 = require("react/jsx-runtime");
634
+ var import_core10 = require("@mantine/core");
635
+ var import_jsx_runtime12 = require("react/jsx-runtime");
466
636
  function ConsumerDashboardGrid({
467
637
  children,
468
638
  columns = 3
469
639
  }) {
470
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core7.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children });
640
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_core10.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children });
471
641
  }
472
642
 
473
643
  // src/ProductCard.tsx
474
- var import_core8 = require("@mantine/core");
475
- var import_jsx_runtime9 = require("react/jsx-runtime");
644
+ var import_core11 = require("@mantine/core");
645
+ var import_jsx_runtime13 = require("react/jsx-runtime");
476
646
  function ProductCard({
477
647
  title,
478
648
  description,
@@ -485,38 +655,38 @@ function ProductCard({
485
655
  footer
486
656
  }) {
487
657
  const MoreIcon = GdsIcons.Menu;
488
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core8.Stack, { gap: "md", children: [
658
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_core11.Stack, { gap: "md", children: [
489
659
  media,
490
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core8.Group, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
491
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core8.Group, { align: "flex-start", gap: "sm", wrap: "nowrap", children: [
492
- icon ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.ThemeIcon, { variant: "light", size: "xl", radius: "xl", "aria-hidden": true, children: icon }) : null,
493
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core8.Stack, { gap: 4, children: [
494
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Title, { order: 4, children: title }),
495
- description ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Text, { size: "sm", c: "dimmed", lineClamp: 3, children: description }) : null
660
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_core11.Group, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
661
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_core11.Group, { align: "flex-start", gap: "sm", wrap: "nowrap", children: [
662
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.ThemeIcon, { variant: "light", size: "xl", radius: "xl", "aria-hidden": true, children: icon }) : null,
663
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_core11.Stack, { gap: 4, children: [
664
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.Title, { order: 4, children: title }),
665
+ description ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.Text, { size: "sm", c: "dimmed", lineClamp: 3, children: description }) : null
496
666
  ] })
497
667
  ] }),
498
- /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core8.Group, { gap: "xs", align: "center", wrap: "nowrap", children: [
499
- typeof status === "string" ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Badge, { variant: "light", children: status }) : status,
500
- secondaryActions.length ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core8.Menu, { position: "bottom-end", withinPortal: true, children: [
501
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Menu.Target, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.ActionIcon, { variant: "subtle", "aria-label": "More actions", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(MoreIcon, { size: "1rem" }) }) }),
502
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Menu.Dropdown, { children: secondaryActions.map(
503
- (action) => action.href ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Menu.Item, { component: "a", href: action.href, color: action.color, children: action.label }, action.label) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Menu.Item, { onClick: action.onClick, color: action.color, children: action.label }, action.label)
668
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_core11.Group, { gap: "xs", align: "center", wrap: "nowrap", children: [
669
+ typeof status === "string" ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.Badge, { variant: "light", children: status }) : status,
670
+ secondaryActions.length ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_core11.Menu, { position: "bottom-end", withinPortal: true, children: [
671
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.Menu.Target, { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.ActionIcon, { variant: "subtle", "aria-label": "More actions", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(MoreIcon, { size: "1rem" }) }) }),
672
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.Menu.Dropdown, { children: secondaryActions.map(
673
+ (action) => action.href ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.Menu.Item, { component: "a", href: action.href, color: action.color, children: action.label }, action.label) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.Menu.Item, { onClick: action.onClick, color: action.color, children: action.label }, action.label)
504
674
  ) })
505
675
  ] }) : null
506
676
  ] })
507
677
  ] }),
508
- metadata.length ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Stack, { gap: 6, children: metadata.map((item) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core8.Group, { justify: "space-between", gap: "sm", children: [
509
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Text, { size: "sm", c: "dimmed", children: item.label }),
510
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Text, { size: "sm", fw: 500, ta: "right", children: item.value })
678
+ metadata.length ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.Stack, { gap: 6, children: metadata.map((item) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_core11.Group, { justify: "space-between", gap: "sm", children: [
679
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.Text, { size: "sm", c: "dimmed", children: item.label }),
680
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.Text, { size: "sm", fw: 500, ta: "right", children: item.value })
511
681
  ] }, item.label)) }) : null,
512
- primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core8.Group, { justify: "space-between", children: primaryAction }) : null,
682
+ primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core11.Group, { justify: "space-between", children: primaryAction }) : null,
513
683
  footer
514
684
  ] }) });
515
685
  }
516
686
 
517
687
  // src/EditorialCard.tsx
518
- var import_core9 = require("@mantine/core");
519
- var import_jsx_runtime10 = require("react/jsx-runtime");
688
+ var import_core12 = require("@mantine/core");
689
+ var import_jsx_runtime14 = require("react/jsx-runtime");
520
690
  var tonePalette = {
521
691
  default: {
522
692
  accent: "violet",
@@ -536,8 +706,8 @@ var tonePalette = {
536
706
  }
537
707
  };
538
708
  function EditorialMediaFallback({ compact }) {
539
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core9.AspectRatio, { ratio: compact ? 16 / 10 : 4 / 3, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
540
- import_core9.Box,
709
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core12.AspectRatio, { ratio: compact ? 16 / 10 : 4 / 3, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
710
+ import_core12.Box,
541
711
  {
542
712
  style: {
543
713
  display: "grid",
@@ -547,7 +717,7 @@ function EditorialMediaFallback({ compact }) {
547
717
  background: "var(--mantine-color-gray-0)",
548
718
  borderRadius: "var(--mantine-radius-md)"
549
719
  },
550
- children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(GdsIcons.Gallery, { size: compact ? "1.5rem" : "2rem" })
720
+ children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(GdsIcons.Gallery, { size: compact ? "1.5rem" : "2rem" })
551
721
  }
552
722
  ) });
553
723
  }
@@ -570,8 +740,8 @@ function EditorialCard({
570
740
  const featured = variant === "featured";
571
741
  const palette = tonePalette[tone];
572
742
  const interactiveProps = href ? { component: "a", href } : onClick ? { component: "button", onClick, type: "button" } : {};
573
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
574
- import_core9.Card,
743
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
744
+ import_core12.Card,
575
745
  {
576
746
  className: classNames?.root,
577
747
  withBorder: true,
@@ -585,21 +755,21 @@ function EditorialCard({
585
755
  cursor: href || onClick ? "pointer" : "default"
586
756
  },
587
757
  children: [
588
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core9.Card.Section, { className: classNames?.media, children: media ?? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(EditorialMediaFallback, { compact }) }),
589
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_core9.Stack, { gap: "md", p: compact ? "md" : "lg", className: classNames?.body, children: [
590
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_core9.Group, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "wrap", children: [
591
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_core9.Stack, { gap: 4, flex: 1, children: [
592
- eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core9.Text, { size: "xs", fw: 700, c: "dimmed", children: eyebrow }) : null,
593
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core9.Title, { order: compact ? 4 : 3, className: classNames?.title, children: title })
758
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core12.Card.Section, { className: classNames?.media, children: media ?? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(EditorialMediaFallback, { compact }) }),
759
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core12.Stack, { gap: "md", p: compact ? "md" : "lg", className: classNames?.body, children: [
760
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core12.Group, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "wrap", children: [
761
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core12.Stack, { gap: 4, flex: 1, children: [
762
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core12.Text, { size: "xs", fw: 700, c: "dimmed", children: eyebrow }) : null,
763
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core12.Title, { order: compact ? 4 : 3, className: classNames?.title, children: title })
594
764
  ] }),
595
- badge ? typeof badge === "string" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core9.Badge, { color: palette.accent, variant: "light", children: badge }) : badge : null
765
+ badge ? typeof badge === "string" ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core12.Badge, { color: palette.accent, variant: "light", children: badge }) : badge : null
596
766
  ] }),
597
- description ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core9.Text, { size: "sm", c: "dimmed", children: description }) : null,
598
- meta ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core9.Text, { size: "sm", c: "dimmed", className: classNames?.meta, children: meta }) : null,
599
- href || onClick || ctaLabel ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_core9.Group, { gap: 6, c: `${palette.accent}.7`, className: classNames?.action, children: [
600
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core9.Text, { fw: 600, size: "sm", children: ctaLabel }),
601
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
602
- import_core9.Anchor,
767
+ description ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core12.Text, { size: "sm", c: "dimmed", children: description }) : null,
768
+ meta ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core12.Text, { size: "sm", c: "dimmed", className: classNames?.meta, children: meta }) : null,
769
+ href || onClick || ctaLabel ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core12.Group, { gap: 6, c: `${palette.accent}.7`, className: classNames?.action, children: [
770
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core12.Text, { fw: 600, size: "sm", children: ctaLabel }),
771
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
772
+ import_core12.Anchor,
603
773
  {
604
774
  component: "span",
605
775
  underline: "never",
@@ -617,8 +787,8 @@ function EditorialCard({
617
787
 
618
788
  // src/PublicProductCard.tsx
619
789
  var import_react = require("react");
620
- var import_core10 = require("@mantine/core");
621
- var import_jsx_runtime11 = require("react/jsx-runtime");
790
+ var import_core13 = require("@mantine/core");
791
+ var import_jsx_runtime15 = require("react/jsx-runtime");
622
792
  var stateConfig = {
623
793
  available: { label: "Available", color: "teal" },
624
794
  limited: { label: "Limited", color: "yellow" },
@@ -635,29 +805,29 @@ function enhanceAction(action, disabled) {
635
805
  });
636
806
  }
637
807
  function ImageFallback({ compact }) {
638
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.AspectRatio, { ratio: compact ? 16 / 9 : 4 / 3, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
639
- import_core10.ThemeIcon,
808
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.AspectRatio, { ratio: compact ? 16 / 9 : 4 / 3, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
809
+ import_core13.ThemeIcon,
640
810
  {
641
811
  size: "100%",
642
812
  radius: "md",
643
813
  variant: "light",
644
814
  color: "gray",
645
815
  "aria-label": "No product image available",
646
- children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(GdsIcons.Gallery, { size: compact ? "1.5rem" : "2rem" })
816
+ children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(GdsIcons.Gallery, { size: compact ? "1.5rem" : "2rem" })
647
817
  }
648
818
  ) });
649
819
  }
650
820
  function LoadingCard({ compact }) {
651
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Card, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_core10.Stack, { gap: "md", children: [
652
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.AspectRatio, { ratio: compact ? 16 / 9 : 4 / 3, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Skeleton, { radius: "md" }) }),
653
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_core10.Stack, { gap: "xs", children: [
654
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Skeleton, { height: 20, radius: "sm", width: "70%" }),
655
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Skeleton, { height: 14, radius: "sm", width: "100%" }),
656
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Skeleton, { height: 14, radius: "sm", width: "85%" })
821
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Card, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core13.Stack, { gap: "md", children: [
822
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.AspectRatio, { ratio: compact ? 16 / 9 : 4 / 3, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Skeleton, { radius: "md" }) }),
823
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core13.Stack, { gap: "xs", children: [
824
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Skeleton, { height: 20, radius: "sm", width: "70%" }),
825
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Skeleton, { height: 14, radius: "sm", width: "100%" }),
826
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Skeleton, { height: 14, radius: "sm", width: "85%" })
657
827
  ] }),
658
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_core10.Group, { justify: "space-between", align: "center", children: [
659
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Skeleton, { height: 18, radius: "sm", width: 72 }),
660
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Skeleton, { height: 36, radius: "md", width: 120 })
828
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core13.Group, { justify: "space-between", align: "center", children: [
829
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Skeleton, { height: 18, radius: "sm", width: 72 }),
830
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Skeleton, { height: 36, radius: "md", width: 120 })
661
831
  ] })
662
832
  ] }) });
663
833
  }
@@ -680,7 +850,7 @@ function PublicProductCard({
680
850
  disabled = false
681
851
  }) {
682
852
  if (loading) {
683
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(LoadingCard, { compact });
853
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(LoadingCard, { compact });
684
854
  }
685
855
  const isActionDisabled = disabled || state === "sold-out";
686
856
  const resolvedPrimaryAction = enhanceAction(primaryAction, isActionDisabled);
@@ -693,46 +863,312 @@ function PublicProductCard({
693
863
  const pickupHelper = helperKind === "pickup" ? helperText : pickupNote;
694
864
  const inventoryHelper = helperKind === "inventory" ? helperText : inventoryNote;
695
865
  const hasSupportingRegion = Boolean(price || supportingHelper || pickupHelper || inventoryHelper);
696
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Card, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_core10.Stack, { gap: compact ? "sm" : "md", children: [
697
- image ?? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ImageFallback, { compact }),
698
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_core10.Group, { justify: "space-between", align: "flex-start", wrap: "nowrap", gap: "sm", children: [
699
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_core10.Stack, { gap: 4, style: { minWidth: 0, flex: 1 }, children: [
700
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Title, { order: compact ? 5 : 4, lineClamp: 2, children: title }),
701
- description ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Text, { size: "sm", c: "dimmed", lineClamp: compact ? 2 : 3, children: description }) : null
866
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Card, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core13.Stack, { gap: compact ? "sm" : "md", children: [
867
+ image ?? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(ImageFallback, { compact }),
868
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core13.Group, { justify: "space-between", align: "flex-start", wrap: "nowrap", gap: "sm", children: [
869
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core13.Stack, { gap: 4, style: { minWidth: 0, flex: 1 }, children: [
870
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Title, { order: compact ? 5 : 4, lineClamp: 2, children: title }),
871
+ description ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Text, { size: "sm", c: "dimmed", lineClamp: compact ? 2 : 3, children: description }) : null
702
872
  ] }),
703
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Badge, { variant: "light", color: stateBadge.color, children: stateBadge.label })
873
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Badge, { variant: "light", color: stateBadge.color, children: stateBadge.label })
704
874
  ] }),
705
- hasSupportingRegion ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_core10.Group, { justify: "space-between", align: "flex-end", gap: "sm", wrap: "nowrap", children: [
706
- /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_core10.Stack, { gap: 2, style: { minWidth: 0, flex: 1 }, children: [
707
- price ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Text, { fw: 700, size: compact ? "md" : "lg", children: price }) : null,
708
- supportingHelper ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Text, { size: "xs", c: "dimmed", children: supportingHelper }) : null
875
+ hasSupportingRegion ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core13.Group, { justify: "space-between", align: "flex-end", gap: "sm", wrap: "nowrap", children: [
876
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core13.Stack, { gap: 2, style: { minWidth: 0, flex: 1 }, children: [
877
+ price ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Text, { fw: 700, size: compact ? "md" : "lg", children: price }) : null,
878
+ supportingHelper ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Text, { size: "xs", c: "dimmed", children: supportingHelper }) : null
709
879
  ] }),
710
880
  resolvedPrimaryAction
711
- ] }) : resolvedPrimaryAction ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Group, { justify: "flex-end", children: resolvedPrimaryAction }) : null,
712
- pickupHelper || inventoryHelper || metadata.length ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_core10.Stack, { gap: 6, children: [
713
- pickupHelper ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_core10.Group, { justify: "space-between", gap: "sm", children: [
714
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Text, { size: "sm", c: "dimmed", children: "Pickup" }),
715
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Text, { size: "sm", fw: 500, ta: "right", children: pickupHelper })
881
+ ] }) : resolvedPrimaryAction ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Group, { justify: "flex-end", children: resolvedPrimaryAction }) : null,
882
+ pickupHelper || inventoryHelper || metadata.length ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core13.Stack, { gap: 6, children: [
883
+ pickupHelper ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core13.Group, { justify: "space-between", gap: "sm", children: [
884
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Text, { size: "sm", c: "dimmed", children: "Pickup" }),
885
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Text, { size: "sm", fw: 500, ta: "right", children: pickupHelper })
716
886
  ] }) : null,
717
- inventoryHelper ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_core10.Group, { justify: "space-between", gap: "sm", children: [
718
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Text, { size: "sm", c: "dimmed", children: "Availability" }),
719
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Text, { size: "sm", fw: 500, ta: "right", children: inventoryHelper })
887
+ inventoryHelper ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core13.Group, { justify: "space-between", gap: "sm", children: [
888
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Text, { size: "sm", c: "dimmed", children: "Availability" }),
889
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Text, { size: "sm", fw: 500, ta: "right", children: inventoryHelper })
720
890
  ] }) : null,
721
- metadata.map((item) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_core10.Group, { justify: "space-between", gap: "sm", children: [
722
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Text, { size: "sm", c: "dimmed", children: item.label }),
723
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Text, { size: "sm", fw: 500, ta: "right", children: item.value })
891
+ metadata.map((item) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core13.Group, { justify: "space-between", gap: "sm", children: [
892
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Text, { size: "sm", c: "dimmed", children: item.label }),
893
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Text, { size: "sm", fw: 500, ta: "right", children: item.value })
724
894
  ] }, item.label))
725
895
  ] }) : null,
726
- resolvedSecondaryAction ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_core10.Group, { justify: "flex-end", children: resolvedSecondaryAction }) : null
896
+ resolvedSecondaryAction ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core13.Group, { justify: "flex-end", children: resolvedSecondaryAction }) : null
897
+ ] }) });
898
+ }
899
+
900
+ // src/PublicFoodCard.tsx
901
+ var import_react2 = require("react");
902
+ var import_core14 = require("@mantine/core");
903
+ var import_jsx_runtime16 = require("react/jsx-runtime");
904
+ var ratioMap = {
905
+ square: 1,
906
+ dish: 4 / 3,
907
+ landscape: 16 / 9
908
+ };
909
+ var stateConfig2 = {
910
+ available: { label: "Available", color: "teal" },
911
+ preorder: { label: "Preorder", color: "violet" },
912
+ limited: { label: "Limited batch", color: "yellow" },
913
+ "sold-out": { label: "Sold out", color: "red" },
914
+ "coming-soon": { label: "Coming soon", color: "gray" }
915
+ };
916
+ var markerToneMap = {
917
+ default: "gray",
918
+ positive: "teal",
919
+ warning: "orange",
920
+ muted: "dark"
921
+ };
922
+ function enhanceAction2(action, disabled) {
923
+ if (!(0, import_react2.isValidElement)(action)) {
924
+ return action;
925
+ }
926
+ return (0, import_react2.cloneElement)(action, {
927
+ disabled: disabled || Boolean(action.props.disabled),
928
+ "aria-disabled": disabled || void 0
929
+ });
930
+ }
931
+ function FoodImageFallback({ mediaRatio }) {
932
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.AspectRatio, { ratio: ratioMap[mediaRatio], children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.ThemeIcon, { size: "100%", radius: "md", variant: "light", color: "gray", "aria-label": "No food image available", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(GdsIcons.Gallery, { size: "2rem" }) }) });
933
+ }
934
+ function LoadingFoodCard({ mediaRatio }) {
935
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Stack, { gap: "md", children: [
936
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.AspectRatio, { ratio: ratioMap[mediaRatio], children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Skeleton, { radius: "md" }) }),
937
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Stack, { gap: "xs", children: [
938
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Skeleton, { height: 20, radius: "sm", width: "72%" }),
939
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Skeleton, { height: 14, radius: "sm", width: "96%" }),
940
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Skeleton, { height: 14, radius: "sm", width: "78%" })
941
+ ] }),
942
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Group, { justify: "space-between", align: "center", children: [
943
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Skeleton, { height: 18, radius: "sm", width: 96 }),
944
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Skeleton, { height: 36, radius: "md", width: 112 })
945
+ ] })
946
+ ] }) });
947
+ }
948
+ function PublicFoodCard({
949
+ title,
950
+ description,
951
+ image,
952
+ price,
953
+ priceNote,
954
+ state,
955
+ helperText,
956
+ pickupNote,
957
+ freshnessNote,
958
+ markers = [],
959
+ metadata = [],
960
+ primaryAction,
961
+ secondaryAction,
962
+ quantityHint,
963
+ mediaRatio = "dish",
964
+ loading = false,
965
+ disabled = false
966
+ }) {
967
+ if (loading) {
968
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(LoadingFoodCard, { mediaRatio });
969
+ }
970
+ const stateBadge = stateConfig2[state];
971
+ const isActionDisabled = disabled || state === "sold-out" || state === "coming-soon";
972
+ const resolvedPrimaryAction = enhanceAction2(primaryAction, isActionDisabled);
973
+ const resolvedSecondaryAction = enhanceAction2(secondaryAction, disabled);
974
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Stack, { gap: "md", children: [
975
+ image ?? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(FoodImageFallback, { mediaRatio }),
976
+ markers.length > 0 || quantityHint ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Group, { justify: "space-between", align: "center", wrap: "wrap", gap: "xs", children: [
977
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Group, { gap: "xs", wrap: "wrap", children: markers.map((marker) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Badge, { variant: "light", color: markerToneMap[marker.tone ?? "default"], children: marker.label }, marker.id)) }),
978
+ quantityHint ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Text, { size: "xs", fw: 600, c: "dimmed", children: quantityHint }) : null
979
+ ] }) : null,
980
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Group, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "nowrap", children: [
981
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Stack, { gap: 4, style: { minWidth: 0, flex: 1 }, children: [
982
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Title, { order: 4, lineClamp: 2, children: title }),
983
+ description ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Text, { size: "sm", c: "dimmed", lineClamp: 3, children: description }) : null
984
+ ] }),
985
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Badge, { variant: "light", color: stateBadge.color, children: stateBadge.label })
986
+ ] }),
987
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Group, { justify: "space-between", align: "flex-end", gap: "sm", wrap: "nowrap", children: [
988
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Stack, { gap: 2, style: { minWidth: 0, flex: 1 }, children: [
989
+ price ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Text, { fw: 800, size: "lg", children: price }) : null,
990
+ priceNote ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Text, { size: "xs", c: "dimmed", children: priceNote }) : null,
991
+ helperText ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Text, { size: "sm", c: "dimmed", children: helperText }) : null
992
+ ] }),
993
+ resolvedPrimaryAction
994
+ ] }),
995
+ pickupNote || freshnessNote || metadata.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Stack, { gap: 6, children: [
996
+ pickupNote ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Group, { justify: "space-between", align: "flex-start", gap: "sm", children: [
997
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Text, { size: "sm", c: "dimmed", children: "Pickup" }),
998
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Text, { size: "sm", fw: 500, ta: "right", children: pickupNote })
999
+ ] }) : null,
1000
+ freshnessNote ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Group, { justify: "space-between", align: "flex-start", gap: "sm", children: [
1001
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Text, { size: "sm", c: "dimmed", children: "Freshness" }),
1002
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Text, { size: "sm", fw: 500, ta: "right", children: freshnessNote })
1003
+ ] }) : null,
1004
+ metadata.map((item) => /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Group, { justify: "space-between", align: "flex-start", gap: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core14.Group, { gap: "xs", wrap: "nowrap", children: [
1005
+ item.icon,
1006
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Text, { size: "sm", c: "dimmed", children: item.label })
1007
+ ] }) }, item.id))
1008
+ ] }) : null,
1009
+ resolvedSecondaryAction ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core14.Group, { justify: "flex-end", children: resolvedSecondaryAction }) : null
1010
+ ] }) });
1011
+ }
1012
+
1013
+ // src/FoodMenuSection.tsx
1014
+ var import_core15 = require("@mantine/core");
1015
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1016
+ function FoodMenuSection({
1017
+ title,
1018
+ description,
1019
+ eyebrow,
1020
+ categories,
1021
+ sectionNote,
1022
+ action,
1023
+ emptyState,
1024
+ columns = 3,
1025
+ showEmptyCategories = false
1026
+ }) {
1027
+ const normalizedCategories = (categories ?? []).filter(Boolean);
1028
+ const visibleCategories = showEmptyCategories ? normalizedCategories : normalizedCategories.filter((category) => category.items.length > 0);
1029
+ if (!visibleCategories.length) {
1030
+ return emptyState ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_jsx_runtime17.Fragment, { children: emptyState }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1031
+ EmptyState,
1032
+ {
1033
+ title: "No active menu available",
1034
+ description: "Publish grouped menu categories here when the current weekly or seasonal menu is ready."
1035
+ }
1036
+ );
1037
+ }
1038
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core15.Box, { component: "section", "aria-label": typeof title === "string" ? title : "Food menu section", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core15.Stack, { gap: "xl", children: [
1039
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core15.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
1040
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core15.Stack, { gap: 4, children: [
1041
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core15.Text, { size: "xs", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
1042
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core15.Title, { order: 2, children: title }),
1043
+ description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core15.Text, { size: "sm", c: "dimmed", maw: 760, children: description }) : null,
1044
+ sectionNote ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core15.Text, { size: "sm", c: "dimmed", children: sectionNote }) : null
1045
+ ] }),
1046
+ action
1047
+ ] }),
1048
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core15.Stack, { gap: "xl", children: visibleCategories.map((category) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core15.Stack, { gap: "md", children: [
1049
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core15.Stack, { gap: 4, children: [
1050
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core15.Title, { order: 3, children: category.title }),
1051
+ category.description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core15.Text, { size: "sm", c: "dimmed", children: category.description }) : null,
1052
+ category.helperNote ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core15.Text, { size: "sm", c: "dimmed", children: category.helperNote }) : null
1053
+ ] }),
1054
+ category.items.length ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core15.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: category.items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(PublicFoodCard, { ...item }, item.id)) }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1055
+ EmptyState,
1056
+ {
1057
+ title: "No items in this category",
1058
+ description: "This category is defined, but it does not currently have any visible dishes or bundles."
1059
+ }
1060
+ )
1061
+ ] }, category.id)) })
1062
+ ] }) });
1063
+ }
1064
+
1065
+ // src/ListingCard.tsx
1066
+ var import_core16 = require("@mantine/core");
1067
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1068
+ var ratioMap2 = {
1069
+ "1:1": 1,
1070
+ "4:3": 4 / 3,
1071
+ "16:9": 16 / 9
1072
+ };
1073
+ var toneColorMap = {
1074
+ default: void 0,
1075
+ positive: "teal",
1076
+ warning: "orange",
1077
+ muted: "gray"
1078
+ };
1079
+ function ListingImageFallback({ mediaRatio }) {
1080
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core16.AspectRatio, { ratio: ratioMap2[mediaRatio], children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1081
+ import_core16.ThemeIcon,
1082
+ {
1083
+ size: "100%",
1084
+ radius: "md",
1085
+ variant: "light",
1086
+ color: "gray",
1087
+ "aria-label": "No listing image available",
1088
+ children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(GdsIcons.Gallery, { size: "2rem" })
1089
+ }
1090
+ ) });
1091
+ }
1092
+ function ListingAffordance({ affordance }) {
1093
+ const config = GdsVocabulary[affordance.action];
1094
+ const Icon = config.icon;
1095
+ const label = affordance.ariaLabel ?? getSemanticActionLabel(affordance.action);
1096
+ if (affordance.href) {
1097
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1098
+ import_core16.ActionIcon,
1099
+ {
1100
+ component: "a",
1101
+ href: affordance.href,
1102
+ variant: "subtle",
1103
+ size: "lg",
1104
+ "aria-label": label,
1105
+ disabled: affordance.disabled,
1106
+ children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { size: "1rem", stroke: 1.75 })
1107
+ }
1108
+ );
1109
+ }
1110
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1111
+ import_core16.ActionIcon,
1112
+ {
1113
+ variant: "subtle",
1114
+ size: "lg",
1115
+ "aria-label": label,
1116
+ onClick: affordance.onClick,
1117
+ disabled: affordance.disabled,
1118
+ children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { size: "1rem", stroke: 1.75 })
1119
+ }
1120
+ );
1121
+ }
1122
+ function ListingCard({
1123
+ title,
1124
+ href,
1125
+ description,
1126
+ image,
1127
+ mediaRatio = "4:3",
1128
+ metadata = [],
1129
+ featured = false,
1130
+ sponsoredDisclosure,
1131
+ price,
1132
+ primaryAction,
1133
+ saveAction,
1134
+ shareAction,
1135
+ compact = false
1136
+ }) {
1137
+ const titleContent = href && typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core16.Text, { component: "a", href, inherit: true, td: "none", children: title }) : title;
1138
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core16.Card, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core16.Stack, { gap: compact ? "sm" : "md", children: [
1139
+ image ?? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ListingImageFallback, { mediaRatio }),
1140
+ featured || sponsoredDisclosure ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core16.Group, { justify: "space-between", gap: "sm", wrap: "wrap", children: [
1141
+ featured ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core16.Badge, { variant: "light", color: "violet", children: "Featured" }) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", {}),
1142
+ sponsoredDisclosure ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core16.Text, { size: "xs", c: "dimmed", children: sponsoredDisclosure }) : null
1143
+ ] }) : null,
1144
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core16.Stack, { gap: 4, children: [
1145
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core16.Title, { order: compact ? 5 : 4, lineClamp: 2, children: titleContent }),
1146
+ description ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core16.Text, { size: "sm", c: "dimmed", lineClamp: compact ? 2 : 3, children: description }) : null
1147
+ ] }),
1148
+ metadata.length ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core16.Stack, { gap: "xs", children: metadata.map((item) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core16.Group, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "nowrap", children: [
1149
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core16.Group, { gap: "xs", wrap: "nowrap", style: { minWidth: 0, flex: 1 }, children: [
1150
+ item.icon,
1151
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core16.Text, { size: "sm", c: item.tone ? toneColorMap[item.tone] : "dimmed", lineClamp: 1, children: item.label })
1152
+ ] }),
1153
+ item.value ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core16.Text, { size: "sm", fw: 500, ta: "right", children: item.value }) : null
1154
+ ] }, item.id)) }) : null,
1155
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core16.Group, { justify: "space-between", align: "center", gap: "sm", wrap: "wrap", children: [
1156
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core16.Stack, { gap: 2, style: { minWidth: 0, flex: 1 }, children: price ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core16.Text, { fw: 700, size: compact ? "md" : "lg", children: price }) : null }),
1157
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core16.Group, { gap: "xs", wrap: "nowrap", justify: "flex-end", style: { marginInlineStart: "auto" }, children: [
1158
+ saveAction ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ListingAffordance, { affordance: saveAction }) : null,
1159
+ shareAction ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ListingAffordance, { affordance: shareAction }) : null,
1160
+ primaryAction
1161
+ ] })
1162
+ ] })
727
1163
  ] }) });
728
1164
  }
729
1165
 
730
1166
  // src/BrowseSurface.tsx
731
- var import_core13 = require("@mantine/core");
1167
+ var import_core19 = require("@mantine/core");
732
1168
 
733
1169
  // src/DataToolbar.tsx
734
- var import_core11 = require("@mantine/core");
735
- var import_jsx_runtime12 = require("react/jsx-runtime");
1170
+ var import_core17 = require("@mantine/core");
1171
+ var import_jsx_runtime19 = require("react/jsx-runtime");
736
1172
  function DataToolbar({
737
1173
  searchSlot,
738
1174
  filterSlot,
@@ -741,20 +1177,20 @@ function DataToolbar({
741
1177
  createAction,
742
1178
  activeFilters = []
743
1179
  }) {
744
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_core11.Stack, { gap: "sm", children: [
745
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_core11.Group, { justify: "space-between", align: "flex-start", gap: "sm", children: [
746
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_core11.Group, { flex: 1, align: "flex-start", gap: "sm", children: [
1180
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core17.Stack, { gap: "sm", children: [
1181
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core17.Group, { justify: "space-between", align: "flex-start", gap: "sm", children: [
1182
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core17.Group, { flex: 1, align: "flex-start", gap: "sm", children: [
747
1183
  searchSlot,
748
1184
  filterSlot,
749
1185
  sortSlot
750
1186
  ] }),
751
- /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_core11.Group, { gap: "sm", children: [
1187
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core17.Group, { gap: "sm", children: [
752
1188
  resetAction,
753
1189
  createAction
754
1190
  ] })
755
1191
  ] }),
756
- activeFilters.length ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_core11.Group, { gap: "xs", children: activeFilters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
757
- import_core11.Badge,
1192
+ activeFilters.length ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core17.Group, { gap: "xs", children: activeFilters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1193
+ import_core17.Badge,
758
1194
  {
759
1195
  variant: "light",
760
1196
  rightSection: filter.onRemove ? "\xD7" : void 0,
@@ -768,17 +1204,17 @@ function DataToolbar({
768
1204
  }
769
1205
 
770
1206
  // src/StateBlock.tsx
771
- var import_core12 = require("@mantine/core");
772
- var import_jsx_runtime13 = require("react/jsx-runtime");
1207
+ var import_core18 = require("@mantine/core");
1208
+ var import_jsx_runtime20 = require("react/jsx-runtime");
773
1209
  var variantConfig = {
774
- loading: { color: "violet", icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core12.Loader, { size: "sm" }) },
775
- empty: { color: "gray", icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(GdsIcons.Inbox, { size: "1.1rem" }) },
776
- error: { color: "red", icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(GdsIcons.Danger, { size: "1.1rem" }) },
777
- permission: { color: "orange", icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(GdsIcons.Verify, { size: "1.1rem" }) },
778
- disabled: { color: "gray", icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(GdsIcons.Toggle, { size: "1.1rem" }) },
779
- success: { color: "teal", icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(GdsIcons.Success, { size: "1.1rem" }) },
780
- info: { color: "blue", icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(GdsIcons.Info, { size: "1.1rem" }) },
781
- "not-enough-data": { color: "yellow", icon: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(GdsIcons.Analytics, { size: "1.1rem" }) }
1210
+ loading: { color: "violet", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core18.Loader, { size: "sm" }) },
1211
+ empty: { color: "gray", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GdsIcons.Inbox, { size: "1.1rem" }) },
1212
+ error: { color: "red", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GdsIcons.Danger, { size: "1.1rem" }) },
1213
+ permission: { color: "orange", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GdsIcons.Verify, { size: "1.1rem" }) },
1214
+ disabled: { color: "gray", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GdsIcons.Toggle, { size: "1.1rem" }) },
1215
+ success: { color: "teal", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GdsIcons.Success, { size: "1.1rem" }) },
1216
+ info: { color: "blue", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GdsIcons.Info, { size: "1.1rem" }) },
1217
+ "not-enough-data": { color: "yellow", icon: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(GdsIcons.Analytics, { size: "1.1rem" }) }
782
1218
  };
783
1219
  function StateBlock({
784
1220
  variant,
@@ -789,8 +1225,8 @@ function StateBlock({
789
1225
  compact = false
790
1226
  }) {
791
1227
  const config = variantConfig[variant];
792
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
793
- import_core12.Stack,
1228
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
1229
+ import_core18.Stack,
794
1230
  {
795
1231
  align: compact ? "flex-start" : "center",
796
1232
  justify: "center",
@@ -798,10 +1234,10 @@ function StateBlock({
798
1234
  py: compact ? "md" : "xl",
799
1235
  ta: compact ? "left" : "center",
800
1236
  children: [
801
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core12.ThemeIcon, { variant: "light", color: config.color, size: compact ? "lg" : "xl", radius: "xl", children: icon ?? config.icon }),
802
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_core12.Stack, { gap: 6, align: compact ? "flex-start" : "center", children: [
803
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core12.Title, { order: compact ? 4 : 3, children: title }),
804
- description ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core12.Text, { c: "dimmed", maw: compact ? void 0 : 480, children: description }) : null
1237
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core18.ThemeIcon, { variant: "light", color: config.color, size: compact ? "lg" : "xl", radius: "xl", children: icon ?? config.icon }),
1238
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core18.Stack, { gap: 6, align: compact ? "flex-start" : "center", children: [
1239
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core18.Title, { order: compact ? 4 : 3, children: title }),
1240
+ description ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core18.Text, { c: "dimmed", maw: compact ? void 0 : 480, children: description }) : null
805
1241
  ] }),
806
1242
  action
807
1243
  ]
@@ -810,7 +1246,7 @@ function StateBlock({
810
1246
  }
811
1247
 
812
1248
  // src/BrowseSurface.tsx
813
- var import_jsx_runtime14 = require("react/jsx-runtime");
1249
+ var import_jsx_runtime21 = require("react/jsx-runtime");
814
1250
  function BrowseSurface({
815
1251
  eyebrow,
816
1252
  title,
@@ -844,22 +1280,22 @@ function BrowseSurface({
844
1280
  }));
845
1281
  let body = content;
846
1282
  if (loading) {
847
- body = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(StateBlock, { variant: "loading", title: loadingTitle, description: loadingDescription, compact: true });
1283
+ body = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StateBlock, { variant: "loading", title: loadingTitle, description: loadingDescription, compact: true });
848
1284
  } else if (error) {
849
- body = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(StateBlock, { variant: "error", title: errorTitle, description: error, action: errorAction ?? emptyAction, compact: true });
1285
+ body = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StateBlock, { variant: "error", title: errorTitle, description: error, action: errorAction ?? emptyAction, compact: true });
850
1286
  } else if (empty) {
851
- body = /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, action: emptyAction, compact: true });
1287
+ body = /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, action: emptyAction, compact: true });
852
1288
  }
853
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Stack, { gap: "lg", children: [
854
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Paper, { withBorder: true, radius: "xl", p: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Stack, { gap: "lg", children: [
855
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Group, { justify: "space-between", align: "flex-start", gap: "md", children: [
856
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Stack, { gap: "xs", maw: 760, children: [
857
- eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Text, { size: "xs", fw: 700, tt: "uppercase", c: "dimmed", style: { letterSpacing: "0.18em" }, children: eyebrow }) : null,
858
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Title, { order: 1, children: title }),
859
- description ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Text, { size: "lg", c: "dimmed", children: description }) : null
1289
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core19.Stack, { gap: "lg", children: [
1290
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core19.Paper, { withBorder: true, radius: "xl", p: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core19.Stack, { gap: "lg", children: [
1291
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core19.Group, { justify: "space-between", align: "flex-start", gap: "md", children: [
1292
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core19.Stack, { gap: "xs", maw: 760, children: [
1293
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core19.Text, { size: "xs", fw: 700, tt: "uppercase", c: "dimmed", style: { letterSpacing: "0.18em" }, children: eyebrow }) : null,
1294
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core19.Title, { order: 1, children: title }),
1295
+ description ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core19.Text, { size: "lg", c: "dimmed", children: description }) : null
860
1296
  ] }),
861
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Stack, { align: "flex-end", gap: "xs", children: [
862
- typeof resultCount === "number" ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Badge, { size: "lg", radius: "xl", variant: "light", color: "violet", children: [
1297
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core19.Stack, { align: "flex-end", gap: "xs", children: [
1298
+ typeof resultCount === "number" ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core19.Badge, { size: "lg", radius: "xl", variant: "light", color: "violet", children: [
863
1299
  resultCount,
864
1300
  " ",
865
1301
  resultLabel
@@ -867,10 +1303,10 @@ function BrowseSurface({
867
1303
  primaryControls
868
1304
  ] })
869
1305
  ] }),
870
- scopeOptions.length ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Stack, { gap: "xs", children: [
871
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Text, { size: "sm", fw: 600, c: "dimmed", children: scopeLabel }),
872
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Group, { gap: "xs", wrap: "wrap", children: scopeOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
873
- import_core13.Button,
1306
+ scopeOptions.length ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core19.Stack, { gap: "xs", children: [
1307
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core19.Text, { size: "sm", fw: 600, c: "dimmed", children: scopeLabel }),
1308
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core19.Group, { gap: "xs", wrap: "wrap", children: scopeOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1309
+ import_core19.Button,
874
1310
  {
875
1311
  variant: option.active ? "filled" : "default",
876
1312
  color: option.active ? "violet" : "gray",
@@ -882,30 +1318,30 @@ function BrowseSurface({
882
1318
  option.id
883
1319
  )) })
884
1320
  ] }) : null,
885
- locationControls ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Stack, { gap: "xs", children: [
886
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Text, { size: "sm", fw: 600, c: "dimmed", children: "Location" }),
1321
+ locationControls ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core19.Stack, { gap: "xs", children: [
1322
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core19.Text, { size: "sm", fw: 600, c: "dimmed", children: "Location" }),
887
1323
  locationControls
888
1324
  ] }) : null,
889
- toolbar || sortControl ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.SimpleGrid, { cols: { base: 1, lg: sortControl ? 2 : 1 }, spacing: "md", children: [
890
- toolbar ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1325
+ toolbar || sortControl ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core19.SimpleGrid, { cols: { base: 1, lg: sortControl ? 2 : 1 }, spacing: "md", children: [
1326
+ toolbar ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
891
1327
  DataToolbar,
892
1328
  {
893
1329
  ...toolbar,
894
1330
  activeFilters: toolbarFilters.length ? toolbarFilters : toolbar.fallbackActiveFilters
895
1331
  }
896
- ) : /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Box, {}),
897
- sortControl ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Stack, { gap: "xs", align: "stretch", children: [
898
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Text, { size: "sm", fw: 600, c: "dimmed", children: "Sort" }),
1332
+ ) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core19.Box, {}),
1333
+ sortControl ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core19.Stack, { gap: "xs", align: "stretch", children: [
1334
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core19.Text, { size: "sm", fw: 600, c: "dimmed", children: "Sort" }),
899
1335
  sortControl
900
1336
  ] }) : null
901
1337
  ] }) : null,
902
- mobileFilters ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Stack, { hiddenFrom: "lg", gap: "xs", children: [
903
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Text, { size: "sm", fw: 600, c: "dimmed", children: "Filters" }),
1338
+ mobileFilters ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core19.Stack, { hiddenFrom: "lg", gap: "xs", children: [
1339
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core19.Text, { size: "sm", fw: 600, c: "dimmed", children: "Filters" }),
904
1340
  mobileFilters
905
1341
  ] }) : null,
906
- filterDrawer ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Box, { hiddenFrom: "lg", children: filterDrawer }) : null,
907
- activeFilters.length ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Group, { gap: "xs", wrap: "wrap", children: activeFilters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
908
- import_core13.Badge,
1342
+ filterDrawer ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core19.Box, { hiddenFrom: "lg", children: filterDrawer }) : null,
1343
+ activeFilters.length ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core19.Group, { gap: "xs", wrap: "wrap", children: activeFilters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1344
+ import_core19.Badge,
909
1345
  {
910
1346
  variant: "light",
911
1347
  color: "violet",
@@ -921,87 +1357,47 @@ function BrowseSurface({
921
1357
  ] });
922
1358
  }
923
1359
 
924
- // src/AccentPanel.tsx
925
- var import_core14 = require("@mantine/core");
926
- var import_jsx_runtime15 = require("react/jsx-runtime");
927
- var toneStyles = {
928
- gray: {
929
- bg: "light-dark(var(--mantine-color-gray-0), color-mix(in srgb, var(--mantine-color-gray-7) 88%, black))",
930
- border: "light-dark(var(--mantine-color-gray-2), color-mix(in srgb, var(--mantine-color-gray-4) 70%, transparent))",
931
- color: "light-dark(var(--mantine-color-gray-9), var(--mantine-color-gray-0))"
932
- },
933
- violet: {
934
- bg: "light-dark(var(--mantine-color-violet-0), color-mix(in srgb, var(--mantine-color-violet-9) 70%, black))",
935
- border: "light-dark(var(--mantine-color-violet-2), color-mix(in srgb, var(--mantine-color-violet-4) 75%, transparent))",
936
- color: "light-dark(var(--mantine-color-violet-9), var(--mantine-color-violet-0))"
937
- },
938
- green: {
939
- bg: "light-dark(var(--mantine-color-green-0), color-mix(in srgb, var(--mantine-color-green-9) 72%, black))",
940
- border: "light-dark(var(--mantine-color-green-2), color-mix(in srgb, var(--mantine-color-green-4) 78%, transparent))",
941
- color: "light-dark(var(--mantine-color-green-9), var(--mantine-color-green-0))"
942
- },
943
- red: {
944
- bg: "light-dark(var(--mantine-color-red-0), color-mix(in srgb, var(--mantine-color-red-9) 72%, black))",
945
- border: "light-dark(var(--mantine-color-red-2), color-mix(in srgb, var(--mantine-color-red-4) 78%, transparent))",
946
- color: "light-dark(var(--mantine-color-red-9), var(--mantine-color-red-0))"
947
- },
948
- amber: {
949
- bg: "light-dark(var(--mantine-color-yellow-0), color-mix(in srgb, var(--mantine-color-yellow-8) 78%, black))",
950
- border: "light-dark(var(--mantine-color-yellow-3), color-mix(in srgb, var(--mantine-color-yellow-5) 70%, transparent))",
951
- color: "light-dark(var(--mantine-color-yellow-9), var(--mantine-color-yellow-0))"
952
- },
953
- blue: {
954
- bg: "light-dark(var(--mantine-color-blue-0), color-mix(in srgb, var(--mantine-color-blue-9) 74%, black))",
955
- border: "light-dark(var(--mantine-color-blue-2), color-mix(in srgb, var(--mantine-color-blue-4) 75%, transparent))",
956
- color: "light-dark(var(--mantine-color-blue-9), var(--mantine-color-blue-0))"
957
- }
958
- };
959
- function resolveAccentPanelStyles(tone = "violet", variant = "subtle") {
960
- const token = toneStyles[tone];
961
- if (variant === "soft-outline") {
962
- return {
963
- backgroundColor: "light-dark(var(--mantine-color-body), color-mix(in srgb, var(--mantine-color-dark-7) 92%, black))",
964
- border: `1px solid ${token.border}`,
965
- color: token.color
966
- };
967
- }
968
- return {
969
- backgroundColor: token.bg,
970
- border: `1px solid ${token.border}`,
971
- color: token.color
972
- };
973
- }
974
- function AccentPanel({
975
- tone = "violet",
976
- variant = "subtle",
977
- title,
978
- badge,
979
- children
1360
+ // src/DetailProfileShell.tsx
1361
+ var import_core20 = require("@mantine/core");
1362
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1363
+ function DetailProfileShell({
1364
+ mode = "page",
1365
+ hero,
1366
+ actions,
1367
+ sections,
1368
+ related,
1369
+ padding = "lg",
1370
+ showDividers = true
980
1371
  }) {
981
- const styles = resolveAccentPanelStyles(tone, variant);
982
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Paper, { withBorder: true, radius: "lg", p: "lg", style: styles, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: "sm", children: [
983
- title || badge ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Group, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "wrap", children: [
984
- title ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Title, { order: 4, c: "inherit", children: title }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Box, {}),
985
- badge ? typeof badge === "string" ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Badge, { color: tone === "amber" ? "yellow" : tone, variant: "filled", children: badge }) : badge : null
986
- ] }) : null,
987
- typeof children === "string" ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { c: "inherit", children }) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Box, { c: "inherit", children })
1372
+ const content = sections.filter(Boolean);
1373
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core20.Paper, { withBorder: mode === "drawer", radius: mode === "drawer" ? "xl" : "md", p: padding, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core20.Stack, { gap: "lg", children: [
1374
+ hero,
1375
+ actions,
1376
+ content.map((section, index) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core20.Stack, { gap: "lg", children: [
1377
+ index > 0 && showDividers ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core20.Divider, {}) : null,
1378
+ section
1379
+ ] }, index)),
1380
+ related ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_jsx_runtime22.Fragment, { children: [
1381
+ content.length && showDividers ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core20.Divider, {}) : null,
1382
+ related
1383
+ ] }) : null
988
1384
  ] }) });
989
1385
  }
990
1386
 
991
1387
  // src/PublicShell.tsx
992
- var import_core16 = require("@mantine/core");
1388
+ var import_core22 = require("@mantine/core");
993
1389
 
994
1390
  // src/PublicNav.tsx
995
- var import_core15 = require("@mantine/core");
996
- var import_jsx_runtime16 = require("react/jsx-runtime");
1391
+ var import_core21 = require("@mantine/core");
1392
+ var import_jsx_runtime23 = require("react/jsx-runtime");
997
1393
  function PublicNav({ items, activeId, renderLink }) {
998
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Group, { component: "nav", "aria-label": "Primary", gap: "lg", wrap: "nowrap", children: items.map((item) => {
1394
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core21.Group, { component: "nav", "aria-label": "Primary", gap: "lg", wrap: "nowrap", children: items.map((item) => {
999
1395
  const active = item.id === activeId;
1000
1396
  if (renderLink) {
1001
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: renderLink(item, active) }, item.id);
1397
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { children: renderLink(item, active) }, item.id);
1002
1398
  }
1003
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1004
- import_core15.Anchor,
1399
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1400
+ import_core21.Anchor,
1005
1401
  {
1006
1402
  href: item.href,
1007
1403
  "aria-current": active ? "page" : void 0,
@@ -1018,15 +1414,15 @@ function PublicNav({ items, activeId, renderLink }) {
1018
1414
  }
1019
1415
 
1020
1416
  // src/PublicShell.tsx
1021
- var import_jsx_runtime17 = require("react/jsx-runtime");
1417
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1022
1418
  function InlineMobileNavigation({
1023
1419
  mobileNavigation,
1024
1420
  className,
1025
1421
  mode
1026
1422
  }) {
1027
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Box, { component: "details", hiddenFrom: "sm", className, children: [
1028
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1029
- import_core16.Box,
1423
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core22.Box, { component: "details", hiddenFrom: "sm", className, children: [
1424
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1425
+ import_core22.Box,
1030
1426
  {
1031
1427
  component: "summary",
1032
1428
  "aria-label": mode === "drawer" ? "Open site navigation drawer" : "Open site navigation",
@@ -1038,13 +1434,13 @@ function InlineMobileNavigation({
1038
1434
  gap: "0.5rem"
1039
1435
  },
1040
1436
  children: [
1041
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Burger, { opened: false, "aria-hidden": true }),
1042
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Text, { size: "sm", fw: 600, children: "Menu" })
1437
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Burger, { opened: false, "aria-hidden": true }),
1438
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Text, { size: "sm", fw: 600, children: "Menu" })
1043
1439
  ]
1044
1440
  }
1045
1441
  ),
1046
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1047
- import_core16.Box,
1442
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1443
+ import_core22.Box,
1048
1444
  {
1049
1445
  mt: "sm",
1050
1446
  p: "sm",
@@ -1053,7 +1449,7 @@ function InlineMobileNavigation({
1053
1449
  border: "1px solid var(--mantine-color-default-border)",
1054
1450
  background: mode === "drawer" ? "light-dark(var(--mantine-color-white), color-mix(in srgb, var(--mantine-color-dark-7) 92%, black))" : "var(--mantine-color-body)"
1055
1451
  },
1056
- children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Stack, { gap: "sm", children: mobileNavigation })
1452
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Stack, { gap: "sm", children: mobileNavigation })
1057
1453
  }
1058
1454
  )
1059
1455
  ] });
@@ -1074,30 +1470,30 @@ function PublicShell({
1074
1470
  mobileNavigationMode = "sheet",
1075
1471
  classNames
1076
1472
  }) {
1077
- const resolvedNavigation = navigation ?? (navItems ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(PublicNav, { items: navItems, activeId: activeNavId }) : null);
1473
+ const resolvedNavigation = navigation ?? (navItems ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(PublicNav, { items: navItems, activeId: activeNavId }) : null);
1078
1474
  const containerSize = maxContentWidth ?? (compact ? "md" : "lg");
1079
1475
  const headerHeight = headerVariant === "compact" ? 64 : headerVariant === "branded-quiet" ? 88 : 72;
1080
1476
  const mainPadding = headerVariant === "compact" ? "lg" : "xl";
1081
1477
  const usesInlineMobileNavigation = Boolean(mobileNavigation) && mobileNavigationMode !== "sheet";
1082
1478
  const usesSheetMobileNavigation = Boolean(mobileNavigation) && mobileNavigationMode === "sheet";
1083
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1084
- import_core16.AppShell,
1479
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1480
+ import_core22.AppShell,
1085
1481
  {
1086
1482
  className: classNames?.root,
1087
1483
  header: { height: headerHeight },
1088
1484
  footer: usesSheetMobileNavigation ? { height: 68 } : void 0,
1089
1485
  padding: 0,
1090
1486
  children: [
1091
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.AppShell.Header, { withBorder: headerBordered, className: classNames?.header, "data-header-variant": headerVariant, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Container, { size: containerSize, h: "100%", py: headerVariant === "branded-quiet" ? "sm" : 0, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1092
- import_core16.Group,
1487
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.AppShell.Header, { withBorder: headerBordered, className: classNames?.header, "data-header-variant": headerVariant, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Container, { size: containerSize, h: "100%", py: headerVariant === "branded-quiet" ? "sm" : 0, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1488
+ import_core22.Group,
1093
1489
  {
1094
1490
  h: "100%",
1095
1491
  justify: "space-between",
1096
1492
  wrap: "nowrap",
1097
1493
  gap: headerVariant === "compact" ? "sm" : "lg",
1098
1494
  children: [
1099
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Group, { wrap: "nowrap", gap: headerVariant === "compact" ? "xs" : "sm", className: classNames?.brand, children: [
1100
- usesInlineMobileNavigation ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
1495
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core22.Group, { wrap: "nowrap", gap: headerVariant === "compact" ? "xs" : "sm", className: classNames?.brand, children: [
1496
+ usesInlineMobileNavigation ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1101
1497
  InlineMobileNavigation,
1102
1498
  {
1103
1499
  mobileNavigation,
@@ -1105,17 +1501,17 @@ function PublicShell({
1105
1501
  mode: mobileNavigationMode
1106
1502
  }
1107
1503
  ) : null,
1108
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Box, { children: brand })
1504
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Box, { children: brand })
1109
1505
  ] }),
1110
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Group, { visibleFrom: "sm", gap: headerVariant === "compact" ? "md" : "lg", className: classNames?.navigation, children: resolvedNavigation }),
1111
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Group, { gap: "sm", className: classNames?.actions, children: actions })
1506
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Group, { visibleFrom: "sm", gap: headerVariant === "compact" ? "md" : "lg", className: classNames?.navigation, children: resolvedNavigation }),
1507
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Group, { gap: "sm", className: classNames?.actions, children: actions })
1112
1508
  ]
1113
1509
  }
1114
1510
  ) }) }),
1115
- usesSheetMobileNavigation ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.AppShell.Footer, { withBorder: true, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Container, { size: containerSize, h: "100%", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Group, { h: "100%", justify: "space-around", wrap: "nowrap", children: mobileNavigation }) }) }) : null,
1116
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.AppShell.Main, { children: [
1117
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Container, { size: containerSize, py: mainPadding, className: classNames?.content, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Stack, { gap: "xl", children }) }),
1118
- footer ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Box, { component: typeof footer === "string" ? "footer" : "div", py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Container, { size: containerSize, children: typeof footer === "string" ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Text, { size: "sm", c: "dimmed", children: footer }) : footer }) }) : null
1511
+ usesSheetMobileNavigation ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.AppShell.Footer, { withBorder: true, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Container, { size: containerSize, h: "100%", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Group, { h: "100%", justify: "space-around", wrap: "nowrap", children: mobileNavigation }) }) }) : null,
1512
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core22.AppShell.Main, { children: [
1513
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Container, { size: containerSize, py: mainPadding, className: classNames?.content, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Stack, { gap: "xl", children }) }),
1514
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Box, { component: typeof footer === "string" ? "footer" : "div", py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Container, { size: containerSize, children: typeof footer === "string" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core22.Text, { size: "sm", c: "dimmed", children: footer }) : footer }) }) : null
1119
1515
  ] })
1120
1516
  ]
1121
1517
  }
@@ -1123,18 +1519,18 @@ function PublicShell({
1123
1519
  }
1124
1520
 
1125
1521
  // src/PublicSiteFooter.tsx
1126
- var import_core17 = require("@mantine/core");
1127
- var import_jsx_runtime18 = require("react/jsx-runtime");
1522
+ var import_core23 = require("@mantine/core");
1523
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1128
1524
  function PublicSiteFooter({ children, meta }) {
1129
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Stack, { component: "footer", gap: "xs", children: [
1130
- children ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Text, { size: "sm", children }) : null,
1131
- meta ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Group, { gap: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Text, { size: "xs", c: "dimmed", children: meta }) }) : null
1525
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_core23.Stack, { component: "footer", gap: "xs", children: [
1526
+ children ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core23.Text, { size: "sm", children }) : null,
1527
+ meta ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core23.Group, { gap: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core23.Text, { size: "xs", c: "dimmed", children: meta }) }) : null
1132
1528
  ] });
1133
1529
  }
1134
1530
 
1135
1531
  // src/PublicBrandFooter.tsx
1136
- var import_core18 = require("@mantine/core");
1137
- var import_jsx_runtime19 = require("react/jsx-runtime");
1532
+ var import_core24 = require("@mantine/core");
1533
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1138
1534
  function PublicBrandFooter({
1139
1535
  media,
1140
1536
  brandTitle,
@@ -1149,8 +1545,8 @@ function PublicBrandFooter({
1149
1545
  const mediaSpan = layoutVariant === "immersive-media" ? 5 : 4;
1150
1546
  const primarySpan = media ? layoutVariant === "balanced-quote" ? 4 : 4 : secondary ? 6 : 12;
1151
1547
  const secondarySpan = media ? Math.max(3, 12 - mediaSpan - primarySpan) : Math.max(4, 12 - primarySpan);
1152
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1153
- import_core18.Paper,
1548
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1549
+ import_core24.Paper,
1154
1550
  {
1155
1551
  component: "footer",
1156
1552
  withBorder: true,
@@ -1158,19 +1554,19 @@ function PublicBrandFooter({
1158
1554
  p: compact ? "lg" : "xl",
1159
1555
  className: classNames?.root,
1160
1556
  "data-layout-variant": layoutVariant,
1161
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: "lg", children: [
1162
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Grid, { gutter: compact ? "lg" : "xl", align: "flex-start", children: [
1163
- media ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Grid.Col, { span: { base: 12, md: mediaSpan }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Box, { className: classNames?.media, children: media }) }) : null,
1164
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Grid.Col, { span: { base: 12, md: primarySpan }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: compact ? "xs" : "sm", className: classNames?.primary, children: [
1165
- brandTitle ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Title, { order: 4, children: brandTitle }) : null,
1166
- description ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Text, { c: "dimmed", children: description }) : null,
1167
- actions ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Box, { children: actions }) : null
1557
+ children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_core24.Stack, { gap: "lg", children: [
1558
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_core24.Grid, { gutter: compact ? "lg" : "xl", align: "flex-start", children: [
1559
+ media ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core24.Grid.Col, { span: { base: 12, md: mediaSpan }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core24.Box, { className: classNames?.media, children: media }) }) : null,
1560
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core24.Grid.Col, { span: { base: 12, md: primarySpan }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_core24.Stack, { gap: compact ? "xs" : "sm", className: classNames?.primary, children: [
1561
+ brandTitle ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core24.Title, { order: 4, children: brandTitle }) : null,
1562
+ description ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core24.Text, { c: "dimmed", children: description }) : null,
1563
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core24.Box, { children: actions }) : null
1168
1564
  ] }) }),
1169
- secondary ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Grid.Col, { span: { base: 12, md: secondarySpan }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Stack, { gap: compact ? "xs" : "sm", className: classNames?.secondary, children: secondary }) }) : null
1565
+ secondary ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core24.Grid.Col, { span: { base: 12, md: secondarySpan }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core24.Stack, { gap: compact ? "xs" : "sm", className: classNames?.secondary, children: secondary }) }) : null
1170
1566
  ] }),
1171
- legal ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
1172
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Divider, {}),
1173
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Group, { justify: "space-between", gap: "sm", wrap: "wrap", className: classNames?.legal, children: typeof legal === "string" ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Text, { size: "sm", c: "dimmed", children: legal }) : legal })
1567
+ legal ? /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_jsx_runtime26.Fragment, { children: [
1568
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core24.Divider, {}),
1569
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core24.Group, { justify: "space-between", gap: "sm", wrap: "wrap", className: classNames?.legal, children: typeof legal === "string" ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core24.Text, { size: "sm", c: "dimmed", children: legal }) : legal })
1174
1570
  ] }) : null
1175
1571
  ] })
1176
1572
  }
@@ -1178,60 +1574,136 @@ function PublicBrandFooter({
1178
1574
  }
1179
1575
 
1180
1576
  // src/AuthShell.tsx
1181
- var import_core19 = require("@mantine/core");
1182
- var import_jsx_runtime20 = require("react/jsx-runtime");
1183
- function AuthShell({ title, description, brand, headerActions, footer, helper, children }) {
1184
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Box, { py: { base: "xl", md: "4rem" }, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Container, { size: "xs", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: "xl", children: [
1185
- brand || headerActions ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { justify: brand && headerActions ? "space-between" : "center", align: "center", children: [
1186
- brand ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Box, { children: brand }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Box, {}),
1187
- headerActions ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Group, { gap: "sm", children: headerActions }) : null
1577
+ var import_core25 = require("@mantine/core");
1578
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1579
+ function AuthShell({
1580
+ title,
1581
+ description,
1582
+ brand,
1583
+ headerActions,
1584
+ footer,
1585
+ helper,
1586
+ socialAuth,
1587
+ dividerLabel = "Or continue with your account",
1588
+ children
1589
+ }) {
1590
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core25.Box, { py: { base: "xl", md: "4rem" }, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core25.Container, { size: "xs", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core25.Stack, { gap: "xl", children: [
1591
+ brand || headerActions ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core25.Group, { justify: brand && headerActions ? "space-between" : "center", align: "center", children: [
1592
+ brand ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core25.Box, { children: brand }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core25.Box, {}),
1593
+ headerActions ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core25.Group, { gap: "sm", children: headerActions }) : null
1188
1594
  ] }) : null,
1189
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Card, { withBorder: true, radius: "lg", padding: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: "lg", children: [
1190
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: "xs", ta: "center", children: [
1191
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Title, { order: 2, children: title }),
1192
- description ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Text, { c: "dimmed", size: "sm", children: description }) : null
1595
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core25.Card, { withBorder: true, radius: "lg", padding: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core25.Stack, { gap: "lg", children: [
1596
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core25.Stack, { gap: "xs", ta: "center", children: [
1597
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core25.Title, { order: 2, children: title }),
1598
+ description ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core25.Text, { c: "dimmed", size: "sm", children: description }) : null
1193
1599
  ] }),
1600
+ socialAuth ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core25.Box, { children: socialAuth }) : null,
1601
+ socialAuth ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core25.Divider, { label: dividerLabel, labelPosition: "center" }) : null,
1194
1602
  children,
1195
- helper ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Text, { size: "sm", c: "dimmed", ta: "center", children: helper }) : null
1603
+ helper ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core25.Text, { size: "sm", c: "dimmed", ta: "center", children: helper }) : null
1196
1604
  ] }) }),
1197
- footer ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Text, { size: "sm", c: "dimmed", ta: "center", children: footer }) : null
1605
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core25.Text, { size: "sm", c: "dimmed", ta: "center", children: footer }) : null
1198
1606
  ] }) }) });
1199
1607
  }
1200
1608
 
1609
+ // src/SocialAuthButtons.tsx
1610
+ var import_core26 = require("@mantine/core");
1611
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1612
+ var providerConfig = {
1613
+ google: { label: "Google", mark: "G", color: "red" },
1614
+ apple: { label: "Apple", mark: "A", color: "dark" },
1615
+ github: { label: "GitHub", mark: "GH", color: "gray" },
1616
+ facebook: { label: "Facebook", mark: "F", color: "blue" },
1617
+ microsoft: { label: "Microsoft", mark: "M", color: "cyan" },
1618
+ linkedin: { label: "LinkedIn", mark: "in", color: "blue" },
1619
+ discord: { label: "Discord", mark: "D", color: "indigo" },
1620
+ x: { label: "X", mark: "X", color: "dark" },
1621
+ email: { label: "Email", mark: "@", color: "gray" }
1622
+ };
1623
+ function ProviderMark({ id }) {
1624
+ const config = providerConfig[id] ?? { label: id, mark: id.slice(0, 2).toUpperCase(), color: "gray" };
1625
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core26.ThemeIcon, { variant: "light", color: config.color, radius: "xl", size: "md", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core26.Text, { size: "xs", fw: 700, children: config.mark }) });
1626
+ }
1627
+ function SocialAuthButton({ provider, compact = false }) {
1628
+ const config = providerConfig[provider.id] ?? { label: provider.id, mark: provider.id.slice(0, 2).toUpperCase(), color: "gray" };
1629
+ const label = provider.label ?? `Continue with ${config.label}`;
1630
+ const buttonProps = provider.href ? { component: "a", href: provider.href } : { onClick: provider.onClick };
1631
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1632
+ import_core26.Button,
1633
+ {
1634
+ variant: "default",
1635
+ justify: "space-between",
1636
+ fullWidth: true,
1637
+ size: compact ? "sm" : "md",
1638
+ leftSection: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(ProviderMark, { id: provider.id }),
1639
+ disabled: provider.disabled,
1640
+ loading: provider.loading,
1641
+ ...buttonProps,
1642
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core26.Stack, { gap: 0, align: "flex-start", children: [
1643
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core26.Text, { inherit: true, children: label }),
1644
+ provider.description ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core26.Text, { size: "xs", c: "dimmed", lh: 1.2, children: provider.description }) : null
1645
+ ] })
1646
+ }
1647
+ );
1648
+ }
1649
+ function SocialAuthButtons({
1650
+ providers,
1651
+ title = "Continue with a trusted provider",
1652
+ description,
1653
+ layout = "stack",
1654
+ compact = false
1655
+ }) {
1656
+ if (!providers.length) {
1657
+ return null;
1658
+ }
1659
+ const content = providers.map((provider) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(SocialAuthButton, { provider, compact }, provider.id));
1660
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core26.Stack, { gap: "md", children: [
1661
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core26.Stack, { gap: 4, ta: "center", children: [
1662
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core26.Group, { justify: "center", gap: "xs", children: [
1663
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(GdsIcons.Login, { size: "1rem" }),
1664
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core26.Text, { fw: 600, children: title })
1665
+ ] }),
1666
+ description ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core26.Text, { size: "sm", c: "dimmed", children: description }) : null
1667
+ ] }),
1668
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core26.Divider, {}),
1669
+ layout === "grid" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core26.SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: content }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core26.Stack, { gap: "sm", children: content })
1670
+ ] });
1671
+ }
1672
+
1201
1673
  // src/ArticleShell.tsx
1202
- var import_core20 = require("@mantine/core");
1203
- var import_jsx_runtime21 = require("react/jsx-runtime");
1674
+ var import_core27 = require("@mantine/core");
1675
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1204
1676
  function ArticleShell({ eyebrow, title, lead, meta, sideRail, children }) {
1205
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Container, { size: "lg", py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Group, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
1206
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: "lg", maw: 760, flex: 1, children: [
1207
- /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: "sm", children: [
1208
- eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Text, { size: "sm", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
1209
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Title, { order: 1, children: title }),
1210
- lead ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Text, { size: "lg", c: "dimmed", children: lead }) : null,
1211
- meta ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Group, { gap: "md", children: meta }) : null
1677
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core27.Container, { size: "lg", py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core27.Group, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
1678
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core27.Stack, { gap: "lg", maw: 760, flex: 1, children: [
1679
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core27.Stack, { gap: "sm", children: [
1680
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core27.Text, { size: "sm", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
1681
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core27.Title, { order: 1, children: title }),
1682
+ lead ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core27.Text, { size: "lg", c: "dimmed", children: lead }) : null,
1683
+ meta ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core27.Group, { gap: "md", children: meta }) : null
1212
1684
  ] }),
1213
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Stack, { gap: "md", children })
1685
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core27.Stack, { gap: "md", children })
1214
1686
  ] }),
1215
- sideRail ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Stack, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1687
+ sideRail ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core27.Stack, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1216
1688
  ] }) });
1217
1689
  }
1218
1690
 
1219
1691
  // src/CtaButtonGroup.tsx
1220
- var import_core21 = require("@mantine/core");
1221
- var import_jsx_runtime22 = require("react/jsx-runtime");
1692
+ var import_core28 = require("@mantine/core");
1693
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1222
1694
  function CtaButtonGroup({ primary, secondary, tertiary }) {
1223
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "sm", children: [
1224
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Group, { gap: "sm", align: "stretch", children: [
1225
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { children: primary }),
1226
- secondary ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { children: secondary }) : null
1695
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core28.Stack, { gap: "sm", children: [
1696
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core28.Group, { gap: "sm", align: "stretch", children: [
1697
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { children: primary }),
1698
+ secondary ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { children: secondary }) : null
1227
1699
  ] }),
1228
- tertiary ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { children: tertiary }) : null
1700
+ tertiary ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { children: tertiary }) : null
1229
1701
  ] });
1230
1702
  }
1231
1703
 
1232
1704
  // src/DocsPageShell.tsx
1233
- var import_core22 = require("@mantine/core");
1234
- var import_jsx_runtime23 = require("react/jsx-runtime");
1705
+ var import_core29 = require("@mantine/core");
1706
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1235
1707
  function DocsPageShell({
1236
1708
  breadcrumbs = [],
1237
1709
  title,
@@ -1242,27 +1714,27 @@ function DocsPageShell({
1242
1714
  footerNext,
1243
1715
  children
1244
1716
  }) {
1245
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Container, { size: "lg", py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Group, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
1246
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Stack, { component: "article", gap: "lg", maw: 760, flex: 1, children: [
1247
- breadcrumbs.length ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Breadcrumbs, { children: breadcrumbs.map(
1248
- (crumb) => crumb.href ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Anchor, { href: crumb.href, children: crumb.label }, `${crumb.label}-${crumb.href}`) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Text, { children: crumb.label }, crumb.label)
1717
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Container, { size: "lg", py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Group, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
1718
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Stack, { component: "article", gap: "lg", maw: 760, flex: 1, children: [
1719
+ breadcrumbs.length ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Breadcrumbs, { children: breadcrumbs.map(
1720
+ (crumb) => crumb.href ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Anchor, { href: crumb.href, children: crumb.label }, `${crumb.label}-${crumb.href}`) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Text, { children: crumb.label }, crumb.label)
1249
1721
  ) }) : null,
1250
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Stack, { gap: "sm", children: [
1251
- eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Text, { size: "sm", fw: 700, c: "dimmed", children: eyebrow }) : null,
1252
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Title, { order: 1, children: title }),
1253
- lead ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Text, { size: "lg", c: "dimmed", children: lead }) : null,
1254
- meta ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Group, { gap: "md", children: meta }) : null
1722
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core29.Stack, { gap: "sm", children: [
1723
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Text, { size: "sm", fw: 700, c: "dimmed", children: eyebrow }) : null,
1724
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Title, { order: 1, children: title }),
1725
+ lead ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Text, { size: "lg", c: "dimmed", children: lead }) : null,
1726
+ meta ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Group, { gap: "md", children: meta }) : null
1255
1727
  ] }),
1256
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Stack, { gap: "md", children }),
1257
- footerNext ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Anchor, { href: footerNext.href, fw: 600, children: footerNext.label }) : null
1728
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Stack, { gap: "md", children }),
1729
+ footerNext ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Anchor, { href: footerNext.href, fw: 600, children: footerNext.label }) : null
1258
1730
  ] }),
1259
- sideRail ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Stack, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1731
+ sideRail ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core29.Stack, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1260
1732
  ] }) });
1261
1733
  }
1262
1734
 
1263
1735
  // src/EditorialHero.tsx
1264
- var import_core23 = require("@mantine/core");
1265
- var import_jsx_runtime24 = require("react/jsx-runtime");
1736
+ var import_core30 = require("@mantine/core");
1737
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1266
1738
  function resolveActionVariant(action, index, seenPrimary) {
1267
1739
  const requested = action.variant ?? (index === 0 ? "primary" : "secondary");
1268
1740
  if (requested === "primary" && !seenPrimary) {
@@ -1274,8 +1746,8 @@ function resolveActionVariant(action, index, seenPrimary) {
1274
1746
  return { variant: "default", seenPrimary };
1275
1747
  }
1276
1748
  function HeroAction({ action, variant }) {
1277
- const content = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1278
- import_core23.Anchor,
1749
+ const content = /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1750
+ import_core30.Anchor,
1279
1751
  {
1280
1752
  href: action.href,
1281
1753
  onClick: action.onClick,
@@ -1299,8 +1771,8 @@ function HeroAction({ action, variant }) {
1299
1771
  }
1300
1772
  );
1301
1773
  if (!action.href) {
1302
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1303
- import_core23.Box,
1774
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1775
+ import_core30.Box,
1304
1776
  {
1305
1777
  component: "button",
1306
1778
  type: "button",
@@ -1327,30 +1799,30 @@ function HeroAction({ action, variant }) {
1327
1799
  return content;
1328
1800
  }
1329
1801
  function LoadingHero({ compact }) {
1330
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Paper, { withBorder: true, radius: "xl", p: compact ? "lg" : "xl", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Grid, { gutter: compact ? "lg" : "xl", align: "center", children: [
1331
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Grid.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Stack, { gap: "md", children: [
1332
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Skeleton, { height: 16, width: 96, radius: "xl" }),
1333
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Skeleton, { height: 48, width: "90%", radius: "md" }),
1334
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Skeleton, { height: 18, width: "100%", radius: "md" }),
1335
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Skeleton, { height: 18, width: "82%", radius: "md" }),
1336
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Group, { children: [
1337
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Skeleton, { height: 40, width: 140, radius: "md" }),
1338
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Skeleton, { height: 40, width: 140, radius: "md" })
1802
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Paper, { withBorder: true, radius: "xl", p: compact ? "lg" : "xl", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Grid, { gutter: compact ? "lg" : "xl", align: "center", children: [
1803
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Grid.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Stack, { gap: "md", children: [
1804
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Skeleton, { height: 16, width: 96, radius: "xl" }),
1805
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Skeleton, { height: 48, width: "90%", radius: "md" }),
1806
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Skeleton, { height: 18, width: "100%", radius: "md" }),
1807
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Skeleton, { height: 18, width: "82%", radius: "md" }),
1808
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Group, { children: [
1809
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Skeleton, { height: 40, width: 140, radius: "md" }),
1810
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Skeleton, { height: 40, width: 140, radius: "md" })
1339
1811
  ] })
1340
1812
  ] }) }),
1341
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Grid.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.AspectRatio, { ratio: 16 / 11, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Skeleton, { radius: "lg" }) }) })
1813
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Grid.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.AspectRatio, { ratio: 16 / 11, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Skeleton, { radius: "lg" }) }) })
1342
1814
  ] }) });
1343
1815
  }
1344
1816
  function MediaFallback() {
1345
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.AspectRatio, { ratio: 16 / 11, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1346
- import_core23.ThemeIcon,
1817
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.AspectRatio, { ratio: 16 / 11, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1818
+ import_core30.ThemeIcon,
1347
1819
  {
1348
1820
  size: "100%",
1349
1821
  radius: "lg",
1350
1822
  color: "gray",
1351
1823
  variant: "light",
1352
1824
  "aria-label": "Hero media is unavailable",
1353
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(GdsIcons.Gallery, { size: "2.5rem" })
1825
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(GdsIcons.Gallery, { size: "2.5rem" })
1354
1826
  }
1355
1827
  ) });
1356
1828
  }
@@ -1370,8 +1842,8 @@ function MediaFrame({
1370
1842
  } else if (mediaFade === "soft-start") {
1371
1843
  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%)";
1372
1844
  }
1373
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1374
- import_core23.Box,
1845
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1846
+ import_core30.Box,
1375
1847
  {
1376
1848
  component: "figure",
1377
1849
  m: 0,
@@ -1384,9 +1856,9 @@ function MediaFrame({
1384
1856
  },
1385
1857
  "aria-label": mediaAlt,
1386
1858
  children: [
1387
- media ?? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(MediaFallback, {}),
1388
- media && overlayBackground ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1389
- import_core23.Box,
1859
+ media ?? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(MediaFallback, {}),
1860
+ media && overlayBackground ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1861
+ import_core30.Box,
1390
1862
  {
1391
1863
  "aria-hidden": true,
1392
1864
  style: {
@@ -1419,7 +1891,7 @@ function EditorialHero({
1419
1891
  classNames
1420
1892
  }) {
1421
1893
  if (loading) {
1422
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(LoadingHero, { compact });
1894
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(LoadingHero, { compact });
1423
1895
  }
1424
1896
  const stackAlign = align === "center" ? "center" : "flex-start";
1425
1897
  const textAlign = align === "center" ? "center" : "left";
@@ -1427,15 +1899,15 @@ function EditorialHero({
1427
1899
  const renderedActions = actions.slice(0, 3).map((action, index) => {
1428
1900
  const resolved = resolveActionVariant(action, index, seenPrimary);
1429
1901
  seenPrimary = resolved.seenPrimary;
1430
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(HeroAction, { action, variant: resolved.variant }, `${action.label}-${index}`);
1902
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(HeroAction, { action, variant: resolved.variant }, `${action.label}-${index}`);
1431
1903
  });
1432
- const textSlot = /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Stack, { gap: compact ? "md" : "lg", justify: "center", h: "100%", className: classNames?.content, children: [
1433
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Stack, { gap: "sm", align: stackAlign, children: [
1434
- eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Text, { size: "sm", fw: 700, c: "dimmed", ta: textAlign, children: eyebrow }) : null,
1435
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Title, { order: 1, maw: 760, ta: textAlign, children: title }),
1436
- description ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Text, { size: compact ? "md" : "lg", c: "dimmed", maw: 720, ta: textAlign, children: description }) : null
1904
+ const textSlot = /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Stack, { gap: compact ? "md" : "lg", justify: "center", h: "100%", className: classNames?.content, children: [
1905
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Stack, { gap: "sm", align: stackAlign, children: [
1906
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Text, { size: "sm", fw: 700, c: "dimmed", ta: textAlign, children: eyebrow }) : null,
1907
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Title, { order: 1, maw: 760, ta: textAlign, children: title }),
1908
+ description ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Text, { size: compact ? "md" : "lg", c: "dimmed", maw: 720, ta: textAlign, children: description }) : null
1437
1909
  ] }),
1438
- renderedActions.length ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Box, { className: classNames?.actions, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1910
+ renderedActions.length ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Box, { className: classNames?.actions, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1439
1911
  CtaButtonGroup,
1440
1912
  {
1441
1913
  primary: renderedActions[0],
@@ -1443,8 +1915,8 @@ function EditorialHero({
1443
1915
  tertiary: renderedActions[2]
1444
1916
  }
1445
1917
  ) }) : null,
1446
- meta.length ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Group, { gap: "sm", wrap: "wrap", "aria-label": "Supporting details", className: classNames?.meta, children: meta.map((item) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1447
- import_core23.Group,
1918
+ meta.length ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Group, { gap: "sm", wrap: "wrap", "aria-label": "Supporting details", className: classNames?.meta, children: meta.map((item) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1919
+ import_core30.Group,
1448
1920
  {
1449
1921
  gap: 6,
1450
1922
  px: "sm",
@@ -1455,17 +1927,17 @@ function EditorialHero({
1455
1927
  },
1456
1928
  children: [
1457
1929
  item.icon,
1458
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Text, { size: "sm", c: "dimmed", children: item.label })
1930
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Text, { size: "sm", c: "dimmed", children: item.label })
1459
1931
  ]
1460
1932
  },
1461
1933
  item.id
1462
1934
  )) }) : null
1463
1935
  ] });
1464
- const mediaSlot = error ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(AccentPanel, { tone: "red", variant: "soft-outline", title: "Media unavailable", children: error }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(MediaFrame, { media, mediaAlt, mediaFade, className: classNames?.media });
1465
- const textCol = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Grid.Col, { span: { base: 12, md: 6 }, order: { base: 1, md: mediaPosition === "left" ? 2 : 1 }, children: textSlot });
1466
- const mediaCol = /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Grid.Col, { span: { base: 12, md: 6 }, order: { base: 2, md: mediaPosition === "left" ? 1 : 2 }, children: mediaSlot });
1467
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1468
- import_core23.Paper,
1936
+ const mediaSlot = error ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(AccentPanel, { tone: "red", variant: "soft-outline", title: "Media unavailable", children: error }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(MediaFrame, { media, mediaAlt, mediaFade, className: classNames?.media });
1937
+ const textCol = /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Grid.Col, { span: { base: 12, md: 6 }, order: { base: 1, md: mediaPosition === "left" ? 2 : 1 }, children: textSlot });
1938
+ const mediaCol = /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core30.Grid.Col, { span: { base: 12, md: 6 }, order: { base: 2, md: mediaPosition === "left" ? 1 : 2 }, children: mediaSlot });
1939
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1940
+ import_core30.Paper,
1469
1941
  {
1470
1942
  component: "section",
1471
1943
  withBorder: true,
@@ -1473,7 +1945,7 @@ function EditorialHero({
1473
1945
  p: compact ? "lg" : "xl",
1474
1946
  className: classNames?.root,
1475
1947
  style: surfaceVariant === "flat-public" ? { boxShadow: "none" } : void 0,
1476
- children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Grid, { gutter: compact ? "lg" : "xl", align: "center", children: [
1948
+ children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core30.Grid, { gutter: compact ? "lg" : "xl", align: "center", children: [
1477
1949
  textCol,
1478
1950
  mediaCol
1479
1951
  ] })
@@ -1482,19 +1954,19 @@ function EditorialHero({
1482
1954
  }
1483
1955
 
1484
1956
  // src/FeatureBand.tsx
1485
- var import_core24 = require("@mantine/core");
1486
- var import_jsx_runtime25 = require("react/jsx-runtime");
1957
+ var import_core31 = require("@mantine/core");
1958
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1487
1959
  function FeatureBandSkeleton({
1488
1960
  columns = 3,
1489
1961
  bordered = true,
1490
1962
  variant = "default"
1491
1963
  }) {
1492
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Paper, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_core24.Stack, { gap: "md", children: [
1493
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Skeleton, { height: variant === "process" ? 28 : 42, width: variant === "process" ? 72 : 42, radius: "xl" }),
1494
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_core24.Stack, { gap: "xs", children: [
1495
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Skeleton, { height: 20, width: "75%", radius: "md" }),
1496
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Skeleton, { height: 14, width: "100%", radius: "md" }),
1497
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Skeleton, { height: 14, width: "82%", radius: "md" })
1964
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Paper, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core31.Stack, { gap: "md", children: [
1965
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Skeleton, { height: variant === "process" ? 28 : 42, width: variant === "process" ? 72 : 42, radius: "xl" }),
1966
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core31.Stack, { gap: "xs", children: [
1967
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Skeleton, { height: 20, width: "75%", radius: "md" }),
1968
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Skeleton, { height: 14, width: "100%", radius: "md" }),
1969
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Skeleton, { height: 14, width: "82%", radius: "md" })
1498
1970
  ] })
1499
1971
  ] }) }, index)) });
1500
1972
  }
@@ -1507,10 +1979,10 @@ function FeatureBand({
1507
1979
  variant = "default"
1508
1980
  }) {
1509
1981
  if (loading) {
1510
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(FeatureBandSkeleton, { columns, bordered, variant });
1982
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(FeatureBandSkeleton, { columns, bordered, variant });
1511
1983
  }
1512
1984
  if (!items.length) {
1513
- return emptyState ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_jsx_runtime25.Fragment, { children: emptyState }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1985
+ return emptyState ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_jsx_runtime33.Fragment, { children: emptyState }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1514
1986
  EmptyState,
1515
1987
  {
1516
1988
  title: "No supporting details available",
@@ -1518,9 +1990,9 @@ function FeatureBand({
1518
1990
  }
1519
1991
  );
1520
1992
  }
1521
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Box, { component: "section", "aria-label": "Supporting features", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Paper, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_core24.Stack, { gap: "md", children: [
1522
- variant === "process" ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1523
- import_core24.Text,
1993
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Box, { component: "section", "aria-label": "Supporting features", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Paper, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core31.Stack, { gap: "md", children: [
1994
+ variant === "process" ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1995
+ import_core31.Text,
1524
1996
  {
1525
1997
  fw: 800,
1526
1998
  size: "sm",
@@ -1532,32 +2004,335 @@ function FeatureBand({
1532
2004
  },
1533
2005
  children: item.stepLabel ?? `Step ${index + 1}`
1534
2006
  }
1535
- ) }) : item.media ? item.media : item.icon ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.ThemeIcon, { size: "xl", radius: "xl", variant: "light", color: "violet", children: item.icon }) }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.ThemeIcon, { size: "xl", radius: "xl", variant: "light", color: "gray", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(GdsIcons.Info, { size: "1.25rem" }) }) }),
1536
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_core24.Stack, { gap: "xs", children: [
1537
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Title, { order: 4, children: item.title }),
1538
- item.description ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Text, { c: "dimmed", children: item.description }) : null,
1539
- item.meta ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Text, { size: "sm", c: "dimmed", children: item.meta }) : null
2007
+ ) }) : item.media ? item.media : item.icon ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.ThemeIcon, { size: "xl", radius: "xl", variant: "light", color: "violet", children: item.icon }) }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.ThemeIcon, { size: "xl", radius: "xl", variant: "light", color: "gray", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(GdsIcons.Info, { size: "1.25rem" }) }) }),
2008
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core31.Stack, { gap: "xs", children: [
2009
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Title, { order: 4, children: item.title }),
2010
+ item.description ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Text, { c: "dimmed", children: item.description }) : null,
2011
+ item.meta ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core31.Text, { size: "sm", c: "dimmed", children: item.meta }) : null
1540
2012
  ] })
1541
2013
  ] }) }, item.id)) }) });
1542
2014
  }
1543
2015
 
2016
+ // src/MapPanel.tsx
2017
+ var import_core33 = require("@mantine/core");
2018
+
2019
+ // src/ActionBar.tsx
2020
+ var import_core32 = require("@mantine/core");
2021
+ var import_jsx_runtime34 = require("react/jsx-runtime");
2022
+ function renderSemanticAction(action, slot, vocabularyPacks) {
2023
+ const { action: actionId, variant, ariaLabel, ...props } = action;
2024
+ const fallbackVariant = slot === "primary" ? "filled" : slot === "secondary" ? "default" : "subtle";
2025
+ const config = resolveSemanticActionConfig(actionId, vocabularyPacks);
2026
+ const Icon = config.icon;
2027
+ const label = getSemanticActionLabel(actionId, void 0, vocabularyPacks);
2028
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2029
+ import_core32.Button,
2030
+ {
2031
+ leftSection: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon, { size: "1rem", stroke: 1.75 }),
2032
+ "aria-label": ariaLabel ?? label,
2033
+ variant: variant ?? fallbackVariant,
2034
+ ...props,
2035
+ children: label
2036
+ },
2037
+ `${slot}-${actionId}`
2038
+ );
2039
+ }
2040
+ function ActionBar({
2041
+ primary,
2042
+ secondary = [],
2043
+ tertiary = [],
2044
+ iconOnly = [],
2045
+ gap = "sm",
2046
+ vocabularyPacks = []
2047
+ }) {
2048
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core32.Stack, { gap, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core32.Group, { justify: "space-between", align: "center", gap, wrap: "wrap", children: [
2049
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core32.Group, { gap, wrap: "wrap", children: [
2050
+ secondary.map((action) => renderSemanticAction(action, "secondary", vocabularyPacks)),
2051
+ tertiary.map((action) => renderSemanticAction(action, "tertiary", vocabularyPacks))
2052
+ ] }),
2053
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core32.Group, { gap, wrap: "wrap", justify: "flex-end", style: { marginInlineStart: "auto" }, children: [
2054
+ iconOnly.map(({ action, ariaLabel, ...props }) => {
2055
+ const config = resolveSemanticActionConfig(action, vocabularyPacks);
2056
+ const Icon = config.icon;
2057
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2058
+ import_core32.ActionIcon,
2059
+ {
2060
+ variant: "subtle",
2061
+ size: "lg",
2062
+ "aria-label": ariaLabel ?? getSemanticActionLabel(action, void 0, vocabularyPacks),
2063
+ ...props,
2064
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon, { size: "1rem", stroke: 1.75 })
2065
+ },
2066
+ `icon-${action}`
2067
+ );
2068
+ }),
2069
+ primary ? renderSemanticAction(primary, "primary", vocabularyPacks) : null
2070
+ ] })
2071
+ ] }) });
2072
+ }
2073
+
2074
+ // src/MapPanel.tsx
2075
+ var import_jsx_runtime35 = require("react/jsx-runtime");
2076
+ function MapPanel({
2077
+ title,
2078
+ description,
2079
+ actions,
2080
+ loading = false,
2081
+ empty,
2082
+ error,
2083
+ embedTitle,
2084
+ iframeSrc,
2085
+ iframeSandbox = "allow-scripts allow-same-origin allow-popups",
2086
+ renderMap,
2087
+ minHeight = 320
2088
+ }) {
2089
+ let body;
2090
+ if (loading) {
2091
+ body = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2092
+ StateBlock,
2093
+ {
2094
+ variant: "loading",
2095
+ title: "Loading map",
2096
+ description: "The shared map panel is still preparing the embedded surface.",
2097
+ compact: true
2098
+ }
2099
+ );
2100
+ } else if (error) {
2101
+ body = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(StateBlock, { variant: "error", title: "Map unavailable", description: error, compact: true });
2102
+ } else if (!iframeSrc && !renderMap) {
2103
+ body = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2104
+ StateBlock,
2105
+ {
2106
+ variant: "empty",
2107
+ title: "No map available",
2108
+ description: empty ?? "Add coordinates or a sanctioned embed source to render this panel.",
2109
+ compact: true
2110
+ }
2111
+ );
2112
+ } else if (renderMap) {
2113
+ body = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core33.Box, { style: { minHeight }, children: renderMap() });
2114
+ } else {
2115
+ body = /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core33.AspectRatio, { ratio: 16 / 9, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2116
+ "iframe",
2117
+ {
2118
+ src: iframeSrc,
2119
+ title: embedTitle ?? "Embedded map",
2120
+ sandbox: iframeSandbox,
2121
+ loading: "lazy",
2122
+ referrerPolicy: "no-referrer-when-downgrade",
2123
+ style: { width: "100%", height: "100%", border: 0, borderRadius: 12 }
2124
+ }
2125
+ ) });
2126
+ }
2127
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core33.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core33.Stack, { gap: "md", children: [
2128
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core33.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2129
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core33.Stack, { gap: 4, children: [
2130
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core33.Title, { order: 3, children: title }),
2131
+ description ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_core33.Text, { size: "sm", c: "dimmed", children: description }) : null
2132
+ ] }),
2133
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(ActionBar, { ...actions }) : null
2134
+ ] }),
2135
+ body
2136
+ ] }) });
2137
+ }
2138
+
2139
+ // src/PublicFlowShell.tsx
2140
+ var import_core34 = require("@mantine/core");
2141
+ var import_jsx_runtime36 = require("react/jsx-runtime");
2142
+ var stageTone = {
2143
+ idle: { label: "Idle", color: "gray" },
2144
+ loading: { label: "Loading", color: "blue" },
2145
+ ready: { label: "Ready", color: "teal" },
2146
+ error: { label: "Error", color: "red" },
2147
+ complete: { label: "Complete", color: "teal" }
2148
+ };
2149
+ function toActionBar(actions = []) {
2150
+ if (!actions.length) {
2151
+ return void 0;
2152
+ }
2153
+ const ordered = [...actions].sort((left, right) => {
2154
+ const rank = { primary: 0, secondary: 1, tertiary: 2 };
2155
+ return rank[left.priority] - rank[right.priority];
2156
+ });
2157
+ const primary = ordered.find((action) => action.priority === "primary");
2158
+ const secondary = ordered.filter((action) => action.priority === "secondary");
2159
+ const tertiary = ordered.filter((action) => action.priority === "tertiary");
2160
+ return {
2161
+ primary: primary ? {
2162
+ action: primary.action,
2163
+ disabled: primary.disabled,
2164
+ loading: primary.loading,
2165
+ onClick: primary.onClick
2166
+ } : void 0,
2167
+ secondary: secondary.map((action) => ({
2168
+ action: action.action,
2169
+ disabled: action.disabled,
2170
+ loading: action.loading,
2171
+ onClick: action.onClick
2172
+ })),
2173
+ tertiary: tertiary.map((action) => ({
2174
+ action: action.action,
2175
+ disabled: action.disabled,
2176
+ loading: action.loading,
2177
+ onClick: action.onClick
2178
+ }))
2179
+ };
2180
+ }
2181
+ function PublicFlowShell({
2182
+ stage,
2183
+ eyebrow,
2184
+ exitAction,
2185
+ hardwareSurface,
2186
+ emptyState,
2187
+ errorState
2188
+ }) {
2189
+ const tone = stageTone[stage.status];
2190
+ const actionBar = toActionBar(stage.actions);
2191
+ let body = stage.body;
2192
+ if (stage.status === "loading") {
2193
+ body = /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2194
+ StateBlock,
2195
+ {
2196
+ variant: "loading",
2197
+ title: "Preparing flow",
2198
+ description: stage.description ?? "The current public flow stage is still loading."
2199
+ }
2200
+ );
2201
+ } else if (stage.status === "error") {
2202
+ body = errorState ?? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2203
+ StateBlock,
2204
+ {
2205
+ variant: "error",
2206
+ title: "Flow unavailable",
2207
+ description: stage.description ?? "This public flow could not continue safely."
2208
+ }
2209
+ );
2210
+ } else if (!stage.body && !hardwareSurface) {
2211
+ body = emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2212
+ EmptyState,
2213
+ {
2214
+ title: "No stage content available",
2215
+ description: "Add the current flow stage body or a bounded hardware surface to render this contract."
2216
+ }
2217
+ );
2218
+ }
2219
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Stack, { gap: "lg", children: [
2220
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2221
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Stack, { gap: 4, children: [
2222
+ eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Text, { size: "xs", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
2223
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core34.Group, { gap: "sm", wrap: "wrap", children: [
2224
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Title, { order: 2, children: stage.title }),
2225
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Badge, { variant: "light", color: tone.color, children: tone.label })
2226
+ ] }),
2227
+ stage.description ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Text, { size: "sm", c: "dimmed", children: stage.description }) : null
2228
+ ] }),
2229
+ exitAction
2230
+ ] }),
2231
+ stage.notice ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core34.Text, { size: "sm", c: "dimmed", children: stage.notice }) : null,
2232
+ body,
2233
+ hardwareSurface,
2234
+ stage.aside,
2235
+ actionBar ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ActionBar, { ...actionBar }) : null
2236
+ ] }) });
2237
+ }
2238
+
2239
+ // src/PlaybackSurface.tsx
2240
+ var import_core35 = require("@mantine/core");
2241
+ var import_jsx_runtime37 = require("react/jsx-runtime");
2242
+ var stateTone = {
2243
+ loading: { label: "Loading", color: "blue" },
2244
+ ready: { label: "Ready", color: "teal" },
2245
+ playing: { label: "Playing", color: "teal" },
2246
+ empty: { label: "Empty", color: "gray" },
2247
+ error: { label: "Error", color: "red" },
2248
+ degraded: { label: "Degraded", color: "orange" }
2249
+ };
2250
+ function PlaybackSurface({
2251
+ title,
2252
+ state,
2253
+ media,
2254
+ statusMessage,
2255
+ controls,
2256
+ emptyState,
2257
+ errorState,
2258
+ overlays,
2259
+ mode = "embedded"
2260
+ }) {
2261
+ const tone = stateTone[state];
2262
+ let content;
2263
+ if (state === "loading") {
2264
+ content = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2265
+ StateBlock,
2266
+ {
2267
+ variant: "loading",
2268
+ title: "Loading playback",
2269
+ description: "The playback surface is still preparing timed or fullscreen media."
2270
+ }
2271
+ );
2272
+ } else if (state === "empty") {
2273
+ content = emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2274
+ EmptyState,
2275
+ {
2276
+ title: "No playback content available",
2277
+ description: "Add media assets or a playlist to render this playback surface."
2278
+ }
2279
+ );
2280
+ } else if (state === "error") {
2281
+ content = errorState ?? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2282
+ StateBlock,
2283
+ {
2284
+ variant: "error",
2285
+ title: "Playback unavailable",
2286
+ description: "The playback surface could not render the current media safely."
2287
+ }
2288
+ );
2289
+ } else {
2290
+ content = /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Stack, { gap: "md", children: [
2291
+ media,
2292
+ overlays
2293
+ ] });
2294
+ }
2295
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Paper, { withBorder: true, radius: "xl", p: "lg", "data-playback-mode": mode, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Stack, { gap: "md", children: [
2296
+ title || statusMessage || controls ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2297
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Stack, { gap: 4, children: [
2298
+ title ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Title, { order: 3, children: title }) : null,
2299
+ statusMessage ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Text, { size: "sm", c: "dimmed", children: statusMessage }) : null
2300
+ ] }),
2301
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core35.Group, { gap: "sm", align: "center", wrap: "wrap", children: [
2302
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core35.Badge, { variant: "light", color: tone.color, children: tone.label }),
2303
+ controls
2304
+ ] })
2305
+ ] }) : null,
2306
+ state === "degraded" ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2307
+ StateBlock,
2308
+ {
2309
+ variant: "info",
2310
+ title: "Playback degraded",
2311
+ description: statusMessage ?? "Playback is continuing with reduced fidelity or recoverable media failures.",
2312
+ compact: true
2313
+ }
2314
+ ) : null,
2315
+ content
2316
+ ] }) });
2317
+ }
2318
+
1544
2319
  // src/MediaField.tsx
1545
- var import_core26 = require("@mantine/core");
2320
+ var import_core37 = require("@mantine/core");
1546
2321
 
1547
2322
  // src/FormField.tsx
1548
- var import_core25 = require("@mantine/core");
1549
- var import_jsx_runtime26 = require("react/jsx-runtime");
2323
+ var import_core36 = require("@mantine/core");
2324
+ var import_jsx_runtime38 = require("react/jsx-runtime");
1550
2325
  function FormField({ label, description, error, children }) {
1551
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Box, { component: "label", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_core25.Stack, { gap: 4, children: [
1552
- typeof label === "string" ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Text, { size: "xs", fw: 600, c: "dimmed", children: label }) : label,
1553
- description ? typeof description === "string" ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Text, { size: "xs", c: "dimmed", children: description }) : description : null,
2326
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Box, { component: "label", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_core36.Stack, { gap: 4, children: [
2327
+ typeof label === "string" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Text, { size: "xs", fw: 600, c: "dimmed", children: label }) : label,
2328
+ description ? typeof description === "string" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Text, { size: "xs", c: "dimmed", children: description }) : description : null,
1554
2329
  children,
1555
- error ? typeof error === "string" ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Text, { size: "xs", c: "red.7", children: error }) : error : null
2330
+ error ? typeof error === "string" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core36.Text, { size: "xs", c: "red.7", children: error }) : error : null
1556
2331
  ] }) });
1557
2332
  }
1558
2333
 
1559
2334
  // src/MediaField.tsx
1560
- var import_jsx_runtime27 = require("react/jsx-runtime");
2335
+ var import_jsx_runtime39 = require("react/jsx-runtime");
1561
2336
  var stateLabels = {
1562
2337
  empty: { label: "Empty", color: "gray" },
1563
2338
  selected: { label: "Selected", color: "blue" },
@@ -1585,32 +2360,32 @@ function MediaField({
1585
2360
  mode = "stacked"
1586
2361
  }) {
1587
2362
  const stateBadge = stateLabels[state];
1588
- const resolvedRemoveAction = removeAction ?? (onRemove ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Button, { type: "button", variant: "light", color: "red", onClick: onRemove, children: "Remove" }) : null);
1589
- const resolvedResetAction = resetAction ?? (onReset ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Button, { type: "button", variant: "default", onClick: onReset, children: "Reset" }) : null);
1590
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2363
+ const resolvedRemoveAction = removeAction ?? (onRemove ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.Button, { type: "button", variant: "light", color: "red", onClick: onRemove, children: "Remove" }) : null);
2364
+ const resolvedResetAction = resetAction ?? (onReset ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.Button, { type: "button", variant: "default", onClick: onReset, children: "Reset" }) : null);
2365
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
1591
2366
  FormField,
1592
2367
  {
1593
2368
  label,
1594
2369
  description,
1595
2370
  error,
1596
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core26.Stack, { gap: "md", children: [
1597
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Group, { justify: "flex-end", align: "center", gap: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core26.Group, { gap: "xs", justify: "flex-end", children: [
1598
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Badge, { variant: "light", color: stateBadge.color, children: stateBadge.label }),
2371
+ children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_core37.Stack, { gap: "md", children: [
2372
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.Group, { justify: "flex-end", align: "center", gap: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_core37.Group, { gap: "xs", justify: "flex-end", children: [
2373
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.Badge, { variant: "light", color: stateBadge.color, children: stateBadge.label }),
1599
2374
  statusAction
1600
2375
  ] }) }),
1601
2376
  preview ? preview : null,
1602
- uploadControl || urlInput ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_jsx_runtime27.Fragment, { children: [
1603
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Divider, {}),
1604
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core26.Stack, { gap: "sm", style: mode === "split" ? { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))" } : void 0, children: [
2377
+ uploadControl || urlInput ? /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [
2378
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.Divider, {}),
2379
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_core37.Stack, { gap: "sm", style: mode === "split" ? { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))" } : void 0, children: [
1605
2380
  uploadControl,
1606
2381
  urlInput
1607
2382
  ] })
1608
2383
  ] }) : null,
1609
- value ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Text, { size: "sm", c: "dimmed", style: { wordBreak: "break-all" }, children: value }) : null,
1610
- helpText ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Text, { size: "sm", c: "dimmed", children: helpText }) : null,
1611
- policyText ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Text, { size: "sm", c: error ? "red.7" : "dimmed", children: policyText }) : null,
2384
+ value ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.Text, { size: "sm", c: "dimmed", style: { wordBreak: "break-all" }, children: value }) : null,
2385
+ helpText ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.Text, { size: "sm", c: "dimmed", children: helpText }) : null,
2386
+ policyText ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core37.Text, { size: "sm", c: error ? "red.7" : "dimmed", children: policyText }) : null,
1612
2387
  typeof error !== "string" && error ? error : null,
1613
- resolvedRemoveAction || resolvedResetAction ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core26.Group, { gap: "sm", children: [
2388
+ resolvedRemoveAction || resolvedResetAction ? /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_core37.Group, { gap: "sm", children: [
1614
2389
  resolvedResetAction,
1615
2390
  retryAction,
1616
2391
  resolvedRemoveAction
@@ -1621,49 +2396,49 @@ function MediaField({
1621
2396
  }
1622
2397
 
1623
2398
  // src/MediaCard.tsx
1624
- var import_core27 = require("@mantine/core");
1625
- var import_jsx_runtime28 = require("react/jsx-runtime");
2399
+ var import_core38 = require("@mantine/core");
2400
+ var import_jsx_runtime40 = require("react/jsx-runtime");
1626
2401
  function MediaCard({ title, image, description, status, overlay, actions = [] }) {
1627
2402
  const EyeIcon = GdsIcons.Eye;
1628
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core27.Card, { withBorder: true, radius: "lg", padding: "md", children: [
1629
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core27.Card.Section, { pos: "relative", children: [
2403
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core38.Card, { withBorder: true, radius: "lg", padding: "md", children: [
2404
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core38.Card.Section, { pos: "relative", children: [
1630
2405
  image,
1631
- overlay ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { style: { position: "absolute", inset: 12, display: "flex", justifyContent: "flex-end", alignItems: "flex-start" }, children: overlay }) : null
2406
+ overlay ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { position: "absolute", inset: 12, display: "flex", justifyContent: "flex-end", alignItems: "flex-start" }, children: overlay }) : null
1632
2407
  ] }),
1633
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core27.Stack, { gap: "sm", mt: "md", children: [
1634
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core27.Group, { justify: "space-between", align: "flex-start", children: [
1635
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core27.Stack, { gap: 4, children: [
1636
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Title, { order: 4, children: title }),
1637
- description ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Text, { size: "sm", c: "dimmed", lineClamp: 2, children: description }) : null
2408
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core38.Stack, { gap: "sm", mt: "md", children: [
2409
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core38.Group, { justify: "space-between", align: "flex-start", children: [
2410
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core38.Stack, { gap: 4, children: [
2411
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Title, { order: 4, children: title }),
2412
+ description ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Text, { size: "sm", c: "dimmed", lineClamp: 2, children: description }) : null
1638
2413
  ] }),
1639
- status ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Badge, { variant: "light", children: status }) : null
2414
+ status ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Badge, { variant: "light", children: status }) : null
1640
2415
  ] }),
1641
- actions.length ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Group, { justify: "flex-end", gap: "xs", children: actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.ActionIcon, { variant: "light", "aria-label": action.label, onClick: action.onClick, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(EyeIcon, { size: "1rem" }) }, action.label)) }) : null
2416
+ actions.length ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.Group, { justify: "flex-end", gap: "xs", children: actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core38.ActionIcon, { variant: "light", "aria-label": action.label, onClick: action.onClick, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(EyeIcon, { size: "1rem" }) }, action.label)) }) : null
1642
2417
  ] })
1643
2418
  ] });
1644
2419
  }
1645
2420
 
1646
2421
  // src/AccessSummary.tsx
1647
- var import_core28 = require("@mantine/core");
1648
- var import_jsx_runtime29 = require("react/jsx-runtime");
2422
+ var import_core39 = require("@mantine/core");
2423
+ var import_jsx_runtime41 = require("react/jsx-runtime");
1649
2424
  function AccessSummary({ title, roles, scope, blocked = false, description }) {
1650
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Stack, { gap: "sm", children: [
1651
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Group, { justify: "space-between", align: "center", children: [
1652
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Title, { order: 4, children: title }),
1653
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Badge, { color: blocked ? "red" : "teal", variant: "light", children: blocked ? "Blocked" : "Allowed" })
2425
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core39.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_core39.Stack, { gap: "sm", children: [
2426
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_core39.Group, { justify: "space-between", align: "center", children: [
2427
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core39.Title, { order: 4, children: title }),
2428
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core39.Badge, { color: blocked ? "red" : "teal", variant: "light", children: blocked ? "Blocked" : "Allowed" })
1654
2429
  ] }),
1655
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Group, { gap: "xs", children: roles.map((role) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Badge, { variant: "outline", children: role }, role)) }),
1656
- scope ? /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Text, { size: "sm", c: "dimmed", children: [
2430
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core39.Group, { gap: "xs", children: roles.map((role) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core39.Badge, { variant: "outline", children: role }, role)) }),
2431
+ scope ? /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_core39.Text, { size: "sm", c: "dimmed", children: [
1657
2432
  "Scope: ",
1658
2433
  scope
1659
2434
  ] }) : null,
1660
- description ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Text, { size: "sm", children: description }) : null
2435
+ description ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core39.Text, { size: "sm", children: description }) : null
1661
2436
  ] }) });
1662
2437
  }
1663
2438
 
1664
2439
  // src/PageHeader.tsx
1665
- var import_core29 = require("@mantine/core");
1666
- var import_jsx_runtime30 = require("react/jsx-runtime");
2440
+ var import_core40 = require("@mantine/core");
2441
+ var import_jsx_runtime42 = require("react/jsx-runtime");
1667
2442
  function PageHeader({
1668
2443
  title,
1669
2444
  description,
@@ -1674,19 +2449,19 @@ function PageHeader({
1674
2449
  }) {
1675
2450
  const resolvedDescription = description ?? subtitle;
1676
2451
  const eyebrowProps = eyebrowVariant === "ornamental" ? { tt: "uppercase", style: { letterSpacing: "0.12em" } } : {};
1677
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Group, { justify: "space-between", align: "flex-start", gap: "lg", wrap: "wrap", children: [
1678
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Stack, { gap: "xs", children: [
1679
- eyebrow && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Text, { size: "xs", fw: 700, c: "dimmed", ...eyebrowProps, children: eyebrow }),
1680
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Title, { order: 1, children: title }),
1681
- resolvedDescription && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Text, { c: "dimmed", maw: 720, children: resolvedDescription })
2452
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_core40.Group, { justify: "space-between", align: "flex-start", gap: "lg", wrap: "wrap", children: [
2453
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_core40.Stack, { gap: "xs", children: [
2454
+ eyebrow && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core40.Text, { size: "xs", fw: 700, c: "dimmed", ...eyebrowProps, children: eyebrow }),
2455
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core40.Title, { order: 1, children: title }),
2456
+ resolvedDescription && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core40.Text, { c: "dimmed", maw: 720, children: resolvedDescription })
1682
2457
  ] }),
1683
- actions ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Box, { children: actions }) : null
2458
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core40.Box, { children: actions }) : null
1684
2459
  ] });
1685
2460
  }
1686
2461
 
1687
2462
  // src/FilterDrawer.tsx
1688
- var import_core30 = require("@mantine/core");
1689
- var import_jsx_runtime31 = require("react/jsx-runtime");
2463
+ var import_core41 = require("@mantine/core");
2464
+ var import_jsx_runtime43 = require("react/jsx-runtime");
1690
2465
  function FilterDrawer({
1691
2466
  opened,
1692
2467
  onClose,
@@ -1702,8 +2477,8 @@ function FilterDrawer({
1702
2477
  }) {
1703
2478
  const resolvedPrimaryAction = applyAction ?? primaryAction;
1704
2479
  const resolvedSecondaryAction = resetAction ?? secondaryAction;
1705
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1706
- import_core30.Drawer,
2480
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2481
+ import_core41.Drawer,
1707
2482
  {
1708
2483
  opened,
1709
2484
  onClose,
@@ -1711,11 +2486,11 @@ function FilterDrawer({
1711
2486
  position: mode === "bottom-sheet" ? "bottom" : "right",
1712
2487
  size: mode === "bottom-sheet" ? "auto" : "md",
1713
2488
  radius: mode === "bottom-sheet" ? "xl" : void 0,
1714
- children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core30.Stack, { gap: "md", children: [
1715
- description ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Text, { size: "sm", c: "dimmed", children: description }) : null,
2489
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_core41.Stack, { gap: "md", children: [
2490
+ description ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core41.Text, { size: "sm", c: "dimmed", children: description }) : null,
1716
2491
  children,
1717
- resolvedPrimaryAction || resolvedSecondaryAction || closeAction ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core30.Group, { justify: "space-between", mt: "md", children: [
1718
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core30.Group, { gap: "sm", children: [
2492
+ resolvedPrimaryAction || resolvedSecondaryAction || closeAction ? /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_core41.Group, { justify: "space-between", mt: "md", children: [
2493
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_core41.Group, { gap: "sm", children: [
1719
2494
  closeAction,
1720
2495
  resolvedSecondaryAction
1721
2496
  ] }),
@@ -1727,8 +2502,8 @@ function FilterDrawer({
1727
2502
  }
1728
2503
 
1729
2504
  // src/PlaceholderPanel.tsx
1730
- var import_core31 = require("@mantine/core");
1731
- var import_jsx_runtime32 = require("react/jsx-runtime");
2505
+ var import_core42 = require("@mantine/core");
2506
+ var import_jsx_runtime44 = require("react/jsx-runtime");
1732
2507
  function PlaceholderPanel({
1733
2508
  title,
1734
2509
  description,
@@ -1738,16 +2513,16 @@ function PlaceholderPanel({
1738
2513
  mode
1739
2514
  }) {
1740
2515
  if (mode === "live" && children) {
1741
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_jsx_runtime32.Fragment, { children });
2516
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_jsx_runtime44.Fragment, { children });
1742
2517
  }
1743
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Card, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core31.Stack, { gap: "md", children: [
1744
- badge ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Badge, { variant: "light", color: "blue", w: "fit-content", children: badge }) : null,
1745
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core31.Stack, { gap: "xs", children: [
1746
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Title, { order: 4, children: title }),
1747
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Text, { c: "dimmed", children: description })
2518
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Card, { children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_core42.Stack, { gap: "md", children: [
2519
+ badge ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Badge, { variant: "light", color: "blue", w: "fit-content", children: badge }) : null,
2520
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_core42.Stack, { gap: "xs", children: [
2521
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Title, { order: 4, children: title }),
2522
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Text, { c: "dimmed", children: description })
1748
2523
  ] }),
1749
- footer ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Text, { size: "sm", children: footer }) : null,
1750
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2524
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core42.Text, { size: "sm", children: footer }) : null,
2525
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
1751
2526
  StateBlock,
1752
2527
  {
1753
2528
  variant: "not-enough-data",
@@ -1760,8 +2535,8 @@ function PlaceholderPanel({
1760
2535
  }
1761
2536
 
1762
2537
  // src/SimpleDataTable.tsx
1763
- var import_core32 = require("@mantine/core");
1764
- var import_jsx_runtime33 = require("react/jsx-runtime");
2538
+ var import_core43 = require("@mantine/core");
2539
+ var import_jsx_runtime45 = require("react/jsx-runtime");
1765
2540
  function SimpleDataTable({
1766
2541
  columns,
1767
2542
  rows,
@@ -1772,23 +2547,23 @@ function SimpleDataTable({
1772
2547
  getRowKey
1773
2548
  }) {
1774
2549
  if (error) {
1775
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(StateBlock, { variant: "error", title: "Unable to load data", description: error, compact: true });
2550
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(StateBlock, { variant: "error", title: "Unable to load data", description: error, compact: true });
1776
2551
  }
1777
2552
  if (loading) {
1778
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(StateBlock, { variant: "loading", title: "Loading data", description: "Please wait while the shared dataset is prepared.", compact: true });
2553
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(StateBlock, { variant: "loading", title: "Loading data", description: "Please wait while the shared dataset is prepared.", compact: true });
1779
2554
  }
1780
2555
  if (!rows.length) {
1781
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, compact: true });
2556
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, compact: true });
1782
2557
  }
1783
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.ScrollArea, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core32.Table, { striped: true, highlightOnHover: true, withTableBorder: true, withColumnBorders: true, children: [
1784
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Table.Thead, { children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Table.Tr, { children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Table.Th, { children: column.header }, String(column.key))) }) }),
1785
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Table.Tbody, { children: rows.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Table.Tr, { children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Table.Td, { children: column.render ? column.render(row) : String(row[column.key] ?? "") }, String(column.key))) }, getRowKey ? getRowKey(row, index) : index)) })
2558
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.ScrollArea, { children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_core43.Table, { striped: true, highlightOnHover: true, withTableBorder: true, withColumnBorders: true, children: [
2559
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Table.Thead, { children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Table.Tr, { children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Table.Th, { children: column.header }, String(column.key))) }) }),
2560
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Table.Tbody, { children: rows.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Table.Tr, { children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core43.Table.Td, { children: column.render ? column.render(row) : String(row[column.key] ?? "") }, String(column.key))) }, getRowKey ? getRowKey(row, index) : index)) })
1786
2561
  ] }) });
1787
2562
  }
1788
2563
 
1789
2564
  // src/StatsSection.tsx
1790
- var import_core33 = require("@mantine/core");
1791
- var import_jsx_runtime34 = require("react/jsx-runtime");
2565
+ var import_core44 = require("@mantine/core");
2566
+ var import_jsx_runtime46 = require("react/jsx-runtime");
1792
2567
  function StatsSection({
1793
2568
  title,
1794
2569
  loading = false,
@@ -1800,11 +2575,11 @@ function StatsSection({
1800
2575
  }) {
1801
2576
  let content = children;
1802
2577
  if (error) {
1803
- content = /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(StateBlock, { variant: "error", title: "Unable to load statistics", description: error, compact: true });
2578
+ content = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(StateBlock, { variant: "error", title: "Unable to load statistics", description: error, compact: true });
1804
2579
  } else if (loading) {
1805
- content = /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(StateBlock, { variant: "loading", title: "Loading statistics", description: "This shared data surface is still synchronizing.", compact: true });
2580
+ content = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(StateBlock, { variant: "loading", title: "Loading statistics", description: "This shared data surface is still synchronizing.", compact: true });
1806
2581
  } else if (belowThreshold) {
1807
- content = /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2582
+ content = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
1808
2583
  StateBlock,
1809
2584
  {
1810
2585
  variant: "not-enough-data",
@@ -1814,10 +2589,10 @@ function StatsSection({
1814
2589
  }
1815
2590
  );
1816
2591
  } else if (placeholder) {
1817
- content = /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(PlaceholderPanel, { ...placeholder, mode: "placeholder" });
2592
+ content = /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(PlaceholderPanel, { ...placeholder, mode: "placeholder" });
1818
2593
  }
1819
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Stack, { gap: "md", children: [
1820
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core33.Title, { order: 3, children: title }),
2594
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_core44.Stack, { gap: "md", children: [
2595
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_core44.Title, { order: 3, children: title }),
1821
2596
  content
1822
2597
  ] });
1823
2598
  }
@@ -3136,33 +3911,45 @@ function getGdsMessages(locale) {
3136
3911
  ConsumerSection,
3137
3912
  CtaButtonGroup,
3138
3913
  DataToolbar,
3914
+ DetailProfileShell,
3139
3915
  DocsPageShell,
3140
3916
  EditorialCard,
3141
3917
  EditorialHero,
3142
3918
  EmptyState,
3143
3919
  FeatureBand,
3144
3920
  FilterDrawer,
3921
+ FoodMenuSection,
3145
3922
  FormField,
3146
3923
  GdsIcons,
3147
3924
  GdsVocabulary,
3925
+ ListingCard,
3926
+ MapPanel,
3148
3927
  MediaCard,
3149
3928
  MediaField,
3150
3929
  MetricCard,
3151
3930
  PageHeader,
3152
3931
  PlaceholderPanel,
3932
+ PlaybackSurface,
3153
3933
  ProductCard,
3154
3934
  ProgressCard,
3155
3935
  PublicBrandFooter,
3936
+ PublicFlowShell,
3937
+ PublicFoodCard,
3156
3938
  PublicNav,
3157
3939
  PublicProductCard,
3158
3940
  PublicShell,
3159
3941
  PublicSiteFooter,
3942
+ ReferenceLinkGrid,
3943
+ ReferenceLocaleNotice,
3944
+ ReferenceSection,
3160
3945
  SectionPanel,
3161
3946
  SimpleDataTable,
3947
+ SocialAuthButtons,
3162
3948
  StateBlock,
3163
3949
  StatsSection,
3164
3950
  StatusBadge,
3165
3951
  ar,
3952
+ createGdsVocabularyPack,
3166
3953
  de,
3167
3954
  en,
3168
3955
  es,
@@ -3174,6 +3961,8 @@ function getGdsMessages(locale) {
3174
3961
  he,
3175
3962
  hu,
3176
3963
  it,
3964
+ mergeGdsVocabularyPacks,
3177
3965
  resolveAccentPanelStyles,
3966
+ resolveSemanticActionConfig,
3178
3967
  ru
3179
3968
  });