@burdenoff/microfe-ggnomad 2026.825.1 → 2026.827.1

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.
Files changed (98) hide show
  1. package/dist/ggnomad/components/AvailabilityPanel.d.ts +15 -0
  2. package/dist/ggnomad/components/AvailabilityPanel.d.ts.map +1 -0
  3. package/dist/ggnomad/components/AvailabilityPanel.js +91 -0
  4. package/dist/ggnomad/components/AvailabilityPanel.js.map +1 -0
  5. package/dist/ggnomad/components/BookingPanel.d.ts +1 -3
  6. package/dist/ggnomad/components/BookingPanel.d.ts.map +1 -1
  7. package/dist/ggnomad/components/BookingPanel.js +91 -82
  8. package/dist/ggnomad/components/BookingPanel.js.map +1 -1
  9. package/dist/ggnomad/components/EcoAccessPanel.d.ts +17 -0
  10. package/dist/ggnomad/components/EcoAccessPanel.d.ts.map +1 -0
  11. package/dist/ggnomad/components/EcoAccessPanel.js +68 -0
  12. package/dist/ggnomad/components/EcoAccessPanel.js.map +1 -0
  13. package/dist/ggnomad/components/FactGrid.d.ts +18 -0
  14. package/dist/ggnomad/components/FactGrid.d.ts.map +1 -0
  15. package/dist/ggnomad/components/FactGrid.js +29 -0
  16. package/dist/ggnomad/components/FactGrid.js.map +1 -0
  17. package/dist/ggnomad/components/GroupTripPanel.d.ts +22 -0
  18. package/dist/ggnomad/components/GroupTripPanel.d.ts.map +1 -0
  19. package/dist/ggnomad/components/GroupTripPanel.js +350 -0
  20. package/dist/ggnomad/components/GroupTripPanel.js.map +1 -0
  21. package/dist/ggnomad/components/ListingFilters.d.ts +29 -0
  22. package/dist/ggnomad/components/ListingFilters.d.ts.map +1 -0
  23. package/dist/ggnomad/components/ListingFilters.js +164 -0
  24. package/dist/ggnomad/components/ListingFilters.js.map +1 -0
  25. package/dist/ggnomad/components/PhotoGallery.d.ts +15 -0
  26. package/dist/ggnomad/components/PhotoGallery.d.ts.map +1 -0
  27. package/dist/ggnomad/components/PhotoGallery.js +54 -0
  28. package/dist/ggnomad/components/PhotoGallery.js.map +1 -0
  29. package/dist/ggnomad/components/ProviderCard.d.ts +19 -0
  30. package/dist/ggnomad/components/ProviderCard.d.ts.map +1 -0
  31. package/dist/ggnomad/components/ProviderCard.js +66 -0
  32. package/dist/ggnomad/components/ProviderCard.js.map +1 -0
  33. package/dist/ggnomad/components/RatingSummary.d.ts +14 -0
  34. package/dist/ggnomad/components/RatingSummary.d.ts.map +1 -0
  35. package/dist/ggnomad/components/RatingSummary.js +32 -0
  36. package/dist/ggnomad/components/RatingSummary.js.map +1 -0
  37. package/dist/ggnomad/components/TagChips.d.ts +16 -0
  38. package/dist/ggnomad/components/TagChips.d.ts.map +1 -0
  39. package/dist/ggnomad/components/TagChips.js +20 -0
  40. package/dist/ggnomad/components/TagChips.js.map +1 -0
  41. package/dist/ggnomad/components/index.d.ts +13 -0
  42. package/dist/ggnomad/components/index.d.ts.map +1 -1
  43. package/dist/ggnomad/components/index.js +9 -0
  44. package/dist/ggnomad/graphql.d.ts +10 -0
  45. package/dist/ggnomad/graphql.d.ts.map +1 -1
  46. package/dist/ggnomad/graphql.js +308 -20
  47. package/dist/ggnomad/graphql.js.map +1 -1
  48. package/dist/ggnomad/pages/ActivityDetailsPage.d.ts.map +1 -1
  49. package/dist/ggnomad/pages/ActivityDetailsPage.js +174 -86
  50. package/dist/ggnomad/pages/ActivityDetailsPage.js.map +1 -1
  51. package/dist/ggnomad/pages/AnalyticsPage.d.ts.map +1 -1
  52. package/dist/ggnomad/pages/AnalyticsPage.js +109 -77
  53. package/dist/ggnomad/pages/AnalyticsPage.js.map +1 -1
  54. package/dist/ggnomad/pages/BookingsPage.d.ts.map +1 -1
  55. package/dist/ggnomad/pages/BookingsPage.js +188 -137
  56. package/dist/ggnomad/pages/BookingsPage.js.map +1 -1
  57. package/dist/ggnomad/pages/DashboardPage.d.ts.map +1 -1
  58. package/dist/ggnomad/pages/DashboardPage.js +245 -128
  59. package/dist/ggnomad/pages/DashboardPage.js.map +1 -1
  60. package/dist/ggnomad/pages/EntertainmentPage.d.ts.map +1 -1
  61. package/dist/ggnomad/pages/EntertainmentPage.js +115 -53
  62. package/dist/ggnomad/pages/EntertainmentPage.js.map +1 -1
  63. package/dist/ggnomad/pages/EventDetailsPage.d.ts.map +1 -1
  64. package/dist/ggnomad/pages/EventDetailsPage.js +170 -87
  65. package/dist/ggnomad/pages/EventDetailsPage.js.map +1 -1
  66. package/dist/ggnomad/pages/FavoritesPage.d.ts.map +1 -1
  67. package/dist/ggnomad/pages/FavoritesPage.js +201 -84
  68. package/dist/ggnomad/pages/FavoritesPage.js.map +1 -1
  69. package/dist/ggnomad/pages/HospitalityPage.d.ts.map +1 -1
  70. package/dist/ggnomad/pages/HospitalityPage.js +99 -56
  71. package/dist/ggnomad/pages/HospitalityPage.js.map +1 -1
  72. package/dist/ggnomad/pages/PropertyDetailsPage.d.ts.map +1 -1
  73. package/dist/ggnomad/pages/PropertyDetailsPage.js +177 -93
  74. package/dist/ggnomad/pages/PropertyDetailsPage.js.map +1 -1
  75. package/dist/ggnomad/pages/ProviderPage.d.ts.map +1 -1
  76. package/dist/ggnomad/pages/ProviderPage.js +112 -63
  77. package/dist/ggnomad/pages/ProviderPage.js.map +1 -1
  78. package/dist/ggnomad/pages/SearchPage.d.ts.map +1 -1
  79. package/dist/ggnomad/pages/SearchPage.js +236 -65
  80. package/dist/ggnomad/pages/SearchPage.js.map +1 -1
  81. package/dist/ggnomad/pages/TourDetailsPage.d.ts.map +1 -1
  82. package/dist/ggnomad/pages/TourDetailsPage.js +171 -86
  83. package/dist/ggnomad/pages/TourDetailsPage.js.map +1 -1
  84. package/dist/ggnomad/pages/TourismPage.d.ts.map +1 -1
  85. package/dist/ggnomad/pages/TourismPage.js +108 -54
  86. package/dist/ggnomad/pages/TourismPage.js.map +1 -1
  87. package/dist/ggnomad/pages/TravelPage.d.ts.map +1 -1
  88. package/dist/ggnomad/pages/TravelPage.js +406 -43
  89. package/dist/ggnomad/pages/TravelPage.js.map +1 -1
  90. package/dist/ggnomad/pages/TripPlanDetailPage.d.ts.map +1 -1
  91. package/dist/ggnomad/pages/TripPlanDetailPage.js +93 -70
  92. package/dist/ggnomad/pages/TripPlanDetailPage.js.map +1 -1
  93. package/dist/ggnomad/utils/format.d.ts +47 -0
  94. package/dist/ggnomad/utils/format.d.ts.map +1 -0
  95. package/dist/ggnomad/utils/format.js +125 -0
  96. package/dist/ggnomad/utils/format.js.map +1 -0
  97. package/dist/stories/BookingPanel.stories.d.ts.map +1 -1
  98. package/package.json +1 -1
