@doneisbetter/gds-core 2.6.1 → 2.6.4

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.
@@ -223,7 +223,6 @@ var GdsIcons = {
223
223
 
224
224
  // src/vocabulary.ts
225
225
  var GdsVocabulary = {
226
- // Base
227
226
  settings: { id: "gds.action.settings", defaultMessage: "Settings", icon: GdsIcons.Settings, feedback: { icon: GdsIcons.Settings, color: "teal", messageId: "gds.feedback.saved" } },
228
227
  analytics: { id: "gds.action.analytics", defaultMessage: "Analytics", icon: GdsIcons.Analytics, feedback: { icon: GdsIcons.Analytics, color: "teal", messageId: "gds.feedback.loaded" } },
229
228
  dashboard: { id: "gds.action.dashboard", defaultMessage: "Dashboard", icon: GdsIcons.Dashboard, feedback: { icon: GdsIcons.Dashboard, color: "teal", messageId: "gds.feedback.loaded" } },
@@ -239,14 +238,12 @@ var GdsVocabulary = {
239
238
  close: { id: "gds.action.close", defaultMessage: "Close", icon: GdsIcons.Close, feedback: { icon: GdsIcons.Close, color: "gray", messageId: "gds.feedback.closed" } },
240
239
  language: { id: "gds.action.language", defaultMessage: "Language", icon: GdsIcons.Language, feedback: { icon: GdsIcons.Language, color: "teal", messageId: "gds.feedback.changed" } },
241
240
  theme: { id: "gds.action.theme", defaultMessage: "Theme", icon: GdsIcons.Theme, feedback: { icon: GdsIcons.Theme, color: "teal", messageId: "gds.feedback.changed" } },
242
- // Navigation
243
241
  home: { id: "gds.action.home", defaultMessage: "Home", icon: GdsIcons.Home, feedback: { icon: GdsIcons.Home, color: "teal", messageId: "gds.feedback.opened" } },
244
242
  inbox: { id: "gds.action.inbox", defaultMessage: "Inbox", icon: GdsIcons.Inbox, feedback: { icon: GdsIcons.Inbox, color: "teal", messageId: "gds.feedback.opened" } },
245
243
  calendar: { id: "gds.action.calendar", defaultMessage: "Calendar", icon: GdsIcons.Calendar, feedback: { icon: GdsIcons.Calendar, color: "teal", messageId: "gds.feedback.opened" } },
246
244
  gallery: { id: "gds.action.gallery", defaultMessage: "Gallery", icon: GdsIcons.Gallery, feedback: { icon: GdsIcons.Gallery, color: "teal", messageId: "gds.feedback.opened" } },
247
245
  history: { id: "gds.action.history", defaultMessage: "History", icon: GdsIcons.History, feedback: { icon: GdsIcons.History, color: "teal", messageId: "gds.feedback.opened" } },
248
246
  profile: { id: "gds.action.profile", defaultMessage: "Profile", icon: GdsIcons.Profile, feedback: { icon: GdsIcons.Profile, color: "teal", messageId: "gds.feedback.opened" } },
249
- // Actions
250
247
  send: { id: "gds.action.send", defaultMessage: "Send", icon: GdsIcons.Send, feedback: { icon: GdsIcons.Send, color: "blue", messageId: "gds.feedback.sent" } },
251
248
  reply: { id: "gds.action.reply", defaultMessage: "Reply", icon: GdsIcons.Reply, feedback: { icon: GdsIcons.Reply, color: "blue", messageId: "gds.feedback.replied" } },
252
249
  forward: { id: "gds.action.forward", defaultMessage: "Forward", icon: GdsIcons.Forward, feedback: { icon: GdsIcons.Forward, color: "blue", messageId: "gds.feedback.forwarded" } },
@@ -260,12 +257,10 @@ var GdsVocabulary = {
260
257
  uncheck: { id: "gds.action.uncheck", defaultMessage: "Uncheck", icon: GdsIcons.Uncheck, feedback: { icon: GdsIcons.Uncheck, color: "red", messageId: "gds.feedback.unchecked" } },
261
258
  complete: { id: "gds.action.complete", defaultMessage: "Complete", icon: GdsIcons.Complete, feedback: { icon: GdsIcons.Complete, color: "teal", messageId: "gds.feedback.completed" } },
262
259
  clear: { id: "gds.action.clear", defaultMessage: "Clear", icon: GdsIcons.Clear, feedback: { icon: GdsIcons.Clear, color: "red", messageId: "gds.feedback.cleared" } },
263
- // Media (camera project)
264
260
  capture: { id: "gds.action.capture", defaultMessage: "Capture", icon: GdsIcons.Capture, feedback: { icon: GdsIcons.Capture, color: "teal", messageId: "gds.feedback.captured" } },
265
261
  record: { id: "gds.action.record", defaultMessage: "Record", icon: GdsIcons.Record, feedback: { icon: GdsIcons.Record, color: "teal", messageId: "gds.feedback.recorded" } },
266
262
  flip: { id: "gds.action.flip", defaultMessage: "Flip", icon: GdsIcons.Flip, feedback: { icon: GdsIcons.Flip, color: "teal", messageId: "gds.feedback.flipped" } },
267
263
  flash: { id: "gds.action.flash", defaultMessage: "Flash", icon: GdsIcons.Flash, feedback: { icon: GdsIcons.Flash, color: "teal", messageId: "gds.feedback.flashed" } },
268
- // Domain specific (amanoba, classscout, kidex, habigoal)
269
264
  course: { id: "gds.action.course", defaultMessage: "Course", icon: GdsIcons.Course, feedback: { icon: GdsIcons.Course, color: "teal", messageId: "gds.feedback.done" } },
270
265
  lesson: { id: "gds.action.lesson", defaultMessage: "Lesson", icon: GdsIcons.Lesson, feedback: { icon: GdsIcons.Lesson, color: "teal", messageId: "gds.feedback.done" } },
271
266
  certificate: { id: "gds.action.certificate", defaultMessage: "Certificate", icon: GdsIcons.Certificate, feedback: { icon: GdsIcons.Certificate, color: "teal", messageId: "gds.feedback.done" } },
@@ -278,7 +273,6 @@ var GdsVocabulary = {
278
273
  goal: { id: "gds.action.goal", defaultMessage: "Goal", icon: GdsIcons.Goal, feedback: { icon: GdsIcons.Goal, color: "teal", messageId: "gds.feedback.done" } },
279
274
  streak: { id: "gds.action.streak", defaultMessage: "Streak", icon: GdsIcons.Streak, feedback: { icon: GdsIcons.Streak, color: "teal", messageId: "gds.feedback.done" } },
280
275
  reward: { id: "gds.action.reward", defaultMessage: "Reward", icon: GdsIcons.Reward, feedback: { icon: GdsIcons.Reward, color: "yellow", messageId: "gds.feedback.rewarded" } },
281
- // Codebase analysis additions
282
276
  trophy: { id: "gds.action.trophy", defaultMessage: "Trophy", icon: GdsIcons.Trophy, feedback: { icon: GdsIcons.Trophy, color: "yellow", messageId: "gds.feedback.rewarded" } },
283
277
  crown: { id: "gds.action.crown", defaultMessage: "Crown", icon: GdsIcons.Crown, feedback: { icon: GdsIcons.Crown, color: "yellow", messageId: "gds.feedback.rewarded" } },
284
278
  pause: { id: "gds.action.pause", defaultMessage: "Pause", icon: GdsIcons.Pause, feedback: { icon: GdsIcons.Pause, color: "teal", messageId: "gds.feedback.paused" } },
@@ -298,7 +292,6 @@ var GdsVocabulary = {
298
292
  help: { id: "gds.action.help", defaultMessage: "Help", icon: GdsIcons.Help, feedback: { icon: GdsIcons.Help, color: "teal", messageId: "gds.feedback.done" } },
299
293
  filter: { id: "gds.action.filter", defaultMessage: "Filter", icon: GdsIcons.Filter, feedback: { icon: GdsIcons.Filter, color: "teal", messageId: "gds.feedback.filtered" } },
300
294
  sort: { id: "gds.action.sort", defaultMessage: "Sort", icon: GdsIcons.Sort, feedback: { icon: GdsIcons.Sort, color: "teal", messageId: "gds.feedback.sorted" } },
301
- // Audit-driven additions
302
295
  export: { id: "gds.action.export", defaultMessage: "Export", icon: GdsIcons.Export, feedback: { icon: GdsIcons.Export, color: "teal", messageId: "gds.feedback.exported" } },
303
296
  import: { id: "gds.action.import", defaultMessage: "Import", icon: GdsIcons.Import, feedback: { icon: GdsIcons.Import, color: "teal", messageId: "gds.feedback.imported" } },
304
297
  preview: { id: "gds.action.preview", defaultMessage: "Preview", icon: GdsIcons.Preview, feedback: { icon: GdsIcons.Preview, color: "teal", messageId: "gds.feedback.previewed" } },
@@ -316,35 +309,178 @@ var GdsVocabulary = {
316
309
  refer: { id: "gds.action.refer", defaultMessage: "Refer", icon: GdsIcons.Refer, feedback: { icon: GdsIcons.Refer, color: "teal", messageId: "gds.feedback.referred" } },
317
310
  evidence: { id: "gds.action.evidence", defaultMessage: "Evidence", icon: GdsIcons.Evidence, feedback: { icon: GdsIcons.Evidence, color: "teal", messageId: "gds.feedback.added" } }
318
311
  };
312
+ function createGdsVocabularyPack(namespace, actions) {
313
+ return {
314
+ namespace,
315
+ actions: Object.fromEntries(
316
+ Object.entries(actions).map(([key, definition]) => [
317
+ `${namespace}:${key}`,
318
+ {
319
+ ...definition,
320
+ id: `gds.action.${namespace}.${key}`
321
+ }
322
+ ])
323
+ )
324
+ };
325
+ }
326
+ function mergeGdsVocabularyPacks(packs = []) {
327
+ return packs.reduce((acc, pack) => {
328
+ for (const [key, definition] of Object.entries(pack.actions)) {
329
+ acc[key] = definition;
330
+ }
331
+ return acc;
332
+ }, {});
333
+ }
334
+ function resolveSemanticActionConfig(action, packs = []) {
335
+ const baseConfig = GdsVocabulary[action];
336
+ if (baseConfig) {
337
+ return baseConfig;
338
+ }
339
+ const merged = mergeGdsVocabularyPacks(packs);
340
+ const packConfig = merged[action];
341
+ if (packConfig) {
342
+ return packConfig;
343
+ }
344
+ throw new Error(`Unknown semantic action: ${action}`);
345
+ }
346
+ function getSemanticActionConfig(action, packs = []) {
347
+ return resolveSemanticActionConfig(action, packs);
348
+ }
349
+ function getSemanticActionLabel(action, translate, packs = []) {
350
+ const config = resolveSemanticActionConfig(action, packs);
351
+ return translate ? translate(config.id, config.defaultMessage) : config.defaultMessage;
352
+ }
353
+
354
+ // src/ChoiceChip.tsx
355
+ import { Badge as Badge2 } from "@mantine/core";
356
+ import { jsx as jsx3 } from "react/jsx-runtime";
357
+ function ChoiceChip({
358
+ label,
359
+ active = false,
360
+ href,
361
+ onClick,
362
+ component,
363
+ ...props
364
+ }) {
365
+ const sharedProps = {
366
+ variant: active ? "filled" : "light",
367
+ size: "sm",
368
+ radius: "xl",
369
+ ...props
370
+ };
371
+ if (href) {
372
+ const LinkComponent = component || "a";
373
+ return /* @__PURE__ */ jsx3(
374
+ Badge2,
375
+ {
376
+ component: LinkComponent,
377
+ href,
378
+ "aria-current": active ? "page" : void 0,
379
+ ...sharedProps,
380
+ children: label
381
+ }
382
+ );
383
+ }
384
+ if (onClick || component) {
385
+ const ButtonComponent = component || "button";
386
+ return /* @__PURE__ */ jsx3(
387
+ Badge2,
388
+ {
389
+ component: ButtonComponent,
390
+ type: component ? void 0 : "button",
391
+ onClick,
392
+ "aria-pressed": onClick ? active : void 0,
393
+ ...sharedProps,
394
+ children: label
395
+ }
396
+ );
397
+ }
398
+ return /* @__PURE__ */ jsx3(Badge2, { ...sharedProps, children: label });
399
+ }
400
+
401
+ // src/ActionBar.tsx
402
+ import { ActionIcon, Button, Group, Stack as Stack2 } from "@mantine/core";
403
+ import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
404
+ function renderSemanticAction(action, slot, vocabularyPacks) {
405
+ const { action: actionId, variant, ariaLabel, ...props } = action;
406
+ const fallbackVariant = slot === "primary" ? "filled" : slot === "secondary" ? "default" : "subtle";
407
+ const config = resolveSemanticActionConfig(actionId, vocabularyPacks);
408
+ const Icon = config.icon;
409
+ const label = getSemanticActionLabel(actionId, void 0, vocabularyPacks);
410
+ return /* @__PURE__ */ jsx4(
411
+ Button,
412
+ {
413
+ leftSection: /* @__PURE__ */ jsx4(Icon, { size: "1rem", stroke: 1.75 }),
414
+ "aria-label": ariaLabel ?? label,
415
+ variant: variant ?? fallbackVariant,
416
+ ...props,
417
+ children: label
418
+ },
419
+ `${slot}-${actionId}`
420
+ );
421
+ }
422
+ function ActionBar({
423
+ primary,
424
+ secondary = [],
425
+ tertiary = [],
426
+ iconOnly = [],
427
+ gap = "sm",
428
+ vocabularyPacks = []
429
+ }) {
430
+ return /* @__PURE__ */ jsx4(Stack2, { gap, children: /* @__PURE__ */ jsxs2(Group, { justify: "space-between", align: "center", gap, wrap: "wrap", children: [
431
+ /* @__PURE__ */ jsxs2(Group, { gap, wrap: "wrap", children: [
432
+ secondary.map((action) => renderSemanticAction(action, "secondary", vocabularyPacks)),
433
+ tertiary.map((action) => renderSemanticAction(action, "tertiary", vocabularyPacks))
434
+ ] }),
435
+ /* @__PURE__ */ jsxs2(Group, { gap, wrap: "wrap", justify: "flex-end", style: { marginInlineStart: "auto" }, children: [
436
+ iconOnly.map(({ action, ariaLabel, ...props }) => {
437
+ const config = resolveSemanticActionConfig(action, vocabularyPacks);
438
+ const Icon = config.icon;
439
+ return /* @__PURE__ */ jsx4(
440
+ ActionIcon,
441
+ {
442
+ variant: "subtle",
443
+ size: "lg",
444
+ "aria-label": ariaLabel ?? getSemanticActionLabel(action, void 0, vocabularyPacks),
445
+ ...props,
446
+ children: /* @__PURE__ */ jsx4(Icon, { size: "1rem", stroke: 1.75 })
447
+ },
448
+ `icon-${action}`
449
+ );
450
+ }),
451
+ primary ? renderSemanticAction(primary, "primary", vocabularyPacks) : null
452
+ ] })
453
+ ] }) });
454
+ }
319
455
 
320
456
  // src/MetricCard.tsx
321
- import { Badge as Badge2, Card, Group, Stack as Stack2, Text as Text2, ThemeIcon, Title as Title2 } from "@mantine/core";
322
- import { jsx as jsx3, jsxs as jsxs2 } from "react/jsx-runtime";
457
+ import { Badge as Badge3, Card, Group as Group2, Stack as Stack3, Text as Text2, ThemeIcon, Title as Title2 } from "@mantine/core";
458
+ import { jsx as jsx5, jsxs as jsxs3 } from "react/jsx-runtime";
323
459
  var trendColors = {
324
460
  positive: "teal",
325
461
  negative: "red",
326
462
  neutral: "gray"
327
463
  };
328
464
  function MetricCard({ label, value, description, trend, icon, footer }) {
329
- return /* @__PURE__ */ jsx3(Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs2(Stack2, { gap: "md", children: [
330
- /* @__PURE__ */ jsxs2(Group, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
331
- /* @__PURE__ */ jsxs2(Stack2, { gap: 4, children: [
332
- /* @__PURE__ */ jsx3(Text2, { size: "sm", c: "dimmed", fw: 600, children: label }),
333
- /* @__PURE__ */ jsx3(Title2, { order: 3, children: value })
465
+ return /* @__PURE__ */ jsx5(Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs3(Stack3, { gap: "md", children: [
466
+ /* @__PURE__ */ jsxs3(Group2, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
467
+ /* @__PURE__ */ jsxs3(Stack3, { gap: 4, children: [
468
+ /* @__PURE__ */ jsx5(Text2, { size: "sm", c: "dimmed", fw: 600, children: label }),
469
+ /* @__PURE__ */ jsx5(Title2, { order: 3, children: value })
334
470
  ] }),
335
- icon ? /* @__PURE__ */ jsx3(ThemeIcon, { variant: "light", size: "xl", radius: "xl", "aria-hidden": true, children: icon }) : null
471
+ icon ? /* @__PURE__ */ jsx5(ThemeIcon, { variant: "light", size: "xl", radius: "xl", "aria-hidden": true, children: icon }) : null
336
472
  ] }),
337
- description || trend ? /* @__PURE__ */ jsxs2(Group, { justify: "space-between", align: "center", gap: "sm", children: [
338
- description ? /* @__PURE__ */ jsx3(Text2, { size: "sm", c: "dimmed", flex: 1, children: description }) : /* @__PURE__ */ jsx3("span", {}),
339
- trend ? /* @__PURE__ */ jsx3(Badge2, { color: trendColors[trend.tone ?? "neutral"], variant: "light", children: trend.label }) : null
473
+ description || trend ? /* @__PURE__ */ jsxs3(Group2, { justify: "space-between", align: "center", gap: "sm", children: [
474
+ description ? /* @__PURE__ */ jsx5(Text2, { size: "sm", c: "dimmed", flex: 1, children: description }) : /* @__PURE__ */ jsx5("span", {}),
475
+ trend ? /* @__PURE__ */ jsx5(Badge3, { color: trendColors[trend.tone ?? "neutral"], variant: "light", children: trend.label }) : null
340
476
  ] }) : null,
341
477
  footer
342
478
  ] }) });
343
479
  }
344
480
 
345
481
  // src/ProgressCard.tsx
346
- import { Card as Card2, Group as Group2, Progress, Stack as Stack3, Text as Text3, Title as Title3 } from "@mantine/core";
347
- import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
482
+ import { Card as Card2, Group as Group3, Progress, Stack as Stack4, Text as Text3, Title as Title3 } from "@mantine/core";
483
+ import { jsx as jsx6, jsxs as jsxs4 } from "react/jsx-runtime";
348
484
  function ProgressCard({
349
485
  label,
350
486
  value,
@@ -353,31 +489,31 @@ function ProgressCard({
353
489
  description,
354
490
  action
355
491
  }) {
356
- return /* @__PURE__ */ jsx4(Card2, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs3(Stack3, { gap: "md", children: [
357
- /* @__PURE__ */ jsxs3(Group2, { justify: "space-between", align: "flex-start", children: [
358
- /* @__PURE__ */ jsxs3(Stack3, { gap: 4, children: [
359
- /* @__PURE__ */ jsx4(Text3, { size: "sm", c: "dimmed", fw: 600, children: label }),
360
- /* @__PURE__ */ jsx4(Title3, { order: 3, children: value })
492
+ return /* @__PURE__ */ jsx6(Card2, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs4(Stack4, { gap: "md", children: [
493
+ /* @__PURE__ */ jsxs4(Group3, { justify: "space-between", align: "flex-start", children: [
494
+ /* @__PURE__ */ jsxs4(Stack4, { gap: 4, children: [
495
+ /* @__PURE__ */ jsx6(Text3, { size: "sm", c: "dimmed", fw: 600, children: label }),
496
+ /* @__PURE__ */ jsx6(Title3, { order: 3, children: value })
361
497
  ] }),
362
498
  action
363
499
  ] }),
364
- description ? /* @__PURE__ */ jsx4(Text3, { size: "sm", c: "dimmed", children: description }) : null,
365
- /* @__PURE__ */ jsxs3(Stack3, { gap: 6, children: [
366
- /* @__PURE__ */ jsxs3(Group2, { justify: "space-between", gap: "sm", children: [
367
- /* @__PURE__ */ jsx4(Text3, { size: "sm", fw: 500, children: progressLabel ?? "Progress" }),
368
- /* @__PURE__ */ jsxs3(Text3, { size: "sm", c: "dimmed", children: [
500
+ description ? /* @__PURE__ */ jsx6(Text3, { size: "sm", c: "dimmed", children: description }) : null,
501
+ /* @__PURE__ */ jsxs4(Stack4, { gap: 6, children: [
502
+ /* @__PURE__ */ jsxs4(Group3, { justify: "space-between", gap: "sm", children: [
503
+ /* @__PURE__ */ jsx6(Text3, { size: "sm", fw: 500, children: progressLabel ?? "Progress" }),
504
+ /* @__PURE__ */ jsxs4(Text3, { size: "sm", c: "dimmed", children: [
369
505
  Math.round(progress),
370
506
  "%"
371
507
  ] })
372
508
  ] }),
373
- /* @__PURE__ */ jsx4(Progress, { value: progress, radius: "xl", size: "md" })
509
+ /* @__PURE__ */ jsx6(Progress, { value: progress, radius: "xl", size: "md" })
374
510
  ] })
375
511
  ] }) });
376
512
  }
377
513
 
378
514
  // src/SectionPanel.tsx
379
- import { Divider, Group as Group3, Paper, Stack as Stack4, Text as Text4, Title as Title4 } from "@mantine/core";
380
- import { Fragment, jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
515
+ import { Divider, Group as Group4, Paper, Stack as Stack5, Text as Text4, Title as Title4 } from "@mantine/core";
516
+ import { Fragment, jsx as jsx7, jsxs as jsxs5 } from "react/jsx-runtime";
381
517
  var toneBackgrounds = {
382
518
  default: "var(--mantine-color-body)",
383
519
  supporting: "light-dark(var(--mantine-color-gray-0), color-mix(in srgb, var(--mantine-color-dark-7) 92%, black))",
@@ -393,23 +529,23 @@ function SectionPanel({
393
529
  id,
394
530
  divided = true
395
531
  }) {
396
- return /* @__PURE__ */ jsx5(Paper, { id, withBorder: true, radius: "xl", p: "lg", style: { background: toneBackgrounds[tone] }, children: /* @__PURE__ */ jsxs4(Stack4, { gap: "md", children: [
397
- title || description || action ? /* @__PURE__ */ jsxs4(Fragment, { children: [
398
- /* @__PURE__ */ jsxs4(Group3, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
399
- title || description ? /* @__PURE__ */ jsxs4(Stack4, { gap: 4, children: [
400
- title ? /* @__PURE__ */ jsx5(Title4, { order: 3, children: title }) : null,
401
- description ? /* @__PURE__ */ jsx5(Text4, { size: "sm", c: "dimmed", children: description }) : null
532
+ return /* @__PURE__ */ jsx7(Paper, { id, withBorder: true, radius: "xl", p: "lg", style: { background: toneBackgrounds[tone] }, children: /* @__PURE__ */ jsxs5(Stack5, { gap: "md", children: [
533
+ title || description || action ? /* @__PURE__ */ jsxs5(Fragment, { children: [
534
+ /* @__PURE__ */ jsxs5(Group4, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
535
+ title || description ? /* @__PURE__ */ jsxs5(Stack5, { gap: 4, children: [
536
+ title ? /* @__PURE__ */ jsx7(Title4, { order: 3, children: title }) : null,
537
+ description ? /* @__PURE__ */ jsx7(Text4, { size: "sm", c: "dimmed", children: description }) : null
402
538
  ] }) : null,
403
539
  action
404
540
  ] }),
405
- divided ? /* @__PURE__ */ jsx5(Divider, {}) : null
541
+ divided ? /* @__PURE__ */ jsx7(Divider, {}) : null
406
542
  ] }) : null,
407
543
  children
408
544
  ] }) });
409
545
  }
410
546
 
411
547
  // src/ConsumerSection.tsx
412
- import { jsx as jsx6 } from "react/jsx-runtime";
548
+ import { jsx as jsx8 } from "react/jsx-runtime";
413
549
  function ConsumerSection({
414
550
  title,
415
551
  description,
@@ -417,22 +553,22 @@ function ConsumerSection({
417
553
  children,
418
554
  tone = "default"
419
555
  }) {
420
- return /* @__PURE__ */ jsx6(SectionPanel, { title, description, action, tone, children });
556
+ return /* @__PURE__ */ jsx8(SectionPanel, { title, description, action, tone, children });
421
557
  }
422
558
 
423
559
  // src/ConsumerDashboardGrid.tsx
424
560
  import { SimpleGrid } from "@mantine/core";
425
- import { jsx as jsx7 } from "react/jsx-runtime";
561
+ import { jsx as jsx9 } from "react/jsx-runtime";
426
562
  function ConsumerDashboardGrid({
427
563
  children,
428
564
  columns = 3
429
565
  }) {
430
- return /* @__PURE__ */ jsx7(SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children });
566
+ return /* @__PURE__ */ jsx9(SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children });
431
567
  }
432
568
 
433
569
  // src/EditorialCard.tsx
434
- import { Anchor, AspectRatio, Badge as Badge3, Box as Box2, Card as Card3, Group as Group4, Stack as Stack5, Text as Text5, Title as Title5 } from "@mantine/core";
435
- import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
570
+ import { Anchor, AspectRatio, Badge as Badge4, Box as Box2, Card as Card3, Group as Group5, Stack as Stack6, Text as Text5, Title as Title5 } from "@mantine/core";
571
+ import { jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
436
572
  var tonePalette = {
437
573
  default: {
438
574
  accent: "violet",
@@ -452,7 +588,7 @@ var tonePalette = {
452
588
  }
453
589
  };
454
590
  function EditorialMediaFallback({ compact }) {
455
- return /* @__PURE__ */ jsx8(AspectRatio, { ratio: compact ? 16 / 10 : 4 / 3, children: /* @__PURE__ */ jsx8(
591
+ return /* @__PURE__ */ jsx10(AspectRatio, { ratio: compact ? 16 / 10 : 4 / 3, children: /* @__PURE__ */ jsx10(
456
592
  Box2,
457
593
  {
458
594
  style: {
@@ -463,7 +599,7 @@ function EditorialMediaFallback({ compact }) {
463
599
  background: "var(--mantine-color-gray-0)",
464
600
  borderRadius: "var(--mantine-radius-md)"
465
601
  },
466
- children: /* @__PURE__ */ jsx8(GdsIcons.Gallery, { size: compact ? "1.5rem" : "2rem" })
602
+ children: /* @__PURE__ */ jsx10(GdsIcons.Gallery, { size: compact ? "1.5rem" : "2rem" })
467
603
  }
468
604
  ) });
469
605
  }
@@ -486,7 +622,7 @@ function EditorialCard({
486
622
  const featured = variant === "featured";
487
623
  const palette = tonePalette[tone];
488
624
  const interactiveProps = href ? { component: "a", href } : onClick ? { component: "button", onClick, type: "button" } : {};
489
- return /* @__PURE__ */ jsxs5(
625
+ return /* @__PURE__ */ jsxs6(
490
626
  Card3,
491
627
  {
492
628
  className: classNames?.root,
@@ -501,20 +637,20 @@ function EditorialCard({
501
637
  cursor: href || onClick ? "pointer" : "default"
502
638
  },
503
639
  children: [
504
- /* @__PURE__ */ jsx8(Card3.Section, { className: classNames?.media, children: media ?? /* @__PURE__ */ jsx8(EditorialMediaFallback, { compact }) }),
505
- /* @__PURE__ */ jsxs5(Stack5, { gap: "md", p: compact ? "md" : "lg", className: classNames?.body, children: [
506
- /* @__PURE__ */ jsxs5(Group4, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "wrap", children: [
507
- /* @__PURE__ */ jsxs5(Stack5, { gap: 4, flex: 1, children: [
508
- eyebrow ? /* @__PURE__ */ jsx8(Text5, { size: "xs", fw: 700, c: "dimmed", children: eyebrow }) : null,
509
- /* @__PURE__ */ jsx8(Title5, { order: compact ? 4 : 3, className: classNames?.title, children: title })
640
+ /* @__PURE__ */ jsx10(Card3.Section, { className: classNames?.media, children: media ?? /* @__PURE__ */ jsx10(EditorialMediaFallback, { compact }) }),
641
+ /* @__PURE__ */ jsxs6(Stack6, { gap: "md", p: compact ? "md" : "lg", className: classNames?.body, children: [
642
+ /* @__PURE__ */ jsxs6(Group5, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "wrap", children: [
643
+ /* @__PURE__ */ jsxs6(Stack6, { gap: 4, flex: 1, children: [
644
+ eyebrow ? /* @__PURE__ */ jsx10(Text5, { size: "xs", fw: 700, c: "dimmed", children: eyebrow }) : null,
645
+ /* @__PURE__ */ jsx10(Title5, { order: compact ? 4 : 3, className: classNames?.title, children: title })
510
646
  ] }),
511
- badge ? typeof badge === "string" ? /* @__PURE__ */ jsx8(Badge3, { color: palette.accent, variant: "light", children: badge }) : badge : null
647
+ badge ? typeof badge === "string" ? /* @__PURE__ */ jsx10(Badge4, { color: palette.accent, variant: "light", children: badge }) : badge : null
512
648
  ] }),
513
- description ? /* @__PURE__ */ jsx8(Text5, { size: "sm", c: "dimmed", children: description }) : null,
514
- meta ? /* @__PURE__ */ jsx8(Text5, { size: "sm", c: "dimmed", className: classNames?.meta, children: meta }) : null,
515
- href || onClick || ctaLabel ? /* @__PURE__ */ jsxs5(Group4, { gap: 6, c: `${palette.accent}.7`, className: classNames?.action, children: [
516
- /* @__PURE__ */ jsx8(Text5, { fw: 600, size: "sm", children: ctaLabel }),
517
- /* @__PURE__ */ jsx8(
649
+ description ? /* @__PURE__ */ jsx10(Text5, { size: "sm", c: "dimmed", children: description }) : null,
650
+ meta ? /* @__PURE__ */ jsx10(Text5, { size: "sm", c: "dimmed", className: classNames?.meta, children: meta }) : null,
651
+ href || onClick || ctaLabel ? /* @__PURE__ */ jsxs6(Group5, { gap: 6, c: `${palette.accent}.7`, className: classNames?.action, children: [
652
+ /* @__PURE__ */ jsx10(Text5, { fw: 600, size: "sm", children: ctaLabel }),
653
+ /* @__PURE__ */ jsx10(
518
654
  Anchor,
519
655
  {
520
656
  component: "span",
@@ -532,8 +668,8 @@ function EditorialCard({
532
668
  }
533
669
 
534
670
  // src/ProductCard.tsx
535
- import { Badge as Badge4, Card as Card4, Group as Group5, Menu, Stack as Stack6, Text as Text6, ThemeIcon as ThemeIcon2, Title as Title6, ActionIcon } from "@mantine/core";
536
- import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
671
+ import { Badge as Badge5, Card as Card4, Group as Group6, Menu, Stack as Stack7, Text as Text6, ThemeIcon as ThemeIcon2, Title as Title6, ActionIcon as ActionIcon2 } from "@mantine/core";
672
+ import { jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
537
673
  function ProductCard({
538
674
  title,
539
675
  description,
@@ -546,39 +682,39 @@ function ProductCard({
546
682
  footer
547
683
  }) {
548
684
  const MoreIcon = GdsIcons.Menu;
549
- return /* @__PURE__ */ jsx9(Card4, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs6(Stack6, { gap: "md", children: [
685
+ return /* @__PURE__ */ jsx11(Card4, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs7(Stack7, { gap: "md", children: [
550
686
  media,
551
- /* @__PURE__ */ jsxs6(Group5, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
552
- /* @__PURE__ */ jsxs6(Group5, { align: "flex-start", gap: "sm", wrap: "nowrap", children: [
553
- icon ? /* @__PURE__ */ jsx9(ThemeIcon2, { variant: "light", size: "xl", radius: "xl", "aria-hidden": true, children: icon }) : null,
554
- /* @__PURE__ */ jsxs6(Stack6, { gap: 4, children: [
555
- /* @__PURE__ */ jsx9(Title6, { order: 4, children: title }),
556
- description ? /* @__PURE__ */ jsx9(Text6, { size: "sm", c: "dimmed", lineClamp: 3, children: description }) : null
687
+ /* @__PURE__ */ jsxs7(Group6, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
688
+ /* @__PURE__ */ jsxs7(Group6, { align: "flex-start", gap: "sm", wrap: "nowrap", children: [
689
+ icon ? /* @__PURE__ */ jsx11(ThemeIcon2, { variant: "light", size: "xl", radius: "xl", "aria-hidden": true, children: icon }) : null,
690
+ /* @__PURE__ */ jsxs7(Stack7, { gap: 4, children: [
691
+ /* @__PURE__ */ jsx11(Title6, { order: 4, children: title }),
692
+ description ? /* @__PURE__ */ jsx11(Text6, { size: "sm", c: "dimmed", lineClamp: 3, children: description }) : null
557
693
  ] })
558
694
  ] }),
559
- /* @__PURE__ */ jsxs6(Group5, { gap: "xs", align: "center", wrap: "nowrap", children: [
560
- typeof status === "string" ? /* @__PURE__ */ jsx9(Badge4, { variant: "light", children: status }) : status,
561
- secondaryActions.length ? /* @__PURE__ */ jsxs6(Menu, { position: "bottom-end", withinPortal: true, children: [
562
- /* @__PURE__ */ jsx9(Menu.Target, { children: /* @__PURE__ */ jsx9(ActionIcon, { variant: "subtle", "aria-label": "More actions", children: /* @__PURE__ */ jsx9(MoreIcon, { size: "1rem" }) }) }),
563
- /* @__PURE__ */ jsx9(Menu.Dropdown, { children: secondaryActions.map(
564
- (action) => action.href ? /* @__PURE__ */ jsx9(Menu.Item, { component: "a", href: action.href, color: action.color, children: action.label }, action.label) : /* @__PURE__ */ jsx9(Menu.Item, { onClick: action.onClick, color: action.color, children: action.label }, action.label)
695
+ /* @__PURE__ */ jsxs7(Group6, { gap: "xs", align: "center", wrap: "nowrap", children: [
696
+ typeof status === "string" ? /* @__PURE__ */ jsx11(Badge5, { variant: "light", children: status }) : status,
697
+ secondaryActions.length ? /* @__PURE__ */ jsxs7(Menu, { position: "bottom-end", withinPortal: true, children: [
698
+ /* @__PURE__ */ jsx11(Menu.Target, { children: /* @__PURE__ */ jsx11(ActionIcon2, { variant: "subtle", "aria-label": "More actions", children: /* @__PURE__ */ jsx11(MoreIcon, { size: "1rem" }) }) }),
699
+ /* @__PURE__ */ jsx11(Menu.Dropdown, { children: secondaryActions.map(
700
+ (action) => action.href ? /* @__PURE__ */ jsx11(Menu.Item, { component: "a", href: action.href, color: action.color, children: action.label }, action.label) : /* @__PURE__ */ jsx11(Menu.Item, { onClick: action.onClick, color: action.color, children: action.label }, action.label)
565
701
  ) })
566
702
  ] }) : null
567
703
  ] })
568
704
  ] }),
569
- metadata.length ? /* @__PURE__ */ jsx9(Stack6, { gap: 6, children: metadata.map((item) => /* @__PURE__ */ jsxs6(Group5, { justify: "space-between", gap: "sm", children: [
570
- /* @__PURE__ */ jsx9(Text6, { size: "sm", c: "dimmed", children: item.label }),
571
- /* @__PURE__ */ jsx9(Text6, { size: "sm", fw: 500, ta: "right", children: item.value })
705
+ metadata.length ? /* @__PURE__ */ jsx11(Stack7, { gap: 6, children: metadata.map((item) => /* @__PURE__ */ jsxs7(Group6, { justify: "space-between", gap: "sm", children: [
706
+ /* @__PURE__ */ jsx11(Text6, { size: "sm", c: "dimmed", children: item.label }),
707
+ /* @__PURE__ */ jsx11(Text6, { size: "sm", fw: 500, ta: "right", children: item.value })
572
708
  ] }, item.label)) }) : null,
573
- primaryAction ? /* @__PURE__ */ jsx9(Group5, { justify: "space-between", children: primaryAction }) : null,
709
+ primaryAction ? /* @__PURE__ */ jsx11(Group6, { justify: "space-between", children: primaryAction }) : null,
574
710
  footer
575
711
  ] }) });
576
712
  }
577
713
 
578
714
  // src/PublicProductCard.tsx
579
715
  import { cloneElement, isValidElement } from "react";
580
- import { AspectRatio as AspectRatio2, Badge as Badge5, Card as Card5, Group as Group6, Skeleton, Stack as Stack7, Text as Text7, ThemeIcon as ThemeIcon3, Title as Title7 } from "@mantine/core";
581
- import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
716
+ import { AspectRatio as AspectRatio2, Badge as Badge6, Card as Card5, Group as Group7, Skeleton, Stack as Stack8, Text as Text7, ThemeIcon as ThemeIcon3, Title as Title7 } from "@mantine/core";
717
+ import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
582
718
  var stateConfig = {
583
719
  available: { label: "Available", color: "teal" },
584
720
  limited: { label: "Limited", color: "yellow" },
@@ -595,7 +731,7 @@ function enhanceAction(action, disabled) {
595
731
  });
596
732
  }
597
733
  function ImageFallback({ compact }) {
598
- return /* @__PURE__ */ jsx10(AspectRatio2, { ratio: compact ? 16 / 9 : 4 / 3, children: /* @__PURE__ */ jsx10(
734
+ return /* @__PURE__ */ jsx12(AspectRatio2, { ratio: compact ? 16 / 9 : 4 / 3, children: /* @__PURE__ */ jsx12(
599
735
  ThemeIcon3,
600
736
  {
601
737
  size: "100%",
@@ -603,21 +739,21 @@ function ImageFallback({ compact }) {
603
739
  variant: "light",
604
740
  color: "gray",
605
741
  "aria-label": "No product image available",
606
- children: /* @__PURE__ */ jsx10(GdsIcons.Gallery, { size: compact ? "1.5rem" : "2rem" })
742
+ children: /* @__PURE__ */ jsx12(GdsIcons.Gallery, { size: compact ? "1.5rem" : "2rem" })
607
743
  }
608
744
  ) });
609
745
  }
610
746
  function LoadingCard({ compact }) {
611
- return /* @__PURE__ */ jsx10(Card5, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ jsxs7(Stack7, { gap: "md", children: [
612
- /* @__PURE__ */ jsx10(AspectRatio2, { ratio: compact ? 16 / 9 : 4 / 3, children: /* @__PURE__ */ jsx10(Skeleton, { radius: "md" }) }),
613
- /* @__PURE__ */ jsxs7(Stack7, { gap: "xs", children: [
614
- /* @__PURE__ */ jsx10(Skeleton, { height: 20, radius: "sm", width: "70%" }),
615
- /* @__PURE__ */ jsx10(Skeleton, { height: 14, radius: "sm", width: "100%" }),
616
- /* @__PURE__ */ jsx10(Skeleton, { height: 14, radius: "sm", width: "85%" })
747
+ return /* @__PURE__ */ jsx12(Card5, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ jsxs8(Stack8, { gap: "md", children: [
748
+ /* @__PURE__ */ jsx12(AspectRatio2, { ratio: compact ? 16 / 9 : 4 / 3, children: /* @__PURE__ */ jsx12(Skeleton, { radius: "md" }) }),
749
+ /* @__PURE__ */ jsxs8(Stack8, { gap: "xs", children: [
750
+ /* @__PURE__ */ jsx12(Skeleton, { height: 20, radius: "sm", width: "70%" }),
751
+ /* @__PURE__ */ jsx12(Skeleton, { height: 14, radius: "sm", width: "100%" }),
752
+ /* @__PURE__ */ jsx12(Skeleton, { height: 14, radius: "sm", width: "85%" })
617
753
  ] }),
618
- /* @__PURE__ */ jsxs7(Group6, { justify: "space-between", align: "center", children: [
619
- /* @__PURE__ */ jsx10(Skeleton, { height: 18, radius: "sm", width: 72 }),
620
- /* @__PURE__ */ jsx10(Skeleton, { height: 36, radius: "md", width: 120 })
754
+ /* @__PURE__ */ jsxs8(Group7, { justify: "space-between", align: "center", children: [
755
+ /* @__PURE__ */ jsx12(Skeleton, { height: 18, radius: "sm", width: 72 }),
756
+ /* @__PURE__ */ jsx12(Skeleton, { height: 36, radius: "md", width: 120 })
621
757
  ] })
622
758
  ] }) });
623
759
  }
@@ -640,7 +776,7 @@ function PublicProductCard({
640
776
  disabled = false
641
777
  }) {
642
778
  if (loading) {
643
- return /* @__PURE__ */ jsx10(LoadingCard, { compact });
779
+ return /* @__PURE__ */ jsx12(LoadingCard, { compact });
644
780
  }
645
781
  const isActionDisabled = disabled || state === "sold-out";
646
782
  const resolvedPrimaryAction = enhanceAction(primaryAction, isActionDisabled);
@@ -653,43 +789,309 @@ function PublicProductCard({
653
789
  const pickupHelper = helperKind === "pickup" ? helperText : pickupNote;
654
790
  const inventoryHelper = helperKind === "inventory" ? helperText : inventoryNote;
655
791
  const hasSupportingRegion = Boolean(price || supportingHelper || pickupHelper || inventoryHelper);
656
- return /* @__PURE__ */ jsx10(Card5, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ jsxs7(Stack7, { gap: compact ? "sm" : "md", children: [
657
- image ?? /* @__PURE__ */ jsx10(ImageFallback, { compact }),
658
- /* @__PURE__ */ jsxs7(Group6, { justify: "space-between", align: "flex-start", wrap: "nowrap", gap: "sm", children: [
659
- /* @__PURE__ */ jsxs7(Stack7, { gap: 4, style: { minWidth: 0, flex: 1 }, children: [
660
- /* @__PURE__ */ jsx10(Title7, { order: compact ? 5 : 4, lineClamp: 2, children: title }),
661
- description ? /* @__PURE__ */ jsx10(Text7, { size: "sm", c: "dimmed", lineClamp: compact ? 2 : 3, children: description }) : null
792
+ return /* @__PURE__ */ jsx12(Card5, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ jsxs8(Stack8, { gap: compact ? "sm" : "md", children: [
793
+ image ?? /* @__PURE__ */ jsx12(ImageFallback, { compact }),
794
+ /* @__PURE__ */ jsxs8(Group7, { justify: "space-between", align: "flex-start", wrap: "nowrap", gap: "sm", children: [
795
+ /* @__PURE__ */ jsxs8(Stack8, { gap: 4, style: { minWidth: 0, flex: 1 }, children: [
796
+ /* @__PURE__ */ jsx12(Title7, { order: compact ? 5 : 4, lineClamp: 2, children: title }),
797
+ description ? /* @__PURE__ */ jsx12(Text7, { size: "sm", c: "dimmed", lineClamp: compact ? 2 : 3, children: description }) : null
662
798
  ] }),
663
- /* @__PURE__ */ jsx10(Badge5, { variant: "light", color: stateBadge.color, children: stateBadge.label })
799
+ /* @__PURE__ */ jsx12(Badge6, { variant: "light", color: stateBadge.color, children: stateBadge.label })
664
800
  ] }),
665
- hasSupportingRegion ? /* @__PURE__ */ jsxs7(Group6, { justify: "space-between", align: "flex-end", gap: "sm", wrap: "nowrap", children: [
666
- /* @__PURE__ */ jsxs7(Stack7, { gap: 2, style: { minWidth: 0, flex: 1 }, children: [
667
- price ? /* @__PURE__ */ jsx10(Text7, { fw: 700, size: compact ? "md" : "lg", children: price }) : null,
668
- supportingHelper ? /* @__PURE__ */ jsx10(Text7, { size: "xs", c: "dimmed", children: supportingHelper }) : null
801
+ hasSupportingRegion ? /* @__PURE__ */ jsxs8(Group7, { justify: "space-between", align: "flex-end", gap: "sm", wrap: "nowrap", children: [
802
+ /* @__PURE__ */ jsxs8(Stack8, { gap: 2, style: { minWidth: 0, flex: 1 }, children: [
803
+ price ? /* @__PURE__ */ jsx12(Text7, { fw: 700, size: compact ? "md" : "lg", children: price }) : null,
804
+ supportingHelper ? /* @__PURE__ */ jsx12(Text7, { size: "xs", c: "dimmed", children: supportingHelper }) : null
669
805
  ] }),
670
806
  resolvedPrimaryAction
671
- ] }) : resolvedPrimaryAction ? /* @__PURE__ */ jsx10(Group6, { justify: "flex-end", children: resolvedPrimaryAction }) : null,
672
- pickupHelper || inventoryHelper || metadata.length ? /* @__PURE__ */ jsxs7(Stack7, { gap: 6, children: [
673
- pickupHelper ? /* @__PURE__ */ jsxs7(Group6, { justify: "space-between", gap: "sm", children: [
674
- /* @__PURE__ */ jsx10(Text7, { size: "sm", c: "dimmed", children: "Pickup" }),
675
- /* @__PURE__ */ jsx10(Text7, { size: "sm", fw: 500, ta: "right", children: pickupHelper })
807
+ ] }) : resolvedPrimaryAction ? /* @__PURE__ */ jsx12(Group7, { justify: "flex-end", children: resolvedPrimaryAction }) : null,
808
+ pickupHelper || inventoryHelper || metadata.length ? /* @__PURE__ */ jsxs8(Stack8, { gap: 6, children: [
809
+ pickupHelper ? /* @__PURE__ */ jsxs8(Group7, { justify: "space-between", gap: "sm", children: [
810
+ /* @__PURE__ */ jsx12(Text7, { size: "sm", c: "dimmed", children: "Pickup" }),
811
+ /* @__PURE__ */ jsx12(Text7, { size: "sm", fw: 500, ta: "right", children: pickupHelper })
676
812
  ] }) : null,
677
- inventoryHelper ? /* @__PURE__ */ jsxs7(Group6, { justify: "space-between", gap: "sm", children: [
678
- /* @__PURE__ */ jsx10(Text7, { size: "sm", c: "dimmed", children: "Availability" }),
679
- /* @__PURE__ */ jsx10(Text7, { size: "sm", fw: 500, ta: "right", children: inventoryHelper })
813
+ inventoryHelper ? /* @__PURE__ */ jsxs8(Group7, { justify: "space-between", gap: "sm", children: [
814
+ /* @__PURE__ */ jsx12(Text7, { size: "sm", c: "dimmed", children: "Availability" }),
815
+ /* @__PURE__ */ jsx12(Text7, { size: "sm", fw: 500, ta: "right", children: inventoryHelper })
680
816
  ] }) : null,
681
- metadata.map((item) => /* @__PURE__ */ jsxs7(Group6, { justify: "space-between", gap: "sm", children: [
682
- /* @__PURE__ */ jsx10(Text7, { size: "sm", c: "dimmed", children: item.label }),
683
- /* @__PURE__ */ jsx10(Text7, { size: "sm", fw: 500, ta: "right", children: item.value })
817
+ metadata.map((item) => /* @__PURE__ */ jsxs8(Group7, { justify: "space-between", gap: "sm", children: [
818
+ /* @__PURE__ */ jsx12(Text7, { size: "sm", c: "dimmed", children: item.label }),
819
+ /* @__PURE__ */ jsx12(Text7, { size: "sm", fw: 500, ta: "right", children: item.value })
684
820
  ] }, item.label))
685
821
  ] }) : null,
686
- resolvedSecondaryAction ? /* @__PURE__ */ jsx10(Group6, { justify: "flex-end", children: resolvedSecondaryAction }) : null
822
+ resolvedSecondaryAction ? /* @__PURE__ */ jsx12(Group7, { justify: "flex-end", children: resolvedSecondaryAction }) : null
823
+ ] }) });
824
+ }
825
+
826
+ // src/PublicFoodCard.tsx
827
+ import { cloneElement as cloneElement2, isValidElement as isValidElement2 } from "react";
828
+ import { AspectRatio as AspectRatio3, Badge as Badge7, Card as Card6, Group as Group8, Skeleton as Skeleton2, Stack as Stack9, Text as Text8, ThemeIcon as ThemeIcon4, Title as Title8 } from "@mantine/core";
829
+ import { jsx as jsx13, jsxs as jsxs9 } from "react/jsx-runtime";
830
+ var ratioMap = {
831
+ square: 1,
832
+ dish: 4 / 3,
833
+ landscape: 16 / 9
834
+ };
835
+ var stateConfig2 = {
836
+ available: { label: "Available", color: "teal" },
837
+ preorder: { label: "Preorder", color: "violet" },
838
+ limited: { label: "Limited batch", color: "yellow" },
839
+ "sold-out": { label: "Sold out", color: "red" },
840
+ "coming-soon": { label: "Coming soon", color: "gray" }
841
+ };
842
+ var markerToneMap = {
843
+ default: "gray",
844
+ positive: "teal",
845
+ warning: "orange",
846
+ muted: "dark"
847
+ };
848
+ function enhanceAction2(action, disabled) {
849
+ if (!isValidElement2(action)) {
850
+ return action;
851
+ }
852
+ return cloneElement2(action, {
853
+ disabled: disabled || Boolean(action.props.disabled),
854
+ "aria-disabled": disabled || void 0
855
+ });
856
+ }
857
+ function FoodImageFallback({ mediaRatio }) {
858
+ return /* @__PURE__ */ jsx13(AspectRatio3, { ratio: ratioMap[mediaRatio], children: /* @__PURE__ */ jsx13(ThemeIcon4, { size: "100%", radius: "md", variant: "light", color: "gray", "aria-label": "No food image available", children: /* @__PURE__ */ jsx13(GdsIcons.Gallery, { size: "2rem" }) }) });
859
+ }
860
+ function LoadingFoodCard({ mediaRatio }) {
861
+ return /* @__PURE__ */ jsx13(Card6, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs9(Stack9, { gap: "md", children: [
862
+ /* @__PURE__ */ jsx13(AspectRatio3, { ratio: ratioMap[mediaRatio], children: /* @__PURE__ */ jsx13(Skeleton2, { radius: "md" }) }),
863
+ /* @__PURE__ */ jsxs9(Stack9, { gap: "xs", children: [
864
+ /* @__PURE__ */ jsx13(Skeleton2, { height: 20, radius: "sm", width: "72%" }),
865
+ /* @__PURE__ */ jsx13(Skeleton2, { height: 14, radius: "sm", width: "96%" }),
866
+ /* @__PURE__ */ jsx13(Skeleton2, { height: 14, radius: "sm", width: "78%" })
867
+ ] }),
868
+ /* @__PURE__ */ jsxs9(Group8, { justify: "space-between", align: "center", children: [
869
+ /* @__PURE__ */ jsx13(Skeleton2, { height: 18, radius: "sm", width: 96 }),
870
+ /* @__PURE__ */ jsx13(Skeleton2, { height: 36, radius: "md", width: 112 })
871
+ ] })
872
+ ] }) });
873
+ }
874
+ function PublicFoodCard({
875
+ title,
876
+ description,
877
+ image,
878
+ price,
879
+ priceNote,
880
+ state,
881
+ helperText,
882
+ pickupNote,
883
+ freshnessNote,
884
+ markers = [],
885
+ metadata = [],
886
+ primaryAction,
887
+ secondaryAction,
888
+ quantityHint,
889
+ mediaRatio = "dish",
890
+ loading = false,
891
+ disabled = false
892
+ }) {
893
+ if (loading) {
894
+ return /* @__PURE__ */ jsx13(LoadingFoodCard, { mediaRatio });
895
+ }
896
+ const stateBadge = stateConfig2[state];
897
+ const isActionDisabled = disabled || state === "sold-out" || state === "coming-soon";
898
+ const resolvedPrimaryAction = enhanceAction2(primaryAction, isActionDisabled);
899
+ const resolvedSecondaryAction = enhanceAction2(secondaryAction, disabled);
900
+ return /* @__PURE__ */ jsx13(Card6, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs9(Stack9, { gap: "md", children: [
901
+ image ?? /* @__PURE__ */ jsx13(FoodImageFallback, { mediaRatio }),
902
+ markers.length > 0 || quantityHint ? /* @__PURE__ */ jsxs9(Group8, { justify: "space-between", align: "center", wrap: "wrap", gap: "xs", children: [
903
+ /* @__PURE__ */ jsx13(Group8, { gap: "xs", wrap: "wrap", children: markers.map((marker) => /* @__PURE__ */ jsx13(Badge7, { variant: "light", color: markerToneMap[marker.tone ?? "default"], children: marker.label }, marker.id)) }),
904
+ quantityHint ? /* @__PURE__ */ jsx13(Text8, { size: "xs", fw: 600, c: "dimmed", children: quantityHint }) : null
905
+ ] }) : null,
906
+ /* @__PURE__ */ jsxs9(Group8, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "nowrap", children: [
907
+ /* @__PURE__ */ jsxs9(Stack9, { gap: 4, style: { minWidth: 0, flex: 1 }, children: [
908
+ /* @__PURE__ */ jsx13(Title8, { order: 4, lineClamp: 2, children: title }),
909
+ description ? /* @__PURE__ */ jsx13(Text8, { size: "sm", c: "dimmed", lineClamp: 3, children: description }) : null
910
+ ] }),
911
+ /* @__PURE__ */ jsx13(Badge7, { variant: "light", color: stateBadge.color, children: stateBadge.label })
912
+ ] }),
913
+ /* @__PURE__ */ jsxs9(Group8, { justify: "space-between", align: "flex-end", gap: "sm", wrap: "nowrap", children: [
914
+ /* @__PURE__ */ jsxs9(Stack9, { gap: 2, style: { minWidth: 0, flex: 1 }, children: [
915
+ price ? /* @__PURE__ */ jsx13(Text8, { fw: 800, size: "lg", children: price }) : null,
916
+ priceNote ? /* @__PURE__ */ jsx13(Text8, { size: "xs", c: "dimmed", children: priceNote }) : null,
917
+ helperText ? /* @__PURE__ */ jsx13(Text8, { size: "sm", c: "dimmed", children: helperText }) : null
918
+ ] }),
919
+ resolvedPrimaryAction
920
+ ] }),
921
+ pickupNote || freshnessNote || metadata.length > 0 ? /* @__PURE__ */ jsxs9(Stack9, { gap: 6, children: [
922
+ pickupNote ? /* @__PURE__ */ jsxs9(Group8, { justify: "space-between", align: "flex-start", gap: "sm", children: [
923
+ /* @__PURE__ */ jsx13(Text8, { size: "sm", c: "dimmed", children: "Pickup" }),
924
+ /* @__PURE__ */ jsx13(Text8, { size: "sm", fw: 500, ta: "right", children: pickupNote })
925
+ ] }) : null,
926
+ freshnessNote ? /* @__PURE__ */ jsxs9(Group8, { justify: "space-between", align: "flex-start", gap: "sm", children: [
927
+ /* @__PURE__ */ jsx13(Text8, { size: "sm", c: "dimmed", children: "Freshness" }),
928
+ /* @__PURE__ */ jsx13(Text8, { size: "sm", fw: 500, ta: "right", children: freshnessNote })
929
+ ] }) : null,
930
+ metadata.map((item) => /* @__PURE__ */ jsx13(Group8, { justify: "space-between", align: "flex-start", gap: "sm", children: /* @__PURE__ */ jsxs9(Group8, { gap: "xs", wrap: "nowrap", children: [
931
+ item.icon,
932
+ /* @__PURE__ */ jsx13(Text8, { size: "sm", c: "dimmed", children: item.label })
933
+ ] }) }, item.id))
934
+ ] }) : null,
935
+ resolvedSecondaryAction ? /* @__PURE__ */ jsx13(Group8, { justify: "flex-end", children: resolvedSecondaryAction }) : null
936
+ ] }) });
937
+ }
938
+
939
+ // src/FoodMenuSection.tsx
940
+ import { Box as Box3, Group as Group9, SimpleGrid as SimpleGrid2, Stack as Stack10, Text as Text9, Title as Title9 } from "@mantine/core";
941
+ import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs10 } from "react/jsx-runtime";
942
+ function FoodMenuSection({
943
+ title,
944
+ description,
945
+ eyebrow,
946
+ categories,
947
+ sectionNote,
948
+ action,
949
+ emptyState,
950
+ columns = 3,
951
+ showEmptyCategories = false
952
+ }) {
953
+ const normalizedCategories = (categories ?? []).filter(Boolean);
954
+ const visibleCategories = showEmptyCategories ? normalizedCategories : normalizedCategories.filter((category) => category.items.length > 0);
955
+ if (!visibleCategories.length) {
956
+ return emptyState ? /* @__PURE__ */ jsx14(Fragment2, { children: emptyState }) : /* @__PURE__ */ jsx14(
957
+ EmptyState,
958
+ {
959
+ title: "No active menu available",
960
+ description: "Publish grouped menu categories here when the current weekly or seasonal menu is ready."
961
+ }
962
+ );
963
+ }
964
+ return /* @__PURE__ */ jsx14(Box3, { component: "section", "aria-label": typeof title === "string" ? title : "Food menu section", children: /* @__PURE__ */ jsxs10(Stack10, { gap: "xl", children: [
965
+ /* @__PURE__ */ jsxs10(Group9, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
966
+ /* @__PURE__ */ jsxs10(Stack10, { gap: 4, children: [
967
+ eyebrow ? /* @__PURE__ */ jsx14(Text9, { size: "xs", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
968
+ /* @__PURE__ */ jsx14(Title9, { order: 2, children: title }),
969
+ description ? /* @__PURE__ */ jsx14(Text9, { size: "sm", c: "dimmed", maw: 760, children: description }) : null,
970
+ sectionNote ? /* @__PURE__ */ jsx14(Text9, { size: "sm", c: "dimmed", children: sectionNote }) : null
971
+ ] }),
972
+ action
973
+ ] }),
974
+ /* @__PURE__ */ jsx14(Stack10, { gap: "xl", children: visibleCategories.map((category) => /* @__PURE__ */ jsxs10(Stack10, { gap: "md", children: [
975
+ /* @__PURE__ */ jsxs10(Stack10, { gap: 4, children: [
976
+ /* @__PURE__ */ jsx14(Title9, { order: 3, children: category.title }),
977
+ category.description ? /* @__PURE__ */ jsx14(Text9, { size: "sm", c: "dimmed", children: category.description }) : null,
978
+ category.helperNote ? /* @__PURE__ */ jsx14(Text9, { size: "sm", c: "dimmed", children: category.helperNote }) : null
979
+ ] }),
980
+ category.items.length ? /* @__PURE__ */ jsx14(SimpleGrid2, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: category.items.map((item) => /* @__PURE__ */ jsx14(PublicFoodCard, { ...item }, item.id)) }) : /* @__PURE__ */ jsx14(
981
+ EmptyState,
982
+ {
983
+ title: "No items in this category",
984
+ description: "This category is defined, but it does not currently have any visible dishes or bundles."
985
+ }
986
+ )
987
+ ] }, category.id)) })
988
+ ] }) });
989
+ }
990
+
991
+ // src/ListingCard.tsx
992
+ import { ActionIcon as ActionIcon3, AspectRatio as AspectRatio4, Badge as Badge8, Card as Card7, Group as Group10, Stack as Stack11, Text as Text10, ThemeIcon as ThemeIcon5, Title as Title10 } from "@mantine/core";
993
+ import { jsx as jsx15, jsxs as jsxs11 } from "react/jsx-runtime";
994
+ var ratioMap2 = {
995
+ "1:1": 1,
996
+ "4:3": 4 / 3,
997
+ "16:9": 16 / 9
998
+ };
999
+ var toneColorMap = {
1000
+ default: void 0,
1001
+ positive: "teal",
1002
+ warning: "orange",
1003
+ muted: "gray"
1004
+ };
1005
+ function ListingImageFallback({ mediaRatio }) {
1006
+ return /* @__PURE__ */ jsx15(AspectRatio4, { ratio: ratioMap2[mediaRatio], children: /* @__PURE__ */ jsx15(
1007
+ ThemeIcon5,
1008
+ {
1009
+ size: "100%",
1010
+ radius: "md",
1011
+ variant: "light",
1012
+ color: "gray",
1013
+ "aria-label": "No listing image available",
1014
+ children: /* @__PURE__ */ jsx15(GdsIcons.Gallery, { size: "2rem" })
1015
+ }
1016
+ ) });
1017
+ }
1018
+ function ListingAffordance({ affordance }) {
1019
+ const config = GdsVocabulary[affordance.action];
1020
+ const Icon = config.icon;
1021
+ const label = affordance.ariaLabel ?? getSemanticActionLabel(affordance.action);
1022
+ if (affordance.href) {
1023
+ return /* @__PURE__ */ jsx15(
1024
+ ActionIcon3,
1025
+ {
1026
+ component: "a",
1027
+ href: affordance.href,
1028
+ variant: "subtle",
1029
+ size: "lg",
1030
+ "aria-label": label,
1031
+ disabled: affordance.disabled,
1032
+ children: /* @__PURE__ */ jsx15(Icon, { size: "1rem", stroke: 1.75 })
1033
+ }
1034
+ );
1035
+ }
1036
+ return /* @__PURE__ */ jsx15(
1037
+ ActionIcon3,
1038
+ {
1039
+ variant: "subtle",
1040
+ size: "lg",
1041
+ "aria-label": label,
1042
+ onClick: affordance.onClick,
1043
+ disabled: affordance.disabled,
1044
+ children: /* @__PURE__ */ jsx15(Icon, { size: "1rem", stroke: 1.75 })
1045
+ }
1046
+ );
1047
+ }
1048
+ function ListingCard({
1049
+ title,
1050
+ href,
1051
+ description,
1052
+ image,
1053
+ mediaRatio = "4:3",
1054
+ metadata = [],
1055
+ featured = false,
1056
+ sponsoredDisclosure,
1057
+ price,
1058
+ primaryAction,
1059
+ saveAction,
1060
+ shareAction,
1061
+ compact = false
1062
+ }) {
1063
+ const titleContent = href && typeof title === "string" ? /* @__PURE__ */ jsx15(Text10, { component: "a", href, inherit: true, td: "none", children: title }) : title;
1064
+ return /* @__PURE__ */ jsx15(Card7, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ jsxs11(Stack11, { gap: compact ? "sm" : "md", children: [
1065
+ image ?? /* @__PURE__ */ jsx15(ListingImageFallback, { mediaRatio }),
1066
+ featured || sponsoredDisclosure ? /* @__PURE__ */ jsxs11(Group10, { justify: "space-between", gap: "sm", wrap: "wrap", children: [
1067
+ featured ? /* @__PURE__ */ jsx15(Badge8, { variant: "light", color: "violet", children: "Featured" }) : /* @__PURE__ */ jsx15("span", {}),
1068
+ sponsoredDisclosure ? /* @__PURE__ */ jsx15(Text10, { size: "xs", c: "dimmed", children: sponsoredDisclosure }) : null
1069
+ ] }) : null,
1070
+ /* @__PURE__ */ jsxs11(Stack11, { gap: 4, children: [
1071
+ /* @__PURE__ */ jsx15(Title10, { order: compact ? 5 : 4, lineClamp: 2, children: titleContent }),
1072
+ description ? /* @__PURE__ */ jsx15(Text10, { size: "sm", c: "dimmed", lineClamp: compact ? 2 : 3, children: description }) : null
1073
+ ] }),
1074
+ metadata.length ? /* @__PURE__ */ jsx15(Stack11, { gap: "xs", children: metadata.map((item) => /* @__PURE__ */ jsxs11(Group10, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "nowrap", children: [
1075
+ /* @__PURE__ */ jsxs11(Group10, { gap: "xs", wrap: "nowrap", style: { minWidth: 0, flex: 1 }, children: [
1076
+ item.icon,
1077
+ /* @__PURE__ */ jsx15(Text10, { size: "sm", c: item.tone ? toneColorMap[item.tone] : "dimmed", lineClamp: 1, children: item.label })
1078
+ ] }),
1079
+ item.value ? /* @__PURE__ */ jsx15(Text10, { size: "sm", fw: 500, ta: "right", children: item.value }) : null
1080
+ ] }, item.id)) }) : null,
1081
+ /* @__PURE__ */ jsxs11(Group10, { justify: "space-between", align: "center", gap: "sm", wrap: "wrap", children: [
1082
+ /* @__PURE__ */ jsx15(Stack11, { gap: 2, style: { minWidth: 0, flex: 1 }, children: price ? /* @__PURE__ */ jsx15(Text10, { fw: 700, size: compact ? "md" : "lg", children: price }) : null }),
1083
+ /* @__PURE__ */ jsxs11(Group10, { gap: "xs", wrap: "nowrap", justify: "flex-end", style: { marginInlineStart: "auto" }, children: [
1084
+ saveAction ? /* @__PURE__ */ jsx15(ListingAffordance, { affordance: saveAction }) : null,
1085
+ shareAction ? /* @__PURE__ */ jsx15(ListingAffordance, { affordance: shareAction }) : null,
1086
+ primaryAction
1087
+ ] })
1088
+ ] })
687
1089
  ] }) });
688
1090
  }
689
1091
 
690
1092
  // src/DataToolbar.tsx
691
- import { Badge as Badge6, Group as Group7, Stack as Stack8 } from "@mantine/core";
692
- import { jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
1093
+ import { Badge as Badge9, Group as Group11, Stack as Stack12 } from "@mantine/core";
1094
+ import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
693
1095
  function DataToolbar({
694
1096
  searchSlot,
695
1097
  filterSlot,
@@ -698,20 +1100,20 @@ function DataToolbar({
698
1100
  createAction,
699
1101
  activeFilters = []
700
1102
  }) {
701
- return /* @__PURE__ */ jsxs8(Stack8, { gap: "sm", children: [
702
- /* @__PURE__ */ jsxs8(Group7, { justify: "space-between", align: "flex-start", gap: "sm", children: [
703
- /* @__PURE__ */ jsxs8(Group7, { flex: 1, align: "flex-start", gap: "sm", children: [
1103
+ return /* @__PURE__ */ jsxs12(Stack12, { gap: "sm", children: [
1104
+ /* @__PURE__ */ jsxs12(Group11, { justify: "space-between", align: "flex-start", gap: "sm", children: [
1105
+ /* @__PURE__ */ jsxs12(Group11, { flex: 1, align: "flex-start", gap: "sm", children: [
704
1106
  searchSlot,
705
1107
  filterSlot,
706
1108
  sortSlot
707
1109
  ] }),
708
- /* @__PURE__ */ jsxs8(Group7, { gap: "sm", children: [
1110
+ /* @__PURE__ */ jsxs12(Group11, { gap: "sm", children: [
709
1111
  resetAction,
710
1112
  createAction
711
1113
  ] })
712
1114
  ] }),
713
- activeFilters.length ? /* @__PURE__ */ jsx11(Group7, { gap: "xs", children: activeFilters.map((filter) => /* @__PURE__ */ jsx11(
714
- Badge6,
1115
+ activeFilters.length ? /* @__PURE__ */ jsx16(Group11, { gap: "xs", children: activeFilters.map((filter) => /* @__PURE__ */ jsx16(
1116
+ Badge9,
715
1117
  {
716
1118
  variant: "light",
717
1119
  rightSection: filter.onRemove ? "\xD7" : void 0,
@@ -725,17 +1127,17 @@ function DataToolbar({
725
1127
  }
726
1128
 
727
1129
  // src/StateBlock.tsx
728
- import { Loader, Stack as Stack9, Text as Text8, ThemeIcon as ThemeIcon4, Title as Title8 } from "@mantine/core";
729
- import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
1130
+ import { Loader, Stack as Stack13, Text as Text11, ThemeIcon as ThemeIcon6, Title as Title11 } from "@mantine/core";
1131
+ import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
730
1132
  var variantConfig = {
731
- loading: { color: "violet", icon: /* @__PURE__ */ jsx12(Loader, { size: "sm" }) },
732
- empty: { color: "gray", icon: /* @__PURE__ */ jsx12(GdsIcons.Inbox, { size: "1.1rem" }) },
733
- error: { color: "red", icon: /* @__PURE__ */ jsx12(GdsIcons.Danger, { size: "1.1rem" }) },
734
- permission: { color: "orange", icon: /* @__PURE__ */ jsx12(GdsIcons.Verify, { size: "1.1rem" }) },
735
- disabled: { color: "gray", icon: /* @__PURE__ */ jsx12(GdsIcons.Toggle, { size: "1.1rem" }) },
736
- success: { color: "teal", icon: /* @__PURE__ */ jsx12(GdsIcons.Success, { size: "1.1rem" }) },
737
- info: { color: "blue", icon: /* @__PURE__ */ jsx12(GdsIcons.Info, { size: "1.1rem" }) },
738
- "not-enough-data": { color: "yellow", icon: /* @__PURE__ */ jsx12(GdsIcons.Analytics, { size: "1.1rem" }) }
1133
+ loading: { color: "violet", icon: /* @__PURE__ */ jsx17(Loader, { size: "sm" }) },
1134
+ empty: { color: "gray", icon: /* @__PURE__ */ jsx17(GdsIcons.Inbox, { size: "1.1rem" }) },
1135
+ error: { color: "red", icon: /* @__PURE__ */ jsx17(GdsIcons.Danger, { size: "1.1rem" }) },
1136
+ permission: { color: "orange", icon: /* @__PURE__ */ jsx17(GdsIcons.Verify, { size: "1.1rem" }) },
1137
+ disabled: { color: "gray", icon: /* @__PURE__ */ jsx17(GdsIcons.Toggle, { size: "1.1rem" }) },
1138
+ success: { color: "teal", icon: /* @__PURE__ */ jsx17(GdsIcons.Success, { size: "1.1rem" }) },
1139
+ info: { color: "blue", icon: /* @__PURE__ */ jsx17(GdsIcons.Info, { size: "1.1rem" }) },
1140
+ "not-enough-data": { color: "yellow", icon: /* @__PURE__ */ jsx17(GdsIcons.Analytics, { size: "1.1rem" }) }
739
1141
  };
740
1142
  function StateBlock({
741
1143
  variant,
@@ -746,8 +1148,8 @@ function StateBlock({
746
1148
  compact = false
747
1149
  }) {
748
1150
  const config = variantConfig[variant];
749
- return /* @__PURE__ */ jsxs9(
750
- Stack9,
1151
+ return /* @__PURE__ */ jsxs13(
1152
+ Stack13,
751
1153
  {
752
1154
  align: compact ? "flex-start" : "center",
753
1155
  justify: "center",
@@ -755,10 +1157,10 @@ function StateBlock({
755
1157
  py: compact ? "md" : "xl",
756
1158
  ta: compact ? "left" : "center",
757
1159
  children: [
758
- /* @__PURE__ */ jsx12(ThemeIcon4, { variant: "light", color: config.color, size: compact ? "lg" : "xl", radius: "xl", children: icon ?? config.icon }),
759
- /* @__PURE__ */ jsxs9(Stack9, { gap: 6, align: compact ? "flex-start" : "center", children: [
760
- /* @__PURE__ */ jsx12(Title8, { order: compact ? 4 : 3, children: title }),
761
- description ? /* @__PURE__ */ jsx12(Text8, { c: "dimmed", maw: compact ? void 0 : 480, children: description }) : null
1160
+ /* @__PURE__ */ jsx17(ThemeIcon6, { variant: "light", color: config.color, size: compact ? "lg" : "xl", radius: "xl", children: icon ?? config.icon }),
1161
+ /* @__PURE__ */ jsxs13(Stack13, { gap: 6, align: compact ? "flex-start" : "center", children: [
1162
+ /* @__PURE__ */ jsx17(Title11, { order: compact ? 4 : 3, children: title }),
1163
+ description ? /* @__PURE__ */ jsx17(Text11, { c: "dimmed", maw: compact ? void 0 : 480, children: description }) : null
762
1164
  ] }),
763
1165
  action
764
1166
  ]
@@ -767,8 +1169,8 @@ function StateBlock({
767
1169
  }
768
1170
 
769
1171
  // src/BrowseSurface.tsx
770
- import { Badge as Badge7, Box as Box3, Button, Group as Group8, Paper as Paper2, SimpleGrid as SimpleGrid2, Stack as Stack10, Text as Text9, Title as Title9 } from "@mantine/core";
771
- import { jsx as jsx13, jsxs as jsxs10 } from "react/jsx-runtime";
1172
+ import { Badge as Badge10, Box as Box4, Button as Button2, Group as Group12, Paper as Paper2, SimpleGrid as SimpleGrid3, Stack as Stack14, Text as Text12, Title as Title12 } from "@mantine/core";
1173
+ import { jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
772
1174
  function BrowseSurface({
773
1175
  eyebrow,
774
1176
  title,
@@ -802,22 +1204,22 @@ function BrowseSurface({
802
1204
  }));
803
1205
  let body = content;
804
1206
  if (loading) {
805
- body = /* @__PURE__ */ jsx13(StateBlock, { variant: "loading", title: loadingTitle, description: loadingDescription, compact: true });
1207
+ body = /* @__PURE__ */ jsx18(StateBlock, { variant: "loading", title: loadingTitle, description: loadingDescription, compact: true });
806
1208
  } else if (error) {
807
- body = /* @__PURE__ */ jsx13(StateBlock, { variant: "error", title: errorTitle, description: error, action: errorAction ?? emptyAction, compact: true });
1209
+ body = /* @__PURE__ */ jsx18(StateBlock, { variant: "error", title: errorTitle, description: error, action: errorAction ?? emptyAction, compact: true });
808
1210
  } else if (empty) {
809
- body = /* @__PURE__ */ jsx13(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, action: emptyAction, compact: true });
1211
+ body = /* @__PURE__ */ jsx18(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, action: emptyAction, compact: true });
810
1212
  }
811
- return /* @__PURE__ */ jsxs10(Stack10, { gap: "lg", children: [
812
- /* @__PURE__ */ jsx13(Paper2, { withBorder: true, radius: "xl", p: "xl", children: /* @__PURE__ */ jsxs10(Stack10, { gap: "lg", children: [
813
- /* @__PURE__ */ jsxs10(Group8, { justify: "space-between", align: "flex-start", gap: "md", children: [
814
- /* @__PURE__ */ jsxs10(Stack10, { gap: "xs", maw: 760, children: [
815
- eyebrow ? /* @__PURE__ */ jsx13(Text9, { size: "xs", fw: 700, tt: "uppercase", c: "dimmed", style: { letterSpacing: "0.18em" }, children: eyebrow }) : null,
816
- /* @__PURE__ */ jsx13(Title9, { order: 1, children: title }),
817
- description ? /* @__PURE__ */ jsx13(Text9, { size: "lg", c: "dimmed", children: description }) : null
1213
+ return /* @__PURE__ */ jsxs14(Stack14, { gap: "lg", children: [
1214
+ /* @__PURE__ */ jsx18(Paper2, { withBorder: true, radius: "xl", p: "xl", children: /* @__PURE__ */ jsxs14(Stack14, { gap: "lg", children: [
1215
+ /* @__PURE__ */ jsxs14(Group12, { justify: "space-between", align: "flex-start", gap: "md", children: [
1216
+ /* @__PURE__ */ jsxs14(Stack14, { gap: "xs", maw: 760, children: [
1217
+ eyebrow ? /* @__PURE__ */ jsx18(Text12, { size: "xs", fw: 700, tt: "uppercase", c: "dimmed", style: { letterSpacing: "0.18em" }, children: eyebrow }) : null,
1218
+ /* @__PURE__ */ jsx18(Title12, { order: 1, children: title }),
1219
+ description ? /* @__PURE__ */ jsx18(Text12, { size: "lg", c: "dimmed", children: description }) : null
818
1220
  ] }),
819
- /* @__PURE__ */ jsxs10(Stack10, { align: "flex-end", gap: "xs", children: [
820
- typeof resultCount === "number" ? /* @__PURE__ */ jsxs10(Badge7, { size: "lg", radius: "xl", variant: "light", color: "violet", children: [
1221
+ /* @__PURE__ */ jsxs14(Stack14, { align: "flex-end", gap: "xs", children: [
1222
+ typeof resultCount === "number" ? /* @__PURE__ */ jsxs14(Badge10, { size: "lg", radius: "xl", variant: "light", color: "violet", children: [
821
1223
  resultCount,
822
1224
  " ",
823
1225
  resultLabel
@@ -825,10 +1227,10 @@ function BrowseSurface({
825
1227
  primaryControls
826
1228
  ] })
827
1229
  ] }),
828
- scopeOptions.length ? /* @__PURE__ */ jsxs10(Stack10, { gap: "xs", children: [
829
- /* @__PURE__ */ jsx13(Text9, { size: "sm", fw: 600, c: "dimmed", children: scopeLabel }),
830
- /* @__PURE__ */ jsx13(Group8, { gap: "xs", wrap: "wrap", children: scopeOptions.map((option) => /* @__PURE__ */ jsx13(
831
- Button,
1230
+ scopeOptions.length ? /* @__PURE__ */ jsxs14(Stack14, { gap: "xs", children: [
1231
+ /* @__PURE__ */ jsx18(Text12, { size: "sm", fw: 600, c: "dimmed", children: scopeLabel }),
1232
+ /* @__PURE__ */ jsx18(Group12, { gap: "xs", wrap: "wrap", children: scopeOptions.map((option) => /* @__PURE__ */ jsx18(
1233
+ Button2,
832
1234
  {
833
1235
  variant: option.active ? "filled" : "default",
834
1236
  color: option.active ? "violet" : "gray",
@@ -840,30 +1242,30 @@ function BrowseSurface({
840
1242
  option.id
841
1243
  )) })
842
1244
  ] }) : null,
843
- locationControls ? /* @__PURE__ */ jsxs10(Stack10, { gap: "xs", children: [
844
- /* @__PURE__ */ jsx13(Text9, { size: "sm", fw: 600, c: "dimmed", children: "Location" }),
1245
+ locationControls ? /* @__PURE__ */ jsxs14(Stack14, { gap: "xs", children: [
1246
+ /* @__PURE__ */ jsx18(Text12, { size: "sm", fw: 600, c: "dimmed", children: "Location" }),
845
1247
  locationControls
846
1248
  ] }) : null,
847
- toolbar || sortControl ? /* @__PURE__ */ jsxs10(SimpleGrid2, { cols: { base: 1, lg: sortControl ? 2 : 1 }, spacing: "md", children: [
848
- toolbar ? /* @__PURE__ */ jsx13(
1249
+ toolbar || sortControl ? /* @__PURE__ */ jsxs14(SimpleGrid3, { cols: { base: 1, lg: sortControl ? 2 : 1 }, spacing: "md", children: [
1250
+ toolbar ? /* @__PURE__ */ jsx18(
849
1251
  DataToolbar,
850
1252
  {
851
1253
  ...toolbar,
852
1254
  activeFilters: toolbarFilters.length ? toolbarFilters : toolbar.fallbackActiveFilters
853
1255
  }
854
- ) : /* @__PURE__ */ jsx13(Box3, {}),
855
- sortControl ? /* @__PURE__ */ jsxs10(Stack10, { gap: "xs", align: "stretch", children: [
856
- /* @__PURE__ */ jsx13(Text9, { size: "sm", fw: 600, c: "dimmed", children: "Sort" }),
1256
+ ) : /* @__PURE__ */ jsx18(Box4, {}),
1257
+ sortControl ? /* @__PURE__ */ jsxs14(Stack14, { gap: "xs", align: "stretch", children: [
1258
+ /* @__PURE__ */ jsx18(Text12, { size: "sm", fw: 600, c: "dimmed", children: "Sort" }),
857
1259
  sortControl
858
1260
  ] }) : null
859
1261
  ] }) : null,
860
- mobileFilters ? /* @__PURE__ */ jsxs10(Stack10, { hiddenFrom: "lg", gap: "xs", children: [
861
- /* @__PURE__ */ jsx13(Text9, { size: "sm", fw: 600, c: "dimmed", children: "Filters" }),
1262
+ mobileFilters ? /* @__PURE__ */ jsxs14(Stack14, { hiddenFrom: "lg", gap: "xs", children: [
1263
+ /* @__PURE__ */ jsx18(Text12, { size: "sm", fw: 600, c: "dimmed", children: "Filters" }),
862
1264
  mobileFilters
863
1265
  ] }) : null,
864
- filterDrawer ? /* @__PURE__ */ jsx13(Box3, { hiddenFrom: "lg", children: filterDrawer }) : null,
865
- activeFilters.length ? /* @__PURE__ */ jsx13(Group8, { gap: "xs", wrap: "wrap", children: activeFilters.map((filter) => /* @__PURE__ */ jsx13(
866
- Badge7,
1266
+ filterDrawer ? /* @__PURE__ */ jsx18(Box4, { hiddenFrom: "lg", children: filterDrawer }) : null,
1267
+ activeFilters.length ? /* @__PURE__ */ jsx18(Group12, { gap: "xs", wrap: "wrap", children: activeFilters.map((filter) => /* @__PURE__ */ jsx18(
1268
+ Badge10,
867
1269
  {
868
1270
  variant: "light",
869
1271
  color: "violet",
@@ -880,8 +1282,8 @@ function BrowseSurface({
880
1282
  }
881
1283
 
882
1284
  // src/AccentPanel.tsx
883
- import { Badge as Badge8, Box as Box4, Group as Group9, Paper as Paper3, Stack as Stack11, Text as Text10, Title as Title10 } from "@mantine/core";
884
- import { jsx as jsx14, jsxs as jsxs11 } from "react/jsx-runtime";
1285
+ import { Badge as Badge11, Box as Box5, Group as Group13, Paper as Paper3, Stack as Stack15, Text as Text13, Title as Title13 } from "@mantine/core";
1286
+ import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
885
1287
  var toneStyles = {
886
1288
  gray: {
887
1289
  bg: "light-dark(var(--mantine-color-gray-0), color-mix(in srgb, var(--mantine-color-gray-7) 88%, black))",
@@ -937,25 +1339,52 @@ function AccentPanel({
937
1339
  children
938
1340
  }) {
939
1341
  const styles = resolveAccentPanelStyles(tone, variant);
940
- return /* @__PURE__ */ jsx14(Paper3, { withBorder: true, radius: "lg", p: "lg", style: styles, children: /* @__PURE__ */ jsxs11(Stack11, { gap: "sm", children: [
941
- title || badge ? /* @__PURE__ */ jsxs11(Group9, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "wrap", children: [
942
- title ? /* @__PURE__ */ jsx14(Title10, { order: 4, c: "inherit", children: title }) : /* @__PURE__ */ jsx14(Box4, {}),
943
- badge ? typeof badge === "string" ? /* @__PURE__ */ jsx14(Badge8, { color: tone === "amber" ? "yellow" : tone, variant: "filled", children: badge }) : badge : null
1342
+ return /* @__PURE__ */ jsx19(Paper3, { withBorder: true, radius: "lg", p: "lg", style: styles, children: /* @__PURE__ */ jsxs15(Stack15, { gap: "sm", children: [
1343
+ title || badge ? /* @__PURE__ */ jsxs15(Group13, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "wrap", children: [
1344
+ title ? /* @__PURE__ */ jsx19(Title13, { order: 4, c: "inherit", children: title }) : /* @__PURE__ */ jsx19(Box5, {}),
1345
+ badge ? typeof badge === "string" ? /* @__PURE__ */ jsx19(Badge11, { color: tone === "amber" ? "yellow" : tone, variant: "filled", children: badge }) : badge : null
944
1346
  ] }) : null,
945
- typeof children === "string" ? /* @__PURE__ */ jsx14(Text10, { c: "inherit", children }) : /* @__PURE__ */ jsx14(Box4, { c: "inherit", children })
1347
+ typeof children === "string" ? /* @__PURE__ */ jsx19(Text13, { c: "inherit", children }) : /* @__PURE__ */ jsx19(Box5, { c: "inherit", children })
1348
+ ] }) });
1349
+ }
1350
+
1351
+ // src/DetailProfileShell.tsx
1352
+ import { Divider as Divider2, Paper as Paper4, Stack as Stack16 } from "@mantine/core";
1353
+ import { Fragment as Fragment3, jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
1354
+ function DetailProfileShell({
1355
+ mode = "page",
1356
+ hero,
1357
+ actions,
1358
+ sections,
1359
+ related,
1360
+ padding = "lg",
1361
+ showDividers = true
1362
+ }) {
1363
+ const content = sections.filter(Boolean);
1364
+ return /* @__PURE__ */ jsx20(Paper4, { withBorder: mode === "drawer", radius: mode === "drawer" ? "xl" : "md", p: padding, children: /* @__PURE__ */ jsxs16(Stack16, { gap: "lg", children: [
1365
+ hero,
1366
+ actions,
1367
+ content.map((section, index) => /* @__PURE__ */ jsxs16(Stack16, { gap: "lg", children: [
1368
+ index > 0 && showDividers ? /* @__PURE__ */ jsx20(Divider2, {}) : null,
1369
+ section
1370
+ ] }, index)),
1371
+ related ? /* @__PURE__ */ jsxs16(Fragment3, { children: [
1372
+ content.length && showDividers ? /* @__PURE__ */ jsx20(Divider2, {}) : null,
1373
+ related
1374
+ ] }) : null
946
1375
  ] }) });
947
1376
  }
948
1377
 
949
1378
  // src/PublicNav.tsx
950
- import { Anchor as Anchor2, Group as Group10 } from "@mantine/core";
951
- import { jsx as jsx15 } from "react/jsx-runtime";
1379
+ import { Anchor as Anchor2, Group as Group14 } from "@mantine/core";
1380
+ import { jsx as jsx21 } from "react/jsx-runtime";
952
1381
  function PublicNav({ items, activeId, renderLink }) {
953
- return /* @__PURE__ */ jsx15(Group10, { component: "nav", "aria-label": "Primary", gap: "lg", wrap: "nowrap", children: items.map((item) => {
1382
+ return /* @__PURE__ */ jsx21(Group14, { component: "nav", "aria-label": "Primary", gap: "lg", wrap: "nowrap", children: items.map((item) => {
954
1383
  const active = item.id === activeId;
955
1384
  if (renderLink) {
956
- return /* @__PURE__ */ jsx15("span", { children: renderLink(item, active) }, item.id);
1385
+ return /* @__PURE__ */ jsx21("span", { children: renderLink(item, active) }, item.id);
957
1386
  }
958
- return /* @__PURE__ */ jsx15(
1387
+ return /* @__PURE__ */ jsx21(
959
1388
  Anchor2,
960
1389
  {
961
1390
  href: item.href,
@@ -973,16 +1402,16 @@ function PublicNav({ items, activeId, renderLink }) {
973
1402
  }
974
1403
 
975
1404
  // src/PublicShell.tsx
976
- import { AppShell, Box as Box5, Burger, Container, Group as Group11, Stack as Stack12, Text as Text11 } from "@mantine/core";
977
- import { jsx as jsx16, jsxs as jsxs12 } from "react/jsx-runtime";
1405
+ import { AppShell, Box as Box6, Burger, Container, Group as Group15, Stack as Stack17, Text as Text14 } from "@mantine/core";
1406
+ import { jsx as jsx22, jsxs as jsxs17 } from "react/jsx-runtime";
978
1407
  function InlineMobileNavigation({
979
1408
  mobileNavigation,
980
1409
  className,
981
1410
  mode
982
1411
  }) {
983
- return /* @__PURE__ */ jsxs12(Box5, { component: "details", hiddenFrom: "sm", className, children: [
984
- /* @__PURE__ */ jsxs12(
985
- Box5,
1412
+ return /* @__PURE__ */ jsxs17(Box6, { component: "details", hiddenFrom: "sm", className, children: [
1413
+ /* @__PURE__ */ jsxs17(
1414
+ Box6,
986
1415
  {
987
1416
  component: "summary",
988
1417
  "aria-label": mode === "drawer" ? "Open site navigation drawer" : "Open site navigation",
@@ -994,13 +1423,13 @@ function InlineMobileNavigation({
994
1423
  gap: "0.5rem"
995
1424
  },
996
1425
  children: [
997
- /* @__PURE__ */ jsx16(Burger, { opened: false, "aria-hidden": true }),
998
- /* @__PURE__ */ jsx16(Text11, { size: "sm", fw: 600, children: "Menu" })
1426
+ /* @__PURE__ */ jsx22(Burger, { opened: false, "aria-hidden": true }),
1427
+ /* @__PURE__ */ jsx22(Text14, { size: "sm", fw: 600, children: "Menu" })
999
1428
  ]
1000
1429
  }
1001
1430
  ),
1002
- /* @__PURE__ */ jsx16(
1003
- Box5,
1431
+ /* @__PURE__ */ jsx22(
1432
+ Box6,
1004
1433
  {
1005
1434
  mt: "sm",
1006
1435
  p: "sm",
@@ -1009,7 +1438,7 @@ function InlineMobileNavigation({
1009
1438
  border: "1px solid var(--mantine-color-default-border)",
1010
1439
  background: mode === "drawer" ? "light-dark(var(--mantine-color-white), color-mix(in srgb, var(--mantine-color-dark-7) 92%, black))" : "var(--mantine-color-body)"
1011
1440
  },
1012
- children: /* @__PURE__ */ jsx16(Stack12, { gap: "sm", children: mobileNavigation })
1441
+ children: /* @__PURE__ */ jsx22(Stack17, { gap: "sm", children: mobileNavigation })
1013
1442
  }
1014
1443
  )
1015
1444
  ] });
@@ -1030,13 +1459,13 @@ function PublicShell({
1030
1459
  mobileNavigationMode = "sheet",
1031
1460
  classNames
1032
1461
  }) {
1033
- const resolvedNavigation = navigation ?? (navItems ? /* @__PURE__ */ jsx16(PublicNav, { items: navItems, activeId: activeNavId }) : null);
1462
+ const resolvedNavigation = navigation ?? (navItems ? /* @__PURE__ */ jsx22(PublicNav, { items: navItems, activeId: activeNavId }) : null);
1034
1463
  const containerSize = maxContentWidth ?? (compact ? "md" : "lg");
1035
1464
  const headerHeight = headerVariant === "compact" ? 64 : headerVariant === "branded-quiet" ? 88 : 72;
1036
1465
  const mainPadding = headerVariant === "compact" ? "lg" : "xl";
1037
1466
  const usesInlineMobileNavigation = Boolean(mobileNavigation) && mobileNavigationMode !== "sheet";
1038
1467
  const usesSheetMobileNavigation = Boolean(mobileNavigation) && mobileNavigationMode === "sheet";
1039
- return /* @__PURE__ */ jsxs12(
1468
+ return /* @__PURE__ */ jsxs17(
1040
1469
  AppShell,
1041
1470
  {
1042
1471
  className: classNames?.root,
@@ -1044,16 +1473,16 @@ function PublicShell({
1044
1473
  footer: usesSheetMobileNavigation ? { height: 68 } : void 0,
1045
1474
  padding: 0,
1046
1475
  children: [
1047
- /* @__PURE__ */ jsx16(AppShell.Header, { withBorder: headerBordered, className: classNames?.header, "data-header-variant": headerVariant, children: /* @__PURE__ */ jsx16(Container, { size: containerSize, h: "100%", py: headerVariant === "branded-quiet" ? "sm" : 0, children: /* @__PURE__ */ jsxs12(
1048
- Group11,
1476
+ /* @__PURE__ */ jsx22(AppShell.Header, { withBorder: headerBordered, className: classNames?.header, "data-header-variant": headerVariant, children: /* @__PURE__ */ jsx22(Container, { size: containerSize, h: "100%", py: headerVariant === "branded-quiet" ? "sm" : 0, children: /* @__PURE__ */ jsxs17(
1477
+ Group15,
1049
1478
  {
1050
1479
  h: "100%",
1051
1480
  justify: "space-between",
1052
1481
  wrap: "nowrap",
1053
1482
  gap: headerVariant === "compact" ? "sm" : "lg",
1054
1483
  children: [
1055
- /* @__PURE__ */ jsxs12(Group11, { wrap: "nowrap", gap: headerVariant === "compact" ? "xs" : "sm", className: classNames?.brand, children: [
1056
- usesInlineMobileNavigation ? /* @__PURE__ */ jsx16(
1484
+ /* @__PURE__ */ jsxs17(Group15, { wrap: "nowrap", gap: headerVariant === "compact" ? "xs" : "sm", className: classNames?.brand, children: [
1485
+ usesInlineMobileNavigation ? /* @__PURE__ */ jsx22(
1057
1486
  InlineMobileNavigation,
1058
1487
  {
1059
1488
  mobileNavigation,
@@ -1061,17 +1490,17 @@ function PublicShell({
1061
1490
  mode: mobileNavigationMode
1062
1491
  }
1063
1492
  ) : null,
1064
- /* @__PURE__ */ jsx16(Box5, { children: brand })
1493
+ /* @__PURE__ */ jsx22(Box6, { children: brand })
1065
1494
  ] }),
1066
- /* @__PURE__ */ jsx16(Group11, { visibleFrom: "sm", gap: headerVariant === "compact" ? "md" : "lg", className: classNames?.navigation, children: resolvedNavigation }),
1067
- /* @__PURE__ */ jsx16(Group11, { gap: "sm", className: classNames?.actions, children: actions })
1495
+ /* @__PURE__ */ jsx22(Group15, { visibleFrom: "sm", gap: headerVariant === "compact" ? "md" : "lg", className: classNames?.navigation, children: resolvedNavigation }),
1496
+ /* @__PURE__ */ jsx22(Group15, { gap: "sm", className: classNames?.actions, children: actions })
1068
1497
  ]
1069
1498
  }
1070
1499
  ) }) }),
1071
- usesSheetMobileNavigation ? /* @__PURE__ */ jsx16(AppShell.Footer, { withBorder: true, children: /* @__PURE__ */ jsx16(Container, { size: containerSize, h: "100%", children: /* @__PURE__ */ jsx16(Group11, { h: "100%", justify: "space-around", wrap: "nowrap", children: mobileNavigation }) }) }) : null,
1072
- /* @__PURE__ */ jsxs12(AppShell.Main, { children: [
1073
- /* @__PURE__ */ jsx16(Container, { size: containerSize, py: mainPadding, className: classNames?.content, children: /* @__PURE__ */ jsx16(Stack12, { gap: "xl", children }) }),
1074
- footer ? /* @__PURE__ */ jsx16(Box5, { component: typeof footer === "string" ? "footer" : "div", py: "xl", children: /* @__PURE__ */ jsx16(Container, { size: containerSize, children: typeof footer === "string" ? /* @__PURE__ */ jsx16(Text11, { size: "sm", c: "dimmed", children: footer }) : footer }) }) : null
1500
+ usesSheetMobileNavigation ? /* @__PURE__ */ jsx22(AppShell.Footer, { withBorder: true, children: /* @__PURE__ */ jsx22(Container, { size: containerSize, h: "100%", children: /* @__PURE__ */ jsx22(Group15, { h: "100%", justify: "space-around", wrap: "nowrap", children: mobileNavigation }) }) }) : null,
1501
+ /* @__PURE__ */ jsxs17(AppShell.Main, { children: [
1502
+ /* @__PURE__ */ jsx22(Container, { size: containerSize, py: mainPadding, className: classNames?.content, children: /* @__PURE__ */ jsx22(Stack17, { gap: "xl", children }) }),
1503
+ footer ? /* @__PURE__ */ jsx22(Box6, { component: typeof footer === "string" ? "footer" : "div", py: "xl", children: /* @__PURE__ */ jsx22(Container, { size: containerSize, children: typeof footer === "string" ? /* @__PURE__ */ jsx22(Text14, { size: "sm", c: "dimmed", children: footer }) : footer }) }) : null
1075
1504
  ] })
1076
1505
  ]
1077
1506
  }
@@ -1079,18 +1508,18 @@ function PublicShell({
1079
1508
  }
1080
1509
 
1081
1510
  // src/PublicSiteFooter.tsx
1082
- import { Group as Group12, Stack as Stack13, Text as Text12 } from "@mantine/core";
1083
- import { jsx as jsx17, jsxs as jsxs13 } from "react/jsx-runtime";
1511
+ import { Group as Group16, Stack as Stack18, Text as Text15 } from "@mantine/core";
1512
+ import { jsx as jsx23, jsxs as jsxs18 } from "react/jsx-runtime";
1084
1513
  function PublicSiteFooter({ children, meta }) {
1085
- return /* @__PURE__ */ jsxs13(Stack13, { component: "footer", gap: "xs", children: [
1086
- children ? /* @__PURE__ */ jsx17(Text12, { size: "sm", children }) : null,
1087
- meta ? /* @__PURE__ */ jsx17(Group12, { gap: "sm", children: /* @__PURE__ */ jsx17(Text12, { size: "xs", c: "dimmed", children: meta }) }) : null
1514
+ return /* @__PURE__ */ jsxs18(Stack18, { component: "footer", gap: "xs", children: [
1515
+ children ? /* @__PURE__ */ jsx23(Text15, { size: "sm", children }) : null,
1516
+ meta ? /* @__PURE__ */ jsx23(Group16, { gap: "sm", children: /* @__PURE__ */ jsx23(Text15, { size: "xs", c: "dimmed", children: meta }) }) : null
1088
1517
  ] });
1089
1518
  }
1090
1519
 
1091
1520
  // src/PublicBrandFooter.tsx
1092
- import { Box as Box6, Divider as Divider2, Grid, Group as Group13, Paper as Paper4, Stack as Stack14, Text as Text13, Title as Title11 } from "@mantine/core";
1093
- import { Fragment as Fragment2, jsx as jsx18, jsxs as jsxs14 } from "react/jsx-runtime";
1521
+ import { Box as Box7, Divider as Divider3, Grid, Group as Group17, Paper as Paper5, Stack as Stack19, Text as Text16, Title as Title14 } from "@mantine/core";
1522
+ import { Fragment as Fragment4, jsx as jsx24, jsxs as jsxs19 } from "react/jsx-runtime";
1094
1523
  function PublicBrandFooter({
1095
1524
  media,
1096
1525
  brandTitle,
@@ -1105,8 +1534,8 @@ function PublicBrandFooter({
1105
1534
  const mediaSpan = layoutVariant === "immersive-media" ? 5 : 4;
1106
1535
  const primarySpan = media ? layoutVariant === "balanced-quote" ? 4 : 4 : secondary ? 6 : 12;
1107
1536
  const secondarySpan = media ? Math.max(3, 12 - mediaSpan - primarySpan) : Math.max(4, 12 - primarySpan);
1108
- return /* @__PURE__ */ jsx18(
1109
- Paper4,
1537
+ return /* @__PURE__ */ jsx24(
1538
+ Paper5,
1110
1539
  {
1111
1540
  component: "footer",
1112
1541
  withBorder: true,
@@ -1114,19 +1543,19 @@ function PublicBrandFooter({
1114
1543
  p: compact ? "lg" : "xl",
1115
1544
  className: classNames?.root,
1116
1545
  "data-layout-variant": layoutVariant,
1117
- children: /* @__PURE__ */ jsxs14(Stack14, { gap: "lg", children: [
1118
- /* @__PURE__ */ jsxs14(Grid, { gutter: compact ? "lg" : "xl", align: "flex-start", children: [
1119
- media ? /* @__PURE__ */ jsx18(Grid.Col, { span: { base: 12, md: mediaSpan }, children: /* @__PURE__ */ jsx18(Box6, { className: classNames?.media, children: media }) }) : null,
1120
- /* @__PURE__ */ jsx18(Grid.Col, { span: { base: 12, md: primarySpan }, children: /* @__PURE__ */ jsxs14(Stack14, { gap: compact ? "xs" : "sm", className: classNames?.primary, children: [
1121
- brandTitle ? /* @__PURE__ */ jsx18(Title11, { order: 4, children: brandTitle }) : null,
1122
- description ? /* @__PURE__ */ jsx18(Text13, { c: "dimmed", children: description }) : null,
1123
- actions ? /* @__PURE__ */ jsx18(Box6, { children: actions }) : null
1546
+ children: /* @__PURE__ */ jsxs19(Stack19, { gap: "lg", children: [
1547
+ /* @__PURE__ */ jsxs19(Grid, { gutter: compact ? "lg" : "xl", align: "flex-start", children: [
1548
+ media ? /* @__PURE__ */ jsx24(Grid.Col, { span: { base: 12, md: mediaSpan }, children: /* @__PURE__ */ jsx24(Box7, { className: classNames?.media, children: media }) }) : null,
1549
+ /* @__PURE__ */ jsx24(Grid.Col, { span: { base: 12, md: primarySpan }, children: /* @__PURE__ */ jsxs19(Stack19, { gap: compact ? "xs" : "sm", className: classNames?.primary, children: [
1550
+ brandTitle ? /* @__PURE__ */ jsx24(Title14, { order: 4, children: brandTitle }) : null,
1551
+ description ? /* @__PURE__ */ jsx24(Text16, { c: "dimmed", children: description }) : null,
1552
+ actions ? /* @__PURE__ */ jsx24(Box7, { children: actions }) : null
1124
1553
  ] }) }),
1125
- secondary ? /* @__PURE__ */ jsx18(Grid.Col, { span: { base: 12, md: secondarySpan }, children: /* @__PURE__ */ jsx18(Stack14, { gap: compact ? "xs" : "sm", className: classNames?.secondary, children: secondary }) }) : null
1554
+ secondary ? /* @__PURE__ */ jsx24(Grid.Col, { span: { base: 12, md: secondarySpan }, children: /* @__PURE__ */ jsx24(Stack19, { gap: compact ? "xs" : "sm", className: classNames?.secondary, children: secondary }) }) : null
1126
1555
  ] }),
1127
- legal ? /* @__PURE__ */ jsxs14(Fragment2, { children: [
1128
- /* @__PURE__ */ jsx18(Divider2, {}),
1129
- /* @__PURE__ */ jsx18(Group13, { justify: "space-between", gap: "sm", wrap: "wrap", className: classNames?.legal, children: typeof legal === "string" ? /* @__PURE__ */ jsx18(Text13, { size: "sm", c: "dimmed", children: legal }) : legal })
1556
+ legal ? /* @__PURE__ */ jsxs19(Fragment4, { children: [
1557
+ /* @__PURE__ */ jsx24(Divider3, {}),
1558
+ /* @__PURE__ */ jsx24(Group17, { justify: "space-between", gap: "sm", wrap: "wrap", className: classNames?.legal, children: typeof legal === "string" ? /* @__PURE__ */ jsx24(Text16, { size: "sm", c: "dimmed", children: legal }) : legal })
1130
1559
  ] }) : null
1131
1560
  ] })
1132
1561
  }
@@ -1134,57 +1563,136 @@ function PublicBrandFooter({
1134
1563
  }
1135
1564
 
1136
1565
  // src/AuthShell.tsx
1137
- import { Box as Box7, Card as Card6, Container as Container2, Group as Group14, Stack as Stack15, Text as Text14, Title as Title12 } from "@mantine/core";
1138
- import { jsx as jsx19, jsxs as jsxs15 } from "react/jsx-runtime";
1139
- function AuthShell({ title, description, brand, footer, helper, children }) {
1140
- return /* @__PURE__ */ jsx19(Box7, { py: { base: "xl", md: "4rem" }, children: /* @__PURE__ */ jsx19(Container2, { size: "xs", children: /* @__PURE__ */ jsxs15(Stack15, { gap: "xl", children: [
1141
- brand ? /* @__PURE__ */ jsx19(Group14, { justify: "center", children: brand }) : null,
1142
- /* @__PURE__ */ jsx19(Card6, { withBorder: true, radius: "lg", padding: "xl", children: /* @__PURE__ */ jsxs15(Stack15, { gap: "lg", children: [
1143
- /* @__PURE__ */ jsxs15(Stack15, { gap: "xs", ta: "center", children: [
1144
- /* @__PURE__ */ jsx19(Title12, { order: 2, children: title }),
1145
- description ? /* @__PURE__ */ jsx19(Text14, { c: "dimmed", size: "sm", children: description }) : null
1566
+ import { Box as Box8, Card as Card8, Container as Container2, Divider as Divider4, Group as Group18, Stack as Stack20, Text as Text17, Title as Title15 } from "@mantine/core";
1567
+ import { jsx as jsx25, jsxs as jsxs20 } from "react/jsx-runtime";
1568
+ function AuthShell({
1569
+ title,
1570
+ description,
1571
+ brand,
1572
+ headerActions,
1573
+ footer,
1574
+ helper,
1575
+ socialAuth,
1576
+ dividerLabel = "Or continue with your account",
1577
+ children
1578
+ }) {
1579
+ return /* @__PURE__ */ jsx25(Box8, { py: { base: "xl", md: "4rem" }, children: /* @__PURE__ */ jsx25(Container2, { size: "xs", children: /* @__PURE__ */ jsxs20(Stack20, { gap: "xl", children: [
1580
+ brand || headerActions ? /* @__PURE__ */ jsxs20(Group18, { justify: brand && headerActions ? "space-between" : "center", align: "center", children: [
1581
+ brand ? /* @__PURE__ */ jsx25(Box8, { children: brand }) : /* @__PURE__ */ jsx25(Box8, {}),
1582
+ headerActions ? /* @__PURE__ */ jsx25(Group18, { gap: "sm", children: headerActions }) : null
1583
+ ] }) : null,
1584
+ /* @__PURE__ */ jsx25(Card8, { withBorder: true, radius: "lg", padding: "xl", children: /* @__PURE__ */ jsxs20(Stack20, { gap: "lg", children: [
1585
+ /* @__PURE__ */ jsxs20(Stack20, { gap: "xs", ta: "center", children: [
1586
+ /* @__PURE__ */ jsx25(Title15, { order: 2, children: title }),
1587
+ description ? /* @__PURE__ */ jsx25(Text17, { c: "dimmed", size: "sm", children: description }) : null
1146
1588
  ] }),
1589
+ socialAuth ? /* @__PURE__ */ jsx25(Box8, { children: socialAuth }) : null,
1590
+ socialAuth ? /* @__PURE__ */ jsx25(Divider4, { label: dividerLabel, labelPosition: "center" }) : null,
1147
1591
  children,
1148
- helper ? /* @__PURE__ */ jsx19(Text14, { size: "sm", c: "dimmed", ta: "center", children: helper }) : null
1592
+ helper ? /* @__PURE__ */ jsx25(Text17, { size: "sm", c: "dimmed", ta: "center", children: helper }) : null
1149
1593
  ] }) }),
1150
- footer ? /* @__PURE__ */ jsx19(Text14, { size: "sm", c: "dimmed", ta: "center", children: footer }) : null
1594
+ footer ? /* @__PURE__ */ jsx25(Text17, { size: "sm", c: "dimmed", ta: "center", children: footer }) : null
1151
1595
  ] }) }) });
1152
1596
  }
1153
1597
 
1598
+ // src/SocialAuthButtons.tsx
1599
+ import { Button as Button3, Divider as Divider5, Group as Group19, SimpleGrid as SimpleGrid4, Stack as Stack21, Text as Text18, ThemeIcon as ThemeIcon7 } from "@mantine/core";
1600
+ import { jsx as jsx26, jsxs as jsxs21 } from "react/jsx-runtime";
1601
+ var providerConfig = {
1602
+ google: { label: "Google", mark: "G", color: "red" },
1603
+ apple: { label: "Apple", mark: "A", color: "dark" },
1604
+ github: { label: "GitHub", mark: "GH", color: "gray" },
1605
+ facebook: { label: "Facebook", mark: "F", color: "blue" },
1606
+ microsoft: { label: "Microsoft", mark: "M", color: "cyan" },
1607
+ linkedin: { label: "LinkedIn", mark: "in", color: "blue" },
1608
+ discord: { label: "Discord", mark: "D", color: "indigo" },
1609
+ x: { label: "X", mark: "X", color: "dark" },
1610
+ email: { label: "Email", mark: "@", color: "gray" }
1611
+ };
1612
+ function ProviderMark({ id }) {
1613
+ const config = providerConfig[id] ?? { label: id, mark: id.slice(0, 2).toUpperCase(), color: "gray" };
1614
+ return /* @__PURE__ */ jsx26(ThemeIcon7, { variant: "light", color: config.color, radius: "xl", size: "md", "aria-hidden": "true", children: /* @__PURE__ */ jsx26(Text18, { size: "xs", fw: 700, children: config.mark }) });
1615
+ }
1616
+ function SocialAuthButton({ provider, compact = false }) {
1617
+ const config = providerConfig[provider.id] ?? { label: provider.id, mark: provider.id.slice(0, 2).toUpperCase(), color: "gray" };
1618
+ const label = provider.label ?? `Continue with ${config.label}`;
1619
+ const buttonProps = provider.href ? { component: "a", href: provider.href } : { onClick: provider.onClick };
1620
+ return /* @__PURE__ */ jsx26(
1621
+ Button3,
1622
+ {
1623
+ variant: "default",
1624
+ justify: "space-between",
1625
+ fullWidth: true,
1626
+ size: compact ? "sm" : "md",
1627
+ leftSection: /* @__PURE__ */ jsx26(ProviderMark, { id: provider.id }),
1628
+ disabled: provider.disabled,
1629
+ loading: provider.loading,
1630
+ ...buttonProps,
1631
+ children: /* @__PURE__ */ jsxs21(Stack21, { gap: 0, align: "flex-start", children: [
1632
+ /* @__PURE__ */ jsx26(Text18, { inherit: true, children: label }),
1633
+ provider.description ? /* @__PURE__ */ jsx26(Text18, { size: "xs", c: "dimmed", lh: 1.2, children: provider.description }) : null
1634
+ ] })
1635
+ }
1636
+ );
1637
+ }
1638
+ function SocialAuthButtons({
1639
+ providers,
1640
+ title = "Continue with a trusted provider",
1641
+ description,
1642
+ layout = "stack",
1643
+ compact = false
1644
+ }) {
1645
+ if (!providers.length) {
1646
+ return null;
1647
+ }
1648
+ const content = providers.map((provider) => /* @__PURE__ */ jsx26(SocialAuthButton, { provider, compact }, provider.id));
1649
+ return /* @__PURE__ */ jsxs21(Stack21, { gap: "md", children: [
1650
+ /* @__PURE__ */ jsxs21(Stack21, { gap: 4, ta: "center", children: [
1651
+ /* @__PURE__ */ jsxs21(Group19, { justify: "center", gap: "xs", children: [
1652
+ /* @__PURE__ */ jsx26(GdsIcons.Login, { size: "1rem" }),
1653
+ /* @__PURE__ */ jsx26(Text18, { fw: 600, children: title })
1654
+ ] }),
1655
+ description ? /* @__PURE__ */ jsx26(Text18, { size: "sm", c: "dimmed", children: description }) : null
1656
+ ] }),
1657
+ /* @__PURE__ */ jsx26(Divider5, {}),
1658
+ layout === "grid" ? /* @__PURE__ */ jsx26(SimpleGrid4, { cols: { base: 1, sm: 2 }, spacing: "sm", children: content }) : /* @__PURE__ */ jsx26(Stack21, { gap: "sm", children: content })
1659
+ ] });
1660
+ }
1661
+
1154
1662
  // src/ArticleShell.tsx
1155
- import { Container as Container3, Group as Group15, Stack as Stack16, Text as Text15, Title as Title13 } from "@mantine/core";
1156
- import { jsx as jsx20, jsxs as jsxs16 } from "react/jsx-runtime";
1663
+ import { Container as Container3, Group as Group20, Stack as Stack22, Text as Text19, Title as Title16 } from "@mantine/core";
1664
+ import { jsx as jsx27, jsxs as jsxs22 } from "react/jsx-runtime";
1157
1665
  function ArticleShell({ eyebrow, title, lead, meta, sideRail, children }) {
1158
- return /* @__PURE__ */ jsx20(Container3, { size: "lg", py: "xl", children: /* @__PURE__ */ jsxs16(Group15, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
1159
- /* @__PURE__ */ jsxs16(Stack16, { gap: "lg", maw: 760, flex: 1, children: [
1160
- /* @__PURE__ */ jsxs16(Stack16, { gap: "sm", children: [
1161
- eyebrow ? /* @__PURE__ */ jsx20(Text15, { size: "sm", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
1162
- /* @__PURE__ */ jsx20(Title13, { order: 1, children: title }),
1163
- lead ? /* @__PURE__ */ jsx20(Text15, { size: "lg", c: "dimmed", children: lead }) : null,
1164
- meta ? /* @__PURE__ */ jsx20(Group15, { gap: "md", children: meta }) : null
1666
+ return /* @__PURE__ */ jsx27(Container3, { size: "lg", py: "xl", children: /* @__PURE__ */ jsxs22(Group20, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
1667
+ /* @__PURE__ */ jsxs22(Stack22, { gap: "lg", maw: 760, flex: 1, children: [
1668
+ /* @__PURE__ */ jsxs22(Stack22, { gap: "sm", children: [
1669
+ eyebrow ? /* @__PURE__ */ jsx27(Text19, { size: "sm", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
1670
+ /* @__PURE__ */ jsx27(Title16, { order: 1, children: title }),
1671
+ lead ? /* @__PURE__ */ jsx27(Text19, { size: "lg", c: "dimmed", children: lead }) : null,
1672
+ meta ? /* @__PURE__ */ jsx27(Group20, { gap: "md", children: meta }) : null
1165
1673
  ] }),
1166
- /* @__PURE__ */ jsx20(Stack16, { gap: "md", children })
1674
+ /* @__PURE__ */ jsx27(Stack22, { gap: "md", children })
1167
1675
  ] }),
1168
- sideRail ? /* @__PURE__ */ jsx20(Stack16, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1676
+ sideRail ? /* @__PURE__ */ jsx27(Stack22, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1169
1677
  ] }) });
1170
1678
  }
1171
1679
 
1172
1680
  // src/CtaButtonGroup.tsx
1173
- import { Group as Group16, Stack as Stack17 } from "@mantine/core";
1174
- import { jsx as jsx21, jsxs as jsxs17 } from "react/jsx-runtime";
1681
+ import { Group as Group21, Stack as Stack23 } from "@mantine/core";
1682
+ import { jsx as jsx28, jsxs as jsxs23 } from "react/jsx-runtime";
1175
1683
  function CtaButtonGroup({ primary, secondary, tertiary }) {
1176
- return /* @__PURE__ */ jsxs17(Stack17, { gap: "sm", children: [
1177
- /* @__PURE__ */ jsxs17(Group16, { gap: "sm", align: "stretch", children: [
1178
- /* @__PURE__ */ jsx21("div", { children: primary }),
1179
- secondary ? /* @__PURE__ */ jsx21("div", { children: secondary }) : null
1684
+ return /* @__PURE__ */ jsxs23(Stack23, { gap: "sm", children: [
1685
+ /* @__PURE__ */ jsxs23(Group21, { gap: "sm", align: "stretch", children: [
1686
+ /* @__PURE__ */ jsx28("div", { children: primary }),
1687
+ secondary ? /* @__PURE__ */ jsx28("div", { children: secondary }) : null
1180
1688
  ] }),
1181
- tertiary ? /* @__PURE__ */ jsx21("div", { children: tertiary }) : null
1689
+ tertiary ? /* @__PURE__ */ jsx28("div", { children: tertiary }) : null
1182
1690
  ] });
1183
1691
  }
1184
1692
 
1185
1693
  // src/DocsPageShell.tsx
1186
- import { Anchor as Anchor3, Breadcrumbs, Container as Container4, Group as Group17, Stack as Stack18, Text as Text16, Title as Title14 } from "@mantine/core";
1187
- import { jsx as jsx22, jsxs as jsxs18 } from "react/jsx-runtime";
1694
+ import { Anchor as Anchor3, Breadcrumbs, Container as Container4, Group as Group22, Stack as Stack24, Text as Text20, Title as Title17 } from "@mantine/core";
1695
+ import { jsx as jsx29, jsxs as jsxs24 } from "react/jsx-runtime";
1188
1696
  function DocsPageShell({
1189
1697
  breadcrumbs = [],
1190
1698
  title,
@@ -1195,27 +1703,27 @@ function DocsPageShell({
1195
1703
  footerNext,
1196
1704
  children
1197
1705
  }) {
1198
- return /* @__PURE__ */ jsx22(Container4, { size: "lg", py: "xl", children: /* @__PURE__ */ jsxs18(Group17, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
1199
- /* @__PURE__ */ jsxs18(Stack18, { component: "article", gap: "lg", maw: 760, flex: 1, children: [
1200
- breadcrumbs.length ? /* @__PURE__ */ jsx22(Breadcrumbs, { children: breadcrumbs.map(
1201
- (crumb) => crumb.href ? /* @__PURE__ */ jsx22(Anchor3, { href: crumb.href, children: crumb.label }, `${crumb.label}-${crumb.href}`) : /* @__PURE__ */ jsx22(Text16, { children: crumb.label }, crumb.label)
1706
+ return /* @__PURE__ */ jsx29(Container4, { size: "lg", py: "xl", children: /* @__PURE__ */ jsxs24(Group22, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
1707
+ /* @__PURE__ */ jsxs24(Stack24, { component: "article", gap: "lg", maw: 760, flex: 1, children: [
1708
+ breadcrumbs.length ? /* @__PURE__ */ jsx29(Breadcrumbs, { children: breadcrumbs.map(
1709
+ (crumb) => crumb.href ? /* @__PURE__ */ jsx29(Anchor3, { href: crumb.href, children: crumb.label }, `${crumb.label}-${crumb.href}`) : /* @__PURE__ */ jsx29(Text20, { children: crumb.label }, crumb.label)
1202
1710
  ) }) : null,
1203
- /* @__PURE__ */ jsxs18(Stack18, { gap: "sm", children: [
1204
- eyebrow ? /* @__PURE__ */ jsx22(Text16, { size: "sm", fw: 700, c: "dimmed", children: eyebrow }) : null,
1205
- /* @__PURE__ */ jsx22(Title14, { order: 1, children: title }),
1206
- lead ? /* @__PURE__ */ jsx22(Text16, { size: "lg", c: "dimmed", children: lead }) : null,
1207
- meta ? /* @__PURE__ */ jsx22(Group17, { gap: "md", children: meta }) : null
1711
+ /* @__PURE__ */ jsxs24(Stack24, { gap: "sm", children: [
1712
+ eyebrow ? /* @__PURE__ */ jsx29(Text20, { size: "sm", fw: 700, c: "dimmed", children: eyebrow }) : null,
1713
+ /* @__PURE__ */ jsx29(Title17, { order: 1, children: title }),
1714
+ lead ? /* @__PURE__ */ jsx29(Text20, { size: "lg", c: "dimmed", children: lead }) : null,
1715
+ meta ? /* @__PURE__ */ jsx29(Group22, { gap: "md", children: meta }) : null
1208
1716
  ] }),
1209
- /* @__PURE__ */ jsx22(Stack18, { gap: "md", children }),
1210
- footerNext ? /* @__PURE__ */ jsx22(Anchor3, { href: footerNext.href, fw: 600, children: footerNext.label }) : null
1717
+ /* @__PURE__ */ jsx29(Stack24, { gap: "md", children }),
1718
+ footerNext ? /* @__PURE__ */ jsx29(Anchor3, { href: footerNext.href, fw: 600, children: footerNext.label }) : null
1211
1719
  ] }),
1212
- sideRail ? /* @__PURE__ */ jsx22(Stack18, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1720
+ sideRail ? /* @__PURE__ */ jsx29(Stack24, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
1213
1721
  ] }) });
1214
1722
  }
1215
1723
 
1216
1724
  // src/EditorialHero.tsx
1217
- import { Anchor as Anchor4, AspectRatio as AspectRatio3, Box as Box8, Grid as Grid2, Group as Group18, Paper as Paper5, Skeleton as Skeleton2, Stack as Stack19, Text as Text17, ThemeIcon as ThemeIcon5, Title as Title15 } from "@mantine/core";
1218
- import { jsx as jsx23, jsxs as jsxs19 } from "react/jsx-runtime";
1725
+ import { Anchor as Anchor4, AspectRatio as AspectRatio5, Box as Box9, Grid as Grid2, Group as Group23, Paper as Paper6, Skeleton as Skeleton3, Stack as Stack25, Text as Text21, ThemeIcon as ThemeIcon8, Title as Title18 } from "@mantine/core";
1726
+ import { jsx as jsx30, jsxs as jsxs25 } from "react/jsx-runtime";
1219
1727
  function resolveActionVariant(action, index, seenPrimary) {
1220
1728
  const requested = action.variant ?? (index === 0 ? "primary" : "secondary");
1221
1729
  if (requested === "primary" && !seenPrimary) {
@@ -1227,7 +1735,7 @@ function resolveActionVariant(action, index, seenPrimary) {
1227
1735
  return { variant: "default", seenPrimary };
1228
1736
  }
1229
1737
  function HeroAction({ action, variant }) {
1230
- const content = /* @__PURE__ */ jsx23(
1738
+ const content = /* @__PURE__ */ jsx30(
1231
1739
  Anchor4,
1232
1740
  {
1233
1741
  href: action.href,
@@ -1252,8 +1760,8 @@ function HeroAction({ action, variant }) {
1252
1760
  }
1253
1761
  );
1254
1762
  if (!action.href) {
1255
- return /* @__PURE__ */ jsx23(
1256
- Box8,
1763
+ return /* @__PURE__ */ jsx30(
1764
+ Box9,
1257
1765
  {
1258
1766
  component: "button",
1259
1767
  type: "button",
@@ -1280,30 +1788,30 @@ function HeroAction({ action, variant }) {
1280
1788
  return content;
1281
1789
  }
1282
1790
  function LoadingHero({ compact }) {
1283
- return /* @__PURE__ */ jsx23(Paper5, { withBorder: true, radius: "xl", p: compact ? "lg" : "xl", children: /* @__PURE__ */ jsxs19(Grid2, { gutter: compact ? "lg" : "xl", align: "center", children: [
1284
- /* @__PURE__ */ jsx23(Grid2.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsxs19(Stack19, { gap: "md", children: [
1285
- /* @__PURE__ */ jsx23(Skeleton2, { height: 16, width: 96, radius: "xl" }),
1286
- /* @__PURE__ */ jsx23(Skeleton2, { height: 48, width: "90%", radius: "md" }),
1287
- /* @__PURE__ */ jsx23(Skeleton2, { height: 18, width: "100%", radius: "md" }),
1288
- /* @__PURE__ */ jsx23(Skeleton2, { height: 18, width: "82%", radius: "md" }),
1289
- /* @__PURE__ */ jsxs19(Group18, { children: [
1290
- /* @__PURE__ */ jsx23(Skeleton2, { height: 40, width: 140, radius: "md" }),
1291
- /* @__PURE__ */ jsx23(Skeleton2, { height: 40, width: 140, radius: "md" })
1791
+ return /* @__PURE__ */ jsx30(Paper6, { withBorder: true, radius: "xl", p: compact ? "lg" : "xl", children: /* @__PURE__ */ jsxs25(Grid2, { gutter: compact ? "lg" : "xl", align: "center", children: [
1792
+ /* @__PURE__ */ jsx30(Grid2.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsxs25(Stack25, { gap: "md", children: [
1793
+ /* @__PURE__ */ jsx30(Skeleton3, { height: 16, width: 96, radius: "xl" }),
1794
+ /* @__PURE__ */ jsx30(Skeleton3, { height: 48, width: "90%", radius: "md" }),
1795
+ /* @__PURE__ */ jsx30(Skeleton3, { height: 18, width: "100%", radius: "md" }),
1796
+ /* @__PURE__ */ jsx30(Skeleton3, { height: 18, width: "82%", radius: "md" }),
1797
+ /* @__PURE__ */ jsxs25(Group23, { children: [
1798
+ /* @__PURE__ */ jsx30(Skeleton3, { height: 40, width: 140, radius: "md" }),
1799
+ /* @__PURE__ */ jsx30(Skeleton3, { height: 40, width: 140, radius: "md" })
1292
1800
  ] })
1293
1801
  ] }) }),
1294
- /* @__PURE__ */ jsx23(Grid2.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsx23(AspectRatio3, { ratio: 16 / 11, children: /* @__PURE__ */ jsx23(Skeleton2, { radius: "lg" }) }) })
1802
+ /* @__PURE__ */ jsx30(Grid2.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ jsx30(AspectRatio5, { ratio: 16 / 11, children: /* @__PURE__ */ jsx30(Skeleton3, { radius: "lg" }) }) })
1295
1803
  ] }) });
1296
1804
  }
1297
1805
  function MediaFallback() {
1298
- return /* @__PURE__ */ jsx23(AspectRatio3, { ratio: 16 / 11, children: /* @__PURE__ */ jsx23(
1299
- ThemeIcon5,
1806
+ return /* @__PURE__ */ jsx30(AspectRatio5, { ratio: 16 / 11, children: /* @__PURE__ */ jsx30(
1807
+ ThemeIcon8,
1300
1808
  {
1301
1809
  size: "100%",
1302
1810
  radius: "lg",
1303
1811
  color: "gray",
1304
1812
  variant: "light",
1305
1813
  "aria-label": "Hero media is unavailable",
1306
- children: /* @__PURE__ */ jsx23(GdsIcons.Gallery, { size: "2.5rem" })
1814
+ children: /* @__PURE__ */ jsx30(GdsIcons.Gallery, { size: "2.5rem" })
1307
1815
  }
1308
1816
  ) });
1309
1817
  }
@@ -1323,8 +1831,8 @@ function MediaFrame({
1323
1831
  } else if (mediaFade === "soft-start") {
1324
1832
  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%)";
1325
1833
  }
1326
- return /* @__PURE__ */ jsxs19(
1327
- Box8,
1834
+ return /* @__PURE__ */ jsxs25(
1835
+ Box9,
1328
1836
  {
1329
1837
  component: "figure",
1330
1838
  m: 0,
@@ -1337,9 +1845,9 @@ function MediaFrame({
1337
1845
  },
1338
1846
  "aria-label": mediaAlt,
1339
1847
  children: [
1340
- media ?? /* @__PURE__ */ jsx23(MediaFallback, {}),
1341
- media && overlayBackground ? /* @__PURE__ */ jsx23(
1342
- Box8,
1848
+ media ?? /* @__PURE__ */ jsx30(MediaFallback, {}),
1849
+ media && overlayBackground ? /* @__PURE__ */ jsx30(
1850
+ Box9,
1343
1851
  {
1344
1852
  "aria-hidden": true,
1345
1853
  style: {
@@ -1372,7 +1880,7 @@ function EditorialHero({
1372
1880
  classNames
1373
1881
  }) {
1374
1882
  if (loading) {
1375
- return /* @__PURE__ */ jsx23(LoadingHero, { compact });
1883
+ return /* @__PURE__ */ jsx30(LoadingHero, { compact });
1376
1884
  }
1377
1885
  const stackAlign = align === "center" ? "center" : "flex-start";
1378
1886
  const textAlign = align === "center" ? "center" : "left";
@@ -1380,15 +1888,15 @@ function EditorialHero({
1380
1888
  const renderedActions = actions.slice(0, 3).map((action, index) => {
1381
1889
  const resolved = resolveActionVariant(action, index, seenPrimary);
1382
1890
  seenPrimary = resolved.seenPrimary;
1383
- return /* @__PURE__ */ jsx23(HeroAction, { action, variant: resolved.variant }, `${action.label}-${index}`);
1891
+ return /* @__PURE__ */ jsx30(HeroAction, { action, variant: resolved.variant }, `${action.label}-${index}`);
1384
1892
  });
1385
- const textSlot = /* @__PURE__ */ jsxs19(Stack19, { gap: compact ? "md" : "lg", justify: "center", h: "100%", className: classNames?.content, children: [
1386
- /* @__PURE__ */ jsxs19(Stack19, { gap: "sm", align: stackAlign, children: [
1387
- eyebrow ? /* @__PURE__ */ jsx23(Text17, { size: "sm", fw: 700, c: "dimmed", ta: textAlign, children: eyebrow }) : null,
1388
- /* @__PURE__ */ jsx23(Title15, { order: 1, maw: 760, ta: textAlign, children: title }),
1389
- description ? /* @__PURE__ */ jsx23(Text17, { size: compact ? "md" : "lg", c: "dimmed", maw: 720, ta: textAlign, children: description }) : null
1893
+ const textSlot = /* @__PURE__ */ jsxs25(Stack25, { gap: compact ? "md" : "lg", justify: "center", h: "100%", className: classNames?.content, children: [
1894
+ /* @__PURE__ */ jsxs25(Stack25, { gap: "sm", align: stackAlign, children: [
1895
+ eyebrow ? /* @__PURE__ */ jsx30(Text21, { size: "sm", fw: 700, c: "dimmed", ta: textAlign, children: eyebrow }) : null,
1896
+ /* @__PURE__ */ jsx30(Title18, { order: 1, maw: 760, ta: textAlign, children: title }),
1897
+ description ? /* @__PURE__ */ jsx30(Text21, { size: compact ? "md" : "lg", c: "dimmed", maw: 720, ta: textAlign, children: description }) : null
1390
1898
  ] }),
1391
- renderedActions.length ? /* @__PURE__ */ jsx23(Box8, { className: classNames?.actions, children: /* @__PURE__ */ jsx23(
1899
+ renderedActions.length ? /* @__PURE__ */ jsx30(Box9, { className: classNames?.actions, children: /* @__PURE__ */ jsx30(
1392
1900
  CtaButtonGroup,
1393
1901
  {
1394
1902
  primary: renderedActions[0],
@@ -1396,8 +1904,8 @@ function EditorialHero({
1396
1904
  tertiary: renderedActions[2]
1397
1905
  }
1398
1906
  ) }) : null,
1399
- meta.length ? /* @__PURE__ */ jsx23(Group18, { gap: "sm", wrap: "wrap", "aria-label": "Supporting details", className: classNames?.meta, children: meta.map((item) => /* @__PURE__ */ jsxs19(
1400
- Group18,
1907
+ meta.length ? /* @__PURE__ */ jsx30(Group23, { gap: "sm", wrap: "wrap", "aria-label": "Supporting details", className: classNames?.meta, children: meta.map((item) => /* @__PURE__ */ jsxs25(
1908
+ Group23,
1401
1909
  {
1402
1910
  gap: 6,
1403
1911
  px: "sm",
@@ -1408,17 +1916,17 @@ function EditorialHero({
1408
1916
  },
1409
1917
  children: [
1410
1918
  item.icon,
1411
- /* @__PURE__ */ jsx23(Text17, { size: "sm", c: "dimmed", children: item.label })
1919
+ /* @__PURE__ */ jsx30(Text21, { size: "sm", c: "dimmed", children: item.label })
1412
1920
  ]
1413
1921
  },
1414
1922
  item.id
1415
1923
  )) }) : null
1416
1924
  ] });
1417
- const mediaSlot = error ? /* @__PURE__ */ jsx23(AccentPanel, { tone: "red", variant: "soft-outline", title: "Media unavailable", children: error }) : /* @__PURE__ */ jsx23(MediaFrame, { media, mediaAlt, mediaFade, className: classNames?.media });
1418
- const textCol = /* @__PURE__ */ jsx23(Grid2.Col, { span: { base: 12, md: 6 }, order: { base: 1, md: mediaPosition === "left" ? 2 : 1 }, children: textSlot });
1419
- const mediaCol = /* @__PURE__ */ jsx23(Grid2.Col, { span: { base: 12, md: 6 }, order: { base: 2, md: mediaPosition === "left" ? 1 : 2 }, children: mediaSlot });
1420
- return /* @__PURE__ */ jsx23(
1421
- Paper5,
1925
+ const mediaSlot = error ? /* @__PURE__ */ jsx30(AccentPanel, { tone: "red", variant: "soft-outline", title: "Media unavailable", children: error }) : /* @__PURE__ */ jsx30(MediaFrame, { media, mediaAlt, mediaFade, className: classNames?.media });
1926
+ const textCol = /* @__PURE__ */ jsx30(Grid2.Col, { span: { base: 12, md: 6 }, order: { base: 1, md: mediaPosition === "left" ? 2 : 1 }, children: textSlot });
1927
+ const mediaCol = /* @__PURE__ */ jsx30(Grid2.Col, { span: { base: 12, md: 6 }, order: { base: 2, md: mediaPosition === "left" ? 1 : 2 }, children: mediaSlot });
1928
+ return /* @__PURE__ */ jsx30(
1929
+ Paper6,
1422
1930
  {
1423
1931
  component: "section",
1424
1932
  withBorder: true,
@@ -1426,7 +1934,7 @@ function EditorialHero({
1426
1934
  p: compact ? "lg" : "xl",
1427
1935
  className: classNames?.root,
1428
1936
  style: surfaceVariant === "flat-public" ? { boxShadow: "none" } : void 0,
1429
- children: /* @__PURE__ */ jsxs19(Grid2, { gutter: compact ? "lg" : "xl", align: "center", children: [
1937
+ children: /* @__PURE__ */ jsxs25(Grid2, { gutter: compact ? "lg" : "xl", align: "center", children: [
1430
1938
  textCol,
1431
1939
  mediaCol
1432
1940
  ] })
@@ -1435,19 +1943,19 @@ function EditorialHero({
1435
1943
  }
1436
1944
 
1437
1945
  // src/FeatureBand.tsx
1438
- import { Box as Box9, Group as Group19, Paper as Paper6, SimpleGrid as SimpleGrid3, Skeleton as Skeleton3, Stack as Stack20, Text as Text18, ThemeIcon as ThemeIcon6, Title as Title16 } from "@mantine/core";
1439
- import { Fragment as Fragment3, jsx as jsx24, jsxs as jsxs20 } from "react/jsx-runtime";
1946
+ import { Box as Box10, Group as Group24, Paper as Paper7, SimpleGrid as SimpleGrid5, Skeleton as Skeleton4, Stack as Stack26, Text as Text22, ThemeIcon as ThemeIcon9, Title as Title19 } from "@mantine/core";
1947
+ import { Fragment as Fragment5, jsx as jsx31, jsxs as jsxs26 } from "react/jsx-runtime";
1440
1948
  function FeatureBandSkeleton({
1441
1949
  columns = 3,
1442
1950
  bordered = true,
1443
1951
  variant = "default"
1444
1952
  }) {
1445
- return /* @__PURE__ */ jsx24(SimpleGrid3, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx24(Paper6, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ jsxs20(Stack20, { gap: "md", children: [
1446
- /* @__PURE__ */ jsx24(Skeleton3, { height: variant === "process" ? 28 : 42, width: variant === "process" ? 72 : 42, radius: "xl" }),
1447
- /* @__PURE__ */ jsxs20(Stack20, { gap: "xs", children: [
1448
- /* @__PURE__ */ jsx24(Skeleton3, { height: 20, width: "75%", radius: "md" }),
1449
- /* @__PURE__ */ jsx24(Skeleton3, { height: 14, width: "100%", radius: "md" }),
1450
- /* @__PURE__ */ jsx24(Skeleton3, { height: 14, width: "82%", radius: "md" })
1953
+ return /* @__PURE__ */ jsx31(SimpleGrid5, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ jsx31(Paper7, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ jsxs26(Stack26, { gap: "md", children: [
1954
+ /* @__PURE__ */ jsx31(Skeleton4, { height: variant === "process" ? 28 : 42, width: variant === "process" ? 72 : 42, radius: "xl" }),
1955
+ /* @__PURE__ */ jsxs26(Stack26, { gap: "xs", children: [
1956
+ /* @__PURE__ */ jsx31(Skeleton4, { height: 20, width: "75%", radius: "md" }),
1957
+ /* @__PURE__ */ jsx31(Skeleton4, { height: 14, width: "100%", radius: "md" }),
1958
+ /* @__PURE__ */ jsx31(Skeleton4, { height: 14, width: "82%", radius: "md" })
1451
1959
  ] })
1452
1960
  ] }) }, index)) });
1453
1961
  }
@@ -1460,10 +1968,10 @@ function FeatureBand({
1460
1968
  variant = "default"
1461
1969
  }) {
1462
1970
  if (loading) {
1463
- return /* @__PURE__ */ jsx24(FeatureBandSkeleton, { columns, bordered, variant });
1971
+ return /* @__PURE__ */ jsx31(FeatureBandSkeleton, { columns, bordered, variant });
1464
1972
  }
1465
1973
  if (!items.length) {
1466
- return emptyState ? /* @__PURE__ */ jsx24(Fragment3, { children: emptyState }) : /* @__PURE__ */ jsx24(
1974
+ return emptyState ? /* @__PURE__ */ jsx31(Fragment5, { children: emptyState }) : /* @__PURE__ */ jsx31(
1467
1975
  EmptyState,
1468
1976
  {
1469
1977
  title: "No supporting details available",
@@ -1471,9 +1979,9 @@ function FeatureBand({
1471
1979
  }
1472
1980
  );
1473
1981
  }
1474
- return /* @__PURE__ */ jsx24(Box9, { component: "section", "aria-label": "Supporting features", children: /* @__PURE__ */ jsx24(SimpleGrid3, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: items.map((item, index) => /* @__PURE__ */ jsx24(Paper6, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ jsxs20(Stack20, { gap: "md", children: [
1475
- variant === "process" ? /* @__PURE__ */ jsx24(Group19, { children: /* @__PURE__ */ jsx24(
1476
- Text18,
1982
+ return /* @__PURE__ */ jsx31(Box10, { component: "section", "aria-label": "Supporting features", children: /* @__PURE__ */ jsx31(SimpleGrid5, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: items.map((item, index) => /* @__PURE__ */ jsx31(Paper7, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ jsxs26(Stack26, { gap: "md", children: [
1983
+ variant === "process" ? /* @__PURE__ */ jsx31(Group24, { children: /* @__PURE__ */ jsx31(
1984
+ Text22,
1477
1985
  {
1478
1986
  fw: 800,
1479
1987
  size: "sm",
@@ -1485,30 +1993,276 @@ function FeatureBand({
1485
1993
  },
1486
1994
  children: item.stepLabel ?? `Step ${index + 1}`
1487
1995
  }
1488
- ) }) : item.media ? item.media : item.icon ? /* @__PURE__ */ jsx24(Group19, { children: /* @__PURE__ */ jsx24(ThemeIcon6, { size: "xl", radius: "xl", variant: "light", color: "violet", children: item.icon }) }) : /* @__PURE__ */ jsx24(Group19, { children: /* @__PURE__ */ jsx24(ThemeIcon6, { size: "xl", radius: "xl", variant: "light", color: "gray", "aria-hidden": true, children: /* @__PURE__ */ jsx24(GdsIcons.Info, { size: "1.25rem" }) }) }),
1489
- /* @__PURE__ */ jsxs20(Stack20, { gap: "xs", children: [
1490
- /* @__PURE__ */ jsx24(Title16, { order: 4, children: item.title }),
1491
- item.description ? /* @__PURE__ */ jsx24(Text18, { c: "dimmed", children: item.description }) : null,
1492
- item.meta ? /* @__PURE__ */ jsx24(Text18, { size: "sm", c: "dimmed", children: item.meta }) : null
1996
+ ) }) : item.media ? item.media : item.icon ? /* @__PURE__ */ jsx31(Group24, { children: /* @__PURE__ */ jsx31(ThemeIcon9, { size: "xl", radius: "xl", variant: "light", color: "violet", children: item.icon }) }) : /* @__PURE__ */ jsx31(Group24, { children: /* @__PURE__ */ jsx31(ThemeIcon9, { size: "xl", radius: "xl", variant: "light", color: "gray", "aria-hidden": true, children: /* @__PURE__ */ jsx31(GdsIcons.Info, { size: "1.25rem" }) }) }),
1997
+ /* @__PURE__ */ jsxs26(Stack26, { gap: "xs", children: [
1998
+ /* @__PURE__ */ jsx31(Title19, { order: 4, children: item.title }),
1999
+ item.description ? /* @__PURE__ */ jsx31(Text22, { c: "dimmed", children: item.description }) : null,
2000
+ item.meta ? /* @__PURE__ */ jsx31(Text22, { size: "sm", c: "dimmed", children: item.meta }) : null
1493
2001
  ] })
1494
2002
  ] }) }, item.id)) }) });
1495
2003
  }
1496
2004
 
2005
+ // src/MapPanel.tsx
2006
+ import { AspectRatio as AspectRatio6, Box as Box11, Group as Group25, Paper as Paper8, Stack as Stack27, Text as Text23, Title as Title20 } from "@mantine/core";
2007
+ import { jsx as jsx32, jsxs as jsxs27 } from "react/jsx-runtime";
2008
+ function MapPanel({
2009
+ title,
2010
+ description,
2011
+ actions,
2012
+ loading = false,
2013
+ empty,
2014
+ error,
2015
+ embedTitle,
2016
+ iframeSrc,
2017
+ iframeSandbox = "allow-scripts allow-same-origin allow-popups",
2018
+ renderMap,
2019
+ minHeight = 320
2020
+ }) {
2021
+ let body;
2022
+ if (loading) {
2023
+ body = /* @__PURE__ */ jsx32(
2024
+ StateBlock,
2025
+ {
2026
+ variant: "loading",
2027
+ title: "Loading map",
2028
+ description: "The shared map panel is still preparing the embedded surface.",
2029
+ compact: true
2030
+ }
2031
+ );
2032
+ } else if (error) {
2033
+ body = /* @__PURE__ */ jsx32(StateBlock, { variant: "error", title: "Map unavailable", description: error, compact: true });
2034
+ } else if (!iframeSrc && !renderMap) {
2035
+ body = /* @__PURE__ */ jsx32(
2036
+ StateBlock,
2037
+ {
2038
+ variant: "empty",
2039
+ title: "No map available",
2040
+ description: empty ?? "Add coordinates or a sanctioned embed source to render this panel.",
2041
+ compact: true
2042
+ }
2043
+ );
2044
+ } else if (renderMap) {
2045
+ body = /* @__PURE__ */ jsx32(Box11, { style: { minHeight }, children: renderMap() });
2046
+ } else {
2047
+ body = /* @__PURE__ */ jsx32(AspectRatio6, { ratio: 16 / 9, children: /* @__PURE__ */ jsx32(
2048
+ "iframe",
2049
+ {
2050
+ src: iframeSrc,
2051
+ title: embedTitle ?? "Embedded map",
2052
+ sandbox: iframeSandbox,
2053
+ loading: "lazy",
2054
+ referrerPolicy: "no-referrer-when-downgrade",
2055
+ style: { width: "100%", height: "100%", border: 0, borderRadius: 12 }
2056
+ }
2057
+ ) });
2058
+ }
2059
+ return /* @__PURE__ */ jsx32(Paper8, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs27(Stack27, { gap: "md", children: [
2060
+ /* @__PURE__ */ jsxs27(Group25, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2061
+ /* @__PURE__ */ jsxs27(Stack27, { gap: 4, children: [
2062
+ /* @__PURE__ */ jsx32(Title20, { order: 3, children: title }),
2063
+ description ? /* @__PURE__ */ jsx32(Text23, { size: "sm", c: "dimmed", children: description }) : null
2064
+ ] }),
2065
+ actions ? /* @__PURE__ */ jsx32(ActionBar, { ...actions }) : null
2066
+ ] }),
2067
+ body
2068
+ ] }) });
2069
+ }
2070
+
2071
+ // src/PublicFlowShell.tsx
2072
+ import { Badge as Badge12, Group as Group26, Paper as Paper9, Stack as Stack28, Text as Text24, Title as Title21 } from "@mantine/core";
2073
+ import { jsx as jsx33, jsxs as jsxs28 } from "react/jsx-runtime";
2074
+ var stageTone = {
2075
+ idle: { label: "Idle", color: "gray" },
2076
+ loading: { label: "Loading", color: "blue" },
2077
+ ready: { label: "Ready", color: "teal" },
2078
+ error: { label: "Error", color: "red" },
2079
+ complete: { label: "Complete", color: "teal" }
2080
+ };
2081
+ function toActionBar(actions = []) {
2082
+ if (!actions.length) {
2083
+ return void 0;
2084
+ }
2085
+ const ordered = [...actions].sort((left, right) => {
2086
+ const rank = { primary: 0, secondary: 1, tertiary: 2 };
2087
+ return rank[left.priority] - rank[right.priority];
2088
+ });
2089
+ const primary = ordered.find((action) => action.priority === "primary");
2090
+ const secondary = ordered.filter((action) => action.priority === "secondary");
2091
+ const tertiary = ordered.filter((action) => action.priority === "tertiary");
2092
+ return {
2093
+ primary: primary ? {
2094
+ action: primary.action,
2095
+ disabled: primary.disabled,
2096
+ loading: primary.loading,
2097
+ onClick: primary.onClick
2098
+ } : void 0,
2099
+ secondary: secondary.map((action) => ({
2100
+ action: action.action,
2101
+ disabled: action.disabled,
2102
+ loading: action.loading,
2103
+ onClick: action.onClick
2104
+ })),
2105
+ tertiary: tertiary.map((action) => ({
2106
+ action: action.action,
2107
+ disabled: action.disabled,
2108
+ loading: action.loading,
2109
+ onClick: action.onClick
2110
+ }))
2111
+ };
2112
+ }
2113
+ function PublicFlowShell({
2114
+ stage,
2115
+ eyebrow,
2116
+ exitAction,
2117
+ hardwareSurface,
2118
+ emptyState,
2119
+ errorState
2120
+ }) {
2121
+ const tone = stageTone[stage.status];
2122
+ const actionBar = toActionBar(stage.actions);
2123
+ let body = stage.body;
2124
+ if (stage.status === "loading") {
2125
+ body = /* @__PURE__ */ jsx33(
2126
+ StateBlock,
2127
+ {
2128
+ variant: "loading",
2129
+ title: "Preparing flow",
2130
+ description: stage.description ?? "The current public flow stage is still loading."
2131
+ }
2132
+ );
2133
+ } else if (stage.status === "error") {
2134
+ body = errorState ?? /* @__PURE__ */ jsx33(
2135
+ StateBlock,
2136
+ {
2137
+ variant: "error",
2138
+ title: "Flow unavailable",
2139
+ description: stage.description ?? "This public flow could not continue safely."
2140
+ }
2141
+ );
2142
+ } else if (!stage.body && !hardwareSurface) {
2143
+ body = emptyState ?? /* @__PURE__ */ jsx33(
2144
+ EmptyState,
2145
+ {
2146
+ title: "No stage content available",
2147
+ description: "Add the current flow stage body or a bounded hardware surface to render this contract."
2148
+ }
2149
+ );
2150
+ }
2151
+ return /* @__PURE__ */ jsx33(Paper9, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs28(Stack28, { gap: "lg", children: [
2152
+ /* @__PURE__ */ jsxs28(Group26, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2153
+ /* @__PURE__ */ jsxs28(Stack28, { gap: 4, children: [
2154
+ eyebrow ? /* @__PURE__ */ jsx33(Text24, { size: "xs", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
2155
+ /* @__PURE__ */ jsxs28(Group26, { gap: "sm", wrap: "wrap", children: [
2156
+ /* @__PURE__ */ jsx33(Title21, { order: 2, children: stage.title }),
2157
+ /* @__PURE__ */ jsx33(Badge12, { variant: "light", color: tone.color, children: tone.label })
2158
+ ] }),
2159
+ stage.description ? /* @__PURE__ */ jsx33(Text24, { size: "sm", c: "dimmed", children: stage.description }) : null
2160
+ ] }),
2161
+ exitAction
2162
+ ] }),
2163
+ stage.notice ? /* @__PURE__ */ jsx33(Text24, { size: "sm", c: "dimmed", children: stage.notice }) : null,
2164
+ body,
2165
+ hardwareSurface,
2166
+ stage.aside,
2167
+ actionBar ? /* @__PURE__ */ jsx33(ActionBar, { ...actionBar }) : null
2168
+ ] }) });
2169
+ }
2170
+
2171
+ // src/PlaybackSurface.tsx
2172
+ import { Badge as Badge13, Group as Group27, Paper as Paper10, Stack as Stack29, Text as Text25, Title as Title22 } from "@mantine/core";
2173
+ import { jsx as jsx34, jsxs as jsxs29 } from "react/jsx-runtime";
2174
+ var stateTone = {
2175
+ loading: { label: "Loading", color: "blue" },
2176
+ ready: { label: "Ready", color: "teal" },
2177
+ playing: { label: "Playing", color: "teal" },
2178
+ empty: { label: "Empty", color: "gray" },
2179
+ error: { label: "Error", color: "red" },
2180
+ degraded: { label: "Degraded", color: "orange" }
2181
+ };
2182
+ function PlaybackSurface({
2183
+ title,
2184
+ state,
2185
+ media,
2186
+ statusMessage,
2187
+ controls,
2188
+ emptyState,
2189
+ errorState,
2190
+ overlays,
2191
+ mode = "embedded"
2192
+ }) {
2193
+ const tone = stateTone[state];
2194
+ let content;
2195
+ if (state === "loading") {
2196
+ content = /* @__PURE__ */ jsx34(
2197
+ StateBlock,
2198
+ {
2199
+ variant: "loading",
2200
+ title: "Loading playback",
2201
+ description: "The playback surface is still preparing timed or fullscreen media."
2202
+ }
2203
+ );
2204
+ } else if (state === "empty") {
2205
+ content = emptyState ?? /* @__PURE__ */ jsx34(
2206
+ EmptyState,
2207
+ {
2208
+ title: "No playback content available",
2209
+ description: "Add media assets or a playlist to render this playback surface."
2210
+ }
2211
+ );
2212
+ } else if (state === "error") {
2213
+ content = errorState ?? /* @__PURE__ */ jsx34(
2214
+ StateBlock,
2215
+ {
2216
+ variant: "error",
2217
+ title: "Playback unavailable",
2218
+ description: "The playback surface could not render the current media safely."
2219
+ }
2220
+ );
2221
+ } else {
2222
+ content = /* @__PURE__ */ jsxs29(Stack29, { gap: "md", children: [
2223
+ media,
2224
+ overlays
2225
+ ] });
2226
+ }
2227
+ return /* @__PURE__ */ jsx34(Paper10, { withBorder: true, radius: "xl", p: "lg", "data-playback-mode": mode, children: /* @__PURE__ */ jsxs29(Stack29, { gap: "md", children: [
2228
+ title || statusMessage || controls ? /* @__PURE__ */ jsxs29(Group27, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
2229
+ /* @__PURE__ */ jsxs29(Stack29, { gap: 4, children: [
2230
+ title ? /* @__PURE__ */ jsx34(Title22, { order: 3, children: title }) : null,
2231
+ statusMessage ? /* @__PURE__ */ jsx34(Text25, { size: "sm", c: "dimmed", children: statusMessage }) : null
2232
+ ] }),
2233
+ /* @__PURE__ */ jsxs29(Group27, { gap: "sm", align: "center", wrap: "wrap", children: [
2234
+ /* @__PURE__ */ jsx34(Badge13, { variant: "light", color: tone.color, children: tone.label }),
2235
+ controls
2236
+ ] })
2237
+ ] }) : null,
2238
+ state === "degraded" ? /* @__PURE__ */ jsx34(
2239
+ StateBlock,
2240
+ {
2241
+ variant: "info",
2242
+ title: "Playback degraded",
2243
+ description: statusMessage ?? "Playback is continuing with reduced fidelity or recoverable media failures.",
2244
+ compact: true
2245
+ }
2246
+ ) : null,
2247
+ content
2248
+ ] }) });
2249
+ }
2250
+
1497
2251
  // src/FormField.tsx
1498
- import { Box as Box10, Stack as Stack21, Text as Text19 } from "@mantine/core";
1499
- import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
2252
+ import { Box as Box12, Stack as Stack30, Text as Text26 } from "@mantine/core";
2253
+ import { jsx as jsx35, jsxs as jsxs30 } from "react/jsx-runtime";
1500
2254
  function FormField({ label, description, error, children }) {
1501
- return /* @__PURE__ */ jsx25(Box10, { component: "label", children: /* @__PURE__ */ jsxs21(Stack21, { gap: 4, children: [
1502
- typeof label === "string" ? /* @__PURE__ */ jsx25(Text19, { size: "xs", fw: 600, c: "dimmed", children: label }) : label,
1503
- description ? typeof description === "string" ? /* @__PURE__ */ jsx25(Text19, { size: "xs", c: "dimmed", children: description }) : description : null,
2255
+ return /* @__PURE__ */ jsx35(Box12, { component: "label", children: /* @__PURE__ */ jsxs30(Stack30, { gap: 4, children: [
2256
+ typeof label === "string" ? /* @__PURE__ */ jsx35(Text26, { size: "xs", fw: 600, c: "dimmed", children: label }) : label,
2257
+ description ? typeof description === "string" ? /* @__PURE__ */ jsx35(Text26, { size: "xs", c: "dimmed", children: description }) : description : null,
1504
2258
  children,
1505
- error ? typeof error === "string" ? /* @__PURE__ */ jsx25(Text19, { size: "xs", c: "red.7", children: error }) : error : null
2259
+ error ? typeof error === "string" ? /* @__PURE__ */ jsx35(Text26, { size: "xs", c: "red.7", children: error }) : error : null
1506
2260
  ] }) });
1507
2261
  }
1508
2262
 
1509
2263
  // src/MediaField.tsx
1510
- import { Badge as Badge9, Button as Button2, Divider as Divider3, Group as Group20, Paper as Paper7, Stack as Stack22, Text as Text20 } from "@mantine/core";
1511
- import { Fragment as Fragment4, jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
2264
+ import { Badge as Badge14, Button as Button4, Divider as Divider6, Group as Group28, Paper as Paper11, Stack as Stack31, Text as Text27 } from "@mantine/core";
2265
+ import { Fragment as Fragment6, jsx as jsx36, jsxs as jsxs31 } from "react/jsx-runtime";
1512
2266
  var stateLabels = {
1513
2267
  empty: { label: "Empty", color: "gray" },
1514
2268
  selected: { label: "Selected", color: "blue" },
@@ -1536,32 +2290,32 @@ function MediaField({
1536
2290
  mode = "stacked"
1537
2291
  }) {
1538
2292
  const stateBadge = stateLabels[state];
1539
- const resolvedRemoveAction = removeAction ?? (onRemove ? /* @__PURE__ */ jsx26(Button2, { type: "button", variant: "light", color: "red", onClick: onRemove, children: "Remove" }) : null);
1540
- const resolvedResetAction = resetAction ?? (onReset ? /* @__PURE__ */ jsx26(Button2, { type: "button", variant: "default", onClick: onReset, children: "Reset" }) : null);
1541
- return /* @__PURE__ */ jsx26(
2293
+ const resolvedRemoveAction = removeAction ?? (onRemove ? /* @__PURE__ */ jsx36(Button4, { type: "button", variant: "light", color: "red", onClick: onRemove, children: "Remove" }) : null);
2294
+ const resolvedResetAction = resetAction ?? (onReset ? /* @__PURE__ */ jsx36(Button4, { type: "button", variant: "default", onClick: onReset, children: "Reset" }) : null);
2295
+ return /* @__PURE__ */ jsx36(
1542
2296
  FormField,
1543
2297
  {
1544
2298
  label,
1545
2299
  description,
1546
2300
  error,
1547
- children: /* @__PURE__ */ jsx26(Paper7, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs22(Stack22, { gap: "md", children: [
1548
- /* @__PURE__ */ jsx26(Group20, { justify: "flex-end", align: "center", gap: "sm", children: /* @__PURE__ */ jsxs22(Group20, { gap: "xs", justify: "flex-end", children: [
1549
- /* @__PURE__ */ jsx26(Badge9, { variant: "light", color: stateBadge.color, children: stateBadge.label }),
2301
+ children: /* @__PURE__ */ jsx36(Paper11, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ jsxs31(Stack31, { gap: "md", children: [
2302
+ /* @__PURE__ */ jsx36(Group28, { justify: "flex-end", align: "center", gap: "sm", children: /* @__PURE__ */ jsxs31(Group28, { gap: "xs", justify: "flex-end", children: [
2303
+ /* @__PURE__ */ jsx36(Badge14, { variant: "light", color: stateBadge.color, children: stateBadge.label }),
1550
2304
  statusAction
1551
2305
  ] }) }),
1552
2306
  preview ? preview : null,
1553
- uploadControl || urlInput ? /* @__PURE__ */ jsxs22(Fragment4, { children: [
1554
- /* @__PURE__ */ jsx26(Divider3, {}),
1555
- /* @__PURE__ */ jsxs22(Stack22, { gap: "sm", style: mode === "split" ? { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))" } : void 0, children: [
2307
+ uploadControl || urlInput ? /* @__PURE__ */ jsxs31(Fragment6, { children: [
2308
+ /* @__PURE__ */ jsx36(Divider6, {}),
2309
+ /* @__PURE__ */ jsxs31(Stack31, { gap: "sm", style: mode === "split" ? { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))" } : void 0, children: [
1556
2310
  uploadControl,
1557
2311
  urlInput
1558
2312
  ] })
1559
2313
  ] }) : null,
1560
- value ? /* @__PURE__ */ jsx26(Text20, { size: "sm", c: "dimmed", style: { wordBreak: "break-all" }, children: value }) : null,
1561
- helpText ? /* @__PURE__ */ jsx26(Text20, { size: "sm", c: "dimmed", children: helpText }) : null,
1562
- policyText ? /* @__PURE__ */ jsx26(Text20, { size: "sm", c: error ? "red.7" : "dimmed", children: policyText }) : null,
2314
+ value ? /* @__PURE__ */ jsx36(Text27, { size: "sm", c: "dimmed", style: { wordBreak: "break-all" }, children: value }) : null,
2315
+ helpText ? /* @__PURE__ */ jsx36(Text27, { size: "sm", c: "dimmed", children: helpText }) : null,
2316
+ policyText ? /* @__PURE__ */ jsx36(Text27, { size: "sm", c: error ? "red.7" : "dimmed", children: policyText }) : null,
1563
2317
  typeof error !== "string" && error ? error : null,
1564
- resolvedRemoveAction || resolvedResetAction ? /* @__PURE__ */ jsxs22(Group20, { gap: "sm", children: [
2318
+ resolvedRemoveAction || resolvedResetAction ? /* @__PURE__ */ jsxs31(Group28, { gap: "sm", children: [
1565
2319
  resolvedResetAction,
1566
2320
  retryAction,
1567
2321
  resolvedRemoveAction
@@ -1572,70 +2326,72 @@ function MediaField({
1572
2326
  }
1573
2327
 
1574
2328
  // src/MediaCard.tsx
1575
- import { ActionIcon as ActionIcon2, Badge as Badge10, Card as Card7, Group as Group21, Stack as Stack23, Text as Text21, Title as Title17 } from "@mantine/core";
1576
- import { jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
2329
+ import { ActionIcon as ActionIcon4, Badge as Badge15, Card as Card9, Group as Group29, Stack as Stack32, Text as Text28, Title as Title23 } from "@mantine/core";
2330
+ import { jsx as jsx37, jsxs as jsxs32 } from "react/jsx-runtime";
1577
2331
  function MediaCard({ title, image, description, status, overlay, actions = [] }) {
1578
2332
  const EyeIcon = GdsIcons.Eye;
1579
- return /* @__PURE__ */ jsxs23(Card7, { withBorder: true, radius: "lg", padding: "md", children: [
1580
- /* @__PURE__ */ jsxs23(Card7.Section, { pos: "relative", children: [
2333
+ return /* @__PURE__ */ jsxs32(Card9, { withBorder: true, radius: "lg", padding: "md", children: [
2334
+ /* @__PURE__ */ jsxs32(Card9.Section, { pos: "relative", children: [
1581
2335
  image,
1582
- overlay ? /* @__PURE__ */ jsx27("div", { style: { position: "absolute", inset: 12, display: "flex", justifyContent: "flex-end", alignItems: "flex-start" }, children: overlay }) : null
2336
+ overlay ? /* @__PURE__ */ jsx37("div", { style: { position: "absolute", inset: 12, display: "flex", justifyContent: "flex-end", alignItems: "flex-start" }, children: overlay }) : null
1583
2337
  ] }),
1584
- /* @__PURE__ */ jsxs23(Stack23, { gap: "sm", mt: "md", children: [
1585
- /* @__PURE__ */ jsxs23(Group21, { justify: "space-between", align: "flex-start", children: [
1586
- /* @__PURE__ */ jsxs23(Stack23, { gap: 4, children: [
1587
- /* @__PURE__ */ jsx27(Title17, { order: 4, children: title }),
1588
- description ? /* @__PURE__ */ jsx27(Text21, { size: "sm", c: "dimmed", lineClamp: 2, children: description }) : null
2338
+ /* @__PURE__ */ jsxs32(Stack32, { gap: "sm", mt: "md", children: [
2339
+ /* @__PURE__ */ jsxs32(Group29, { justify: "space-between", align: "flex-start", children: [
2340
+ /* @__PURE__ */ jsxs32(Stack32, { gap: 4, children: [
2341
+ /* @__PURE__ */ jsx37(Title23, { order: 4, children: title }),
2342
+ description ? /* @__PURE__ */ jsx37(Text28, { size: "sm", c: "dimmed", lineClamp: 2, children: description }) : null
1589
2343
  ] }),
1590
- status ? /* @__PURE__ */ jsx27(Badge10, { variant: "light", children: status }) : null
2344
+ status ? /* @__PURE__ */ jsx37(Badge15, { variant: "light", children: status }) : null
1591
2345
  ] }),
1592
- actions.length ? /* @__PURE__ */ jsx27(Group21, { justify: "flex-end", gap: "xs", children: actions.map((action) => /* @__PURE__ */ jsx27(ActionIcon2, { variant: "light", "aria-label": action.label, onClick: action.onClick, children: /* @__PURE__ */ jsx27(EyeIcon, { size: "1rem" }) }, action.label)) }) : null
2346
+ actions.length ? /* @__PURE__ */ jsx37(Group29, { justify: "flex-end", gap: "xs", children: actions.map((action) => /* @__PURE__ */ jsx37(ActionIcon4, { variant: "light", "aria-label": action.label, onClick: action.onClick, children: /* @__PURE__ */ jsx37(EyeIcon, { size: "1rem" }) }, action.label)) }) : null
1593
2347
  ] })
1594
2348
  ] });
1595
2349
  }
1596
2350
 
1597
2351
  // src/AccessSummary.tsx
1598
- import { Badge as Badge11, Card as Card8, Group as Group22, Stack as Stack24, Text as Text22, Title as Title18 } from "@mantine/core";
1599
- import { jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
2352
+ import { Badge as Badge16, Card as Card10, Group as Group30, Stack as Stack33, Text as Text29, Title as Title24 } from "@mantine/core";
2353
+ import { jsx as jsx38, jsxs as jsxs33 } from "react/jsx-runtime";
1600
2354
  function AccessSummary({ title, roles, scope, blocked = false, description }) {
1601
- return /* @__PURE__ */ jsx28(Card8, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs24(Stack24, { gap: "sm", children: [
1602
- /* @__PURE__ */ jsxs24(Group22, { justify: "space-between", align: "center", children: [
1603
- /* @__PURE__ */ jsx28(Title18, { order: 4, children: title }),
1604
- /* @__PURE__ */ jsx28(Badge11, { color: blocked ? "red" : "teal", variant: "light", children: blocked ? "Blocked" : "Allowed" })
2355
+ return /* @__PURE__ */ jsx38(Card10, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ jsxs33(Stack33, { gap: "sm", children: [
2356
+ /* @__PURE__ */ jsxs33(Group30, { justify: "space-between", align: "center", children: [
2357
+ /* @__PURE__ */ jsx38(Title24, { order: 4, children: title }),
2358
+ /* @__PURE__ */ jsx38(Badge16, { color: blocked ? "red" : "teal", variant: "light", children: blocked ? "Blocked" : "Allowed" })
1605
2359
  ] }),
1606
- /* @__PURE__ */ jsx28(Group22, { gap: "xs", children: roles.map((role) => /* @__PURE__ */ jsx28(Badge11, { variant: "outline", children: role }, role)) }),
1607
- scope ? /* @__PURE__ */ jsxs24(Text22, { size: "sm", c: "dimmed", children: [
2360
+ /* @__PURE__ */ jsx38(Group30, { gap: "xs", children: roles.map((role) => /* @__PURE__ */ jsx38(Badge16, { variant: "outline", children: role }, role)) }),
2361
+ scope ? /* @__PURE__ */ jsxs33(Text29, { size: "sm", c: "dimmed", children: [
1608
2362
  "Scope: ",
1609
2363
  scope
1610
2364
  ] }) : null,
1611
- description ? /* @__PURE__ */ jsx28(Text22, { size: "sm", children: description }) : null
2365
+ description ? /* @__PURE__ */ jsx38(Text29, { size: "sm", children: description }) : null
1612
2366
  ] }) });
1613
2367
  }
1614
2368
 
1615
2369
  // src/PageHeader.tsx
1616
- import { Box as Box11, Group as Group23, Stack as Stack25, Text as Text23, Title as Title19 } from "@mantine/core";
1617
- import { jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
2370
+ import { Box as Box13, Group as Group31, Stack as Stack34, Text as Text30, Title as Title25 } from "@mantine/core";
2371
+ import { jsx as jsx39, jsxs as jsxs34 } from "react/jsx-runtime";
1618
2372
  function PageHeader({
1619
2373
  title,
1620
2374
  description,
2375
+ subtitle,
1621
2376
  eyebrow,
1622
2377
  actions,
1623
2378
  eyebrowVariant = "neutral"
1624
2379
  }) {
2380
+ const resolvedDescription = description ?? subtitle;
1625
2381
  const eyebrowProps = eyebrowVariant === "ornamental" ? { tt: "uppercase", style: { letterSpacing: "0.12em" } } : {};
1626
- return /* @__PURE__ */ jsxs25(Group23, { justify: "space-between", align: "flex-start", gap: "lg", wrap: "wrap", children: [
1627
- /* @__PURE__ */ jsxs25(Stack25, { gap: "xs", children: [
1628
- eyebrow && /* @__PURE__ */ jsx29(Text23, { size: "xs", fw: 700, c: "dimmed", ...eyebrowProps, children: eyebrow }),
1629
- /* @__PURE__ */ jsx29(Title19, { order: 1, children: title }),
1630
- description && /* @__PURE__ */ jsx29(Text23, { c: "dimmed", maw: 720, children: description })
2382
+ return /* @__PURE__ */ jsxs34(Group31, { justify: "space-between", align: "flex-start", gap: "lg", wrap: "wrap", children: [
2383
+ /* @__PURE__ */ jsxs34(Stack34, { gap: "xs", children: [
2384
+ eyebrow && /* @__PURE__ */ jsx39(Text30, { size: "xs", fw: 700, c: "dimmed", ...eyebrowProps, children: eyebrow }),
2385
+ /* @__PURE__ */ jsx39(Title25, { order: 1, children: title }),
2386
+ resolvedDescription && /* @__PURE__ */ jsx39(Text30, { c: "dimmed", maw: 720, children: resolvedDescription })
1631
2387
  ] }),
1632
- actions ? /* @__PURE__ */ jsx29(Box11, { children: actions }) : null
2388
+ actions ? /* @__PURE__ */ jsx39(Box13, { children: actions }) : null
1633
2389
  ] });
1634
2390
  }
1635
2391
 
1636
2392
  // src/FilterDrawer.tsx
1637
- import { Drawer, Group as Group24, Stack as Stack26, Text as Text24 } from "@mantine/core";
1638
- import { jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
2393
+ import { Drawer, Group as Group32, Stack as Stack35, Text as Text31 } from "@mantine/core";
2394
+ import { jsx as jsx40, jsxs as jsxs35 } from "react/jsx-runtime";
1639
2395
  function FilterDrawer({
1640
2396
  opened,
1641
2397
  onClose,
@@ -1651,7 +2407,7 @@ function FilterDrawer({
1651
2407
  }) {
1652
2408
  const resolvedPrimaryAction = applyAction ?? primaryAction;
1653
2409
  const resolvedSecondaryAction = resetAction ?? secondaryAction;
1654
- return /* @__PURE__ */ jsx30(
2410
+ return /* @__PURE__ */ jsx40(
1655
2411
  Drawer,
1656
2412
  {
1657
2413
  opened,
@@ -1660,11 +2416,11 @@ function FilterDrawer({
1660
2416
  position: mode === "bottom-sheet" ? "bottom" : "right",
1661
2417
  size: mode === "bottom-sheet" ? "auto" : "md",
1662
2418
  radius: mode === "bottom-sheet" ? "xl" : void 0,
1663
- children: /* @__PURE__ */ jsxs26(Stack26, { gap: "md", children: [
1664
- description ? /* @__PURE__ */ jsx30(Text24, { size: "sm", c: "dimmed", children: description }) : null,
2419
+ children: /* @__PURE__ */ jsxs35(Stack35, { gap: "md", children: [
2420
+ description ? /* @__PURE__ */ jsx40(Text31, { size: "sm", c: "dimmed", children: description }) : null,
1665
2421
  children,
1666
- resolvedPrimaryAction || resolvedSecondaryAction || closeAction ? /* @__PURE__ */ jsxs26(Group24, { justify: "space-between", mt: "md", children: [
1667
- /* @__PURE__ */ jsxs26(Group24, { gap: "sm", children: [
2422
+ resolvedPrimaryAction || resolvedSecondaryAction || closeAction ? /* @__PURE__ */ jsxs35(Group32, { justify: "space-between", mt: "md", children: [
2423
+ /* @__PURE__ */ jsxs35(Group32, { gap: "sm", children: [
1668
2424
  closeAction,
1669
2425
  resolvedSecondaryAction
1670
2426
  ] }),
@@ -1676,8 +2432,8 @@ function FilterDrawer({
1676
2432
  }
1677
2433
 
1678
2434
  // src/PlaceholderPanel.tsx
1679
- import { Badge as Badge12, Card as Card9, Stack as Stack27, Text as Text25, Title as Title20 } from "@mantine/core";
1680
- import { Fragment as Fragment5, jsx as jsx31, jsxs as jsxs27 } from "react/jsx-runtime";
2435
+ import { Badge as Badge17, Card as Card11, Stack as Stack36, Text as Text32, Title as Title26 } from "@mantine/core";
2436
+ import { Fragment as Fragment7, jsx as jsx41, jsxs as jsxs36 } from "react/jsx-runtime";
1681
2437
  function PlaceholderPanel({
1682
2438
  title,
1683
2439
  description,
@@ -1687,16 +2443,16 @@ function PlaceholderPanel({
1687
2443
  mode
1688
2444
  }) {
1689
2445
  if (mode === "live" && children) {
1690
- return /* @__PURE__ */ jsx31(Fragment5, { children });
2446
+ return /* @__PURE__ */ jsx41(Fragment7, { children });
1691
2447
  }
1692
- return /* @__PURE__ */ jsx31(Card9, { children: /* @__PURE__ */ jsxs27(Stack27, { gap: "md", children: [
1693
- badge ? /* @__PURE__ */ jsx31(Badge12, { variant: "light", color: "blue", w: "fit-content", children: badge }) : null,
1694
- /* @__PURE__ */ jsxs27(Stack27, { gap: "xs", children: [
1695
- /* @__PURE__ */ jsx31(Title20, { order: 4, children: title }),
1696
- /* @__PURE__ */ jsx31(Text25, { c: "dimmed", children: description })
2448
+ return /* @__PURE__ */ jsx41(Card11, { children: /* @__PURE__ */ jsxs36(Stack36, { gap: "md", children: [
2449
+ badge ? /* @__PURE__ */ jsx41(Badge17, { variant: "light", color: "blue", w: "fit-content", children: badge }) : null,
2450
+ /* @__PURE__ */ jsxs36(Stack36, { gap: "xs", children: [
2451
+ /* @__PURE__ */ jsx41(Title26, { order: 4, children: title }),
2452
+ /* @__PURE__ */ jsx41(Text32, { c: "dimmed", children: description })
1697
2453
  ] }),
1698
- footer ? /* @__PURE__ */ jsx31(Text25, { size: "sm", children: footer }) : null,
1699
- /* @__PURE__ */ jsx31(
2454
+ footer ? /* @__PURE__ */ jsx41(Text32, { size: "sm", children: footer }) : null,
2455
+ /* @__PURE__ */ jsx41(
1700
2456
  StateBlock,
1701
2457
  {
1702
2458
  variant: "not-enough-data",
@@ -1710,7 +2466,7 @@ function PlaceholderPanel({
1710
2466
 
1711
2467
  // src/SimpleDataTable.tsx
1712
2468
  import { ScrollArea, Table } from "@mantine/core";
1713
- import { jsx as jsx32, jsxs as jsxs28 } from "react/jsx-runtime";
2469
+ import { jsx as jsx42, jsxs as jsxs37 } from "react/jsx-runtime";
1714
2470
  function SimpleDataTable({
1715
2471
  columns,
1716
2472
  rows,
@@ -1721,23 +2477,23 @@ function SimpleDataTable({
1721
2477
  getRowKey
1722
2478
  }) {
1723
2479
  if (error) {
1724
- return /* @__PURE__ */ jsx32(StateBlock, { variant: "error", title: "Unable to load data", description: error, compact: true });
2480
+ return /* @__PURE__ */ jsx42(StateBlock, { variant: "error", title: "Unable to load data", description: error, compact: true });
1725
2481
  }
1726
2482
  if (loading) {
1727
- return /* @__PURE__ */ jsx32(StateBlock, { variant: "loading", title: "Loading data", description: "Please wait while the shared dataset is prepared.", compact: true });
2483
+ return /* @__PURE__ */ jsx42(StateBlock, { variant: "loading", title: "Loading data", description: "Please wait while the shared dataset is prepared.", compact: true });
1728
2484
  }
1729
2485
  if (!rows.length) {
1730
- return /* @__PURE__ */ jsx32(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, compact: true });
2486
+ return /* @__PURE__ */ jsx42(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, compact: true });
1731
2487
  }
1732
- return /* @__PURE__ */ jsx32(ScrollArea, { children: /* @__PURE__ */ jsxs28(Table, { striped: true, highlightOnHover: true, withTableBorder: true, withColumnBorders: true, children: [
1733
- /* @__PURE__ */ jsx32(Table.Thead, { children: /* @__PURE__ */ jsx32(Table.Tr, { children: columns.map((column) => /* @__PURE__ */ jsx32(Table.Th, { children: column.header }, String(column.key))) }) }),
1734
- /* @__PURE__ */ jsx32(Table.Tbody, { children: rows.map((row, index) => /* @__PURE__ */ jsx32(Table.Tr, { children: columns.map((column) => /* @__PURE__ */ jsx32(Table.Td, { children: column.render ? column.render(row) : String(row[column.key] ?? "") }, String(column.key))) }, getRowKey ? getRowKey(row, index) : index)) })
2488
+ return /* @__PURE__ */ jsx42(ScrollArea, { children: /* @__PURE__ */ jsxs37(Table, { striped: true, highlightOnHover: true, withTableBorder: true, withColumnBorders: true, children: [
2489
+ /* @__PURE__ */ jsx42(Table.Thead, { children: /* @__PURE__ */ jsx42(Table.Tr, { children: columns.map((column) => /* @__PURE__ */ jsx42(Table.Th, { children: column.header }, String(column.key))) }) }),
2490
+ /* @__PURE__ */ jsx42(Table.Tbody, { children: rows.map((row, index) => /* @__PURE__ */ jsx42(Table.Tr, { children: columns.map((column) => /* @__PURE__ */ jsx42(Table.Td, { children: column.render ? column.render(row) : String(row[column.key] ?? "") }, String(column.key))) }, getRowKey ? getRowKey(row, index) : index)) })
1735
2491
  ] }) });
1736
2492
  }
1737
2493
 
1738
2494
  // src/StatsSection.tsx
1739
- import { Stack as Stack28, Title as Title21 } from "@mantine/core";
1740
- import { jsx as jsx33, jsxs as jsxs29 } from "react/jsx-runtime";
2495
+ import { Stack as Stack37, Title as Title27 } from "@mantine/core";
2496
+ import { jsx as jsx43, jsxs as jsxs38 } from "react/jsx-runtime";
1741
2497
  function StatsSection({
1742
2498
  title,
1743
2499
  loading = false,
@@ -1749,11 +2505,11 @@ function StatsSection({
1749
2505
  }) {
1750
2506
  let content = children;
1751
2507
  if (error) {
1752
- content = /* @__PURE__ */ jsx33(StateBlock, { variant: "error", title: "Unable to load statistics", description: error, compact: true });
2508
+ content = /* @__PURE__ */ jsx43(StateBlock, { variant: "error", title: "Unable to load statistics", description: error, compact: true });
1753
2509
  } else if (loading) {
1754
- content = /* @__PURE__ */ jsx33(StateBlock, { variant: "loading", title: "Loading statistics", description: "This shared data surface is still synchronizing.", compact: true });
2510
+ content = /* @__PURE__ */ jsx43(StateBlock, { variant: "loading", title: "Loading statistics", description: "This shared data surface is still synchronizing.", compact: true });
1755
2511
  } else if (belowThreshold) {
1756
- content = /* @__PURE__ */ jsx33(
2512
+ content = /* @__PURE__ */ jsx43(
1757
2513
  StateBlock,
1758
2514
  {
1759
2515
  variant: "not-enough-data",
@@ -1763,10 +2519,10 @@ function StatsSection({
1763
2519
  }
1764
2520
  );
1765
2521
  } else if (placeholder) {
1766
- content = /* @__PURE__ */ jsx33(PlaceholderPanel, { ...placeholder, mode: "placeholder" });
2522
+ content = /* @__PURE__ */ jsx43(PlaceholderPanel, { ...placeholder, mode: "placeholder" });
1767
2523
  }
1768
- return /* @__PURE__ */ jsxs29(Stack28, { gap: "md", children: [
1769
- /* @__PURE__ */ jsx33(Title21, { order: 3, children: title }),
2524
+ return /* @__PURE__ */ jsxs38(Stack37, { gap: "md", children: [
2525
+ /* @__PURE__ */ jsx43(Title27, { order: 3, children: title }),
1770
2526
  content
1771
2527
  ] });
1772
2528
  }
@@ -3079,6 +3835,13 @@ export {
3079
3835
  EmptyState,
3080
3836
  GdsIcons,
3081
3837
  GdsVocabulary,
3838
+ createGdsVocabularyPack,
3839
+ mergeGdsVocabularyPacks,
3840
+ resolveSemanticActionConfig,
3841
+ getSemanticActionConfig,
3842
+ getSemanticActionLabel,
3843
+ ChoiceChip,
3844
+ ActionBar,
3082
3845
  MetricCard,
3083
3846
  ProgressCard,
3084
3847
  SectionPanel,
@@ -3087,21 +3850,29 @@ export {
3087
3850
  EditorialCard,
3088
3851
  ProductCard,
3089
3852
  PublicProductCard,
3853
+ PublicFoodCard,
3854
+ FoodMenuSection,
3855
+ ListingCard,
3090
3856
  DataToolbar,
3091
3857
  StateBlock,
3092
3858
  BrowseSurface,
3093
3859
  resolveAccentPanelStyles,
3094
3860
  AccentPanel,
3861
+ DetailProfileShell,
3095
3862
  PublicNav,
3096
3863
  PublicShell,
3097
3864
  PublicSiteFooter,
3098
3865
  PublicBrandFooter,
3099
3866
  AuthShell,
3867
+ SocialAuthButtons,
3100
3868
  ArticleShell,
3101
3869
  CtaButtonGroup,
3102
3870
  DocsPageShell,
3103
3871
  EditorialHero,
3104
3872
  FeatureBand,
3873
+ MapPanel,
3874
+ PublicFlowShell,
3875
+ PlaybackSurface,
3105
3876
  FormField,
3106
3877
  MediaField,
3107
3878
  MediaCard,