@burdenoff/microfe-eventfullymanaged 2026.608.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 (43) hide show
  1. package/dist/eventfullymanaged/components/PageLayout.js +44 -38
  2. package/dist/eventfullymanaged/components/PageLayout.js.map +1 -1
  3. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js +93 -40
  4. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js.map +1 -1
  5. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js +32 -29
  6. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js.map +1 -1
  7. package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js +85 -50
  8. package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js.map +1 -1
  9. package/dist/eventfullymanaged/pages/modules/CommunicationPage.js +49 -50
  10. package/dist/eventfullymanaged/pages/modules/CommunicationPage.js.map +1 -1
  11. package/dist/eventfullymanaged/pages/modules/EntityListSection.js +57 -25
  12. package/dist/eventfullymanaged/pages/modules/EntityListSection.js.map +1 -1
  13. package/dist/eventfullymanaged/pages/modules/EventsPage.js +93 -66
  14. package/dist/eventfullymanaged/pages/modules/EventsPage.js.map +1 -1
  15. package/dist/eventfullymanaged/pages/modules/KioskPage.js +18 -19
  16. package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
  17. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +60 -30
  18. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
  19. package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js +146 -108
  20. package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js.map +1 -1
  21. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +67 -38
  22. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
  23. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js +84 -49
  24. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js.map +1 -1
  25. package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js +57 -28
  26. package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js.map +1 -1
  27. package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js +106 -72
  28. package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js.map +1 -1
  29. package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js +84 -68
  30. package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js.map +1 -1
  31. package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js +202 -204
  32. package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js.map +1 -1
  33. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js +58 -39
  34. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js.map +1 -1
  35. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js +53 -46
  36. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js.map +1 -1
  37. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js +109 -63
  38. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js.map +1 -1
  39. package/dist/eventfullymanaged/pages/venues/VenueFormPage.js +193 -197
  40. package/dist/eventfullymanaged/pages/venues/VenueFormPage.js.map +1 -1
  41. package/dist/eventfullymanaged/pages/venues/VenueListPage.js +65 -36
  42. package/dist/eventfullymanaged/pages/venues/VenueListPage.js.map +1 -1
  43. package/package.json +2 -2
@@ -1,50 +1,52 @@
1
- import { useAttendeesQuery as e, usePromoCodesQuery as t, useRegistrationsQuery as n } from "../../api/eventApi.js";
2
- import { EntityListSection as r } from "./EntityListSection.js";
3
- import { useMemo as i } from "react";
4
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
- import { useI18n as s } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
1
+ import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
2
+ import { useAttendeesQuery as t, usePromoCodesQuery as n, useRegistrationsQuery as r } from "../../api/eventApi.js";
3
+ import { EntityListSection as i } from "./EntityListSection.js";
4
+ import { useMemo as a } from "react";
5
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
6
+ import { Megaphone as c, Tag as l, Users as u } from "lucide-react";
7
+ import { useI18n as d } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
+ import { EmphasisPanel as f, GradientText as p, NextSteps as m, PagePurpose as h } from "@burdenoff/fe-libs/ui";
6
9
  //#region src/eventfullymanaged/pages/modules/RegistrationPage.tsx
