@burdenoff/microfe-eventfullymanaged 2026.723.1 → 2026.730.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 (23) hide show
  1. package/dist/eventfullymanaged/api/eventApi.d.ts +59 -1
  2. package/dist/eventfullymanaged/api/eventApi.d.ts.map +1 -1
  3. package/dist/eventfullymanaged/api/eventApi.js +317 -236
  4. package/dist/eventfullymanaged/api/eventApi.js.map +1 -1
  5. package/dist/eventfullymanaged/lib/offlineCheckInQueue.d.ts +54 -0
  6. package/dist/eventfullymanaged/lib/offlineCheckInQueue.d.ts.map +1 -0
  7. package/dist/eventfullymanaged/lib/offlineCheckInQueue.js +68 -0
  8. package/dist/eventfullymanaged/lib/offlineCheckInQueue.js.map +1 -0
  9. package/dist/eventfullymanaged/lib/useOfflineCheckInSync.d.ts +29 -0
  10. package/dist/eventfullymanaged/lib/useOfflineCheckInSync.d.ts.map +1 -0
  11. package/dist/eventfullymanaged/lib/useOfflineCheckInSync.js +73 -0
  12. package/dist/eventfullymanaged/lib/useOfflineCheckInSync.js.map +1 -0
  13. package/dist/eventfullymanaged/pages/modules/KioskPage.d.ts.map +1 -1
  14. package/dist/eventfullymanaged/pages/modules/KioskPage.js +381 -311
  15. package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
  16. package/dist/eventfullymanaged/pages/modules/NetworkingPage.d.ts.map +1 -1
  17. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +211 -177
  18. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
  19. package/dist/eventfullymanaged/pages/modules/RegistrationPage.d.ts.map +1 -1
  20. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +293 -209
  21. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
  22. package/dist/eventfullymanaged/types/index.d.ts.map +1 -1
  23. package/package.json +3 -2
@@ -1,23 +1,60 @@
1
1
  import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
2
- import { notify as t } from "../../lib/toast.js";
3
- import { useAttendeesQuery as n, useDeleteAttendeeMutation as r, useDeletePromoCodeMutation as i, useDeleteRegistrationMutation as a, usePromoCodesQuery as o, useRegistrationsQuery as s, useTicketTypesQuery as c, useUpdateRegistrationMutation as l } from "../../api/eventApi.js";
4
- import { ActionMenu as u } from "../../components/ActionMenu.js";
5
- import { Pagination as d, usePagination as f } from "../../components/Pagination.js";
6
- import { mutationSucceeded as p } from "../../lib/mutationResult.js";
7
- import { formatMoney as m } from "../../lib/format.js";
8
- import { useMemo as h } from "react";
9
- import { jsx as g, jsxs as _ } from "react/jsx-runtime";
10
- import { Megaphone as v, Tag as y, TicketPlus as b, UserPlus as x, Users as S } from "lucide-react";
11
- import { Badge as C, Button as w, EmphasisPanel as T, GlassCard as E, GradientText as D, IllustratedEmptyState as O, NextSteps as k, PagePurpose as A, ResponsiveTable as j } from "@burdenoff/fe-libs/ui";
2
+ import { useApolloClient as t } from "../../../node_modules/@apollo/client/react/hooks/useApolloClient.js";
3
+ import { notify as n } from "../../lib/toast.js";
4
+ import { BADGE_PDF_QUERY as r, downloadBase64Pdf as i, useAttendeesQuery as a, useCheckInTokenQuery as o, useDeleteAttendeeMutation as s, useDeletePromoCodeMutation as c, useDeleteRegistrationMutation as l, usePromoCodesQuery as u, useRegistrationsQuery as d, useTicketTypesQuery as f, useUpdateRegistrationMutation as p } from "../../api/eventApi.js";
5
+ import { ActionMenu as m } from "../../components/ActionMenu.js";
6
+ import { Pagination as h, usePagination as g } from "../../components/Pagination.js";
7
+ import { describeError as _, mutationSucceeded as v } from "../../lib/mutationResult.js";
8
+ import { formatMoney as y } from "../../lib/format.js";
9
+ import { useMemo as b, useState as x } from "react";
10
+ import { Fragment as S, jsx as C, jsxs as w } from "react/jsx-runtime";
11
+ import { Badge as T, Megaphone as E, QrCode as D, Tag as O, TicketPlus as k, UserPlus as A, Users as j } from "lucide-react";
12
+ import { Badge as M, Button as N, EmphasisPanel as P, GlassCard as F, GradientText as I, IllustratedEmptyState as L, NextSteps as R, PagePurpose as z, ResponsiveDialog as B, ResponsiveDialogContent as V, ResponsiveDialogDescription as H, ResponsiveDialogFooter as U, ResponsiveDialogHeader as W, ResponsiveDialogTitle as G, ResponsiveTable as K } from "@burdenoff/fe-libs/ui";
12
13
  //#region src/eventfullymanaged/pages/modules/RegistrationPage.tsx
