@burdenoff/microfe-ggnomad 2026.705.5 → 2026.705.6

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.
@@ -6,99 +6,107 @@ import { DetailHero as i } from "../components/DetailHero.js";
6
6
  import { useGGNomad as a } from "../providers/GGNomadProvider.js";
7
7
  import { joinPath as o } from "../utils/navigation.js";
8
8
  import { BookingPanel as s } from "../components/BookingPanel.js";
9
+ import { ReviewsSection as c } from "../components/ReviewsSection.js";
9
10
  import "../components/index.js";
10
- import { Activity as c, Compass as l, ShieldCheck as u } from "lucide-react";
11
- import { useI18n as d } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
12
- import { useNavigate as f, useParams as p } from "react-router-dom";
13
- import { useQuery as m } from "@apollo/client/react";
14
- import { GlassCard as h, IllustratedEmptyState as g, NextSteps as _, PagePurpose as v } from "@burdenoff/fe-libs/ui";
15
- import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
11
+ import { Activity as l, Compass as u, ShieldCheck as d } from "lucide-react";
12
+ import { useI18n as f } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
13
+ import { useNavigate as p, useParams as m } from "react-router-dom";
14
+ import { useQuery as h } from "@apollo/client/react";
15
+ import { GlassCard as g, IllustratedEmptyState as _, NextSteps as v, PagePurpose as y } from "@burdenoff/fe-libs/ui";
16
+ import { Fragment as b, jsx as x, jsxs as S } from "react/jsx-runtime";
16
17
  //#region src/ggnomad/pages/ActivityDetailsPage.tsx