7
- function c() {
8
- let { t: c } = s(), l = (e, t) => {
9
- let n = c(e);
10
+ function g() {
11
+ let { t: g } = d(), _ = (e, t) => {
12
+ let n = g(e);
10
13
  return n === e ? t : n;
11
- }, u = n({
14
+ }, { navigate: v } = e(), y = r({
12
15
  limit: 100,
13
16
  offset: 0
14
- }), d = e({
17
+ }), b = t({
15
18
  limit: 100,
16
19
  offset: 0
17
- }), f = t({
20
+ }), x = n({
18
21
  limit: 100,
19
22
  offset: 0
20
- }), p = i(() => u.data?.registrations.items ?? [], [u.data]), m = i(() => d.data?.attendees.items ?? [], [d.data]), h = i(() => f.data?.promoCodes.items ?? [], [f.data]);
21
- return /* @__PURE__ */ o("div", {
23
+ }), S = a(() => y.data?.registrations.items ?? [], [y.data]), C = a(() => b.data?.attendees.items ?? [], [b.data]), w = a(() => x.data?.promoCodes.items ?? [], [x.data]);
24
+ return /* @__PURE__ */ s("div", {
22
25
  className: "space-y-6 p-6",
23
26
  children: [
24
- /* @__PURE__ */ o("section", {
25
- className: "rounded-lg border border-border-default bg-bg-surface p-5",
26
- children: [/* @__PURE__ */ a("h1", {
27
- className: "text-2xl font-bold text-text-primary",
28
- children: l("eventfullymanaged.registration.title", "Registration")
29
- }), /* @__PURE__ */ a("p", {
30
- className: "mt-1 text-sm text-text-secondary",
31
- children: l("eventfullymanaged.registration.description", "Track registrations and attendee profiles via backend GraphQL APIs.")
32
- })]
33
- }),
34
- /* @__PURE__ */ a(r, {
35
- heading: u.loading ? l("eventfullymanaged.registration.registrations.loading", "Loading registrations...") : `${l("eventfullymanaged.registration.registrations.heading", "Registrations")} (${p.length})`,
36
- emptyLabel: l("eventfullymanaged.registration.registrations.empty", "No registrations found."),
37
- rows: p.map((e) => ({
27
+ /* @__PURE__ */ o(h, { children: _("eventfullymanaged.registration.purpose", "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. Use this page to monitor sign-up volume, look up an attendee, and check that your discount codes are working.") }),
28
+ /* @__PURE__ */ s(f, { children: [/* @__PURE__ */ o("h1", {
29
+ className: "text-2xl font-bold text-text-primary",
30
+ children: /* @__PURE__ */ o(p, { children: _("eventfullymanaged.registration.title", "Registration") })
31
+ }), /* @__PURE__ */ o("p", {
32
+ className: "mt-1 text-sm text-text-secondary",
33
+ children: _("eventfullymanaged.registration.description", "Track registrations and attendee profiles via backend GraphQL APIs.")
34
+ })] }),
35
+ /* @__PURE__ */ o(i, {
36
+ heading: y.loading ? _("eventfullymanaged.registration.registrations.loading", "Loading registrations...") : `${_("eventfullymanaged.registration.registrations.heading", "Registrations")} (${S.length})`,
37
+ emptyLabel: _("eventfullymanaged.registration.registrations.empty", "No registrations found."),
38
+ rows: S.map((e) => ({
38
39
  id: e.id,
39
- title: e.attendeeId ? `${l("eventfullymanaged.registration.registrations.attendeePrefix", "Attendee")} ${e.attendeeId}` : `${l("eventfullymanaged.registration.registrations.itemPrefix", "Registration")} ${e.id}`,
40
- subtitle: [e.quantity ? `${l("eventfullymanaged.registration.registrations.quantityPrefix", "Qty")} ${e.quantity}` : void 0, e.totalAmount ? `${e.totalAmount} ${e.currency ?? ""}` : void 0].filter(Boolean).join(" • "),
40
+ title: e.attendeeId ? `${_("eventfullymanaged.registration.registrations.attendeePrefix", "Attendee")} ${e.attendeeId}` : `${_("eventfullymanaged.registration.registrations.itemPrefix", "Registration")} ${e.id}`,
41
+ subtitle: [e.quantity ? `${_("eventfullymanaged.registration.registrations.quantityPrefix", "Qty")} ${e.quantity}` : void 0, e.totalAmount ? `${e.totalAmount} ${e.currency ?? ""}` : void 0].filter(Boolean).join(" • "),
41
42
  status: e.status
42
43
  }))
43
44
  }),
44
- /* @__PURE__ */ a(r, {
45
- heading: d.loading ? l("eventfullymanaged.registration.attendees.loading", "Loading attendees...") : `${l("eventfullymanaged.registration.attendees.heading", "Attendees")} (${m.length})`,
46
- emptyLabel: l("eventfullymanaged.registration.attendees.empty", "No attendees found."),
47
- rows: m.map((e) => ({
45
+ /* @__PURE__ */ o(i, {
46
+ heading: b.loading ? _("eventfullymanaged.registration.attendees.loading", "Loading attendees...") : `${_("eventfullymanaged.registration.attendees.heading", "Attendees")} (${C.length})`,
47
+ emptyLabel: _("eventfullymanaged.registration.attendees.empty", "No attendees found."),
48
+ emptyIllustration: "empty-people",
49
+ rows: C.map((e) => ({
48
50
  id: e.id,
49
51
  title: e.fullName ?? e.id,
50
52
  subtitle: [
@@ -54,20 +56,47 @@ function c() {
54
56
  ].filter(Boolean).join(" • ")
55
57
  }))
56
58
  }),
57
- /* @__PURE__ */ a(r, {
58
- heading: f.loading ? l("eventfullymanaged.registration.promoCodes.loading", "Loading promo codes...") : `${l("eventfullymanaged.registration.promoCodes.heading", "Promo Codes")} (${h.length})`,
59
- emptyLabel: l("eventfullymanaged.registration.promoCodes.empty", "No promo codes configured."),
60
- rows: h.map((e) => ({
59
+ /* @__PURE__ */ o(i, {
60
+ heading: x.loading ? _("eventfullymanaged.registration.promoCodes.loading", "Loading promo codes...") : `${_("eventfullymanaged.registration.promoCodes.heading", "Promo Codes")} (${w.length})`,
61
+ emptyLabel: _("eventfullymanaged.registration.promoCodes.empty", "No promo codes configured."),
62
+ rows: w.map((e) => ({
61
63
  id: e.id,
62
64
  title: e.code,
63
65
  subtitle: `${e.discountType} ${e.discountValue}`,
64
66
  status: e.isActive ? "active" : "inactive"
65
67
  }))
68
+ }),
69
+ /* @__PURE__ */ o(m, {
70
+ storageKey: "eventfullymanaged-registration",
71
+ title: _("eventfullymanaged.registration.nextSteps.title", "Grow your registrations"),
72
+ steps: [
73
+ {
74
+ id: "view-networking",
75
+ label: _("eventfullymanaged.registration.nextSteps.networking", "Set up attendee networking"),
76
+ description: _("eventfullymanaged.registration.nextSteps.networkingDesc", "Turn registered attendees into connections with matchmaking."),
77
+ icon: /* @__PURE__ */ o(u, { className: "h-4 w-4" }),
78
+ onClick: () => v("/networking")
79
+ },
80
+ {
81
+ id: "promote",
82
+ label: _("eventfullymanaged.registration.nextSteps.promote", "Promote with a campaign"),
83
+ description: _("eventfullymanaged.registration.nextSteps.promoteDesc", "Send reminders and offers to drive more sign-ups."),
84
+ icon: /* @__PURE__ */ o(c, { className: "h-4 w-4" }),
85
+ onClick: () => v("/communication")
86
+ },
87
+ {
88
+ id: "analyze",
89
+ label: _("eventfullymanaged.registration.nextSteps.analyze", "Snapshot your numbers"),
90
+ description: _("eventfullymanaged.registration.nextSteps.analyzeDesc", "Capture an analytics snapshot to track registration trends."),
91
+ icon: /* @__PURE__ */ o(l, { className: "h-4 w-4" }),
92
+ onClick: () => v("/analytics")
93
+ }
94
+ ]
66
95
  })
67
96
  ]
68
97
  });
69
98
  }
70
99
  //#endregion
71
- export { c as default };
100
+ export { g as default };
72
101
 
73
102
  //# sourceMappingURL=RegistrationPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RegistrationPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/RegistrationPage.tsx"],"sourcesContent":["import { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useMemo } from 'react';\n\nimport { useAttendeesQuery, usePromoCodesQuery, useRegistrationsQuery } from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype RegistrationRow = {\n id: string;\n attendeeId?: string;\n status?: string;\n quantity?: number;\n currency?: string;\n totalAmount?: string;\n};\n\ntype AttendeeRow = {\n id: string;\n fullName?: string;\n email?: string;\n company?: string;\n role?: string;\n};\n\nexport default function RegistrationPage() {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n const registrationsQuery = useRegistrationsQuery({ limit: 100, offset: 0 });\n const attendeesQuery = useAttendeesQuery({ limit: 100, offset: 0 });\n const promoCodesQuery = usePromoCodesQuery({ limit: 100, offset: 0 });\n\n const registrations = useMemo(\n () => (registrationsQuery.data?.registrations.items ?? []) as RegistrationRow[],\n [registrationsQuery.data]\n );\n const attendees = useMemo(() => (attendeesQuery.data?.attendees.items ?? []) as AttendeeRow[], [attendeesQuery.data]);\n const promoCodes = useMemo(() => promoCodesQuery.data?.promoCodes.items ?? [], [promoCodesQuery.data]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <section className=\"rounded-lg border border-border-default bg-bg-surface p-5\">\n <h1 className=\"text-2xl font-bold text-text-primary\">\n {t('eventfullymanaged.registration.title', 'Registration')}\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {t(\n 'eventfullymanaged.registration.description',\n 'Track registrations and attendee profiles via backend GraphQL APIs.'\n )}\n </p>\n </section>\n\n <EntityListSection\n heading={\n registrationsQuery.loading\n ? t('eventfullymanaged.registration.registrations.loading', 'Loading registrations...')\n : `${t('eventfullymanaged.registration.registrations.heading', 'Registrations')} (${registrations.length})`\n }\n emptyLabel={t('eventfullymanaged.registration.registrations.empty', 'No registrations found.')}\n rows={registrations.map((row) => ({\n id: row.id,\n title: row.attendeeId\n ? `${t('eventfullymanaged.registration.registrations.attendeePrefix', 'Attendee')} ${row.attendeeId}`\n : `${t('eventfullymanaged.registration.registrations.itemPrefix', 'Registration')} ${row.id}`,\n subtitle: [\n row.quantity\n ? `${t('eventfullymanaged.registration.registrations.quantityPrefix', 'Qty')} ${row.quantity}`\n : undefined,\n row.totalAmount ? `${row.totalAmount} ${row.currency ?? ''}` : undefined,\n ]\n .filter(Boolean)\n .join(' • '),\n status: row.status,\n }))}\n />\n\n <EntityListSection\n heading={\n attendeesQuery.loading\n ? t('eventfullymanaged.registration.attendees.loading', 'Loading attendees...')\n : `${t('eventfullymanaged.registration.attendees.heading', 'Attendees')} (${attendees.length})`\n }\n emptyLabel={t('eventfullymanaged.registration.attendees.empty', 'No attendees found.')}\n rows={attendees.map((row) => ({\n id: row.id,\n title: row.fullName ?? row.id,\n subtitle: [row.email, row.company, row.role].filter(Boolean).join(' • '),\n }))}\n />\n\n <EntityListSection\n heading={\n promoCodesQuery.loading\n ? t('eventfullymanaged.registration.promoCodes.loading', 'Loading promo codes...')\n : `${t('eventfullymanaged.registration.promoCodes.heading', 'Promo Codes')} (${promoCodes.length})`\n }\n emptyLabel={t('eventfullymanaged.registration.promoCodes.empty', 'No promo codes configured.')}\n rows={promoCodes.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 </div>\n );\n}\n"],"mappings":";;;;;;AAuBA,SAAwB,IAAmB;CACzC,IAAM,EAAE,GAAG,MAAc,GAAS,EAC5B,KAAK,GAAa,MAAqB;EAC3C,IAAM,IAAQ,EAAU,EAAI;AAC5B,SAAO,MAAU,IAAM,IAAW;IAE9B,IAAqB,EAAsB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrE,IAAiB,EAAkB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC7D,IAAkB,EAAmB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAE/D,IAAgB,QACb,EAAmB,MAAM,cAAc,SAAS,EAAE,EACzD,CAAC,EAAmB,KAAK,CAC1B,EACK,IAAY,QAAe,EAAe,MAAM,UAAU,SAAS,EAAE,EAAoB,CAAC,EAAe,KAAK,CAAC,EAC/G,IAAa,QAAc,EAAgB,MAAM,WAAW,SAAS,EAAE,EAAE,CAAC,EAAgB,KAAK,CAAC;AAEtG,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,WAAD;IAAS,WAAU;cAAnB,CACE,kBAAC,MAAD;KAAI,WAAU;eACX,EAAE,wCAAwC,eAAe;KACvD,CAAA,EACL,kBAAC,KAAD;KAAG,WAAU;eACV,EACC,8CACA,sEACD;KACC,CAAA,CACI;;GAEV,kBAAC,GAAD;IACE,SACE,EAAmB,UACf,EAAE,wDAAwD,2BAA2B,GACrF,GAAG,EAAE,wDAAwD,gBAAgB,CAAC,IAAI,EAAc,OAAO;IAE7G,YAAY,EAAE,sDAAsD,0BAA0B;IAC9F,MAAM,EAAc,KAAK,OAAS;KAChC,IAAI,EAAI;KACR,OAAO,EAAI,aACP,GAAG,EAAE,+DAA+D,WAAW,CAAC,GAAG,EAAI,eACvF,GAAG,EAAE,2DAA2D,eAAe,CAAC,GAAG,EAAI;KAC3F,UAAU,CACR,EAAI,WACA,GAAG,EAAE,+DAA+D,MAAM,CAAC,GAAG,EAAI,aAClF,KAAA,GACJ,EAAI,cAAc,GAAG,EAAI,YAAY,GAAG,EAAI,YAAY,OAAO,KAAA,EAChE,CACE,OAAO,QAAQ,CACf,KAAK,MAAM;KACd,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SACE,EAAe,UACX,EAAE,oDAAoD,uBAAuB,GAC7E,GAAG,EAAE,oDAAoD,YAAY,CAAC,IAAI,EAAU,OAAO;IAEjG,YAAY,EAAE,kDAAkD,sBAAsB;IACtF,MAAM,EAAU,KAAK,OAAS;KAC5B,IAAI,EAAI;KACR,OAAO,EAAI,YAAY,EAAI;KAC3B,UAAU;MAAC,EAAI;MAAO,EAAI;MAAS,EAAI;MAAK,CAAC,OAAO,QAAQ,CAAC,KAAK,MAAM;KACzE,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SACE,EAAgB,UACZ,EAAE,qDAAqD,yBAAyB,GAChF,GAAG,EAAE,qDAAqD,cAAc,CAAC,IAAI,EAAW,OAAO;IAErG,YAAY,EAAE,mDAAmD,6BAA6B;IAC9F,MAAM,EAAW,KAAK,OAAS;KAC7B,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,GAAG,EAAI,aAAa,GAAG,EAAI;KACrC,QAAQ,EAAI,WAAW,WAAW;KACnC,EAAE;IACH,CAAA;GACE"}
1
+ {"version":3,"file":"RegistrationPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/RegistrationPage.tsx"],"sourcesContent":["import { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Megaphone, Tag, Users } from 'lucide-react';\nimport { EmphasisPanel, GradientText, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\n\nimport { useAttendeesQuery, usePromoCodesQuery, useRegistrationsQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { EntityListSection } from './EntityListSection';\n\ntype RegistrationRow = {\n id: string;\n attendeeId?: string;\n status?: string;\n quantity?: number;\n currency?: string;\n totalAmount?: string;\n};\n\ntype AttendeeRow = {\n id: string;\n fullName?: string;\n email?: string;\n company?: string;\n role?: string;\n};\n\nexport default function RegistrationPage() {\n const { t: translate } = useI18n();\n const t = (key: string, fallback: string) => {\n const value = translate(key);\n return value === key ? fallback : value;\n };\n const { navigate } = useEventfullyManaged();\n const registrationsQuery = useRegistrationsQuery({ limit: 100, offset: 0 });\n const attendeesQuery = useAttendeesQuery({ limit: 100, offset: 0 });\n const promoCodesQuery = usePromoCodesQuery({ limit: 100, offset: 0 });\n\n const registrations = useMemo(\n () => (registrationsQuery.data?.registrations.items ?? []) as RegistrationRow[],\n [registrationsQuery.data]\n );\n const attendees = useMemo(() => (attendeesQuery.data?.attendees.items ?? []) as AttendeeRow[], [attendeesQuery.data]);\n const promoCodes = useMemo(() => promoCodesQuery.data?.promoCodes.items ?? [], [promoCodesQuery.data]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n {t(\n 'eventfullymanaged.registration.purpose',\n '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. Use this page to monitor sign-up volume, look up an attendee, and check that your discount codes are working.'\n )}\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>{t('eventfullymanaged.registration.title', 'Registration')}</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {t(\n 'eventfullymanaged.registration.description',\n 'Track registrations and attendee profiles via backend GraphQL APIs.'\n )}\n </p>\n </EmphasisPanel>\n\n <EntityListSection\n heading={\n registrationsQuery.loading\n ? t('eventfullymanaged.registration.registrations.loading', 'Loading registrations...')\n : `${t('eventfullymanaged.registration.registrations.heading', 'Registrations')} (${registrations.length})`\n }\n emptyLabel={t('eventfullymanaged.registration.registrations.empty', 'No registrations found.')}\n rows={registrations.map((row) => ({\n id: row.id,\n title: row.attendeeId\n ? `${t('eventfullymanaged.registration.registrations.attendeePrefix', 'Attendee')} ${row.attendeeId}`\n : `${t('eventfullymanaged.registration.registrations.itemPrefix', 'Registration')} ${row.id}`,\n subtitle: [\n row.quantity\n ? `${t('eventfullymanaged.registration.registrations.quantityPrefix', 'Qty')} ${row.quantity}`\n : undefined,\n row.totalAmount ? `${row.totalAmount} ${row.currency ?? ''}` : undefined,\n ]\n .filter(Boolean)\n .join(' • '),\n status: row.status,\n }))}\n />\n\n <EntityListSection\n heading={\n attendeesQuery.loading\n ? t('eventfullymanaged.registration.attendees.loading', 'Loading attendees...')\n : `${t('eventfullymanaged.registration.attendees.heading', 'Attendees')} (${attendees.length})`\n }\n emptyLabel={t('eventfullymanaged.registration.attendees.empty', 'No attendees found.')}\n emptyIllustration=\"empty-people\"\n rows={attendees.map((row) => ({\n id: row.id,\n title: row.fullName ?? row.id,\n subtitle: [row.email, row.company, row.role].filter(Boolean).join(' • '),\n }))}\n />\n\n <EntityListSection\n heading={\n promoCodesQuery.loading\n ? t('eventfullymanaged.registration.promoCodes.loading', 'Loading promo codes...')\n : `${t('eventfullymanaged.registration.promoCodes.heading', 'Promo Codes')} (${promoCodes.length})`\n }\n emptyLabel={t('eventfullymanaged.registration.promoCodes.empty', 'No promo codes configured.')}\n rows={promoCodes.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 <NextSteps\n storageKey=\"eventfullymanaged-registration\"\n title={t('eventfullymanaged.registration.nextSteps.title', 'Grow your registrations')}\n steps={[\n {\n id: 'view-networking',\n label: t('eventfullymanaged.registration.nextSteps.networking', 'Set up attendee networking'),\n description: t(\n 'eventfullymanaged.registration.nextSteps.networkingDesc',\n 'Turn registered attendees into connections with matchmaking.'\n ),\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('/networking'),\n },\n {\n id: 'promote',\n label: t('eventfullymanaged.registration.nextSteps.promote', 'Promote with a campaign'),\n description: t(\n 'eventfullymanaged.registration.nextSteps.promoteDesc',\n 'Send reminders and offers to drive more sign-ups.'\n ),\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate('/communication'),\n },\n {\n id: 'analyze',\n label: t('eventfullymanaged.registration.nextSteps.analyze', 'Snapshot your numbers'),\n description: t(\n 'eventfullymanaged.registration.nextSteps.analyzeDesc',\n 'Capture an analytics snapshot to track registration trends.'\n ),\n icon: <Tag className=\"h-4 w-4\" />,\n onClick: () => navigate('/analytics'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,88 +1,123 @@
1
- import { useCommunicationCampaignsQuery as e, useSponsorsQuery as t } from "../../api/eventApi.js";
2
- import { EntityListSection as n } from "./EntityListSection.js";
3
- import { useMemo as r } from "react";
4
- import { useParams as i } from "react-router-dom";
5
- import { jsx as a, jsxs as o } from "react/jsx-runtime";
1
+ import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
2
+ import { useCommunicationCampaignsQuery as t, useSponsorsQuery as n } from "../../api/eventApi.js";
3
+ import { EntityListSection as r } from "./EntityListSection.js";
4
+ import { useMemo as i } from "react";
5
+ import { useParams as a } from "react-router-dom";
6
+ import { jsx as o, jsxs as s } from "react/jsx-runtime";
7
+ import { Megaphone as c, Pencil as l, TrendingUp as u } from "lucide-react";
8
+ import { EmphasisPanel as d, GlassCard as f, GradientText as p, NextSteps as m, PagePurpose as h } from "@burdenoff/fe-libs/ui";
6
9
  //#region src/eventfullymanaged/pages/modules/SponsorDetailsPage.tsx
7
- function s() {
8
- let { id: s = "" } = i(), c = t({
10
+ function g() {
11
+ let { id: g = "" } = a(), { navigate: _ } = e(), v = n({
9
12
  limit: 100,
10
13
  offset: 0
11
- }), l = e({
14
+ }), y = t({
12
15
  limit: 100,
13
16
  offset: 0
14
- }), u = r(() => (c.data?.sponsors.items ?? []).find((e) => e.id === s), [s, c.data]), d = r(() => l.data?.communicationCampaigns.items ?? [], [l.data]);
15
- return /* @__PURE__ */ o("div", {
17
+ }), b = i(() => (v.data?.sponsors.items ?? []).find((e) => e.id === g), [g, v.data]), x = i(() => y.data?.communicationCampaigns.items ?? [], [y.data]);
18
+ return /* @__PURE__ */ s("div", {
16
19
  className: "space-y-6 p-6",
17
- children: [/* @__PURE__ */ o("section", {
18
- className: "rounded-lg border border-border-default bg-bg-surface p-5",
19
- children: [
20
- /* @__PURE__ */ a("h1", {
20
+ children: [
21
+ /* @__PURE__ */ o(h, { children: "Everything about one sponsor in one place — their tier, contacts, and the campaigns they appear in. Use this to prep for a sponsor conversation, confirm their contact details, or check how their branded campaigns are performing." }),
22
+ /* @__PURE__ */ s(d, { children: [
23
+ /* @__PURE__ */ s("h1", {
21
24
  className: "text-2xl font-bold text-text-primary",
22
- children: "Sponsor Details"
25
+ children: [/* @__PURE__ */ o(p, { children: "Sponsor" }), " Details"]
23
26
  }),
24
- /* @__PURE__ */ a("p", {
27
+ /* @__PURE__ */ o("p", {
25
28
  className: "mt-1 text-sm text-text-secondary",
26
- children: c.loading ? "Loading sponsor details..." : u ? `Live sponsor profile for ${u.name}.` : "Sponsor not found in current query scope."
29
+ children: v.loading ? "Loading sponsor details..." : b ? `Live sponsor profile for ${b.name}.` : "Sponsor not found in current query scope."
27
30
  }),
28
- u ? /* @__PURE__ */ o("div", {
31
+ b ? /* @__PURE__ */ s("div", {
29
32
  className: "mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4",
30
33
  children: [
31
- /* @__PURE__ */ o("div", {
32
- className: "rounded-md border border-border-default p-3",
33
- children: [/* @__PURE__ */ a("p", {
34
+ /* @__PURE__ */ s(f, {
35
+ treatment: "metric",
36
+ className: "p-3",
37
+ children: [/* @__PURE__ */ o("p", {
34
38
  className: "text-xs uppercase tracking-wide text-text-secondary",
35
39
  children: "Level"
36
- }), /* @__PURE__ */ a("p", {
40
+ }), /* @__PURE__ */ o("p", {
37
41
  className: "mt-1 font-medium text-text-primary",
38
- children: u.level
42
+ children: b.level
39
43
  })]
40
44
  }),
41
- /* @__PURE__ */ o("div", {
42
- className: "rounded-md border border-border-default p-3",
43
- children: [/* @__PURE__ */ a("p", {
45
+ /* @__PURE__ */ s(f, {
46
+ treatment: "metric",
47
+ className: "p-3",
48
+ children: [/* @__PURE__ */ o("p", {
44
49
  className: "text-xs uppercase tracking-wide text-text-secondary",
45
50
  children: "Contact"
46
- }), /* @__PURE__ */ a("p", {
51
+ }), /* @__PURE__ */ o("p", {
47
52
  className: "mt-1 font-medium text-text-primary",
48
- children: u.contactName ?? "Unassigned"
53
+ children: b.contactName ?? "Unassigned"
49
54
  })]
50
55
  }),
51
- /* @__PURE__ */ o("div", {
52
- className: "rounded-md border border-border-default p-3",
53
- children: [/* @__PURE__ */ a("p", {
56
+ /* @__PURE__ */ s(f, {
57
+ treatment: "metric",
58
+ className: "p-3",
59
+ children: [/* @__PURE__ */ o("p", {
54
60
  className: "text-xs uppercase tracking-wide text-text-secondary",
55
61
  children: "Email"
56
- }), /* @__PURE__ */ a("p", {
62
+ }), /* @__PURE__ */ o("p", {
57
63
  className: "mt-1 font-medium text-text-primary",
58
- children: u.contactEmail ?? "Unavailable"
64
+ children: b.contactEmail ?? "Unavailable"
59
65
  })]
60
66
  }),
61
- /* @__PURE__ */ o("div", {
62
- className: "rounded-md border border-border-default p-3",
63
- children: [/* @__PURE__ */ a("p", {
67
+ /* @__PURE__ */ s(f, {
68
+ treatment: "metric",
69
+ className: "p-3",
70
+ children: [/* @__PURE__ */ o("p", {
64
71
  className: "text-xs uppercase tracking-wide text-text-secondary",
65
72
  children: "Website"
66
- }), /* @__PURE__ */ a("p", {
73
+ }), /* @__PURE__ */ o("p", {
67
74
  className: "mt-1 truncate font-medium text-text-primary",
68
- children: u.website ?? "Unavailable"
75
+ children: b.website ?? "Unavailable"
69
76
  })]
70
77
  })
71
78
  ]
72
79
  }) : null
73
- ]
74
- }), /* @__PURE__ */ a(n, {
75
- heading: l.loading ? "Loading campaigns..." : `Campaign Activity (${d.length})`,
76
- emptyLabel: "No communication campaigns available for sponsor tracking.",
77
- rows: d.map((e) => ({
78
- id: e.id,
79
- title: e.title ?? e.name ?? `Campaign ${e.id}`,
80
- status: e.status
81
- }))
82
- })]
80
+ ] }),
81
+ /* @__PURE__ */ o(r, {
82
+ heading: y.loading ? "Loading campaigns..." : `Campaign Activity (${x.length})`,
83
+ emptyLabel: "No communication campaigns available for sponsor tracking.",
84
+ rows: x.map((e) => ({
85
+ id: e.id,
86
+ title: e.title ?? e.name ?? `Campaign ${e.id}`,
87
+ status: e.status
88
+ }))
89
+ }),
90
+ /* @__PURE__ */ o(m, {
91
+ storageKey: "eventfullymanaged-sponsor-details",
92
+ title: "Grow this partnership",
93
+ steps: [
94
+ {
95
+ id: "edit-sponsor",
96
+ label: "Update sponsor details",
97
+ description: "Keep tier, contacts and contract value current.",
98
+ icon: /* @__PURE__ */ o(l, { className: "h-4 w-4" }),
99
+ onClick: () => _(g ? `/sponsors/${g}/edit` : "/sponsors")
100
+ },
101
+ {
102
+ id: "track-leads",
103
+ label: "Track sponsor leads",
104
+ description: "See the leads this sponsor is generating at the event.",
105
+ icon: /* @__PURE__ */ o(u, { className: "h-4 w-4" }),
106
+ onClick: () => _(g ? `/sponsors/${g}/leads` : "/sponsors")
107
+ },
108
+ {
109
+ id: "run-campaign",
110
+ label: "Run a co-branded campaign",
111
+ description: "Promote this sponsor through a communication campaign.",
112
+ icon: /* @__PURE__ */ o(c, { className: "h-4 w-4" }),
113
+ onClick: () => _("/communication")
114
+ }
115
+ ]
116
+ })
117
+ ]
83
118
  });
84
119
  }
85
120
  //#endregion
86
- export { s as default };
121
+ export { g as default };
87
122
 
88
123
  //# sourceMappingURL=SponsorDetailsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SponsorDetailsPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/SponsorDetailsPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { useCommunicationCampaignsQuery, useSponsorsQuery } from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype SponsorRow = {\n id: string;\n name: string;\n level: string;\n website?: string | null;\n contactName?: string | null;\n contactEmail?: string | null;\n};\n\ntype CampaignRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function SponsorDetailsPage() {\n const { id = '' } = useParams();\n const sponsorsQuery = useSponsorsQuery({ limit: 100, offset: 0 });\n const campaignsQuery = useCommunicationCampaignsQuery({ limit: 100, offset: 0 });\n\n const sponsor = useMemo(\n () => ((sponsorsQuery.data?.sponsors.items ?? []) as SponsorRow[]).find((item) => item.id === id),\n [id, sponsorsQuery.data]\n );\n const campaigns = useMemo(\n () => (campaignsQuery.data?.communicationCampaigns.items ?? []) as CampaignRow[],\n [campaignsQuery.data]\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <section className=\"rounded-lg border border-border-default bg-bg-surface p-5\">\n <h1 className=\"text-2xl font-bold text-text-primary\">Sponsor Details</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {sponsorsQuery.loading\n ? 'Loading sponsor details...'\n : sponsor\n ? `Live sponsor profile for ${sponsor.name}.`\n : 'Sponsor not found in current query scope.'}\n </p>\n {sponsor ? (\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n <div className=\"rounded-md border border-border-default p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Level</p>\n <p className=\"mt-1 font-medium text-text-primary\">{sponsor.level}</p>\n </div>\n <div className=\"rounded-md border border-border-default p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Contact</p>\n <p className=\"mt-1 font-medium text-text-primary\">{sponsor.contactName ?? 'Unassigned'}</p>\n </div>\n <div className=\"rounded-md border border-border-default p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Email</p>\n <p className=\"mt-1 font-medium text-text-primary\">{sponsor.contactEmail ?? 'Unavailable'}</p>\n </div>\n <div className=\"rounded-md border border-border-default p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Website</p>\n <p className=\"mt-1 truncate font-medium text-text-primary\">{sponsor.website ?? 'Unavailable'}</p>\n </div>\n </div>\n ) : null}\n </section>\n\n <EntityListSection\n heading={campaignsQuery.loading ? 'Loading campaigns...' : `Campaign Activity (${campaigns.length})`}\n emptyLabel=\"No communication campaigns available for sponsor tracking.\"\n rows={campaigns.map((campaign) => ({\n id: campaign.id,\n title: campaign.title ?? campaign.name ?? `Campaign ${campaign.id}`,\n status: campaign.status,\n }))}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;AAsBA,SAAwB,IAAqB;CAC3C,IAAM,EAAE,QAAK,OAAO,GAAW,EACzB,IAAgB,EAAiB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC3D,IAAiB,EAA+B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAE1E,IAAU,SACN,EAAc,MAAM,SAAS,SAAS,EAAE,EAAmB,MAAM,MAAS,EAAK,OAAO,EAAG,EACjG,CAAC,GAAI,EAAc,KAAK,CACzB,EACK,IAAY,QACT,EAAe,MAAM,uBAAuB,SAAS,EAAE,EAC9D,CAAC,EAAe,KAAK,CACtB;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,WAAD;GAAS,WAAU;aAAnB;IACE,kBAAC,MAAD;KAAI,WAAU;eAAuC;KAAoB,CAAA;IACzE,kBAAC,KAAD;KAAG,WAAU;eACV,EAAc,UACX,+BACA,IACE,4BAA4B,EAAQ,KAAK,KACzC;KACJ,CAAA;IACH,IACC,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAsD;QAAS,CAAA,EAC5E,kBAAC,KAAD;QAAG,WAAU;kBAAsC,EAAQ;QAAU,CAAA,CACjE;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAsD;QAAW,CAAA,EAC9E,kBAAC,KAAD;QAAG,WAAU;kBAAsC,EAAQ,eAAe;QAAiB,CAAA,CACvF;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAsD;QAAS,CAAA,EAC5E,kBAAC,KAAD;QAAG,WAAU;kBAAsC,EAAQ,gBAAgB;QAAkB,CAAA,CACzF;;MACN,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAsD;QAAW,CAAA,EAC9E,kBAAC,KAAD;QAAG,WAAU;kBAA+C,EAAQ,WAAW;QAAkB,CAAA,CAC7F;;MACF;SACJ;IACI;MAEV,kBAAC,GAAD;GACE,SAAS,EAAe,UAAU,yBAAyB,sBAAsB,EAAU,OAAO;GAClG,YAAW;GACX,MAAM,EAAU,KAAK,OAAc;IACjC,IAAI,EAAS;IACb,OAAO,EAAS,SAAS,EAAS,QAAQ,YAAY,EAAS;IAC/D,QAAQ,EAAS;IAClB,EAAE;GACH,CAAA,CACE"}
1
+ {"version":3,"file":"SponsorDetailsPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/SponsorDetailsPage.tsx"],"sourcesContent":["import { Megaphone, Pencil, TrendingUp } from 'lucide-react';\nimport { EmphasisPanel, GlassCard, GradientText, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { useCommunicationCampaignsQuery, useSponsorsQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { EntityListSection } from './EntityListSection';\n\ntype SponsorRow = {\n id: string;\n name: string;\n level: string;\n website?: string | null;\n contactName?: string | null;\n contactEmail?: string | null;\n};\n\ntype CampaignRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function SponsorDetailsPage() {\n const { id = '' } = useParams();\n const { navigate } = useEventfullyManaged();\n const sponsorsQuery = useSponsorsQuery({ limit: 100, offset: 0 });\n const campaignsQuery = useCommunicationCampaignsQuery({ limit: 100, offset: 0 });\n\n const sponsor = useMemo(\n () => ((sponsorsQuery.data?.sponsors.items ?? []) as SponsorRow[]).find((item) => item.id === id),\n [id, sponsorsQuery.data]\n );\n const campaigns = useMemo(\n () => (campaignsQuery.data?.communicationCampaigns.items ?? []) as CampaignRow[],\n [campaignsQuery.data]\n );\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Everything about one sponsor in one place — their tier, contacts, and the campaigns they appear in. Use this\n to prep for a sponsor conversation, confirm their contact details, or check how their branded campaigns are\n performing.\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>Sponsor</GradientText> Details\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {sponsorsQuery.loading\n ? 'Loading sponsor details...'\n : sponsor\n ? `Live sponsor profile for ${sponsor.name}.`\n : 'Sponsor not found in current query scope.'}\n </p>\n {sponsor ? (\n <div className=\"mt-4 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4\">\n <GlassCard treatment=\"metric\" className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Level</p>\n <p className=\"mt-1 font-medium text-text-primary\">{sponsor.level}</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Contact</p>\n <p className=\"mt-1 font-medium text-text-primary\">{sponsor.contactName ?? 'Unassigned'}</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Email</p>\n <p className=\"mt-1 font-medium text-text-primary\">{sponsor.contactEmail ?? 'Unavailable'}</p>\n </GlassCard>\n <GlassCard treatment=\"metric\" className=\"p-3\">\n <p className=\"text-xs uppercase tracking-wide text-text-secondary\">Website</p>\n <p className=\"mt-1 truncate font-medium text-text-primary\">{sponsor.website ?? 'Unavailable'}</p>\n </GlassCard>\n </div>\n ) : null}\n </EmphasisPanel>\n\n <EntityListSection\n heading={campaignsQuery.loading ? 'Loading campaigns...' : `Campaign Activity (${campaigns.length})`}\n emptyLabel=\"No communication campaigns available for sponsor tracking.\"\n rows={campaigns.map((campaign) => ({\n id: campaign.id,\n title: campaign.title ?? campaign.name ?? `Campaign ${campaign.id}`,\n status: campaign.status,\n }))}\n />\n\n <NextSteps\n storageKey=\"eventfullymanaged-sponsor-details\"\n title=\"Grow this partnership\"\n steps={[\n {\n id: 'edit-sponsor',\n label: 'Update sponsor details',\n description: 'Keep tier, contacts and contract value current.',\n icon: <Pencil className=\"h-4 w-4\" />,\n onClick: () => navigate(id ? `/sponsors/${id}/edit` : '/sponsors'),\n },\n {\n id: 'track-leads',\n label: 'Track sponsor leads',\n description: 'See the leads this sponsor is generating at the event.',\n icon: <TrendingUp className=\"h-4 w-4\" />,\n onClick: () => navigate(id ? `/sponsors/${id}/leads` : '/sponsors'),\n },\n {\n id: 'run-campaign',\n label: 'Run a co-branded campaign',\n description: 'Promote this sponsor through a communication campaign.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate('/communication'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAyBA,SAAwB,IAAqB;CAC3C,IAAM,EAAE,QAAK,OAAO,GAAW,EACzB,EAAE,gBAAa,GAAsB,EACrC,IAAgB,EAAiB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC3D,IAAiB,EAA+B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAE1E,IAAU,SACN,EAAc,MAAM,SAAS,SAAS,EAAE,EAAmB,MAAM,MAAS,EAAK,OAAO,EAAG,EACjG,CAAC,GAAI,EAAc,KAAK,CACzB,EACK,IAAY,QACT,EAAe,MAAM,uBAAuB,SAAS,EAAE,EAC9D,CAAC,EAAe,KAAK,CACtB;AAED,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAA,UAAa,wOAIC,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA;IACE,kBAAC,MAAD;KAAI,WAAU;eAAd,CACE,kBAAC,GAAD,EAAA,UAAc,WAAsB,CAAA,EAAA,WACjC;;IACL,kBAAC,KAAD;KAAG,WAAU;eACV,EAAc,UACX,+BACA,IACE,4BAA4B,EAAQ,KAAK,KACzC;KACJ,CAAA;IACH,IACC,kBAAC,OAAD;KAAK,WAAU;eAAf;MACE,kBAAC,GAAD;OAAW,WAAU;OAAS,WAAU;iBAAxC,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAsD;QAAS,CAAA,EAC5E,kBAAC,KAAD;QAAG,WAAU;kBAAsC,EAAQ;QAAU,CAAA,CAC3D;;MACZ,kBAAC,GAAD;OAAW,WAAU;OAAS,WAAU;iBAAxC,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAsD;QAAW,CAAA,EAC9E,kBAAC,KAAD;QAAG,WAAU;kBAAsC,EAAQ,eAAe;QAAiB,CAAA,CACjF;;MACZ,kBAAC,GAAD;OAAW,WAAU;OAAS,WAAU;iBAAxC,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAsD;QAAS,CAAA,EAC5E,kBAAC,KAAD;QAAG,WAAU;kBAAsC,EAAQ,gBAAgB;QAAkB,CAAA,CACnF;;MACZ,kBAAC,GAAD;OAAW,WAAU;OAAS,WAAU;iBAAxC,CACE,kBAAC,KAAD;QAAG,WAAU;kBAAsD;QAAW,CAAA,EAC9E,kBAAC,KAAD;QAAG,WAAU;kBAA+C,EAAQ,WAAW;QAAkB,CAAA,CACvF;;MACR;SACJ;IACU,EAAA,CAAA;GAEhB,kBAAC,GAAD;IACE,SAAS,EAAe,UAAU,yBAAyB,sBAAsB,EAAU,OAAO;IAClG,YAAW;IACX,MAAM,EAAU,KAAK,OAAc;KACjC,IAAI,EAAS;KACb,OAAO,EAAS,SAAS,EAAS,QAAQ,YAAY,EAAS;KAC/D,QAAQ,EAAS;KAClB,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,YAAW;IACX,OAAM;IACN,OAAO;KACL;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA;MACpC,eAAe,EAAS,IAAK,aAAa,EAAG,SAAS,YAAY;MACnE;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA;MACxC,eAAe,EAAS,IAAK,aAAa,EAAG,UAAU,YAAY;MACpE;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;MACvC,eAAe,EAAS,iBAAiB;MAC1C;KACF;IACD,CAAA;GACE"}
@@ -1,55 +1,84 @@
1
- import { useMeetingsQuery as e, useNetworkingMatchesQuery as t, useSponsorsQuery as n } from "../../api/eventApi.js";
2
- import { EntityListSection as r } from "./EntityListSection.js";
3
- import { useMemo as i } from "react";
4
- import { useParams as a } from "react-router-dom";
5
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
1
+ import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
2
+ import { useMeetingsQuery as t, useNetworkingMatchesQuery as n, useSponsorsQuery as r } from "../../api/eventApi.js";
3
+ import { EntityListSection as i } from "./EntityListSection.js";
4
+ import { useMemo as a } from "react";
5
+ import { useParams as o } from "react-router-dom";
6
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
7
+ import { Megaphone as l, User as u, Users as d } from "lucide-react";
8
+ import { EmphasisPanel as f, GradientText as p, NextSteps as m, PagePurpose as h } from "@burdenoff/fe-libs/ui";
6
9
  //#region src/eventfullymanaged/pages/modules/SponsorLeadsPage.tsx
7
- function c() {
8
- let { id: c = "" } = a(), l = n({
10
+ function g() {
11
+ let { id: g = "" } = o(), { navigate: _ } = e(), v = r({
9
12
  limit: 100,
10
13
  offset: 0
11
- }), u = t({
14
+ }), y = n({
12
15
  limit: 100,
13
16
  offset: 0
14
- }), d = e({
17
+ }), b = t({
15
18
  limit: 100,
16
19
  offset: 0
17
- }), f = i(() => (l.data?.sponsors.items ?? []).find((e) => e.id === c), [c, l.data]), p = i(() => u.data?.networkingMatches.items ?? [], [u.data]), m = i(() => d.data?.meetings.items ?? [], [d.data]);
18
- return /* @__PURE__ */ s("div", {
20
+ }), x = a(() => (v.data?.sponsors.items ?? []).find((e) => e.id === g), [g, v.data]), S = a(() => y.data?.networkingMatches.items ?? [], [y.data]), C = a(() => b.data?.meetings.items ?? [], [b.data]);
21
+ return /* @__PURE__ */ c("div", {
19
22
  className: "space-y-6 p-6",
20
23
  children: [
21
- /* @__PURE__ */ s("section", {
22
- className: "rounded-lg border border-border-default bg-bg-surface p-5",
23
- children: [/* @__PURE__ */ o("h1", {
24
- className: "text-2xl font-bold text-text-primary",
25
- children: "Sponsor Leads"
26
- }), /* @__PURE__ */ o("p", {
27
- className: "mt-1 text-sm text-text-secondary",
28
- children: f ? `${f.name} lead funnel sourced from networking and meeting streams.` : "Lead funnel sourced from networking and meeting streams."
29
- })]
30
- }),
31
- /* @__PURE__ */ o(r, {
32
- heading: u.loading ? "Loading networking matches..." : `Potential Leads (${p.length})`,
24
+ /* @__PURE__ */ s(h, { children: "The return on a sponsorship is the people it puts in front of the sponsor. This page pulls together the potential leads (from networking matches) and the booked sponsor meetings for one sponsor, so you can show them exactly who they met and why their investment paid off." }),
25
+ /* @__PURE__ */ c(f, { children: [/* @__PURE__ */ c("h1", {
26
+ className: "text-2xl font-bold text-text-primary",
27
+ children: [/* @__PURE__ */ s(p, { children: "Sponsor" }), " Leads"]
28
+ }), /* @__PURE__ */ s("p", {
29
+ className: "mt-1 text-sm text-text-secondary",
30
+ children: x ? `${x.name} lead funnel sourced from networking and meeting streams.` : "Lead funnel sourced from networking and meeting streams."
31
+ })] }),
32
+ /* @__PURE__ */ s(i, {
33
+ heading: y.loading ? "Loading networking matches..." : `Potential Leads (${S.length})`,
33
34
  emptyLabel: "No networking leads found.",
34
- rows: p.map((e) => ({
35
+ emptyIllustration: "empty-people",
36
+ rows: S.map((e) => ({
35
37
  id: e.id,
36
38
  title: e.title ?? e.name ?? `Lead ${e.id}`,
37
39
  status: e.status
38
40
  }))
39
41
  }),
40
- /* @__PURE__ */ o(r, {
41
- heading: d.loading ? "Loading meetings..." : `Sponsor Meetings (${m.length})`,
42
+ /* @__PURE__ */ s(i, {
43
+ heading: b.loading ? "Loading meetings..." : `Sponsor Meetings (${C.length})`,
42
44
  emptyLabel: "No sponsor meetings recorded.",
43
- rows: m.map((e) => ({
45
+ rows: C.map((e) => ({
44
46
  id: e.id,
45
47
  title: e.title ?? e.name ?? `Meeting ${e.id}`,
46
48
  status: e.status
47
49
  }))
50
+ }),
51
+ /* @__PURE__ */ s(m, {
52
+ storageKey: "eventfullymanaged-sponsor-leads",
53
+ title: "Turn leads into wins",
54
+ steps: [
55
+ {
56
+ id: "sponsor-profile",
57
+ label: "Back to sponsor profile",
58
+ description: "Review this sponsor’s tier, contacts and contract value.",
59
+ icon: /* @__PURE__ */ s(u, { className: "h-4 w-4" }),
60
+ onClick: () => _(g ? `/sponsors/${g}` : "/sponsors")
61
+ },
62
+ {
63
+ id: "boost-networking",
64
+ label: "Boost networking",
65
+ description: "Improve matchmaking so sponsors meet more of the right people.",
66
+ icon: /* @__PURE__ */ s(d, { className: "h-4 w-4" }),
67
+ onClick: () => _("/networking")
68
+ },
69
+ {
70
+ id: "follow-up",
71
+ label: "Follow up with attendees",
72
+ description: "Send a campaign to nurture the leads after the event.",
73
+ icon: /* @__PURE__ */ s(l, { className: "h-4 w-4" }),
74
+ onClick: () => _("/communication")
75
+ }
76
+ ]
48
77
  })
49
78
  ]
50
79
  });
51
80
  }
52
81
  //#endregion
53
- export { c as default };
82
+ export { g as default };
54
83
 
55
84
  //# sourceMappingURL=SponsorLeadsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SponsorLeadsPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/SponsorLeadsPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { useMeetingsQuery, useNetworkingMatchesQuery, useSponsorsQuery } from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype SponsorRow = {\n id: string;\n name: string;\n level: string;\n};\n\ntype SimpleRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function SponsorLeadsPage() {\n const { id = '' } = useParams();\n const sponsorsQuery = useSponsorsQuery({ limit: 100, offset: 0 });\n const matchesQuery = useNetworkingMatchesQuery({ limit: 100, offset: 0 });\n const meetingsQuery = useMeetingsQuery({ limit: 100, offset: 0 });\n\n const sponsor = useMemo(\n () => ((sponsorsQuery.data?.sponsors.items ?? []) as SponsorRow[]).find((item) => item.id === id),\n [id, sponsorsQuery.data]\n );\n const matches = useMemo(() => (matchesQuery.data?.networkingMatches.items ?? []) as SimpleRow[], [matchesQuery.data]);\n const meetings = useMemo(() => (meetingsQuery.data?.meetings.items ?? []) as SimpleRow[], [meetingsQuery.data]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <section className=\"rounded-lg border border-border-default bg-bg-surface p-5\">\n <h1 className=\"text-2xl font-bold text-text-primary\">Sponsor Leads</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {sponsor\n ? `${sponsor.name} lead funnel sourced from networking and meeting streams.`\n : 'Lead funnel sourced from networking and meeting streams.'}\n </p>\n </section>\n\n <EntityListSection\n heading={matchesQuery.loading ? 'Loading networking matches...' : `Potential Leads (${matches.length})`}\n emptyLabel=\"No networking leads found.\"\n rows={matches.map((match) => ({\n id: match.id,\n title: match.title ?? match.name ?? `Lead ${match.id}`,\n status: match.status,\n }))}\n />\n\n <EntityListSection\n heading={meetingsQuery.loading ? 'Loading meetings...' : `Sponsor Meetings (${meetings.length})`}\n emptyLabel=\"No sponsor meetings recorded.\"\n rows={meetings.map((meeting) => ({\n id: meeting.id,\n title: meeting.title ?? meeting.name ?? `Meeting ${meeting.id}`,\n status: meeting.status,\n }))}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;AAmBA,SAAwB,IAAmB;CACzC,IAAM,EAAE,QAAK,OAAO,GAAW,EACzB,IAAgB,EAAiB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC3D,IAAe,EAA0B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACnE,IAAgB,EAAiB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAE3D,IAAU,SACN,EAAc,MAAM,SAAS,SAAS,EAAE,EAAmB,MAAM,MAAS,EAAK,OAAO,EAAG,EACjG,CAAC,GAAI,EAAc,KAAK,CACzB,EACK,IAAU,QAAe,EAAa,MAAM,kBAAkB,SAAS,EAAE,EAAkB,CAAC,EAAa,KAAK,CAAC,EAC/G,IAAW,QAAe,EAAc,MAAM,SAAS,SAAS,EAAE,EAAkB,CAAC,EAAc,KAAK,CAAC;AAE/G,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,WAAD;IAAS,WAAU;cAAnB,CACE,kBAAC,MAAD;KAAI,WAAU;eAAuC;KAAkB,CAAA,EACvE,kBAAC,KAAD;KAAG,WAAU;eACV,IACG,GAAG,EAAQ,KAAK,6DAChB;KACF,CAAA,CACI;;GAEV,kBAAC,GAAD;IACE,SAAS,EAAa,UAAU,kCAAkC,oBAAoB,EAAQ,OAAO;IACrG,YAAW;IACX,MAAM,EAAQ,KAAK,OAAW;KAC5B,IAAI,EAAM;KACV,OAAO,EAAM,SAAS,EAAM,QAAQ,QAAQ,EAAM;KAClD,QAAQ,EAAM;KACf,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAS,EAAc,UAAU,wBAAwB,qBAAqB,EAAS,OAAO;IAC9F,YAAW;IACX,MAAM,EAAS,KAAK,OAAa;KAC/B,IAAI,EAAQ;KACZ,OAAO,EAAQ,SAAS,EAAQ,QAAQ,WAAW,EAAQ;KAC3D,QAAQ,EAAQ;KACjB,EAAE;IACH,CAAA;GACE"}
1
+ {"version":3,"file":"SponsorLeadsPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/SponsorLeadsPage.tsx"],"sourcesContent":["import { Megaphone, User, Users } from 'lucide-react';\nimport { EmphasisPanel, GradientText, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\nimport { useParams } from 'react-router-dom';\n\nimport { useMeetingsQuery, useNetworkingMatchesQuery, useSponsorsQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { EntityListSection } from './EntityListSection';\n\ntype SponsorRow = {\n id: string;\n name: string;\n level: string;\n};\n\ntype SimpleRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function SponsorLeadsPage() {\n const { id = '' } = useParams();\n const { navigate } = useEventfullyManaged();\n const sponsorsQuery = useSponsorsQuery({ limit: 100, offset: 0 });\n const matchesQuery = useNetworkingMatchesQuery({ limit: 100, offset: 0 });\n const meetingsQuery = useMeetingsQuery({ limit: 100, offset: 0 });\n\n const sponsor = useMemo(\n () => ((sponsorsQuery.data?.sponsors.items ?? []) as SponsorRow[]).find((item) => item.id === id),\n [id, sponsorsQuery.data]\n );\n const matches = useMemo(() => (matchesQuery.data?.networkingMatches.items ?? []) as SimpleRow[], [matchesQuery.data]);\n const meetings = useMemo(() => (meetingsQuery.data?.meetings.items ?? []) as SimpleRow[], [meetingsQuery.data]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n The return on a sponsorship is the people it puts in front of the sponsor. This page pulls together the\n potential leads (from networking matches) and the booked sponsor meetings for one sponsor, so you can show them\n exactly who they met and why their investment paid off.\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>Sponsor</GradientText> Leads\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {sponsor\n ? `${sponsor.name} lead funnel sourced from networking and meeting streams.`\n : 'Lead funnel sourced from networking and meeting streams.'}\n </p>\n </EmphasisPanel>\n\n <EntityListSection\n heading={matchesQuery.loading ? 'Loading networking matches...' : `Potential Leads (${matches.length})`}\n emptyLabel=\"No networking leads found.\"\n emptyIllustration=\"empty-people\"\n rows={matches.map((match) => ({\n id: match.id,\n title: match.title ?? match.name ?? `Lead ${match.id}`,\n status: match.status,\n }))}\n />\n\n <EntityListSection\n heading={meetingsQuery.loading ? 'Loading meetings...' : `Sponsor Meetings (${meetings.length})`}\n emptyLabel=\"No sponsor meetings recorded.\"\n rows={meetings.map((meeting) => ({\n id: meeting.id,\n title: meeting.title ?? meeting.name ?? `Meeting ${meeting.id}`,\n status: meeting.status,\n }))}\n />\n\n <NextSteps\n storageKey=\"eventfullymanaged-sponsor-leads\"\n title=\"Turn leads into wins\"\n steps={[\n {\n id: 'sponsor-profile',\n label: 'Back to sponsor profile',\n description: 'Review this sponsor’s tier, contacts and contract value.',\n icon: <User className=\"h-4 w-4\" />,\n onClick: () => navigate(id ? `/sponsors/${id}` : '/sponsors'),\n },\n {\n id: 'boost-networking',\n label: 'Boost networking',\n description: 'Improve matchmaking so sponsors meet more of the right people.',\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('/networking'),\n },\n {\n id: 'follow-up',\n label: 'Follow up with attendees',\n description: 'Send a campaign to nurture the leads after the event.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate('/communication'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAsBA,SAAwB,IAAmB;CACzC,IAAM,EAAE,QAAK,OAAO,GAAW,EACzB,EAAE,gBAAa,GAAsB,EACrC,IAAgB,EAAiB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC3D,IAAe,EAA0B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACnE,IAAgB,EAAiB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAE3D,IAAU,SACN,EAAc,MAAM,SAAS,SAAS,EAAE,EAAmB,MAAM,MAAS,EAAK,OAAO,EAAG,EACjG,CAAC,GAAI,EAAc,KAAK,CACzB,EACK,IAAU,QAAe,EAAa,MAAM,kBAAkB,SAAS,EAAE,EAAkB,CAAC,EAAa,KAAK,CAAC,EAC/G,IAAW,QAAe,EAAc,MAAM,SAAS,SAAS,EAAE,EAAkB,CAAC,EAAc,KAAK,CAAC;AAE/G,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAA,UAAa,mRAIC,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAd,CACE,kBAAC,GAAD,EAAA,UAAc,WAAsB,CAAA,EAAA,SACjC;OACL,kBAAC,KAAD;IAAG,WAAU;cACV,IACG,GAAG,EAAQ,KAAK,6DAChB;IACF,CAAA,CACU,EAAA,CAAA;GAEhB,kBAAC,GAAD;IACE,SAAS,EAAa,UAAU,kCAAkC,oBAAoB,EAAQ,OAAO;IACrG,YAAW;IACX,mBAAkB;IAClB,MAAM,EAAQ,KAAK,OAAW;KAC5B,IAAI,EAAM;KACV,OAAO,EAAM,SAAS,EAAM,QAAQ,QAAQ,EAAM;KAClD,QAAQ,EAAM;KACf,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAS,EAAc,UAAU,wBAAwB,qBAAqB,EAAS,OAAO;IAC9F,YAAW;IACX,MAAM,EAAS,KAAK,OAAa;KAC/B,IAAI,EAAQ;KACZ,OAAO,EAAQ,SAAS,EAAQ,QAAQ,WAAW,EAAQ;KAC3D,QAAQ,EAAQ;KACjB,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,YAAW;IACX,OAAM;IACN,OAAO;KACL;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA;MAClC,eAAe,EAAS,IAAK,aAAa,MAAO,YAAY;MAC9D;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;MACnC,eAAe,EAAS,cAAc;MACvC;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;MACvC,eAAe,EAAS,iBAAiB;MAC1C;KACF;IACD,CAAA;GACE"}