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