@doneisbetter/gds-core 2.6.3 → 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.
- package/dist/{chunk-QEPN7PSA.mjs → chunk-BAS4ZGKL.mjs} +1124 -415
- package/dist/{chunk-E3QXLNZO.mjs → chunk-EN3TN22M.mjs} +246 -38
- package/dist/client.d.mts +72 -10
- package/dist/client.d.ts +72 -10
- package/dist/client.js +1402 -468
- package/dist/client.mjs +36 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1402 -468
- package/dist/index.mjs +36 -2
- package/dist/server-BqFksoV3.d.mts +5540 -0
- package/dist/server-BqFksoV3.d.ts +5540 -0
- package/dist/server.d.mts +5 -6074
- package/dist/server.d.ts +5 -6074
- package/dist/server.js +1031 -310
- package/dist/server.mjs +23 -1
- package/package.json +2 -2
package/dist/client.js
CHANGED
|
@@ -23,6 +23,7 @@ __export(client_exports, {
|
|
|
23
23
|
AccentPanel: () => AccentPanel,
|
|
24
24
|
AccessRecoveryPanel: () => AccessRecoveryPanel,
|
|
25
25
|
AccessSummary: () => AccessSummary,
|
|
26
|
+
ActionBar: () => ActionBar,
|
|
26
27
|
ArticleShell: () => ArticleShell,
|
|
27
28
|
AuthShell: () => AuthShell,
|
|
28
29
|
BrowseSurface: () => BrowseSurface,
|
|
@@ -32,6 +33,8 @@ __export(client_exports, {
|
|
|
32
33
|
ConsumerSection: () => ConsumerSection,
|
|
33
34
|
CtaButtonGroup: () => CtaButtonGroup,
|
|
34
35
|
DataToolbar: () => DataToolbar,
|
|
36
|
+
DetailProfileShell: () => DetailProfileShell,
|
|
37
|
+
DiscoveryShell: () => DiscoveryShell,
|
|
35
38
|
DocsCodeBlock: () => DocsCodeBlock,
|
|
36
39
|
DocsPageShell: () => DocsPageShell,
|
|
37
40
|
EditorialCard: () => EditorialCard,
|
|
@@ -39,31 +42,43 @@ __export(client_exports, {
|
|
|
39
42
|
EmptyState: () => EmptyState,
|
|
40
43
|
FeatureBand: () => FeatureBand,
|
|
41
44
|
FilterDrawer: () => FilterDrawer,
|
|
45
|
+
FoodMenuSection: () => FoodMenuSection,
|
|
42
46
|
FormField: () => FormField,
|
|
43
47
|
GameBoardTile: () => GameBoardTile,
|
|
44
48
|
GdsIcons: () => GdsIcons,
|
|
45
49
|
GdsVocabulary: () => GdsVocabulary,
|
|
50
|
+
ListingCard: () => ListingCard,
|
|
51
|
+
MapPanel: () => MapPanel,
|
|
46
52
|
MediaCard: () => MediaCard,
|
|
47
53
|
MediaField: () => MediaField,
|
|
48
54
|
MetricCard: () => MetricCard,
|
|
49
55
|
PageHeader: () => PageHeader,
|
|
50
56
|
PlaceholderPanel: () => PlaceholderPanel,
|
|
57
|
+
PlaybackSurface: () => PlaybackSurface,
|
|
51
58
|
ProductCard: () => ProductCard,
|
|
52
59
|
ProgressCard: () => ProgressCard,
|
|
53
60
|
PublicBrandFooter: () => PublicBrandFooter,
|
|
61
|
+
PublicFlowShell: () => PublicFlowShell,
|
|
62
|
+
PublicFoodCard: () => PublicFoodCard,
|
|
54
63
|
PublicNav: () => PublicNav,
|
|
55
64
|
PublicProductCard: () => PublicProductCard,
|
|
56
65
|
PublicShell: () => PublicShell,
|
|
57
66
|
PublicSiteFooter: () => PublicSiteFooter,
|
|
58
67
|
SectionPanel: () => SectionPanel,
|
|
59
68
|
SemanticButton: () => SemanticButton,
|
|
69
|
+
ShareButtonGroup: () => ShareButtonGroup,
|
|
70
|
+
SidebarNav: () => SidebarNav,
|
|
71
|
+
SidebarNavItem: () => SidebarNavItem,
|
|
72
|
+
SidebarNavSection: () => SidebarNavSection,
|
|
60
73
|
SimpleDataTable: () => SimpleDataTable,
|
|
74
|
+
SocialAuthButtons: () => SocialAuthButtons,
|
|
61
75
|
StateBlock: () => StateBlock,
|
|
62
76
|
StatsSection: () => StatsSection,
|
|
63
77
|
StatusBadge: () => StatusBadge,
|
|
64
78
|
ThemeToggle: () => ThemeToggle,
|
|
65
79
|
UploadDropzone: () => UploadDropzone,
|
|
66
80
|
ar: () => ar,
|
|
81
|
+
createGdsVocabularyPack: () => createGdsVocabularyPack,
|
|
67
82
|
de: () => de,
|
|
68
83
|
en: () => en,
|
|
69
84
|
es: () => es,
|
|
@@ -75,7 +90,9 @@ __export(client_exports, {
|
|
|
75
90
|
he: () => he,
|
|
76
91
|
hu: () => hu,
|
|
77
92
|
it: () => it,
|
|
93
|
+
mergeGdsVocabularyPacks: () => mergeGdsVocabularyPacks,
|
|
78
94
|
resolveAccentPanelStyles: () => resolveAccentPanelStyles,
|
|
95
|
+
resolveSemanticActionConfig: () => resolveSemanticActionConfig,
|
|
79
96
|
ru: () => ru
|
|
80
97
|
});
|
|
81
98
|
module.exports = __toCommonJS(client_exports);
|
|
@@ -225,7 +242,6 @@ var GdsIcons = {
|
|
|
225
242
|
|
|
226
243
|
// src/vocabulary.ts
|
|
227
244
|
var GdsVocabulary = {
|
|
228
|
-
// Base
|
|
229
245
|
settings: { id: "gds.action.settings", defaultMessage: "Settings", icon: GdsIcons.Settings, feedback: { icon: GdsIcons.Settings, color: "teal", messageId: "gds.feedback.saved" } },
|
|
230
246
|
analytics: { id: "gds.action.analytics", defaultMessage: "Analytics", icon: GdsIcons.Analytics, feedback: { icon: GdsIcons.Analytics, color: "teal", messageId: "gds.feedback.loaded" } },
|
|
231
247
|
dashboard: { id: "gds.action.dashboard", defaultMessage: "Dashboard", icon: GdsIcons.Dashboard, feedback: { icon: GdsIcons.Dashboard, color: "teal", messageId: "gds.feedback.loaded" } },
|
|
@@ -241,14 +257,12 @@ var GdsVocabulary = {
|
|
|
241
257
|
close: { id: "gds.action.close", defaultMessage: "Close", icon: GdsIcons.Close, feedback: { icon: GdsIcons.Close, color: "gray", messageId: "gds.feedback.closed" } },
|
|
242
258
|
language: { id: "gds.action.language", defaultMessage: "Language", icon: GdsIcons.Language, feedback: { icon: GdsIcons.Language, color: "teal", messageId: "gds.feedback.changed" } },
|
|
243
259
|
theme: { id: "gds.action.theme", defaultMessage: "Theme", icon: GdsIcons.Theme, feedback: { icon: GdsIcons.Theme, color: "teal", messageId: "gds.feedback.changed" } },
|
|
244
|
-
// Navigation
|
|
245
260
|
home: { id: "gds.action.home", defaultMessage: "Home", icon: GdsIcons.Home, feedback: { icon: GdsIcons.Home, color: "teal", messageId: "gds.feedback.opened" } },
|
|
246
261
|
inbox: { id: "gds.action.inbox", defaultMessage: "Inbox", icon: GdsIcons.Inbox, feedback: { icon: GdsIcons.Inbox, color: "teal", messageId: "gds.feedback.opened" } },
|
|
247
262
|
calendar: { id: "gds.action.calendar", defaultMessage: "Calendar", icon: GdsIcons.Calendar, feedback: { icon: GdsIcons.Calendar, color: "teal", messageId: "gds.feedback.opened" } },
|
|
248
263
|
gallery: { id: "gds.action.gallery", defaultMessage: "Gallery", icon: GdsIcons.Gallery, feedback: { icon: GdsIcons.Gallery, color: "teal", messageId: "gds.feedback.opened" } },
|
|
249
264
|
history: { id: "gds.action.history", defaultMessage: "History", icon: GdsIcons.History, feedback: { icon: GdsIcons.History, color: "teal", messageId: "gds.feedback.opened" } },
|
|
250
265
|
profile: { id: "gds.action.profile", defaultMessage: "Profile", icon: GdsIcons.Profile, feedback: { icon: GdsIcons.Profile, color: "teal", messageId: "gds.feedback.opened" } },
|
|
251
|
-
// Actions
|
|
252
266
|
send: { id: "gds.action.send", defaultMessage: "Send", icon: GdsIcons.Send, feedback: { icon: GdsIcons.Send, color: "blue", messageId: "gds.feedback.sent" } },
|
|
253
267
|
reply: { id: "gds.action.reply", defaultMessage: "Reply", icon: GdsIcons.Reply, feedback: { icon: GdsIcons.Reply, color: "blue", messageId: "gds.feedback.replied" } },
|
|
254
268
|
forward: { id: "gds.action.forward", defaultMessage: "Forward", icon: GdsIcons.Forward, feedback: { icon: GdsIcons.Forward, color: "blue", messageId: "gds.feedback.forwarded" } },
|
|
@@ -262,12 +276,10 @@ var GdsVocabulary = {
|
|
|
262
276
|
uncheck: { id: "gds.action.uncheck", defaultMessage: "Uncheck", icon: GdsIcons.Uncheck, feedback: { icon: GdsIcons.Uncheck, color: "red", messageId: "gds.feedback.unchecked" } },
|
|
263
277
|
complete: { id: "gds.action.complete", defaultMessage: "Complete", icon: GdsIcons.Complete, feedback: { icon: GdsIcons.Complete, color: "teal", messageId: "gds.feedback.completed" } },
|
|
264
278
|
clear: { id: "gds.action.clear", defaultMessage: "Clear", icon: GdsIcons.Clear, feedback: { icon: GdsIcons.Clear, color: "red", messageId: "gds.feedback.cleared" } },
|
|
265
|
-
// Media (camera project)
|
|
266
279
|
capture: { id: "gds.action.capture", defaultMessage: "Capture", icon: GdsIcons.Capture, feedback: { icon: GdsIcons.Capture, color: "teal", messageId: "gds.feedback.captured" } },
|
|
267
280
|
record: { id: "gds.action.record", defaultMessage: "Record", icon: GdsIcons.Record, feedback: { icon: GdsIcons.Record, color: "teal", messageId: "gds.feedback.recorded" } },
|
|
268
281
|
flip: { id: "gds.action.flip", defaultMessage: "Flip", icon: GdsIcons.Flip, feedback: { icon: GdsIcons.Flip, color: "teal", messageId: "gds.feedback.flipped" } },
|
|
269
282
|
flash: { id: "gds.action.flash", defaultMessage: "Flash", icon: GdsIcons.Flash, feedback: { icon: GdsIcons.Flash, color: "teal", messageId: "gds.feedback.flashed" } },
|
|
270
|
-
// Domain specific (amanoba, classscout, kidex, habigoal)
|
|
271
283
|
course: { id: "gds.action.course", defaultMessage: "Course", icon: GdsIcons.Course, feedback: { icon: GdsIcons.Course, color: "teal", messageId: "gds.feedback.done" } },
|
|
272
284
|
lesson: { id: "gds.action.lesson", defaultMessage: "Lesson", icon: GdsIcons.Lesson, feedback: { icon: GdsIcons.Lesson, color: "teal", messageId: "gds.feedback.done" } },
|
|
273
285
|
certificate: { id: "gds.action.certificate", defaultMessage: "Certificate", icon: GdsIcons.Certificate, feedback: { icon: GdsIcons.Certificate, color: "teal", messageId: "gds.feedback.done" } },
|
|
@@ -280,7 +292,6 @@ var GdsVocabulary = {
|
|
|
280
292
|
goal: { id: "gds.action.goal", defaultMessage: "Goal", icon: GdsIcons.Goal, feedback: { icon: GdsIcons.Goal, color: "teal", messageId: "gds.feedback.done" } },
|
|
281
293
|
streak: { id: "gds.action.streak", defaultMessage: "Streak", icon: GdsIcons.Streak, feedback: { icon: GdsIcons.Streak, color: "teal", messageId: "gds.feedback.done" } },
|
|
282
294
|
reward: { id: "gds.action.reward", defaultMessage: "Reward", icon: GdsIcons.Reward, feedback: { icon: GdsIcons.Reward, color: "yellow", messageId: "gds.feedback.rewarded" } },
|
|
283
|
-
// Codebase analysis additions
|
|
284
295
|
trophy: { id: "gds.action.trophy", defaultMessage: "Trophy", icon: GdsIcons.Trophy, feedback: { icon: GdsIcons.Trophy, color: "yellow", messageId: "gds.feedback.rewarded" } },
|
|
285
296
|
crown: { id: "gds.action.crown", defaultMessage: "Crown", icon: GdsIcons.Crown, feedback: { icon: GdsIcons.Crown, color: "yellow", messageId: "gds.feedback.rewarded" } },
|
|
286
297
|
pause: { id: "gds.action.pause", defaultMessage: "Pause", icon: GdsIcons.Pause, feedback: { icon: GdsIcons.Pause, color: "teal", messageId: "gds.feedback.paused" } },
|
|
@@ -300,7 +311,6 @@ var GdsVocabulary = {
|
|
|
300
311
|
help: { id: "gds.action.help", defaultMessage: "Help", icon: GdsIcons.Help, feedback: { icon: GdsIcons.Help, color: "teal", messageId: "gds.feedback.done" } },
|
|
301
312
|
filter: { id: "gds.action.filter", defaultMessage: "Filter", icon: GdsIcons.Filter, feedback: { icon: GdsIcons.Filter, color: "teal", messageId: "gds.feedback.filtered" } },
|
|
302
313
|
sort: { id: "gds.action.sort", defaultMessage: "Sort", icon: GdsIcons.Sort, feedback: { icon: GdsIcons.Sort, color: "teal", messageId: "gds.feedback.sorted" } },
|
|
303
|
-
// Audit-driven additions
|
|
304
314
|
export: { id: "gds.action.export", defaultMessage: "Export", icon: GdsIcons.Export, feedback: { icon: GdsIcons.Export, color: "teal", messageId: "gds.feedback.exported" } },
|
|
305
315
|
import: { id: "gds.action.import", defaultMessage: "Import", icon: GdsIcons.Import, feedback: { icon: GdsIcons.Import, color: "teal", messageId: "gds.feedback.imported" } },
|
|
306
316
|
preview: { id: "gds.action.preview", defaultMessage: "Preview", icon: GdsIcons.Preview, feedback: { icon: GdsIcons.Preview, color: "teal", messageId: "gds.feedback.previewed" } },
|
|
@@ -318,19 +328,61 @@ var GdsVocabulary = {
|
|
|
318
328
|
refer: { id: "gds.action.refer", defaultMessage: "Refer", icon: GdsIcons.Refer, feedback: { icon: GdsIcons.Refer, color: "teal", messageId: "gds.feedback.referred" } },
|
|
319
329
|
evidence: { id: "gds.action.evidence", defaultMessage: "Evidence", icon: GdsIcons.Evidence, feedback: { icon: GdsIcons.Evidence, color: "teal", messageId: "gds.feedback.added" } }
|
|
320
330
|
};
|
|
321
|
-
function
|
|
322
|
-
return
|
|
331
|
+
function createGdsVocabularyPack(namespace, actions) {
|
|
332
|
+
return {
|
|
333
|
+
namespace,
|
|
334
|
+
actions: Object.fromEntries(
|
|
335
|
+
Object.entries(actions).map(([key, definition]) => [
|
|
336
|
+
`${namespace}:${key}`,
|
|
337
|
+
{
|
|
338
|
+
...definition,
|
|
339
|
+
id: `gds.action.${namespace}.${key}`
|
|
340
|
+
}
|
|
341
|
+
])
|
|
342
|
+
)
|
|
343
|
+
};
|
|
323
344
|
}
|
|
324
|
-
function
|
|
325
|
-
|
|
345
|
+
function mergeGdsVocabularyPacks(packs = []) {
|
|
346
|
+
return packs.reduce((acc, pack) => {
|
|
347
|
+
for (const [key, definition] of Object.entries(pack.actions)) {
|
|
348
|
+
acc[key] = definition;
|
|
349
|
+
}
|
|
350
|
+
return acc;
|
|
351
|
+
}, {});
|
|
352
|
+
}
|
|
353
|
+
function resolveSemanticActionConfig(action, packs = []) {
|
|
354
|
+
const baseConfig = GdsVocabulary[action];
|
|
355
|
+
if (baseConfig) {
|
|
356
|
+
return baseConfig;
|
|
357
|
+
}
|
|
358
|
+
const merged = mergeGdsVocabularyPacks(packs);
|
|
359
|
+
const packConfig = merged[action];
|
|
360
|
+
if (packConfig) {
|
|
361
|
+
return packConfig;
|
|
362
|
+
}
|
|
363
|
+
throw new Error(`Unknown semantic action: ${action}`);
|
|
364
|
+
}
|
|
365
|
+
function getSemanticActionConfig(action, packs = []) {
|
|
366
|
+
return resolveSemanticActionConfig(action, packs);
|
|
367
|
+
}
|
|
368
|
+
function getSemanticActionLabel(action, translate, packs = []) {
|
|
369
|
+
const config = resolveSemanticActionConfig(action, packs);
|
|
326
370
|
return translate ? translate(config.id, config.defaultMessage) : config.defaultMessage;
|
|
327
371
|
}
|
|
328
372
|
|
|
329
373
|
// src/SemanticButton.tsx
|
|
330
374
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
331
|
-
function SemanticButton({
|
|
375
|
+
function SemanticButton({
|
|
376
|
+
action,
|
|
377
|
+
loading,
|
|
378
|
+
feedbackState,
|
|
379
|
+
feedbackText,
|
|
380
|
+
prerenderLabelOnly = true,
|
|
381
|
+
vocabularyPacks = [],
|
|
382
|
+
...props
|
|
383
|
+
}) {
|
|
332
384
|
const { t } = (0, import_gds_theme.useGdsTranslation)();
|
|
333
|
-
const config =
|
|
385
|
+
const config = resolveSemanticActionConfig(action, vocabularyPacks);
|
|
334
386
|
const [mounted, setMounted] = (0, import_react.useState)(!prerenderLabelOnly);
|
|
335
387
|
const [internalFeedback, setInternalFeedback] = (0, import_react.useState)(null);
|
|
336
388
|
(0, import_react.useEffect)(() => {
|
|
@@ -346,14 +398,14 @@ function SemanticButton({ action, loading, feedbackState, feedbackText, prerende
|
|
|
346
398
|
}
|
|
347
399
|
}, [feedbackState]);
|
|
348
400
|
let Icon = config.icon;
|
|
349
|
-
let label = getSemanticActionLabel(action, t);
|
|
401
|
+
let label = getSemanticActionLabel(action, t, vocabularyPacks);
|
|
350
402
|
let color = props.color;
|
|
351
403
|
if (!mounted) {
|
|
352
404
|
const { leftSection, ...buttonProps } = props;
|
|
353
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_core3.Button, { loading, color, ...buttonProps, children: getSemanticActionLabel(action) });
|
|
405
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_core3.Button, { loading, color, ...buttonProps, children: getSemanticActionLabel(action, void 0, vocabularyPacks) });
|
|
354
406
|
}
|
|
355
407
|
if (internalFeedback === "success") {
|
|
356
|
-
const defaultFeedback =
|
|
408
|
+
const defaultFeedback = config.feedback ?? { icon: import_icons_react2.IconCheck, color: "teal", messageId: "gds.feedback.saved" };
|
|
357
409
|
Icon = defaultFeedback.icon;
|
|
358
410
|
label = feedbackText || t(defaultFeedback.messageId, "Success");
|
|
359
411
|
color = defaultFeedback.color;
|
|
@@ -467,34 +519,89 @@ function ChoiceChip({
|
|
|
467
519
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_core6.Badge, { ...sharedProps, children: label });
|
|
468
520
|
}
|
|
469
521
|
|
|
470
|
-
// src/
|
|
522
|
+
// src/ActionBar.tsx
|
|
471
523
|
var import_core7 = require("@mantine/core");
|
|
472
524
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
525
|
+
function renderSemanticAction(action, slot, vocabularyPacks) {
|
|
526
|
+
const { action: actionId, variant, ariaLabel, ...props } = action;
|
|
527
|
+
const fallbackVariant = slot === "primary" ? "filled" : slot === "secondary" ? "default" : "subtle";
|
|
528
|
+
const config = resolveSemanticActionConfig(actionId, vocabularyPacks);
|
|
529
|
+
const Icon = config.icon;
|
|
530
|
+
const label = getSemanticActionLabel(actionId, void 0, vocabularyPacks);
|
|
531
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
532
|
+
import_core7.Button,
|
|
533
|
+
{
|
|
534
|
+
leftSection: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Icon, { size: "1rem", stroke: 1.75 }),
|
|
535
|
+
"aria-label": ariaLabel ?? label,
|
|
536
|
+
variant: variant ?? fallbackVariant,
|
|
537
|
+
...props,
|
|
538
|
+
children: label
|
|
539
|
+
},
|
|
540
|
+
`${slot}-${actionId}`
|
|
541
|
+
);
|
|
542
|
+
}
|
|
543
|
+
function ActionBar({
|
|
544
|
+
primary,
|
|
545
|
+
secondary = [],
|
|
546
|
+
tertiary = [],
|
|
547
|
+
iconOnly = [],
|
|
548
|
+
gap = "sm",
|
|
549
|
+
vocabularyPacks = []
|
|
550
|
+
}) {
|
|
551
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_core7.Stack, { gap, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_core7.Group, { justify: "space-between", align: "center", gap, wrap: "wrap", children: [
|
|
552
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_core7.Group, { gap, wrap: "wrap", children: [
|
|
553
|
+
secondary.map((action) => renderSemanticAction(action, "secondary", vocabularyPacks)),
|
|
554
|
+
tertiary.map((action) => renderSemanticAction(action, "tertiary", vocabularyPacks))
|
|
555
|
+
] }),
|
|
556
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(import_core7.Group, { gap, wrap: "wrap", justify: "flex-end", style: { marginInlineStart: "auto" }, children: [
|
|
557
|
+
iconOnly.map(({ action, ariaLabel, ...props }) => {
|
|
558
|
+
const config = resolveSemanticActionConfig(action, vocabularyPacks);
|
|
559
|
+
const Icon = config.icon;
|
|
560
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
561
|
+
import_core7.ActionIcon,
|
|
562
|
+
{
|
|
563
|
+
variant: "subtle",
|
|
564
|
+
size: "lg",
|
|
565
|
+
"aria-label": ariaLabel ?? getSemanticActionLabel(action, void 0, vocabularyPacks),
|
|
566
|
+
...props,
|
|
567
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Icon, { size: "1rem", stroke: 1.75 })
|
|
568
|
+
},
|
|
569
|
+
`icon-${action}`
|
|
570
|
+
);
|
|
571
|
+
}),
|
|
572
|
+
primary ? renderSemanticAction(primary, "primary", vocabularyPacks) : null
|
|
573
|
+
] })
|
|
574
|
+
] }) });
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
// src/MetricCard.tsx
|
|
578
|
+
var import_core8 = require("@mantine/core");
|
|
579
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
473
580
|
var trendColors = {
|
|
474
581
|
positive: "teal",
|
|
475
582
|
negative: "red",
|
|
476
583
|
neutral: "gray"
|
|
477
584
|
};
|
|
478
585
|
function MetricCard({ label, value, description, trend, icon, footer }) {
|
|
479
|
-
return /* @__PURE__ */ (0,
|
|
480
|
-
/* @__PURE__ */ (0,
|
|
481
|
-
/* @__PURE__ */ (0,
|
|
482
|
-
/* @__PURE__ */ (0,
|
|
483
|
-
/* @__PURE__ */ (0,
|
|
586
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core8.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_core8.Stack, { gap: "md", children: [
|
|
587
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_core8.Group, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
|
|
588
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_core8.Stack, { gap: 4, children: [
|
|
589
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core8.Text, { size: "sm", c: "dimmed", fw: 600, children: label }),
|
|
590
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core8.Title, { order: 3, children: value })
|
|
484
591
|
] }),
|
|
485
|
-
icon ? /* @__PURE__ */ (0,
|
|
592
|
+
icon ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core8.ThemeIcon, { variant: "light", size: "xl", radius: "xl", "aria-hidden": true, children: icon }) : null
|
|
486
593
|
] }),
|
|
487
|
-
description || trend ? /* @__PURE__ */ (0,
|
|
488
|
-
description ? /* @__PURE__ */ (0,
|
|
489
|
-
trend ? /* @__PURE__ */ (0,
|
|
594
|
+
description || trend ? /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(import_core8.Group, { justify: "space-between", align: "center", gap: "sm", children: [
|
|
595
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core8.Text, { size: "sm", c: "dimmed", flex: 1, children: description }) : /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", {}),
|
|
596
|
+
trend ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_core8.Badge, { color: trendColors[trend.tone ?? "neutral"], variant: "light", children: trend.label }) : null
|
|
490
597
|
] }) : null,
|
|
491
598
|
footer
|
|
492
599
|
] }) });
|
|
493
600
|
}
|
|
494
601
|
|
|
495
602
|
// src/ProgressCard.tsx
|
|
496
|
-
var
|
|
497
|
-
var
|
|
603
|
+
var import_core9 = require("@mantine/core");
|
|
604
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
498
605
|
function ProgressCard({
|
|
499
606
|
label,
|
|
500
607
|
value,
|
|
@@ -503,31 +610,31 @@ function ProgressCard({
|
|
|
503
610
|
description,
|
|
504
611
|
action
|
|
505
612
|
}) {
|
|
506
|
-
return /* @__PURE__ */ (0,
|
|
507
|
-
/* @__PURE__ */ (0,
|
|
508
|
-
/* @__PURE__ */ (0,
|
|
509
|
-
/* @__PURE__ */ (0,
|
|
510
|
-
/* @__PURE__ */ (0,
|
|
613
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core9.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core9.Stack, { gap: "md", children: [
|
|
614
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core9.Group, { justify: "space-between", align: "flex-start", children: [
|
|
615
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core9.Stack, { gap: 4, children: [
|
|
616
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core9.Text, { size: "sm", c: "dimmed", fw: 600, children: label }),
|
|
617
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core9.Title, { order: 3, children: value })
|
|
511
618
|
] }),
|
|
512
619
|
action
|
|
513
620
|
] }),
|
|
514
|
-
description ? /* @__PURE__ */ (0,
|
|
515
|
-
/* @__PURE__ */ (0,
|
|
516
|
-
/* @__PURE__ */ (0,
|
|
517
|
-
/* @__PURE__ */ (0,
|
|
518
|
-
/* @__PURE__ */ (0,
|
|
621
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core9.Text, { size: "sm", c: "dimmed", children: description }) : null,
|
|
622
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core9.Stack, { gap: 6, children: [
|
|
623
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core9.Group, { justify: "space-between", gap: "sm", children: [
|
|
624
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core9.Text, { size: "sm", fw: 500, children: progressLabel ?? "Progress" }),
|
|
625
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_core9.Text, { size: "sm", c: "dimmed", children: [
|
|
519
626
|
Math.round(progress),
|
|
520
627
|
"%"
|
|
521
628
|
] })
|
|
522
629
|
] }),
|
|
523
|
-
/* @__PURE__ */ (0,
|
|
630
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_core9.Progress, { value: progress, radius: "xl", size: "md" })
|
|
524
631
|
] })
|
|
525
632
|
] }) });
|
|
526
633
|
}
|
|
527
634
|
|
|
528
635
|
// src/SectionPanel.tsx
|
|
529
|
-
var
|
|
530
|
-
var
|
|
636
|
+
var import_core10 = require("@mantine/core");
|
|
637
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
531
638
|
var toneBackgrounds = {
|
|
532
639
|
default: "var(--mantine-color-body)",
|
|
533
640
|
supporting: "light-dark(var(--mantine-color-gray-0), color-mix(in srgb, var(--mantine-color-dark-7) 92%, black))",
|
|
@@ -543,23 +650,23 @@ function SectionPanel({
|
|
|
543
650
|
id,
|
|
544
651
|
divided = true
|
|
545
652
|
}) {
|
|
546
|
-
return /* @__PURE__ */ (0,
|
|
547
|
-
title || description || action ? /* @__PURE__ */ (0,
|
|
548
|
-
/* @__PURE__ */ (0,
|
|
549
|
-
title || description ? /* @__PURE__ */ (0,
|
|
550
|
-
title ? /* @__PURE__ */ (0,
|
|
551
|
-
description ? /* @__PURE__ */ (0,
|
|
653
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core10.Paper, { id, withBorder: true, radius: "xl", p: "lg", style: { background: toneBackgrounds[tone] }, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_core10.Stack, { gap: "md", children: [
|
|
654
|
+
title || description || action ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
655
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_core10.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
|
|
656
|
+
title || description ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_core10.Stack, { gap: 4, children: [
|
|
657
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core10.Title, { order: 3, children: title }) : null,
|
|
658
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core10.Text, { size: "sm", c: "dimmed", children: description }) : null
|
|
552
659
|
] }) : null,
|
|
553
660
|
action
|
|
554
661
|
] }),
|
|
555
|
-
divided ? /* @__PURE__ */ (0,
|
|
662
|
+
divided ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_core10.Divider, {}) : null
|
|
556
663
|
] }) : null,
|
|
557
664
|
children
|
|
558
665
|
] }) });
|
|
559
666
|
}
|
|
560
667
|
|
|
561
668
|
// src/ConsumerSection.tsx
|
|
562
|
-
var
|
|
669
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
563
670
|
function ConsumerSection({
|
|
564
671
|
title,
|
|
565
672
|
description,
|
|
@@ -567,23 +674,23 @@ function ConsumerSection({
|
|
|
567
674
|
children,
|
|
568
675
|
tone = "default"
|
|
569
676
|
}) {
|
|
570
|
-
return /* @__PURE__ */ (0,
|
|
677
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SectionPanel, { title, description, action, tone, children });
|
|
571
678
|
}
|
|
572
679
|
|
|
573
680
|
// src/ConsumerDashboardGrid.tsx
|
|
574
|
-
var
|
|
575
|
-
var
|
|
681
|
+
var import_core11 = require("@mantine/core");
|
|
682
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
576
683
|
function ConsumerDashboardGrid({
|
|
577
684
|
children,
|
|
578
685
|
columns = 3
|
|
579
686
|
}) {
|
|
580
|
-
return /* @__PURE__ */ (0,
|
|
687
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_core11.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children });
|
|
581
688
|
}
|
|
582
689
|
|
|
583
690
|
// src/GameBoardTile.tsx
|
|
584
|
-
var
|
|
691
|
+
var import_core12 = require("@mantine/core");
|
|
585
692
|
var import_hooks = require("@mantine/hooks");
|
|
586
|
-
var
|
|
693
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
587
694
|
function GameBoardTile({
|
|
588
695
|
face,
|
|
589
696
|
revealed,
|
|
@@ -592,12 +699,12 @@ function GameBoardTile({
|
|
|
592
699
|
onPress,
|
|
593
700
|
highlightColor
|
|
594
701
|
}) {
|
|
595
|
-
const theme = (0,
|
|
702
|
+
const theme = (0, import_core12.useMantineTheme)();
|
|
596
703
|
const reduceMotion = (0, import_hooks.useMediaQuery)("(prefers-reduced-motion: reduce)");
|
|
597
704
|
const highlighted = revealed && !matched;
|
|
598
705
|
const revealBg = highlightColor ?? (typeof theme.primaryColor === "string" ? `${theme.primaryColor}.5` : "violet.5");
|
|
599
|
-
return /* @__PURE__ */ (0,
|
|
600
|
-
|
|
706
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core12.UnstyledButton, { w: "100%", disabled, onClick: onPress, "aria-pressed": revealed, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
707
|
+
import_core12.Paper,
|
|
601
708
|
{
|
|
602
709
|
withBorder: true,
|
|
603
710
|
radius: "md",
|
|
@@ -612,14 +719,14 @@ function GameBoardTile({
|
|
|
612
719
|
transform: reduceMotion || !highlighted ? "scale(1)" : "scale(1.02)"
|
|
613
720
|
}
|
|
614
721
|
},
|
|
615
|
-
children: /* @__PURE__ */ (0,
|
|
722
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core12.Center, { h: "100%", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_core12.Text, { size: "xl", fw: 700, children: face }) })
|
|
616
723
|
}
|
|
617
724
|
) });
|
|
618
725
|
}
|
|
619
726
|
|
|
620
727
|
// src/EditorialCard.tsx
|
|
621
|
-
var
|
|
622
|
-
var
|
|
728
|
+
var import_core13 = require("@mantine/core");
|
|
729
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
623
730
|
var tonePalette = {
|
|
624
731
|
default: {
|
|
625
732
|
accent: "violet",
|
|
@@ -639,8 +746,8 @@ var tonePalette = {
|
|
|
639
746
|
}
|
|
640
747
|
};
|
|
641
748
|
function EditorialMediaFallback({ compact }) {
|
|
642
|
-
return /* @__PURE__ */ (0,
|
|
643
|
-
|
|
749
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.AspectRatio, { ratio: compact ? 16 / 10 : 4 / 3, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
750
|
+
import_core13.Box,
|
|
644
751
|
{
|
|
645
752
|
style: {
|
|
646
753
|
display: "grid",
|
|
@@ -650,7 +757,7 @@ function EditorialMediaFallback({ compact }) {
|
|
|
650
757
|
background: "var(--mantine-color-gray-0)",
|
|
651
758
|
borderRadius: "var(--mantine-radius-md)"
|
|
652
759
|
},
|
|
653
|
-
children: /* @__PURE__ */ (0,
|
|
760
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(GdsIcons.Gallery, { size: compact ? "1.5rem" : "2rem" })
|
|
654
761
|
}
|
|
655
762
|
) });
|
|
656
763
|
}
|
|
@@ -673,8 +780,8 @@ function EditorialCard({
|
|
|
673
780
|
const featured = variant === "featured";
|
|
674
781
|
const palette = tonePalette[tone];
|
|
675
782
|
const interactiveProps = href ? { component: "a", href } : onClick ? { component: "button", onClick, type: "button" } : {};
|
|
676
|
-
return /* @__PURE__ */ (0,
|
|
677
|
-
|
|
783
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
|
|
784
|
+
import_core13.Card,
|
|
678
785
|
{
|
|
679
786
|
className: classNames?.root,
|
|
680
787
|
withBorder: true,
|
|
@@ -688,21 +795,21 @@ function EditorialCard({
|
|
|
688
795
|
cursor: href || onClick ? "pointer" : "default"
|
|
689
796
|
},
|
|
690
797
|
children: [
|
|
691
|
-
/* @__PURE__ */ (0,
|
|
692
|
-
/* @__PURE__ */ (0,
|
|
693
|
-
/* @__PURE__ */ (0,
|
|
694
|
-
/* @__PURE__ */ (0,
|
|
695
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
696
|
-
/* @__PURE__ */ (0,
|
|
798
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Card.Section, { className: classNames?.media, children: media ?? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(EditorialMediaFallback, { compact }) }),
|
|
799
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Stack, { gap: "md", p: compact ? "md" : "lg", className: classNames?.body, children: [
|
|
800
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Group, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "wrap", children: [
|
|
801
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Stack, { gap: 4, flex: 1, children: [
|
|
802
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Text, { size: "xs", fw: 700, c: "dimmed", children: eyebrow }) : null,
|
|
803
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Title, { order: compact ? 4 : 3, className: classNames?.title, children: title })
|
|
697
804
|
] }),
|
|
698
|
-
badge ? typeof badge === "string" ? /* @__PURE__ */ (0,
|
|
805
|
+
badge ? typeof badge === "string" ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Badge, { color: palette.accent, variant: "light", children: badge }) : badge : null
|
|
699
806
|
] }),
|
|
700
|
-
description ? /* @__PURE__ */ (0,
|
|
701
|
-
meta ? /* @__PURE__ */ (0,
|
|
702
|
-
href || onClick || ctaLabel ? /* @__PURE__ */ (0,
|
|
703
|
-
/* @__PURE__ */ (0,
|
|
704
|
-
/* @__PURE__ */ (0,
|
|
705
|
-
|
|
807
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Text, { size: "sm", c: "dimmed", children: description }) : null,
|
|
808
|
+
meta ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Text, { size: "sm", c: "dimmed", className: classNames?.meta, children: meta }) : null,
|
|
809
|
+
href || onClick || ctaLabel ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_core13.Group, { gap: 6, c: `${palette.accent}.7`, className: classNames?.action, children: [
|
|
810
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_core13.Text, { fw: 600, size: "sm", children: ctaLabel }),
|
|
811
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
812
|
+
import_core13.Anchor,
|
|
706
813
|
{
|
|
707
814
|
component: "span",
|
|
708
815
|
underline: "never",
|
|
@@ -719,8 +826,8 @@ function EditorialCard({
|
|
|
719
826
|
}
|
|
720
827
|
|
|
721
828
|
// src/ProductCard.tsx
|
|
722
|
-
var
|
|
723
|
-
var
|
|
829
|
+
var import_core14 = require("@mantine/core");
|
|
830
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
724
831
|
function ProductCard({
|
|
725
832
|
title,
|
|
726
833
|
description,
|
|
@@ -733,39 +840,39 @@ function ProductCard({
|
|
|
733
840
|
footer
|
|
734
841
|
}) {
|
|
735
842
|
const MoreIcon = GdsIcons.Menu;
|
|
736
|
-
return /* @__PURE__ */ (0,
|
|
843
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: "md", children: [
|
|
737
844
|
media,
|
|
738
|
-
/* @__PURE__ */ (0,
|
|
739
|
-
/* @__PURE__ */ (0,
|
|
740
|
-
icon ? /* @__PURE__ */ (0,
|
|
741
|
-
/* @__PURE__ */ (0,
|
|
742
|
-
/* @__PURE__ */ (0,
|
|
743
|
-
description ? /* @__PURE__ */ (0,
|
|
845
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Group, { justify: "space-between", align: "flex-start", wrap: "nowrap", children: [
|
|
846
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Group, { align: "flex-start", gap: "sm", wrap: "nowrap", children: [
|
|
847
|
+
icon ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.ThemeIcon, { variant: "light", size: "xl", radius: "xl", "aria-hidden": true, children: icon }) : null,
|
|
848
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Stack, { gap: 4, children: [
|
|
849
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Title, { order: 4, children: title }),
|
|
850
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { size: "sm", c: "dimmed", lineClamp: 3, children: description }) : null
|
|
744
851
|
] })
|
|
745
852
|
] }),
|
|
746
|
-
/* @__PURE__ */ (0,
|
|
747
|
-
typeof status === "string" ? /* @__PURE__ */ (0,
|
|
748
|
-
secondaryActions.length ? /* @__PURE__ */ (0,
|
|
749
|
-
/* @__PURE__ */ (0,
|
|
750
|
-
/* @__PURE__ */ (0,
|
|
751
|
-
(action) => action.href ? /* @__PURE__ */ (0,
|
|
853
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Group, { gap: "xs", align: "center", wrap: "nowrap", children: [
|
|
854
|
+
typeof status === "string" ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Badge, { variant: "light", children: status }) : status,
|
|
855
|
+
secondaryActions.length ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Menu, { position: "bottom-end", withinPortal: true, children: [
|
|
856
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Menu.Target, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.ActionIcon, { variant: "subtle", "aria-label": "More actions", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(MoreIcon, { size: "1rem" }) }) }),
|
|
857
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Menu.Dropdown, { children: secondaryActions.map(
|
|
858
|
+
(action) => action.href ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Menu.Item, { component: "a", href: action.href, color: action.color, children: action.label }, action.label) : /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Menu.Item, { onClick: action.onClick, color: action.color, children: action.label }, action.label)
|
|
752
859
|
) })
|
|
753
860
|
] }) : null
|
|
754
861
|
] })
|
|
755
862
|
] }),
|
|
756
|
-
metadata.length ? /* @__PURE__ */ (0,
|
|
757
|
-
/* @__PURE__ */ (0,
|
|
758
|
-
/* @__PURE__ */ (0,
|
|
863
|
+
metadata.length ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Stack, { gap: 6, children: metadata.map((item) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_core14.Group, { justify: "space-between", gap: "sm", children: [
|
|
864
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { size: "sm", c: "dimmed", children: item.label }),
|
|
865
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Text, { size: "sm", fw: 500, ta: "right", children: item.value })
|
|
759
866
|
] }, item.label)) }) : null,
|
|
760
|
-
primaryAction ? /* @__PURE__ */ (0,
|
|
867
|
+
primaryAction ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_core14.Group, { justify: "space-between", children: primaryAction }) : null,
|
|
761
868
|
footer
|
|
762
869
|
] }) });
|
|
763
870
|
}
|
|
764
871
|
|
|
765
872
|
// src/PublicProductCard.tsx
|
|
766
873
|
var import_react2 = require("react");
|
|
767
|
-
var
|
|
768
|
-
var
|
|
874
|
+
var import_core15 = require("@mantine/core");
|
|
875
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
769
876
|
var stateConfig = {
|
|
770
877
|
available: { label: "Available", color: "teal" },
|
|
771
878
|
limited: { label: "Limited", color: "yellow" },
|
|
@@ -782,29 +889,29 @@ function enhanceAction(action, disabled) {
|
|
|
782
889
|
});
|
|
783
890
|
}
|
|
784
891
|
function ImageFallback({ compact }) {
|
|
785
|
-
return /* @__PURE__ */ (0,
|
|
786
|
-
|
|
892
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.AspectRatio, { ratio: compact ? 16 / 9 : 4 / 3, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
893
|
+
import_core15.ThemeIcon,
|
|
787
894
|
{
|
|
788
895
|
size: "100%",
|
|
789
896
|
radius: "md",
|
|
790
897
|
variant: "light",
|
|
791
898
|
color: "gray",
|
|
792
899
|
"aria-label": "No product image available",
|
|
793
|
-
children: /* @__PURE__ */ (0,
|
|
900
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(GdsIcons.Gallery, { size: compact ? "1.5rem" : "2rem" })
|
|
794
901
|
}
|
|
795
902
|
) });
|
|
796
903
|
}
|
|
797
904
|
function LoadingCard({ compact }) {
|
|
798
|
-
return /* @__PURE__ */ (0,
|
|
799
|
-
/* @__PURE__ */ (0,
|
|
800
|
-
/* @__PURE__ */ (0,
|
|
801
|
-
/* @__PURE__ */ (0,
|
|
802
|
-
/* @__PURE__ */ (0,
|
|
803
|
-
/* @__PURE__ */ (0,
|
|
905
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Card, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core15.Stack, { gap: "md", children: [
|
|
906
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.AspectRatio, { ratio: compact ? 16 / 9 : 4 / 3, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Skeleton, { radius: "md" }) }),
|
|
907
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core15.Stack, { gap: "xs", children: [
|
|
908
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Skeleton, { height: 20, radius: "sm", width: "70%" }),
|
|
909
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Skeleton, { height: 14, radius: "sm", width: "100%" }),
|
|
910
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Skeleton, { height: 14, radius: "sm", width: "85%" })
|
|
804
911
|
] }),
|
|
805
|
-
/* @__PURE__ */ (0,
|
|
806
|
-
/* @__PURE__ */ (0,
|
|
807
|
-
/* @__PURE__ */ (0,
|
|
912
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core15.Group, { justify: "space-between", align: "center", children: [
|
|
913
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Skeleton, { height: 18, radius: "sm", width: 72 }),
|
|
914
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Skeleton, { height: 36, radius: "md", width: 120 })
|
|
808
915
|
] })
|
|
809
916
|
] }) });
|
|
810
917
|
}
|
|
@@ -827,7 +934,7 @@ function PublicProductCard({
|
|
|
827
934
|
disabled = false
|
|
828
935
|
}) {
|
|
829
936
|
if (loading) {
|
|
830
|
-
return /* @__PURE__ */ (0,
|
|
937
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(LoadingCard, { compact });
|
|
831
938
|
}
|
|
832
939
|
const isActionDisabled = disabled || state === "sold-out";
|
|
833
940
|
const resolvedPrimaryAction = enhanceAction(primaryAction, isActionDisabled);
|
|
@@ -840,46 +947,312 @@ function PublicProductCard({
|
|
|
840
947
|
const pickupHelper = helperKind === "pickup" ? helperText : pickupNote;
|
|
841
948
|
const inventoryHelper = helperKind === "inventory" ? helperText : inventoryNote;
|
|
842
949
|
const hasSupportingRegion = Boolean(price || supportingHelper || pickupHelper || inventoryHelper);
|
|
843
|
-
return /* @__PURE__ */ (0,
|
|
844
|
-
image ?? /* @__PURE__ */ (0,
|
|
845
|
-
/* @__PURE__ */ (0,
|
|
846
|
-
/* @__PURE__ */ (0,
|
|
847
|
-
/* @__PURE__ */ (0,
|
|
848
|
-
description ? /* @__PURE__ */ (0,
|
|
950
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Card, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core15.Stack, { gap: compact ? "sm" : "md", children: [
|
|
951
|
+
image ?? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ImageFallback, { compact }),
|
|
952
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core15.Group, { justify: "space-between", align: "flex-start", wrap: "nowrap", gap: "sm", children: [
|
|
953
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core15.Stack, { gap: 4, style: { minWidth: 0, flex: 1 }, children: [
|
|
954
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Title, { order: compact ? 5 : 4, lineClamp: 2, children: title }),
|
|
955
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Text, { size: "sm", c: "dimmed", lineClamp: compact ? 2 : 3, children: description }) : null
|
|
849
956
|
] }),
|
|
850
|
-
/* @__PURE__ */ (0,
|
|
957
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Badge, { variant: "light", color: stateBadge.color, children: stateBadge.label })
|
|
851
958
|
] }),
|
|
852
|
-
hasSupportingRegion ? /* @__PURE__ */ (0,
|
|
853
|
-
/* @__PURE__ */ (0,
|
|
854
|
-
price ? /* @__PURE__ */ (0,
|
|
855
|
-
supportingHelper ? /* @__PURE__ */ (0,
|
|
959
|
+
hasSupportingRegion ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core15.Group, { justify: "space-between", align: "flex-end", gap: "sm", wrap: "nowrap", children: [
|
|
960
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core15.Stack, { gap: 2, style: { minWidth: 0, flex: 1 }, children: [
|
|
961
|
+
price ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Text, { fw: 700, size: compact ? "md" : "lg", children: price }) : null,
|
|
962
|
+
supportingHelper ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Text, { size: "xs", c: "dimmed", children: supportingHelper }) : null
|
|
856
963
|
] }),
|
|
857
964
|
resolvedPrimaryAction
|
|
858
|
-
] }) : resolvedPrimaryAction ? /* @__PURE__ */ (0,
|
|
859
|
-
pickupHelper || inventoryHelper || metadata.length ? /* @__PURE__ */ (0,
|
|
860
|
-
pickupHelper ? /* @__PURE__ */ (0,
|
|
861
|
-
/* @__PURE__ */ (0,
|
|
862
|
-
/* @__PURE__ */ (0,
|
|
965
|
+
] }) : resolvedPrimaryAction ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Group, { justify: "flex-end", children: resolvedPrimaryAction }) : null,
|
|
966
|
+
pickupHelper || inventoryHelper || metadata.length ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core15.Stack, { gap: 6, children: [
|
|
967
|
+
pickupHelper ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core15.Group, { justify: "space-between", gap: "sm", children: [
|
|
968
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Text, { size: "sm", c: "dimmed", children: "Pickup" }),
|
|
969
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Text, { size: "sm", fw: 500, ta: "right", children: pickupHelper })
|
|
863
970
|
] }) : null,
|
|
864
|
-
inventoryHelper ? /* @__PURE__ */ (0,
|
|
865
|
-
/* @__PURE__ */ (0,
|
|
866
|
-
/* @__PURE__ */ (0,
|
|
971
|
+
inventoryHelper ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core15.Group, { justify: "space-between", gap: "sm", children: [
|
|
972
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Text, { size: "sm", c: "dimmed", children: "Availability" }),
|
|
973
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Text, { size: "sm", fw: 500, ta: "right", children: inventoryHelper })
|
|
867
974
|
] }) : null,
|
|
868
|
-
metadata.map((item) => /* @__PURE__ */ (0,
|
|
869
|
-
/* @__PURE__ */ (0,
|
|
870
|
-
/* @__PURE__ */ (0,
|
|
975
|
+
metadata.map((item) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_core15.Group, { justify: "space-between", gap: "sm", children: [
|
|
976
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Text, { size: "sm", c: "dimmed", children: item.label }),
|
|
977
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Text, { size: "sm", fw: 500, ta: "right", children: item.value })
|
|
871
978
|
] }, item.label))
|
|
872
979
|
] }) : null,
|
|
873
|
-
resolvedSecondaryAction ? /* @__PURE__ */ (0,
|
|
980
|
+
resolvedSecondaryAction ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_core15.Group, { justify: "flex-end", children: resolvedSecondaryAction }) : null
|
|
874
981
|
] }) });
|
|
875
982
|
}
|
|
876
983
|
|
|
877
|
-
// src/
|
|
984
|
+
// src/PublicFoodCard.tsx
|
|
985
|
+
var import_react3 = require("react");
|
|
986
|
+
var import_core16 = require("@mantine/core");
|
|
987
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
988
|
+
var ratioMap = {
|
|
989
|
+
square: 1,
|
|
990
|
+
dish: 4 / 3,
|
|
991
|
+
landscape: 16 / 9
|
|
992
|
+
};
|
|
993
|
+
var stateConfig2 = {
|
|
994
|
+
available: { label: "Available", color: "teal" },
|
|
995
|
+
preorder: { label: "Preorder", color: "violet" },
|
|
996
|
+
limited: { label: "Limited batch", color: "yellow" },
|
|
997
|
+
"sold-out": { label: "Sold out", color: "red" },
|
|
998
|
+
"coming-soon": { label: "Coming soon", color: "gray" }
|
|
999
|
+
};
|
|
1000
|
+
var markerToneMap = {
|
|
1001
|
+
default: "gray",
|
|
1002
|
+
positive: "teal",
|
|
1003
|
+
warning: "orange",
|
|
1004
|
+
muted: "dark"
|
|
1005
|
+
};
|
|
1006
|
+
function enhanceAction2(action, disabled) {
|
|
1007
|
+
if (!(0, import_react3.isValidElement)(action)) {
|
|
1008
|
+
return action;
|
|
1009
|
+
}
|
|
1010
|
+
return (0, import_react3.cloneElement)(action, {
|
|
1011
|
+
disabled: disabled || Boolean(action.props.disabled),
|
|
1012
|
+
"aria-disabled": disabled || void 0
|
|
1013
|
+
});
|
|
1014
|
+
}
|
|
1015
|
+
function FoodImageFallback({ mediaRatio }) {
|
|
1016
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.AspectRatio, { ratio: ratioMap[mediaRatio], children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.ThemeIcon, { size: "100%", radius: "md", variant: "light", color: "gray", "aria-label": "No food image available", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(GdsIcons.Gallery, { size: "2rem" }) }) });
|
|
1017
|
+
}
|
|
1018
|
+
function LoadingFoodCard({ mediaRatio }) {
|
|
1019
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Stack, { gap: "md", children: [
|
|
1020
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.AspectRatio, { ratio: ratioMap[mediaRatio], children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Skeleton, { radius: "md" }) }),
|
|
1021
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Stack, { gap: "xs", children: [
|
|
1022
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Skeleton, { height: 20, radius: "sm", width: "72%" }),
|
|
1023
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Skeleton, { height: 14, radius: "sm", width: "96%" }),
|
|
1024
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Skeleton, { height: 14, radius: "sm", width: "78%" })
|
|
1025
|
+
] }),
|
|
1026
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Group, { justify: "space-between", align: "center", children: [
|
|
1027
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Skeleton, { height: 18, radius: "sm", width: 96 }),
|
|
1028
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Skeleton, { height: 36, radius: "md", width: 112 })
|
|
1029
|
+
] })
|
|
1030
|
+
] }) });
|
|
1031
|
+
}
|
|
1032
|
+
function PublicFoodCard({
|
|
1033
|
+
title,
|
|
1034
|
+
description,
|
|
1035
|
+
image,
|
|
1036
|
+
price,
|
|
1037
|
+
priceNote,
|
|
1038
|
+
state,
|
|
1039
|
+
helperText,
|
|
1040
|
+
pickupNote,
|
|
1041
|
+
freshnessNote,
|
|
1042
|
+
markers = [],
|
|
1043
|
+
metadata = [],
|
|
1044
|
+
primaryAction,
|
|
1045
|
+
secondaryAction,
|
|
1046
|
+
quantityHint,
|
|
1047
|
+
mediaRatio = "dish",
|
|
1048
|
+
loading = false,
|
|
1049
|
+
disabled = false
|
|
1050
|
+
}) {
|
|
1051
|
+
if (loading) {
|
|
1052
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LoadingFoodCard, { mediaRatio });
|
|
1053
|
+
}
|
|
1054
|
+
const stateBadge = stateConfig2[state];
|
|
1055
|
+
const isActionDisabled = disabled || state === "sold-out" || state === "coming-soon";
|
|
1056
|
+
const resolvedPrimaryAction = enhanceAction2(primaryAction, isActionDisabled);
|
|
1057
|
+
const resolvedSecondaryAction = enhanceAction2(secondaryAction, disabled);
|
|
1058
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Stack, { gap: "md", children: [
|
|
1059
|
+
image ?? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FoodImageFallback, { mediaRatio }),
|
|
1060
|
+
markers.length > 0 || quantityHint ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Group, { justify: "space-between", align: "center", wrap: "wrap", gap: "xs", children: [
|
|
1061
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Group, { gap: "xs", wrap: "wrap", children: markers.map((marker) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Badge, { variant: "light", color: markerToneMap[marker.tone ?? "default"], children: marker.label }, marker.id)) }),
|
|
1062
|
+
quantityHint ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Text, { size: "xs", fw: 600, c: "dimmed", children: quantityHint }) : null
|
|
1063
|
+
] }) : null,
|
|
1064
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Group, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "nowrap", children: [
|
|
1065
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Stack, { gap: 4, style: { minWidth: 0, flex: 1 }, children: [
|
|
1066
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Title, { order: 4, lineClamp: 2, children: title }),
|
|
1067
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Text, { size: "sm", c: "dimmed", lineClamp: 3, children: description }) : null
|
|
1068
|
+
] }),
|
|
1069
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Badge, { variant: "light", color: stateBadge.color, children: stateBadge.label })
|
|
1070
|
+
] }),
|
|
1071
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Group, { justify: "space-between", align: "flex-end", gap: "sm", wrap: "nowrap", children: [
|
|
1072
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Stack, { gap: 2, style: { minWidth: 0, flex: 1 }, children: [
|
|
1073
|
+
price ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Text, { fw: 800, size: "lg", children: price }) : null,
|
|
1074
|
+
priceNote ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Text, { size: "xs", c: "dimmed", children: priceNote }) : null,
|
|
1075
|
+
helperText ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Text, { size: "sm", c: "dimmed", children: helperText }) : null
|
|
1076
|
+
] }),
|
|
1077
|
+
resolvedPrimaryAction
|
|
1078
|
+
] }),
|
|
1079
|
+
pickupNote || freshnessNote || metadata.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Stack, { gap: 6, children: [
|
|
1080
|
+
pickupNote ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Group, { justify: "space-between", align: "flex-start", gap: "sm", children: [
|
|
1081
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Text, { size: "sm", c: "dimmed", children: "Pickup" }),
|
|
1082
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Text, { size: "sm", fw: 500, ta: "right", children: pickupNote })
|
|
1083
|
+
] }) : null,
|
|
1084
|
+
freshnessNote ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Group, { justify: "space-between", align: "flex-start", gap: "sm", children: [
|
|
1085
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Text, { size: "sm", c: "dimmed", children: "Freshness" }),
|
|
1086
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Text, { size: "sm", fw: 500, ta: "right", children: freshnessNote })
|
|
1087
|
+
] }) : null,
|
|
1088
|
+
metadata.map((item) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Group, { justify: "space-between", align: "flex-start", gap: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_core16.Group, { gap: "xs", wrap: "nowrap", children: [
|
|
1089
|
+
item.icon,
|
|
1090
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Text, { size: "sm", c: "dimmed", children: item.label })
|
|
1091
|
+
] }) }, item.id))
|
|
1092
|
+
] }) : null,
|
|
1093
|
+
resolvedSecondaryAction ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_core16.Group, { justify: "flex-end", children: resolvedSecondaryAction }) : null
|
|
1094
|
+
] }) });
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
// src/FoodMenuSection.tsx
|
|
878
1098
|
var import_core17 = require("@mantine/core");
|
|
1099
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
1100
|
+
function FoodMenuSection({
|
|
1101
|
+
title,
|
|
1102
|
+
description,
|
|
1103
|
+
eyebrow,
|
|
1104
|
+
categories,
|
|
1105
|
+
sectionNote,
|
|
1106
|
+
action,
|
|
1107
|
+
emptyState,
|
|
1108
|
+
columns = 3,
|
|
1109
|
+
showEmptyCategories = false
|
|
1110
|
+
}) {
|
|
1111
|
+
const normalizedCategories = (categories ?? []).filter(Boolean);
|
|
1112
|
+
const visibleCategories = showEmptyCategories ? normalizedCategories : normalizedCategories.filter((category) => category.items.length > 0);
|
|
1113
|
+
if (!visibleCategories.length) {
|
|
1114
|
+
return emptyState ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_jsx_runtime18.Fragment, { children: emptyState }) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1115
|
+
EmptyState,
|
|
1116
|
+
{
|
|
1117
|
+
title: "No active menu available",
|
|
1118
|
+
description: "Publish grouped menu categories here when the current weekly or seasonal menu is ready."
|
|
1119
|
+
}
|
|
1120
|
+
);
|
|
1121
|
+
}
|
|
1122
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Box, { component: "section", "aria-label": typeof title === "string" ? title : "Food menu section", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Stack, { gap: "xl", children: [
|
|
1123
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
|
|
1124
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Stack, { gap: 4, children: [
|
|
1125
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Text, { size: "xs", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
|
|
1126
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Title, { order: 2, children: title }),
|
|
1127
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Text, { size: "sm", c: "dimmed", maw: 760, children: description }) : null,
|
|
1128
|
+
sectionNote ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Text, { size: "sm", c: "dimmed", children: sectionNote }) : null
|
|
1129
|
+
] }),
|
|
1130
|
+
action
|
|
1131
|
+
] }),
|
|
1132
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Stack, { gap: "xl", children: visibleCategories.map((category) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Stack, { gap: "md", children: [
|
|
1133
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_core17.Stack, { gap: 4, children: [
|
|
1134
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Title, { order: 3, children: category.title }),
|
|
1135
|
+
category.description ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Text, { size: "sm", c: "dimmed", children: category.description }) : null,
|
|
1136
|
+
category.helperNote ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.Text, { size: "sm", c: "dimmed", children: category.helperNote }) : null
|
|
1137
|
+
] }),
|
|
1138
|
+
category.items.length ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_core17.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: category.items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(PublicFoodCard, { ...item }, item.id)) }) : /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1139
|
+
EmptyState,
|
|
1140
|
+
{
|
|
1141
|
+
title: "No items in this category",
|
|
1142
|
+
description: "This category is defined, but it does not currently have any visible dishes or bundles."
|
|
1143
|
+
}
|
|
1144
|
+
)
|
|
1145
|
+
] }, category.id)) })
|
|
1146
|
+
] }) });
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
// src/ListingCard.tsx
|
|
1150
|
+
var import_core18 = require("@mantine/core");
|
|
1151
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1152
|
+
var ratioMap2 = {
|
|
1153
|
+
"1:1": 1,
|
|
1154
|
+
"4:3": 4 / 3,
|
|
1155
|
+
"16:9": 16 / 9
|
|
1156
|
+
};
|
|
1157
|
+
var toneColorMap = {
|
|
1158
|
+
default: void 0,
|
|
1159
|
+
positive: "teal",
|
|
1160
|
+
warning: "orange",
|
|
1161
|
+
muted: "gray"
|
|
1162
|
+
};
|
|
1163
|
+
function ListingImageFallback({ mediaRatio }) {
|
|
1164
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.AspectRatio, { ratio: ratioMap2[mediaRatio], children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1165
|
+
import_core18.ThemeIcon,
|
|
1166
|
+
{
|
|
1167
|
+
size: "100%",
|
|
1168
|
+
radius: "md",
|
|
1169
|
+
variant: "light",
|
|
1170
|
+
color: "gray",
|
|
1171
|
+
"aria-label": "No listing image available",
|
|
1172
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(GdsIcons.Gallery, { size: "2rem" })
|
|
1173
|
+
}
|
|
1174
|
+
) });
|
|
1175
|
+
}
|
|
1176
|
+
function ListingAffordance({ affordance }) {
|
|
1177
|
+
const config = GdsVocabulary[affordance.action];
|
|
1178
|
+
const Icon = config.icon;
|
|
1179
|
+
const label = affordance.ariaLabel ?? getSemanticActionLabel(affordance.action);
|
|
1180
|
+
if (affordance.href) {
|
|
1181
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1182
|
+
import_core18.ActionIcon,
|
|
1183
|
+
{
|
|
1184
|
+
component: "a",
|
|
1185
|
+
href: affordance.href,
|
|
1186
|
+
variant: "subtle",
|
|
1187
|
+
size: "lg",
|
|
1188
|
+
"aria-label": label,
|
|
1189
|
+
disabled: affordance.disabled,
|
|
1190
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Icon, { size: "1rem", stroke: 1.75 })
|
|
1191
|
+
}
|
|
1192
|
+
);
|
|
1193
|
+
}
|
|
1194
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1195
|
+
import_core18.ActionIcon,
|
|
1196
|
+
{
|
|
1197
|
+
variant: "subtle",
|
|
1198
|
+
size: "lg",
|
|
1199
|
+
"aria-label": label,
|
|
1200
|
+
onClick: affordance.onClick,
|
|
1201
|
+
disabled: affordance.disabled,
|
|
1202
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Icon, { size: "1rem", stroke: 1.75 })
|
|
1203
|
+
}
|
|
1204
|
+
);
|
|
1205
|
+
}
|
|
1206
|
+
function ListingCard({
|
|
1207
|
+
title,
|
|
1208
|
+
href,
|
|
1209
|
+
description,
|
|
1210
|
+
image,
|
|
1211
|
+
mediaRatio = "4:3",
|
|
1212
|
+
metadata = [],
|
|
1213
|
+
featured = false,
|
|
1214
|
+
sponsoredDisclosure,
|
|
1215
|
+
price,
|
|
1216
|
+
primaryAction,
|
|
1217
|
+
saveAction,
|
|
1218
|
+
shareAction,
|
|
1219
|
+
compact = false
|
|
1220
|
+
}) {
|
|
1221
|
+
const titleContent = href && typeof title === "string" ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Text, { component: "a", href, inherit: true, td: "none", children: title }) : title;
|
|
1222
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Card, { withBorder: true, radius: "lg", padding: compact ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: compact ? "sm" : "md", children: [
|
|
1223
|
+
image ?? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ListingImageFallback, { mediaRatio }),
|
|
1224
|
+
featured || sponsoredDisclosure ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { justify: "space-between", gap: "sm", wrap: "wrap", children: [
|
|
1225
|
+
featured ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Badge, { variant: "light", color: "violet", children: "Featured" }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", {}),
|
|
1226
|
+
sponsoredDisclosure ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Text, { size: "xs", c: "dimmed", children: sponsoredDisclosure }) : null
|
|
1227
|
+
] }) : null,
|
|
1228
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Stack, { gap: 4, children: [
|
|
1229
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Title, { order: compact ? 5 : 4, lineClamp: 2, children: titleContent }),
|
|
1230
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Text, { size: "sm", c: "dimmed", lineClamp: compact ? 2 : 3, children: description }) : null
|
|
1231
|
+
] }),
|
|
1232
|
+
metadata.length ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Stack, { gap: "xs", children: metadata.map((item) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "nowrap", children: [
|
|
1233
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { gap: "xs", wrap: "nowrap", style: { minWidth: 0, flex: 1 }, children: [
|
|
1234
|
+
item.icon,
|
|
1235
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Text, { size: "sm", c: item.tone ? toneColorMap[item.tone] : "dimmed", lineClamp: 1, children: item.label })
|
|
1236
|
+
] }),
|
|
1237
|
+
item.value ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Text, { size: "sm", fw: 500, ta: "right", children: item.value }) : null
|
|
1238
|
+
] }, item.id)) }) : null,
|
|
1239
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { justify: "space-between", align: "center", gap: "sm", wrap: "wrap", children: [
|
|
1240
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Stack, { gap: 2, style: { minWidth: 0, flex: 1 }, children: price ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_core18.Text, { fw: 700, size: compact ? "md" : "lg", children: price }) : null }),
|
|
1241
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_core18.Group, { gap: "xs", wrap: "nowrap", justify: "flex-end", style: { marginInlineStart: "auto" }, children: [
|
|
1242
|
+
saveAction ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ListingAffordance, { affordance: saveAction }) : null,
|
|
1243
|
+
shareAction ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(ListingAffordance, { affordance: shareAction }) : null,
|
|
1244
|
+
primaryAction
|
|
1245
|
+
] })
|
|
1246
|
+
] })
|
|
1247
|
+
] }) });
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
// src/BrowseSurface.tsx
|
|
1251
|
+
var import_core21 = require("@mantine/core");
|
|
879
1252
|
|
|
880
1253
|
// src/DataToolbar.tsx
|
|
881
|
-
var
|
|
882
|
-
var
|
|
1254
|
+
var import_core19 = require("@mantine/core");
|
|
1255
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
883
1256
|
function DataToolbar({
|
|
884
1257
|
searchSlot,
|
|
885
1258
|
filterSlot,
|
|
@@ -888,20 +1261,20 @@ function DataToolbar({
|
|
|
888
1261
|
createAction,
|
|
889
1262
|
activeFilters = []
|
|
890
1263
|
}) {
|
|
891
|
-
return /* @__PURE__ */ (0,
|
|
892
|
-
/* @__PURE__ */ (0,
|
|
893
|
-
/* @__PURE__ */ (0,
|
|
1264
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Stack, { gap: "sm", children: [
|
|
1265
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { justify: "space-between", align: "flex-start", gap: "sm", children: [
|
|
1266
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { flex: 1, align: "flex-start", gap: "sm", children: [
|
|
894
1267
|
searchSlot,
|
|
895
1268
|
filterSlot,
|
|
896
1269
|
sortSlot
|
|
897
1270
|
] }),
|
|
898
|
-
/* @__PURE__ */ (0,
|
|
1271
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_core19.Group, { gap: "sm", children: [
|
|
899
1272
|
resetAction,
|
|
900
1273
|
createAction
|
|
901
1274
|
] })
|
|
902
1275
|
] }),
|
|
903
|
-
activeFilters.length ? /* @__PURE__ */ (0,
|
|
904
|
-
|
|
1276
|
+
activeFilters.length ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_core19.Group, { gap: "xs", children: activeFilters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1277
|
+
import_core19.Badge,
|
|
905
1278
|
{
|
|
906
1279
|
variant: "light",
|
|
907
1280
|
rightSection: filter.onRemove ? "\xD7" : void 0,
|
|
@@ -915,17 +1288,17 @@ function DataToolbar({
|
|
|
915
1288
|
}
|
|
916
1289
|
|
|
917
1290
|
// src/StateBlock.tsx
|
|
918
|
-
var
|
|
919
|
-
var
|
|
1291
|
+
var import_core20 = require("@mantine/core");
|
|
1292
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
920
1293
|
var variantConfig = {
|
|
921
|
-
loading: { color: "violet", icon: /* @__PURE__ */ (0,
|
|
922
|
-
empty: { color: "gray", icon: /* @__PURE__ */ (0,
|
|
923
|
-
error: { color: "red", icon: /* @__PURE__ */ (0,
|
|
924
|
-
permission: { color: "orange", icon: /* @__PURE__ */ (0,
|
|
925
|
-
disabled: { color: "gray", icon: /* @__PURE__ */ (0,
|
|
926
|
-
success: { color: "teal", icon: /* @__PURE__ */ (0,
|
|
927
|
-
info: { color: "blue", icon: /* @__PURE__ */ (0,
|
|
928
|
-
"not-enough-data": { color: "yellow", icon: /* @__PURE__ */ (0,
|
|
1294
|
+
loading: { color: "violet", icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Loader, { size: "sm" }) },
|
|
1295
|
+
empty: { color: "gray", icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GdsIcons.Inbox, { size: "1.1rem" }) },
|
|
1296
|
+
error: { color: "red", icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GdsIcons.Danger, { size: "1.1rem" }) },
|
|
1297
|
+
permission: { color: "orange", icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GdsIcons.Verify, { size: "1.1rem" }) },
|
|
1298
|
+
disabled: { color: "gray", icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GdsIcons.Toggle, { size: "1.1rem" }) },
|
|
1299
|
+
success: { color: "teal", icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GdsIcons.Success, { size: "1.1rem" }) },
|
|
1300
|
+
info: { color: "blue", icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GdsIcons.Info, { size: "1.1rem" }) },
|
|
1301
|
+
"not-enough-data": { color: "yellow", icon: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(GdsIcons.Analytics, { size: "1.1rem" }) }
|
|
929
1302
|
};
|
|
930
1303
|
function StateBlock({
|
|
931
1304
|
variant,
|
|
@@ -936,8 +1309,8 @@ function StateBlock({
|
|
|
936
1309
|
compact = false
|
|
937
1310
|
}) {
|
|
938
1311
|
const config = variantConfig[variant];
|
|
939
|
-
return /* @__PURE__ */ (0,
|
|
940
|
-
|
|
1312
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
1313
|
+
import_core20.Stack,
|
|
941
1314
|
{
|
|
942
1315
|
align: compact ? "flex-start" : "center",
|
|
943
1316
|
justify: "center",
|
|
@@ -945,10 +1318,10 @@ function StateBlock({
|
|
|
945
1318
|
py: compact ? "md" : "xl",
|
|
946
1319
|
ta: compact ? "left" : "center",
|
|
947
1320
|
children: [
|
|
948
|
-
/* @__PURE__ */ (0,
|
|
949
|
-
/* @__PURE__ */ (0,
|
|
950
|
-
/* @__PURE__ */ (0,
|
|
951
|
-
description ? /* @__PURE__ */ (0,
|
|
1321
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.ThemeIcon, { variant: "light", color: config.color, size: compact ? "lg" : "xl", radius: "xl", children: icon ?? config.icon }),
|
|
1322
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_core20.Stack, { gap: 6, align: compact ? "flex-start" : "center", children: [
|
|
1323
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Title, { order: compact ? 4 : 3, children: title }),
|
|
1324
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_core20.Text, { c: "dimmed", maw: compact ? void 0 : 480, children: description }) : null
|
|
952
1325
|
] }),
|
|
953
1326
|
action
|
|
954
1327
|
]
|
|
@@ -957,7 +1330,7 @@ function StateBlock({
|
|
|
957
1330
|
}
|
|
958
1331
|
|
|
959
1332
|
// src/BrowseSurface.tsx
|
|
960
|
-
var
|
|
1333
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
961
1334
|
function BrowseSurface({
|
|
962
1335
|
eyebrow,
|
|
963
1336
|
title,
|
|
@@ -991,22 +1364,22 @@ function BrowseSurface({
|
|
|
991
1364
|
}));
|
|
992
1365
|
let body = content;
|
|
993
1366
|
if (loading) {
|
|
994
|
-
body = /* @__PURE__ */ (0,
|
|
1367
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(StateBlock, { variant: "loading", title: loadingTitle, description: loadingDescription, compact: true });
|
|
995
1368
|
} else if (error) {
|
|
996
|
-
body = /* @__PURE__ */ (0,
|
|
1369
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(StateBlock, { variant: "error", title: errorTitle, description: error, action: errorAction ?? emptyAction, compact: true });
|
|
997
1370
|
} else if (empty) {
|
|
998
|
-
body = /* @__PURE__ */ (0,
|
|
1371
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, action: emptyAction, compact: true });
|
|
999
1372
|
}
|
|
1000
|
-
return /* @__PURE__ */ (0,
|
|
1001
|
-
/* @__PURE__ */ (0,
|
|
1002
|
-
/* @__PURE__ */ (0,
|
|
1003
|
-
/* @__PURE__ */ (0,
|
|
1004
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
1005
|
-
/* @__PURE__ */ (0,
|
|
1006
|
-
description ? /* @__PURE__ */ (0,
|
|
1373
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "lg", children: [
|
|
1374
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Paper, { withBorder: true, radius: "xl", p: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "lg", children: [
|
|
1375
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Group, { justify: "space-between", align: "flex-start", gap: "md", children: [
|
|
1376
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "xs", maw: 760, children: [
|
|
1377
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Text, { size: "xs", fw: 700, tt: "uppercase", c: "dimmed", style: { letterSpacing: "0.18em" }, children: eyebrow }) : null,
|
|
1378
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Title, { order: 1, children: title }),
|
|
1379
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Text, { size: "lg", c: "dimmed", children: description }) : null
|
|
1007
1380
|
] }),
|
|
1008
|
-
/* @__PURE__ */ (0,
|
|
1009
|
-
typeof resultCount === "number" ? /* @__PURE__ */ (0,
|
|
1381
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { align: "flex-end", gap: "xs", children: [
|
|
1382
|
+
typeof resultCount === "number" ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Badge, { size: "lg", radius: "xl", variant: "light", color: "violet", children: [
|
|
1010
1383
|
resultCount,
|
|
1011
1384
|
" ",
|
|
1012
1385
|
resultLabel
|
|
@@ -1014,10 +1387,10 @@ function BrowseSurface({
|
|
|
1014
1387
|
primaryControls
|
|
1015
1388
|
] })
|
|
1016
1389
|
] }),
|
|
1017
|
-
scopeOptions.length ? /* @__PURE__ */ (0,
|
|
1018
|
-
/* @__PURE__ */ (0,
|
|
1019
|
-
/* @__PURE__ */ (0,
|
|
1020
|
-
|
|
1390
|
+
scopeOptions.length ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "xs", children: [
|
|
1391
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Text, { size: "sm", fw: 600, c: "dimmed", children: scopeLabel }),
|
|
1392
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Group, { gap: "xs", wrap: "wrap", children: scopeOptions.map((option) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1393
|
+
import_core21.Button,
|
|
1021
1394
|
{
|
|
1022
1395
|
variant: option.active ? "filled" : "default",
|
|
1023
1396
|
color: option.active ? "violet" : "gray",
|
|
@@ -1029,30 +1402,30 @@ function BrowseSurface({
|
|
|
1029
1402
|
option.id
|
|
1030
1403
|
)) })
|
|
1031
1404
|
] }) : null,
|
|
1032
|
-
locationControls ? /* @__PURE__ */ (0,
|
|
1033
|
-
/* @__PURE__ */ (0,
|
|
1405
|
+
locationControls ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "xs", children: [
|
|
1406
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Text, { size: "sm", fw: 600, c: "dimmed", children: "Location" }),
|
|
1034
1407
|
locationControls
|
|
1035
1408
|
] }) : null,
|
|
1036
|
-
toolbar || sortControl ? /* @__PURE__ */ (0,
|
|
1037
|
-
toolbar ? /* @__PURE__ */ (0,
|
|
1409
|
+
toolbar || sortControl ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.SimpleGrid, { cols: { base: 1, lg: sortControl ? 2 : 1 }, spacing: "md", children: [
|
|
1410
|
+
toolbar ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1038
1411
|
DataToolbar,
|
|
1039
1412
|
{
|
|
1040
1413
|
...toolbar,
|
|
1041
1414
|
activeFilters: toolbarFilters.length ? toolbarFilters : toolbar.fallbackActiveFilters
|
|
1042
1415
|
}
|
|
1043
|
-
) : /* @__PURE__ */ (0,
|
|
1044
|
-
sortControl ? /* @__PURE__ */ (0,
|
|
1045
|
-
/* @__PURE__ */ (0,
|
|
1416
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Box, {}),
|
|
1417
|
+
sortControl ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { gap: "xs", align: "stretch", children: [
|
|
1418
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Text, { size: "sm", fw: 600, c: "dimmed", children: "Sort" }),
|
|
1046
1419
|
sortControl
|
|
1047
1420
|
] }) : null
|
|
1048
1421
|
] }) : null,
|
|
1049
|
-
mobileFilters ? /* @__PURE__ */ (0,
|
|
1050
|
-
/* @__PURE__ */ (0,
|
|
1422
|
+
mobileFilters ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_core21.Stack, { hiddenFrom: "lg", gap: "xs", children: [
|
|
1423
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Text, { size: "sm", fw: 600, c: "dimmed", children: "Filters" }),
|
|
1051
1424
|
mobileFilters
|
|
1052
1425
|
] }) : null,
|
|
1053
|
-
filterDrawer ? /* @__PURE__ */ (0,
|
|
1054
|
-
activeFilters.length ? /* @__PURE__ */ (0,
|
|
1055
|
-
|
|
1426
|
+
filterDrawer ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Box, { hiddenFrom: "lg", children: filterDrawer }) : null,
|
|
1427
|
+
activeFilters.length ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_core21.Group, { gap: "xs", wrap: "wrap", children: activeFilters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1428
|
+
import_core21.Badge,
|
|
1056
1429
|
{
|
|
1057
1430
|
variant: "light",
|
|
1058
1431
|
color: "violet",
|
|
@@ -1069,8 +1442,8 @@ function BrowseSurface({
|
|
|
1069
1442
|
}
|
|
1070
1443
|
|
|
1071
1444
|
// src/AccentPanel.tsx
|
|
1072
|
-
var
|
|
1073
|
-
var
|
|
1445
|
+
var import_core22 = require("@mantine/core");
|
|
1446
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
1074
1447
|
var toneStyles = {
|
|
1075
1448
|
gray: {
|
|
1076
1449
|
bg: "light-dark(var(--mantine-color-gray-0), color-mix(in srgb, var(--mantine-color-gray-7) 88%, black))",
|
|
@@ -1126,29 +1499,56 @@ function AccentPanel({
|
|
|
1126
1499
|
children
|
|
1127
1500
|
}) {
|
|
1128
1501
|
const styles = resolveAccentPanelStyles(tone, variant);
|
|
1129
|
-
return /* @__PURE__ */ (0,
|
|
1130
|
-
title || badge ? /* @__PURE__ */ (0,
|
|
1131
|
-
title ? /* @__PURE__ */ (0,
|
|
1132
|
-
badge ? typeof badge === "string" ? /* @__PURE__ */ (0,
|
|
1502
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Paper, { withBorder: true, radius: "lg", p: "lg", style: styles, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Stack, { gap: "sm", children: [
|
|
1503
|
+
title || badge ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_core22.Group, { justify: "space-between", align: "flex-start", gap: "sm", wrap: "wrap", children: [
|
|
1504
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Title, { order: 4, c: "inherit", children: title }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Box, {}),
|
|
1505
|
+
badge ? typeof badge === "string" ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Badge, { color: tone === "amber" ? "yellow" : tone, variant: "filled", children: badge }) : badge : null
|
|
1133
1506
|
] }) : null,
|
|
1134
|
-
typeof children === "string" ? /* @__PURE__ */ (0,
|
|
1507
|
+
typeof children === "string" ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Text, { c: "inherit", children }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_core22.Box, { c: "inherit", children })
|
|
1508
|
+
] }) });
|
|
1509
|
+
}
|
|
1510
|
+
|
|
1511
|
+
// src/DetailProfileShell.tsx
|
|
1512
|
+
var import_core23 = require("@mantine/core");
|
|
1513
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
1514
|
+
function DetailProfileShell({
|
|
1515
|
+
mode = "page",
|
|
1516
|
+
hero,
|
|
1517
|
+
actions,
|
|
1518
|
+
sections,
|
|
1519
|
+
related,
|
|
1520
|
+
padding = "lg",
|
|
1521
|
+
showDividers = true
|
|
1522
|
+
}) {
|
|
1523
|
+
const content = sections.filter(Boolean);
|
|
1524
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Paper, { withBorder: mode === "drawer", radius: mode === "drawer" ? "xl" : "md", p: padding, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Stack, { gap: "lg", children: [
|
|
1525
|
+
hero,
|
|
1526
|
+
actions,
|
|
1527
|
+
content.map((section, index) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_core23.Stack, { gap: "lg", children: [
|
|
1528
|
+
index > 0 && showDividers ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Divider, {}) : null,
|
|
1529
|
+
section
|
|
1530
|
+
] }, index)),
|
|
1531
|
+
related ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_jsx_runtime24.Fragment, { children: [
|
|
1532
|
+
content.length && showDividers ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_core23.Divider, {}) : null,
|
|
1533
|
+
related
|
|
1534
|
+
] }) : null
|
|
1135
1535
|
] }) });
|
|
1136
1536
|
}
|
|
1137
1537
|
|
|
1138
1538
|
// src/PublicShell.tsx
|
|
1139
|
-
var
|
|
1539
|
+
var import_core25 = require("@mantine/core");
|
|
1140
1540
|
|
|
1141
1541
|
// src/PublicNav.tsx
|
|
1142
|
-
var
|
|
1143
|
-
var
|
|
1542
|
+
var import_core24 = require("@mantine/core");
|
|
1543
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
1144
1544
|
function PublicNav({ items, activeId, renderLink }) {
|
|
1145
|
-
return /* @__PURE__ */ (0,
|
|
1545
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_core24.Group, { component: "nav", "aria-label": "Primary", gap: "lg", wrap: "nowrap", children: items.map((item) => {
|
|
1146
1546
|
const active = item.id === activeId;
|
|
1147
1547
|
if (renderLink) {
|
|
1148
|
-
return /* @__PURE__ */ (0,
|
|
1548
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: renderLink(item, active) }, item.id);
|
|
1149
1549
|
}
|
|
1150
|
-
return /* @__PURE__ */ (0,
|
|
1151
|
-
|
|
1550
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
1551
|
+
import_core24.Anchor,
|
|
1152
1552
|
{
|
|
1153
1553
|
href: item.href,
|
|
1154
1554
|
"aria-current": active ? "page" : void 0,
|
|
@@ -1165,15 +1565,15 @@ function PublicNav({ items, activeId, renderLink }) {
|
|
|
1165
1565
|
}
|
|
1166
1566
|
|
|
1167
1567
|
// src/PublicShell.tsx
|
|
1168
|
-
var
|
|
1568
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
1169
1569
|
function InlineMobileNavigation({
|
|
1170
1570
|
mobileNavigation,
|
|
1171
1571
|
className,
|
|
1172
1572
|
mode
|
|
1173
1573
|
}) {
|
|
1174
|
-
return /* @__PURE__ */ (0,
|
|
1175
|
-
/* @__PURE__ */ (0,
|
|
1176
|
-
|
|
1574
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_core25.Box, { component: "details", hiddenFrom: "sm", className, children: [
|
|
1575
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
1576
|
+
import_core25.Box,
|
|
1177
1577
|
{
|
|
1178
1578
|
component: "summary",
|
|
1179
1579
|
"aria-label": mode === "drawer" ? "Open site navigation drawer" : "Open site navigation",
|
|
@@ -1185,13 +1585,13 @@ function InlineMobileNavigation({
|
|
|
1185
1585
|
gap: "0.5rem"
|
|
1186
1586
|
},
|
|
1187
1587
|
children: [
|
|
1188
|
-
/* @__PURE__ */ (0,
|
|
1189
|
-
/* @__PURE__ */ (0,
|
|
1588
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Burger, { opened: false, "aria-hidden": true }),
|
|
1589
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Text, { size: "sm", fw: 600, children: "Menu" })
|
|
1190
1590
|
]
|
|
1191
1591
|
}
|
|
1192
1592
|
),
|
|
1193
|
-
/* @__PURE__ */ (0,
|
|
1194
|
-
|
|
1593
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1594
|
+
import_core25.Box,
|
|
1195
1595
|
{
|
|
1196
1596
|
mt: "sm",
|
|
1197
1597
|
p: "sm",
|
|
@@ -1200,7 +1600,7 @@ function InlineMobileNavigation({
|
|
|
1200
1600
|
border: "1px solid var(--mantine-color-default-border)",
|
|
1201
1601
|
background: mode === "drawer" ? "light-dark(var(--mantine-color-white), color-mix(in srgb, var(--mantine-color-dark-7) 92%, black))" : "var(--mantine-color-body)"
|
|
1202
1602
|
},
|
|
1203
|
-
children: /* @__PURE__ */ (0,
|
|
1603
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Stack, { gap: "sm", children: mobileNavigation })
|
|
1204
1604
|
}
|
|
1205
1605
|
)
|
|
1206
1606
|
] });
|
|
@@ -1221,30 +1621,30 @@ function PublicShell({
|
|
|
1221
1621
|
mobileNavigationMode = "sheet",
|
|
1222
1622
|
classNames
|
|
1223
1623
|
}) {
|
|
1224
|
-
const resolvedNavigation = navigation ?? (navItems ? /* @__PURE__ */ (0,
|
|
1624
|
+
const resolvedNavigation = navigation ?? (navItems ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(PublicNav, { items: navItems, activeId: activeNavId }) : null);
|
|
1225
1625
|
const containerSize = maxContentWidth ?? (compact ? "md" : "lg");
|
|
1226
1626
|
const headerHeight = headerVariant === "compact" ? 64 : headerVariant === "branded-quiet" ? 88 : 72;
|
|
1227
1627
|
const mainPadding = headerVariant === "compact" ? "lg" : "xl";
|
|
1228
1628
|
const usesInlineMobileNavigation = Boolean(mobileNavigation) && mobileNavigationMode !== "sheet";
|
|
1229
1629
|
const usesSheetMobileNavigation = Boolean(mobileNavigation) && mobileNavigationMode === "sheet";
|
|
1230
|
-
return /* @__PURE__ */ (0,
|
|
1231
|
-
|
|
1630
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
1631
|
+
import_core25.AppShell,
|
|
1232
1632
|
{
|
|
1233
1633
|
className: classNames?.root,
|
|
1234
1634
|
header: { height: headerHeight },
|
|
1235
1635
|
footer: usesSheetMobileNavigation ? { height: 68 } : void 0,
|
|
1236
1636
|
padding: 0,
|
|
1237
1637
|
children: [
|
|
1238
|
-
/* @__PURE__ */ (0,
|
|
1239
|
-
|
|
1638
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.AppShell.Header, { withBorder: headerBordered, className: classNames?.header, "data-header-variant": headerVariant, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Container, { size: containerSize, h: "100%", py: headerVariant === "branded-quiet" ? "sm" : 0, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
1639
|
+
import_core25.Group,
|
|
1240
1640
|
{
|
|
1241
1641
|
h: "100%",
|
|
1242
1642
|
justify: "space-between",
|
|
1243
1643
|
wrap: "nowrap",
|
|
1244
1644
|
gap: headerVariant === "compact" ? "sm" : "lg",
|
|
1245
1645
|
children: [
|
|
1246
|
-
/* @__PURE__ */ (0,
|
|
1247
|
-
usesInlineMobileNavigation ? /* @__PURE__ */ (0,
|
|
1646
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_core25.Group, { wrap: "nowrap", gap: headerVariant === "compact" ? "xs" : "sm", className: classNames?.brand, children: [
|
|
1647
|
+
usesInlineMobileNavigation ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1248
1648
|
InlineMobileNavigation,
|
|
1249
1649
|
{
|
|
1250
1650
|
mobileNavigation,
|
|
@@ -1252,36 +1652,144 @@ function PublicShell({
|
|
|
1252
1652
|
mode: mobileNavigationMode
|
|
1253
1653
|
}
|
|
1254
1654
|
) : null,
|
|
1255
|
-
/* @__PURE__ */ (0,
|
|
1655
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Box, { children: brand })
|
|
1256
1656
|
] }),
|
|
1257
|
-
/* @__PURE__ */ (0,
|
|
1258
|
-
/* @__PURE__ */ (0,
|
|
1657
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Group, { visibleFrom: "sm", gap: headerVariant === "compact" ? "md" : "lg", className: classNames?.navigation, children: resolvedNavigation }),
|
|
1658
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Group, { gap: "sm", className: classNames?.actions, children: actions })
|
|
1259
1659
|
]
|
|
1260
1660
|
}
|
|
1261
1661
|
) }) }),
|
|
1262
|
-
usesSheetMobileNavigation ? /* @__PURE__ */ (0,
|
|
1263
|
-
/* @__PURE__ */ (0,
|
|
1264
|
-
/* @__PURE__ */ (0,
|
|
1265
|
-
footer ? /* @__PURE__ */ (0,
|
|
1662
|
+
usesSheetMobileNavigation ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.AppShell.Footer, { withBorder: true, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Container, { size: containerSize, h: "100%", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Group, { h: "100%", justify: "space-around", wrap: "nowrap", children: mobileNavigation }) }) }) : null,
|
|
1663
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_core25.AppShell.Main, { children: [
|
|
1664
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Container, { size: containerSize, py: mainPadding, className: classNames?.content, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Stack, { gap: "xl", children }) }),
|
|
1665
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Box, { component: typeof footer === "string" ? "footer" : "div", py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Container, { size: containerSize, children: typeof footer === "string" ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_core25.Text, { size: "sm", c: "dimmed", children: footer }) : footer }) }) : null
|
|
1266
1666
|
] })
|
|
1267
1667
|
]
|
|
1268
1668
|
}
|
|
1269
1669
|
);
|
|
1270
1670
|
}
|
|
1271
1671
|
|
|
1672
|
+
// src/DiscoveryShell.tsx
|
|
1673
|
+
var import_core26 = require("@mantine/core");
|
|
1674
|
+
var import_hooks2 = require("@mantine/hooks");
|
|
1675
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
1676
|
+
function DiscoveryShell({
|
|
1677
|
+
header,
|
|
1678
|
+
sidebar,
|
|
1679
|
+
footer,
|
|
1680
|
+
children,
|
|
1681
|
+
mobileNavigationLabel = "Toggle navigation",
|
|
1682
|
+
defaultSidebarOpen = false,
|
|
1683
|
+
stickySidebar = true,
|
|
1684
|
+
sidebarWidth = 280,
|
|
1685
|
+
headerHeight = 60,
|
|
1686
|
+
shellPadding = "md",
|
|
1687
|
+
collapseBreakpoint = "sm"
|
|
1688
|
+
}) {
|
|
1689
|
+
const [opened, { toggle, close }] = (0, import_hooks2.useDisclosure)(defaultSidebarOpen);
|
|
1690
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
1691
|
+
import_core26.AppShell,
|
|
1692
|
+
{
|
|
1693
|
+
header: { height: headerHeight },
|
|
1694
|
+
footer: footer ? { height: 68 } : void 0,
|
|
1695
|
+
navbar: {
|
|
1696
|
+
width: sidebarWidth,
|
|
1697
|
+
breakpoint: collapseBreakpoint,
|
|
1698
|
+
collapsed: { mobile: !opened }
|
|
1699
|
+
},
|
|
1700
|
+
padding: shellPadding,
|
|
1701
|
+
children: [
|
|
1702
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.AppShell.Header, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_core26.Group, { h: "100%", px: "md", gap: "sm", wrap: "nowrap", children: [
|
|
1703
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1704
|
+
import_core26.Burger,
|
|
1705
|
+
{
|
|
1706
|
+
opened,
|
|
1707
|
+
onClick: toggle,
|
|
1708
|
+
hiddenFrom: collapseBreakpoint,
|
|
1709
|
+
size: "sm",
|
|
1710
|
+
"aria-label": mobileNavigationLabel
|
|
1711
|
+
}
|
|
1712
|
+
),
|
|
1713
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Box, { style: { flex: 1, minWidth: 0 }, children: header })
|
|
1714
|
+
] }) }),
|
|
1715
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.AppShell.Navbar, { p: "md", "data-sticky-sidebar": stickySidebar || void 0, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.ScrollArea, { h: "100%", type: "auto", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1716
|
+
import_core26.Box,
|
|
1717
|
+
{
|
|
1718
|
+
h: "100%",
|
|
1719
|
+
style: stickySidebar ? {
|
|
1720
|
+
display: "flex",
|
|
1721
|
+
flexDirection: "column"
|
|
1722
|
+
} : void 0,
|
|
1723
|
+
children: sidebar
|
|
1724
|
+
}
|
|
1725
|
+
) }) }),
|
|
1726
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.AppShell.Footer, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.Group, { h: "100%", px: "md", justify: "space-around", wrap: "nowrap", children: footer }) }) : null,
|
|
1727
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_core26.AppShell.Main, { onClick: () => close(), children })
|
|
1728
|
+
]
|
|
1729
|
+
}
|
|
1730
|
+
);
|
|
1731
|
+
}
|
|
1732
|
+
|
|
1733
|
+
// src/SidebarNav.tsx
|
|
1734
|
+
var import_react4 = require("react");
|
|
1735
|
+
var import_core27 = require("@mantine/core");
|
|
1736
|
+
var import_gds_theme3 = require("@doneisbetter/gds-theme");
|
|
1737
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
1738
|
+
function SidebarNav({ children, ariaLabel = "Primary navigation", gap = "md" }) {
|
|
1739
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Stack, { component: "nav", "aria-label": ariaLabel, gap, h: "100%", children });
|
|
1740
|
+
}
|
|
1741
|
+
function SidebarNavSection({ label, children, pushToBottom = false }) {
|
|
1742
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_core27.Stack, { gap: "xs", mt: pushToBottom ? "auto" : void 0, children: [
|
|
1743
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Text, { size: "xs", fw: 700, c: "dimmed", children: label }) : null,
|
|
1744
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Stack, { gap: 4, children })
|
|
1745
|
+
] });
|
|
1746
|
+
}
|
|
1747
|
+
var _SidebarNavItem = (0, import_react4.forwardRef)(
|
|
1748
|
+
({
|
|
1749
|
+
action,
|
|
1750
|
+
label,
|
|
1751
|
+
description,
|
|
1752
|
+
badge,
|
|
1753
|
+
icon,
|
|
1754
|
+
"aria-label": ariaLabel,
|
|
1755
|
+
"aria-current": ariaCurrent,
|
|
1756
|
+
vocabularyPacks = [],
|
|
1757
|
+
...props
|
|
1758
|
+
}, ref) => {
|
|
1759
|
+
const { t } = (0, import_gds_theme3.useGdsTranslation)();
|
|
1760
|
+
const config = action ? resolveSemanticActionConfig(action, vocabularyPacks) : null;
|
|
1761
|
+
const Icon = config?.icon;
|
|
1762
|
+
const resolvedLabel = label ?? (action ? getSemanticActionLabel(action, t, vocabularyPacks) : void 0);
|
|
1763
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
1764
|
+
import_core27.NavLink,
|
|
1765
|
+
{
|
|
1766
|
+
ref,
|
|
1767
|
+
label: resolvedLabel,
|
|
1768
|
+
description,
|
|
1769
|
+
leftSection: icon ?? (Icon ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Icon, { size: "1rem", stroke: 1.5 }) : void 0),
|
|
1770
|
+
rightSection: badge ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_core27.Box, { children: badge }) : props.rightSection,
|
|
1771
|
+
"aria-label": ariaLabel ?? (typeof resolvedLabel === "string" ? resolvedLabel : void 0),
|
|
1772
|
+
"aria-current": props.active ? "page" : ariaCurrent,
|
|
1773
|
+
...props
|
|
1774
|
+
}
|
|
1775
|
+
);
|
|
1776
|
+
}
|
|
1777
|
+
);
|
|
1778
|
+
var SidebarNavItem = (0, import_core27.createPolymorphicComponent)(_SidebarNavItem);
|
|
1779
|
+
|
|
1272
1780
|
// src/PublicSiteFooter.tsx
|
|
1273
|
-
var
|
|
1274
|
-
var
|
|
1781
|
+
var import_core28 = require("@mantine/core");
|
|
1782
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
1275
1783
|
function PublicSiteFooter({ children, meta }) {
|
|
1276
|
-
return /* @__PURE__ */ (0,
|
|
1277
|
-
children ? /* @__PURE__ */ (0,
|
|
1278
|
-
meta ? /* @__PURE__ */ (0,
|
|
1784
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_core28.Stack, { component: "footer", gap: "xs", children: [
|
|
1785
|
+
children ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Text, { size: "sm", children }) : null,
|
|
1786
|
+
meta ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Group, { gap: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_core28.Text, { size: "xs", c: "dimmed", children: meta }) }) : null
|
|
1279
1787
|
] });
|
|
1280
1788
|
}
|
|
1281
1789
|
|
|
1282
1790
|
// src/PublicBrandFooter.tsx
|
|
1283
|
-
var
|
|
1284
|
-
var
|
|
1791
|
+
var import_core29 = require("@mantine/core");
|
|
1792
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
1285
1793
|
function PublicBrandFooter({
|
|
1286
1794
|
media,
|
|
1287
1795
|
brandTitle,
|
|
@@ -1296,8 +1804,8 @@ function PublicBrandFooter({
|
|
|
1296
1804
|
const mediaSpan = layoutVariant === "immersive-media" ? 5 : 4;
|
|
1297
1805
|
const primarySpan = media ? layoutVariant === "balanced-quote" ? 4 : 4 : secondary ? 6 : 12;
|
|
1298
1806
|
const secondarySpan = media ? Math.max(3, 12 - mediaSpan - primarySpan) : Math.max(4, 12 - primarySpan);
|
|
1299
|
-
return /* @__PURE__ */ (0,
|
|
1300
|
-
|
|
1807
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1808
|
+
import_core29.Paper,
|
|
1301
1809
|
{
|
|
1302
1810
|
component: "footer",
|
|
1303
1811
|
withBorder: true,
|
|
@@ -1305,19 +1813,19 @@ function PublicBrandFooter({
|
|
|
1305
1813
|
p: compact ? "lg" : "xl",
|
|
1306
1814
|
className: classNames?.root,
|
|
1307
1815
|
"data-layout-variant": layoutVariant,
|
|
1308
|
-
children: /* @__PURE__ */ (0,
|
|
1309
|
-
/* @__PURE__ */ (0,
|
|
1310
|
-
media ? /* @__PURE__ */ (0,
|
|
1311
|
-
/* @__PURE__ */ (0,
|
|
1312
|
-
brandTitle ? /* @__PURE__ */ (0,
|
|
1313
|
-
description ? /* @__PURE__ */ (0,
|
|
1314
|
-
actions ? /* @__PURE__ */ (0,
|
|
1816
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Stack, { gap: "lg", children: [
|
|
1817
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Grid, { gutter: compact ? "lg" : "xl", align: "flex-start", children: [
|
|
1818
|
+
media ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Grid.Col, { span: { base: 12, md: mediaSpan }, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Box, { className: classNames?.media, children: media }) }) : null,
|
|
1819
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Grid.Col, { span: { base: 12, md: primarySpan }, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_core29.Stack, { gap: compact ? "xs" : "sm", className: classNames?.primary, children: [
|
|
1820
|
+
brandTitle ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Title, { order: 4, children: brandTitle }) : null,
|
|
1821
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Text, { c: "dimmed", children: description }) : null,
|
|
1822
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Box, { children: actions }) : null
|
|
1315
1823
|
] }) }),
|
|
1316
|
-
secondary ? /* @__PURE__ */ (0,
|
|
1824
|
+
secondary ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Grid.Col, { span: { base: 12, md: secondarySpan }, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Stack, { gap: compact ? "xs" : "sm", className: classNames?.secondary, children: secondary }) }) : null
|
|
1317
1825
|
] }),
|
|
1318
|
-
legal ? /* @__PURE__ */ (0,
|
|
1319
|
-
/* @__PURE__ */ (0,
|
|
1320
|
-
/* @__PURE__ */ (0,
|
|
1826
|
+
legal ? /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_jsx_runtime30.Fragment, { children: [
|
|
1827
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Divider, {}),
|
|
1828
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Group, { justify: "space-between", gap: "sm", wrap: "wrap", className: classNames?.legal, children: typeof legal === "string" ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_core29.Text, { size: "sm", c: "dimmed", children: legal }) : legal })
|
|
1321
1829
|
] }) : null
|
|
1322
1830
|
] })
|
|
1323
1831
|
}
|
|
@@ -1325,50 +1833,126 @@ function PublicBrandFooter({
|
|
|
1325
1833
|
}
|
|
1326
1834
|
|
|
1327
1835
|
// src/AuthShell.tsx
|
|
1328
|
-
var
|
|
1329
|
-
var
|
|
1330
|
-
function AuthShell({
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1836
|
+
var import_core30 = require("@mantine/core");
|
|
1837
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
1838
|
+
function AuthShell({
|
|
1839
|
+
title,
|
|
1840
|
+
description,
|
|
1841
|
+
brand,
|
|
1842
|
+
headerActions,
|
|
1843
|
+
footer,
|
|
1844
|
+
helper,
|
|
1845
|
+
socialAuth,
|
|
1846
|
+
dividerLabel = "Or continue with your account",
|
|
1847
|
+
children
|
|
1848
|
+
}) {
|
|
1849
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Box, { py: { base: "xl", md: "4rem" }, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Container, { size: "xs", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core30.Stack, { gap: "xl", children: [
|
|
1850
|
+
brand || headerActions ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core30.Group, { justify: brand && headerActions ? "space-between" : "center", align: "center", children: [
|
|
1851
|
+
brand ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Box, { children: brand }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Box, {}),
|
|
1852
|
+
headerActions ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Group, { gap: "sm", children: headerActions }) : null
|
|
1335
1853
|
] }) : null,
|
|
1336
|
-
/* @__PURE__ */ (0,
|
|
1337
|
-
/* @__PURE__ */ (0,
|
|
1338
|
-
/* @__PURE__ */ (0,
|
|
1339
|
-
description ? /* @__PURE__ */ (0,
|
|
1854
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Card, { withBorder: true, radius: "lg", padding: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core30.Stack, { gap: "lg", children: [
|
|
1855
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_core30.Stack, { gap: "xs", ta: "center", children: [
|
|
1856
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Title, { order: 2, children: title }),
|
|
1857
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Text, { c: "dimmed", size: "sm", children: description }) : null
|
|
1340
1858
|
] }),
|
|
1859
|
+
socialAuth ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Box, { children: socialAuth }) : null,
|
|
1860
|
+
socialAuth ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Divider, { label: dividerLabel, labelPosition: "center" }) : null,
|
|
1341
1861
|
children,
|
|
1342
|
-
helper ? /* @__PURE__ */ (0,
|
|
1862
|
+
helper ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Text, { size: "sm", c: "dimmed", ta: "center", children: helper }) : null
|
|
1343
1863
|
] }) }),
|
|
1344
|
-
footer ? /* @__PURE__ */ (0,
|
|
1864
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_core30.Text, { size: "sm", c: "dimmed", ta: "center", children: footer }) : null
|
|
1345
1865
|
] }) }) });
|
|
1346
1866
|
}
|
|
1347
1867
|
|
|
1868
|
+
// src/SocialAuthButtons.tsx
|
|
1869
|
+
var import_core31 = require("@mantine/core");
|
|
1870
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
1871
|
+
var providerConfig = {
|
|
1872
|
+
google: { label: "Google", mark: "G", color: "red" },
|
|
1873
|
+
apple: { label: "Apple", mark: "A", color: "dark" },
|
|
1874
|
+
github: { label: "GitHub", mark: "GH", color: "gray" },
|
|
1875
|
+
facebook: { label: "Facebook", mark: "F", color: "blue" },
|
|
1876
|
+
microsoft: { label: "Microsoft", mark: "M", color: "cyan" },
|
|
1877
|
+
linkedin: { label: "LinkedIn", mark: "in", color: "blue" },
|
|
1878
|
+
discord: { label: "Discord", mark: "D", color: "indigo" },
|
|
1879
|
+
x: { label: "X", mark: "X", color: "dark" },
|
|
1880
|
+
email: { label: "Email", mark: "@", color: "gray" }
|
|
1881
|
+
};
|
|
1882
|
+
function ProviderMark({ id }) {
|
|
1883
|
+
const config = providerConfig[id] ?? { label: id, mark: id.slice(0, 2).toUpperCase(), color: "gray" };
|
|
1884
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.ThemeIcon, { variant: "light", color: config.color, radius: "xl", size: "md", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Text, { size: "xs", fw: 700, children: config.mark }) });
|
|
1885
|
+
}
|
|
1886
|
+
function SocialAuthButton({ provider, compact = false }) {
|
|
1887
|
+
const config = providerConfig[provider.id] ?? { label: provider.id, mark: provider.id.slice(0, 2).toUpperCase(), color: "gray" };
|
|
1888
|
+
const label = provider.label ?? `Continue with ${config.label}`;
|
|
1889
|
+
const buttonProps = provider.href ? { component: "a", href: provider.href } : { onClick: provider.onClick };
|
|
1890
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
1891
|
+
import_core31.Button,
|
|
1892
|
+
{
|
|
1893
|
+
variant: "default",
|
|
1894
|
+
justify: "space-between",
|
|
1895
|
+
fullWidth: true,
|
|
1896
|
+
size: compact ? "sm" : "md",
|
|
1897
|
+
leftSection: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(ProviderMark, { id: provider.id }),
|
|
1898
|
+
disabled: provider.disabled,
|
|
1899
|
+
loading: provider.loading,
|
|
1900
|
+
...buttonProps,
|
|
1901
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core31.Stack, { gap: 0, align: "flex-start", children: [
|
|
1902
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Text, { inherit: true, children: label }),
|
|
1903
|
+
provider.description ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Text, { size: "xs", c: "dimmed", lh: 1.2, children: provider.description }) : null
|
|
1904
|
+
] })
|
|
1905
|
+
}
|
|
1906
|
+
);
|
|
1907
|
+
}
|
|
1908
|
+
function SocialAuthButtons({
|
|
1909
|
+
providers,
|
|
1910
|
+
title = "Continue with a trusted provider",
|
|
1911
|
+
description,
|
|
1912
|
+
layout = "stack",
|
|
1913
|
+
compact = false
|
|
1914
|
+
}) {
|
|
1915
|
+
if (!providers.length) {
|
|
1916
|
+
return null;
|
|
1917
|
+
}
|
|
1918
|
+
const content = providers.map((provider) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(SocialAuthButton, { provider, compact }, provider.id));
|
|
1919
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core31.Stack, { gap: "md", children: [
|
|
1920
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core31.Stack, { gap: 4, ta: "center", children: [
|
|
1921
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_core31.Group, { justify: "center", gap: "xs", children: [
|
|
1922
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(GdsIcons.Login, { size: "1rem" }),
|
|
1923
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Text, { fw: 600, children: title })
|
|
1924
|
+
] }),
|
|
1925
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Text, { size: "sm", c: "dimmed", children: description }) : null
|
|
1926
|
+
] }),
|
|
1927
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Divider, {}),
|
|
1928
|
+
layout === "grid" ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.SimpleGrid, { cols: { base: 1, sm: 2 }, spacing: "sm", children: content }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_core31.Stack, { gap: "sm", children: content })
|
|
1929
|
+
] });
|
|
1930
|
+
}
|
|
1931
|
+
|
|
1348
1932
|
// src/ArticleShell.tsx
|
|
1349
|
-
var
|
|
1350
|
-
var
|
|
1933
|
+
var import_core32 = require("@mantine/core");
|
|
1934
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
1351
1935
|
function ArticleShell({ eyebrow, title, lead, meta, sideRail, children }) {
|
|
1352
|
-
return /* @__PURE__ */ (0,
|
|
1353
|
-
/* @__PURE__ */ (0,
|
|
1354
|
-
/* @__PURE__ */ (0,
|
|
1355
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
1356
|
-
/* @__PURE__ */ (0,
|
|
1357
|
-
lead ? /* @__PURE__ */ (0,
|
|
1358
|
-
meta ? /* @__PURE__ */ (0,
|
|
1936
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Container, { size: "lg", py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core32.Group, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
|
|
1937
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core32.Stack, { gap: "lg", maw: 760, flex: 1, children: [
|
|
1938
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_core32.Stack, { gap: "sm", children: [
|
|
1939
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Text, { size: "sm", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
|
|
1940
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Title, { order: 1, children: title }),
|
|
1941
|
+
lead ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Text, { size: "lg", c: "dimmed", children: lead }) : null,
|
|
1942
|
+
meta ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Group, { gap: "md", children: meta }) : null
|
|
1359
1943
|
] }),
|
|
1360
|
-
/* @__PURE__ */ (0,
|
|
1944
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Stack, { gap: "md", children })
|
|
1361
1945
|
] }),
|
|
1362
|
-
sideRail ? /* @__PURE__ */ (0,
|
|
1946
|
+
sideRail ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_core32.Stack, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
|
|
1363
1947
|
] }) });
|
|
1364
1948
|
}
|
|
1365
1949
|
|
|
1366
1950
|
// src/DocsCodeBlock.tsx
|
|
1367
|
-
var
|
|
1368
|
-
var
|
|
1369
|
-
var
|
|
1951
|
+
var import_react5 = require("react");
|
|
1952
|
+
var import_core33 = require("@mantine/core");
|
|
1953
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
1370
1954
|
function DocsCodeBlock({ code, language, title, withCopy = true }) {
|
|
1371
|
-
const [copied, setCopied] = (0,
|
|
1955
|
+
const [copied, setCopied] = (0, import_react5.useState)(false);
|
|
1372
1956
|
const handleCopy = async () => {
|
|
1373
1957
|
if (!navigator?.clipboard) {
|
|
1374
1958
|
return;
|
|
@@ -1377,44 +1961,44 @@ function DocsCodeBlock({ code, language, title, withCopy = true }) {
|
|
|
1377
1961
|
setCopied(true);
|
|
1378
1962
|
window.setTimeout(() => setCopied(false), 1200);
|
|
1379
1963
|
};
|
|
1380
|
-
return /* @__PURE__ */ (0,
|
|
1381
|
-
title || withCopy ? /* @__PURE__ */ (0,
|
|
1382
|
-
/* @__PURE__ */ (0,
|
|
1383
|
-
title ? /* @__PURE__ */ (0,
|
|
1384
|
-
language ? /* @__PURE__ */ (0,
|
|
1964
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core33.Paper, { withBorder: true, radius: "lg", p: "md", children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Stack, { gap: "sm", children: [
|
|
1965
|
+
title || withCopy ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Group, { justify: "space-between", align: "center", children: [
|
|
1966
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_core33.Stack, { gap: 0, children: [
|
|
1967
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core33.Text, { fw: 600, children: title }) : null,
|
|
1968
|
+
language ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core33.Text, { size: "xs", c: "dimmed", children: language }) : null
|
|
1385
1969
|
] }),
|
|
1386
|
-
withCopy ? /* @__PURE__ */ (0,
|
|
1387
|
-
|
|
1970
|
+
withCopy ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
1971
|
+
import_core33.ActionIcon,
|
|
1388
1972
|
{
|
|
1389
1973
|
variant: "subtle",
|
|
1390
1974
|
"aria-label": copied ? "Copied code block" : "Copy code block",
|
|
1391
1975
|
onClick: () => {
|
|
1392
1976
|
void handleCopy();
|
|
1393
1977
|
},
|
|
1394
|
-
children: /* @__PURE__ */ (0,
|
|
1978
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(GdsIcons.Copy, { size: "1rem" })
|
|
1395
1979
|
}
|
|
1396
1980
|
) : null
|
|
1397
1981
|
] }) : null,
|
|
1398
|
-
/* @__PURE__ */ (0,
|
|
1982
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_core33.Code, { block: true, children: code })
|
|
1399
1983
|
] }) });
|
|
1400
1984
|
}
|
|
1401
1985
|
|
|
1402
1986
|
// src/CtaButtonGroup.tsx
|
|
1403
|
-
var
|
|
1404
|
-
var
|
|
1987
|
+
var import_core34 = require("@mantine/core");
|
|
1988
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
1405
1989
|
function CtaButtonGroup({ primary, secondary, tertiary }) {
|
|
1406
|
-
return /* @__PURE__ */ (0,
|
|
1407
|
-
/* @__PURE__ */ (0,
|
|
1408
|
-
/* @__PURE__ */ (0,
|
|
1409
|
-
secondary ? /* @__PURE__ */ (0,
|
|
1990
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core34.Stack, { gap: "sm", children: [
|
|
1991
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_core34.Group, { gap: "sm", align: "stretch", children: [
|
|
1992
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { children: primary }),
|
|
1993
|
+
secondary ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { children: secondary }) : null
|
|
1410
1994
|
] }),
|
|
1411
|
-
tertiary ? /* @__PURE__ */ (0,
|
|
1995
|
+
tertiary ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { children: tertiary }) : null
|
|
1412
1996
|
] });
|
|
1413
1997
|
}
|
|
1414
1998
|
|
|
1415
1999
|
// src/DocsPageShell.tsx
|
|
1416
|
-
var
|
|
1417
|
-
var
|
|
2000
|
+
var import_core35 = require("@mantine/core");
|
|
2001
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
1418
2002
|
function DocsPageShell({
|
|
1419
2003
|
breadcrumbs = [],
|
|
1420
2004
|
title,
|
|
@@ -1425,27 +2009,27 @@ function DocsPageShell({
|
|
|
1425
2009
|
footerNext,
|
|
1426
2010
|
children
|
|
1427
2011
|
}) {
|
|
1428
|
-
return /* @__PURE__ */ (0,
|
|
1429
|
-
/* @__PURE__ */ (0,
|
|
1430
|
-
breadcrumbs.length ? /* @__PURE__ */ (0,
|
|
1431
|
-
(crumb) => crumb.href ? /* @__PURE__ */ (0,
|
|
2012
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Container, { size: "lg", py: "xl", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core35.Group, { align: "flex-start", gap: "xl", wrap: "nowrap", children: [
|
|
2013
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core35.Stack, { component: "article", gap: "lg", maw: 760, flex: 1, children: [
|
|
2014
|
+
breadcrumbs.length ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Breadcrumbs, { children: breadcrumbs.map(
|
|
2015
|
+
(crumb) => crumb.href ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Anchor, { href: crumb.href, children: crumb.label }, `${crumb.label}-${crumb.href}`) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Text, { children: crumb.label }, crumb.label)
|
|
1432
2016
|
) }) : null,
|
|
1433
|
-
/* @__PURE__ */ (0,
|
|
1434
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
1435
|
-
/* @__PURE__ */ (0,
|
|
1436
|
-
lead ? /* @__PURE__ */ (0,
|
|
1437
|
-
meta ? /* @__PURE__ */ (0,
|
|
2017
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_core35.Stack, { gap: "sm", children: [
|
|
2018
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Text, { size: "sm", fw: 700, c: "dimmed", children: eyebrow }) : null,
|
|
2019
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Title, { order: 1, children: title }),
|
|
2020
|
+
lead ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Text, { size: "lg", c: "dimmed", children: lead }) : null,
|
|
2021
|
+
meta ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Group, { gap: "md", children: meta }) : null
|
|
1438
2022
|
] }),
|
|
1439
|
-
/* @__PURE__ */ (0,
|
|
1440
|
-
footerNext ? /* @__PURE__ */ (0,
|
|
2023
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Stack, { gap: "md", children }),
|
|
2024
|
+
footerNext ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Anchor, { href: footerNext.href, fw: 600, children: footerNext.label }) : null
|
|
1441
2025
|
] }),
|
|
1442
|
-
sideRail ? /* @__PURE__ */ (0,
|
|
2026
|
+
sideRail ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_core35.Stack, { visibleFrom: "lg", gap: "md", w: 240, children: sideRail }) : null
|
|
1443
2027
|
] }) });
|
|
1444
2028
|
}
|
|
1445
2029
|
|
|
1446
2030
|
// src/EditorialHero.tsx
|
|
1447
|
-
var
|
|
1448
|
-
var
|
|
2031
|
+
var import_core36 = require("@mantine/core");
|
|
2032
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
1449
2033
|
function resolveActionVariant(action, index, seenPrimary) {
|
|
1450
2034
|
const requested = action.variant ?? (index === 0 ? "primary" : "secondary");
|
|
1451
2035
|
if (requested === "primary" && !seenPrimary) {
|
|
@@ -1457,8 +2041,8 @@ function resolveActionVariant(action, index, seenPrimary) {
|
|
|
1457
2041
|
return { variant: "default", seenPrimary };
|
|
1458
2042
|
}
|
|
1459
2043
|
function HeroAction({ action, variant }) {
|
|
1460
|
-
const content = /* @__PURE__ */ (0,
|
|
1461
|
-
|
|
2044
|
+
const content = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2045
|
+
import_core36.Anchor,
|
|
1462
2046
|
{
|
|
1463
2047
|
href: action.href,
|
|
1464
2048
|
onClick: action.onClick,
|
|
@@ -1482,8 +2066,8 @@ function HeroAction({ action, variant }) {
|
|
|
1482
2066
|
}
|
|
1483
2067
|
);
|
|
1484
2068
|
if (!action.href) {
|
|
1485
|
-
return /* @__PURE__ */ (0,
|
|
1486
|
-
|
|
2069
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2070
|
+
import_core36.Box,
|
|
1487
2071
|
{
|
|
1488
2072
|
component: "button",
|
|
1489
2073
|
type: "button",
|
|
@@ -1510,30 +2094,30 @@ function HeroAction({ action, variant }) {
|
|
|
1510
2094
|
return content;
|
|
1511
2095
|
}
|
|
1512
2096
|
function LoadingHero({ compact }) {
|
|
1513
|
-
return /* @__PURE__ */ (0,
|
|
1514
|
-
/* @__PURE__ */ (0,
|
|
1515
|
-
/* @__PURE__ */ (0,
|
|
1516
|
-
/* @__PURE__ */ (0,
|
|
1517
|
-
/* @__PURE__ */ (0,
|
|
1518
|
-
/* @__PURE__ */ (0,
|
|
1519
|
-
/* @__PURE__ */ (0,
|
|
1520
|
-
/* @__PURE__ */ (0,
|
|
1521
|
-
/* @__PURE__ */ (0,
|
|
2097
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Paper, { withBorder: true, radius: "xl", p: compact ? "lg" : "xl", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core36.Grid, { gutter: compact ? "lg" : "xl", align: "center", children: [
|
|
2098
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Grid.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core36.Stack, { gap: "md", children: [
|
|
2099
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Skeleton, { height: 16, width: 96, radius: "xl" }),
|
|
2100
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Skeleton, { height: 48, width: "90%", radius: "md" }),
|
|
2101
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Skeleton, { height: 18, width: "100%", radius: "md" }),
|
|
2102
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Skeleton, { height: 18, width: "82%", radius: "md" }),
|
|
2103
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core36.Group, { children: [
|
|
2104
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Skeleton, { height: 40, width: 140, radius: "md" }),
|
|
2105
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Skeleton, { height: 40, width: 140, radius: "md" })
|
|
1522
2106
|
] })
|
|
1523
2107
|
] }) }),
|
|
1524
|
-
/* @__PURE__ */ (0,
|
|
2108
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Grid.Col, { span: { base: 12, md: 6 }, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.AspectRatio, { ratio: 16 / 11, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Skeleton, { radius: "lg" }) }) })
|
|
1525
2109
|
] }) });
|
|
1526
2110
|
}
|
|
1527
2111
|
function MediaFallback() {
|
|
1528
|
-
return /* @__PURE__ */ (0,
|
|
1529
|
-
|
|
2112
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.AspectRatio, { ratio: 16 / 11, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2113
|
+
import_core36.ThemeIcon,
|
|
1530
2114
|
{
|
|
1531
2115
|
size: "100%",
|
|
1532
2116
|
radius: "lg",
|
|
1533
2117
|
color: "gray",
|
|
1534
2118
|
variant: "light",
|
|
1535
2119
|
"aria-label": "Hero media is unavailable",
|
|
1536
|
-
children: /* @__PURE__ */ (0,
|
|
2120
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(GdsIcons.Gallery, { size: "2.5rem" })
|
|
1537
2121
|
}
|
|
1538
2122
|
) });
|
|
1539
2123
|
}
|
|
@@ -1553,8 +2137,8 @@ function MediaFrame({
|
|
|
1553
2137
|
} else if (mediaFade === "soft-start") {
|
|
1554
2138
|
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%)";
|
|
1555
2139
|
}
|
|
1556
|
-
return /* @__PURE__ */ (0,
|
|
1557
|
-
|
|
2140
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
|
|
2141
|
+
import_core36.Box,
|
|
1558
2142
|
{
|
|
1559
2143
|
component: "figure",
|
|
1560
2144
|
m: 0,
|
|
@@ -1567,9 +2151,9 @@ function MediaFrame({
|
|
|
1567
2151
|
},
|
|
1568
2152
|
"aria-label": mediaAlt,
|
|
1569
2153
|
children: [
|
|
1570
|
-
media ?? /* @__PURE__ */ (0,
|
|
1571
|
-
media && overlayBackground ? /* @__PURE__ */ (0,
|
|
1572
|
-
|
|
2154
|
+
media ?? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(MediaFallback, {}),
|
|
2155
|
+
media && overlayBackground ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2156
|
+
import_core36.Box,
|
|
1573
2157
|
{
|
|
1574
2158
|
"aria-hidden": true,
|
|
1575
2159
|
style: {
|
|
@@ -1602,7 +2186,7 @@ function EditorialHero({
|
|
|
1602
2186
|
classNames
|
|
1603
2187
|
}) {
|
|
1604
2188
|
if (loading) {
|
|
1605
|
-
return /* @__PURE__ */ (0,
|
|
2189
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(LoadingHero, { compact });
|
|
1606
2190
|
}
|
|
1607
2191
|
const stackAlign = align === "center" ? "center" : "flex-start";
|
|
1608
2192
|
const textAlign = align === "center" ? "center" : "left";
|
|
@@ -1610,15 +2194,15 @@ function EditorialHero({
|
|
|
1610
2194
|
const renderedActions = actions.slice(0, 3).map((action, index) => {
|
|
1611
2195
|
const resolved = resolveActionVariant(action, index, seenPrimary);
|
|
1612
2196
|
seenPrimary = resolved.seenPrimary;
|
|
1613
|
-
return /* @__PURE__ */ (0,
|
|
2197
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(HeroAction, { action, variant: resolved.variant }, `${action.label}-${index}`);
|
|
1614
2198
|
});
|
|
1615
|
-
const textSlot = /* @__PURE__ */ (0,
|
|
1616
|
-
/* @__PURE__ */ (0,
|
|
1617
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
1618
|
-
/* @__PURE__ */ (0,
|
|
1619
|
-
description ? /* @__PURE__ */ (0,
|
|
2199
|
+
const textSlot = /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core36.Stack, { gap: compact ? "md" : "lg", justify: "center", h: "100%", className: classNames?.content, children: [
|
|
2200
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core36.Stack, { gap: "sm", align: stackAlign, children: [
|
|
2201
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Text, { size: "sm", fw: 700, c: "dimmed", ta: textAlign, children: eyebrow }) : null,
|
|
2202
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Title, { order: 1, maw: 760, ta: textAlign, children: title }),
|
|
2203
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Text, { size: compact ? "md" : "lg", c: "dimmed", maw: 720, ta: textAlign, children: description }) : null
|
|
1620
2204
|
] }),
|
|
1621
|
-
renderedActions.length ? /* @__PURE__ */ (0,
|
|
2205
|
+
renderedActions.length ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Box, { className: classNames?.actions, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
1622
2206
|
CtaButtonGroup,
|
|
1623
2207
|
{
|
|
1624
2208
|
primary: renderedActions[0],
|
|
@@ -1626,8 +2210,8 @@ function EditorialHero({
|
|
|
1626
2210
|
tertiary: renderedActions[2]
|
|
1627
2211
|
}
|
|
1628
2212
|
) }) : null,
|
|
1629
|
-
meta.length ? /* @__PURE__ */ (0,
|
|
1630
|
-
|
|
2213
|
+
meta.length ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Group, { gap: "sm", wrap: "wrap", "aria-label": "Supporting details", className: classNames?.meta, children: meta.map((item) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
|
|
2214
|
+
import_core36.Group,
|
|
1631
2215
|
{
|
|
1632
2216
|
gap: 6,
|
|
1633
2217
|
px: "sm",
|
|
@@ -1638,17 +2222,17 @@ function EditorialHero({
|
|
|
1638
2222
|
},
|
|
1639
2223
|
children: [
|
|
1640
2224
|
item.icon,
|
|
1641
|
-
/* @__PURE__ */ (0,
|
|
2225
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Text, { size: "sm", c: "dimmed", children: item.label })
|
|
1642
2226
|
]
|
|
1643
2227
|
},
|
|
1644
2228
|
item.id
|
|
1645
2229
|
)) }) : null
|
|
1646
2230
|
] });
|
|
1647
|
-
const mediaSlot = error ? /* @__PURE__ */ (0,
|
|
1648
|
-
const textCol = /* @__PURE__ */ (0,
|
|
1649
|
-
const mediaCol = /* @__PURE__ */ (0,
|
|
1650
|
-
return /* @__PURE__ */ (0,
|
|
1651
|
-
|
|
2231
|
+
const mediaSlot = error ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(AccentPanel, { tone: "red", variant: "soft-outline", title: "Media unavailable", children: error }) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(MediaFrame, { media, mediaAlt, mediaFade, className: classNames?.media });
|
|
2232
|
+
const textCol = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Grid.Col, { span: { base: 12, md: 6 }, order: { base: 1, md: mediaPosition === "left" ? 2 : 1 }, children: textSlot });
|
|
2233
|
+
const mediaCol = /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_core36.Grid.Col, { span: { base: 12, md: 6 }, order: { base: 2, md: mediaPosition === "left" ? 1 : 2 }, children: mediaSlot });
|
|
2234
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2235
|
+
import_core36.Paper,
|
|
1652
2236
|
{
|
|
1653
2237
|
component: "section",
|
|
1654
2238
|
withBorder: true,
|
|
@@ -1656,7 +2240,7 @@ function EditorialHero({
|
|
|
1656
2240
|
p: compact ? "lg" : "xl",
|
|
1657
2241
|
className: classNames?.root,
|
|
1658
2242
|
style: surfaceVariant === "flat-public" ? { boxShadow: "none" } : void 0,
|
|
1659
|
-
children: /* @__PURE__ */ (0,
|
|
2243
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_core36.Grid, { gutter: compact ? "lg" : "xl", align: "center", children: [
|
|
1660
2244
|
textCol,
|
|
1661
2245
|
mediaCol
|
|
1662
2246
|
] })
|
|
@@ -1665,19 +2249,19 @@ function EditorialHero({
|
|
|
1665
2249
|
}
|
|
1666
2250
|
|
|
1667
2251
|
// src/FeatureBand.tsx
|
|
1668
|
-
var
|
|
1669
|
-
var
|
|
2252
|
+
var import_core37 = require("@mantine/core");
|
|
2253
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
1670
2254
|
function FeatureBandSkeleton({
|
|
1671
2255
|
columns = 3,
|
|
1672
2256
|
bordered = true,
|
|
1673
2257
|
variant = "default"
|
|
1674
2258
|
}) {
|
|
1675
|
-
return /* @__PURE__ */ (0,
|
|
1676
|
-
/* @__PURE__ */ (0,
|
|
1677
|
-
/* @__PURE__ */ (0,
|
|
1678
|
-
/* @__PURE__ */ (0,
|
|
1679
|
-
/* @__PURE__ */ (0,
|
|
1680
|
-
/* @__PURE__ */ (0,
|
|
2259
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: Array.from({ length: columns }).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Paper, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_core37.Stack, { gap: "md", children: [
|
|
2260
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Skeleton, { height: variant === "process" ? 28 : 42, width: variant === "process" ? 72 : 42, radius: "xl" }),
|
|
2261
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_core37.Stack, { gap: "xs", children: [
|
|
2262
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Skeleton, { height: 20, width: "75%", radius: "md" }),
|
|
2263
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Skeleton, { height: 14, width: "100%", radius: "md" }),
|
|
2264
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Skeleton, { height: 14, width: "82%", radius: "md" })
|
|
1681
2265
|
] })
|
|
1682
2266
|
] }) }, index)) });
|
|
1683
2267
|
}
|
|
@@ -1690,10 +2274,10 @@ function FeatureBand({
|
|
|
1690
2274
|
variant = "default"
|
|
1691
2275
|
}) {
|
|
1692
2276
|
if (loading) {
|
|
1693
|
-
return /* @__PURE__ */ (0,
|
|
2277
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(FeatureBandSkeleton, { columns, bordered, variant });
|
|
1694
2278
|
}
|
|
1695
2279
|
if (!items.length) {
|
|
1696
|
-
return emptyState ? /* @__PURE__ */ (0,
|
|
2280
|
+
return emptyState ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_jsx_runtime38.Fragment, { children: emptyState }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
1697
2281
|
EmptyState,
|
|
1698
2282
|
{
|
|
1699
2283
|
title: "No supporting details available",
|
|
@@ -1701,9 +2285,9 @@ function FeatureBand({
|
|
|
1701
2285
|
}
|
|
1702
2286
|
);
|
|
1703
2287
|
}
|
|
1704
|
-
return /* @__PURE__ */ (0,
|
|
1705
|
-
variant === "process" ? /* @__PURE__ */ (0,
|
|
1706
|
-
|
|
2288
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Box, { component: "section", "aria-label": "Supporting features", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.SimpleGrid, { cols: { base: 1, sm: Math.min(columns, 2), lg: columns }, spacing: "lg", children: items.map((item, index) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Paper, { withBorder: bordered, radius: "lg", p: variant === "compact" ? "md" : "lg", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_core37.Stack, { gap: "md", children: [
|
|
2289
|
+
variant === "process" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
2290
|
+
import_core37.Text,
|
|
1707
2291
|
{
|
|
1708
2292
|
fw: 800,
|
|
1709
2293
|
size: "sm",
|
|
@@ -1715,19 +2299,352 @@ function FeatureBand({
|
|
|
1715
2299
|
},
|
|
1716
2300
|
children: item.stepLabel ?? `Step ${index + 1}`
|
|
1717
2301
|
}
|
|
1718
|
-
) }) : item.media ? item.media : item.icon ? /* @__PURE__ */ (0,
|
|
1719
|
-
/* @__PURE__ */ (0,
|
|
1720
|
-
/* @__PURE__ */ (0,
|
|
1721
|
-
item.description ? /* @__PURE__ */ (0,
|
|
1722
|
-
item.meta ? /* @__PURE__ */ (0,
|
|
2302
|
+
) }) : item.media ? item.media : item.icon ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.ThemeIcon, { size: "xl", radius: "xl", variant: "light", color: "violet", children: item.icon }) }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.ThemeIcon, { size: "xl", radius: "xl", variant: "light", color: "gray", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(GdsIcons.Info, { size: "1.25rem" }) }) }),
|
|
2303
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_core37.Stack, { gap: "xs", children: [
|
|
2304
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Title, { order: 4, children: item.title }),
|
|
2305
|
+
item.description ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Text, { c: "dimmed", children: item.description }) : null,
|
|
2306
|
+
item.meta ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_core37.Text, { size: "sm", c: "dimmed", children: item.meta }) : null
|
|
1723
2307
|
] })
|
|
1724
2308
|
] }) }, item.id)) }) });
|
|
1725
2309
|
}
|
|
1726
2310
|
|
|
2311
|
+
// src/MapPanel.tsx
|
|
2312
|
+
var import_core38 = require("@mantine/core");
|
|
2313
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
2314
|
+
function MapPanel({
|
|
2315
|
+
title,
|
|
2316
|
+
description,
|
|
2317
|
+
actions,
|
|
2318
|
+
loading = false,
|
|
2319
|
+
empty,
|
|
2320
|
+
error,
|
|
2321
|
+
embedTitle,
|
|
2322
|
+
iframeSrc,
|
|
2323
|
+
iframeSandbox = "allow-scripts allow-same-origin allow-popups",
|
|
2324
|
+
renderMap,
|
|
2325
|
+
minHeight = 320
|
|
2326
|
+
}) {
|
|
2327
|
+
let body;
|
|
2328
|
+
if (loading) {
|
|
2329
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
2330
|
+
StateBlock,
|
|
2331
|
+
{
|
|
2332
|
+
variant: "loading",
|
|
2333
|
+
title: "Loading map",
|
|
2334
|
+
description: "The shared map panel is still preparing the embedded surface.",
|
|
2335
|
+
compact: true
|
|
2336
|
+
}
|
|
2337
|
+
);
|
|
2338
|
+
} else if (error) {
|
|
2339
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(StateBlock, { variant: "error", title: "Map unavailable", description: error, compact: true });
|
|
2340
|
+
} else if (!iframeSrc && !renderMap) {
|
|
2341
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
2342
|
+
StateBlock,
|
|
2343
|
+
{
|
|
2344
|
+
variant: "empty",
|
|
2345
|
+
title: "No map available",
|
|
2346
|
+
description: empty ?? "Add coordinates or a sanctioned embed source to render this panel.",
|
|
2347
|
+
compact: true
|
|
2348
|
+
}
|
|
2349
|
+
);
|
|
2350
|
+
} else if (renderMap) {
|
|
2351
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core38.Box, { style: { minHeight }, children: renderMap() });
|
|
2352
|
+
} else {
|
|
2353
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core38.AspectRatio, { ratio: 16 / 9, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
2354
|
+
"iframe",
|
|
2355
|
+
{
|
|
2356
|
+
src: iframeSrc,
|
|
2357
|
+
title: embedTitle ?? "Embedded map",
|
|
2358
|
+
sandbox: iframeSandbox,
|
|
2359
|
+
loading: "lazy",
|
|
2360
|
+
referrerPolicy: "no-referrer-when-downgrade",
|
|
2361
|
+
style: { width: "100%", height: "100%", border: 0, borderRadius: 12 }
|
|
2362
|
+
}
|
|
2363
|
+
) });
|
|
2364
|
+
}
|
|
2365
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core38.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_core38.Stack, { gap: "md", children: [
|
|
2366
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_core38.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
|
|
2367
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_core38.Stack, { gap: 4, children: [
|
|
2368
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core38.Title, { order: 3, children: title }),
|
|
2369
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_core38.Text, { size: "sm", c: "dimmed", children: description }) : null
|
|
2370
|
+
] }),
|
|
2371
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(ActionBar, { ...actions }) : null
|
|
2372
|
+
] }),
|
|
2373
|
+
body
|
|
2374
|
+
] }) });
|
|
2375
|
+
}
|
|
2376
|
+
|
|
2377
|
+
// src/PublicFlowShell.tsx
|
|
2378
|
+
var import_core39 = require("@mantine/core");
|
|
2379
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
2380
|
+
var stageTone = {
|
|
2381
|
+
idle: { label: "Idle", color: "gray" },
|
|
2382
|
+
loading: { label: "Loading", color: "blue" },
|
|
2383
|
+
ready: { label: "Ready", color: "teal" },
|
|
2384
|
+
error: { label: "Error", color: "red" },
|
|
2385
|
+
complete: { label: "Complete", color: "teal" }
|
|
2386
|
+
};
|
|
2387
|
+
function toActionBar(actions = []) {
|
|
2388
|
+
if (!actions.length) {
|
|
2389
|
+
return void 0;
|
|
2390
|
+
}
|
|
2391
|
+
const ordered = [...actions].sort((left, right) => {
|
|
2392
|
+
const rank = { primary: 0, secondary: 1, tertiary: 2 };
|
|
2393
|
+
return rank[left.priority] - rank[right.priority];
|
|
2394
|
+
});
|
|
2395
|
+
const primary = ordered.find((action) => action.priority === "primary");
|
|
2396
|
+
const secondary = ordered.filter((action) => action.priority === "secondary");
|
|
2397
|
+
const tertiary = ordered.filter((action) => action.priority === "tertiary");
|
|
2398
|
+
return {
|
|
2399
|
+
primary: primary ? {
|
|
2400
|
+
action: primary.action,
|
|
2401
|
+
disabled: primary.disabled,
|
|
2402
|
+
loading: primary.loading,
|
|
2403
|
+
onClick: primary.onClick
|
|
2404
|
+
} : void 0,
|
|
2405
|
+
secondary: secondary.map((action) => ({
|
|
2406
|
+
action: action.action,
|
|
2407
|
+
disabled: action.disabled,
|
|
2408
|
+
loading: action.loading,
|
|
2409
|
+
onClick: action.onClick
|
|
2410
|
+
})),
|
|
2411
|
+
tertiary: tertiary.map((action) => ({
|
|
2412
|
+
action: action.action,
|
|
2413
|
+
disabled: action.disabled,
|
|
2414
|
+
loading: action.loading,
|
|
2415
|
+
onClick: action.onClick
|
|
2416
|
+
}))
|
|
2417
|
+
};
|
|
2418
|
+
}
|
|
2419
|
+
function PublicFlowShell({
|
|
2420
|
+
stage,
|
|
2421
|
+
eyebrow,
|
|
2422
|
+
exitAction,
|
|
2423
|
+
hardwareSurface,
|
|
2424
|
+
emptyState,
|
|
2425
|
+
errorState
|
|
2426
|
+
}) {
|
|
2427
|
+
const tone = stageTone[stage.status];
|
|
2428
|
+
const actionBar = toActionBar(stage.actions);
|
|
2429
|
+
let body = stage.body;
|
|
2430
|
+
if (stage.status === "loading") {
|
|
2431
|
+
body = /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
2432
|
+
StateBlock,
|
|
2433
|
+
{
|
|
2434
|
+
variant: "loading",
|
|
2435
|
+
title: "Preparing flow",
|
|
2436
|
+
description: stage.description ?? "The current public flow stage is still loading."
|
|
2437
|
+
}
|
|
2438
|
+
);
|
|
2439
|
+
} else if (stage.status === "error") {
|
|
2440
|
+
body = errorState ?? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
2441
|
+
StateBlock,
|
|
2442
|
+
{
|
|
2443
|
+
variant: "error",
|
|
2444
|
+
title: "Flow unavailable",
|
|
2445
|
+
description: stage.description ?? "This public flow could not continue safely."
|
|
2446
|
+
}
|
|
2447
|
+
);
|
|
2448
|
+
} else if (!stage.body && !hardwareSurface) {
|
|
2449
|
+
body = emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
2450
|
+
EmptyState,
|
|
2451
|
+
{
|
|
2452
|
+
title: "No stage content available",
|
|
2453
|
+
description: "Add the current flow stage body or a bounded hardware surface to render this contract."
|
|
2454
|
+
}
|
|
2455
|
+
);
|
|
2456
|
+
}
|
|
2457
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core39.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core39.Stack, { gap: "lg", children: [
|
|
2458
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core39.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
|
|
2459
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core39.Stack, { gap: 4, children: [
|
|
2460
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core39.Text, { size: "xs", fw: 700, c: "dimmed", tt: "uppercase", children: eyebrow }) : null,
|
|
2461
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_core39.Group, { gap: "sm", wrap: "wrap", children: [
|
|
2462
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core39.Title, { order: 2, children: stage.title }),
|
|
2463
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core39.Badge, { variant: "light", color: tone.color, children: tone.label })
|
|
2464
|
+
] }),
|
|
2465
|
+
stage.description ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core39.Text, { size: "sm", c: "dimmed", children: stage.description }) : null
|
|
2466
|
+
] }),
|
|
2467
|
+
exitAction
|
|
2468
|
+
] }),
|
|
2469
|
+
stage.notice ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_core39.Text, { size: "sm", c: "dimmed", children: stage.notice }) : null,
|
|
2470
|
+
body,
|
|
2471
|
+
hardwareSurface,
|
|
2472
|
+
stage.aside,
|
|
2473
|
+
actionBar ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(ActionBar, { ...actionBar }) : null
|
|
2474
|
+
] }) });
|
|
2475
|
+
}
|
|
2476
|
+
|
|
2477
|
+
// src/PlaybackSurface.tsx
|
|
2478
|
+
var import_core40 = require("@mantine/core");
|
|
2479
|
+
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
2480
|
+
var stateTone = {
|
|
2481
|
+
loading: { label: "Loading", color: "blue" },
|
|
2482
|
+
ready: { label: "Ready", color: "teal" },
|
|
2483
|
+
playing: { label: "Playing", color: "teal" },
|
|
2484
|
+
empty: { label: "Empty", color: "gray" },
|
|
2485
|
+
error: { label: "Error", color: "red" },
|
|
2486
|
+
degraded: { label: "Degraded", color: "orange" }
|
|
2487
|
+
};
|
|
2488
|
+
function PlaybackSurface({
|
|
2489
|
+
title,
|
|
2490
|
+
state,
|
|
2491
|
+
media,
|
|
2492
|
+
statusMessage,
|
|
2493
|
+
controls,
|
|
2494
|
+
emptyState,
|
|
2495
|
+
errorState,
|
|
2496
|
+
overlays,
|
|
2497
|
+
mode = "embedded"
|
|
2498
|
+
}) {
|
|
2499
|
+
const tone = stateTone[state];
|
|
2500
|
+
let content;
|
|
2501
|
+
if (state === "loading") {
|
|
2502
|
+
content = /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
2503
|
+
StateBlock,
|
|
2504
|
+
{
|
|
2505
|
+
variant: "loading",
|
|
2506
|
+
title: "Loading playback",
|
|
2507
|
+
description: "The playback surface is still preparing timed or fullscreen media."
|
|
2508
|
+
}
|
|
2509
|
+
);
|
|
2510
|
+
} else if (state === "empty") {
|
|
2511
|
+
content = emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
2512
|
+
EmptyState,
|
|
2513
|
+
{
|
|
2514
|
+
title: "No playback content available",
|
|
2515
|
+
description: "Add media assets or a playlist to render this playback surface."
|
|
2516
|
+
}
|
|
2517
|
+
);
|
|
2518
|
+
} else if (state === "error") {
|
|
2519
|
+
content = errorState ?? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
2520
|
+
StateBlock,
|
|
2521
|
+
{
|
|
2522
|
+
variant: "error",
|
|
2523
|
+
title: "Playback unavailable",
|
|
2524
|
+
description: "The playback surface could not render the current media safely."
|
|
2525
|
+
}
|
|
2526
|
+
);
|
|
2527
|
+
} else {
|
|
2528
|
+
content = /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_core40.Stack, { gap: "md", children: [
|
|
2529
|
+
media,
|
|
2530
|
+
overlays
|
|
2531
|
+
] });
|
|
2532
|
+
}
|
|
2533
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core40.Paper, { withBorder: true, radius: "xl", p: "lg", "data-playback-mode": mode, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_core40.Stack, { gap: "md", children: [
|
|
2534
|
+
title || statusMessage || controls ? /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_core40.Group, { justify: "space-between", align: "flex-start", gap: "md", wrap: "wrap", children: [
|
|
2535
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_core40.Stack, { gap: 4, children: [
|
|
2536
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core40.Title, { order: 3, children: title }) : null,
|
|
2537
|
+
statusMessage ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core40.Text, { size: "sm", c: "dimmed", children: statusMessage }) : null
|
|
2538
|
+
] }),
|
|
2539
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_core40.Group, { gap: "sm", align: "center", wrap: "wrap", children: [
|
|
2540
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_core40.Badge, { variant: "light", color: tone.color, children: tone.label }),
|
|
2541
|
+
controls
|
|
2542
|
+
] })
|
|
2543
|
+
] }) : null,
|
|
2544
|
+
state === "degraded" ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
2545
|
+
StateBlock,
|
|
2546
|
+
{
|
|
2547
|
+
variant: "info",
|
|
2548
|
+
title: "Playback degraded",
|
|
2549
|
+
description: statusMessage ?? "Playback is continuing with reduced fidelity or recoverable media failures.",
|
|
2550
|
+
compact: true
|
|
2551
|
+
}
|
|
2552
|
+
) : null,
|
|
2553
|
+
content
|
|
2554
|
+
] }) });
|
|
2555
|
+
}
|
|
2556
|
+
|
|
2557
|
+
// src/ShareButtonGroup.tsx
|
|
2558
|
+
var import_react6 = require("react");
|
|
2559
|
+
var import_core41 = require("@mantine/core");
|
|
2560
|
+
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
2561
|
+
var channelLabels = {
|
|
2562
|
+
native: "Share",
|
|
2563
|
+
copy: "Copy link",
|
|
2564
|
+
mail: "Email",
|
|
2565
|
+
message: "Message",
|
|
2566
|
+
x: "Share on X",
|
|
2567
|
+
facebook: "Share on Facebook",
|
|
2568
|
+
linkedin: "Share on LinkedIn",
|
|
2569
|
+
whatsapp: "Share on WhatsApp",
|
|
2570
|
+
telegram: "Share on Telegram"
|
|
2571
|
+
};
|
|
2572
|
+
function encodeShare(url, title, text) {
|
|
2573
|
+
const safeUrl = encodeURIComponent(url);
|
|
2574
|
+
const safeTitle = encodeURIComponent(title ?? "");
|
|
2575
|
+
const safeText = encodeURIComponent(text ?? title ?? "");
|
|
2576
|
+
return {
|
|
2577
|
+
mail: `mailto:?subject=${safeTitle}&body=${safeText ? `${safeText}%0A%0A` : ""}${safeUrl}`,
|
|
2578
|
+
message: `sms:?&body=${safeText ? `${safeText}%20` : ""}${safeUrl}`,
|
|
2579
|
+
x: `https://x.com/intent/tweet?text=${safeText ? `${safeText}%20` : ""}${safeUrl}`,
|
|
2580
|
+
facebook: `https://www.facebook.com/sharer/sharer.php?u=${safeUrl}`,
|
|
2581
|
+
linkedin: `https://www.linkedin.com/sharing/share-offsite/?url=${safeUrl}`,
|
|
2582
|
+
whatsapp: `https://wa.me/?text=${safeText ? `${safeText}%20` : ""}${safeUrl}`,
|
|
2583
|
+
telegram: `https://t.me/share/url?url=${safeUrl}&text=${safeText}`
|
|
2584
|
+
};
|
|
2585
|
+
}
|
|
2586
|
+
function ShareAction({
|
|
2587
|
+
channel,
|
|
2588
|
+
compact,
|
|
2589
|
+
href,
|
|
2590
|
+
onClick
|
|
2591
|
+
}) {
|
|
2592
|
+
const label = channelLabels[channel];
|
|
2593
|
+
const Icon = channel === "copy" ? GdsIcons.Copy : channel === "mail" ? GdsIcons.Mail : channel === "message" ? GdsIcons.Message : GdsIcons.Refer;
|
|
2594
|
+
if (compact) {
|
|
2595
|
+
return href ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core41.ActionIcon, { component: "a", href, target: "_blank", rel: "noreferrer", variant: "subtle", size: "lg", "aria-label": label, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon, { size: "1rem", stroke: 1.75 }) }) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core41.ActionIcon, { variant: "subtle", size: "lg", "aria-label": label, onClick, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon, { size: "1rem", stroke: 1.75 }) });
|
|
2596
|
+
}
|
|
2597
|
+
return href ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core41.Button, { component: "a", href, target: "_blank", rel: "noreferrer", variant: "default", leftSection: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon, { size: "1rem", stroke: 1.75 }), children: label }) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core41.Button, { variant: "default", leftSection: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon, { size: "1rem", stroke: 1.75 }), onClick, children: label });
|
|
2598
|
+
}
|
|
2599
|
+
function ShareButtonGroup({
|
|
2600
|
+
url,
|
|
2601
|
+
title,
|
|
2602
|
+
text,
|
|
2603
|
+
channels = ["native", "copy", "mail"],
|
|
2604
|
+
compact = false,
|
|
2605
|
+
label = "Share this",
|
|
2606
|
+
description
|
|
2607
|
+
}) {
|
|
2608
|
+
const [copied, setCopied] = (0, import_react6.useState)(false);
|
|
2609
|
+
const [shared, setShared] = (0, import_react6.useState)(false);
|
|
2610
|
+
const hrefs = encodeShare(url, title, text);
|
|
2611
|
+
async function handleCopy() {
|
|
2612
|
+
await navigator.clipboard?.writeText?.(url);
|
|
2613
|
+
setCopied(true);
|
|
2614
|
+
setTimeout(() => setCopied(false), 1800);
|
|
2615
|
+
}
|
|
2616
|
+
async function handleNativeShare() {
|
|
2617
|
+
if (navigator.share) {
|
|
2618
|
+
await navigator.share({ url, title, text });
|
|
2619
|
+
setShared(true);
|
|
2620
|
+
setTimeout(() => setShared(false), 1800);
|
|
2621
|
+
return;
|
|
2622
|
+
}
|
|
2623
|
+
await handleCopy();
|
|
2624
|
+
}
|
|
2625
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_core41.Stack, { gap: "sm", children: [
|
|
2626
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_core41.Stack, { gap: 2, children: [
|
|
2627
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core41.Text, { fw: 600, children: label }),
|
|
2628
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core41.Text, { size: "sm", c: "dimmed", children: description }) : null
|
|
2629
|
+
] }),
|
|
2630
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core41.Group, { gap: "sm", wrap: "wrap", children: channels.map((channel) => {
|
|
2631
|
+
if (channel === "copy") {
|
|
2632
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(ShareAction, { channel, compact, onClick: () => void handleCopy() }, channel);
|
|
2633
|
+
}
|
|
2634
|
+
if (channel === "native") {
|
|
2635
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(ShareAction, { channel, compact, onClick: () => void handleNativeShare() }, channel);
|
|
2636
|
+
}
|
|
2637
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(ShareAction, { channel, compact, href: hrefs[channel] }, channel);
|
|
2638
|
+
}) }),
|
|
2639
|
+
copied ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core41.Text, { size: "sm", c: "teal", children: "Link copied." }) : null,
|
|
2640
|
+
shared ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_core41.Text, { size: "sm", c: "teal", children: "Share sheet opened." }) : null
|
|
2641
|
+
] });
|
|
2642
|
+
}
|
|
2643
|
+
|
|
1727
2644
|
// src/UploadDropzone.tsx
|
|
1728
|
-
var
|
|
1729
|
-
var
|
|
1730
|
-
var
|
|
2645
|
+
var import_react7 = require("react");
|
|
2646
|
+
var import_core42 = require("@mantine/core");
|
|
2647
|
+
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
1731
2648
|
function UploadDropzone({
|
|
1732
2649
|
title,
|
|
1733
2650
|
description,
|
|
@@ -1737,8 +2654,8 @@ function UploadDropzone({
|
|
|
1737
2654
|
actionLabel = "Choose files",
|
|
1738
2655
|
mode = "panel"
|
|
1739
2656
|
}) {
|
|
1740
|
-
const inputRef = (0,
|
|
1741
|
-
const [dragging, setDragging] = (0,
|
|
2657
|
+
const inputRef = (0, import_react7.useRef)(null);
|
|
2658
|
+
const [dragging, setDragging] = (0, import_react7.useState)(false);
|
|
1742
2659
|
const UploadIcon = GdsIcons.Upload;
|
|
1743
2660
|
const forwardFiles = (files) => {
|
|
1744
2661
|
if (!files?.length || !onFilesSelected) {
|
|
@@ -1746,8 +2663,8 @@ function UploadDropzone({
|
|
|
1746
2663
|
}
|
|
1747
2664
|
onFilesSelected(Array.from(files));
|
|
1748
2665
|
};
|
|
1749
|
-
return /* @__PURE__ */ (0,
|
|
1750
|
-
|
|
2666
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
|
|
2667
|
+
import_core42.Box,
|
|
1751
2668
|
{
|
|
1752
2669
|
onDragOver: (event) => {
|
|
1753
2670
|
event.preventDefault();
|
|
@@ -1766,7 +2683,7 @@ function UploadDropzone({
|
|
|
1766
2683
|
background: dragging ? "var(--mantine-color-violet-light)" : "transparent"
|
|
1767
2684
|
},
|
|
1768
2685
|
children: [
|
|
1769
|
-
/* @__PURE__ */ (0,
|
|
2686
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
|
|
1770
2687
|
"input",
|
|
1771
2688
|
{
|
|
1772
2689
|
ref: inputRef,
|
|
@@ -1777,11 +2694,11 @@ function UploadDropzone({
|
|
|
1777
2694
|
onChange: (event) => forwardFiles(event.currentTarget.files)
|
|
1778
2695
|
}
|
|
1779
2696
|
),
|
|
1780
|
-
/* @__PURE__ */ (0,
|
|
1781
|
-
/* @__PURE__ */ (0,
|
|
1782
|
-
/* @__PURE__ */ (0,
|
|
1783
|
-
description ? /* @__PURE__ */ (0,
|
|
1784
|
-
/* @__PURE__ */ (0,
|
|
2697
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_core42.Stack, { align: mode === "inline" ? "flex-start" : "center", ta: mode === "inline" ? "left" : "center", gap: "sm", children: [
|
|
2698
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(UploadIcon, { size: "1.5rem" }),
|
|
2699
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core42.Text, { fw: 600, children: title }),
|
|
2700
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core42.Text, { size: "sm", c: "dimmed", children: description }) : null,
|
|
2701
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core42.Group, { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_core42.Button, { variant: "light", onClick: () => inputRef.current?.click(), children: actionLabel }) })
|
|
1785
2702
|
] })
|
|
1786
2703
|
]
|
|
1787
2704
|
}
|
|
@@ -1789,22 +2706,22 @@ function UploadDropzone({
|
|
|
1789
2706
|
}
|
|
1790
2707
|
|
|
1791
2708
|
// src/MediaField.tsx
|
|
1792
|
-
var
|
|
2709
|
+
var import_core44 = require("@mantine/core");
|
|
1793
2710
|
|
|
1794
2711
|
// src/FormField.tsx
|
|
1795
|
-
var
|
|
1796
|
-
var
|
|
2712
|
+
var import_core43 = require("@mantine/core");
|
|
2713
|
+
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
1797
2714
|
function FormField({ label, description, error, children }) {
|
|
1798
|
-
return /* @__PURE__ */ (0,
|
|
1799
|
-
typeof label === "string" ? /* @__PURE__ */ (0,
|
|
1800
|
-
description ? typeof description === "string" ? /* @__PURE__ */ (0,
|
|
2715
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core43.Box, { component: "label", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_core43.Stack, { gap: 4, children: [
|
|
2716
|
+
typeof label === "string" ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core43.Text, { size: "xs", fw: 600, c: "dimmed", children: label }) : label,
|
|
2717
|
+
description ? typeof description === "string" ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core43.Text, { size: "xs", c: "dimmed", children: description }) : description : null,
|
|
1801
2718
|
children,
|
|
1802
|
-
error ? typeof error === "string" ? /* @__PURE__ */ (0,
|
|
2719
|
+
error ? typeof error === "string" ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_core43.Text, { size: "xs", c: "red.7", children: error }) : error : null
|
|
1803
2720
|
] }) });
|
|
1804
2721
|
}
|
|
1805
2722
|
|
|
1806
2723
|
// src/MediaField.tsx
|
|
1807
|
-
var
|
|
2724
|
+
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
1808
2725
|
var stateLabels = {
|
|
1809
2726
|
empty: { label: "Empty", color: "gray" },
|
|
1810
2727
|
selected: { label: "Selected", color: "blue" },
|
|
@@ -1832,32 +2749,32 @@ function MediaField({
|
|
|
1832
2749
|
mode = "stacked"
|
|
1833
2750
|
}) {
|
|
1834
2751
|
const stateBadge = stateLabels[state];
|
|
1835
|
-
const resolvedRemoveAction = removeAction ?? (onRemove ? /* @__PURE__ */ (0,
|
|
1836
|
-
const resolvedResetAction = resetAction ?? (onReset ? /* @__PURE__ */ (0,
|
|
1837
|
-
return /* @__PURE__ */ (0,
|
|
2752
|
+
const resolvedRemoveAction = removeAction ?? (onRemove ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core44.Button, { type: "button", variant: "light", color: "red", onClick: onRemove, children: "Remove" }) : null);
|
|
2753
|
+
const resolvedResetAction = resetAction ?? (onReset ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core44.Button, { type: "button", variant: "default", onClick: onReset, children: "Reset" }) : null);
|
|
2754
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
1838
2755
|
FormField,
|
|
1839
2756
|
{
|
|
1840
2757
|
label,
|
|
1841
2758
|
description,
|
|
1842
2759
|
error,
|
|
1843
|
-
children: /* @__PURE__ */ (0,
|
|
1844
|
-
/* @__PURE__ */ (0,
|
|
1845
|
-
/* @__PURE__ */ (0,
|
|
2760
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core44.Paper, { withBorder: true, radius: "xl", p: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_core44.Stack, { gap: "md", children: [
|
|
2761
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core44.Group, { justify: "flex-end", align: "center", gap: "sm", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_core44.Group, { gap: "xs", justify: "flex-end", children: [
|
|
2762
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core44.Badge, { variant: "light", color: stateBadge.color, children: stateBadge.label }),
|
|
1846
2763
|
statusAction
|
|
1847
2764
|
] }) }),
|
|
1848
2765
|
preview ? preview : null,
|
|
1849
|
-
uploadControl || urlInput ? /* @__PURE__ */ (0,
|
|
1850
|
-
/* @__PURE__ */ (0,
|
|
1851
|
-
/* @__PURE__ */ (0,
|
|
2766
|
+
uploadControl || urlInput ? /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
|
|
2767
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core44.Divider, {}),
|
|
2768
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_core44.Stack, { gap: "sm", style: mode === "split" ? { display: "grid", gridTemplateColumns: "repeat(auto-fit, minmax(220px, 1fr))" } : void 0, children: [
|
|
1852
2769
|
uploadControl,
|
|
1853
2770
|
urlInput
|
|
1854
2771
|
] })
|
|
1855
2772
|
] }) : null,
|
|
1856
|
-
value ? /* @__PURE__ */ (0,
|
|
1857
|
-
helpText ? /* @__PURE__ */ (0,
|
|
1858
|
-
policyText ? /* @__PURE__ */ (0,
|
|
2773
|
+
value ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core44.Text, { size: "sm", c: "dimmed", style: { wordBreak: "break-all" }, children: value }) : null,
|
|
2774
|
+
helpText ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core44.Text, { size: "sm", c: "dimmed", children: helpText }) : null,
|
|
2775
|
+
policyText ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_core44.Text, { size: "sm", c: error ? "red.7" : "dimmed", children: policyText }) : null,
|
|
1859
2776
|
typeof error !== "string" && error ? error : null,
|
|
1860
|
-
resolvedRemoveAction || resolvedResetAction ? /* @__PURE__ */ (0,
|
|
2777
|
+
resolvedRemoveAction || resolvedResetAction ? /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_core44.Group, { gap: "sm", children: [
|
|
1861
2778
|
resolvedResetAction,
|
|
1862
2779
|
retryAction,
|
|
1863
2780
|
resolvedRemoveAction
|
|
@@ -1868,50 +2785,50 @@ function MediaField({
|
|
|
1868
2785
|
}
|
|
1869
2786
|
|
|
1870
2787
|
// src/MediaCard.tsx
|
|
1871
|
-
var
|
|
1872
|
-
var
|
|
2788
|
+
var import_core45 = require("@mantine/core");
|
|
2789
|
+
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
1873
2790
|
function MediaCard({ title, image, description, status, overlay, actions = [] }) {
|
|
1874
2791
|
const EyeIcon = GdsIcons.Eye;
|
|
1875
|
-
return /* @__PURE__ */ (0,
|
|
1876
|
-
/* @__PURE__ */ (0,
|
|
2792
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_core45.Card, { withBorder: true, radius: "lg", padding: "md", children: [
|
|
2793
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_core45.Card.Section, { pos: "relative", children: [
|
|
1877
2794
|
image,
|
|
1878
|
-
overlay ? /* @__PURE__ */ (0,
|
|
2795
|
+
overlay ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { style: { position: "absolute", inset: 12, display: "flex", justifyContent: "flex-end", alignItems: "flex-start" }, children: overlay }) : null
|
|
1879
2796
|
] }),
|
|
1880
|
-
/* @__PURE__ */ (0,
|
|
1881
|
-
/* @__PURE__ */ (0,
|
|
1882
|
-
/* @__PURE__ */ (0,
|
|
1883
|
-
/* @__PURE__ */ (0,
|
|
1884
|
-
description ? /* @__PURE__ */ (0,
|
|
2797
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_core45.Stack, { gap: "sm", mt: "md", children: [
|
|
2798
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_core45.Group, { justify: "space-between", align: "flex-start", children: [
|
|
2799
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_core45.Stack, { gap: 4, children: [
|
|
2800
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_core45.Title, { order: 4, children: title }),
|
|
2801
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_core45.Text, { size: "sm", c: "dimmed", lineClamp: 2, children: description }) : null
|
|
1885
2802
|
] }),
|
|
1886
|
-
status ? /* @__PURE__ */ (0,
|
|
2803
|
+
status ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_core45.Badge, { variant: "light", children: status }) : null
|
|
1887
2804
|
] }),
|
|
1888
|
-
actions.length ? /* @__PURE__ */ (0,
|
|
2805
|
+
actions.length ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_core45.Group, { justify: "flex-end", gap: "xs", children: actions.map((action) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_core45.ActionIcon, { variant: "light", "aria-label": action.label, onClick: action.onClick, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(EyeIcon, { size: "1rem" }) }, action.label)) }) : null
|
|
1889
2806
|
] })
|
|
1890
2807
|
] });
|
|
1891
2808
|
}
|
|
1892
2809
|
|
|
1893
2810
|
// src/AccessSummary.tsx
|
|
1894
|
-
var
|
|
1895
|
-
var
|
|
2811
|
+
var import_core46 = require("@mantine/core");
|
|
2812
|
+
var import_jsx_runtime47 = require("react/jsx-runtime");
|
|
1896
2813
|
function AccessSummary({ title, roles, scope, blocked = false, description }) {
|
|
1897
|
-
return /* @__PURE__ */ (0,
|
|
1898
|
-
/* @__PURE__ */ (0,
|
|
1899
|
-
/* @__PURE__ */ (0,
|
|
1900
|
-
/* @__PURE__ */ (0,
|
|
2814
|
+
return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_core46.Card, { withBorder: true, radius: "lg", padding: "lg", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_core46.Stack, { gap: "sm", children: [
|
|
2815
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_core46.Group, { justify: "space-between", align: "center", children: [
|
|
2816
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_core46.Title, { order: 4, children: title }),
|
|
2817
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_core46.Badge, { color: blocked ? "red" : "teal", variant: "light", children: blocked ? "Blocked" : "Allowed" })
|
|
1901
2818
|
] }),
|
|
1902
|
-
/* @__PURE__ */ (0,
|
|
1903
|
-
scope ? /* @__PURE__ */ (0,
|
|
2819
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_core46.Group, { gap: "xs", children: roles.map((role) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_core46.Badge, { variant: "outline", children: role }, role)) }),
|
|
2820
|
+
scope ? /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_core46.Text, { size: "sm", c: "dimmed", children: [
|
|
1904
2821
|
"Scope: ",
|
|
1905
2822
|
scope
|
|
1906
2823
|
] }) : null,
|
|
1907
|
-
description ? /* @__PURE__ */ (0,
|
|
2824
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_core46.Text, { size: "sm", children: description }) : null
|
|
1908
2825
|
] }) });
|
|
1909
2826
|
}
|
|
1910
2827
|
|
|
1911
2828
|
// src/AccessRecoveryPanel.tsx
|
|
1912
|
-
var
|
|
1913
|
-
var
|
|
1914
|
-
var
|
|
2829
|
+
var import_core47 = require("@mantine/core");
|
|
2830
|
+
var import_gds_theme4 = require("@doneisbetter/gds-theme");
|
|
2831
|
+
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
1915
2832
|
var stateBlockVariantByState = {
|
|
1916
2833
|
unauthenticated: "permission",
|
|
1917
2834
|
"expired-session": "info",
|
|
@@ -1980,7 +2897,7 @@ function ActionGroup({
|
|
|
1980
2897
|
if (actions.length === 0) {
|
|
1981
2898
|
return null;
|
|
1982
2899
|
}
|
|
1983
|
-
return /* @__PURE__ */ (0,
|
|
2900
|
+
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_core47.Group, { gap: "sm", justify: "center", wrap: "wrap", children: actions.map((actionConfig, index) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
1984
2901
|
SemanticButton,
|
|
1985
2902
|
{
|
|
1986
2903
|
action: actionConfig.action,
|
|
@@ -2006,7 +2923,7 @@ function AccessRecoveryPanel({
|
|
|
2006
2923
|
supportAction,
|
|
2007
2924
|
compact = false
|
|
2008
2925
|
}) {
|
|
2009
|
-
const { t } = (0,
|
|
2926
|
+
const { t } = (0, import_gds_theme4.useGdsTranslation)();
|
|
2010
2927
|
const defaultCopy = defaultCopyByState[state];
|
|
2011
2928
|
const defaults = defaultActionsForState(state, {
|
|
2012
2929
|
onRetry,
|
|
@@ -2014,14 +2931,14 @@ function AccessRecoveryPanel({
|
|
|
2014
2931
|
onBack,
|
|
2015
2932
|
supportAction
|
|
2016
2933
|
});
|
|
2017
|
-
return /* @__PURE__ */ (0,
|
|
2934
|
+
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
2018
2935
|
StateBlock,
|
|
2019
2936
|
{
|
|
2020
2937
|
variant: stateBlockVariantByState[state],
|
|
2021
2938
|
compact,
|
|
2022
2939
|
title: title ?? t(`gds.accessRecovery.${state}.title`, defaultCopy.title),
|
|
2023
2940
|
description: description ?? t(`gds.accessRecovery.${state}.description`, defaultCopy.description),
|
|
2024
|
-
action: /* @__PURE__ */ (0,
|
|
2941
|
+
action: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
2025
2942
|
ActionGroup,
|
|
2026
2943
|
{
|
|
2027
2944
|
primaryAction: primaryAction ?? defaults.primary,
|
|
@@ -2034,8 +2951,8 @@ function AccessRecoveryPanel({
|
|
|
2034
2951
|
}
|
|
2035
2952
|
|
|
2036
2953
|
// src/PageHeader.tsx
|
|
2037
|
-
var
|
|
2038
|
-
var
|
|
2954
|
+
var import_core48 = require("@mantine/core");
|
|
2955
|
+
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
2039
2956
|
function PageHeader({
|
|
2040
2957
|
title,
|
|
2041
2958
|
description,
|
|
@@ -2046,19 +2963,19 @@ function PageHeader({
|
|
|
2046
2963
|
}) {
|
|
2047
2964
|
const resolvedDescription = description ?? subtitle;
|
|
2048
2965
|
const eyebrowProps = eyebrowVariant === "ornamental" ? { tt: "uppercase", style: { letterSpacing: "0.12em" } } : {};
|
|
2049
|
-
return /* @__PURE__ */ (0,
|
|
2050
|
-
/* @__PURE__ */ (0,
|
|
2051
|
-
eyebrow && /* @__PURE__ */ (0,
|
|
2052
|
-
/* @__PURE__ */ (0,
|
|
2053
|
-
resolvedDescription && /* @__PURE__ */ (0,
|
|
2966
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_core48.Group, { justify: "space-between", align: "flex-start", gap: "lg", wrap: "wrap", children: [
|
|
2967
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_core48.Stack, { gap: "xs", children: [
|
|
2968
|
+
eyebrow && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core48.Text, { size: "xs", fw: 700, c: "dimmed", ...eyebrowProps, children: eyebrow }),
|
|
2969
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core48.Title, { order: 1, children: title }),
|
|
2970
|
+
resolvedDescription && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core48.Text, { c: "dimmed", maw: 720, children: resolvedDescription })
|
|
2054
2971
|
] }),
|
|
2055
|
-
actions ? /* @__PURE__ */ (0,
|
|
2972
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_core48.Box, { children: actions }) : null
|
|
2056
2973
|
] });
|
|
2057
2974
|
}
|
|
2058
2975
|
|
|
2059
2976
|
// src/FilterDrawer.tsx
|
|
2060
|
-
var
|
|
2061
|
-
var
|
|
2977
|
+
var import_core49 = require("@mantine/core");
|
|
2978
|
+
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
2062
2979
|
function FilterDrawer({
|
|
2063
2980
|
opened,
|
|
2064
2981
|
onClose,
|
|
@@ -2074,8 +2991,8 @@ function FilterDrawer({
|
|
|
2074
2991
|
}) {
|
|
2075
2992
|
const resolvedPrimaryAction = applyAction ?? primaryAction;
|
|
2076
2993
|
const resolvedSecondaryAction = resetAction ?? secondaryAction;
|
|
2077
|
-
return /* @__PURE__ */ (0,
|
|
2078
|
-
|
|
2994
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
2995
|
+
import_core49.Drawer,
|
|
2079
2996
|
{
|
|
2080
2997
|
opened,
|
|
2081
2998
|
onClose,
|
|
@@ -2083,11 +3000,11 @@ function FilterDrawer({
|
|
|
2083
3000
|
position: mode === "bottom-sheet" ? "bottom" : "right",
|
|
2084
3001
|
size: mode === "bottom-sheet" ? "auto" : "md",
|
|
2085
3002
|
radius: mode === "bottom-sheet" ? "xl" : void 0,
|
|
2086
|
-
children: /* @__PURE__ */ (0,
|
|
2087
|
-
description ? /* @__PURE__ */ (0,
|
|
3003
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_core49.Stack, { gap: "md", children: [
|
|
3004
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(import_core49.Text, { size: "sm", c: "dimmed", children: description }) : null,
|
|
2088
3005
|
children,
|
|
2089
|
-
resolvedPrimaryAction || resolvedSecondaryAction || closeAction ? /* @__PURE__ */ (0,
|
|
2090
|
-
/* @__PURE__ */ (0,
|
|
3006
|
+
resolvedPrimaryAction || resolvedSecondaryAction || closeAction ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_core49.Group, { justify: "space-between", mt: "md", children: [
|
|
3007
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_core49.Group, { gap: "sm", children: [
|
|
2091
3008
|
closeAction,
|
|
2092
3009
|
resolvedSecondaryAction
|
|
2093
3010
|
] }),
|
|
@@ -2099,8 +3016,8 @@ function FilterDrawer({
|
|
|
2099
3016
|
}
|
|
2100
3017
|
|
|
2101
3018
|
// src/PlaceholderPanel.tsx
|
|
2102
|
-
var
|
|
2103
|
-
var
|
|
3019
|
+
var import_core50 = require("@mantine/core");
|
|
3020
|
+
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
2104
3021
|
function PlaceholderPanel({
|
|
2105
3022
|
title,
|
|
2106
3023
|
description,
|
|
@@ -2110,16 +3027,16 @@ function PlaceholderPanel({
|
|
|
2110
3027
|
mode
|
|
2111
3028
|
}) {
|
|
2112
3029
|
if (mode === "live" && children) {
|
|
2113
|
-
return /* @__PURE__ */ (0,
|
|
3030
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_jsx_runtime51.Fragment, { children });
|
|
2114
3031
|
}
|
|
2115
|
-
return /* @__PURE__ */ (0,
|
|
2116
|
-
badge ? /* @__PURE__ */ (0,
|
|
2117
|
-
/* @__PURE__ */ (0,
|
|
2118
|
-
/* @__PURE__ */ (0,
|
|
2119
|
-
/* @__PURE__ */ (0,
|
|
3032
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core50.Card, { children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_core50.Stack, { gap: "md", children: [
|
|
3033
|
+
badge ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core50.Badge, { variant: "light", color: "blue", w: "fit-content", children: badge }) : null,
|
|
3034
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_core50.Stack, { gap: "xs", children: [
|
|
3035
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core50.Title, { order: 4, children: title }),
|
|
3036
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core50.Text, { c: "dimmed", children: description })
|
|
2120
3037
|
] }),
|
|
2121
|
-
footer ? /* @__PURE__ */ (0,
|
|
2122
|
-
/* @__PURE__ */ (0,
|
|
3038
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(import_core50.Text, { size: "sm", children: footer }) : null,
|
|
3039
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
2123
3040
|
StateBlock,
|
|
2124
3041
|
{
|
|
2125
3042
|
variant: "not-enough-data",
|
|
@@ -2132,8 +3049,8 @@ function PlaceholderPanel({
|
|
|
2132
3049
|
}
|
|
2133
3050
|
|
|
2134
3051
|
// src/SimpleDataTable.tsx
|
|
2135
|
-
var
|
|
2136
|
-
var
|
|
3052
|
+
var import_core51 = require("@mantine/core");
|
|
3053
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
2137
3054
|
function SimpleDataTable({
|
|
2138
3055
|
columns,
|
|
2139
3056
|
rows,
|
|
@@ -2144,23 +3061,23 @@ function SimpleDataTable({
|
|
|
2144
3061
|
getRowKey
|
|
2145
3062
|
}) {
|
|
2146
3063
|
if (error) {
|
|
2147
|
-
return /* @__PURE__ */ (0,
|
|
3064
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(StateBlock, { variant: "error", title: "Unable to load data", description: error, compact: true });
|
|
2148
3065
|
}
|
|
2149
3066
|
if (loading) {
|
|
2150
|
-
return /* @__PURE__ */ (0,
|
|
3067
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(StateBlock, { variant: "loading", title: "Loading data", description: "Please wait while the shared dataset is prepared.", compact: true });
|
|
2151
3068
|
}
|
|
2152
3069
|
if (!rows.length) {
|
|
2153
|
-
return /* @__PURE__ */ (0,
|
|
3070
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(StateBlock, { variant: "empty", title: emptyTitle, description: emptyDescription, compact: true });
|
|
2154
3071
|
}
|
|
2155
|
-
return /* @__PURE__ */ (0,
|
|
2156
|
-
/* @__PURE__ */ (0,
|
|
2157
|
-
/* @__PURE__ */ (0,
|
|
3072
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_core51.ScrollArea, { children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_core51.Table, { striped: true, highlightOnHover: true, withTableBorder: true, withColumnBorders: true, children: [
|
|
3073
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_core51.Table.Thead, { children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_core51.Table.Tr, { children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_core51.Table.Th, { children: column.header }, String(column.key))) }) }),
|
|
3074
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_core51.Table.Tbody, { children: rows.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_core51.Table.Tr, { children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(import_core51.Table.Td, { children: column.render ? column.render(row) : String(row[column.key] ?? "") }, String(column.key))) }, getRowKey ? getRowKey(row, index) : index)) })
|
|
2158
3075
|
] }) });
|
|
2159
3076
|
}
|
|
2160
3077
|
|
|
2161
3078
|
// src/StatsSection.tsx
|
|
2162
|
-
var
|
|
2163
|
-
var
|
|
3079
|
+
var import_core52 = require("@mantine/core");
|
|
3080
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
2164
3081
|
function StatsSection({
|
|
2165
3082
|
title,
|
|
2166
3083
|
loading = false,
|
|
@@ -2172,11 +3089,11 @@ function StatsSection({
|
|
|
2172
3089
|
}) {
|
|
2173
3090
|
let content = children;
|
|
2174
3091
|
if (error) {
|
|
2175
|
-
content = /* @__PURE__ */ (0,
|
|
3092
|
+
content = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(StateBlock, { variant: "error", title: "Unable to load statistics", description: error, compact: true });
|
|
2176
3093
|
} else if (loading) {
|
|
2177
|
-
content = /* @__PURE__ */ (0,
|
|
3094
|
+
content = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(StateBlock, { variant: "loading", title: "Loading statistics", description: "This shared data surface is still synchronizing.", compact: true });
|
|
2178
3095
|
} else if (belowThreshold) {
|
|
2179
|
-
content = /* @__PURE__ */ (0,
|
|
3096
|
+
content = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
2180
3097
|
StateBlock,
|
|
2181
3098
|
{
|
|
2182
3099
|
variant: "not-enough-data",
|
|
@@ -2186,10 +3103,10 @@ function StatsSection({
|
|
|
2186
3103
|
}
|
|
2187
3104
|
);
|
|
2188
3105
|
} else if (placeholder) {
|
|
2189
|
-
content = /* @__PURE__ */ (0,
|
|
3106
|
+
content = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(PlaceholderPanel, { ...placeholder, mode: "placeholder" });
|
|
2190
3107
|
}
|
|
2191
|
-
return /* @__PURE__ */ (0,
|
|
2192
|
-
/* @__PURE__ */ (0,
|
|
3108
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_core52.Stack, { gap: "md", children: [
|
|
3109
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(import_core52.Title, { order: 3, children: title }),
|
|
2193
3110
|
content
|
|
2194
3111
|
] });
|
|
2195
3112
|
}
|
|
@@ -3501,6 +4418,7 @@ function getGdsMessages(locale) {
|
|
|
3501
4418
|
AccentPanel,
|
|
3502
4419
|
AccessRecoveryPanel,
|
|
3503
4420
|
AccessSummary,
|
|
4421
|
+
ActionBar,
|
|
3504
4422
|
ArticleShell,
|
|
3505
4423
|
AuthShell,
|
|
3506
4424
|
BrowseSurface,
|
|
@@ -3510,6 +4428,8 @@ function getGdsMessages(locale) {
|
|
|
3510
4428
|
ConsumerSection,
|
|
3511
4429
|
CtaButtonGroup,
|
|
3512
4430
|
DataToolbar,
|
|
4431
|
+
DetailProfileShell,
|
|
4432
|
+
DiscoveryShell,
|
|
3513
4433
|
DocsCodeBlock,
|
|
3514
4434
|
DocsPageShell,
|
|
3515
4435
|
EditorialCard,
|
|
@@ -3517,31 +4437,43 @@ function getGdsMessages(locale) {
|
|
|
3517
4437
|
EmptyState,
|
|
3518
4438
|
FeatureBand,
|
|
3519
4439
|
FilterDrawer,
|
|
4440
|
+
FoodMenuSection,
|
|
3520
4441
|
FormField,
|
|
3521
4442
|
GameBoardTile,
|
|
3522
4443
|
GdsIcons,
|
|
3523
4444
|
GdsVocabulary,
|
|
4445
|
+
ListingCard,
|
|
4446
|
+
MapPanel,
|
|
3524
4447
|
MediaCard,
|
|
3525
4448
|
MediaField,
|
|
3526
4449
|
MetricCard,
|
|
3527
4450
|
PageHeader,
|
|
3528
4451
|
PlaceholderPanel,
|
|
4452
|
+
PlaybackSurface,
|
|
3529
4453
|
ProductCard,
|
|
3530
4454
|
ProgressCard,
|
|
3531
4455
|
PublicBrandFooter,
|
|
4456
|
+
PublicFlowShell,
|
|
4457
|
+
PublicFoodCard,
|
|
3532
4458
|
PublicNav,
|
|
3533
4459
|
PublicProductCard,
|
|
3534
4460
|
PublicShell,
|
|
3535
4461
|
PublicSiteFooter,
|
|
3536
4462
|
SectionPanel,
|
|
3537
4463
|
SemanticButton,
|
|
4464
|
+
ShareButtonGroup,
|
|
4465
|
+
SidebarNav,
|
|
4466
|
+
SidebarNavItem,
|
|
4467
|
+
SidebarNavSection,
|
|
3538
4468
|
SimpleDataTable,
|
|
4469
|
+
SocialAuthButtons,
|
|
3539
4470
|
StateBlock,
|
|
3540
4471
|
StatsSection,
|
|
3541
4472
|
StatusBadge,
|
|
3542
4473
|
ThemeToggle,
|
|
3543
4474
|
UploadDropzone,
|
|
3544
4475
|
ar,
|
|
4476
|
+
createGdsVocabularyPack,
|
|
3545
4477
|
de,
|
|
3546
4478
|
en,
|
|
3547
4479
|
es,
|
|
@@ -3553,6 +4485,8 @@ function getGdsMessages(locale) {
|
|
|
3553
4485
|
he,
|
|
3554
4486
|
hu,
|
|
3555
4487
|
it,
|
|
4488
|
+
mergeGdsVocabularyPacks,
|
|
3556
4489
|
resolveAccentPanelStyles,
|
|
4490
|
+
resolveSemanticActionConfig,
|
|
3557
4491
|
ru
|
|
3558
4492
|
});
|