13
- var M = [
14
+ function q({ registrationId: e, label: t, onOpenChange: n }) {
15
+ let { data: r, loading: i, error: a } = o(e), s = r?.checkInToken;
16
+ return /* @__PURE__ */ C(B, {
17
+ open: !0,
18
+ onOpenChange: n,
19
+ children: /* @__PURE__ */ w(V, {
20
+ className: "max-w-sm",
21
+ children: [
22
+ /* @__PURE__ */ w(W, { children: [/* @__PURE__ */ C(G, { children: "Check-in QR" }), /* @__PURE__ */ w(H, { children: [t, " scans this code at any check-in station to check in — it works even if the station has no connection at the moment."] })] }),
23
+ /* @__PURE__ */ C("div", {
24
+ className: "flex flex-col items-center gap-3 py-2",
25
+ children: i ? /* @__PURE__ */ C("p", {
26
+ className: "text-sm text-text-secondary",
27
+ children: "Generating…"
28
+ }) : a || !s ? /* @__PURE__ */ C("p", {
29
+ className: "text-sm text-status-danger-text",
30
+ children: "Could not generate a check-in QR for this registration."
31
+ }) : /* @__PURE__ */ w(S, { children: [/* @__PURE__ */ C("img", {
32
+ src: s.qrDataUrl,
33
+ alt: `Check-in QR code for ${t}`,
34
+ className: "h-56 w-56 rounded-card border border-border-seam bg-white p-2"
35
+ }), /* @__PURE__ */ C("code", {
36
+ className: "max-w-full break-all rounded bg-bg-sunken px-2 py-1 text-xs text-text-secondary",
37
+ children: s.token
38
+ })] })
39
+ }),
40
+ /* @__PURE__ */ C(U, { children: /* @__PURE__ */ C(N, {
41
+ type: "button",
42
+ variant: "outline",
43
+ onClick: () => n(!1),
44
+ children: "Close"
45
+ }) })
46
+ ]
47
+ })
48
+ });
49
+ }
50
+ var J = [
14
51
  "PENDING",
15
52
  "CONFIRMED",
16
53
  "WAITLISTED",
17
54
  "CANCELLED",
18
55
  "CHECKED_IN"
19
56
  ];
20
- function N(e) {
57
+ function Y(e) {
21
58
  switch ((e ?? "").toUpperCase()) {
22
59
  case "CONFIRMED":
23
60
  case "CHECKED_IN": return "default";
@@ -26,47 +63,47 @@ function N(e) {
26
63
  default: return "secondary";
27
64
  }
28
65
  }
29
- function P({ used: e, max: t }) {
30
- if (t == null || t <= 0) return /* @__PURE__ */ _("span", {
66
+ function X({ used: e, max: t }) {
67
+ if (t == null || t <= 0) return /* @__PURE__ */ w("span", {
31
68
  className: "text-xs text-text-secondary",
32
69
  children: [e, " used"]
33
70
  });
34
71
  let n = Math.min(100, Math.round(e / t * 100));
35
- return /* @__PURE__ */ _("div", {
72
+ return /* @__PURE__ */ w("div", {
36
73
  className: "min-w-[7rem] space-y-1",
37
- children: [/* @__PURE__ */ _("div", {
74
+ children: [/* @__PURE__ */ w("div", {
38
75
  className: "flex items-center justify-between text-xs tabular-nums text-text-secondary",
39
- children: [/* @__PURE__ */ _("span", { children: [
76
+ children: [/* @__PURE__ */ w("span", { children: [
40
77
  e,
41
78
  " / ",
42
79
  t
43
- ] }), /* @__PURE__ */ _("span", {
80
+ ] }), /* @__PURE__ */ w("span", {
44
81
  className: "text-text-muted",
45
82
  children: [n, "%"]
46
83
  })]
47
- }), /* @__PURE__ */ g("div", {
84
+ }), /* @__PURE__ */ C("div", {
48
85
  className: "h-1.5 w-full overflow-hidden rounded-full bg-bg-sunken",
49
- children: /* @__PURE__ */ g("div", {
86
+ children: /* @__PURE__ */ C("div", {
50
87
  className: `h-full rounded-full ${n >= 90 ? "bg-status-warning" : "bg-action-primary-bg"}`,
51
88
  style: { width: `${n}%` }
52
89
  })
53
90
  })]
54
91
  });
55
92
  }
56
- function F({ icon: e, title: t, count: n, loading: r, action: i, children: a }) {
57
- return /* @__PURE__ */ _(E, {
93
+ function Z({ icon: e, title: t, count: n, loading: r, action: i, children: a }) {
94
+ return /* @__PURE__ */ w(F, {
58
95
  treatment: "plain",
59
96
  className: "border-border-seam p-5",
60
- children: [/* @__PURE__ */ _("div", {
97
+ children: [/* @__PURE__ */ w("div", {
61
98
  className: "flex items-center justify-between gap-3",
62
- children: [/* @__PURE__ */ _("div", {
99
+ children: [/* @__PURE__ */ w("div", {
63
100
  className: "flex items-center gap-3",
64
- children: [/* @__PURE__ */ g("span", {
101
+ children: [/* @__PURE__ */ C("span", {
65
102
  className: "flex h-9 w-9 items-center justify-center rounded-input bg-accent-wash text-action-primary",
66
103
  children: e
67
- }), /* @__PURE__ */ _("h2", {
104
+ }), /* @__PURE__ */ w("h2", {
68
105
  className: "text-lg font-semibold text-text-primary",
69
- children: [r ? `Loading ${t.toLowerCase()}…` : t, !r && n != null ? /* @__PURE__ */ _("span", {
106
+ children: [r ? `Loading ${t.toLowerCase()}…` : t, !r && n != null ? /* @__PURE__ */ w("span", {
70
107
  className: "ml-2 text-sm font-normal text-text-secondary",
71
108
  children: [
72
109
  "(",
@@ -76,32 +113,51 @@ function F({ icon: e, title: t, count: n, loading: r, action: i, children: a })
76
113
  }) : null]
77
114
  })]
78
115
  }), i]
79
- }), /* @__PURE__ */ g("div", {
116
+ }), /* @__PURE__ */ C("div", {
80
117
  className: "mt-4",
81
118
  children: a
82
119
  })]
83
120
  });
84
121
  }
85
- function I() {
86
- let e = f({ pageSize: 10 }), { data: r, loading: i } = s({
122
+ function Q() {
123
+ let e = g({ pageSize: 10 }), { data: o, loading: s } = d({
87
124
  limit: e.limit,
88
125
  offset: e.offset
89
- }), [o] = l(), [v] = a(), { data: y } = n({
126
+ }), [c] = p(), [u] = l(), [S, E] = x(null), O = t(), [A, j] = x(null), N = async (e, t) => {
127
+ j(e);
128
+ try {
129
+ let { data: a, error: o } = await O.query({
130
+ query: r,
131
+ variables: { registrationId: e },
132
+ fetchPolicy: "network-only",
133
+ errorPolicy: "all"
134
+ });
135
+ if (o || !a?.badgePdf) {
136
+ n.error("Could not generate badge", o?.message ?? "Please try again.");
137
+ return;
138
+ }
139
+ i(a.badgePdf, `${t.replace(/[^a-z0-9]+/gi, "-")}-badge.pdf`), n.success("Badge ready", `${t}'s badge downloaded.`);
140
+ } catch (e) {
141
+ n.error("Could not generate badge", _(e));
142
+ } finally {
143
+ j(null);
144
+ }
145
+ }, { data: P } = a({
90
146
  limit: 200,
91
147
  offset: 0
92
- }), { data: x } = c({
148
+ }), { data: F } = f({
93
149
  limit: 200,
94
150
  offset: 0
95
- }), S = h(() => {
151
+ }), I = b(() => {
96
152
  let e = /* @__PURE__ */ new Map();
97
- for (let t of y?.attendees.items ?? []) t.id && t.fullName && e.set(t.id, t.fullName);
153
+ for (let t of P?.attendees.items ?? []) t.id && t.fullName && e.set(t.id, t.fullName);
98
154
  return e;
99
- }, [y]), w = h(() => {
155
+ }, [P]), R = b(() => {
100
156
  let e = /* @__PURE__ */ new Map();
101
- for (let t of x?.ticketTypes.items ?? []) t.id && t.name && e.set(t.id, t.name);
157
+ for (let t of F?.ticketTypes.items ?? []) t.id && t.name && e.set(t.id, t.name);
102
158
  return e;
103
- }, [x]), T = (e) => e ? S.get(e) ?? `Attendee ${e.slice(0, 8)}…` : null, E = h(() => r?.registrations.items ?? [], [r]), D = r?.registrations.total ?? 0, k = async (e, n) => {
104
- let r = await o({ variables: {
159
+ }, [F]), z = (e) => e ? I.get(e) ?? `Attendee ${e.slice(0, 8)}…` : null, B = b(() => o?.registrations.items ?? [], [o]), V = o?.registrations.total ?? 0, H = async (e, t) => {
160
+ let r = await c({ variables: {
105
161
  id: e.id,
106
162
  input: {
107
163
  eventId: e.eventId,
@@ -110,132 +166,160 @@ function I() {
110
166
  quantity: e.quantity,
111
167
  currency: e.currency,
112
168
  totalAmount: e.totalAmount ?? null,
113
- status: n
169
+ status: t
114
170
  }
115
171
  } });
116
- p(r, r.data?.updateRegistration?.id, "Could not update registration") && t.success("Registration updated", `Status set to ${n}`);
117
- }, A = async (e, n) => {
118
- let r = await v({ variables: { id: e.id } });
119
- if (r.error) throw t.error("Could not delete registration", r.error.message), r.error;
120
- if (!r.data?.deleteRegistration) throw t.error("Could not delete registration", "The server did not confirm the change."), Error("delete-unconfirmed");
121
- t.success("Registration deleted", n);
122
- }, P = (e) => T(e.attendeeId) ?? `Registration ${e.id}`;
123
- return /* @__PURE__ */ _(F, {
124
- icon: /* @__PURE__ */ g(b, { className: "h-4 w-4" }),
172
+ v(r, r.data?.updateRegistration?.id, "Could not update registration") && n.success("Registration updated", `Status set to ${t}`);
173
+ }, U = async (e, t) => {
174
+ let r = await u({ variables: { id: e.id } });
175
+ if (r.error) throw n.error("Could not delete registration", r.error.message), r.error;
176
+ if (!r.data?.deleteRegistration) throw n.error("Could not delete registration", "The server did not confirm the change."), Error("delete-unconfirmed");
177
+ n.success("Registration deleted", t);
178
+ }, W = (e) => z(e.attendeeId) ?? `Registration ${e.id}`;
179
+ return /* @__PURE__ */ w(Z, {
180
+ icon: /* @__PURE__ */ C(k, { className: "h-4 w-4" }),
125
181
  title: "Registrations",
126
- count: D,
127
- loading: i,
128
- children: [/* @__PURE__ */ g(j, {
129
- columns: [
130
- {
131
- key: "name",
132
- header: "Name",
133
- priority: "primary",
134
- cell: (e) => /* @__PURE__ */ g("span", {
135
- className: "font-medium text-text-primary",
136
- children: P(e)
137
- })
138
- },
139
- {
140
- key: "ticket",
141
- header: "Ticket Type",
142
- mobileLabel: "Ticket",
143
- cell: (e) => /* @__PURE__ */ g("span", {
144
- className: "text-text-secondary",
145
- children: e.ticketTypeId ? w.get(e.ticketTypeId) ?? "—" : "—"
146
- })
147
- },
148
- {
149
- key: "quantity",
150
- header: "Qty",
151
- mobileLabel: "Quantity",
152
- priority: "secondary",
153
- cell: (e) => /* @__PURE__ */ g("span", {
154
- className: "tabular-nums text-text-secondary",
155
- children: e.quantity
156
- })
157
- },
158
- {
159
- key: "amount",
160
- header: "Amount",
161
- cell: (e) => /* @__PURE__ */ g("span", {
162
- className: "tabular-nums text-text-primary",
163
- children: e.totalAmount ? m(Number(e.totalAmount), e.currency) : "—"
164
- })
165
- },
166
- {
167
- key: "status",
168
- header: "Status",
169
- priority: "primary",
170
- cell: (e) => /* @__PURE__ */ g(C, {
171
- variant: N(e.status),
172
- children: e.status ?? "UNKNOWN"
173
- })
174
- }
175
- ],
176
- data: E,
177
- rowKey: (e) => e.id,
178
- emptyState: i ? null : /* @__PURE__ */ g(O, {
179
- illustration: "empty-data",
180
- title: "No registrations yet.",
181
- description: "Register your first attendee to start tracking sign-ups."
182
- }),
183
- rowActions: (e) => {
184
- let t = P(e);
185
- return /* @__PURE__ */ g(u, {
186
- ariaLabel: "Registration actions",
187
- entityName: t,
188
- deleteLabel: "Delete registration",
189
- extraItems: M.filter((t) => t !== (e.status ?? "").toUpperCase()).map((t, n) => ({
182
+ count: V,
183
+ loading: s,
184
+ children: [
185
+ /* @__PURE__ */ C(K, {
186
+ columns: [
187
+ {
188
+ key: "name",
189
+ header: "Name",
190
+ priority: "primary",
191
+ cell: (e) => /* @__PURE__ */ C("span", {
192
+ className: "font-medium text-text-primary",
193
+ children: W(e)
194
+ })
195
+ },
196
+ {
197
+ key: "ticket",
198
+ header: "Ticket Type",
199
+ mobileLabel: "Ticket",
200
+ cell: (e) => /* @__PURE__ */ C("span", {
201
+ className: "text-text-secondary",
202
+ children: e.ticketTypeId ? R.get(e.ticketTypeId) ?? "—" : "—"
203
+ })
204
+ },
205
+ {
206
+ key: "quantity",
207
+ header: "Qty",
208
+ mobileLabel: "Quantity",
209
+ priority: "secondary",
210
+ cell: (e) => /* @__PURE__ */ C("span", {
211
+ className: "tabular-nums text-text-secondary",
212
+ children: e.quantity
213
+ })
214
+ },
215
+ {
216
+ key: "amount",
217
+ header: "Amount",
218
+ cell: (e) => /* @__PURE__ */ C("span", {
219
+ className: "tabular-nums text-text-primary",
220
+ children: e.totalAmount ? y(Number(e.totalAmount), e.currency) : "—"
221
+ })
222
+ },
223
+ {
224
+ key: "status",
225
+ header: "Status",
226
+ priority: "primary",
227
+ cell: (e) => /* @__PURE__ */ C(M, {
228
+ variant: Y(e.status),
229
+ children: e.status ?? "UNKNOWN"
230
+ })
231
+ }
232
+ ],
233
+ data: B,
234
+ rowKey: (e) => e.id,
235
+ emptyState: s ? null : /* @__PURE__ */ C(L, {
236
+ illustration: "empty-data",
237
+ title: "No registrations yet.",
238
+ description: "Register your first attendee to start tracking sign-ups."
239
+ }),
240
+ rowActions: (e) => {
241
+ let t = W(e), n = J.filter((t) => t !== (e.status ?? "").toUpperCase()).map((t, n) => ({
190
242
  key: t,
191
243
  label: `Set ${t.replace("_", " ").toLowerCase()}`,
192
- onSelect: () => void k(e, t),
244
+ onSelect: () => void H(e, t),
193
245
  separatorBefore: n === 0
194
- })),
195
- onDelete: () => A(e, t)
246
+ }));
247
+ return /* @__PURE__ */ C(m, {
248
+ ariaLabel: "Registration actions",
249
+ entityName: t,
250
+ deleteLabel: "Delete registration",
251
+ extraItems: [
252
+ {
253
+ key: "view-qr",
254
+ label: "View check-in QR",
255
+ icon: D,
256
+ onSelect: () => E(e.id)
257
+ },
258
+ {
259
+ key: "download-badge",
260
+ label: A === e.id ? "Generating badge…" : "Download badge",
261
+ icon: T,
262
+ disabled: A === e.id,
263
+ onSelect: () => void N(e.id, t)
264
+ },
265
+ ...n
266
+ ],
267
+ onDelete: () => U(e, t)
268
+ });
269
+ }
270
+ }),
271
+ /* @__PURE__ */ C(h, {
272
+ offset: e.offset,
273
+ limit: e.limit,
274
+ loadedCount: B.length,
275
+ total: V,
276
+ onPrev: e.prevPage,
277
+ onNext: e.nextPage,
278
+ itemLabel: "registrations",
279
+ loading: s
280
+ }),
281
+ S ? (() => {
282
+ let e = B.find((e) => e.id === S);
283
+ return /* @__PURE__ */ C(q, {
284
+ registrationId: S,
285
+ label: e ? W(e) : `Registration ${S}`,
286
+ onOpenChange: (e) => {
287
+ e || E(null);
288
+ }
196
289
  });
197
- }
198
- }), /* @__PURE__ */ g(d, {
199
- offset: e.offset,
200
- limit: e.limit,
201
- loadedCount: E.length,
202
- total: D,
203
- onPrev: e.prevPage,
204
- onNext: e.nextPage,
205
- itemLabel: "registrations",
206
- loading: i
207
- })]
290
+ })() : null
291
+ ]
208
292
  });
209
293
  }
210
- function L() {
211
- let { navigate: i } = e(), a = f({ pageSize: 10 }), { data: o, loading: s } = n({
212
- limit: a.limit,
213
- offset: a.offset
214
- }), [c] = r(), l = h(() => o?.attendees.items ?? [], [o]), p = o?.attendees.total ?? 0, m = async (e) => {
215
- let n = await c({ variables: { id: e.id } });
216
- if (n.error) throw t.error("Could not delete attendee", n.error.message), n.error;
217
- if (!n.data?.deleteAttendee) throw t.error("Could not delete attendee", "The server did not confirm the change."), Error("delete-unconfirmed");
218
- t.success("Attendee deleted", e.fullName);
294
+ function $() {
295
+ let { navigate: t } = e(), r = g({ pageSize: 10 }), { data: i, loading: o } = a({
296
+ limit: r.limit,
297
+ offset: r.offset
298
+ }), [c] = s(), l = b(() => i?.attendees.items ?? [], [i]), u = i?.attendees.total ?? 0, d = async (e) => {
299
+ let t = await c({ variables: { id: e.id } });
300
+ if (t.error) throw n.error("Could not delete attendee", t.error.message), t.error;
301
+ if (!t.data?.deleteAttendee) throw n.error("Could not delete attendee", "The server did not confirm the change."), Error("delete-unconfirmed");
302
+ n.success("Attendee deleted", e.fullName);
219
303
  };
220
- return /* @__PURE__ */ _(F, {
221
- icon: /* @__PURE__ */ g(S, { className: "h-4 w-4" }),
304
+ return /* @__PURE__ */ w(Z, {
305
+ icon: /* @__PURE__ */ C(j, { className: "h-4 w-4" }),
222
306
  title: "Attendees",
223
- count: p,
224
- loading: s,
225
- action: /* @__PURE__ */ _(w, {
307
+ count: u,
308
+ loading: o,
309
+ action: /* @__PURE__ */ w(N, {
226
310
  type: "button",
227
311
  size: "sm",
228
312
  variant: "outline",
229
- onClick: () => i("/registration/attendees/create"),
230
- children: [/* @__PURE__ */ g(x, { className: "h-4 w-4" }), "Add attendee"]
313
+ onClick: () => t("/registration/attendees/create"),
314
+ children: [/* @__PURE__ */ C(A, { className: "h-4 w-4" }), "Add attendee"]
231
315
  }),
232
- children: [/* @__PURE__ */ g(j, {
316
+ children: [/* @__PURE__ */ C(K, {
233
317
  columns: [
234
318
  {
235
319
  key: "name",
236
320
  header: "Name",
237
321
  priority: "primary",
238
- cell: (e) => /* @__PURE__ */ g("span", {
322
+ cell: (e) => /* @__PURE__ */ C("span", {
239
323
  className: "font-medium text-text-primary",
240
324
  children: e.fullName
241
325
  })
@@ -244,7 +328,7 @@ function L() {
244
328
  key: "email",
245
329
  header: "Email",
246
330
  priority: "primary",
247
- cell: (e) => /* @__PURE__ */ g("span", {
331
+ cell: (e) => /* @__PURE__ */ C("span", {
248
332
  className: "text-text-secondary",
249
333
  children: e.email
250
334
  })
@@ -252,7 +336,7 @@ function L() {
252
336
  {
253
337
  key: "company",
254
338
  header: "Company",
255
- cell: (e) => /* @__PURE__ */ g("span", {
339
+ cell: (e) => /* @__PURE__ */ C("span", {
256
340
  className: "text-text-secondary",
257
341
  children: [e.company, e.role].filter(Boolean).join(" · ") || "—"
258
342
  })
@@ -260,59 +344,59 @@ function L() {
260
344
  ],
261
345
  data: l,
262
346
  rowKey: (e) => e.id,
263
- emptyState: s ? null : /* @__PURE__ */ g(O, {
347
+ emptyState: o ? null : /* @__PURE__ */ C(L, {
264
348
  illustration: "empty-people",
265
349
  title: "No attendees yet.",
266
350
  description: "Add attendees or register one to build your guest list."
267
351
  }),
268
- rowActions: (e) => /* @__PURE__ */ g(u, {
352
+ rowActions: (e) => /* @__PURE__ */ C(m, {
269
353
  ariaLabel: `Actions for ${e.fullName}`,
270
354
  entityName: e.fullName,
271
355
  deleteLabel: "Delete attendee",
272
- onView: () => i(`/attendees/${e.id}/profile`),
273
- onEdit: () => i(`/registration/attendees/${e.id}/edit`),
274
- onDelete: () => m(e)
356
+ onView: () => t(`/attendees/${e.id}/profile`),
357
+ onEdit: () => t(`/registration/attendees/${e.id}/edit`),
358
+ onDelete: () => d(e)
275
359
  })
276
- }), /* @__PURE__ */ g(d, {
277
- offset: a.offset,
278
- limit: a.limit,
360
+ }), /* @__PURE__ */ C(h, {
361
+ offset: r.offset,
362
+ limit: r.limit,
279
363
  loadedCount: l.length,
280
- total: p,
281
- onPrev: a.prevPage,
282
- onNext: a.nextPage,
364
+ total: u,
365
+ onPrev: r.prevPage,
366
+ onNext: r.nextPage,
283
367
  itemLabel: "attendees",
284
- loading: s
368
+ loading: o
285
369
  })]
286
370
  });
287
371
  }
288
- function R() {
289
- let { navigate: n } = e(), r = f({ pageSize: 10 }), { data: a, loading: s } = o({
372
+ function ee() {
373
+ let { navigate: t } = e(), r = g({ pageSize: 10 }), { data: i, loading: a } = u({
290
374
  limit: r.limit,
291
375
  offset: r.offset
292
- }), [c] = i(), l = h(() => a?.promoCodes.items ?? [], [a]), p = a?.promoCodes.total ?? 0, m = async (e) => {
293
- let n = await c({ variables: { id: e.id } });
294
- if (n.error) throw t.error("Could not delete promo code", n.error.message), n.error;
295
- t.success("Promo code deleted", e.code);
376
+ }), [o] = c(), s = b(() => i?.promoCodes.items ?? [], [i]), l = i?.promoCodes.total ?? 0, d = async (e) => {
377
+ let t = await o({ variables: { id: e.id } });
378
+ if (t.error) throw n.error("Could not delete promo code", t.error.message), t.error;
379
+ n.success("Promo code deleted", e.code);
296
380
  };
297
- return /* @__PURE__ */ _(F, {
298
- icon: /* @__PURE__ */ g(y, { className: "h-4 w-4" }),
381
+ return /* @__PURE__ */ w(Z, {
382
+ icon: /* @__PURE__ */ C(O, { className: "h-4 w-4" }),
299
383
  title: "Promo Codes",
300
- count: p,
301
- loading: s,
302
- action: /* @__PURE__ */ _(w, {
384
+ count: l,
385
+ loading: a,
386
+ action: /* @__PURE__ */ w(N, {
303
387
  type: "button",
304
388
  size: "sm",
305
389
  variant: "outline",
306
- onClick: () => n("/registration/promo-codes/create"),
307
- children: [/* @__PURE__ */ g(b, { className: "h-4 w-4" }), "New promo code"]
390
+ onClick: () => t("/registration/promo-codes/create"),
391
+ children: [/* @__PURE__ */ C(k, { className: "h-4 w-4" }), "New promo code"]
308
392
  }),
309
- children: [/* @__PURE__ */ g(j, {
393
+ children: [/* @__PURE__ */ C(K, {
310
394
  columns: [
311
395
  {
312
396
  key: "code",
313
397
  header: "Code",
314
398
  priority: "primary",
315
- cell: (e) => /* @__PURE__ */ g("span", {
399
+ cell: (e) => /* @__PURE__ */ C("span", {
316
400
  className: "font-mono text-sm font-semibold text-text-primary",
317
401
  children: e.code
318
402
  })
@@ -321,12 +405,12 @@ function R() {
321
405
  key: "discount",
322
406
  header: "Discount",
323
407
  priority: "primary",
324
- cell: (e) => /* @__PURE__ */ _("span", {
408
+ cell: (e) => /* @__PURE__ */ w("span", {
325
409
  className: "flex items-center gap-2",
326
- children: [/* @__PURE__ */ g(C, {
410
+ children: [/* @__PURE__ */ C(M, {
327
411
  variant: "secondary",
328
412
  children: e.discountType === "PERCENT" ? "PERCENT" : "FIXED"
329
- }), /* @__PURE__ */ g("span", {
413
+ }), /* @__PURE__ */ C("span", {
330
414
  className: "text-sm text-text-secondary",
331
415
  children: e.discountType === "PERCENT" ? `${e.discountValue}%` : e.discountValue
332
416
  })]
@@ -335,7 +419,7 @@ function R() {
335
419
  {
336
420
  key: "usage",
337
421
  header: "Usage",
338
- cell: (e) => /* @__PURE__ */ g(P, {
422
+ cell: (e) => /* @__PURE__ */ C(X, {
339
423
  used: e.usedCount,
340
424
  max: e.maxUses
341
425
  })
@@ -344,78 +428,78 @@ function R() {
344
428
  key: "status",
345
429
  header: "Status",
346
430
  priority: "secondary",
347
- cell: (e) => /* @__PURE__ */ g(C, {
431
+ cell: (e) => /* @__PURE__ */ C(M, {
348
432
  variant: e.isActive ? "default" : "secondary",
349
433
  children: e.isActive ? "Active" : "Inactive"
350
434
  })
351
435
  }
352
436
  ],
353
- data: l,
437
+ data: s,
354
438
  rowKey: (e) => e.id,
355
- emptyState: s ? null : /* @__PURE__ */ g(O, {
439
+ emptyState: a ? null : /* @__PURE__ */ C(L, {
356
440
  illustration: "empty-data",
357
441
  title: "No promo codes yet.",
358
442
  description: "Create a code to offer discounts and drive registrations."
359
443
  }),
360
- rowActions: (e) => /* @__PURE__ */ g(u, {
444
+ rowActions: (e) => /* @__PURE__ */ C(m, {
361
445
  ariaLabel: `Actions for ${e.code}`,
362
446
  entityName: e.code,
363
- onEdit: () => n(`/registration/promo-codes/${e.id}/edit`),
364
- onDelete: () => m(e)
447
+ onEdit: () => t(`/registration/promo-codes/${e.id}/edit`),
448
+ onDelete: () => d(e)
365
449
  })
366
- }), /* @__PURE__ */ g(d, {
450
+ }), /* @__PURE__ */ C(h, {
367
451
  offset: r.offset,
368
452
  limit: r.limit,
369
- loadedCount: l.length,
370
- total: p,
453
+ loadedCount: s.length,
454
+ total: l,
371
455
  onPrev: r.prevPage,
372
456
  onNext: r.nextPage,
373
457
  itemLabel: "promo codes",
374
- loading: s
458
+ loading: a
375
459
  })]
376
460
  });
377
461
  }
378
- function z() {
462
+ function te() {
379
463
  let { navigate: t } = e();
380
- return /* @__PURE__ */ _("div", {
464
+ return /* @__PURE__ */ w("div", {
381
465
  className: "space-y-6 p-6",
382
466
  children: [
383
- /* @__PURE__ */ g(A, { children: "This is where you see who is coming. Registrations are the paid or confirmed sign-ups, attendees are the people behind them, and promo codes let you offer discounts. Register attendees, edit their details, change a registration's status, and manage discount codes — all backed by live GraphQL APIs." }),
384
- /* @__PURE__ */ g(T, { children: /* @__PURE__ */ _("div", {
467
+ /* @__PURE__ */ C(z, { children: "This is where you see who is coming. Registrations are the paid or confirmed sign-ups, attendees are the people behind them, and promo codes let you offer discounts. Register attendees, edit their details, change a registration's status, and manage discount codes — all backed by live GraphQL APIs." }),
468
+ /* @__PURE__ */ C(P, { children: /* @__PURE__ */ w("div", {
385
469
  className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
386
- children: [/* @__PURE__ */ _("div", { children: [/* @__PURE__ */ g("h1", {
470
+ children: [/* @__PURE__ */ w("div", { children: [/* @__PURE__ */ C("h1", {
387
471
  className: "text-2xl font-bold text-text-primary",
388
- children: /* @__PURE__ */ g(D, { children: "Registration" })
389
- }), /* @__PURE__ */ g("p", {
472
+ children: /* @__PURE__ */ C(I, { children: "Registration" })
473
+ }), /* @__PURE__ */ C("p", {
390
474
  className: "mt-1 text-sm text-text-secondary",
391
475
  children: "Track registrations, attendees, and promo codes with backend persistence."
392
- })] }), /* @__PURE__ */ _("div", {
476
+ })] }), /* @__PURE__ */ w("div", {
393
477
  className: "flex flex-wrap gap-2",
394
478
  children: [
395
- /* @__PURE__ */ _(w, {
479
+ /* @__PURE__ */ w(N, {
396
480
  type: "button",
397
481
  onClick: () => t("/registration/register"),
398
- children: [/* @__PURE__ */ g(b, { className: "h-4 w-4" }), "Register attendee"]
482
+ children: [/* @__PURE__ */ C(k, { className: "h-4 w-4" }), "Register attendee"]
399
483
  }),
400
- /* @__PURE__ */ _(w, {
484
+ /* @__PURE__ */ w(N, {
401
485
  type: "button",
402
486
  variant: "outline",
403
487
  onClick: () => t("/registration/attendees/create"),
404
- children: [/* @__PURE__ */ g(x, { className: "h-4 w-4" }), "Add attendee"]
488
+ children: [/* @__PURE__ */ C(A, { className: "h-4 w-4" }), "Add attendee"]
405
489
  }),
406
- /* @__PURE__ */ _(w, {
490
+ /* @__PURE__ */ w(N, {
407
491
  type: "button",
408
492
  variant: "outline",
409
493
  onClick: () => t("/registration/promo-codes/create"),
410
- children: [/* @__PURE__ */ g(y, { className: "h-4 w-4" }), "New promo code"]
494
+ children: [/* @__PURE__ */ C(O, { className: "h-4 w-4" }), "New promo code"]
411
495
  })
412
496
  ]
413
497
  })]
414
498
  }) }),
415
- /* @__PURE__ */ g(I, {}),
416
- /* @__PURE__ */ g(L, {}),
417
- /* @__PURE__ */ g(R, {}),
418
- /* @__PURE__ */ g(k, {
499
+ /* @__PURE__ */ C(Q, {}),
500
+ /* @__PURE__ */ C($, {}),
501
+ /* @__PURE__ */ C(ee, {}),
502
+ /* @__PURE__ */ C(R, {
419
503
  storageKey: "eventfullymanaged-registration",
420
504
  title: "Grow your registrations",
421
505
  steps: [
@@ -423,21 +507,21 @@ function z() {
423
507
  id: "view-networking",
424
508
  label: "Set up attendee networking",
425
509
  description: "Turn registered attendees into connections with matchmaking.",
426
- icon: /* @__PURE__ */ g(S, { className: "h-4 w-4" }),
510
+ icon: /* @__PURE__ */ C(j, { className: "h-4 w-4" }),
427
511
  onClick: () => t("/networking")
428
512
  },
429
513
  {
430
514
  id: "promote",
431
515
  label: "Promote with a campaign",
432
516
  description: "Send reminders and offers to drive more sign-ups.",
433
- icon: /* @__PURE__ */ g(v, { className: "h-4 w-4" }),
517
+ icon: /* @__PURE__ */ C(E, { className: "h-4 w-4" }),
434
518
  onClick: () => t("/communication")
435
519
  },
436
520
  {
437
521
  id: "analyze",
438
522
  label: "Snapshot your numbers",
439
523
  description: "Capture an analytics snapshot to track registration trends.",
440
- icon: /* @__PURE__ */ g(y, { className: "h-4 w-4" }),
524
+ icon: /* @__PURE__ */ C(O, { className: "h-4 w-4" }),
441
525
  onClick: () => t("/analytics")
442
526
  }
443
527
  ]
@@ -446,6 +530,6 @@ function z() {
446
530
  });
447
531
  }
448
532
  //#endregion
449
- export { z as default };
533
+ export { te as default };
450
534
 
451
535
  //# sourceMappingURL=RegistrationPage.js.map