@burdenoff/microfe-ggnomad 2026.705.2 → 2026.705.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.
@@ -3,10 +3,11 @@ import { PageShell as t } from "./PageShell.js";
3
3
  import { SectionCard as n } from "../components/SectionCard.js";
4
4
  import { DetailRow as r } from "../components/DetailRow.js";
5
5
  import { DetailHero as i } from "../components/DetailHero.js";
6
- import "../components/index.js";
7
6
  import { useGGNomad as a } from "../providers/GGNomadProvider.js";
8
7
  import { joinPath as o } from "../utils/navigation.js";
9
- import { CalendarCheck as s, Hotel as c } from "lucide-react";
8
+ import { BookingPanel as s } from "../components/BookingPanel.js";
9
+ import "../components/index.js";
10
+ import { Hotel as c } from "lucide-react";
10
11
  import { useI18n as l } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
11
12
  import { useNavigate as u, useParams as d } from "react-router-dom";
12
13
  import { useQuery as f } from "@apollo/client/react";
@@ -33,12 +34,6 @@ function b() {
33
34
  /* @__PURE__ */ v(h, {
34
35
  storageKey: "ggnomad-property-detail",
35
36
  steps: [{
36
- id: "book",
37
- label: b("ggnomad.property.next.book", "Book this stay"),
38
- description: b("ggnomad.property.next.bookDesc", "Reserve these dates and track it under Bookings."),
39
- icon: /* @__PURE__ */ v(s, { className: "size-4" }),
40
- onClick: () => x(o(S, "bookings"))
41
- }, {
42
37
  id: "browse",
43
38
  label: b("ggnomad.property.next.browse", "Compare other stays"),
44
39
  description: b("ggnomad.property.next.browseDesc", "Go back to hospitality listings to compare options."),
@@ -47,56 +42,66 @@ function b() {
47
42
  }]
48
43
  }),
49
44
  /* @__PURE__ */ y("div", {
50
- className: "grid gap-4 lg:grid-cols-2",
51
- children: [/* @__PURE__ */ y(n, {
52
- title: b("ggnomad.property.about", "About"),
53
- children: [
54
- /* @__PURE__ */ v("p", {
55
- className: "text-sm text-text-secondary",
56
- children: b("ggnomad.property.type", "Type")
57
- }),
58
- /* @__PURE__ */ v("p", {
59
- className: "text-text-primary",
60
- children: T.type
61
- }),
62
- /* @__PURE__ */ v("p", {
63
- className: "mt-3 text-sm text-text-secondary",
64
- children: b("ggnomad.property.description", "Description")
65
- }),
66
- /* @__PURE__ */ v("p", {
67
- className: "text-text-primary",
68
- children: T.description ?? b("ggnomad.property.noDescription", "No description")
69
- })
70
- ]
71
- }), /* @__PURE__ */ y(p, {
72
- treatment: "glass",
73
- glow: !0,
74
- className: "border-border-seam p-5",
75
- children: [/* @__PURE__ */ v("h2", {
76
- className: "mb-4 text-lg font-medium tracking-tight text-text-primary",
77
- children: b("ggnomad.property.details", "Details")
78
- }), /* @__PURE__ */ y("dl", {
79
- className: "space-y-2 text-sm",
45
+ className: "grid gap-4 lg:grid-cols-3",
46
+ children: [/* @__PURE__ */ y("div", {
47
+ className: "lg:col-span-2 space-y-4",
48
+ children: [/* @__PURE__ */ y(n, {
49
+ title: b("ggnomad.property.about", "About"),
80
50
  children: [
81
- /* @__PURE__ */ v(r, {
82
- label: b("ggnomad.property.price", "Price"),
83
- value: `${T.currency} ${Number(T.pricePerNight).toFixed(2)}`
51
+ /* @__PURE__ */ v("p", {
52
+ className: "text-sm text-text-secondary",
53
+ children: b("ggnomad.property.type", "Type")
84
54
  }),
85
- /* @__PURE__ */ v(r, {
86
- label: b("ggnomad.property.guests", "Guests"),
87
- value: String(T.maxGuests)
55
+ /* @__PURE__ */ v("p", {
56
+ className: "text-text-primary",
57
+ children: T.type
88
58
  }),
89
- /* @__PURE__ */ v(r, {
90
- label: b("ggnomad.property.rating", "Rating"),
91
- value: String(T.rating ?? b("ggnomad.property.noRating", "N/A"))
59
+ /* @__PURE__ */ v("p", {
60
+ className: "mt-3 text-sm text-text-secondary",
61
+ children: b("ggnomad.property.description", "Description")
92
62
  }),
93
- /* @__PURE__ */ v(r, {
94
- label: b("ggnomad.property.provider", "Provider"),
95
- value: T.provider?.name ?? b("ggnomad.property.unassigned", "Unassigned")
63
+ /* @__PURE__ */ v("p", {
64
+ className: "text-text-primary",
65
+ children: T.description ?? b("ggnomad.property.noDescription", "No description")
96
66
  })
97
67
  ]
68
+ }), /* @__PURE__ */ y(p, {
69
+ treatment: "glass",
70
+ glow: !0,
71
+ className: "border-border-seam p-5",
72
+ children: [/* @__PURE__ */ v("h2", {
73
+ className: "mb-4 text-lg font-medium tracking-tight text-text-primary",
74
+ children: b("ggnomad.property.details", "Details")
75
+ }), /* @__PURE__ */ y("dl", {
76
+ className: "space-y-2 text-sm",
77
+ children: [
78
+ /* @__PURE__ */ v(r, {
79
+ label: b("ggnomad.property.price", "Price"),
80
+ value: `${T.currency} ${Number(T.pricePerNight).toFixed(2)}`
81
+ }),
82
+ /* @__PURE__ */ v(r, {
83
+ label: b("ggnomad.property.guests", "Guests"),
84
+ value: String(T.maxGuests)
85
+ }),
86
+ /* @__PURE__ */ v(r, {
87
+ label: b("ggnomad.property.rating", "Rating"),
88
+ value: String(T.rating ?? b("ggnomad.property.noRating", "N/A"))
89
+ }),
90
+ /* @__PURE__ */ v(r, {
91
+ label: b("ggnomad.property.provider", "Provider"),
92
+ value: T.provider?.name ?? b("ggnomad.property.unassigned", "Unassigned")
93
+ })
94
+ ]
95
+ })]
98
96
  })]
99
- })]
97
+ }), /* @__PURE__ */ v("div", { children: /* @__PURE__ */ v(s, {
98
+ bookingType: "PROPERTY",
99
+ itemId: T.id ?? C,
100
+ itemName: T.name,
101
+ unitPrice: T.pricePerNight ?? 0,
102
+ currency: T.currency ?? "USD",
103
+ nights: 1
104
+ }) })]
100
105
  })
101
106
  ] }) : /* @__PURE__ */ v(m, {
102
107
  illustration: "empty-data",
@@ -1 +1 @@
1
- {"version":3,"file":"PropertyDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/PropertyDetailsPage.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 { CalendarCheck, Hotel } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_PROPERTY_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport { DetailRow, SectionCard, DetailHero } from '../components';\n\nexport function PropertyDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const { data } = useQuery(\n GGNOMAD_PROPERTY_QUERY as TypedDocumentNode<\n {\n ggnomadProperty: {\n name: string;\n type: string;\n description?: string;\n currency: string;\n pricePerNight: number;\n maxGuests: number;\n rating?: number;\n provider?: { name: string };\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const property = data?.ggnomadProperty;\n\n return (\n <PageShell\n title={property?.name ?? t('ggnomad.property.fallbackTitle', 'Property details')}\n subtitle={t('ggnomad.property.subtitle', 'Detailed hospitality listing view')}\n >\n {!property ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.property.notFoundTitle', 'No property found')}\n description={t(\n 'ggnomad.property.notFoundDescription',\n 'This property is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={property.images?.[0]} alt={property.name} />\n <PagePurpose icon={<Hotel className=\"size-4\" />}>\n {t(\n 'ggnomad.property.purpose',\n 'Everything you need to decide on this stay — its type, description, nightly price, guest capacity, rating and the provider behind it — before you reserve it.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-property-detail\"\n steps={[\n {\n id: 'book',\n label: t('ggnomad.property.next.book', 'Book this stay'),\n description: t(\n 'ggnomad.property.next.bookDesc',\n 'Reserve these dates and track it under Bookings.'\n ),\n icon: <CalendarCheck className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'bookings')),\n },\n {\n id: 'browse',\n label: t('ggnomad.property.next.browse', 'Compare other stays'),\n description: t(\n 'ggnomad.property.next.browseDesc',\n 'Go back to hospitality listings to compare options.'\n ),\n icon: <Hotel className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'hospitality')),\n },\n ]}\n />\n\n <div className=\"grid gap-4 lg:grid-cols-2\">\n <SectionCard title={t('ggnomad.property.about', 'About')}>\n <p className=\"text-sm text-text-secondary\">{t('ggnomad.property.type', 'Type')}</p>\n <p className=\"text-text-primary\">{property.type}</p>\n <p className=\"mt-3 text-sm text-text-secondary\">\n {t('ggnomad.property.description', 'Description')}\n </p>\n <p className=\"text-text-primary\">\n {property.description ?? t('ggnomad.property.noDescription', 'No description')}\n </p>\n </SectionCard>\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.property.details', 'Details')}\n </h2>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow\n label={t('ggnomad.property.price', 'Price')}\n value={`${property.currency} ${Number(property.pricePerNight).toFixed(2)}`}\n />\n <DetailRow\n label={t('ggnomad.property.guests', 'Guests')}\n value={String(property.maxGuests)}\n />\n <DetailRow\n label={t('ggnomad.property.rating', 'Rating')}\n value={String(property.rating ?? t('ggnomad.property.noRating', 'N/A'))}\n />\n <DetailRow\n label={t('ggnomad.property.provider', 'Provider')}\n value={property.provider?.name ?? t('ggnomad.property.unassigned', 'Unassigned')}\n />\n </dl>\n </GlassCard>\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,oCAAoC;YAE3E,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,EAAO,WAAU,UAAW,CAAA;cAC5C,EACC,4BACA,gKACD;IACW,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO,CACL;KACE,IAAI;KACJ,OAAO,EAAE,8BAA8B,iBAAiB;KACxD,aAAa,EACX,kCACA,mDACD;KACD,MAAM,kBAAC,GAAD,EAAe,WAAU,UAAW,CAAA;KAC1C,eAAe,EAAS,EAAS,GAAU,WAAW,CAAC;KACxD,EACD;KACE,IAAI;KACJ,OAAO,EAAE,gCAAgC,sBAAsB;KAC/D,aAAa,EACX,oCACA,sDACD;KACD,MAAM,kBAAC,GAAD,EAAO,WAAU,UAAW,CAAA;KAClC,eAAe,EAAS,EAAS,GAAU,cAAc,CAAC;KAC3D,CACF;IACD,CAAA;GAEF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD;KAAa,OAAO,EAAE,0BAA0B,QAAQ;eAAxD;MACE,kBAAC,KAAD;OAAG,WAAU;iBAA+B,EAAE,yBAAyB,OAAO;OAAK,CAAA;MACnF,kBAAC,KAAD;OAAG,WAAU;iBAAqB,EAAS;OAAS,CAAA;MACpD,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAE,gCAAgC,cAAc;OAC/C,CAAA;MACJ,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAS,eAAe,EAAE,kCAAkC,iBAAiB;OAC5E,CAAA;MACQ;QACd,kBAAC,GAAD;KAAW,WAAU;KAAQ,MAAA;KAAK,WAAU;eAA5C,CACE,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAE,4BAA4B,UAAU;MACtC,CAAA,EACL,kBAAC,MAAD;MAAI,WAAU;gBAAd;OACE,kBAAC,GAAD;QACE,OAAO,EAAE,0BAA0B,QAAQ;QAC3C,OAAO,GAAG,EAAS,SAAS,GAAG,OAAO,EAAS,cAAc,CAAC,QAAQ,EAAE;QACxE,CAAA;OACF,kBAAC,GAAD;QACE,OAAO,EAAE,2BAA2B,SAAS;QAC7C,OAAO,OAAO,EAAS,UAAU;QACjC,CAAA;OACF,kBAAC,GAAD;QACE,OAAO,EAAE,2BAA2B,SAAS;QAC7C,OAAO,OAAO,EAAS,UAAU,EAAE,6BAA6B,MAAM,CAAC;QACvE,CAAA;OACF,kBAAC,GAAD;QACE,OAAO,EAAE,6BAA6B,WAAW;QACjD,OAAO,EAAS,UAAU,QAAQ,EAAE,+BAA+B,aAAa;QAChF,CAAA;OACC;QACK;OACR;;GACL,EAAA,CAAA,GA/EH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,kCAAkC,oBAAoB;GAC/D,aAAa,EACX,wCACA,yDACD;GACD,CAAA;EA0EM,CAAA"}
1
+ {"version":3,"file":"PropertyDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/PropertyDetailsPage.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 { Hotel } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_PROPERTY_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 PropertyDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const { data } = useQuery(\n GGNOMAD_PROPERTY_QUERY as TypedDocumentNode<\n {\n ggnomadProperty: {\n id: string;\n name: string;\n type: string;\n description?: string;\n currency: string;\n pricePerNight: number;\n maxGuests: number;\n rating?: number;\n provider?: { name: string };\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const property = data?.ggnomadProperty;\n\n return (\n <PageShell\n title={property?.name ?? t('ggnomad.property.fallbackTitle', 'Property details')}\n subtitle={t('ggnomad.property.subtitle', 'Detailed hospitality listing view')}\n >\n {!property ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.property.notFoundTitle', 'No property found')}\n description={t(\n 'ggnomad.property.notFoundDescription',\n 'This property is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={property.images?.[0]} alt={property.name} />\n <PagePurpose icon={<Hotel className=\"size-4\" />}>\n {t(\n 'ggnomad.property.purpose',\n 'Everything you need to decide on this stay — its type, description, nightly price, guest capacity, rating and the provider behind it — before you reserve it.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-property-detail\"\n steps={[\n {\n id: 'browse',\n label: t('ggnomad.property.next.browse', 'Compare other stays'),\n description: t(\n 'ggnomad.property.next.browseDesc',\n 'Go back to hospitality listings to compare options.'\n ),\n icon: <Hotel className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'hospitality')),\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 <SectionCard title={t('ggnomad.property.about', 'About')}>\n <p className=\"text-sm text-text-secondary\">{t('ggnomad.property.type', 'Type')}</p>\n <p className=\"text-text-primary\">{property.type}</p>\n <p className=\"mt-3 text-sm text-text-secondary\">\n {t('ggnomad.property.description', 'Description')}\n </p>\n <p className=\"text-text-primary\">\n {property.description ?? t('ggnomad.property.noDescription', 'No description')}\n </p>\n </SectionCard>\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.property.details', 'Details')}\n </h2>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow\n label={t('ggnomad.property.price', 'Price')}\n value={`${property.currency} ${Number(property.pricePerNight).toFixed(2)}`}\n />\n <DetailRow\n label={t('ggnomad.property.guests', 'Guests')}\n value={String(property.maxGuests)}\n />\n <DetailRow\n label={t('ggnomad.property.rating', 'Rating')}\n value={String(property.rating ?? t('ggnomad.property.noRating', 'N/A'))}\n />\n <DetailRow\n label={t('ggnomad.property.provider', 'Provider')}\n value={\n property.provider?.name ?? t('ggnomad.property.unassigned', 'Unassigned')\n }\n />\n </dl>\n </GlassCard>\n </div>\n <div>\n <BookingPanel\n bookingType=\"PROPERTY\"\n itemId={property.id ?? id}\n itemName={property.name}\n unitPrice={property.pricePerNight ?? 0}\n currency={property.currency ?? 'USD'}\n nights={1}\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,GAiBA;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,oCAAoC;YAE3E,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,EAAO,WAAU,UAAW,CAAA;cAC5C,EACC,4BACA,gKACD;IACW,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO,CACL;KACE,IAAI;KACJ,OAAO,EAAE,gCAAgC,sBAAsB;KAC/D,aAAa,EACX,oCACA,sDACD;KACD,MAAM,kBAAC,GAAD,EAAO,WAAU,UAAW,CAAA;KAClC,eAAe,EAAS,EAAS,GAAU,cAAc,CAAC;KAC3D,CACF;IACD,CAAA;GAEF,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MAAa,OAAO,EAAE,0BAA0B,QAAQ;gBAAxD;OACE,kBAAC,KAAD;QAAG,WAAU;kBAA+B,EAAE,yBAAyB,OAAO;QAAK,CAAA;OACnF,kBAAC,KAAD;QAAG,WAAU;kBAAqB,EAAS;QAAS,CAAA;OACpD,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAE,gCAAgC,cAAc;QAC/C,CAAA;OACJ,kBAAC,KAAD;QAAG,WAAU;kBACV,EAAS,eAAe,EAAE,kCAAkC,iBAAiB;QAC5E,CAAA;OACQ;SACd,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,0BAA0B,QAAQ;SAC3C,OAAO,GAAG,EAAS,SAAS,GAAG,OAAO,EAAS,cAAc,CAAC,QAAQ,EAAE;SACxE,CAAA;QACF,kBAAC,GAAD;SACE,OAAO,EAAE,2BAA2B,SAAS;SAC7C,OAAO,OAAO,EAAS,UAAU;SACjC,CAAA;QACF,kBAAC,GAAD;SACE,OAAO,EAAE,2BAA2B,SAAS;SAC7C,OAAO,OAAO,EAAS,UAAU,EAAE,6BAA6B,MAAM,CAAC;SACvE,CAAA;QACF,kBAAC,GAAD;SACE,OAAO,EAAE,6BAA6B,WAAW;SACjD,OACE,EAAS,UAAU,QAAQ,EAAE,+BAA+B,aAAa;SAE3E,CAAA;QACC;SACK;QACR;QACN,kBAAC,OAAD,EAAA,UACE,kBAAC,GAAD;KACE,aAAY;KACZ,QAAQ,EAAS,MAAM;KACvB,UAAU,EAAS;KACnB,WAAW,EAAS,iBAAiB;KACrC,UAAU,EAAS,YAAY;KAC/B,QAAQ;KACR,CAAA,EACE,CAAA,CACF;;GACL,EAAA,CAAA,GAnFH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,kCAAkC,oBAAoB;GAC/D,aAAa,EACX,wCACA,yDACD;GACD,CAAA;EA8EM,CAAA"}
@@ -3,10 +3,11 @@ import { PageShell as t } from "./PageShell.js";
3
3
  import { SectionCard as n } from "../components/SectionCard.js";
4
4
  import { DetailRow as r } from "../components/DetailRow.js";
5
5
  import { DetailHero as i } from "../components/DetailHero.js";
6
- import "../components/index.js";
7
6
  import { useGGNomad as a } from "../providers/GGNomadProvider.js";
8
7
  import { joinPath as o } from "../utils/navigation.js";
9
- import { CalendarCheck as s, CheckCircle2 as c, Compass as l } from "lucide-react";
8
+ import { BookingPanel as s } from "../components/BookingPanel.js";
9
+ import "../components/index.js";
10
+ import { CheckCircle2 as c, Compass as l } from "lucide-react";
10
11
  import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
11
12
  import { useNavigate as d, useParams as f } from "react-router-dom";
12
13
  import { useQuery as p } from "@apollo/client/react";
@@ -33,12 +34,6 @@ function x() {
33
34
  /* @__PURE__ */ y(g, {
34
35
  storageKey: "ggnomad-tour-detail",
35
36
  steps: [{
36
- id: "book",
37
- label: x("ggnomad.tour.next.book", "Book this tour"),
38
- description: x("ggnomad.tour.next.bookDesc", "Add it to your itinerary and track it under Bookings."),
39
- icon: /* @__PURE__ */ y(s, { className: "size-4" }),
40
- onClick: () => S(o(C, "bookings"))
41
- }, {
42
37
  id: "browse",
43
38
  label: x("ggnomad.tour.next.browse", "Explore more experiences"),
44
39
  description: x("ggnomad.tour.next.browseDesc", "Return to Tourism to compare tours and activities."),
@@ -47,48 +42,57 @@ function x() {
47
42
  }]
48
43
  }),
49
44
  /* @__PURE__ */ b("div", {
50
- className: "grid gap-4 lg:grid-cols-2",
51
- children: [/* @__PURE__ */ b(m, {
52
- treatment: "glass",
53
- glow: !0,
54
- className: "border-border-seam p-5",
55
- children: [/* @__PURE__ */ y("h2", {
56
- className: "mb-4 text-lg font-medium tracking-tight text-text-primary",
57
- children: x("ggnomad.tour.details", "Details")
58
- }), /* @__PURE__ */ b("dl", {
59
- className: "space-y-2 text-sm",
60
- children: [
61
- /* @__PURE__ */ y(r, {
62
- label: x("ggnomad.tour.duration", "Duration"),
63
- value: E.duration
64
- }),
65
- /* @__PURE__ */ y(r, {
66
- label: x("ggnomad.tour.difficulty", "Difficulty"),
67
- value: E.difficulty ?? x("ggnomad.tour.na", "N/A")
68
- }),
69
- /* @__PURE__ */ y(r, {
70
- label: x("ggnomad.tour.guide", "Guide"),
71
- value: E.guideName ?? x("ggnomad.tour.na", "N/A")
72
- }),
73
- /* @__PURE__ */ y(r, {
74
- label: x("ggnomad.tour.price", "Price"),
75
- value: `${E.currency} ${Number(E.price).toFixed(2)}`
76
- })
77
- ]
45
+ className: "grid gap-4 lg:grid-cols-3",
46
+ children: [/* @__PURE__ */ b("div", {
47
+ 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.tour.details", "Details")
55
+ }), /* @__PURE__ */ b("dl", {
56
+ className: "space-y-2 text-sm",
57
+ children: [
58
+ /* @__PURE__ */ y(r, {
59
+ label: x("ggnomad.tour.duration", "Duration"),
60
+ value: E.duration
61
+ }),
62
+ /* @__PURE__ */ y(r, {
63
+ label: x("ggnomad.tour.difficulty", "Difficulty"),
64
+ value: E.difficulty ?? x("ggnomad.tour.na", "N/A")
65
+ }),
66
+ /* @__PURE__ */ y(r, {
67
+ label: x("ggnomad.tour.guide", "Guide"),
68
+ value: E.guideName ?? x("ggnomad.tour.na", "N/A")
69
+ }),
70
+ /* @__PURE__ */ y(r, {
71
+ label: x("ggnomad.tour.price", "Price"),
72
+ value: `${E.currency} ${Number(E.price).toFixed(2)}`
73
+ })
74
+ ]
75
+ })]
76
+ }), /* @__PURE__ */ y(n, {
77
+ title: x("ggnomad.tour.highlights", "Highlights"),
78
+ children: /* @__PURE__ */ y("ul", {
79
+ className: "space-y-2 text-sm",
80
+ children: (E.highlights ?? []).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-status-success-text",
84
+ "aria-hidden": "true"
85
+ }), e]
86
+ }, e))
87
+ })
78
88
  })]
79
- }), /* @__PURE__ */ y(n, {
80
- title: x("ggnomad.tour.highlights", "Highlights"),
81
- children: /* @__PURE__ */ y("ul", {
82
- className: "space-y-2 text-sm",
83
- children: (E.highlights ?? []).map((e) => /* @__PURE__ */ b("li", {
84
- className: "flex items-start gap-2 text-text-primary",
85
- children: [/* @__PURE__ */ y(c, {
86
- className: "mt-0.5 size-4 flex-shrink-0 text-status-success-text",
87
- "aria-hidden": "true"
88
- }), e]
89
- }, e))
90
- })
91
- })]
89
+ }), /* @__PURE__ */ y("div", { children: /* @__PURE__ */ y(s, {
90
+ bookingType: "TOUR",
91
+ itemId: E.id ?? w,
92
+ itemName: E.name,
93
+ unitPrice: E.price ?? 0,
94
+ currency: E.currency ?? "USD"
95
+ }) })]
92
96
  })
93
97
  ] }) : /* @__PURE__ */ y(h, {
94
98
  illustration: "empty-data",
@@ -1 +1 @@
1
- {"version":3,"file":"TourDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/TourDetailsPage.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 { CalendarCheck, CheckCircle2, Compass } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_TOUR_QUERY } from '../graphql';\nimport { useGGNomad } from '../providers/GGNomadProvider';\nimport { joinPath } from '../utils/navigation';\nimport { PageShell } from './PageShell';\nimport { DetailRow, SectionCard, DetailHero } from '../components';\n\nexport function TourDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const { data } = useQuery(\n GGNOMAD_TOUR_QUERY as TypedDocumentNode<\n {\n ggnomadTour: {\n name: string;\n duration: string;\n difficulty?: string;\n guideName?: string;\n currency: string;\n price: number;\n highlights: string[];\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const tour = data?.ggnomadTour;\n\n return (\n <PageShell\n title={tour?.name ?? t('ggnomad.tour.fallbackTitle', 'Tour details')}\n subtitle={t('ggnomad.tour.subtitle', 'Tour package details and booking context')}\n >\n {!tour ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.tour.notFoundTitle', 'No tour found')}\n description={t(\n 'ggnomad.tour.notFoundDescription',\n 'This tour is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={tour.images?.[0]} alt={tour.name} />\n <PagePurpose icon={<Compass className=\"size-4\" />}>\n {t(\n 'ggnomad.tour.purpose',\n 'See exactly what this tour involves — duration, difficulty, your guide, price and the highlights you’ll experience — so you can confirm it fits your trip before booking.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-tour-detail\"\n steps={[\n {\n id: 'book',\n label: t('ggnomad.tour.next.book', 'Book this tour'),\n description: t(\n 'ggnomad.tour.next.bookDesc',\n 'Add it to your itinerary and track it under Bookings.'\n ),\n icon: <CalendarCheck className=\"size-4\" />,\n onClick: () => navigate(joinPath(basePath, 'bookings')),\n },\n {\n id: 'browse',\n label: t('ggnomad.tour.next.browse', 'Explore more experiences'),\n description: t(\n 'ggnomad.tour.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-2\">\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.tour.details', 'Details')}\n </h2>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow label={t('ggnomad.tour.duration', 'Duration')} value={tour.duration} />\n <DetailRow\n label={t('ggnomad.tour.difficulty', 'Difficulty')}\n value={tour.difficulty ?? t('ggnomad.tour.na', 'N/A')}\n />\n <DetailRow\n label={t('ggnomad.tour.guide', 'Guide')}\n value={tour.guideName ?? t('ggnomad.tour.na', 'N/A')}\n />\n <DetailRow\n label={t('ggnomad.tour.price', 'Price')}\n value={`${tour.currency} ${Number(tour.price).toFixed(2)}`}\n />\n </dl>\n </GlassCard>\n <SectionCard title={t('ggnomad.tour.highlights', 'Highlights')}>\n <ul className=\"space-y-2 text-sm\">\n {(tour.highlights ?? []).map((highlight) => (\n <li key={highlight} className=\"flex items-start gap-2 text-text-primary\">\n <CheckCircle2\n className=\"mt-0.5 size-4 flex-shrink-0 text-status-success-text\"\n aria-hidden=\"true\"\n />\n {highlight}\n </li>\n ))}\n </ul>\n </SectionCard>\n </div>\n </>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;AAaA,SAAgB,IAAkB;CAChC,IAAM,EAAE,SAAM,GAAS,EACjB,IAAW,GAAa,EACxB,EAAE,cAAW,QAAQ,GAAY,EACjC,EAAE,QAAK,OAAO,GAAW,EACzB,EAAE,YAAS,EACf,GAeA;EAAE,WAAW,EAAE,OAAI;EAAE,MAAM,CAAC;EAAI,CACjC,EACK,IAAO,GAAM;AAEnB,QACE,kBAAC,GAAD;EACE,OAAO,GAAM,QAAQ,EAAE,8BAA8B,eAAe;EACpE,UAAU,EAAE,yBAAyB,2CAA2C;YAE9E,IAUA,kBAAA,GAAA,EAAA,UAAA;GACE,kBAAC,GAAD;IAAY,OAAO,EAAK,SAAS;IAAI,KAAK,EAAK;IAAQ,CAAA;GACvD,kBAAC,GAAD;IAAa,MAAM,kBAAC,GAAD,EAAS,WAAU,UAAW,CAAA;cAC9C,EACC,wBACA,4KACD;IACW,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO,CACL;KACE,IAAI;KACJ,OAAO,EAAE,0BAA0B,iBAAiB;KACpD,aAAa,EACX,8BACA,wDACD;KACD,MAAM,kBAAC,GAAD,EAAe,WAAU,UAAW,CAAA;KAC1C,eAAe,EAAS,EAAS,GAAU,WAAW,CAAC;KACxD,EACD;KACE,IAAI;KACJ,OAAO,EAAE,4BAA4B,2BAA2B;KAChE,aAAa,EACX,gCACA,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,GAAD;KAAW,WAAU;KAAQ,MAAA;KAAK,WAAU;eAA5C,CACE,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAE,wBAAwB,UAAU;MAClC,CAAA,EACL,kBAAC,MAAD;MAAI,WAAU;gBAAd;OACE,kBAAC,GAAD;QAAW,OAAO,EAAE,yBAAyB,WAAW;QAAE,OAAO,EAAK;QAAY,CAAA;OAClF,kBAAC,GAAD;QACE,OAAO,EAAE,2BAA2B,aAAa;QACjD,OAAO,EAAK,cAAc,EAAE,mBAAmB,MAAM;QACrD,CAAA;OACF,kBAAC,GAAD;QACE,OAAO,EAAE,sBAAsB,QAAQ;QACvC,OAAO,EAAK,aAAa,EAAE,mBAAmB,MAAM;QACpD,CAAA;OACF,kBAAC,GAAD;QACE,OAAO,EAAE,sBAAsB,QAAQ;QACvC,OAAO,GAAG,EAAK,SAAS,GAAG,OAAO,EAAK,MAAM,CAAC,QAAQ,EAAE;QACxD,CAAA;OACC;QACK;QACZ,kBAAC,GAAD;KAAa,OAAO,EAAE,2BAA2B,aAAa;eAC5D,kBAAC,MAAD;MAAI,WAAU;iBACV,EAAK,cAAc,EAAE,EAAE,KAAK,MAC5B,kBAAC,MAAD;OAAoB,WAAU;iBAA9B,CACE,kBAAC,GAAD;QACE,WAAU;QACV,eAAY;QACZ,CAAA,EACD,EACE;SANI,EAMJ,CACL;MACC,CAAA;KACO,CAAA,CACV;;GACL,EAAA,CAAA,GA/EH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,8BAA8B,gBAAgB;GACvD,aAAa,EACX,oCACA,qDACD;GACD,CAAA;EA0EM,CAAA"}
1
+ {"version":3,"file":"TourDetailsPage.js","names":[],"sources":["../../../src/ggnomad/pages/TourDetailsPage.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 { CheckCircle2, Compass } from 'lucide-react';\nimport { GlassCard, IllustratedEmptyState, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_TOUR_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 TourDetailsPage() {\n const { t } = useI18n();\n const navigate = useNavigate();\n const { basePath = '/' } = useGGNomad();\n const { id = '' } = useParams();\n const { data } = useQuery(\n GGNOMAD_TOUR_QUERY as TypedDocumentNode<\n {\n ggnomadTour: {\n id: string;\n name: string;\n duration: string;\n difficulty?: string;\n guideName?: string;\n currency: string;\n price: number;\n highlights: string[];\n images?: string[];\n } | null;\n },\n { id: string }\n >,\n { variables: { id }, skip: !id }\n );\n const tour = data?.ggnomadTour;\n\n return (\n <PageShell\n title={tour?.name ?? t('ggnomad.tour.fallbackTitle', 'Tour details')}\n subtitle={t('ggnomad.tour.subtitle', 'Tour package details and booking context')}\n >\n {!tour ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('ggnomad.tour.notFoundTitle', 'No tour found')}\n description={t(\n 'ggnomad.tour.notFoundDescription',\n 'This tour is unavailable or may have been removed.'\n )}\n />\n ) : (\n <>\n <DetailHero image={tour.images?.[0]} alt={tour.name} />\n <PagePurpose icon={<Compass className=\"size-4\" />}>\n {t(\n 'ggnomad.tour.purpose',\n 'See exactly what this tour involves — duration, difficulty, your guide, price and the highlights you’ll experience — so you can confirm it fits your trip before booking.'\n )}\n </PagePurpose>\n\n <NextSteps\n storageKey=\"ggnomad-tour-detail\"\n steps={[\n {\n id: 'browse',\n label: t('ggnomad.tour.next.browse', 'Explore more experiences'),\n description: t(\n 'ggnomad.tour.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.tour.details', 'Details')}\n </h2>\n <dl className=\"space-y-2 text-sm\">\n <DetailRow label={t('ggnomad.tour.duration', 'Duration')} value={tour.duration} />\n <DetailRow\n label={t('ggnomad.tour.difficulty', 'Difficulty')}\n value={tour.difficulty ?? t('ggnomad.tour.na', 'N/A')}\n />\n <DetailRow\n label={t('ggnomad.tour.guide', 'Guide')}\n value={tour.guideName ?? t('ggnomad.tour.na', 'N/A')}\n />\n <DetailRow\n label={t('ggnomad.tour.price', 'Price')}\n value={`${tour.currency} ${Number(tour.price).toFixed(2)}`}\n />\n </dl>\n </GlassCard>\n <SectionCard title={t('ggnomad.tour.highlights', 'Highlights')}>\n <ul className=\"space-y-2 text-sm\">\n {(tour.highlights ?? []).map((highlight) => (\n <li key={highlight} className=\"flex items-start gap-2 text-text-primary\">\n <CheckCircle2\n className=\"mt-0.5 size-4 flex-shrink-0 text-status-success-text\"\n aria-hidden=\"true\"\n />\n {highlight}\n </li>\n ))}\n </ul>\n </SectionCard>\n </div>\n <div>\n <BookingPanel\n bookingType=\"TOUR\"\n itemId={tour.id ?? id}\n itemName={tour.name}\n unitPrice={tour.price ?? 0}\n currency={tour.currency ?? 'USD'}\n />\n </div>\n </div>\n </>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAaA,SAAgB,IAAkB;CAChC,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,IAAO,GAAM;AAEnB,QACE,kBAAC,GAAD;EACE,OAAO,GAAM,QAAQ,EAAE,8BAA8B,eAAe;EACpE,UAAU,EAAE,yBAAyB,2CAA2C;YAE9E,IAUA,kBAAA,GAAA,EAAA,UAAA;GACE,kBAAC,GAAD;IAAY,OAAO,EAAK,SAAS;IAAI,KAAK,EAAK;IAAQ,CAAA;GACvD,kBAAC,GAAD;IAAa,MAAM,kBAAC,GAAD,EAAS,WAAU,UAAW,CAAA;cAC9C,EACC,wBACA,4KACD;IACW,CAAA;GAEd,kBAAC,GAAD;IACE,YAAW;IACX,OAAO,CACL;KACE,IAAI;KACJ,OAAO,EAAE,4BAA4B,2BAA2B;KAChE,aAAa,EACX,gCACA,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,wBAAwB,UAAU;OAClC,CAAA,EACL,kBAAC,MAAD;OAAI,WAAU;iBAAd;QACE,kBAAC,GAAD;SAAW,OAAO,EAAE,yBAAyB,WAAW;SAAE,OAAO,EAAK;SAAY,CAAA;QAClF,kBAAC,GAAD;SACE,OAAO,EAAE,2BAA2B,aAAa;SACjD,OAAO,EAAK,cAAc,EAAE,mBAAmB,MAAM;SACrD,CAAA;QACF,kBAAC,GAAD;SACE,OAAO,EAAE,sBAAsB,QAAQ;SACvC,OAAO,EAAK,aAAa,EAAE,mBAAmB,MAAM;SACpD,CAAA;QACF,kBAAC,GAAD;SACE,OAAO,EAAE,sBAAsB,QAAQ;SACvC,OAAO,GAAG,EAAK,SAAS,GAAG,OAAO,EAAK,MAAM,CAAC,QAAQ,EAAE;SACxD,CAAA;QACC;SACK;SACZ,kBAAC,GAAD;MAAa,OAAO,EAAE,2BAA2B,aAAa;gBAC5D,kBAAC,MAAD;OAAI,WAAU;kBACV,EAAK,cAAc,EAAE,EAAE,KAAK,MAC5B,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,EAAK,MAAM;KACnB,UAAU,EAAK;KACf,WAAW,EAAK,SAAS;KACzB,UAAU,EAAK,YAAY;KAC3B,CAAA,EACE,CAAA,CACF;;GACL,EAAA,CAAA,GAhFH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,8BAA8B,gBAAgB;GACvD,aAAa,EACX,oCACA,qDACD;GACD,CAAA;EA2EM,CAAA"}