@burdenoff/microfe-eventfullymanaged 2026.625.1 → 2026.625.2

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 (39) hide show
  1. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js +88 -47
  2. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js.map +1 -1
  3. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js +49 -45
  4. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js.map +1 -1
  5. package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js +111 -78
  6. package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js.map +1 -1
  7. package/dist/eventfullymanaged/pages/modules/CommunicationPage.js +29 -28
  8. package/dist/eventfullymanaged/pages/modules/CommunicationPage.js.map +1 -1
  9. package/dist/eventfullymanaged/pages/modules/EventsPage.js +71 -42
  10. package/dist/eventfullymanaged/pages/modules/EventsPage.js.map +1 -1
  11. package/dist/eventfullymanaged/pages/modules/KioskPage.js +11 -10
  12. package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
  13. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +54 -24
  14. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
  15. package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js +135 -105
  16. package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js.map +1 -1
  17. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +63 -33
  18. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
  19. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js +110 -77
  20. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js.map +1 -1
  21. package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js +54 -23
  22. package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js.map +1 -1
  23. package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js +67 -37
  24. package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js.map +1 -1
  25. package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js +61 -42
  26. package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js.map +1 -1
  27. package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js +85 -85
  28. package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js.map +1 -1
  29. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js +22 -21
  30. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js.map +1 -1
  31. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js +37 -40
  32. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js.map +1 -1
  33. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js +67 -38
  34. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js.map +1 -1
  35. package/dist/eventfullymanaged/pages/venues/VenueFormPage.js +99 -99
  36. package/dist/eventfullymanaged/pages/venues/VenueFormPage.js.map +1 -1
  37. package/dist/eventfullymanaged/pages/venues/VenueListPage.js +23 -22
  38. package/dist/eventfullymanaged/pages/venues/VenueListPage.js.map +1 -1
  39. package/package.json +2 -2
@@ -1,92 +1,94 @@
1
- import { useAnalyticsSnapshotsQuery as e, useAnnouncementsQuery as t, useAutomationRulesQuery as n, useCheckInRecordsQuery as r, useCommunicationCampaignsQuery as i, useDashboardSummaryQuery as a, useEventSessionsQuery as o, useExhibitorsQuery as s, useLeadsQuery as c, useNetworkingProfilesQuery as l, usePromoCodesQuery as u, useRegistrationsQuery as d, useSponsorsQuery as f, useTicketTypesQuery as p, useVenuesQuery as m, useWorkflowTemplatesQuery as h } from "../../api/eventApi.js";
2
- import { EntityListSection as g } from "./EntityListSection.js";
3
- import { useMemo as _ } from "react";
4
- import { jsx as v, jsxs as y } from "react/jsx-runtime";
5
- import { EmphasisPanel as b, GlassCard as x, GradientText as S, ShowMore as C } from "@burdenoff/fe-libs/ui";
1
+ import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
2
+ import { useAnalyticsSnapshotsQuery as t, useAnnouncementsQuery as n, useAutomationRulesQuery as r, useCheckInRecordsQuery as i, useCommunicationCampaignsQuery as a, useDashboardSummaryQuery as o, useEventSessionsQuery as s, useExhibitorsQuery as c, useLeadsQuery as l, useNetworkingProfilesQuery as u, usePromoCodesQuery as d, useRegistrationsQuery as f, useSponsorsQuery as p, useTicketTypesQuery as m, useVenuesQuery as h, useWorkflowTemplatesQuery as g } from "../../api/eventApi.js";
3
+ import { EntityListSection as _ } from "./EntityListSection.js";
4
+ import { useMemo as v } from "react";
5
+ import { jsx as y, jsxs as b } from "react/jsx-runtime";
6
+ import { LayoutDashboard as x, Megaphone as S, Workflow as C } from "lucide-react";
7
+ import { EmphasisPanel as w, GlassCard as T, GradientText as E, NextSteps as D, PagePurpose as ee, ShowMore as te } from "@burdenoff/fe-libs/ui";
6
8
  //#region src/eventfullymanaged/pages/modules/OperationsHubPage.tsx