@@ -1,31 +1,32 @@
1
1
  import { GGNOMAD_OVERVIEW_QUERY as e } from "../graphql.js";
2
- import { PageShell as t } from "./PageShell.js";
3
- import { StatCard as n } from "../components/StatCard.js";
4
- import { SectionCard as r } from "../components/SectionCard.js";
2
+ import { parseNamedCounts as t } from "../utils/format.js";
3
+ import { PageShell as n } from "./PageShell.js";
4
+ import { StatCard as r } from "../components/StatCard.js";
5
+ import { SectionCard as i } from "../components/SectionCard.js";
5
6
  import "../components/index.js";
6
- import { useMemo as i } from "react";
7
- import { BarChart3 as a, CalendarCheck as o, DollarSign as s, Percent as c, Users as l } from "lucide-react";
8
- import { useI18n as u } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
9
- import { useQuery as d } from "@apollo/client/react";
10
- import { EmphasisPanel as f, PagePurpose as p } from "@burdenoff/fe-libs/ui";
11
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
7
+ import { useMemo as a } from "react";
8
+ import { BarChart3 as o, CalendarCheck as s, DollarSign as c, MapPin as l, Percent as u, Users as d } from "lucide-react";
9
+ import { useI18n as f } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
+ import { useQuery as p } from "@apollo/client/react";
11
+ import { EmphasisPanel as m, PagePurpose as h } from "@burdenoff/fe-libs/ui";
12
+ import { jsx as g, jsxs as _ } from "react/jsx-runtime";
12
13
  //#region src/ggnomad/pages/AnalyticsPage.tsx