17
- function S() {
18
- let { t: S } = d(), C = f(), { basePath: w = "/" } = a(), { id: T = "" } = p(), { data: E } = m(e, {
19
- variables: { id: T },
20
- skip: !T
21
- }), D = E?.ggnomadActivity;
22
- return /* @__PURE__ */ b(t, {
23
- title: D?.name ?? S("ggnomad.activity.fallbackTitle", "Activity details"),
24
- subtitle: S("ggnomad.activity.subtitle", "Safety, inclusions and participation details"),
25
- children: D ? /* @__PURE__ */ x(y, { children: [
26
- /* @__PURE__ */ b(i, {
27
- image: D.images?.[0],
28
- alt: D.name
18
+ function C() {
19
+ let { t: C } = f(), w = p(), { basePath: T = "/" } = a(), { id: E = "" } = m(), { data: D } = h(e, {
20
+ variables: { id: E },
21
+ skip: !E
22
+ }), O = D?.ggnomadActivity;
23
+ return /* @__PURE__ */ x(t, {
24
+ title: O?.name ?? C("ggnomad.activity.fallbackTitle", "Activity details"),
25
+ subtitle: C("ggnomad.activity.subtitle", "Safety, inclusions and participation details"),
26
+ children: O ? /* @__PURE__ */ S(b, { children: [
27
+ /* @__PURE__ */ x(i, {
28
+ image: O.images?.[0],
29
+ alt: O.name
29
30
  }),
30
- /* @__PURE__ */ b(v, {
31
- icon: /* @__PURE__ */ b(c, { className: "size-4" }),
32
- children: S("ggnomad.activity.purpose", "Everything you need to know before joining this activity — its category, duration, group size, price and the safety policy that applies — so you can be confident it fits your group before you book.")
31
+ /* @__PURE__ */ x(y, {
32
+ icon: /* @__PURE__ */ x(l, { className: "size-4" }),
33
+ children: C("ggnomad.activity.purpose", "Everything you need to know before joining this activity — its category, duration, group size, price and the safety policy that applies — so you can be confident it fits your group before you book.")
33
34
  }),
34
- /* @__PURE__ */ b(_, {
35
+ /* @__PURE__ */ x(v, {
35
36
  storageKey: "ggnomad-activity-detail",
36
37
  steps: [{
37
38
  id: "browse",
38
- label: S("ggnomad.activity.next.browse", "Explore more experiences"),
39
- description: S("ggnomad.activity.next.browseDesc", "Return to Tourism to compare tours and activities."),
40
- icon: /* @__PURE__ */ b(l, { className: "size-4" }),
41
- onClick: () => C(o(w, "tourism"))
39
+ label: C("ggnomad.activity.next.browse", "Explore more experiences"),
40
+ description: C("ggnomad.activity.next.browseDesc", "Return to Tourism to compare tours and activities."),
41
+ icon: /* @__PURE__ */ x(u, { className: "size-4" }),
42
+ onClick: () => w(o(T, "tourism"))
42
43
  }]
43
44
  }),
44
- /* @__PURE__ */ x("div", {
45
+ /* @__PURE__ */ S("div", {
45
46
  className: "grid gap-4 lg:grid-cols-3",
46
- children: [/* @__PURE__ */ x("div", {
47
+ children: [/* @__PURE__ */ S("div", {
47
48
  className: "lg:col-span-2 space-y-4",
48
- children: [/* @__PURE__ */ x(h, {
49
- treatment: "glass",
50
- glow: !0,
51
- className: "border-border-seam p-5",
52
- children: [/* @__PURE__ */ b("h2", {
53
- className: "mb-4 text-lg font-medium tracking-tight text-text-primary",
54
- children: S("ggnomad.activity.details", "Details")
55
- }), /* @__PURE__ */ x("dl", {
56
- className: "space-y-2 text-sm",
57
- children: [
58
- /* @__PURE__ */ b(r, {
59
- label: S("ggnomad.activity.category", "Category"),
60
- value: D.category
61
- }),
62
- /* @__PURE__ */ b(r, {
63
- label: S("ggnomad.activity.duration", "Duration"),
64
- value: D.duration
65
- }),
66
- /* @__PURE__ */ b(r, {
67
- label: S("ggnomad.activity.maxParticipants", "Max participants"),
68
- value: String(D.maxParticipants)
69
- }),
70
- /* @__PURE__ */ b(r, {
71
- label: S("ggnomad.activity.price", "Price"),
72
- value: `${D.currency} ${Number(D.price).toFixed(2)}`
73
- })
74
- ]
75
- })]
76
- }), /* @__PURE__ */ b(n, {
77
- title: S("ggnomad.activity.safety", "Safety information"),
78
- children: /* @__PURE__ */ x("div", {
79
- className: "flex items-start gap-2 text-sm text-text-primary",
80
- children: [/* @__PURE__ */ b(u, {
81
- className: "mt-0.5 size-4 flex-shrink-0 text-status-success-text",
82
- "aria-hidden": "true"
83
- }), /* @__PURE__ */ b("p", { children: D.safetyInfo ?? S("ggnomad.activity.defaultSafety", "Standard provider safety policy applies.") })]
49
+ children: [
50
+ /* @__PURE__ */ S(g, {
51
+ treatment: "glass",
52
+ glow: !0,
53
+ className: "border-border-seam p-5",
54
+ children: [/* @__PURE__ */ x("h2", {
55
+ className: "mb-4 text-lg font-medium tracking-tight text-text-primary",
56
+ children: C("ggnomad.activity.details", "Details")
57
+ }), /* @__PURE__ */ S("dl", {
58
+ className: "space-y-2 text-sm",
59
+ children: [
60
+ /* @__PURE__ */ x(r, {
61
+ label: C("ggnomad.activity.category", "Category"),
62
+ value: O.category
63
+ }),
64
+ /* @__PURE__ */ x(r, {
65
+ label: C("ggnomad.activity.duration", "Duration"),
66
+ value: O.duration
67
+ }),
68
+ /* @__PURE__ */ x(r, {
69
+ label: C("ggnomad.activity.maxParticipants", "Max participants"),
70
+ value: String(O.maxParticipants)
71
+ }),
72
+ /* @__PURE__ */ x(r, {
73
+ label: C("ggnomad.activity.price", "Price"),
74
+ value: `${O.currency} ${Number(O.price).toFixed(2)}`
75
+ })
76
+ ]
77
+ })]
78
+ }),
79
+ /* @__PURE__ */ x(n, {
80
+ title: C("ggnomad.activity.safety", "Safety information"),
81
+ children: /* @__PURE__ */ S("div", {
82
+ className: "flex items-start gap-2 text-sm text-text-primary",
83
+ children: [/* @__PURE__ */ x(d, {
84
+ className: "mt-0.5 size-4 flex-shrink-0 text-status-success-text",
85
+ "aria-hidden": "true"
86
+ }), /* @__PURE__ */ x("p", { children: O.safetyInfo ?? C("ggnomad.activity.defaultSafety", "Standard provider safety policy applies.") })]
87
+ })
88
+ }),
89
+ /* @__PURE__ */ x(c, {
90
+ targetType: "ACTIVITY",
91
+ targetId: O.id ?? E
84
92
  })
85
- })]
86
- }), /* @__PURE__ */ b("div", { children: /* @__PURE__ */ b(s, {
93
+ ]
94
+ }), /* @__PURE__ */ x("div", { children: /* @__PURE__ */ x(s, {
87
95
  bookingType: "ACTIVITY",
88
- itemId: D.id ?? T,
89
- itemName: D.name,
90
- unitPrice: D.price ?? 0,
91
- currency: D.currency ?? "USD"
96
+ itemId: O.id ?? E,
97
+ itemName: O.name,
98
+ unitPrice: O.price ?? 0,
99
+ currency: O.currency ?? "USD"
92
100
  }) })]
93
101
  })
94
- ] }) : /* @__PURE__ */ b(g, {
102
+ ] }) : /* @__PURE__ */ x(_, {
95
103
  illustration: "empty-data",
96
- title: S("ggnomad.activity.notFoundTitle", "No activity found"),
97
- description: S("ggnomad.activity.notFoundDescription", "This activity is unavailable or may have been removed.")
104
+ title: C("ggnomad.activity.notFoundTitle", "No activity found"),
105
+ description: C("ggnomad.activity.notFoundDescription", "This activity is unavailable or may have been removed.")
98
106
  })
99
107
  });
100
108
  }
101
109
  //#endregion
102
- export { S as ActivityDetailsPage };
110
+ export { C as ActivityDetailsPage };
103
111
 
104
112
  //# sourceMappingURL=ActivityDetailsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActivityDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/ActivityDetailsPage.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Activity, Compass, ShieldCheck } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_ACTIVITY_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport { DetailRow, SectionCard, DetailHero, BookingPanel } from '../components';\n\nexport function ActivityDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const { data } = useQuery(\n GGNOMAD_ACTIVITY_QUERY as TypedDocumentNode<\n {\n ggnomadActivity: {\n id: string;\n name: string;\n category: string;\n duration: string;\n maxParticipants: number;\n currency: string;\n price: number;\n safetyInfo?: string;\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const activity = data?.ggnomadActivity;\n\n return (\n <PageShell\n title={activity?.name ?? t('ggnomad.activity.fallbackTitle', 'Activity details')}\n subtitle={t('ggnomad.activity.subtitle', 'Safety, inclusions and participation details')}\n >\n {!activity ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.activity.notFoundTitle', 'No activity found')}\n description={t(\n 'ggnomad.activity.notFoundDescription',\n 'This activity is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={activity.images?.[0]} alt={activity.name} />\n <PagePurpose icon={<Activity className=\"size-4\" />}>\n {t(\n 'ggnomad.activity.purpose',\n 'Everything you need to know before joining this activity — its category, duration, group size, price and the safety policy that applies — so you can be confident it fits your group before you book.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-activity-detail\"\n steps={[\n {\n id: 'browse',\n label: t('ggnomad.activity.next.browse', 'Explore more experiences'),\n description: t(\n 'ggnomad.activity.next.browseDesc',\n 'Return to Tourism to compare tours and activities.'\n ),\n icon: <Compass className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'tourism')),\n },\n ]}\n />\n\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5\">\n <h2 className=\"mb-4 text-lg font-medium tracking-tight text-text-primary\">\n {t('ggnomad.activity.details', 'Details')}\n </h2>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow\n label={t('ggnomad.activity.category', 'Category')}\n value={activity.category}\n />\n <DetailRow\n label={t('ggnomad.activity.duration', 'Duration')}\n value={activity.duration}\n />\n <DetailRow\n label={t('ggnomad.activity.maxParticipants', 'Max participants')}\n value={String(activity.maxParticipants)}\n />\n <DetailRow\n label={t('ggnomad.activity.price', 'Price')}\n value={`${activity.currency} ${Number(activity.price).toFixed(2)}`}\n />\n </dl>\n </GlassCard>\n <SectionCard title={t('ggnomad.activity.safety', 'Safety information')}>\n <div className=\"flex items-start gap-2 text-sm text-text-primary\">\n <ShieldCheck\n className=\"mt-0.5 size-4 flex-shrink-0 text-status-success-text\"\n aria-hidden=\"true\"\n />\n <p>\n {activity.safetyInfo ??\n t(\n 'ggnomad.activity.defaultSafety',\n 'Standard provider safety policy applies.'\n )}\n </p>\n </div>\n </SectionCard>\n </div>\n <div>\n <BookingPanel\n bookingType=\"ACTIVITY\"\n itemId={activity.id ?? id}\n itemName={activity.name}\n unitPrice={activity.price ?? 0}\n currency={activity.currency ?? 'USD'}\n />\n </div>\n </div>\n </>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAaA,SAAgB,IAAsB;CACpC,IAAM,EAAE,SAAM,GAAS,EACjB,IAAW,GAAa,EACxB,EAAE,cAAW,QAAQ,GAAY,EACjC,EAAE,QAAK,OAAO,GAAW,EACzB,EAAE,YAAS,EACf,GAgBA;EAAE,WAAW,EAAE,OAAI;EAAE,MAAM,CAAC;EAAI,CACjC,EACK,IAAW,GAAM;AAEvB,QACE,kBAAC,GAAD;EACE,OAAO,GAAU,QAAQ,EAAE,kCAAkC,mBAAmB;EAChF,UAAU,EAAE,6BAA6B,+CAA+C;YAEtF,IAUA,kBAAA,GAAA,EAAA,UAAA;GACE,kBAAC,GAAD;IAAY,OAAO,EAAS,SAAS;IAAI,KAAK,EAAS;IAAQ,CAAA;GAC/D,kBAAC,GAAD;IAAa,MAAM,kBAAC,GAAD,EAAU,WAAU,UAAW,CAAA;cAC/C,EACC,4BACA,wMACD;IACW,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO,CACL;KACE,IAAI;KACJ,OAAO,EAAE,gCAAgC,2BAA2B;KACpE,aAAa,EACX,oCACA,qDACD;KACD,MAAM,kBAAC,GAAD,EAAS,WAAU,UAAW,CAAA;KACpC,eAAe,EAAS,EAAS,GAAU,UAAU,CAAC;KACvD,CACF;IACD,CAAA;GAEF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAW,WAAU;MAAQ,MAAA;MAAK,WAAU;gBAA5C,CACE,kBAAC,MAAD;OAAI,WAAU;iBACX,EAAE,4BAA4B,UAAU;OACtC,CAAA,EACL,kBAAC,MAAD;OAAI,WAAU;iBAAd;QACE,kBAAC,GAAD;SACE,OAAO,EAAE,6BAA6B,WAAW;SACjD,OAAO,EAAS;SAChB,CAAA;QACF,kBAAC,GAAD;SACE,OAAO,EAAE,6BAA6B,WAAW;SACjD,OAAO,EAAS;SAChB,CAAA;QACF,kBAAC,GAAD;SACE,OAAO,EAAE,oCAAoC,mBAAmB;SAChE,OAAO,OAAO,EAAS,gBAAgB;SACvC,CAAA;QACF,kBAAC,GAAD;SACE,OAAO,EAAE,0BAA0B,QAAQ;SAC3C,OAAO,GAAG,EAAS,SAAS,GAAG,OAAO,EAAS,MAAM,CAAC,QAAQ,EAAE;SAChE,CAAA;QACC;SACK;SACZ,kBAAC,GAAD;MAAa,OAAO,EAAE,2BAA2B,qBAAqB;gBACpE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,GAAD;QACE,WAAU;QACV,eAAY;QACZ,CAAA,EACF,kBAAC,KAAD,EAAA,UACG,EAAS,cACR,EACE,kCACA,2CACD,EACD,CAAA,CACA;;MACM,CAAA,CACV;QACN,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;KACE,aAAY;KACZ,QAAQ,EAAS,MAAM;KACvB,UAAU,EAAS;KACnB,WAAW,EAAS,SAAS;KAC7B,UAAU,EAAS,YAAY;KAC/B,CAAA,EACE,CAAA,CACF;;GACL,EAAA,CAAA,GArFH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,kCAAkC,oBAAoB;GAC/D,aAAa,EACX,wCACA,yDACD;GACD,CAAA;EAgFM,CAAA"}
1
+ {"version":3,"file":"ActivityDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/ActivityDetailsPage.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Activity, Compass, ShieldCheck } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_ACTIVITY_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport { DetailRow, SectionCard, DetailHero, BookingPanel, ReviewsSection } from '../components';\n\nexport function ActivityDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const { data } = useQuery(\n GGNOMAD_ACTIVITY_QUERY as TypedDocumentNode<\n {\n ggnomadActivity: {\n id: string;\n name: string;\n category: string;\n duration: string;\n maxParticipants: number;\n currency: string;\n price: number;\n safetyInfo?: string;\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const activity = data?.ggnomadActivity;\n\n return (\n <PageShell\n title={activity?.name ?? t('ggnomad.activity.fallbackTitle', 'Activity details')}\n subtitle={t('ggnomad.activity.subtitle', 'Safety, inclusions and participation details')}\n >\n {!activity ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.activity.notFoundTitle', 'No activity found')}\n description={t(\n 'ggnomad.activity.notFoundDescription',\n 'This activity is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={activity.images?.[0]} alt={activity.name} />\n <PagePurpose icon={<Activity className=\"size-4\" />}>\n {t(\n 'ggnomad.activity.purpose',\n 'Everything you need to know before joining this activity — its category, duration, group size, price and the safety policy that applies — so you can be confident it fits your group before you book.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-activity-detail\"\n steps={[\n {\n id: 'browse',\n label: t('ggnomad.activity.next.browse', 'Explore more experiences'),\n description: t(\n 'ggnomad.activity.next.browseDesc',\n 'Return to Tourism to compare tours and activities.'\n ),\n icon: <Compass className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'tourism')),\n },\n ]}\n />\n\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5\">\n <h2 className=\"mb-4 text-lg font-medium tracking-tight text-text-primary\">\n {t('ggnomad.activity.details', 'Details')}\n </h2>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow\n label={t('ggnomad.activity.category', 'Category')}\n value={activity.category}\n />\n <DetailRow\n label={t('ggnomad.activity.duration', 'Duration')}\n value={activity.duration}\n />\n <DetailRow\n label={t('ggnomad.activity.maxParticipants', 'Max participants')}\n value={String(activity.maxParticipants)}\n />\n <DetailRow\n label={t('ggnomad.activity.price', 'Price')}\n value={`${activity.currency} ${Number(activity.price).toFixed(2)}`}\n />\n </dl>\n </GlassCard>\n <SectionCard title={t('ggnomad.activity.safety', 'Safety information')}>\n <div className=\"flex items-start gap-2 text-sm text-text-primary\">\n <ShieldCheck\n className=\"mt-0.5 size-4 flex-shrink-0 text-status-success-text\"\n aria-hidden=\"true\"\n />\n <p>\n {activity.safetyInfo ??\n t(\n 'ggnomad.activity.defaultSafety',\n 'Standard provider safety policy applies.'\n )}\n </p>\n </div>\n </SectionCard>\n <ReviewsSection targetType=\"ACTIVITY\" targetId={activity.id ?? id} />\n </div>\n <div>\n <BookingPanel\n bookingType=\"ACTIVITY\"\n itemId={activity.id ?? id}\n itemName={activity.name}\n unitPrice={activity.price ?? 0}\n currency={activity.currency ?? 'USD'}\n />\n </div>\n </div>\n </>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAaA,SAAgB,IAAsB;CACpC,IAAM,EAAE,SAAM,GAAS,EACjB,IAAW,GAAa,EACxB,EAAE,cAAW,QAAQ,GAAY,EACjC,EAAE,QAAK,OAAO,GAAW,EACzB,EAAE,YAAS,EACf,GAgBA;EAAE,WAAW,EAAE,OAAI;EAAE,MAAM,CAAC;EAAI,CACjC,EACK,IAAW,GAAM;AAEvB,QACE,kBAAC,GAAD;EACE,OAAO,GAAU,QAAQ,EAAE,kCAAkC,mBAAmB;EAChF,UAAU,EAAE,6BAA6B,+CAA+C;YAEtF,IAUA,kBAAA,GAAA,EAAA,UAAA;GACE,kBAAC,GAAD;IAAY,OAAO,EAAS,SAAS;IAAI,KAAK,EAAS;IAAQ,CAAA;GAC/D,kBAAC,GAAD;IAAa,MAAM,kBAAC,GAAD,EAAU,WAAU,UAAW,CAAA;cAC/C,EACC,4BACA,wMACD;IACW,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO,CACL;KACE,IAAI;KACJ,OAAO,EAAE,gCAAgC,2BAA2B;KACpE,aAAa,EACX,oCACA,qDACD;KACD,MAAM,kBAAC,GAAD,EAAS,WAAU,UAAW,CAAA;KACpC,eAAe,EAAS,EAAS,GAAU,UAAU,CAAC;KACvD,CACF;IACD,CAAA;GAEF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD;OAAW,WAAU;OAAQ,MAAA;OAAK,WAAU;iBAA5C,CACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAE,4BAA4B,UAAU;QACtC,CAAA,EACL,kBAAC,MAAD;QAAI,WAAU;kBAAd;SACE,kBAAC,GAAD;UACE,OAAO,EAAE,6BAA6B,WAAW;UACjD,OAAO,EAAS;UAChB,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,6BAA6B,WAAW;UACjD,OAAO,EAAS;UAChB,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,oCAAoC,mBAAmB;UAChE,OAAO,OAAO,EAAS,gBAAgB;UACvC,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,0BAA0B,QAAQ;UAC3C,OAAO,GAAG,EAAS,SAAS,GAAG,OAAO,EAAS,MAAM,CAAC,QAAQ,EAAE;UAChE,CAAA;SACC;UACK;;MACZ,kBAAC,GAAD;OAAa,OAAO,EAAE,2BAA2B,qBAAqB;iBACpE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD;SACE,WAAU;SACV,eAAY;SACZ,CAAA,EACF,kBAAC,KAAD,EAAA,UACG,EAAS,cACR,EACE,kCACA,2CACD,EACD,CAAA,CACA;;OACM,CAAA;MACd,kBAAC,GAAD;OAAgB,YAAW;OAAW,UAAU,EAAS,MAAM;OAAM,CAAA;MACjE;QACN,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;KACE,aAAY;KACZ,QAAQ,EAAS,MAAM;KACvB,UAAU,EAAS;KACnB,WAAW,EAAS,SAAS;KAC7B,UAAU,EAAS,YAAY;KAC/B,CAAA,EACE,CAAA,CACF;;GACL,EAAA,CAAA,GAtFH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,kCAAkC,oBAAoB;GAC/D,aAAa,EACX,wCACA,yDACD;GACD,CAAA;EAiFM,CAAA"}
@@ -6,103 +6,111 @@ import { DetailHero as i } from "../components/DetailHero.js";
6
6
  import { useGGNomad as a } from "../providers/GGNomadProvider.js";
7
7
  import { joinPath as o } from "../utils/navigation.js";
8
8
  import { BookingPanel as s } from "../components/BookingPanel.js";
9
+ import { ReviewsSection as c } from "../components/ReviewsSection.js";
9
10
  import "../components/index.js";
10
- import { Mic2 as c, Ticket as l } from "lucide-react";
11
- import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
12
- import { useNavigate as d, useParams as f } from "react-router-dom";
13
- import { useQuery as p } from "@apollo/client/react";
14
- import { GlassCard as m, IllustratedEmptyState as h, NextSteps as g, PagePurpose as _ } from "@burdenoff/fe-libs/ui";
15
- import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
11
+ import { Mic2 as l, Ticket as u } from "lucide-react";
12
+ import { useI18n as d } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
13
+ import { useNavigate as f, useParams as p } from "react-router-dom";
14
+ import { useQuery as m } from "@apollo/client/react";
15
+ import { GlassCard as h, IllustratedEmptyState as g, NextSteps as _, PagePurpose as v } from "@burdenoff/fe-libs/ui";
16
+ import { Fragment as y, jsx as b, jsxs as x } from "react/jsx-runtime";
16
17
  //#region src/ggnomad/pages/EventDetailsPage.tsx
17
- function x() {
18
- let { t: x } = u(), S = d(), { basePath: C = "/" } = a(), { id: w = "" } = f(), { data: T } = p(e, {
19
- variables: { id: w },
20
- skip: !w
21
- }), E = T?.ggnomadEvent;
22
- return /* @__PURE__ */ y(t, {
23
- title: E?.name ?? x("ggnomad.event.fallbackTitle", "Event details"),
24
- subtitle: x("ggnomad.event.subtitle", "Live event details, venue and lineup"),
25
- children: E ? /* @__PURE__ */ b(v, { children: [
26
- /* @__PURE__ */ y(i, {
27
- image: E.images?.[0],
28
- alt: E.name
18
+ function S() {
19
+ let { t: S } = d(), C = f(), { basePath: w = "/" } = a(), { id: T = "" } = p(), { data: E } = m(e, {
20
+ variables: { id: T },
21
+ skip: !T
22
+ }), D = E?.ggnomadEvent;
23
+ return /* @__PURE__ */ b(t, {
24
+ title: D?.name ?? S("ggnomad.event.fallbackTitle", "Event details"),
25
+ subtitle: S("ggnomad.event.subtitle", "Live event details, venue and lineup"),
26
+ children: D ? /* @__PURE__ */ x(y, { children: [
27
+ /* @__PURE__ */ b(i, {
28
+ image: D.images?.[0],
29
+ alt: D.name
29
30
  }),
30
- /* @__PURE__ */ y(_, {
31
- icon: /* @__PURE__ */ y(l, { className: "size-4" }),
32
- children: x("ggnomad.event.purpose", "All the details for this live event in one place — category, start and end times, ticket price and the full lineup — so you can decide and book tickets before they sell out.")
31
+ /* @__PURE__ */ b(v, {
32
+ icon: /* @__PURE__ */ b(u, { className: "size-4" }),
33
+ children: S("ggnomad.event.purpose", "All the details for this live event in one place — category, start and end times, ticket price and the full lineup — so you can decide and book tickets before they sell out.")
33
34
  }),
34
- /* @__PURE__ */ y(g, {
35
+ /* @__PURE__ */ b(_, {
35
36
  storageKey: "ggnomad-event-detail",
36
37
  steps: [{
37
38
  id: "browse",
38
- label: x("ggnomad.event.next.browse", "See more events"),
39
- description: x("ggnomad.event.next.browseDesc", "Return to Entertainment for other live experiences."),
40
- icon: /* @__PURE__ */ y(l, { className: "size-4" }),
41
- onClick: () => S(o(C, "entertainment"))
39
+ label: S("ggnomad.event.next.browse", "See more events"),
40
+ description: S("ggnomad.event.next.browseDesc", "Return to Entertainment for other live experiences."),
41
+ icon: /* @__PURE__ */ b(u, { className: "size-4" }),
42
+ onClick: () => C(o(w, "entertainment"))
42
43
  }]
43
44
  }),
44
- /* @__PURE__ */ b("div", {
45
+ /* @__PURE__ */ x("div", {
45
46
  className: "grid gap-4 lg:grid-cols-3",
46
- children: [/* @__PURE__ */ b("div", {
47
+ children: [/* @__PURE__ */ x("div", {
47
48
  className: "lg:col-span-2 space-y-4",
48
- children: [/* @__PURE__ */ b(m, {
49
- treatment: "glass",
50
- glow: !0,
51
- className: "border-border-seam p-5",
52
- children: [/* @__PURE__ */ y("h2", {
53
- className: "mb-4 text-lg font-medium tracking-tight text-text-primary",
54
- children: x("ggnomad.event.details", "Details")
55
- }), /* @__PURE__ */ b("dl", {
56
- className: "space-y-2 text-sm",
57
- children: [
58
- /* @__PURE__ */ y(r, {
59
- label: x("ggnomad.event.category", "Category"),
60
- value: E.category
61
- }),
62
- /* @__PURE__ */ y(r, {
63
- label: x("ggnomad.event.starts", "Starts"),
64
- value: new Date(E.startsAt).toLocaleString()
65
- }),
66
- /* @__PURE__ */ y(r, {
67
- label: x("ggnomad.event.ends", "Ends"),
68
- value: E.endsAt ? new Date(E.endsAt).toLocaleString() : x("ggnomad.event.na", "N/A")
69
- }),
70
- /* @__PURE__ */ y(r, {
71
- label: x("ggnomad.event.price", "Price"),
72
- value: `${E.currency} ${Number(E.price).toFixed(2)}`
73
- })
74
- ]
75
- })]
76
- }), /* @__PURE__ */ y(n, {
77
- title: x("ggnomad.event.performers", "Performers"),
78
- children: /* @__PURE__ */ y("ul", {
79
- className: "space-y-2 text-sm",
80
- children: (E.performers ?? []).map((e) => /* @__PURE__ */ b("li", {
81
- className: "flex items-start gap-2 text-text-primary",
82
- children: [/* @__PURE__ */ y(c, {
83
- className: "mt-0.5 size-4 flex-shrink-0 text-action-primary-bg",
84
- "aria-hidden": "true"
85
- }), e]
86
- }, e))
49
+ children: [
50
+ /* @__PURE__ */ x(h, {
51
+ treatment: "glass",
52
+ glow: !0,
53
+ className: "border-border-seam p-5",
54
+ children: [/* @__PURE__ */ b("h2", {
55
+ className: "mb-4 text-lg font-medium tracking-tight text-text-primary",
56
+ children: S("ggnomad.event.details", "Details")
57
+ }), /* @__PURE__ */ x("dl", {
58
+ className: "space-y-2 text-sm",
59
+ children: [
60
+ /* @__PURE__ */ b(r, {
61
+ label: S("ggnomad.event.category", "Category"),
62
+ value: D.category
63
+ }),
64
+ /* @__PURE__ */ b(r, {
65
+ label: S("ggnomad.event.starts", "Starts"),
66
+ value: new Date(D.startsAt).toLocaleString()
67
+ }),
68
+ /* @__PURE__ */ b(r, {
69
+ label: S("ggnomad.event.ends", "Ends"),
70
+ value: D.endsAt ? new Date(D.endsAt).toLocaleString() : S("ggnomad.event.na", "N/A")
71
+ }),
72
+ /* @__PURE__ */ b(r, {
73
+ label: S("ggnomad.event.price", "Price"),
74
+ value: `${D.currency} ${Number(D.price).toFixed(2)}`
75
+ })
76
+ ]
77
+ })]
78
+ }),
79
+ /* @__PURE__ */ b(n, {
80
+ title: S("ggnomad.event.performers", "Performers"),
81
+ children: /* @__PURE__ */ b("ul", {
82
+ className: "space-y-2 text-sm",
83
+ children: (D.performers ?? []).map((e) => /* @__PURE__ */ x("li", {
84
+ className: "flex items-start gap-2 text-text-primary",
85
+ children: [/* @__PURE__ */ b(l, {
86
+ className: "mt-0.5 size-4 flex-shrink-0 text-action-primary-bg",
87
+ "aria-hidden": "true"
88
+ }), e]
89
+ }, e))
90
+ })
91
+ }),
92
+ /* @__PURE__ */ b(c, {
93
+ targetType: "EVENT",
94
+ targetId: D.id ?? T
87
95
  })
88
- })]
89
- }), /* @__PURE__ */ y("div", { children: /* @__PURE__ */ y(s, {
96
+ ]
97
+ }), /* @__PURE__ */ b("div", { children: /* @__PURE__ */ b(s, {
90
98
  bookingType: "EVENT",
91
- itemId: E.id ?? w,
92
- itemName: E.name,
93
- unitPrice: E.price ?? 0,
94
- currency: E.currency ?? "USD",
95
- eventDate: E.startsAt
99
+ itemId: D.id ?? T,
100
+ itemName: D.name,
101
+ unitPrice: D.price ?? 0,
102
+ currency: D.currency ?? "USD",
103
+ eventDate: D.startsAt
96
104
  }) })]
97
105
  })
98
- ] }) : /* @__PURE__ */ y(h, {
106
+ ] }) : /* @__PURE__ */ b(g, {
99
107
  illustration: "empty-data",
100
- title: x("ggnomad.event.notFoundTitle", "No event found"),
101
- description: x("ggnomad.event.notFoundDescription", "This event is unavailable or may have been removed.")
108
+ title: S("ggnomad.event.notFoundTitle", "No event found"),
109
+ description: S("ggnomad.event.notFoundDescription", "This event is unavailable or may have been removed.")
102
110
  })
103
111
  });
104
112
  }
105
113
  //#endregion
106
- export { x as EventDetailsPage };
114
+ export { S as EventDetailsPage };
107
115
 
108
116
  //# sourceMappingURL=EventDetailsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/EventDetailsPage.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Mic2, Ticket } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_EVENT_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport { DetailRow, SectionCard, DetailHero, BookingPanel } from '../components';\n\nexport function EventDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const { data } = useQuery(\n GGNOMAD_EVENT_QUERY as TypedDocumentNode<\n {\n ggnomadEvent: {\n id: string;\n name: string;\n category: string;\n startsAt: string;\n endsAt?: string;\n currency: string;\n price: number;\n performers: string[];\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const event = data?.ggnomadEvent;\n\n return (\n <PageShell\n title={event?.name ?? t('ggnomad.event.fallbackTitle', 'Event details')}\n subtitle={t('ggnomad.event.subtitle', 'Live event details, venue and lineup')}\n >\n {!event ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.event.notFoundTitle', 'No event found')}\n description={t(\n 'ggnomad.event.notFoundDescription',\n 'This event is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={event.images?.[0]} alt={event.name} />\n <PagePurpose icon={<Ticket className=\"size-4\" />}>\n {t(\n 'ggnomad.event.purpose',\n 'All the details for this live event in one place — category, start and end times, ticket price and the full lineup — so you can decide and book tickets before they sell out.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-event-detail\"\n steps={[\n {\n id: 'browse',\n label: t('ggnomad.event.next.browse', 'See more events'),\n description: t(\n 'ggnomad.event.next.browseDesc',\n 'Return to Entertainment for other live experiences.'\n ),\n icon: <Ticket className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'entertainment')),\n },\n ]}\n />\n\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5\">\n <h2 className=\"mb-4 text-lg font-medium tracking-tight text-text-primary\">\n {t('ggnomad.event.details', 'Details')}\n </h2>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow\n label={t('ggnomad.event.category', 'Category')}\n value={event.category}\n />\n <DetailRow\n label={t('ggnomad.event.starts', 'Starts')}\n value={new Date(event.startsAt).toLocaleString()}\n />\n <DetailRow\n label={t('ggnomad.event.ends', 'Ends')}\n value={\n event.endsAt\n ? new Date(event.endsAt).toLocaleString()\n : t('ggnomad.event.na', 'N/A')\n }\n />\n <DetailRow\n label={t('ggnomad.event.price', 'Price')}\n value={`${event.currency} ${Number(event.price).toFixed(2)}`}\n />\n </dl>\n </GlassCard>\n <SectionCard title={t('ggnomad.event.performers', 'Performers')}>\n <ul className=\"space-y-2 text-sm\">\n {(event.performers ?? []).map((performer) => (\n <li key={performer} className=\"flex items-start gap-2 text-text-primary\">\n <Mic2\n className=\"mt-0.5 size-4 flex-shrink-0 text-action-primary-bg\"\n aria-hidden=\"true\"\n />\n {performer}\n </li>\n ))}\n </ul>\n </SectionCard>\n </div>\n <div>\n <BookingPanel\n bookingType=\"EVENT\"\n itemId={event.id ?? id}\n itemName={event.name}\n unitPrice={event.price ?? 0}\n currency={event.currency ?? 'USD'}\n eventDate={event.startsAt}\n />\n </div>\n </div>\n </>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAaA,SAAgB,IAAmB;CACjC,IAAM,EAAE,SAAM,GAAS,EACjB,IAAW,GAAa,EACxB,EAAE,cAAW,QAAQ,GAAY,EACjC,EAAE,QAAK,OAAO,GAAW,EACzB,EAAE,YAAS,EACf,GAgBA;EAAE,WAAW,EAAE,OAAI;EAAE,MAAM,CAAC;EAAI,CACjC,EACK,IAAQ,GAAM;AAEpB,QACE,kBAAC,GAAD;EACE,OAAO,GAAO,QAAQ,EAAE,+BAA+B,gBAAgB;EACvE,UAAU,EAAE,0BAA0B,uCAAuC;YAE3E,IAUA,kBAAA,GAAA,EAAA,UAAA;GACE,kBAAC,GAAD;IAAY,OAAO,EAAM,SAAS;IAAI,KAAK,EAAM;IAAQ,CAAA;GACzD,kBAAC,GAAD;IAAa,MAAM,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;cAC7C,EACC,yBACA,gLACD;IACW,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO,CACL;KACE,IAAI;KACJ,OAAO,EAAE,6BAA6B,kBAAkB;KACxD,aAAa,EACX,iCACA,sDACD;KACD,MAAM,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;KACnC,eAAe,EAAS,EAAS,GAAU,gBAAgB,CAAC;KAC7D,CACF;IACD,CAAA;GAEF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAW,WAAU;MAAQ,MAAA;MAAK,WAAU;gBAA5C,CACE,kBAAC,MAAD;OAAI,WAAU;iBACX,EAAE,yBAAyB,UAAU;OACnC,CAAA,EACL,kBAAC,MAAD;OAAI,WAAU;iBAAd;QACE,kBAAC,GAAD;SACE,OAAO,EAAE,0BAA0B,WAAW;SAC9C,OAAO,EAAM;SACb,CAAA;QACF,kBAAC,GAAD;SACE,OAAO,EAAE,wBAAwB,SAAS;SAC1C,OAAO,IAAI,KAAK,EAAM,SAAS,CAAC,gBAAgB;SAChD,CAAA;QACF,kBAAC,GAAD;SACE,OAAO,EAAE,sBAAsB,OAAO;SACtC,OACE,EAAM,SACF,IAAI,KAAK,EAAM,OAAO,CAAC,gBAAgB,GACvC,EAAE,oBAAoB,MAAM;SAElC,CAAA;QACF,kBAAC,GAAD;SACE,OAAO,EAAE,uBAAuB,QAAQ;SACxC,OAAO,GAAG,EAAM,SAAS,GAAG,OAAO,EAAM,MAAM,CAAC,QAAQ,EAAE;SAC1D,CAAA;QACC;SACK;SACZ,kBAAC,GAAD;MAAa,OAAO,EAAE,4BAA4B,aAAa;gBAC7D,kBAAC,MAAD;OAAI,WAAU;kBACV,EAAM,cAAc,EAAE,EAAE,KAAK,MAC7B,kBAAC,MAAD;QAAoB,WAAU;kBAA9B,CACE,kBAAC,GAAD;SACE,WAAU;SACV,eAAY;SACZ,CAAA,EACD,EACE;UANI,EAMJ,CACL;OACC,CAAA;MACO,CAAA,CACV;QACN,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;KACE,aAAY;KACZ,QAAQ,EAAM,MAAM;KACpB,UAAU,EAAM;KAChB,WAAW,EAAM,SAAS;KAC1B,UAAU,EAAM,YAAY;KAC5B,WAAW,EAAM;KACjB,CAAA,EACE,CAAA,CACF;;GACL,EAAA,CAAA,GAxFH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,+BAA+B,iBAAiB;GACzD,aAAa,EACX,qCACA,sDACD;GACD,CAAA;EAmFM,CAAA"}
1
+ {"version":3,"file":"EventDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/EventDetailsPage.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Mic2, Ticket } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_EVENT_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport { DetailRow, SectionCard, DetailHero, BookingPanel, ReviewsSection } from '../components';\n\nexport function EventDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const { data } = useQuery(\n GGNOMAD_EVENT_QUERY as TypedDocumentNode<\n {\n ggnomadEvent: {\n id: string;\n name: string;\n category: string;\n startsAt: string;\n endsAt?: string;\n currency: string;\n price: number;\n performers: string[];\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const event = data?.ggnomadEvent;\n\n return (\n <PageShell\n title={event?.name ?? t('ggnomad.event.fallbackTitle', 'Event details')}\n subtitle={t('ggnomad.event.subtitle', 'Live event details, venue and lineup')}\n >\n {!event ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.event.notFoundTitle', 'No event found')}\n description={t(\n 'ggnomad.event.notFoundDescription',\n 'This event is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={event.images?.[0]} alt={event.name} />\n <PagePurpose icon={<Ticket className=\"size-4\" />}>\n {t(\n 'ggnomad.event.purpose',\n 'All the details for this live event in one place — category, start and end times, ticket price and the full lineup — so you can decide and book tickets before they sell out.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-event-detail\"\n steps={[\n {\n id: 'browse',\n label: t('ggnomad.event.next.browse', 'See more events'),\n description: t(\n 'ggnomad.event.next.browseDesc',\n 'Return to Entertainment for other live experiences.'\n ),\n icon: <Ticket className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'entertainment')),\n },\n ]}\n />\n\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 space-y-4\">\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5\">\n <h2 className=\"mb-4 text-lg font-medium tracking-tight text-text-primary\">\n {t('ggnomad.event.details', 'Details')}\n </h2>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow\n label={t('ggnomad.event.category', 'Category')}\n value={event.category}\n />\n <DetailRow\n label={t('ggnomad.event.starts', 'Starts')}\n value={new Date(event.startsAt).toLocaleString()}\n />\n <DetailRow\n label={t('ggnomad.event.ends', 'Ends')}\n value={\n event.endsAt\n ? new Date(event.endsAt).toLocaleString()\n : t('ggnomad.event.na', 'N/A')\n }\n />\n <DetailRow\n label={t('ggnomad.event.price', 'Price')}\n value={`${event.currency} ${Number(event.price).toFixed(2)}`}\n />\n </dl>\n </GlassCard>\n <SectionCard title={t('ggnomad.event.performers', 'Performers')}>\n <ul className=\"space-y-2 text-sm\">\n {(event.performers ?? []).map((performer) => (\n <li key={performer} className=\"flex items-start gap-2 text-text-primary\">\n <Mic2\n className=\"mt-0.5 size-4 flex-shrink-0 text-action-primary-bg\"\n aria-hidden=\"true\"\n />\n {performer}\n </li>\n ))}\n </ul>\n </SectionCard>\n <ReviewsSection targetType=\"EVENT\" targetId={event.id ?? id} />\n </div>\n <div>\n <BookingPanel\n bookingType=\"EVENT\"\n itemId={event.id ?? id}\n itemName={event.name}\n unitPrice={event.price ?? 0}\n currency={event.currency ?? 'USD'}\n eventDate={event.startsAt}\n />\n </div>\n </div>\n </>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAaA,SAAgB,IAAmB;CACjC,IAAM,EAAE,SAAM,GAAS,EACjB,IAAW,GAAa,EACxB,EAAE,cAAW,QAAQ,GAAY,EACjC,EAAE,QAAK,OAAO,GAAW,EACzB,EAAE,YAAS,EACf,GAgBA;EAAE,WAAW,EAAE,OAAI;EAAE,MAAM,CAAC;EAAI,CACjC,EACK,IAAQ,GAAM;AAEpB,QACE,kBAAC,GAAD;EACE,OAAO,GAAO,QAAQ,EAAE,+BAA+B,gBAAgB;EACvE,UAAU,EAAE,0BAA0B,uCAAuC;YAE3E,IAUA,kBAAA,GAAA,EAAA,UAAA;GACE,kBAAC,GAAD;IAAY,OAAO,EAAM,SAAS;IAAI,KAAK,EAAM;IAAQ,CAAA;GACzD,kBAAC,GAAD;IAAa,MAAM,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;cAC7C,EACC,yBACA,gLACD;IACW,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO,CACL;KACE,IAAI;KACJ,OAAO,EAAE,6BAA6B,kBAAkB;KACxD,aAAa,EACX,iCACA,sDACD;KACD,MAAM,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;KACnC,eAAe,EAAS,EAAS,GAAU,gBAAgB,CAAC;KAC7D,CACF;IACD,CAAA;GAEF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD;OAAW,WAAU;OAAQ,MAAA;OAAK,WAAU;iBAA5C,CACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAE,yBAAyB,UAAU;QACnC,CAAA,EACL,kBAAC,MAAD;QAAI,WAAU;kBAAd;SACE,kBAAC,GAAD;UACE,OAAO,EAAE,0BAA0B,WAAW;UAC9C,OAAO,EAAM;UACb,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,wBAAwB,SAAS;UAC1C,OAAO,IAAI,KAAK,EAAM,SAAS,CAAC,gBAAgB;UAChD,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,sBAAsB,OAAO;UACtC,OACE,EAAM,SACF,IAAI,KAAK,EAAM,OAAO,CAAC,gBAAgB,GACvC,EAAE,oBAAoB,MAAM;UAElC,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,uBAAuB,QAAQ;UACxC,OAAO,GAAG,EAAM,SAAS,GAAG,OAAO,EAAM,MAAM,CAAC,QAAQ,EAAE;UAC1D,CAAA;SACC;UACK;;MACZ,kBAAC,GAAD;OAAa,OAAO,EAAE,4BAA4B,aAAa;iBAC7D,kBAAC,MAAD;QAAI,WAAU;mBACV,EAAM,cAAc,EAAE,EAAE,KAAK,MAC7B,kBAAC,MAAD;SAAoB,WAAU;mBAA9B,CACE,kBAAC,GAAD;UACE,WAAU;UACV,eAAY;UACZ,CAAA,EACD,EACE;WANI,EAMJ,CACL;QACC,CAAA;OACO,CAAA;MACd,kBAAC,GAAD;OAAgB,YAAW;OAAQ,UAAU,EAAM,MAAM;OAAM,CAAA;MAC3D;QACN,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;KACE,aAAY;KACZ,QAAQ,EAAM,MAAM;KACpB,UAAU,EAAM;KAChB,WAAW,EAAM,SAAS;KAC1B,UAAU,EAAM,YAAY;KAC5B,WAAW,EAAM;KACjB,CAAA,EACE,CAAA,CACF;;GACL,EAAA,CAAA,GAzFH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,+BAA+B,iBAAiB;GACzD,aAAa,EACX,qCACA,sDACD;GACD,CAAA;EAoFM,CAAA"}