7
- function w({ title: w, description: T, sectionKeys: E }) {
8
- let D = a(), O = t({
9
+ function O({ title: O, description: k, sectionKeys: A }) {
10
+ let { navigate: j } = e(), M = o(), N = n({
9
11
  limit: 100,
10
12
  offset: 0
11
- }), k = i({
13
+ }), P = a({
12
14
  limit: 100,
13
15
  offset: 0
14
- }), A = h({
16
+ }), F = g({
15
17
  limit: 100,
16
18
  offset: 0
17
- }), j = n({
19
+ }), I = r({
18
20
  limit: 100,
19
21
  offset: 0
20
- }), M = e({
22
+ }), L = t({
21
23
  limit: 100,
22
24
  offset: 0
23
- }), N = d({
25
+ }), R = f({
24
26
  limit: 100,
25
27
  offset: 0
26
- }), P = p({
28
+ }), z = m({
27
29
  limit: 100,
28
30
  offset: 0
29
- }), F = u({
31
+ }), B = d({
30
32
  limit: 100,
31
33
  offset: 0
32
- }), I = f({
34
+ }), V = p({
33
35
  limit: 100,
34
36
  offset: 0
35
- }), L = s({
37
+ }), H = c({
36
38
  limit: 100,
37
39
  offset: 0
38
- }), R = c({
40
+ }), U = l({
39
41
  limit: 100,
40
42
  offset: 0
41
- }), z = m({
43
+ }), W = h({
42
44
  limit: 100,
43
45
  offset: 0
44
- }), B = o({
46
+ }), G = s({
45
47
  limit: 100,
46
48
  offset: 0
47
- }), V = r({
49
+ }), K = i({
48
50
  limit: 100,
49
51
  offset: 0
50
- }), H = l({
52
+ }), q = u({
51
53
  limit: 100,
52
54
  offset: 0
53
- }), U = D.data?.dashboardSummary, W = _(() => N.data?.registrations.items ?? [], [N.data]), G = _(() => W.reduce((e, t) => {
55
+ }), J = M.data?.dashboardSummary, Y = v(() => R.data?.registrations.items ?? [], [R.data]), X = v(() => Y.reduce((e, t) => {
54
56
  let n = Number(t.totalAmount ?? 0);
55
57
  return Number.isFinite(n) ? e + n : e;
56
- }, 0), [W]), K = [
58
+ }, 0), [Y]), Z = [
57
59
  {
58
60
  label: "Events",
59
- value: U?.totalEvents ?? 0
61
+ value: J?.totalEvents ?? 0
60
62
  },
61
63
  {
62
64
  label: "Active",
63
- value: U?.activeEvents ?? 0
65
+ value: J?.activeEvents ?? 0
64
66
  },
65
67
  {
66
68
  label: "Registrations",
67
- value: U?.totalRegistrations ?? 0
69
+ value: J?.totalRegistrations ?? 0
68
70
  },
69
71
  {
70
72
  label: "Attendees",
71
- value: U?.totalAttendees ?? 0
73
+ value: J?.totalAttendees ?? 0
72
74
  },
73
75
  {
74
76
  label: "Venues",
75
- value: U?.totalVenues ?? 0
77
+ value: J?.totalVenues ?? 0
76
78
  },
77
79
  {
78
80
  label: "Sponsors",
79
- value: U?.totalSponsors ?? 0
81
+ value: J?.totalSponsors ?? 0
80
82
  },
81
83
  {
82
84
  label: "Tracked Revenue",
83
- value: G.toFixed(2)
85
+ value: X.toFixed(2)
84
86
  }
85
- ], q = (e) => {
87
+ ], Q = (e) => {
86
88
  if (e === "announcements") {
87
- let e = O.data?.announcements.items ?? [];
88
- return /* @__PURE__ */ v(g, {
89
- heading: O.loading ? "Loading announcements..." : `Announcements (${e.length})`,
89
+ let e = N.data?.announcements.items ?? [];
90
+ return /* @__PURE__ */ y(_, {
91
+ heading: N.loading ? "Loading announcements..." : `Announcements (${e.length})`,
90
92
  emptyLabel: "No announcements recorded.",
91
93
  rows: e.map((e) => ({
92
94
  id: e.id,
@@ -96,9 +98,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
96
98
  });
97
99
  }
98
100
  if (e === "campaigns") {
99
- let e = k.data?.communicationCampaigns.items ?? [];
100
- return /* @__PURE__ */ v(g, {
101
- heading: k.loading ? "Loading campaigns..." : `Campaigns (${e.length})`,
101
+ let e = P.data?.communicationCampaigns.items ?? [];
102
+ return /* @__PURE__ */ y(_, {
103
+ heading: P.loading ? "Loading campaigns..." : `Campaigns (${e.length})`,
102
104
  emptyLabel: "No communication campaigns available.",
103
105
  rows: e.map((e) => ({
104
106
  id: e.id,
@@ -108,9 +110,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
108
110
  });
109
111
  }
110
112
  if (e === "templates") {
111
- let e = A.data?.workflowTemplates.items ?? [];
112
- return /* @__PURE__ */ v(g, {
113
- heading: A.loading ? "Loading templates..." : `Workflow Templates (${e.length})`,
113
+ let e = F.data?.workflowTemplates.items ?? [];
114
+ return /* @__PURE__ */ y(_, {
115
+ heading: F.loading ? "Loading templates..." : `Workflow Templates (${e.length})`,
114
116
  emptyLabel: "No workflow templates configured.",
115
117
  rows: e.map((e) => ({
116
118
  id: e.id,
@@ -120,9 +122,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
120
122
  });
121
123
  }
122
124
  if (e === "rules") {
123
- let e = j.data?.automationRules.items ?? [];
124
- return /* @__PURE__ */ v(g, {
125
- heading: j.loading ? "Loading rules..." : `Automation Rules (${e.length})`,
125
+ let e = I.data?.automationRules.items ?? [];
126
+ return /* @__PURE__ */ y(_, {
127
+ heading: I.loading ? "Loading rules..." : `Automation Rules (${e.length})`,
126
128
  emptyLabel: "No automation rules configured.",
127
129
  rows: e.map((e) => ({
128
130
  id: e.id,
@@ -132,9 +134,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
132
134
  });
133
135
  }
134
136
  if (e === "snapshots") {
135
- let e = M.data?.analyticsSnapshots.items ?? [];
136
- return /* @__PURE__ */ v(g, {
137
- heading: M.loading ? "Loading analytics snapshots..." : `Snapshots (${e.length})`,
137
+ let e = L.data?.analyticsSnapshots.items ?? [];
138
+ return /* @__PURE__ */ y(_, {
139
+ heading: L.loading ? "Loading analytics snapshots..." : `Snapshots (${e.length})`,
138
140
  emptyLabel: "No analytics snapshots generated.",
139
141
  rows: e.map((e) => ({
140
142
  id: e.id,
@@ -143,10 +145,10 @@ function w({ title: w, description: T, sectionKeys: E }) {
143
145
  }))
144
146
  });
145
147
  }
146
- if (e === "registrations") return /* @__PURE__ */ v(g, {
147
- heading: N.loading ? "Loading registrations..." : `Registrations (${W.length})`,
148
+ if (e === "registrations") return /* @__PURE__ */ y(_, {
149
+ heading: R.loading ? "Loading registrations..." : `Registrations (${Y.length})`,
148
150
  emptyLabel: "No registrations available.",
149
- rows: W.map((e) => ({
151
+ rows: Y.map((e) => ({
150
152
  id: e.id,
151
153
  title: e.attendeeId ? `Attendee ${e.attendeeId}` : `Registration ${e.id}`,
152
154
  subtitle: e.totalAmount ? `${e.totalAmount} ${e.currency ?? ""}`.trim() : void 0,
@@ -154,9 +156,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
154
156
  }))
155
157
  });
156
158
  if (e === "ticketTypes") {
157
- let e = P.data?.ticketTypes.items ?? [];
158
- return /* @__PURE__ */ v(g, {
159
- heading: P.loading ? "Loading ticket types..." : `Ticket Types (${e.length})`,
159
+ let e = z.data?.ticketTypes.items ?? [];
160
+ return /* @__PURE__ */ y(_, {
161
+ heading: z.loading ? "Loading ticket types..." : `Ticket Types (${e.length})`,
160
162
  emptyLabel: "No ticket types configured.",
161
163
  rows: e.map((e) => ({
162
164
  id: e.id,
@@ -167,9 +169,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
167
169
  });
168
170
  }
169
171
  if (e === "promoCodes") {
170
- let e = F.data?.promoCodes.items ?? [];
171
- return /* @__PURE__ */ v(g, {
172
- heading: F.loading ? "Loading promo codes..." : `Promo Codes (${e.length})`,
172
+ let e = B.data?.promoCodes.items ?? [];
173
+ return /* @__PURE__ */ y(_, {
174
+ heading: B.loading ? "Loading promo codes..." : `Promo Codes (${e.length})`,
173
175
  emptyLabel: "No promo codes configured.",
174
176
  rows: e.map((e) => ({
175
177
  id: e.id,
@@ -180,9 +182,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
180
182
  });
181
183
  }
182
184
  if (e === "sponsors") {
183
- let e = I.data?.sponsors.items ?? [];
184
- return /* @__PURE__ */ v(g, {
185
- heading: I.loading ? "Loading sponsors..." : `Sponsors (${e.length})`,
185
+ let e = V.data?.sponsors.items ?? [];
186
+ return /* @__PURE__ */ y(_, {
187
+ heading: V.loading ? "Loading sponsors..." : `Sponsors (${e.length})`,
186
188
  emptyLabel: "No sponsors onboarded.",
187
189
  rows: e.map((e) => ({
188
190
  id: e.id,
@@ -192,9 +194,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
192
194
  });
193
195
  }
194
196
  if (e === "exhibitors") {
195
- let e = L.data?.exhibitors.items ?? [];
196
- return /* @__PURE__ */ v(g, {
197
- heading: L.loading ? "Loading exhibitors..." : `Exhibitors (${e.length})`,
197
+ let e = H.data?.exhibitors.items ?? [];
198
+ return /* @__PURE__ */ y(_, {
199
+ heading: H.loading ? "Loading exhibitors..." : `Exhibitors (${e.length})`,
198
200
  emptyLabel: "No exhibitors onboarded.",
199
201
  rows: e.map((e) => ({
200
202
  id: e.id,
@@ -205,9 +207,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
205
207
  });
206
208
  }
207
209
  if (e === "leads") {
208
- let e = R.data?.leads.items ?? [];
209
- return /* @__PURE__ */ v(g, {
210
- heading: R.loading ? "Loading leads..." : `Leads (${e.length})`,
210
+ let e = U.data?.leads.items ?? [];
211
+ return /* @__PURE__ */ y(_, {
212
+ heading: U.loading ? "Loading leads..." : `Leads (${e.length})`,
211
213
  emptyLabel: "No leads captured.",
212
214
  rows: e.map((e) => ({
213
215
  id: e.id,
@@ -218,9 +220,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
218
220
  });
219
221
  }
220
222
  if (e === "venues") {
221
- let e = z.data?.venues.items ?? [];
222
- return /* @__PURE__ */ v(g, {
223
- heading: z.loading ? "Loading venues..." : `Venues (${e.length})`,
223
+ let e = W.data?.venues.items ?? [];
224
+ return /* @__PURE__ */ y(_, {
225
+ heading: W.loading ? "Loading venues..." : `Venues (${e.length})`,
224
226
  emptyLabel: "No venues configured.",
225
227
  rows: e.map((e) => ({
226
228
  id: e.id,
@@ -231,9 +233,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
231
233
  });
232
234
  }
233
235
  if (e === "checkInRecords") {
234
- let e = V.data?.checkInRecords.items ?? [];
235
- return /* @__PURE__ */ v(g, {
236
- heading: V.loading ? "Loading check-in records..." : `Check-In Records (${e.length})`,
236
+ let e = K.data?.checkInRecords.items ?? [];
237
+ return /* @__PURE__ */ y(_, {
238
+ heading: K.loading ? "Loading check-in records..." : `Check-In Records (${e.length})`,
237
239
  emptyLabel: "No check-in records found.",
238
240
  rows: e.map((e) => ({
239
241
  id: e.id,
@@ -244,9 +246,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
244
246
  });
245
247
  }
246
248
  if (e === "networkingProfiles") {
247
- let e = H.data?.networkingProfiles.items ?? [];
248
- return /* @__PURE__ */ v(g, {
249
- heading: H.loading ? "Loading networking profiles..." : `Profiles (${e.length})`,
249
+ let e = q.data?.networkingProfiles.items ?? [];
250
+ return /* @__PURE__ */ y(_, {
251
+ heading: q.loading ? "Loading networking profiles..." : `Profiles (${e.length})`,
250
252
  emptyLabel: "No networking profiles available.",
251
253
  rows: e.map((e) => ({
252
254
  id: e.id,
@@ -256,9 +258,9 @@ function w({ title: w, description: T, sectionKeys: E }) {
256
258
  }))
257
259
  });
258
260
  }
259
- let t = B.data?.eventSessions.items ?? [];
260
- return /* @__PURE__ */ v(g, {
261
- heading: B.loading ? "Loading sessions..." : `Sessions (${t.length})`,
261
+ let t = G.data?.eventSessions.items ?? [];
262
+ return /* @__PURE__ */ y(_, {
263
+ heading: G.loading ? "Loading sessions..." : `Sessions (${t.length})`,
262
264
  emptyLabel: "No sessions scheduled.",
263
265
  rows: t.map((e) => ({
264
266
  id: e.id,
@@ -267,51 +269,79 @@ function w({ title: w, description: T, sectionKeys: E }) {
267
269
  status: e.status ?? void 0
268
270
  }))
269
271
  });
270
- }, J = E.slice(0, 3), Y = E.slice(3);
271
- return /* @__PURE__ */ y("div", {
272
+ }, ne = A.slice(0, 3), $ = A.slice(3);
273
+ return /* @__PURE__ */ b("div", {
272
274
  className: "space-y-6 p-6",
273
275
  children: [
274
- /* @__PURE__ */ y(b, { children: [/* @__PURE__ */ v("h1", {
276
+ /* @__PURE__ */ b(ee, { children: [
277
+ "A focused operations hub that pulls together the live records most relevant to ",
278
+ O,
279
+ ". Instead of jumping between modules, you get the key metrics plus the specific lists you need for this area in one place — handy for a quick health check or a stand-up update."
280
+ ] }),
281
+ /* @__PURE__ */ b(w, { children: [/* @__PURE__ */ y("h1", {
275
282
  className: "text-2xl font-bold text-text-primary",
276
- children: /* @__PURE__ */ v(S, { children: w })
277
- }), /* @__PURE__ */ v("p", {
283
+ children: /* @__PURE__ */ y(E, { children: O })
284
+ }), /* @__PURE__ */ y("p", {
278
285
  className: "mt-1 text-sm text-text-secondary",
279
- children: T
286
+ children: k
280
287
  })] }),
281
- /* @__PURE__ */ y("section", { children: [/* @__PURE__ */ v("h2", {
288
+ /* @__PURE__ */ b("section", { children: [/* @__PURE__ */ y("h2", {
282
289
  className: "text-lg font-semibold text-text-primary",
283
290
  children: "Operational Metrics"
284
- }), /* @__PURE__ */ v("div", {
291
+ }), /* @__PURE__ */ y("div", {
285
292
  className: "mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-4",
286
- children: K.map((e, t) => {
287
- let n = t === 0;
288
- return /* @__PURE__ */ y(x, {
289
- treatment: n ? "glass" : "metric",
290
- glow: n,
291
- className: "p-3",
292
- children: [/* @__PURE__ */ v("p", {
293
- className: "text-xs uppercase tracking-wide text-text-secondary",
294
- children: e.label
295
- }), /* @__PURE__ */ v("p", {
296
- className: "mt-1 text-xl font-semibold tabular-nums text-text-primary",
297
- children: e.value
298
- })]
299
- }, e.label);
300
- })
293
+ children: Z.map((e) => /* @__PURE__ */ b(T, {
294
+ treatment: "metric",
295
+ className: "p-3",
296
+ children: [/* @__PURE__ */ y("p", {
297
+ className: "text-xs uppercase tracking-wide text-text-secondary",
298
+ children: e.label
299
+ }), /* @__PURE__ */ y("p", {
300
+ className: "mt-1 text-xl font-semibold tabular-nums text-text-primary",
301
+ children: e.value
302
+ })]
303
+ }, e.label))
301
304
  })] }),
302
- J.map((e) => /* @__PURE__ */ v("div", { children: q(e) }, e)),
303
- Y.length > 0 ? /* @__PURE__ */ v(C, {
305
+ ne.map((e) => /* @__PURE__ */ y("div", { children: Q(e) }, e)),
306
+ $.length > 0 ? /* @__PURE__ */ y(te, {
304
307
  collapsedHeight: 160,
305
308
  label: "Show all sections",
306
- children: /* @__PURE__ */ v("div", {
309
+ children: /* @__PURE__ */ y("div", {
307
310
  className: "space-y-6",
308
- children: Y.map((e) => /* @__PURE__ */ v("div", { children: q(e) }, e))
311
+ children: $.map((e) => /* @__PURE__ */ y("div", { children: Q(e) }, e))
309
312
  })
310
- }) : null
313
+ }) : null,
314
+ /* @__PURE__ */ y(D, {
315
+ storageKey: "eventfullymanaged-operations-hub",
316
+ title: "Where to go from here",
317
+ steps: [
318
+ {
319
+ id: "overview",
320
+ label: "Back to the dashboard",
321
+ description: "See the big picture across every part of your events.",
322
+ icon: /* @__PURE__ */ y(x, { className: "h-4 w-4" }),
323
+ onClick: () => j("/")
324
+ },
325
+ {
326
+ id: "automate",
327
+ label: "Automate routine work",
328
+ description: "Set up workflow templates and rules to save time.",
329
+ icon: /* @__PURE__ */ y(C, { className: "h-4 w-4" }),
330
+ onClick: () => j("/workflows")
331
+ },
332
+ {
333
+ id: "communicate",
334
+ label: "Reach your audience",
335
+ description: "Send announcements and run campaigns.",
336
+ icon: /* @__PURE__ */ y(S, { className: "h-4 w-4" }),
337
+ onClick: () => j("/communication")
338
+ }
339
+ ]
340
+ })
311
341
  ]
312
342
  });
313
343
  }
314
344
  //#endregion
315
- export { w as default };
345
+ export { O as default };
316
346
 
317
347
  //# sourceMappingURL=OperationsHubPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OperationsHubPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/OperationsHubPage.tsx"],"sourcesContent":["import { EmphasisPanel, GlassCard, GradientText, ShowMore } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\n\nimport {\n useExhibitorsQuery,\n useLeadsQuery,\n useCheckInRecordsQuery,\n useNetworkingProfilesQuery,\n usePromoCodesQuery,\n useTicketTypesQuery,\n useAnalyticsSnapshotsQuery,\n useAnnouncementsQuery,\n useAutomationRulesQuery,\n useCommunicationCampaignsQuery,\n useDashboardSummaryQuery,\n useEventSessionsQuery,\n useRegistrationsQuery,\n useSponsorsQuery,\n useVenuesQuery,\n useWorkflowTemplatesQuery,\n} from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype SectionKey =\n | 'announcements'\n | 'campaigns'\n | 'templates'\n | 'rules'\n | 'snapshots'\n | 'registrations'\n | 'ticketTypes'\n | 'promoCodes'\n | 'sponsors'\n | 'exhibitors'\n | 'leads'\n | 'venues'\n | 'sessions'\n | 'checkInRecords'\n | 'networkingProfiles';\n\ninterface OperationsHubPageProps {\n title: string;\n description: string;\n sectionKeys: SectionKey[];\n}\n\ntype NamedEntity = {\n id: string;\n name?: string | null;\n title?: string | null;\n status?: string | null;\n};\n\ntype RegistrationEntity = {\n id: string;\n attendeeId?: string | null;\n status?: string | null;\n totalAmount?: string | null;\n currency?: string | null;\n};\n\ntype SponsorEntity = {\n id: string;\n name: string;\n level: string;\n};\n\ntype VenueEntity = {\n id: string;\n name: string;\n city?: string | null;\n status: string;\n};\n\ntype SessionEntity = {\n id: string;\n title?: string | null;\n sessionType?: string | null;\n status?: string | null;\n};\n\ntype ExhibitorEntity = {\n id: string;\n name: string;\n boothCode?: string | null;\n category?: string | null;\n status: string;\n};\n\ntype LeadEntity = {\n id: string;\n attendeeName: string;\n attendeeEmail: string;\n status: string;\n score?: number | null;\n};\n\nexport default function OperationsHubPage({ title, description, sectionKeys }: OperationsHubPageProps) {\n const summaryQuery = useDashboardSummaryQuery();\n const announcementsQuery = useAnnouncementsQuery({ limit: 100, offset: 0 });\n const campaignsQuery = useCommunicationCampaignsQuery({ limit: 100, offset: 0 });\n const templatesQuery = useWorkflowTemplatesQuery({ limit: 100, offset: 0 });\n const rulesQuery = useAutomationRulesQuery({ limit: 100, offset: 0 });\n const snapshotsQuery = useAnalyticsSnapshotsQuery({ limit: 100, offset: 0 });\n const registrationsQuery = useRegistrationsQuery({ limit: 100, offset: 0 });\n const ticketTypesQuery = useTicketTypesQuery({ limit: 100, offset: 0 });\n const promoCodesQuery = usePromoCodesQuery({ limit: 100, offset: 0 });\n const sponsorsQuery = useSponsorsQuery({ limit: 100, offset: 0 });\n const exhibitorsQuery = useExhibitorsQuery({ limit: 100, offset: 0 });\n const leadsQuery = useLeadsQuery({ limit: 100, offset: 0 });\n const venuesQuery = useVenuesQuery({ limit: 100, offset: 0 });\n const sessionsQuery = useEventSessionsQuery({ limit: 100, offset: 0 });\n const checkInRecordsQuery = useCheckInRecordsQuery({ limit: 100, offset: 0 });\n const networkingProfilesQuery = useNetworkingProfilesQuery({ limit: 100, offset: 0 });\n\n const summary = summaryQuery.data?.dashboardSummary;\n\n const registrations = useMemo(\n () => (registrationsQuery.data?.registrations.items ?? []) as RegistrationEntity[],\n [registrationsQuery.data]\n );\n\n const trackedRevenue = useMemo(\n () =>\n registrations.reduce((total, registration) => {\n const value = Number(registration.totalAmount ?? 0);\n return Number.isFinite(value) ? total + value : total;\n }, 0),\n [registrations]\n );\n\n const cards = [\n { label: 'Events', value: summary?.totalEvents ?? 0 },\n { label: 'Active', value: summary?.activeEvents ?? 0 },\n { label: 'Registrations', value: summary?.totalRegistrations ?? 0 },\n { label: 'Attendees', value: summary?.totalAttendees ?? 0 },\n { label: 'Venues', value: summary?.totalVenues ?? 0 },\n { label: 'Sponsors', value: summary?.totalSponsors ?? 0 },\n { label: 'Tracked Revenue', value: trackedRevenue.toFixed(2) },\n ];\n\n const renderSection = (sectionKey: SectionKey) => {\n if (sectionKey === 'announcements') {\n const rows = (announcementsQuery.data?.announcements.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={announcementsQuery.loading ? 'Loading announcements...' : `Announcements (${rows.length})`}\n emptyLabel=\"No announcements recorded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Announcement ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'campaigns') {\n const rows = (campaignsQuery.data?.communicationCampaigns.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={campaignsQuery.loading ? 'Loading campaigns...' : `Campaigns (${rows.length})`}\n emptyLabel=\"No communication campaigns available.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Campaign ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'templates') {\n const rows = (templatesQuery.data?.workflowTemplates.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={templatesQuery.loading ? 'Loading templates...' : `Workflow Templates (${rows.length})`}\n emptyLabel=\"No workflow templates configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Template ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'rules') {\n const rows = (rulesQuery.data?.automationRules.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={rulesQuery.loading ? 'Loading rules...' : `Automation Rules (${rows.length})`}\n emptyLabel=\"No automation rules configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Rule ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'snapshots') {\n const rows = (snapshotsQuery.data?.analyticsSnapshots.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={snapshotsQuery.loading ? 'Loading analytics snapshots...' : `Snapshots (${rows.length})`}\n emptyLabel=\"No analytics snapshots generated.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Snapshot ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'registrations') {\n return (\n <EntityListSection\n heading={registrationsQuery.loading ? 'Loading registrations...' : `Registrations (${registrations.length})`}\n emptyLabel=\"No registrations available.\"\n rows={registrations.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Registration ${row.id}`,\n subtitle: row.totalAmount ? `${row.totalAmount} ${row.currency ?? ''}`.trim() : undefined,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'ticketTypes') {\n const rows = ticketTypesQuery.data?.ticketTypes.items ?? [];\n return (\n <EntityListSection\n heading={ticketTypesQuery.loading ? 'Loading ticket types...' : `Ticket Types (${rows.length})`}\n emptyLabel=\"No ticket types configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: `${row.price} ${row.currency} • Sold ${row.soldCount}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n );\n }\n\n if (sectionKey === 'promoCodes') {\n const rows = promoCodesQuery.data?.promoCodes.items ?? [];\n return (\n <EntityListSection\n heading={promoCodesQuery.loading ? 'Loading promo codes...' : `Promo Codes (${rows.length})`}\n emptyLabel=\"No promo codes configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.code,\n subtitle: `${row.discountType} ${row.discountValue}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n );\n }\n\n if (sectionKey === 'sponsors') {\n const rows = (sponsorsQuery.data?.sponsors.items ?? []) as SponsorEntity[];\n return (\n <EntityListSection\n heading={sponsorsQuery.loading ? 'Loading sponsors...' : `Sponsors (${rows.length})`}\n emptyLabel=\"No sponsors onboarded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: row.level,\n }))}\n />\n );\n }\n\n if (sectionKey === 'exhibitors') {\n const rows = (exhibitorsQuery.data?.exhibitors.items ?? []) as ExhibitorEntity[];\n return (\n <EntityListSection\n heading={exhibitorsQuery.loading ? 'Loading exhibitors...' : `Exhibitors (${rows.length})`}\n emptyLabel=\"No exhibitors onboarded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: [row.boothCode, row.category].filter(Boolean).join(' • '),\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'leads') {\n const rows = (leadsQuery.data?.leads.items ?? []) as LeadEntity[];\n return (\n <EntityListSection\n heading={leadsQuery.loading ? 'Loading leads...' : `Leads (${rows.length})`}\n emptyLabel=\"No leads captured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeName,\n subtitle: [row.attendeeEmail, row.score != null ? `Score ${row.score}` : undefined]\n .filter(Boolean)\n .join(' • '),\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'venues') {\n const rows = (venuesQuery.data?.venues.items ?? []) as VenueEntity[];\n return (\n <EntityListSection\n heading={venuesQuery.loading ? 'Loading venues...' : `Venues (${rows.length})`}\n emptyLabel=\"No venues configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: row.city ?? undefined,\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'checkInRecords') {\n const rows = checkInRecordsQuery.data?.checkInRecords.items ?? [];\n return (\n <EntityListSection\n heading={checkInRecordsQuery.loading ? 'Loading check-in records...' : `Check-In Records (${rows.length})`}\n emptyLabel=\"No check-in records found.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Record ${row.id}`,\n subtitle: `${row.method} • ${row.direction}`,\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'networkingProfiles') {\n const rows = networkingProfilesQuery.data?.networkingProfiles.items ?? [];\n return (\n <EntityListSection\n heading={networkingProfilesQuery.loading ? 'Loading networking profiles...' : `Profiles (${rows.length})`}\n emptyLabel=\"No networking profiles available.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Profile ${row.id}`,\n subtitle: [row.role, row.industry].filter(Boolean).join(' • '),\n status: row.visibility,\n }))}\n />\n );\n }\n\n const rows = (sessionsQuery.data?.eventSessions.items ?? []) as SessionEntity[];\n return (\n <EntityListSection\n heading={sessionsQuery.loading ? 'Loading sessions...' : `Sessions (${rows.length})`}\n emptyLabel=\"No sessions scheduled.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? `Session ${row.id}`,\n subtitle: row.sessionType ?? undefined,\n status: row.status ?? undefined,\n }))}\n />\n );\n };\n\n const primarySections = sectionKeys.slice(0, 3);\n const secondarySections = sectionKeys.slice(3);\n\n return (\n <div className=\"space-y-6 p-6\">\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>{title}</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{description}</p>\n </EmphasisPanel>\n\n <section>\n <h2 className=\"text-lg font-semibold text-text-primary\">Operational Metrics</h2>\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-4\">\n {cards.map((card, index) => {\n const featured = index === 0;\n return (\n <GlassCard key={card.label} treatment={featured ? 'glass' : 'metric'} glow={featured} className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">{card.label}</p>\n <p className=\"mt-1 text-xl font-semibold tabular-nums text-text-primary\">{card.value}</p>\n </GlassCard>\n );\n })}\n </div>\n </section>\n\n {primarySections.map((sectionKey) => (\n <div key={sectionKey}>{renderSection(sectionKey)}</div>\n ))}\n\n {secondarySections.length > 0 ? (\n <ShowMore collapsedHeight={160} label=\"Show all sections\">\n <div className=\"space-y-6\">\n {secondarySections.map((sectionKey) => (\n <div key={sectionKey}>{renderSection(sectionKey)}</div>\n ))}\n </div>\n </ShowMore>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"OperationsHubPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/OperationsHubPage.tsx"],"sourcesContent":["import { LayoutDashboard, Megaphone, Workflow } from 'lucide-react';\nimport { EmphasisPanel, GlassCard, GradientText, NextSteps, PagePurpose, ShowMore } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\n\nimport {\n useExhibitorsQuery,\n useLeadsQuery,\n useCheckInRecordsQuery,\n useNetworkingProfilesQuery,\n usePromoCodesQuery,\n useTicketTypesQuery,\n useAnalyticsSnapshotsQuery,\n useAnnouncementsQuery,\n useAutomationRulesQuery,\n useCommunicationCampaignsQuery,\n useDashboardSummaryQuery,\n useEventSessionsQuery,\n useRegistrationsQuery,\n useSponsorsQuery,\n useVenuesQuery,\n useWorkflowTemplatesQuery,\n} from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { EntityListSection } from './EntityListSection';\n\ntype SectionKey =\n | 'announcements'\n | 'campaigns'\n | 'templates'\n | 'rules'\n | 'snapshots'\n | 'registrations'\n | 'ticketTypes'\n | 'promoCodes'\n | 'sponsors'\n | 'exhibitors'\n | 'leads'\n | 'venues'\n | 'sessions'\n | 'checkInRecords'\n | 'networkingProfiles';\n\ninterface OperationsHubPageProps {\n title: string;\n description: string;\n sectionKeys: SectionKey[];\n}\n\ntype NamedEntity = {\n id: string;\n name?: string | null;\n title?: string | null;\n status?: string | null;\n};\n\ntype RegistrationEntity = {\n id: string;\n attendeeId?: string | null;\n status?: string | null;\n totalAmount?: string | null;\n currency?: string | null;\n};\n\ntype SponsorEntity = {\n id: string;\n name: string;\n level: string;\n};\n\ntype VenueEntity = {\n id: string;\n name: string;\n city?: string | null;\n status: string;\n};\n\ntype SessionEntity = {\n id: string;\n title?: string | null;\n sessionType?: string | null;\n status?: string | null;\n};\n\ntype ExhibitorEntity = {\n id: string;\n name: string;\n boothCode?: string | null;\n category?: string | null;\n status: string;\n};\n\ntype LeadEntity = {\n id: string;\n attendeeName: string;\n attendeeEmail: string;\n status: string;\n score?: number | null;\n};\n\nexport default function OperationsHubPage({ title, description, sectionKeys }: OperationsHubPageProps) {\n const { navigate } = useEventfullyManaged();\n const summaryQuery = useDashboardSummaryQuery();\n const announcementsQuery = useAnnouncementsQuery({ limit: 100, offset: 0 });\n const campaignsQuery = useCommunicationCampaignsQuery({ limit: 100, offset: 0 });\n const templatesQuery = useWorkflowTemplatesQuery({ limit: 100, offset: 0 });\n const rulesQuery = useAutomationRulesQuery({ limit: 100, offset: 0 });\n const snapshotsQuery = useAnalyticsSnapshotsQuery({ limit: 100, offset: 0 });\n const registrationsQuery = useRegistrationsQuery({ limit: 100, offset: 0 });\n const ticketTypesQuery = useTicketTypesQuery({ limit: 100, offset: 0 });\n const promoCodesQuery = usePromoCodesQuery({ limit: 100, offset: 0 });\n const sponsorsQuery = useSponsorsQuery({ limit: 100, offset: 0 });\n const exhibitorsQuery = useExhibitorsQuery({ limit: 100, offset: 0 });\n const leadsQuery = useLeadsQuery({ limit: 100, offset: 0 });\n const venuesQuery = useVenuesQuery({ limit: 100, offset: 0 });\n const sessionsQuery = useEventSessionsQuery({ limit: 100, offset: 0 });\n const checkInRecordsQuery = useCheckInRecordsQuery({ limit: 100, offset: 0 });\n const networkingProfilesQuery = useNetworkingProfilesQuery({ limit: 100, offset: 0 });\n\n const summary = summaryQuery.data?.dashboardSummary;\n\n const registrations = useMemo(\n () => (registrationsQuery.data?.registrations.items ?? []) as RegistrationEntity[],\n [registrationsQuery.data]\n );\n\n const trackedRevenue = useMemo(\n () =>\n registrations.reduce((total, registration) => {\n const value = Number(registration.totalAmount ?? 0);\n return Number.isFinite(value) ? total + value : total;\n }, 0),\n [registrations]\n );\n\n const cards = [\n { label: 'Events', value: summary?.totalEvents ?? 0 },\n { label: 'Active', value: summary?.activeEvents ?? 0 },\n { label: 'Registrations', value: summary?.totalRegistrations ?? 0 },\n { label: 'Attendees', value: summary?.totalAttendees ?? 0 },\n { label: 'Venues', value: summary?.totalVenues ?? 0 },\n { label: 'Sponsors', value: summary?.totalSponsors ?? 0 },\n { label: 'Tracked Revenue', value: trackedRevenue.toFixed(2) },\n ];\n\n const renderSection = (sectionKey: SectionKey) => {\n if (sectionKey === 'announcements') {\n const rows = (announcementsQuery.data?.announcements.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={announcementsQuery.loading ? 'Loading announcements...' : `Announcements (${rows.length})`}\n emptyLabel=\"No announcements recorded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Announcement ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'campaigns') {\n const rows = (campaignsQuery.data?.communicationCampaigns.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={campaignsQuery.loading ? 'Loading campaigns...' : `Campaigns (${rows.length})`}\n emptyLabel=\"No communication campaigns available.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Campaign ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'templates') {\n const rows = (templatesQuery.data?.workflowTemplates.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={templatesQuery.loading ? 'Loading templates...' : `Workflow Templates (${rows.length})`}\n emptyLabel=\"No workflow templates configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Template ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'rules') {\n const rows = (rulesQuery.data?.automationRules.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={rulesQuery.loading ? 'Loading rules...' : `Automation Rules (${rows.length})`}\n emptyLabel=\"No automation rules configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Rule ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'snapshots') {\n const rows = (snapshotsQuery.data?.analyticsSnapshots.items ?? []) as NamedEntity[];\n return (\n <EntityListSection\n heading={snapshotsQuery.loading ? 'Loading analytics snapshots...' : `Snapshots (${rows.length})`}\n emptyLabel=\"No analytics snapshots generated.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Snapshot ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'registrations') {\n return (\n <EntityListSection\n heading={registrationsQuery.loading ? 'Loading registrations...' : `Registrations (${registrations.length})`}\n emptyLabel=\"No registrations available.\"\n rows={registrations.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Registration ${row.id}`,\n subtitle: row.totalAmount ? `${row.totalAmount} ${row.currency ?? ''}`.trim() : undefined,\n status: row.status ?? undefined,\n }))}\n />\n );\n }\n\n if (sectionKey === 'ticketTypes') {\n const rows = ticketTypesQuery.data?.ticketTypes.items ?? [];\n return (\n <EntityListSection\n heading={ticketTypesQuery.loading ? 'Loading ticket types...' : `Ticket Types (${rows.length})`}\n emptyLabel=\"No ticket types configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: `${row.price} ${row.currency} • Sold ${row.soldCount}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n );\n }\n\n if (sectionKey === 'promoCodes') {\n const rows = promoCodesQuery.data?.promoCodes.items ?? [];\n return (\n <EntityListSection\n heading={promoCodesQuery.loading ? 'Loading promo codes...' : `Promo Codes (${rows.length})`}\n emptyLabel=\"No promo codes configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.code,\n subtitle: `${row.discountType} ${row.discountValue}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n );\n }\n\n if (sectionKey === 'sponsors') {\n const rows = (sponsorsQuery.data?.sponsors.items ?? []) as SponsorEntity[];\n return (\n <EntityListSection\n heading={sponsorsQuery.loading ? 'Loading sponsors...' : `Sponsors (${rows.length})`}\n emptyLabel=\"No sponsors onboarded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: row.level,\n }))}\n />\n );\n }\n\n if (sectionKey === 'exhibitors') {\n const rows = (exhibitorsQuery.data?.exhibitors.items ?? []) as ExhibitorEntity[];\n return (\n <EntityListSection\n heading={exhibitorsQuery.loading ? 'Loading exhibitors...' : `Exhibitors (${rows.length})`}\n emptyLabel=\"No exhibitors onboarded.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: [row.boothCode, row.category].filter(Boolean).join(' • '),\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'leads') {\n const rows = (leadsQuery.data?.leads.items ?? []) as LeadEntity[];\n return (\n <EntityListSection\n heading={leadsQuery.loading ? 'Loading leads...' : `Leads (${rows.length})`}\n emptyLabel=\"No leads captured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeName,\n subtitle: [row.attendeeEmail, row.score != null ? `Score ${row.score}` : undefined]\n .filter(Boolean)\n .join(' • '),\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'venues') {\n const rows = (venuesQuery.data?.venues.items ?? []) as VenueEntity[];\n return (\n <EntityListSection\n heading={venuesQuery.loading ? 'Loading venues...' : `Venues (${rows.length})`}\n emptyLabel=\"No venues configured.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: row.city ?? undefined,\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'checkInRecords') {\n const rows = checkInRecordsQuery.data?.checkInRecords.items ?? [];\n return (\n <EntityListSection\n heading={checkInRecordsQuery.loading ? 'Loading check-in records...' : `Check-In Records (${rows.length})`}\n emptyLabel=\"No check-in records found.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Record ${row.id}`,\n subtitle: `${row.method} • ${row.direction}`,\n status: row.status,\n }))}\n />\n );\n }\n\n if (sectionKey === 'networkingProfiles') {\n const rows = networkingProfilesQuery.data?.networkingProfiles.items ?? [];\n return (\n <EntityListSection\n heading={networkingProfilesQuery.loading ? 'Loading networking profiles...' : `Profiles (${rows.length})`}\n emptyLabel=\"No networking profiles available.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Profile ${row.id}`,\n subtitle: [row.role, row.industry].filter(Boolean).join(' • '),\n status: row.visibility,\n }))}\n />\n );\n }\n\n const rows = (sessionsQuery.data?.eventSessions.items ?? []) as SessionEntity[];\n return (\n <EntityListSection\n heading={sessionsQuery.loading ? 'Loading sessions...' : `Sessions (${rows.length})`}\n emptyLabel=\"No sessions scheduled.\"\n rows={rows.map((row) => ({\n id: row.id,\n title: row.title ?? `Session ${row.id}`,\n subtitle: row.sessionType ?? undefined,\n status: row.status ?? undefined,\n }))}\n />\n );\n };\n\n const primarySections = sectionKeys.slice(0, 3);\n const secondarySections = sectionKeys.slice(3);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n A focused operations hub that pulls together the live records most relevant to {title}. Instead of jumping\n between modules, you get the key metrics plus the specific lists you need for this area in one place — handy\n for a quick health check or a stand-up update.\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>{title}</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">{description}</p>\n </EmphasisPanel>\n\n <section>\n <h2 className=\"text-lg font-semibold text-text-primary\">Operational Metrics</h2>\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-4\">\n {cards.map((card) => (\n <GlassCard key={card.label} treatment=\"metric\" className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">{card.label}</p>\n <p className=\"mt-1 text-xl font-semibold tabular-nums text-text-primary\">{card.value}</p>\n </GlassCard>\n ))}\n </div>\n </section>\n\n {primarySections.map((sectionKey) => (\n <div key={sectionKey}>{renderSection(sectionKey)}</div>\n ))}\n\n {secondarySections.length > 0 ? (\n <ShowMore collapsedHeight={160} label=\"Show all sections\">\n <div className=\"space-y-6\">\n {secondarySections.map((sectionKey) => (\n <div key={sectionKey}>{renderSection(sectionKey)}</div>\n ))}\n </div>\n </ShowMore>\n ) : null}\n\n <NextSteps\n storageKey=\"eventfullymanaged-operations-hub\"\n title=\"Where to go from here\"\n steps={[\n {\n id: 'overview',\n label: 'Back to the dashboard',\n description: 'See the big picture across every part of your events.',\n icon: <LayoutDashboard className=\"h-4 w-4\" />,\n onClick: () => navigate('/'),\n },\n {\n id: 'automate',\n label: 'Automate routine work',\n description: 'Set up workflow templates and rules to save time.',\n icon: <Workflow className=\"h-4 w-4\" />,\n onClick: () => navigate('/workflows'),\n },\n {\n id: 'communicate',\n label: 'Reach your audience',\n description: 'Send announcements and run campaigns.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate('/communication'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAmGA,SAAwB,EAAkB,EAAE,UAAO,gBAAa,kBAAuC;CACrG,IAAM,EAAE,gBAAa,GAAsB,EACrC,IAAe,GAA0B,EACzC,IAAqB,EAAsB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrE,IAAiB,EAA+B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC1E,IAAiB,EAA0B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrE,IAAa,EAAwB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC/D,IAAiB,EAA2B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACtE,IAAqB,EAAsB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrE,IAAmB,EAAoB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACjE,IAAkB,EAAmB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC/D,IAAgB,EAAiB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC3D,IAAkB,EAAmB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC/D,IAAa,EAAc;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrD,IAAc,EAAe;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACvD,IAAgB,EAAsB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAChE,IAAsB,EAAuB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACvE,IAA0B,EAA2B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAE/E,IAAU,EAAa,MAAM,kBAE7B,IAAgB,QACb,EAAmB,MAAM,cAAc,SAAS,EAAE,EACzD,CAAC,EAAmB,KAAK,CAC1B,EAEK,IAAiB,QAEnB,EAAc,QAAQ,GAAO,MAAiB;EAC5C,IAAM,IAAQ,OAAO,EAAa,eAAe,EAAE;AACnD,SAAO,OAAO,SAAS,EAAM,GAAG,IAAQ,IAAQ;IAC/C,EAAE,EACP,CAAC,EAAc,CAChB,EAEK,IAAQ;EACZ;GAAE,OAAO;GAAU,OAAO,GAAS,eAAe;GAAG;EACrD;GAAE,OAAO;GAAU,OAAO,GAAS,gBAAgB;GAAG;EACtD;GAAE,OAAO;GAAiB,OAAO,GAAS,sBAAsB;GAAG;EACnE;GAAE,OAAO;GAAa,OAAO,GAAS,kBAAkB;GAAG;EAC3D;GAAE,OAAO;GAAU,OAAO,GAAS,eAAe;GAAG;EACrD;GAAE,OAAO;GAAY,OAAO,GAAS,iBAAiB;GAAG;EACzD;GAAE,OAAO;GAAmB,OAAO,EAAe,QAAQ,EAAE;GAAE;EAC/D,EAEK,KAAiB,MAA2B;AAChD,MAAI,MAAe,iBAAiB;GAClC,IAAM,IAAQ,EAAmB,MAAM,cAAc,SAAS,EAAE;AAChE,UACE,kBAAC,GAAD;IACE,SAAS,EAAmB,UAAU,6BAA6B,kBAAkB,EAAK,OAAO;IACjG,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,SAAS,EAAI,QAAQ,gBAAgB,EAAI;KACpD,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,aAAa;GAC9B,IAAM,IAAQ,EAAe,MAAM,uBAAuB,SAAS,EAAE;AACrE,UACE,kBAAC,GAAD;IACE,SAAS,EAAe,UAAU,yBAAyB,cAAc,EAAK,OAAO;IACrF,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,SAAS,EAAI,QAAQ,YAAY,EAAI;KAChD,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,aAAa;GAC9B,IAAM,IAAQ,EAAe,MAAM,kBAAkB,SAAS,EAAE;AAChE,UACE,kBAAC,GAAD;IACE,SAAS,EAAe,UAAU,yBAAyB,uBAAuB,EAAK,OAAO;IAC9F,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,SAAS,EAAI,QAAQ,YAAY,EAAI;KAChD,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,SAAS;GAC1B,IAAM,IAAQ,EAAW,MAAM,gBAAgB,SAAS,EAAE;AAC1D,UACE,kBAAC,GAAD;IACE,SAAS,EAAW,UAAU,qBAAqB,qBAAqB,EAAK,OAAO;IACpF,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,SAAS,EAAI,QAAQ,QAAQ,EAAI;KAC5C,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,aAAa;GAC9B,IAAM,IAAQ,EAAe,MAAM,mBAAmB,SAAS,EAAE;AACjE,UACE,kBAAC,GAAD;IACE,SAAS,EAAe,UAAU,mCAAmC,cAAc,EAAK,OAAO;IAC/F,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,SAAS,EAAI,QAAQ,YAAY,EAAI;KAChD,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,gBACjB,QACE,kBAAC,GAAD;GACE,SAAS,EAAmB,UAAU,6BAA6B,kBAAkB,EAAc,OAAO;GAC1G,YAAW;GACX,MAAM,EAAc,KAAK,OAAS;IAChC,IAAI,EAAI;IACR,OAAO,EAAI,aAAa,YAAY,EAAI,eAAe,gBAAgB,EAAI;IAC3E,UAAU,EAAI,cAAc,GAAG,EAAI,YAAY,GAAG,EAAI,YAAY,KAAK,MAAM,GAAG,KAAA;IAChF,QAAQ,EAAI,UAAU,KAAA;IACvB,EAAE;GACH,CAAA;AAIN,MAAI,MAAe,eAAe;GAChC,IAAM,IAAO,EAAiB,MAAM,YAAY,SAAS,EAAE;AAC3D,UACE,kBAAC,GAAD;IACE,SAAS,EAAiB,UAAU,4BAA4B,iBAAiB,EAAK,OAAO;IAC7F,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,GAAG,EAAI,MAAM,GAAG,EAAI,SAAS,UAAU,EAAI;KACrD,QAAQ,EAAI,WAAW,WAAW;KACnC,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,cAAc;GAC/B,IAAM,IAAO,EAAgB,MAAM,WAAW,SAAS,EAAE;AACzD,UACE,kBAAC,GAAD;IACE,SAAS,EAAgB,UAAU,2BAA2B,gBAAgB,EAAK,OAAO;IAC1F,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,GAAG,EAAI,aAAa,GAAG,EAAI;KACrC,QAAQ,EAAI,WAAW,WAAW;KACnC,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,YAAY;GAC7B,IAAM,IAAQ,EAAc,MAAM,SAAS,SAAS,EAAE;AACtD,UACE,kBAAC,GAAD;IACE,SAAS,EAAc,UAAU,wBAAwB,aAAa,EAAK,OAAO;IAClF,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,EAAI;KACf,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,cAAc;GAC/B,IAAM,IAAQ,EAAgB,MAAM,WAAW,SAAS,EAAE;AAC1D,UACE,kBAAC,GAAD;IACE,SAAS,EAAgB,UAAU,0BAA0B,eAAe,EAAK,OAAO;IACxF,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,CAAC,EAAI,WAAW,EAAI,SAAS,CAAC,OAAO,QAAQ,CAAC,KAAK,MAAM;KACnE,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,SAAS;GAC1B,IAAM,IAAQ,EAAW,MAAM,MAAM,SAAS,EAAE;AAChD,UACE,kBAAC,GAAD;IACE,SAAS,EAAW,UAAU,qBAAqB,UAAU,EAAK,OAAO;IACzE,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,CAAC,EAAI,eAAe,EAAI,SAAS,OAA8B,KAAA,IAAvB,SAAS,EAAI,QAAoB,CAChF,OAAO,QAAQ,CACf,KAAK,MAAM;KACd,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,UAAU;GAC3B,IAAM,IAAQ,EAAY,MAAM,OAAO,SAAS,EAAE;AAClD,UACE,kBAAC,GAAD;IACE,SAAS,EAAY,UAAU,sBAAsB,WAAW,EAAK,OAAO;IAC5E,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,EAAI,QAAQ,KAAA;KACtB,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,kBAAkB;GACnC,IAAM,IAAO,EAAoB,MAAM,eAAe,SAAS,EAAE;AACjE,UACE,kBAAC,GAAD;IACE,SAAS,EAAoB,UAAU,gCAAgC,qBAAqB,EAAK,OAAO;IACxG,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,aAAa,YAAY,EAAI,eAAe,UAAU,EAAI;KACrE,UAAU,GAAG,EAAI,OAAO,KAAK,EAAI;KACjC,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;;AAIN,MAAI,MAAe,sBAAsB;GACvC,IAAM,IAAO,EAAwB,MAAM,mBAAmB,SAAS,EAAE;AACzE,UACE,kBAAC,GAAD;IACE,SAAS,EAAwB,UAAU,mCAAmC,aAAa,EAAK,OAAO;IACvG,YAAW;IACX,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI,aAAa,YAAY,EAAI,eAAe,WAAW,EAAI;KACtE,UAAU,CAAC,EAAI,MAAM,EAAI,SAAS,CAAC,OAAO,QAAQ,CAAC,KAAK,MAAM;KAC9D,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;;EAIN,IAAM,IAAQ,EAAc,MAAM,cAAc,SAAS,EAAE;AAC3D,SACE,kBAAC,GAAD;GACE,SAAS,EAAc,UAAU,wBAAwB,aAAa,EAAK,OAAO;GAClF,YAAW;GACX,MAAM,EAAK,KAAK,OAAS;IACvB,IAAI,EAAI;IACR,OAAO,EAAI,SAAS,WAAW,EAAI;IACnC,UAAU,EAAI,eAAe,KAAA;IAC7B,QAAQ,EAAI,UAAU,KAAA;IACvB,EAAE;GACH,CAAA;IAIA,KAAkB,EAAY,MAAM,GAAG,EAAE,EACzC,IAAoB,EAAY,MAAM,EAAE;AAE9C,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,IAAD,EAAA,UAAA;IAAa;IACqE;IAAM;IAG1E,EAAA,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAe,GAAqB,CAAA;IACjC,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAAoC;IAAgB,CAAA,CACnD,EAAA,CAAA;GAEhB,kBAAC,WAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAA0C;IAAwB,CAAA,EAChF,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAM,KAAK,MACV,kBAAC,GAAD;KAA4B,WAAU;KAAS,WAAU;eAAzD,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAuD,EAAK;MAAU,CAAA,EACnF,kBAAC,KAAD;MAAG,WAAU;gBAA6D,EAAK;MAAU,CAAA,CAC/E;OAHI,EAAK,MAGT,CACZ;IACE,CAAA,CACE,EAAA,CAAA;GAET,GAAgB,KAAK,MACpB,kBAAC,OAAD,EAAA,UAAuB,EAAc,EAAW,EAAO,EAA7C,EAA6C,CACvD;GAED,EAAkB,SAAS,IAC1B,kBAAC,IAAD;IAAU,iBAAiB;IAAK,OAAM;cACpC,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAkB,KAAK,MACtB,kBAAC,OAAD,EAAA,UAAuB,EAAc,EAAW,EAAO,EAA7C,EAA6C,CACvD;KACE,CAAA;IACG,CAAA,GACT;GAEJ,kBAAC,GAAD;IACE,YAAW;IACX,OAAM;IACN,OAAO;KACL;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAiB,WAAU,WAAY,CAAA;MAC7C,eAAe,EAAS,IAAI;MAC7B;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAU,WAAU,WAAY,CAAA;MACtC,eAAe,EAAS,aAAa;MACtC;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;MACvC,eAAe,EAAS,iBAAiB;MAC1C;KACF;IACD,CAAA;GACE"}