13
- var g = [
14
+ var v = [
14
15
  "var(--color-chart-1)",
15
16
  "var(--color-chart-2)",
16
17
  "var(--color-chart-3)",
17
18
  "var(--color-chart-4)",
18
19
  "var(--color-chart-5)"
19
- ], _ = (e) => e.replace(/[_-]+/g, " ").trim().replace(/\b\w/g, (e) => e.toUpperCase()) || e;
20
- function v() {
21
- let { t: v } = u(), { data: y } = d(e), b = y?.ggnomadAnalytics, x = i(() => {
22
- let e = b?.revenueByCategory ?? {};
20
+ ], y = (e) => e.replace(/[_-]+/g, " ").trim().replace(/\b\w/g, (e) => e.toUpperCase()) || e;
21
+ function b() {
22
+ let { t: b } = f(), { data: x } = p(e), S = x?.ggnomadAnalytics, C = a(() => {
23
+ let e = S?.revenueByCategory ?? {};
23
24
  return Object.entries(e).map(([e, t]) => ({
24
- label: _(e),
25
+ label: y(e),
25
26
  value: Number(t)
26
27
  })).filter((e) => Number.isFinite(e.value) && e.value > 0).sort((e, t) => t.value - e.value);
27
- }, [b?.revenueByCategory]), S = x.length > 0 ? x[0].value : 0, C = i(() => {
28
- let e = b?.monthlyTrends;
28
+ }, [S?.revenueByCategory]), w = C.length > 0 ? C[0].value : 0, T = a(() => {
29
+ let e = S?.monthlyTrends;
29
30
  return e ? Array.isArray(e) ? e.map((e) => ({
30
31
  label: e.month || "",
31
32
  value: Number(e.revenue || 0)
@@ -33,119 +34,150 @@ function v() {
33
34
  label: e,
34
35
  value: Number(t)
35
36
  })).filter((e) => Number.isFinite(e.value)) : [];
36
- }, [b?.monthlyTrends]), w = C.length > 0 ? Math.max(...C.map((e) => e.value)) : 0;
37
- return /* @__PURE__ */ h(t, {
38
- title: v("ggnomad.analytics.title", "Analytics"),
39
- titleAccent: v("ggnomad.analytics.title.accent", "Analytics"),
40
- subtitle: v("ggnomad.analytics.subtitle", "GGNomad performance and growth analytics"),
37
+ }, [S?.monthlyTrends]), E = T.length > 0 ? Math.max(...T.map((e) => e.value)) : 0, D = a(() => t(S?.topDestinations).sort((e, t) => t.value - e.value).slice(0, 10), [S?.topDestinations]), O = D.length > 0 ? D[0].value : 0;
38
+ return /* @__PURE__ */ _(n, {
39
+ title: b("ggnomad.analytics.title", "Analytics"),
40
+ titleAccent: b("ggnomad.analytics.title.accent", "Analytics"),
41
+ subtitle: b("ggnomad.analytics.subtitle", "GGNomad performance and growth analytics"),
41
42
  children: [
42
- /* @__PURE__ */ m(p, {
43
- icon: /* @__PURE__ */ m(a, { className: "size-4" }),
44
- children: v("ggnomad.analytics.purpose", "Understand how the marketplace is performing — total revenue, bookings, active users and conversion rate at a glance, with a category breakdown to see which domains (stays, tours, events) are driving growth.")
43
+ /* @__PURE__ */ g(h, {
44
+ icon: /* @__PURE__ */ g(o, { className: "size-4" }),
45
+ children: b("ggnomad.analytics.purpose", "Understand how the marketplace is performing — total revenue, bookings, active users and conversion rate at a glance, with a category breakdown to see which domains (stays, tours, events) are driving growth.")
45
46
  }),
46
- /* @__PURE__ */ h(f, { children: [/* @__PURE__ */ m("p", {
47
+ /* @__PURE__ */ _(m, { children: [/* @__PURE__ */ g("p", {
47
48
  className: "text-sm text-text-secondary",
48
- children: v("ggnomad.analytics.totalRevenue", "Total revenue")
49
- }), /* @__PURE__ */ h("p", {
49
+ children: b("ggnomad.analytics.totalRevenue", "Total revenue")
50
+ }), /* @__PURE__ */ _("p", {
50
51
  className: "mt-1 text-3xl font-semibold tabular-nums text-text-primary",
51
- children: ["$", Number(b?.totalRevenue ?? 0).toLocaleString()]
52
+ children: ["$", Number(S?.totalRevenue ?? 0).toLocaleString()]
52
53
  })] }),
53
- /* @__PURE__ */ h("section", {
54
+ /* @__PURE__ */ _("section", {
54
55
  className: "grid gap-4 sm:grid-cols-2 xl:grid-cols-4",
55
56
  children: [
56
- /* @__PURE__ */ m(n, {
57
+ /* @__PURE__ */ g(r, {
57
58
  hero: !0,
58
- label: v("ggnomad.analytics.conversion", "Conversion"),
59
- value: `${Number(b?.conversionRate ?? 0).toFixed(2)}%`,
60
- icon: /* @__PURE__ */ m(c, {})
59
+ label: b("ggnomad.analytics.conversion", "Conversion"),
60
+ value: `${Number(S?.conversionRate ?? 0).toFixed(2)}%`,
61
+ icon: /* @__PURE__ */ g(u, {})
61
62
  }),
62
- /* @__PURE__ */ m(n, {
63
- label: v("ggnomad.analytics.revenue", "Revenue"),
64
- value: `$${Number(b?.totalRevenue ?? 0).toLocaleString()}`,
65
- icon: /* @__PURE__ */ m(s, {})
63
+ /* @__PURE__ */ g(r, {
64
+ label: b("ggnomad.analytics.revenue", "Revenue"),
65
+ value: `$${Number(S?.totalRevenue ?? 0).toLocaleString()}`,
66
+ icon: /* @__PURE__ */ g(c, {})
66
67
  }),
67
- /* @__PURE__ */ m(n, {
68
- label: v("ggnomad.analytics.bookings", "Bookings"),
69
- value: Number(b?.totalBookings ?? 0).toLocaleString(),
70
- icon: /* @__PURE__ */ m(o, {})
68
+ /* @__PURE__ */ g(r, {
69
+ label: b("ggnomad.analytics.bookings", "Bookings"),
70
+ value: Number(S?.totalBookings ?? 0).toLocaleString(),
71
+ icon: /* @__PURE__ */ g(s, {})
71
72
  }),
72
- /* @__PURE__ */ m(n, {
73
- label: v("ggnomad.analytics.users", "Users"),
74
- value: Number(b?.totalUsers ?? 0).toLocaleString(),
75
- icon: /* @__PURE__ */ m(l, {})
73
+ /* @__PURE__ */ g(r, {
74
+ label: b("ggnomad.analytics.users", "Users"),
75
+ value: Number(S?.totalUsers ?? 0).toLocaleString(),
76
+ icon: /* @__PURE__ */ g(d, {})
76
77
  })
77
78
  ]
78
79
  }),
79
- /* @__PURE__ */ m(r, {
80
- title: v("ggnomad.analytics.revenueByCategory", "Revenue by category"),
81
- children: x.length === 0 ? /* @__PURE__ */ h("div", {
80
+ /* @__PURE__ */ g(i, {
81
+ title: b("ggnomad.analytics.revenueByCategory", "Revenue by category"),
82
+ children: C.length === 0 ? /* @__PURE__ */ _("div", {
82
83
  className: "flex flex-col items-center gap-2 py-8 text-center",
83
84
  children: [
84
- /* @__PURE__ */ m("span", {
85
+ /* @__PURE__ */ g("span", {
85
86
  className: "flex size-10 items-center justify-center rounded-full bg-[var(--color-accent-soft)] text-text-secondary",
86
- children: /* @__PURE__ */ m(a, { className: "size-5" })
87
+ children: /* @__PURE__ */ g(o, { className: "size-5" })
87
88
  }),
88
- /* @__PURE__ */ m("p", {
89
+ /* @__PURE__ */ g("p", {
89
90
  className: "text-sm font-medium text-text-primary",
90
- children: v("ggnomad.analytics.empty.title", "No analytics yet")
91
+ children: b("ggnomad.analytics.empty.title", "No analytics yet")
91
92
  }),
92
- /* @__PURE__ */ m("p", {
93
+ /* @__PURE__ */ g("p", {
93
94
  className: "max-w-sm text-sm text-text-secondary",
94
- children: v("ggnomad.analytics.empty.description", "Revenue by category appears here as bookings come in across stays, tours and events.")
95
+ children: b("ggnomad.analytics.empty.description", "Revenue by category appears here as bookings come in across stays, tours and events.")
95
96
  })
96
97
  ]
97
- }) : /* @__PURE__ */ m("ul", {
98
+ }) : /* @__PURE__ */ g("ul", {
98
99
  className: "flex flex-col gap-4",
99
- children: x.map((e, t) => {
100
- let n = S > 0 ? Math.max(e.value / S * 100, 2) : 0;
101
- return /* @__PURE__ */ h("li", { children: [/* @__PURE__ */ h("div", {
100
+ children: C.map((e, t) => {
101
+ let n = w > 0 ? Math.max(e.value / w * 100, 2) : 0;
102
+ return /* @__PURE__ */ _("li", { children: [/* @__PURE__ */ _("div", {
102
103
  className: "flex items-baseline justify-between gap-3",
103
- children: [/* @__PURE__ */ m("span", {
104
+ children: [/* @__PURE__ */ g("span", {
104
105
  className: "truncate text-sm font-medium text-text-primary",
105
106
  children: e.label
106
- }), /* @__PURE__ */ h("span", {
107
+ }), /* @__PURE__ */ _("span", {
107
108
  className: "flex-shrink-0 text-sm tabular-nums text-text-secondary",
108
109
  children: ["$", e.value.toLocaleString()]
109
110
  })]
110
- }), /* @__PURE__ */ m("div", {
111
+ }), /* @__PURE__ */ g("div", {
111
112
  className: "mt-1.5 h-2.5 w-full overflow-hidden rounded-full bg-bg-sunken",
112
- children: /* @__PURE__ */ m("div", {
113
+ children: /* @__PURE__ */ g("div", {
113
114
  className: "h-full rounded-full transition-[width] duration-500 ease-out",
114
115
  style: {
115
116
  width: `${n}%`,
116
- backgroundColor: g[t % g.length]
117
+ backgroundColor: v[t % v.length]
117
118
  }
118
119
  })
119
120
  })] }, e.label);
120
121
  })
121
122
  })
122
123
  }),
123
- C.length > 0 && /* @__PURE__ */ m(r, {
124
- title: v("ggnomad.analytics.revenueTrend", "Revenue trend"),
125
- children: /* @__PURE__ */ h("div", {
124
+ D.length > 0 && /* @__PURE__ */ g(i, {
125
+ title: b("ggnomad.analytics.topDestinations", "Top destinations"),
126
+ children: /* @__PURE__ */ g("ul", {
126
127
  className: "flex flex-col gap-4",
127
- children: [/* @__PURE__ */ m("div", {
128
+ children: D.map((e, t) => {
129
+ let n = O > 0 ? Math.max(e.value / O * 100, 2) : 0;
130
+ return /* @__PURE__ */ _("li", { children: [/* @__PURE__ */ _("div", {
131
+ className: "flex items-baseline justify-between gap-3",
132
+ children: [/* @__PURE__ */ _("span", {
133
+ className: "inline-flex min-w-0 items-center gap-1.5 truncate text-sm font-medium text-text-primary",
134
+ children: [/* @__PURE__ */ g(l, {
135
+ className: "size-3.5 flex-shrink-0 text-text-secondary",
136
+ "aria-hidden": "true"
137
+ }), e.label]
138
+ }), /* @__PURE__ */ g("span", {
139
+ className: "flex-shrink-0 text-sm tabular-nums text-text-secondary",
140
+ children: e.value.toLocaleString()
141
+ })]
142
+ }), /* @__PURE__ */ g("div", {
143
+ className: "mt-1.5 h-2.5 w-full overflow-hidden rounded-full bg-bg-sunken",
144
+ children: /* @__PURE__ */ g("div", {
145
+ className: "h-full rounded-full transition-[width] duration-500 ease-out",
146
+ style: {
147
+ width: `${n}%`,
148
+ backgroundColor: v[t % v.length]
149
+ }
150
+ })
151
+ })] }, e.label);
152
+ })
153
+ })
154
+ }),
155
+ T.length > 0 && /* @__PURE__ */ g(i, {
156
+ title: b("ggnomad.analytics.revenueTrend", "Revenue trend"),
157
+ children: /* @__PURE__ */ _("div", {
158
+ className: "flex flex-col gap-4",
159
+ children: [/* @__PURE__ */ g("div", {
128
160
  className: "flex items-end gap-2 overflow-x-auto pb-2",
129
- children: C.map((e, t) => /* @__PURE__ */ h("div", {
161
+ children: T.map((e, t) => /* @__PURE__ */ _("div", {
130
162
  className: "flex flex-col items-center gap-1",
131
- children: [/* @__PURE__ */ m("div", {
163
+ children: [/* @__PURE__ */ g("div", {
132
164
  className: "flex h-24 items-end",
133
- children: /* @__PURE__ */ m("div", {
165
+ children: /* @__PURE__ */ g("div", {
134
166
  className: "w-8 rounded-t transition-all duration-500 ease-out",
135
167
  style: {
136
- height: `${w > 0 ? Math.max(e.value / w * 100, 5) : 5}%`,
137
- backgroundColor: g[t % g.length]
168
+ height: `${E > 0 ? Math.max(e.value / E * 100, 5) : 5}%`,
169
+ backgroundColor: v[t % v.length]
138
170
  },
139
171
  title: `${e.label}: $${e.value.toLocaleString()}`
140
172
  })
141
- }), /* @__PURE__ */ m("p", {
173
+ }), /* @__PURE__ */ g("p", {
142
174
  className: "truncate text-xs text-text-secondary",
143
175
  children: e.label
144
176
  })]
145
177
  }, e.label))
146
- }), /* @__PURE__ */ m("p", {
178
+ }), /* @__PURE__ */ g("p", {
147
179
  className: "text-xs text-text-secondary",
148
- children: v("ggnomad.analytics.trendNote", "Revenue trends over time showing performance across all domains.")
180
+ children: b("ggnomad.analytics.trendNote", "Revenue trends over time showing performance across all domains.")
149
181
  })]
150
182
  })
151
183
  })
@@ -153,6 +185,6 @@ function v() {
153
185
  });
154
186
  }
155
187
  //#endregion
156
- export { v as AnalyticsPage };
188
+ export { b as AnalyticsPage };
157
189
 
158
190
  //# sourceMappingURL=AnalyticsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AnalyticsPage.js","names":[],"sources":["../../../src/ggnomad/pages/AnalyticsPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { BarChart3, CalendarCheck, DollarSign, Percent, Users } from 'lucide-react';\nimport { EmphasisPanel, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_OVERVIEW_QUERY } from '../graphql';\nimport { PageShell } from './PageShell';\nimport { SectionCard, StatCard } from '../components';\n\nconst CHART_COLORS = [\n 'var(--color-chart-1)',\n 'var(--color-chart-2)',\n 'var(--color-chart-3)',\n 'var(--color-chart-4)',\n 'var(--color-chart-5)',\n];\n\nconst humanizeCategory = (key: string): string =>\n key\n .replace(/[_-]+/g, ' ')\n .trim()\n .replace(/\\b\\w/g, (char) => char.toUpperCase()) || key;\n\nexport function AnalyticsPage() {\n const { t } = useI18n();\n const { data } = useQuery(\n GGNOMAD_OVERVIEW_QUERY as TypedDocumentNode<\n {\n ggnomadAnalytics: {\n totalRevenue: number;\n totalBookings: number;\n totalUsers: number;\n conversionRate: number;\n revenueByCategory: Record<string, unknown>;\n monthlyTrends?: Array<{ month: string; revenue: number }> | Record<string, number>;\n };\n },\n Record<string, never>\n >\n );\n const analytics = data?.ggnomadAnalytics;\n\n const categories = useMemo(() => {\n const raw = analytics?.revenueByCategory ?? {};\n return Object.entries(raw)\n .map(([key, value]) => ({ label: humanizeCategory(key), value: Number(value) }))\n .filter((entry) => Number.isFinite(entry.value) && entry.value > 0)\n .sort((a, b) => b.value - a.value);\n }, [analytics?.revenueByCategory]);\n\n const maxCategory = categories.length > 0 ? categories[0].value : 0;\n\n const trends = useMemo(() => {\n const raw = analytics?.monthlyTrends;\n if (!raw) return [];\n if (Array.isArray(raw)) {\n return raw\n .map((entry) => ({\n label: entry.month || '',\n value: Number(entry.revenue || 0),\n }))\n .filter((entry) => Number.isFinite(entry.value) && entry.label);\n }\n return Object.entries(raw)\n .map(([key, value]) => ({\n label: key,\n value: Number(value),\n }))\n .filter((entry) => Number.isFinite(entry.value));\n }, [analytics?.monthlyTrends]);\n\n const maxTrend = trends.length > 0 ? Math.max(...trends.map((t) => t.value)) : 0;\n\n return (\n <PageShell\n title={t('ggnomad.analytics.title', 'Analytics')}\n titleAccent={t('ggnomad.analytics.title.accent', 'Analytics')}\n subtitle={t('ggnomad.analytics.subtitle', 'GGNomad performance and growth analytics')}\n >\n <PagePurpose icon={<BarChart3 className=\"size-4\" />}>\n {t(\n 'ggnomad.analytics.purpose',\n 'Understand how the marketplace is performing — total revenue, bookings, active users and conversion rate at a glance, with a category breakdown to see which domains (stays, tours, events) are driving growth.'\n )}\n </PagePurpose>\n\n <EmphasisPanel>\n <p className=\"text-sm text-text-secondary\">\n {t('ggnomad.analytics.totalRevenue', 'Total revenue')}\n </p>\n <p className=\"mt-1 text-3xl font-semibold tabular-nums text-text-primary\">\n ${Number(analytics?.totalRevenue ?? 0).toLocaleString()}\n </p>\n </EmphasisPanel>\n\n <section className=\"grid gap-4 sm:grid-cols-2 xl:grid-cols-4\">\n <StatCard\n hero\n label={t('ggnomad.analytics.conversion', 'Conversion')}\n value={`${Number(analytics?.conversionRate ?? 0).toFixed(2)}%`}\n icon={<Percent />}\n />\n <StatCard\n label={t('ggnomad.analytics.revenue', 'Revenue')}\n value={`$${Number(analytics?.totalRevenue ?? 0).toLocaleString()}`}\n icon={<DollarSign />}\n />\n <StatCard\n label={t('ggnomad.analytics.bookings', 'Bookings')}\n value={Number(analytics?.totalBookings ?? 0).toLocaleString()}\n icon={<CalendarCheck />}\n />\n <StatCard\n label={t('ggnomad.analytics.users', 'Users')}\n value={Number(analytics?.totalUsers ?? 0).toLocaleString()}\n icon={<Users />}\n />\n </section>\n\n <SectionCard title={t('ggnomad.analytics.revenueByCategory', 'Revenue by category')}>\n {categories.length === 0 ? (\n <div className=\"flex flex-col items-center gap-2 py-8 text-center\">\n <span className=\"flex size-10 items-center justify-center rounded-full bg-[var(--color-accent-soft)] text-text-secondary\">\n <BarChart3 className=\"size-5\" />\n </span>\n <p className=\"text-sm font-medium text-text-primary\">\n {t('ggnomad.analytics.empty.title', 'No analytics yet')}\n </p>\n <p className=\"max-w-sm text-sm text-text-secondary\">\n {t(\n 'ggnomad.analytics.empty.description',\n 'Revenue by category appears here as bookings come in across stays, tours and events.'\n )}\n </p>\n </div>\n ) : (\n <ul className=\"flex flex-col gap-4\">\n {categories.map((category, index) => {\n const pct = maxCategory > 0 ? Math.max((category.value / maxCategory) * 100, 2) : 0;\n return (\n <li key={category.label}>\n <div className=\"flex items-baseline justify-between gap-3\">\n <span className=\"truncate text-sm font-medium text-text-primary\">\n {category.label}\n </span>\n <span className=\"flex-shrink-0 text-sm tabular-nums text-text-secondary\">\n ${category.value.toLocaleString()}\n </span>\n </div>\n <div className=\"mt-1.5 h-2.5 w-full overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full transition-[width] duration-500 ease-out\"\n style={{\n width: `${pct}%`,\n backgroundColor: CHART_COLORS[index % CHART_COLORS.length],\n }}\n />\n </div>\n </li>\n );\n })}\n </ul>\n )}\n </SectionCard>\n\n {trends.length > 0 && (\n <SectionCard title={t('ggnomad.analytics.revenueTrend', 'Revenue trend')}>\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex items-end gap-2 overflow-x-auto pb-2\">\n {trends.map((trend, index) => {\n const pct = maxTrend > 0 ? Math.max((trend.value / maxTrend) * 100, 5) : 5;\n return (\n <div key={trend.label} className=\"flex flex-col items-center gap-1\">\n <div className=\"flex h-24 items-end\">\n <div\n className=\"w-8 rounded-t transition-all duration-500 ease-out\"\n style={{\n height: `${pct}%`,\n backgroundColor: CHART_COLORS[index % CHART_COLORS.length],\n }}\n title={`${trend.label}: $${trend.value.toLocaleString()}`}\n />\n </div>\n <p className=\"truncate text-xs text-text-secondary\">{trend.label}</p>\n </div>\n );\n })}\n </div>\n <p className=\"text-xs text-text-secondary\">\n {t(\n 'ggnomad.analytics.trendNote',\n 'Revenue trends over time showing performance across all domains.'\n )}\n </p>\n </div>\n </SectionCard>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAWA,IAAM,IAAe;CACnB;CACA;CACA;CACA;CACA;AACF,GAEM,KAAoB,MACxB,EACG,QAAQ,UAAU,GAAG,EACrB,KAAK,EACL,QAAQ,UAAU,MAAS,EAAK,YAAY,CAAC,KAAK;AAEvD,SAAgB,IAAgB;CAC9B,IAAM,EAAE,SAAM,EAAQ,GAChB,EAAE,YAAS,EACf,CAaF,GACM,IAAY,GAAM,kBAElB,IAAa,QAAc;EAC/B,IAAM,IAAM,GAAW,qBAAqB,CAAC;EAC7C,OAAO,OAAO,QAAQ,CAAG,EACtB,KAAK,CAAC,GAAK,QAAY;GAAE,OAAO,EAAiB,CAAG;GAAG,OAAO,OAAO,CAAK;EAAE,EAAE,EAC9E,QAAQ,MAAU,OAAO,SAAS,EAAM,KAAK,KAAK,EAAM,QAAQ,CAAC,EACjE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;CACrC,GAAG,CAAC,GAAW,iBAAiB,CAAC,GAE3B,IAAc,EAAW,SAAS,IAAI,EAAW,GAAG,QAAQ,GAE5D,IAAS,QAAc;EAC3B,IAAM,IAAM,GAAW;EAUvB,OATK,IACD,MAAM,QAAQ,CAAG,IACZ,EACJ,KAAK,OAAW;GACf,OAAO,EAAM,SAAS;GACtB,OAAO,OAAO,EAAM,WAAW,CAAC;EAClC,EAAE,EACD,QAAQ,MAAU,OAAO,SAAS,EAAM,KAAK,KAAK,EAAM,KAAK,IAE3D,OAAO,QAAQ,CAAG,EACtB,KAAK,CAAC,GAAK,QAAY;GACtB,OAAO;GACP,OAAO,OAAO,CAAK;EACrB,EAAE,EACD,QAAQ,MAAU,OAAO,SAAS,EAAM,KAAK,CAAC,IAdhC,CAAC;CAepB,GAAG,CAAC,GAAW,aAAa,CAAC,GAEvB,IAAW,EAAO,SAAS,IAAI,KAAK,IAAI,GAAG,EAAO,KAAK,MAAM,EAAE,KAAK,CAAC,IAAI;CAE/E,OACE,kBAAC,GAAD;EACE,OAAO,EAAE,2BAA2B,WAAW;EAC/C,aAAa,EAAE,kCAAkC,WAAW;EAC5D,UAAU,EAAE,8BAA8B,0CAA0C;YAHtF;GAKE,kBAAC,GAAD;IAAa,MAAM,kBAAC,GAAD,EAAW,WAAU,SAAU,CAAA;cAC/C,EACC,6BACA,iNACF;GACW,CAAA;GAEb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,KAAD;IAAG,WAAU;cACV,EAAE,kCAAkC,eAAe;GACnD,CAAA,GACH,kBAAC,KAAD;IAAG,WAAU;cAAb,CAA0E,KACtE,OAAO,GAAW,gBAAgB,CAAC,EAAE,eAAe,CACrD;KACU,EAAA,CAAA;GAEf,kBAAC,WAAD;IAAS,WAAU;cAAnB;KACE,kBAAC,GAAD;MACE,MAAA;MACA,OAAO,EAAE,gCAAgC,YAAY;MACrD,OAAO,GAAG,OAAO,GAAW,kBAAkB,CAAC,EAAE,QAAQ,CAAC,EAAE;MAC5D,MAAM,kBAAC,GAAD,CAAU,CAAA;KACjB,CAAA;KACD,kBAAC,GAAD;MACE,OAAO,EAAE,6BAA6B,SAAS;MAC/C,OAAO,IAAI,OAAO,GAAW,gBAAgB,CAAC,EAAE,eAAe;MAC/D,MAAM,kBAAC,GAAD,CAAa,CAAA;KACpB,CAAA;KACD,kBAAC,GAAD;MACE,OAAO,EAAE,8BAA8B,UAAU;MACjD,OAAO,OAAO,GAAW,iBAAiB,CAAC,EAAE,eAAe;MAC5D,MAAM,kBAAC,GAAD,CAAgB,CAAA;KACvB,CAAA;KACD,kBAAC,GAAD;MACE,OAAO,EAAE,2BAA2B,OAAO;MAC3C,OAAO,OAAO,GAAW,cAAc,CAAC,EAAE,eAAe;MACzD,MAAM,kBAAC,GAAD,CAAQ,CAAA;KACf,CAAA;IACM;;GAET,kBAAC,GAAD;IAAa,OAAO,EAAE,uCAAuC,qBAAqB;cAC/E,EAAW,WAAW,IACrB,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,QAAD;OAAM,WAAU;iBACd,kBAAC,GAAD,EAAW,WAAU,SAAU,CAAA;MAC3B,CAAA;MACN,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAE,iCAAiC,kBAAkB;MACrD,CAAA;MACH,kBAAC,KAAD;OAAG,WAAU;iBACV,EACC,uCACA,sFACF;MACC,CAAA;KACA;SAEL,kBAAC,MAAD;KAAI,WAAU;eACX,EAAW,KAAK,GAAU,MAAU;MACnC,IAAM,IAAM,IAAc,IAAI,KAAK,IAAK,EAAS,QAAQ,IAAe,KAAK,CAAC,IAAI;MAClF,OACE,kBAAC,MAAD,EAAA,UAAA,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBACb,EAAS;OACN,CAAA,GACN,kBAAC,QAAD;QAAM,WAAU;kBAAhB,CAAyE,KACrE,EAAS,MAAM,eAAe,CAC5B;SACH;UACL,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,OAAD;QACE,WAAU;QACV,OAAO;SACL,OAAO,GAAG,EAAI;SACd,iBAAiB,EAAa,IAAQ,EAAa;QACrD;OACD,CAAA;MACE,CAAA,CACH,EAAA,GAlBK,EAAS,KAkBd;KAER,CAAC;IACC,CAAA;GAEK,CAAA;GAEZ,EAAO,SAAS,KACf,kBAAC,GAAD;IAAa,OAAO,EAAE,kCAAkC,eAAe;cACrE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAO,KAAK,GAAO,MAGhB,kBAAC,OAAD;OAAuB,WAAU;iBAAjC,CACE,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,OAAD;SACE,WAAU;SACV,OAAO;UACL,QAAQ,GAPN,IAAW,IAAI,KAAK,IAAK,EAAM,QAAQ,IAAY,KAAK,CAAC,IAAI,EAOhD;UACf,iBAAiB,EAAa,IAAQ,EAAa;SACrD;SACA,OAAO,GAAG,EAAM,MAAM,KAAK,EAAM,MAAM,eAAe;QACvD,CAAA;OACE,CAAA,GACL,kBAAC,KAAD;QAAG,WAAU;kBAAwC,EAAM;OAAS,CAAA,CACjE;SAZK,EAAM,KAYX,CAER;KACE,CAAA,GACL,kBAAC,KAAD;MAAG,WAAU;gBACV,EACC,+BACA,kEACF;KACC,CAAA,CACA;;GACM,CAAA;EAEN;;AAEf"}
1
+ {"version":3,"file":"AnalyticsPage.js","names":[],"sources":["../../../src/ggnomad/pages/AnalyticsPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useQuery } from '@apollo/client/react';\nimport type { TypedDocumentNode } from '@apollo/client';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { BarChart3, CalendarCheck, DollarSign, MapPin, Percent, Users } from 'lucide-react';\nimport { EmphasisPanel, PagePurpose } from '@burdenoff/fe-libs/ui';\n\nimport { GGNOMAD_OVERVIEW_QUERY } from '../graphql';\nimport { parseNamedCounts } from '../utils/format';\nimport { PageShell } from './PageShell';\nimport { SectionCard, StatCard } from '../components';\n\nconst CHART_COLORS = [\n 'var(--color-chart-1)',\n 'var(--color-chart-2)',\n 'var(--color-chart-3)',\n 'var(--color-chart-4)',\n 'var(--color-chart-5)',\n];\n\nconst humanizeCategory = (key: string): string =>\n key\n .replace(/[_-]+/g, ' ')\n .trim()\n .replace(/\\b\\w/g, (char) => char.toUpperCase()) || key;\n\nexport function AnalyticsPage() {\n const { t } = useI18n();\n const { data } = useQuery(\n GGNOMAD_OVERVIEW_QUERY as TypedDocumentNode<\n {\n ggnomadAnalytics: {\n totalRevenue: number;\n totalBookings: number;\n totalUsers: number;\n conversionRate: number;\n revenueByCategory: Record<string, unknown>;\n monthlyTrends?: Array<{ month: string; revenue: number }> | Record<string, number>;\n topDestinations?: unknown;\n };\n },\n Record<string, never>\n >\n );\n const analytics = data?.ggnomadAnalytics;\n\n const categories = useMemo(() => {\n const raw = analytics?.revenueByCategory ?? {};\n return Object.entries(raw)\n .map(([key, value]) => ({ label: humanizeCategory(key), value: Number(value) }))\n .filter((entry) => Number.isFinite(entry.value) && entry.value > 0)\n .sort((a, b) => b.value - a.value);\n }, [analytics?.revenueByCategory]);\n\n const maxCategory = categories.length > 0 ? categories[0].value : 0;\n\n const trends = useMemo(() => {\n const raw = analytics?.monthlyTrends;\n if (!raw) return [];\n if (Array.isArray(raw)) {\n return raw\n .map((entry) => ({\n label: entry.month || '',\n value: Number(entry.revenue || 0),\n }))\n .filter((entry) => Number.isFinite(entry.value) && entry.label);\n }\n return Object.entries(raw)\n .map(([key, value]) => ({\n label: key,\n value: Number(value),\n }))\n .filter((entry) => Number.isFinite(entry.value));\n }, [analytics?.monthlyTrends]);\n\n const maxTrend = trends.length > 0 ? Math.max(...trends.map((t) => t.value)) : 0;\n\n const destinations = useMemo(\n () =>\n parseNamedCounts(analytics?.topDestinations)\n .sort((a, b) => b.value - a.value)\n .slice(0, 10),\n [analytics?.topDestinations]\n );\n const maxDestination = destinations.length > 0 ? destinations[0].value : 0;\n\n return (\n <PageShell\n title={t('ggnomad.analytics.title', 'Analytics')}\n titleAccent={t('ggnomad.analytics.title.accent', 'Analytics')}\n subtitle={t('ggnomad.analytics.subtitle', 'GGNomad performance and growth analytics')}\n >\n <PagePurpose icon={<BarChart3 className=\"size-4\" />}>\n {t(\n 'ggnomad.analytics.purpose',\n 'Understand how the marketplace is performing — total revenue, bookings, active users and conversion rate at a glance, with a category breakdown to see which domains (stays, tours, events) are driving growth.'\n )}\n </PagePurpose>\n\n <EmphasisPanel>\n <p className=\"text-sm text-text-secondary\">\n {t('ggnomad.analytics.totalRevenue', 'Total revenue')}\n </p>\n <p className=\"mt-1 text-3xl font-semibold tabular-nums text-text-primary\">\n ${Number(analytics?.totalRevenue ?? 0).toLocaleString()}\n </p>\n </EmphasisPanel>\n\n <section className=\"grid gap-4 sm:grid-cols-2 xl:grid-cols-4\">\n <StatCard\n hero\n label={t('ggnomad.analytics.conversion', 'Conversion')}\n value={`${Number(analytics?.conversionRate ?? 0).toFixed(2)}%`}\n icon={<Percent />}\n />\n <StatCard\n label={t('ggnomad.analytics.revenue', 'Revenue')}\n value={`$${Number(analytics?.totalRevenue ?? 0).toLocaleString()}`}\n icon={<DollarSign />}\n />\n <StatCard\n label={t('ggnomad.analytics.bookings', 'Bookings')}\n value={Number(analytics?.totalBookings ?? 0).toLocaleString()}\n icon={<CalendarCheck />}\n />\n <StatCard\n label={t('ggnomad.analytics.users', 'Users')}\n value={Number(analytics?.totalUsers ?? 0).toLocaleString()}\n icon={<Users />}\n />\n </section>\n\n <SectionCard title={t('ggnomad.analytics.revenueByCategory', 'Revenue by category')}>\n {categories.length === 0 ? (\n <div className=\"flex flex-col items-center gap-2 py-8 text-center\">\n <span className=\"flex size-10 items-center justify-center rounded-full bg-[var(--color-accent-soft)] text-text-secondary\">\n <BarChart3 className=\"size-5\" />\n </span>\n <p className=\"text-sm font-medium text-text-primary\">\n {t('ggnomad.analytics.empty.title', 'No analytics yet')}\n </p>\n <p className=\"max-w-sm text-sm text-text-secondary\">\n {t(\n 'ggnomad.analytics.empty.description',\n 'Revenue by category appears here as bookings come in across stays, tours and events.'\n )}\n </p>\n </div>\n ) : (\n <ul className=\"flex flex-col gap-4\">\n {categories.map((category, index) => {\n const pct = maxCategory > 0 ? Math.max((category.value / maxCategory) * 100, 2) : 0;\n return (\n <li key={category.label}>\n <div className=\"flex items-baseline justify-between gap-3\">\n <span className=\"truncate text-sm font-medium text-text-primary\">\n {category.label}\n </span>\n <span className=\"flex-shrink-0 text-sm tabular-nums text-text-secondary\">\n ${category.value.toLocaleString()}\n </span>\n </div>\n <div className=\"mt-1.5 h-2.5 w-full overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full transition-[width] duration-500 ease-out\"\n style={{\n width: `${pct}%`,\n backgroundColor: CHART_COLORS[index % CHART_COLORS.length],\n }}\n />\n </div>\n </li>\n );\n })}\n </ul>\n )}\n </SectionCard>\n\n {destinations.length > 0 && (\n <SectionCard title={t('ggnomad.analytics.topDestinations', 'Top destinations')}>\n <ul className=\"flex flex-col gap-4\">\n {destinations.map((destination, index) => {\n const pct =\n maxDestination > 0 ? Math.max((destination.value / maxDestination) * 100, 2) : 0;\n return (\n <li key={destination.label}>\n <div className=\"flex items-baseline justify-between gap-3\">\n <span className=\"inline-flex min-w-0 items-center gap-1.5 truncate text-sm font-medium text-text-primary\">\n <MapPin\n className=\"size-3.5 flex-shrink-0 text-text-secondary\"\n aria-hidden=\"true\"\n />\n {destination.label}\n </span>\n <span className=\"flex-shrink-0 text-sm tabular-nums text-text-secondary\">\n {destination.value.toLocaleString()}\n </span>\n </div>\n <div className=\"mt-1.5 h-2.5 w-full overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full transition-[width] duration-500 ease-out\"\n style={{\n width: `${pct}%`,\n backgroundColor: CHART_COLORS[index % CHART_COLORS.length],\n }}\n />\n </div>\n </li>\n );\n })}\n </ul>\n </SectionCard>\n )}\n\n {trends.length > 0 && (\n <SectionCard title={t('ggnomad.analytics.revenueTrend', 'Revenue trend')}>\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex items-end gap-2 overflow-x-auto pb-2\">\n {trends.map((trend, index) => {\n const pct = maxTrend > 0 ? Math.max((trend.value / maxTrend) * 100, 5) : 5;\n return (\n <div key={trend.label} className=\"flex flex-col items-center gap-1\">\n <div className=\"flex h-24 items-end\">\n <div\n className=\"w-8 rounded-t transition-all duration-500 ease-out\"\n style={{\n height: `${pct}%`,\n backgroundColor: CHART_COLORS[index % CHART_COLORS.length],\n }}\n title={`${trend.label}: $${trend.value.toLocaleString()}`}\n />\n </div>\n <p className=\"truncate text-xs text-text-secondary\">{trend.label}</p>\n </div>\n );\n })}\n </div>\n <p className=\"text-xs text-text-secondary\">\n {t(\n 'ggnomad.analytics.trendNote',\n 'Revenue trends over time showing performance across all domains.'\n )}\n </p>\n </div>\n </SectionCard>\n )}\n </PageShell>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAYA,IAAM,IAAe;CACnB;CACA;CACA;CACA;CACA;AACF,GAEM,KAAoB,MACxB,EACG,QAAQ,UAAU,GAAG,EACrB,KAAK,EACL,QAAQ,UAAU,MAAS,EAAK,YAAY,CAAC,KAAK;AAEvD,SAAgB,IAAgB;CAC9B,IAAM,EAAE,SAAM,EAAQ,GAChB,EAAE,YAAS,EACf,CAcF,GACM,IAAY,GAAM,kBAElB,IAAa,QAAc;EAC/B,IAAM,IAAM,GAAW,qBAAqB,CAAC;EAC7C,OAAO,OAAO,QAAQ,CAAG,EACtB,KAAK,CAAC,GAAK,QAAY;GAAE,OAAO,EAAiB,CAAG;GAAG,OAAO,OAAO,CAAK;EAAE,EAAE,EAC9E,QAAQ,MAAU,OAAO,SAAS,EAAM,KAAK,KAAK,EAAM,QAAQ,CAAC,EACjE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;CACrC,GAAG,CAAC,GAAW,iBAAiB,CAAC,GAE3B,IAAc,EAAW,SAAS,IAAI,EAAW,GAAG,QAAQ,GAE5D,IAAS,QAAc;EAC3B,IAAM,IAAM,GAAW;EAUvB,OATK,IACD,MAAM,QAAQ,CAAG,IACZ,EACJ,KAAK,OAAW;GACf,OAAO,EAAM,SAAS;GACtB,OAAO,OAAO,EAAM,WAAW,CAAC;EAClC,EAAE,EACD,QAAQ,MAAU,OAAO,SAAS,EAAM,KAAK,KAAK,EAAM,KAAK,IAE3D,OAAO,QAAQ,CAAG,EACtB,KAAK,CAAC,GAAK,QAAY;GACtB,OAAO;GACP,OAAO,OAAO,CAAK;EACrB,EAAE,EACD,QAAQ,MAAU,OAAO,SAAS,EAAM,KAAK,CAAC,IAdhC,CAAC;CAepB,GAAG,CAAC,GAAW,aAAa,CAAC,GAEvB,IAAW,EAAO,SAAS,IAAI,KAAK,IAAI,GAAG,EAAO,KAAK,MAAM,EAAE,KAAK,CAAC,IAAI,GAEzE,IAAe,QAEjB,EAAiB,GAAW,eAAe,EACxC,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAChC,MAAM,GAAG,EAAE,GAChB,CAAC,GAAW,eAAe,CAC7B,GACM,IAAiB,EAAa,SAAS,IAAI,EAAa,GAAG,QAAQ;CAEzE,OACE,kBAAC,GAAD;EACE,OAAO,EAAE,2BAA2B,WAAW;EAC/C,aAAa,EAAE,kCAAkC,WAAW;EAC5D,UAAU,EAAE,8BAA8B,0CAA0C;YAHtF;GAKE,kBAAC,GAAD;IAAa,MAAM,kBAAC,GAAD,EAAW,WAAU,SAAU,CAAA;cAC/C,EACC,6BACA,iNACF;GACW,CAAA;GAEb,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,KAAD;IAAG,WAAU;cACV,EAAE,kCAAkC,eAAe;GACnD,CAAA,GACH,kBAAC,KAAD;IAAG,WAAU;cAAb,CAA0E,KACtE,OAAO,GAAW,gBAAgB,CAAC,EAAE,eAAe,CACrD;KACU,EAAA,CAAA;GAEf,kBAAC,WAAD;IAAS,WAAU;cAAnB;KACE,kBAAC,GAAD;MACE,MAAA;MACA,OAAO,EAAE,gCAAgC,YAAY;MACrD,OAAO,GAAG,OAAO,GAAW,kBAAkB,CAAC,EAAE,QAAQ,CAAC,EAAE;MAC5D,MAAM,kBAAC,GAAD,CAAU,CAAA;KACjB,CAAA;KACD,kBAAC,GAAD;MACE,OAAO,EAAE,6BAA6B,SAAS;MAC/C,OAAO,IAAI,OAAO,GAAW,gBAAgB,CAAC,EAAE,eAAe;MAC/D,MAAM,kBAAC,GAAD,CAAa,CAAA;KACpB,CAAA;KACD,kBAAC,GAAD;MACE,OAAO,EAAE,8BAA8B,UAAU;MACjD,OAAO,OAAO,GAAW,iBAAiB,CAAC,EAAE,eAAe;MAC5D,MAAM,kBAAC,GAAD,CAAgB,CAAA;KACvB,CAAA;KACD,kBAAC,GAAD;MACE,OAAO,EAAE,2BAA2B,OAAO;MAC3C,OAAO,OAAO,GAAW,cAAc,CAAC,EAAE,eAAe;MACzD,MAAM,kBAAC,GAAD,CAAQ,CAAA;KACf,CAAA;IACM;;GAET,kBAAC,GAAD;IAAa,OAAO,EAAE,uCAAuC,qBAAqB;cAC/E,EAAW,WAAW,IACrB,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,QAAD;OAAM,WAAU;iBACd,kBAAC,GAAD,EAAW,WAAU,SAAU,CAAA;MAC3B,CAAA;MACN,kBAAC,KAAD;OAAG,WAAU;iBACV,EAAE,iCAAiC,kBAAkB;MACrD,CAAA;MACH,kBAAC,KAAD;OAAG,WAAU;iBACV,EACC,uCACA,sFACF;MACC,CAAA;KACA;SAEL,kBAAC,MAAD;KAAI,WAAU;eACX,EAAW,KAAK,GAAU,MAAU;MACnC,IAAM,IAAM,IAAc,IAAI,KAAK,IAAK,EAAS,QAAQ,IAAe,KAAK,CAAC,IAAI;MAClF,OACE,kBAAC,MAAD,EAAA,UAAA,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBACb,EAAS;OACN,CAAA,GACN,kBAAC,QAAD;QAAM,WAAU;kBAAhB,CAAyE,KACrE,EAAS,MAAM,eAAe,CAC5B;SACH;UACL,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,OAAD;QACE,WAAU;QACV,OAAO;SACL,OAAO,GAAG,EAAI;SACd,iBAAiB,EAAa,IAAQ,EAAa;QACrD;OACD,CAAA;MACE,CAAA,CACH,EAAA,GAlBK,EAAS,KAkBd;KAER,CAAC;IACC,CAAA;GAEK,CAAA;GAEZ,EAAa,SAAS,KACrB,kBAAC,GAAD;IAAa,OAAO,EAAE,qCAAqC,kBAAkB;cAC3E,kBAAC,MAAD;KAAI,WAAU;eACX,EAAa,KAAK,GAAa,MAAU;MACxC,IAAM,IACJ,IAAiB,IAAI,KAAK,IAAK,EAAY,QAAQ,IAAkB,KAAK,CAAC,IAAI;MACjF,OACE,kBAAC,MAAD,EAAA,UAAA,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAhB,CACE,kBAAC,GAAD;SACE,WAAU;SACV,eAAY;QACb,CAAA,GACA,EAAY,KACT;WACN,kBAAC,QAAD;QAAM,WAAU;kBACb,EAAY,MAAM,eAAe;OAC9B,CAAA,CACH;UACL,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,OAAD;QACE,WAAU;QACV,OAAO;SACL,OAAO,GAAG,EAAI;SACd,iBAAiB,EAAa,IAAQ,EAAa;QACrD;OACD,CAAA;MACE,CAAA,CACH,EAAA,GAtBK,EAAY,KAsBjB;KAER,CAAC;IACC,CAAA;GACO,CAAA;GAGd,EAAO,SAAS,KACf,kBAAC,GAAD;IAAa,OAAO,EAAE,kCAAkC,eAAe;cACrE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBACZ,EAAO,KAAK,GAAO,MAGhB,kBAAC,OAAD;OAAuB,WAAU;iBAAjC,CACE,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,OAAD;SACE,WAAU;SACV,OAAO;UACL,QAAQ,GAPN,IAAW,IAAI,KAAK,IAAK,EAAM,QAAQ,IAAY,KAAK,CAAC,IAAI,EAOhD;UACf,iBAAiB,EAAa,IAAQ,EAAa;SACrD;SACA,OAAO,GAAG,EAAM,MAAM,KAAK,EAAM,MAAM,eAAe;QACvD,CAAA;OACE,CAAA,GACL,kBAAC,KAAD;QAAG,WAAU;kBAAwC,EAAM;OAAS,CAAA,CACjE;SAZK,EAAM,KAYX,CAER;KACE,CAAA,GACL,kBAAC,KAAD;MAAG,WAAU;gBACV,EACC,+BACA,kEACF;KACC,CAAA,CACA;;GACM,CAAA;EAEN;;AAEf"}
@@ -1 +1 @@
1
- {"version":3,"file":"BookingsPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/BookingsPage.tsx"],"names":[],"mappings":"AAwCA,wBAAgB,YAAY,gCA2Z3B"}
1
+ {"version":3,"file":"BookingsPage.d.ts","sourceRoot":"","sources":["../../../src/ggnomad/pages/BookingsPage.tsx"],"names":[],"mappings":"AA2EA,wBAAgB,YAAY,gCA4e3B"}