@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.
- package/dist/ggnomad/components/ReviewsSection.js +325 -0
- package/dist/ggnomad/components/ReviewsSection.js.map +1 -0
- package/dist/ggnomad/components/index.js +1 -0
- package/dist/ggnomad/graphql.js +51 -1
- package/dist/ggnomad/graphql.js.map +1 -1
- package/dist/ggnomad/pages/ActivityDetailsPage.js +82 -74
- package/dist/ggnomad/pages/ActivityDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/EventDetailsPage.js +86 -78
- package/dist/ggnomad/pages/EventDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/PropertyDetailsPage.js +88 -80
- package/dist/ggnomad/pages/PropertyDetailsPage.js.map +1 -1
- package/dist/ggnomad/pages/TourDetailsPage.js +85 -77
- package/dist/ggnomad/pages/TourDetailsPage.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,111 +6,119 @@ 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 { Hotel as
|
|
11
|
-
import { useI18n as
|
|
12
|
-
import { useNavigate as
|
|
13
|
-
import { useQuery as
|
|
14
|
-
import { GlassCard as
|
|
15
|
-
import { Fragment as
|
|
11
|
+
import { Hotel as l } from "lucide-react";
|
|
12
|
+
import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
|
|
13
|
+
import { useNavigate as d, useParams as f } from "react-router-dom";
|
|
14
|
+
import { useQuery as p } from "@apollo/client/react";
|
|
15
|
+
import { GlassCard as m, IllustratedEmptyState as h, NextSteps as g, PagePurpose as _ } from "@burdenoff/fe-libs/ui";
|
|
16
|
+
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
16
17
|
//#region src/ggnomad/pages/PropertyDetailsPage.tsx
|
|
17
|
-
function
|
|
18
|
-
let { t:
|
|
19
|
-
variables: { id:
|
|
20
|
-
skip: !
|
|
21
|
-
}),
|
|
22
|
-
return /* @__PURE__ */
|
|
23
|
-
title:
|
|
24
|
-
subtitle:
|
|
25
|
-
children:
|
|
26
|
-
/* @__PURE__ */
|
|
27
|
-
image:
|
|
28
|
-
alt:
|
|
18
|
+
function x() {
|
|
19
|
+
let { t: x } = u(), S = d(), { basePath: C = "/" } = a(), { id: w = "" } = f(), { data: T } = p(e, {
|
|
20
|
+
variables: { id: w },
|
|
21
|
+
skip: !w
|
|
22
|
+
}), E = T?.ggnomadProperty;
|
|
23
|
+
return /* @__PURE__ */ y(t, {
|
|
24
|
+
title: E?.name ?? x("ggnomad.property.fallbackTitle", "Property details"),
|
|
25
|
+
subtitle: x("ggnomad.property.subtitle", "Detailed hospitality listing view"),
|
|
26
|
+
children: E ? /* @__PURE__ */ b(v, { children: [
|
|
27
|
+
/* @__PURE__ */ y(i, {
|
|
28
|
+
image: E.images?.[0],
|
|
29
|
+
alt: E.name
|
|
29
30
|
}),
|
|
30
|
-
/* @__PURE__ */
|
|
31
|
-
icon: /* @__PURE__ */
|
|
32
|
-
children:
|
|
31
|
+
/* @__PURE__ */ y(_, {
|
|
32
|
+
icon: /* @__PURE__ */ y(l, { className: "size-4" }),
|
|
33
|
+
children: x("ggnomad.property.purpose", "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.")
|
|
33
34
|
}),
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
+
/* @__PURE__ */ y(g, {
|
|
35
36
|
storageKey: "ggnomad-property-detail",
|
|
36
37
|
steps: [{
|
|
37
38
|
id: "browse",
|
|
38
|
-
label:
|
|
39
|
-
description:
|
|
40
|
-
icon: /* @__PURE__ */
|
|
41
|
-
onClick: () =>
|
|
39
|
+
label: x("ggnomad.property.next.browse", "Compare other stays"),
|
|
40
|
+
description: x("ggnomad.property.next.browseDesc", "Go back to hospitality listings to compare options."),
|
|
41
|
+
icon: /* @__PURE__ */ y(l, { className: "size-4" }),
|
|
42
|
+
onClick: () => S(o(C, "hospitality"))
|
|
42
43
|
}]
|
|
43
44
|
}),
|
|
44
|
-
/* @__PURE__ */
|
|
45
|
+
/* @__PURE__ */ b("div", {
|
|
45
46
|
className: "grid gap-4 lg:grid-cols-3",
|
|
46
|
-
children: [/* @__PURE__ */
|
|
47
|
+
children: [/* @__PURE__ */ b("div", {
|
|
47
48
|
className: "lg:col-span-2 space-y-4",
|
|
48
|
-
children: [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
/* @__PURE__ */ v("p", {
|
|
52
|
-
className: "text-sm text-text-secondary",
|
|
53
|
-
children: b("ggnomad.property.type", "Type")
|
|
54
|
-
}),
|
|
55
|
-
/* @__PURE__ */ v("p", {
|
|
56
|
-
className: "text-text-primary",
|
|
57
|
-
children: T.type
|
|
58
|
-
}),
|
|
59
|
-
/* @__PURE__ */ v("p", {
|
|
60
|
-
className: "mt-3 text-sm text-text-secondary",
|
|
61
|
-
children: b("ggnomad.property.description", "Description")
|
|
62
|
-
}),
|
|
63
|
-
/* @__PURE__ */ v("p", {
|
|
64
|
-
className: "text-text-primary",
|
|
65
|
-
children: T.description ?? b("ggnomad.property.noDescription", "No description")
|
|
66
|
-
})
|
|
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",
|
|
49
|
+
children: [
|
|
50
|
+
/* @__PURE__ */ b(n, {
|
|
51
|
+
title: x("ggnomad.property.about", "About"),
|
|
77
52
|
children: [
|
|
78
|
-
/* @__PURE__ */
|
|
79
|
-
|
|
80
|
-
|
|
53
|
+
/* @__PURE__ */ y("p", {
|
|
54
|
+
className: "text-sm text-text-secondary",
|
|
55
|
+
children: x("ggnomad.property.type", "Type")
|
|
81
56
|
}),
|
|
82
|
-
/* @__PURE__ */
|
|
83
|
-
|
|
84
|
-
|
|
57
|
+
/* @__PURE__ */ y("p", {
|
|
58
|
+
className: "text-text-primary",
|
|
59
|
+
children: E.type
|
|
85
60
|
}),
|
|
86
|
-
/* @__PURE__ */
|
|
87
|
-
|
|
88
|
-
|
|
61
|
+
/* @__PURE__ */ y("p", {
|
|
62
|
+
className: "mt-3 text-sm text-text-secondary",
|
|
63
|
+
children: x("ggnomad.property.description", "Description")
|
|
89
64
|
}),
|
|
90
|
-
/* @__PURE__ */
|
|
91
|
-
|
|
92
|
-
|
|
65
|
+
/* @__PURE__ */ y("p", {
|
|
66
|
+
className: "text-text-primary",
|
|
67
|
+
children: E.description ?? x("ggnomad.property.noDescription", "No description")
|
|
93
68
|
})
|
|
94
69
|
]
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
|
|
70
|
+
}),
|
|
71
|
+
/* @__PURE__ */ b(m, {
|
|
72
|
+
treatment: "glass",
|
|
73
|
+
glow: !0,
|
|
74
|
+
className: "border-border-seam p-5",
|
|
75
|
+
children: [/* @__PURE__ */ y("h2", {
|
|
76
|
+
className: "mb-4 text-lg font-medium tracking-tight text-text-primary",
|
|
77
|
+
children: x("ggnomad.property.details", "Details")
|
|
78
|
+
}), /* @__PURE__ */ b("dl", {
|
|
79
|
+
className: "space-y-2 text-sm",
|
|
80
|
+
children: [
|
|
81
|
+
/* @__PURE__ */ y(r, {
|
|
82
|
+
label: x("ggnomad.property.price", "Price"),
|
|
83
|
+
value: `${E.currency} ${Number(E.pricePerNight).toFixed(2)}`
|
|
84
|
+
}),
|
|
85
|
+
/* @__PURE__ */ y(r, {
|
|
86
|
+
label: x("ggnomad.property.guests", "Guests"),
|
|
87
|
+
value: String(E.maxGuests)
|
|
88
|
+
}),
|
|
89
|
+
/* @__PURE__ */ y(r, {
|
|
90
|
+
label: x("ggnomad.property.rating", "Rating"),
|
|
91
|
+
value: String(E.rating ?? x("ggnomad.property.noRating", "N/A"))
|
|
92
|
+
}),
|
|
93
|
+
/* @__PURE__ */ y(r, {
|
|
94
|
+
label: x("ggnomad.property.provider", "Provider"),
|
|
95
|
+
value: E.provider?.name ?? x("ggnomad.property.unassigned", "Unassigned")
|
|
96
|
+
})
|
|
97
|
+
]
|
|
98
|
+
})]
|
|
99
|
+
}),
|
|
100
|
+
/* @__PURE__ */ y(c, {
|
|
101
|
+
targetType: "PROPERTY",
|
|
102
|
+
targetId: E.id ?? w
|
|
103
|
+
})
|
|
104
|
+
]
|
|
105
|
+
}), /* @__PURE__ */ y("div", { children: /* @__PURE__ */ y(s, {
|
|
98
106
|
bookingType: "PROPERTY",
|
|
99
|
-
itemId:
|
|
100
|
-
itemName:
|
|
101
|
-
unitPrice:
|
|
102
|
-
currency:
|
|
107
|
+
itemId: E.id ?? w,
|
|
108
|
+
itemName: E.name,
|
|
109
|
+
unitPrice: E.pricePerNight ?? 0,
|
|
110
|
+
currency: E.currency ?? "USD",
|
|
103
111
|
nights: 1
|
|
104
112
|
}) })]
|
|
105
113
|
})
|
|
106
|
-
] }) : /* @__PURE__ */
|
|
114
|
+
] }) : /* @__PURE__ */ y(h, {
|
|
107
115
|
illustration: "empty-data",
|
|
108
|
-
title:
|
|
109
|
-
description:
|
|
116
|
+
title: x("ggnomad.property.notFoundTitle", "No property found"),
|
|
117
|
+
description: x("ggnomad.property.notFoundDescription", "This property is unavailable or may have been removed.")
|
|
110
118
|
})
|
|
111
119
|
});
|
|
112
120
|
}
|
|
113
121
|
//#endregion
|
|
114
|
-
export {
|
|
122
|
+
export { x as PropertyDetailsPage };
|
|
115
123
|
|
|
116
124
|
//# sourceMappingURL=PropertyDetailsPage.js.map
|
|
@@ -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 { 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":"
|
|
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, ReviewsSection } 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 <ReviewsSection targetType=\"PROPERTY\" targetId={property.id ?? id} />\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;MACE,kBAAC,GAAD;OAAa,OAAO,EAAE,0BAA0B,QAAQ;iBAAxD;QACE,kBAAC,KAAD;SAAG,WAAU;mBAA+B,EAAE,yBAAyB,OAAO;SAAK,CAAA;QACnF,kBAAC,KAAD;SAAG,WAAU;mBAAqB,EAAS;SAAS,CAAA;QACpD,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAE,gCAAgC,cAAc;SAC/C,CAAA;QACJ,kBAAC,KAAD;SAAG,WAAU;mBACV,EAAS,eAAe,EAAE,kCAAkC,iBAAiB;SAC5E,CAAA;QACQ;;MACd,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,0BAA0B,QAAQ;UAC3C,OAAO,GAAG,EAAS,SAAS,GAAG,OAAO,EAAS,cAAc,CAAC,QAAQ,EAAE;UACxE,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,2BAA2B,SAAS;UAC7C,OAAO,OAAO,EAAS,UAAU;UACjC,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,2BAA2B,SAAS;UAC7C,OAAO,OAAO,EAAS,UAAU,EAAE,6BAA6B,MAAM,CAAC;UACvE,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,6BAA6B,WAAW;UACjD,OACE,EAAS,UAAU,QAAQ,EAAE,+BAA+B,aAAa;UAE3E,CAAA;SACC;UACK;;MACZ,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,iBAAiB;KACrC,UAAU,EAAS,YAAY;KAC/B,QAAQ;KACR,CAAA,EACE,CAAA,CACF;;GACL,EAAA,CAAA,GApFH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,kCAAkC,oBAAoB;GAC/D,aAAa,EACX,wCACA,yDACD;GACD,CAAA;EA+EM,CAAA"}
|
|
@@ -6,102 +6,110 @@ 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 { CheckCircle2 as
|
|
11
|
-
import { useI18n as
|
|
12
|
-
import { useNavigate as
|
|
13
|
-
import { useQuery as
|
|
14
|
-
import { GlassCard as
|
|
15
|
-
import { Fragment as
|
|
11
|
+
import { CheckCircle2 as l, Compass 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/TourDetailsPage.tsx
|
|
17
|
-
function
|
|
18
|
-
let { t:
|
|
19
|
-
variables: { id:
|
|
20
|
-
skip: !
|
|
21
|
-
}),
|
|
22
|
-
return /* @__PURE__ */
|
|
23
|
-
title:
|
|
24
|
-
subtitle:
|
|
25
|
-
children:
|
|
26
|
-
/* @__PURE__ */
|
|
27
|
-
image:
|
|
28
|
-
alt:
|
|
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?.ggnomadTour;
|
|
23
|
+
return /* @__PURE__ */ b(t, {
|
|
24
|
+
title: D?.name ?? S("ggnomad.tour.fallbackTitle", "Tour details"),
|
|
25
|
+
subtitle: S("ggnomad.tour.subtitle", "Tour package details and booking context"),
|
|
26
|
+
children: D ? /* @__PURE__ */ x(y, { children: [
|
|
27
|
+
/* @__PURE__ */ b(i, {
|
|
28
|
+
image: D.images?.[0],
|
|
29
|
+
alt: D.name
|
|
29
30
|
}),
|
|
30
|
-
/* @__PURE__ */
|
|
31
|
-
icon: /* @__PURE__ */
|
|
32
|
-
children:
|
|
31
|
+
/* @__PURE__ */ b(v, {
|
|
32
|
+
icon: /* @__PURE__ */ b(u, { className: "size-4" }),
|
|
33
|
+
children: S("ggnomad.tour.purpose", "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.")
|
|
33
34
|
}),
|
|
34
|
-
/* @__PURE__ */
|
|
35
|
+
/* @__PURE__ */ b(_, {
|
|
35
36
|
storageKey: "ggnomad-tour-detail",
|
|
36
37
|
steps: [{
|
|
37
38
|
id: "browse",
|
|
38
|
-
label:
|
|
39
|
-
description:
|
|
40
|
-
icon: /* @__PURE__ */
|
|
41
|
-
onClick: () =>
|
|
39
|
+
label: S("ggnomad.tour.next.browse", "Explore more experiences"),
|
|
40
|
+
description: S("ggnomad.tour.next.browseDesc", "Return to Tourism to compare tours and activities."),
|
|
41
|
+
icon: /* @__PURE__ */ b(u, { className: "size-4" }),
|
|
42
|
+
onClick: () => C(o(w, "tourism"))
|
|
42
43
|
}]
|
|
43
44
|
}),
|
|
44
|
-
/* @__PURE__ */
|
|
45
|
+
/* @__PURE__ */ x("div", {
|
|
45
46
|
className: "grid gap-4 lg:grid-cols-3",
|
|
46
|
-
children: [/* @__PURE__ */
|
|
47
|
+
children: [/* @__PURE__ */ x("div", {
|
|
47
48
|
className: "lg:col-span-2 space-y-4",
|
|
48
|
-
children: [
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
children:
|
|
81
|
-
className: "
|
|
82
|
-
children: [/* @__PURE__ */
|
|
83
|
-
className: "
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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.tour.details", "Details")
|
|
57
|
+
}), /* @__PURE__ */ x("dl", {
|
|
58
|
+
className: "space-y-2 text-sm",
|
|
59
|
+
children: [
|
|
60
|
+
/* @__PURE__ */ b(r, {
|
|
61
|
+
label: S("ggnomad.tour.duration", "Duration"),
|
|
62
|
+
value: D.duration
|
|
63
|
+
}),
|
|
64
|
+
/* @__PURE__ */ b(r, {
|
|
65
|
+
label: S("ggnomad.tour.difficulty", "Difficulty"),
|
|
66
|
+
value: D.difficulty ?? S("ggnomad.tour.na", "N/A")
|
|
67
|
+
}),
|
|
68
|
+
/* @__PURE__ */ b(r, {
|
|
69
|
+
label: S("ggnomad.tour.guide", "Guide"),
|
|
70
|
+
value: D.guideName ?? S("ggnomad.tour.na", "N/A")
|
|
71
|
+
}),
|
|
72
|
+
/* @__PURE__ */ b(r, {
|
|
73
|
+
label: S("ggnomad.tour.price", "Price"),
|
|
74
|
+
value: `${D.currency} ${Number(D.price).toFixed(2)}`
|
|
75
|
+
})
|
|
76
|
+
]
|
|
77
|
+
})]
|
|
78
|
+
}),
|
|
79
|
+
/* @__PURE__ */ b(n, {
|
|
80
|
+
title: S("ggnomad.tour.highlights", "Highlights"),
|
|
81
|
+
children: /* @__PURE__ */ b("ul", {
|
|
82
|
+
className: "space-y-2 text-sm",
|
|
83
|
+
children: (D.highlights ?? []).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-status-success-text",
|
|
87
|
+
"aria-hidden": "true"
|
|
88
|
+
}), e]
|
|
89
|
+
}, e))
|
|
90
|
+
})
|
|
91
|
+
}),
|
|
92
|
+
/* @__PURE__ */ b(c, {
|
|
93
|
+
targetType: "TOUR",
|
|
94
|
+
targetId: D.id ?? T
|
|
87
95
|
})
|
|
88
|
-
|
|
89
|
-
}), /* @__PURE__ */
|
|
96
|
+
]
|
|
97
|
+
}), /* @__PURE__ */ b("div", { children: /* @__PURE__ */ b(s, {
|
|
90
98
|
bookingType: "TOUR",
|
|
91
|
-
itemId:
|
|
92
|
-
itemName:
|
|
93
|
-
unitPrice:
|
|
94
|
-
currency:
|
|
99
|
+
itemId: D.id ?? T,
|
|
100
|
+
itemName: D.name,
|
|
101
|
+
unitPrice: D.price ?? 0,
|
|
102
|
+
currency: D.currency ?? "USD"
|
|
95
103
|
}) })]
|
|
96
104
|
})
|
|
97
|
-
] }) : /* @__PURE__ */
|
|
105
|
+
] }) : /* @__PURE__ */ b(g, {
|
|
98
106
|
illustration: "empty-data",
|
|
99
|
-
title:
|
|
100
|
-
description:
|
|
107
|
+
title: S("ggnomad.tour.notFoundTitle", "No tour found"),
|
|
108
|
+
description: S("ggnomad.tour.notFoundDescription", "This tour is unavailable or may have been removed.")
|
|
101
109
|
})
|
|
102
110
|
});
|
|
103
111
|
}
|
|
104
112
|
//#endregion
|
|
105
|
-
export {
|
|
113
|
+
export { S as TourDetailsPage };
|
|
106
114
|
|
|
107
115
|
//# sourceMappingURL=TourDetailsPage.js.map
|
|
@@ -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 { 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":"
|
|
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, ReviewsSection } 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 <ReviewsSection targetType=\"TOUR\" targetId={tour.id ?? id} />\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;MACE,kBAAC,GAAD;OAAW,WAAU;OAAQ,MAAA;OAAK,WAAU;iBAA5C,CACE,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAE,wBAAwB,UAAU;QAClC,CAAA,EACL,kBAAC,MAAD;QAAI,WAAU;kBAAd;SACE,kBAAC,GAAD;UAAW,OAAO,EAAE,yBAAyB,WAAW;UAAE,OAAO,EAAK;UAAY,CAAA;SAClF,kBAAC,GAAD;UACE,OAAO,EAAE,2BAA2B,aAAa;UACjD,OAAO,EAAK,cAAc,EAAE,mBAAmB,MAAM;UACrD,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,sBAAsB,QAAQ;UACvC,OAAO,EAAK,aAAa,EAAE,mBAAmB,MAAM;UACpD,CAAA;SACF,kBAAC,GAAD;UACE,OAAO,EAAE,sBAAsB,QAAQ;UACvC,OAAO,GAAG,EAAK,SAAS,GAAG,OAAO,EAAK,MAAM,CAAC,QAAQ,EAAE;UACxD,CAAA;SACC;UACK;;MACZ,kBAAC,GAAD;OAAa,OAAO,EAAE,2BAA2B,aAAa;iBAC5D,kBAAC,MAAD;QAAI,WAAU;mBACV,EAAK,cAAc,EAAE,EAAE,KAAK,MAC5B,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;OAAO,UAAU,EAAK,MAAM;OAAM,CAAA;MACzD;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,GAjFH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAE,8BAA8B,gBAAgB;GACvD,aAAa,EACX,oCACA,qDACD;GACD,CAAA;EA4EM,CAAA"}
|