@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,91 +1,118 @@
1
- import { useCreateEventMutation as e, useEventsQuery as t, useTicketTypesQuery as n } from "../../api/eventApi.js";
2
- import { EntityListSection as r } from "./EntityListSection.js";
3
- import { useMemo as i, useState as a } from "react";
4
- import { jsx as o, jsxs as s } from "react/jsx-runtime";
5
- import { CalendarPlus as c } from "lucide-react";
6
- import { useI18n as l } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
1
+ import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
2
+ import { useCreateEventMutation as t, useEventsQuery as n, useTicketTypesQuery as r } from "../../api/eventApi.js";
3
+ import { EntityListSection as i } from "./EntityListSection.js";
4
+ import { useMemo as a, useState as o } from "react";
5
+ import { jsx as s, jsxs as c } from "react/jsx-runtime";
6
+ import { CalendarPlus as l, Ticket as u, Users as d } from "lucide-react";
7
+ import { useI18n as f } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
8
+ import { Button as p, EmphasisPanel as m, GradientText as h, Input as g, NextSteps as _, PagePurpose as v } from "@burdenoff/fe-libs/ui";
7
9
  //#region src/eventfullymanaged/pages/modules/EventsPage.tsx
8
- function u() {
9
- let { t: u } = l(), d = (e, t) => {
10
- let n = u(e);
10
+ function y() {
11
+ let { t: y } = f(), b = (e, t) => {
12
+ let n = y(e);
11
13
  return n === e ? t : n;
12
- }, { data: f, loading: p } = t({
14
+ }, { navigate: x } = e(), { data: S, loading: C } = n({
13
15
  limit: 100,
14
16
  offset: 0
15
- }), m = n({
17
+ }), w = r({
16
18
  limit: 100,
17
19
  offset: 0
18
- }), [h, { loading: g }] = e(), [_, v] = a(""), y = i(() => f?.events.items ?? [], [f]), b = i(() => m.data?.ticketTypes.items ?? [], [m.data]);
19
- return /* @__PURE__ */ s("div", {
20
+ }), [T, { loading: E }] = t(), [D, O] = o(""), k = a(() => S?.events.items ?? [], [S]), A = a(() => w.data?.ticketTypes.items ?? [], [w.data]);
21
+ return /* @__PURE__ */ c("div", {
20
22
  className: "space-y-6 p-6",
21
23
  children: [
22
- /* @__PURE__ */ s("section", {
23
- className: "rounded-lg border border-border-default bg-bg-surface p-5",
24
- children: [
25
- /* @__PURE__ */ o("h1", {
26
- className: "text-2xl font-bold text-text-primary",
27
- children: d("eventfullymanaged.events.title", "Events")
28
- }),
29
- /* @__PURE__ */ o("p", {
30
- className: "mt-1 text-sm text-text-secondary",
31
- children: d("eventfullymanaged.events.description", "Create and manage live events from the workspace graph.")
32
- }),
33
- /* @__PURE__ */ s("div", {
34
- className: "mt-4 flex flex-col gap-3 sm:flex-row",
35
- children: [/* @__PURE__ */ o("input", {
36
- value: _,
37
- onChange: (e) => v(e.target.value),
38
- placeholder: d("eventfullymanaged.events.namePlaceholder", "Annual Innovation Summit"),
39
- className: "flex-1 rounded-md border border-border-default px-3 py-2"
40
- }), /* @__PURE__ */ s("button", {
41
- type: "button",
42
- disabled: g,
43
- onClick: async () => {
44
- if (!_.trim()) return;
45
- let e = /* @__PURE__ */ new Date(), t = new Date(e.getTime() + 3600 * 1e3);
46
- await h({ variables: { input: {
47
- name: _.trim(),
48
- description: "",
49
- type: "IN_PERSON",
50
- status: "DRAFT",
51
- timezone: "Asia/Kolkata",
52
- startAt: e.toISOString(),
53
- endAt: t.toISOString(),
54
- visibility: "private",
55
- capacity: 100,
56
- metadata: {}
57
- } } }), v("");
58
- },
59
- className: "inline-flex items-center rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:opacity-90 disabled:opacity-60",
60
- children: [/* @__PURE__ */ o(c, { className: "mr-2 h-4 w-4" }), g ? d("eventfullymanaged.events.actions.creating", "Creating...") : d("eventfullymanaged.events.actions.create", "Create Event")]
61
- })]
62
- })
63
- ]
64
- }),
65
- /* @__PURE__ */ o(r, {
66
- heading: p ? d("eventfullymanaged.events.list.loading", "Loading events...") : `${d("eventfullymanaged.events.list.heading", "Events")} (${y.length})`,
67
- emptyLabel: d("eventfullymanaged.events.list.empty", "No events found."),
68
- rows: y.map((e) => ({
24
+ /* @__PURE__ */ s(v, { children: b("eventfullymanaged.events.purpose", "Events are the heart of the platform — each one is a happening you sell tickets for, register attendees to, and run on the day. Create an event here, then attach ticket types so people can buy their way in. Use this when you are spinning up a new conference, meetup or summit.") }),
25
+ /* @__PURE__ */ c(m, { children: [
26
+ /* @__PURE__ */ s("h1", {
27
+ className: "text-2xl font-bold text-text-primary",
28
+ children: /* @__PURE__ */ s(h, { children: b("eventfullymanaged.events.title", "Events") })
29
+ }),
30
+ /* @__PURE__ */ s("p", {
31
+ className: "mt-1 text-sm text-text-secondary",
32
+ children: b("eventfullymanaged.events.description", "Create and manage live events from the workspace graph.")
33
+ }),
34
+ /* @__PURE__ */ c("div", {
35
+ className: "mt-4 flex flex-col gap-3 sm:flex-row",
36
+ children: [/* @__PURE__ */ s(g, {
37
+ value: D,
38
+ onChange: (e) => O(e.target.value),
39
+ placeholder: b("eventfullymanaged.events.namePlaceholder", "Annual Innovation Summit"),
40
+ "aria-label": b("eventfullymanaged.events.namePlaceholder", "Annual Innovation Summit"),
41
+ className: "flex-1"
42
+ }), /* @__PURE__ */ c(p, {
43
+ type: "button",
44
+ disabled: E,
45
+ onClick: async () => {
46
+ if (!D.trim()) return;
47
+ let e = /* @__PURE__ */ new Date(), t = new Date(e.getTime() + 3600 * 1e3);
48
+ await T({ variables: { input: {
49
+ name: D.trim(),
50
+ description: "",
51
+ type: "IN_PERSON",
52
+ status: "DRAFT",
53
+ timezone: "Asia/Kolkata",
54
+ startAt: e.toISOString(),
55
+ endAt: t.toISOString(),
56
+ visibility: "private",
57
+ capacity: 100,
58
+ metadata: {}
59
+ } } }), O("");
60
+ },
61
+ children: [/* @__PURE__ */ s(l, { className: "h-4 w-4" }), E ? b("eventfullymanaged.events.actions.creating", "Creating...") : b("eventfullymanaged.events.actions.create", "Create Event")]
62
+ })]
63
+ })
64
+ ] }),
65
+ /* @__PURE__ */ s(i, {
66
+ heading: C ? b("eventfullymanaged.events.list.loading", "Loading events...") : `${b("eventfullymanaged.events.list.heading", "Events")} (${k.length})`,
67
+ emptyLabel: b("eventfullymanaged.events.list.empty", "No events found."),
68
+ rows: k.map((e) => ({
69
69
  id: e.id,
70
70
  title: e.name,
71
71
  subtitle: [e.type, e.startAt ? new Date(e.startAt).toLocaleString() : void 0].filter(Boolean).join(" • "),
72
72
  status: e.status
73
73
  }))
74
74
  }),
75
- /* @__PURE__ */ o(r, {
76
- heading: m.loading ? d("eventfullymanaged.events.ticketTypes.loading", "Loading ticket types...") : `${d("eventfullymanaged.events.ticketTypes.heading", "Ticket Types")} (${b.length})`,
77
- emptyLabel: d("eventfullymanaged.events.ticketTypes.empty", "No ticket types configured."),
78
- rows: b.map((e) => ({
75
+ /* @__PURE__ */ s(i, {
76
+ heading: w.loading ? b("eventfullymanaged.events.ticketTypes.loading", "Loading ticket types...") : `${b("eventfullymanaged.events.ticketTypes.heading", "Ticket Types")} (${A.length})`,
77
+ emptyLabel: b("eventfullymanaged.events.ticketTypes.empty", "No ticket types configured."),
78
+ rows: A.map((e) => ({
79
79
  id: e.id,
80
80
  title: e.name,
81
- subtitle: `${e.price} ${e.currency} • ${d("eventfullymanaged.events.ticketTypes.soldPrefix", "Sold")} ${e.soldCount}`,
81
+ subtitle: `${e.price} ${e.currency} • ${b("eventfullymanaged.events.ticketTypes.soldPrefix", "Sold")} ${e.soldCount}`,
82
82
  status: e.isActive ? "active" : "inactive"
83
83
  }))
84
+ }),
85
+ /* @__PURE__ */ s(_, {
86
+ storageKey: "eventfullymanaged-events",
87
+ title: b("eventfullymanaged.events.nextSteps.title", "Finish setting up your event"),
88
+ steps: [
89
+ {
90
+ id: "configure-registration",
91
+ label: b("eventfullymanaged.events.nextSteps.registration", "Configure registration & tickets"),
92
+ description: b("eventfullymanaged.events.nextSteps.registrationDesc", "Define ticket types and open sign-ups for attendees."),
93
+ icon: /* @__PURE__ */ s(u, { className: "h-4 w-4" }),
94
+ onClick: () => x("/registration")
95
+ },
96
+ {
97
+ id: "plan-networking",
98
+ label: b("eventfullymanaged.events.nextSteps.networking", "Plan networking & sessions"),
99
+ description: b("eventfullymanaged.events.nextSteps.networkingDesc", "Set up attendee matchmaking and meeting schedules."),
100
+ icon: /* @__PURE__ */ s(d, { className: "h-4 w-4" }),
101
+ onClick: () => x("/networking")
102
+ },
103
+ {
104
+ id: "announce",
105
+ label: b("eventfullymanaged.events.nextSteps.announce", "Announce to attendees"),
106
+ description: b("eventfullymanaged.events.nextSteps.announceDesc", "Send announcements and run communication campaigns."),
107
+ icon: /* @__PURE__ */ s(l, { className: "h-4 w-4" }),
108
+ onClick: () => x("/communication")
109
+ }
110
+ ]
84
111
  })
85
112
  ]
86
113
  });
87
114
  }
88
115
  //#endregion
89
- export { u as default };
116
+ export { y as default };
90
117
 
91
118
  //# sourceMappingURL=EventsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventsPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/EventsPage.tsx"],"sourcesContent":["import { CalendarPlus } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useMemo, useState } from 'react';\n\nimport { useCreateEventMutation, useEventsQuery, useTicketTypesQuery } from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype EventRow = {\n id: string;\n name: string;\n type?: string;\n status?: string;\n startAt?: string;\n endAt?: string;\n};\n\nexport default function EventsPage() {\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 { data, loading } = useEventsQuery({ limit: 100, offset: 0 });\n const ticketTypesQuery = useTicketTypesQuery({ limit: 100, offset: 0 });\n const [createEvent, { loading: creating }] = useCreateEventMutation();\n const [name, setName] = useState('');\n\n const rows = useMemo(() => (data?.events.items ?? []) as EventRow[], [data]);\n const ticketTypes = useMemo(() => ticketTypesQuery.data?.ticketTypes.items ?? [], [ticketTypesQuery.data]);\n\n const onCreate = async () => {\n if (!name.trim()) return;\n const now = new Date();\n const nextHour = new Date(now.getTime() + 60 * 60 * 1000);\n await createEvent({\n variables: {\n input: {\n name: name.trim(),\n description: '',\n type: 'IN_PERSON',\n status: 'DRAFT',\n timezone: 'Asia/Kolkata',\n startAt: now.toISOString(),\n endAt: nextHour.toISOString(),\n visibility: 'private',\n capacity: 100,\n metadata: {},\n },\n },\n });\n setName('');\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\">{t('eventfullymanaged.events.title', 'Events')}</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {t('eventfullymanaged.events.description', 'Create and manage live events from the workspace graph.')}\n </p>\n <div className=\"mt-4 flex flex-col gap-3 sm:flex-row\">\n <input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder={t('eventfullymanaged.events.namePlaceholder', 'Annual Innovation Summit')}\n className=\"flex-1 rounded-md border border-border-default px-3 py-2\"\n />\n <button\n type=\"button\"\n disabled={creating}\n onClick={onCreate}\n className=\"inline-flex items-center rounded-md bg-action-primary-bg px-4 py-2 text-sm font-medium text-action-primary-text hover:opacity-90 disabled:opacity-60\"\n >\n <CalendarPlus className=\"mr-2 h-4 w-4\" />\n {creating\n ? t('eventfullymanaged.events.actions.creating', 'Creating...')\n : t('eventfullymanaged.events.actions.create', 'Create Event')}\n </button>\n </div>\n </section>\n\n <EntityListSection\n heading={\n loading\n ? t('eventfullymanaged.events.list.loading', 'Loading events...')\n : `${t('eventfullymanaged.events.list.heading', 'Events')} (${rows.length})`\n }\n emptyLabel={t('eventfullymanaged.events.list.empty', 'No events found.')}\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: [row.type, row.startAt ? new Date(row.startAt).toLocaleString() : undefined]\n .filter(Boolean)\n .join(' • '),\n status: row.status,\n }))}\n />\n\n <EntityListSection\n heading={\n ticketTypesQuery.loading\n ? t('eventfullymanaged.events.ticketTypes.loading', 'Loading ticket types...')\n : `${t('eventfullymanaged.events.ticketTypes.heading', 'Ticket Types')} (${ticketTypes.length})`\n }\n emptyLabel={t('eventfullymanaged.events.ticketTypes.empty', 'No ticket types configured.')}\n rows={ticketTypes.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: `${row.price} ${row.currency} • ${t('eventfullymanaged.events.ticketTypes.soldPrefix', 'Sold')} ${row.soldCount}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;AAgBA,SAAwB,IAAa;CACnC,IAAM,EAAE,GAAG,MAAc,GAAS,EAC5B,KAAK,GAAa,MAAqB;EAC3C,IAAM,IAAQ,EAAU,EAAI;AAC5B,SAAO,MAAU,IAAM,IAAW;IAE9B,EAAE,SAAM,eAAY,EAAe;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC7D,IAAmB,EAAoB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACjE,CAAC,GAAa,EAAE,SAAS,OAAc,GAAwB,EAC/D,CAAC,GAAM,KAAW,EAAS,GAAG,EAE9B,IAAO,QAAe,GAAM,OAAO,SAAS,EAAE,EAAiB,CAAC,EAAK,CAAC,EACtE,IAAc,QAAc,EAAiB,MAAM,YAAY,SAAS,EAAE,EAAE,CAAC,EAAiB,KAAK,CAAC;AAyB1G,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,WAAD;IAAS,WAAU;cAAnB;KACE,kBAAC,MAAD;MAAI,WAAU;gBAAwC,EAAE,kCAAkC,SAAS;MAAM,CAAA;KACzG,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAE,wCAAwC,0DAA0D;MACnG,CAAA;KACJ,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,SAAD;OACE,OAAO;OACP,WAAW,MAAM,EAAQ,EAAE,OAAO,MAAM;OACxC,aAAa,EAAE,4CAA4C,2BAA2B;OACtF,WAAU;OACV,CAAA,EACF,kBAAC,UAAD;OACE,MAAK;OACL,UAAU;OACV,SAxCO,YAAY;AAC3B,YAAI,CAAC,EAAK,MAAM,CAAE;QAClB,IAAM,oBAAM,IAAI,MAAM,EAChB,IAAW,IAAI,KAAK,EAAI,SAAS,GAAG,OAAU,IAAK;AAiBzD,QAhBA,MAAM,EAAY,EAChB,WAAW,EACT,OAAO;SACL,MAAM,EAAK,MAAM;SACjB,aAAa;SACb,MAAM;SACN,QAAQ;SACR,UAAU;SACV,SAAS,EAAI,aAAa;SAC1B,OAAO,EAAS,aAAa;SAC7B,YAAY;SACZ,UAAU;SACV,UAAU,EAAE;SACb,EACF,EACF,CAAC,EACF,EAAQ,GAAG;;OAqBH,WAAU;iBAJZ,CAME,kBAAC,GAAD,EAAc,WAAU,gBAAiB,CAAA,EACxC,IACG,EAAE,6CAA6C,cAAc,GAC7D,EAAE,2CAA2C,eAAe,CACzD;SACL;;KACE;;GAEV,kBAAC,GAAD;IACE,SACE,IACI,EAAE,yCAAyC,oBAAoB,GAC/D,GAAG,EAAE,yCAAyC,SAAS,CAAC,IAAI,EAAK,OAAO;IAE9E,YAAY,EAAE,uCAAuC,mBAAmB;IACxE,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,CAAC,EAAI,MAAM,EAAI,UAAU,IAAI,KAAK,EAAI,QAAQ,CAAC,gBAAgB,GAAG,KAAA,EAAU,CACnF,OAAO,QAAQ,CACf,KAAK,MAAM;KACd,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SACE,EAAiB,UACb,EAAE,gDAAgD,0BAA0B,GAC5E,GAAG,EAAE,gDAAgD,eAAe,CAAC,IAAI,EAAY,OAAO;IAElG,YAAY,EAAE,8CAA8C,8BAA8B;IAC1F,MAAM,EAAY,KAAK,OAAS;KAC9B,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,GAAG,EAAI,MAAM,GAAG,EAAI,SAAS,KAAK,EAAE,mDAAmD,OAAO,CAAC,GAAG,EAAI;KAChH,QAAQ,EAAI,WAAW,WAAW;KACnC,EAAE;IACH,CAAA;GACE"}
1
+ {"version":3,"file":"EventsPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/EventsPage.tsx"],"sourcesContent":["import { CalendarPlus, Ticket, Users } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Button, EmphasisPanel, GradientText, Input, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport { useCreateEventMutation, useEventsQuery, useTicketTypesQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { EntityListSection } from './EntityListSection';\n\ntype EventRow = {\n id: string;\n name: string;\n type?: string;\n status?: string;\n startAt?: string;\n endAt?: string;\n};\n\nexport default function EventsPage() {\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 { data, loading } = useEventsQuery({ limit: 100, offset: 0 });\n const ticketTypesQuery = useTicketTypesQuery({ limit: 100, offset: 0 });\n const [createEvent, { loading: creating }] = useCreateEventMutation();\n const [name, setName] = useState('');\n\n const rows = useMemo(() => (data?.events.items ?? []) as EventRow[], [data]);\n const ticketTypes = useMemo(() => ticketTypesQuery.data?.ticketTypes.items ?? [], [ticketTypesQuery.data]);\n\n const onCreate = async () => {\n if (!name.trim()) return;\n const now = new Date();\n const nextHour = new Date(now.getTime() + 60 * 60 * 1000);\n await createEvent({\n variables: {\n input: {\n name: name.trim(),\n description: '',\n type: 'IN_PERSON',\n status: 'DRAFT',\n timezone: 'Asia/Kolkata',\n startAt: now.toISOString(),\n endAt: nextHour.toISOString(),\n visibility: 'private',\n capacity: 100,\n metadata: {},\n },\n },\n });\n setName('');\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n {t(\n 'eventfullymanaged.events.purpose',\n 'Events are the heart of the platform — each one is a happening you sell tickets for, register attendees to, and run on the day. Create an event here, then attach ticket types so people can buy their way in. Use this when you are spinning up a new conference, meetup or summit.'\n )}\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>{t('eventfullymanaged.events.title', 'Events')}</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {t('eventfullymanaged.events.description', 'Create and manage live events from the workspace graph.')}\n </p>\n <div className=\"mt-4 flex flex-col gap-3 sm:flex-row\">\n <Input\n value={name}\n onChange={(e) => setName(e.target.value)}\n placeholder={t('eventfullymanaged.events.namePlaceholder', 'Annual Innovation Summit')}\n aria-label={t('eventfullymanaged.events.namePlaceholder', 'Annual Innovation Summit')}\n className=\"flex-1\"\n />\n <Button type=\"button\" disabled={creating} onClick={onCreate}>\n <CalendarPlus className=\"h-4 w-4\" />\n {creating\n ? t('eventfullymanaged.events.actions.creating', 'Creating...')\n : t('eventfullymanaged.events.actions.create', 'Create Event')}\n </Button>\n </div>\n </EmphasisPanel>\n\n <EntityListSection\n heading={\n loading\n ? t('eventfullymanaged.events.list.loading', 'Loading events...')\n : `${t('eventfullymanaged.events.list.heading', 'Events')} (${rows.length})`\n }\n emptyLabel={t('eventfullymanaged.events.list.empty', 'No events found.')}\n rows={rows.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: [row.type, row.startAt ? new Date(row.startAt).toLocaleString() : undefined]\n .filter(Boolean)\n .join(' • '),\n status: row.status,\n }))}\n />\n\n <EntityListSection\n heading={\n ticketTypesQuery.loading\n ? t('eventfullymanaged.events.ticketTypes.loading', 'Loading ticket types...')\n : `${t('eventfullymanaged.events.ticketTypes.heading', 'Ticket Types')} (${ticketTypes.length})`\n }\n emptyLabel={t('eventfullymanaged.events.ticketTypes.empty', 'No ticket types configured.')}\n rows={ticketTypes.map((row) => ({\n id: row.id,\n title: row.name,\n subtitle: `${row.price} ${row.currency} • ${t('eventfullymanaged.events.ticketTypes.soldPrefix', 'Sold')} ${row.soldCount}`,\n status: row.isActive ? 'active' : 'inactive',\n }))}\n />\n\n <NextSteps\n storageKey=\"eventfullymanaged-events\"\n title={t('eventfullymanaged.events.nextSteps.title', 'Finish setting up your event')}\n steps={[\n {\n id: 'configure-registration',\n label: t('eventfullymanaged.events.nextSteps.registration', 'Configure registration & tickets'),\n description: t(\n 'eventfullymanaged.events.nextSteps.registrationDesc',\n 'Define ticket types and open sign-ups for attendees.'\n ),\n icon: <Ticket className=\"h-4 w-4\" />,\n onClick: () => navigate('/registration'),\n },\n {\n id: 'plan-networking',\n label: t('eventfullymanaged.events.nextSteps.networking', 'Plan networking & sessions'),\n description: t(\n 'eventfullymanaged.events.nextSteps.networkingDesc',\n 'Set up attendee matchmaking and meeting schedules.'\n ),\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('/networking'),\n },\n {\n id: 'announce',\n label: t('eventfullymanaged.events.nextSteps.announce', 'Announce to attendees'),\n description: t(\n 'eventfullymanaged.events.nextSteps.announceDesc',\n 'Send announcements and run communication campaigns.'\n ),\n icon: <CalendarPlus className=\"h-4 w-4\" />,\n onClick: () => navigate('/communication'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAkBA,SAAwB,IAAa;CACnC,IAAM,EAAE,GAAG,MAAc,GAAS,EAC5B,KAAK,GAAa,MAAqB;EAC3C,IAAM,IAAQ,EAAU,EAAI;AAC5B,SAAO,MAAU,IAAM,IAAW;IAE9B,EAAE,gBAAa,GAAsB,EACrC,EAAE,SAAM,eAAY,EAAe;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAC7D,IAAmB,EAAoB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACjE,CAAC,GAAa,EAAE,SAAS,OAAc,GAAwB,EAC/D,CAAC,GAAM,KAAW,EAAS,GAAG,EAE9B,IAAO,QAAe,GAAM,OAAO,SAAS,EAAE,EAAiB,CAAC,EAAK,CAAC,EACtE,IAAc,QAAc,EAAiB,MAAM,YAAY,SAAS,EAAE,EAAE,CAAC,EAAiB,KAAK,CAAC;AAyB1G,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAA,UACG,EACC,oCACA,uRACD,EACW,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA;IACE,kBAAC,MAAD;KAAI,WAAU;eACZ,kBAAC,GAAD,EAAA,UAAe,EAAE,kCAAkC,SAAS,EAAgB,CAAA;KACzE,CAAA;IACL,kBAAC,KAAD;KAAG,WAAU;eACV,EAAE,wCAAwC,0DAA0D;KACnG,CAAA;IACJ,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD;MACE,OAAO;MACP,WAAW,MAAM,EAAQ,EAAE,OAAO,MAAM;MACxC,aAAa,EAAE,4CAA4C,2BAA2B;MACtF,cAAY,EAAE,4CAA4C,2BAA2B;MACrF,WAAU;MACV,CAAA,EACF,kBAAC,GAAD;MAAQ,MAAK;MAAS,UAAU;MAAU,SA/CjC,YAAY;AAC3B,WAAI,CAAC,EAAK,MAAM,CAAE;OAClB,IAAM,oBAAM,IAAI,MAAM,EAChB,IAAW,IAAI,KAAK,EAAI,SAAS,GAAG,OAAU,IAAK;AAiBzD,OAhBA,MAAM,EAAY,EAChB,WAAW,EACT,OAAO;QACL,MAAM,EAAK,MAAM;QACjB,aAAa;QACb,MAAM;QACN,QAAQ;QACR,UAAU;QACV,SAAS,EAAI,aAAa;QAC1B,OAAO,EAAS,aAAa;QAC7B,YAAY;QACZ,UAAU;QACV,UAAU,EAAE;QACb,EACF,EACF,CAAC,EACF,EAAQ,GAAG;;gBA2BL,CACE,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA,EACnC,IACG,EAAE,6CAA6C,cAAc,GAC7D,EAAE,2CAA2C,eAAe,CACzD;QACL;;IACQ,EAAA,CAAA;GAEhB,kBAAC,GAAD;IACE,SACE,IACI,EAAE,yCAAyC,oBAAoB,GAC/D,GAAG,EAAE,yCAAyC,SAAS,CAAC,IAAI,EAAK,OAAO;IAE9E,YAAY,EAAE,uCAAuC,mBAAmB;IACxE,MAAM,EAAK,KAAK,OAAS;KACvB,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,CAAC,EAAI,MAAM,EAAI,UAAU,IAAI,KAAK,EAAI,QAAQ,CAAC,gBAAgB,GAAG,KAAA,EAAU,CACnF,OAAO,QAAQ,CACf,KAAK,MAAM;KACd,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SACE,EAAiB,UACb,EAAE,gDAAgD,0BAA0B,GAC5E,GAAG,EAAE,gDAAgD,eAAe,CAAC,IAAI,EAAY,OAAO;IAElG,YAAY,EAAE,8CAA8C,8BAA8B;IAC1F,MAAM,EAAY,KAAK,OAAS;KAC9B,IAAI,EAAI;KACR,OAAO,EAAI;KACX,UAAU,GAAG,EAAI,MAAM,GAAG,EAAI,SAAS,KAAK,EAAE,mDAAmD,OAAO,CAAC,GAAG,EAAI;KAChH,QAAQ,EAAI,WAAW,WAAW;KACnC,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,YAAW;IACX,OAAO,EAAE,4CAA4C,+BAA+B;IACpF,OAAO;KACL;MACE,IAAI;MACJ,OAAO,EAAE,mDAAmD,mCAAmC;MAC/F,aAAa,EACX,uDACA,uDACD;MACD,MAAM,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA;MACpC,eAAe,EAAS,gBAAgB;MACzC;KACD;MACE,IAAI;MACJ,OAAO,EAAE,iDAAiD,6BAA6B;MACvF,aAAa,EACX,qDACA,qDACD;MACD,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;MACnC,eAAe,EAAS,cAAc;MACvC;KACD;MACE,IAAI;MACJ,OAAO,EAAE,+CAA+C,wBAAwB;MAChF,aAAa,EACX,mDACA,sDACD;MACD,MAAM,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA;MAC1C,eAAe,EAAS,iBAAiB;MAC1C;KACF;IACD,CAAA;GACE"}
@@ -2,41 +2,40 @@ import { useCheckInRecordsQuery as e, useCheckInStationsQuery as t } from "../..
2
2
  import { EntityListSection as n } from "./EntityListSection.js";
3
3
  import { useMemo as r } from "react";
4
4
  import { jsx as i, jsxs as a } from "react/jsx-runtime";
5
+ import { EmphasisPanel as o, GradientText as s, PagePurpose as c } from "@burdenoff/fe-libs/ui";
5
6
  //#region src/eventfullymanaged/pages/modules/KioskPage.tsx
6
- function o() {
7
- let o = t({
7
+ function l() {
8
+ let l = t({
8
9
  limit: 100,
9
10
  offset: 0
10
- }), s = e({
11
+ }), u = e({
11
12
  limit: 100,
12
13
  offset: 0
13
- }), c = r(() => o.data?.checkInStations.items ?? [], [o.data]), l = r(() => s.data?.checkInRecords.items ?? [], [s.data]);
14
+ }), d = r(() => l.data?.checkInStations.items ?? [], [l.data]), f = r(() => u.data?.checkInRecords.items ?? [], [u.data]);
14
15
  return /* @__PURE__ */ a("div", {
15
16
  className: "space-y-6 p-6",
16
17
  children: [
17
- /* @__PURE__ */ a("section", {
18
- className: "rounded-lg border border-border-default bg-bg-surface p-5",
19
- children: [/* @__PURE__ */ i("h1", {
20
- className: "text-2xl font-bold text-text-primary",
21
- children: "Kiosk & Check-In"
22
- }), /* @__PURE__ */ i("p", {
23
- className: "mt-1 text-sm text-text-secondary",
24
- children: "View configured check-in stations and station status."
25
- })]
26
- }),
18
+ /* @__PURE__ */ i(c, { children: "Kiosks are the front desk of your event. Each check-in station is a device or counter where attendees scan in, and check-in records are the live log of who arrived and when. Use this page to confirm your stations are online before doors open and to watch arrivals flow in on the day." }),
19
+ /* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a("h1", {
20
+ className: "text-2xl font-bold text-text-primary",
21
+ children: [/* @__PURE__ */ i(s, { children: "Kiosk" }), " & Check-In"]
22
+ }), /* @__PURE__ */ i("p", {
23
+ className: "mt-1 text-sm text-text-secondary",
24
+ children: "View configured check-in stations and station status."
25
+ })] }),
27
26
  /* @__PURE__ */ i(n, {
28
- heading: o.loading ? "Loading check-in stations..." : `Stations (${c.length})`,
27
+ heading: l.loading ? "Loading check-in stations..." : `Stations (${d.length})`,
29
28
  emptyLabel: "No check-in stations configured yet.",
30
- rows: c.map((e) => ({
29
+ rows: d.map((e) => ({
31
30
  id: e.id,
32
31
  title: e.name ?? e.title ?? `Station ${e.id}`,
33
32
  status: e.status ?? void 0
34
33
  }))
35
34
  }),
36
35
  /* @__PURE__ */ i(n, {
37
- heading: s.loading ? "Loading check-in records..." : `Check-In Records (${l.length})`,
36
+ heading: u.loading ? "Loading check-in records..." : `Check-In Records (${f.length})`,
38
37
  emptyLabel: "No check-in records found.",
39
- rows: l.map((e) => ({
38
+ rows: f.map((e) => ({
40
39
  id: e.id,
41
40
  title: e.attendeeId ? `Attendee ${e.attendeeId}` : `Record ${e.id}`,
42
41
  subtitle: `${e.method} • ${e.direction}`,
@@ -47,6 +46,6 @@ function o() {
47
46
  });
48
47
  }
49
48
  //#endregion
50
- export { o as default };
49
+ export { l as default };
51
50
 
52
51
  //# sourceMappingURL=KioskPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KioskPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/KioskPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useCheckInRecordsQuery, useCheckInStationsQuery } from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype StationRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function KioskPage() {\n const stationsQuery = useCheckInStationsQuery({ limit: 100, offset: 0 });\n const recordsQuery = useCheckInRecordsQuery({ limit: 100, offset: 0 });\n const stations = useMemo(\n () => (stationsQuery.data?.checkInStations.items ?? []) as StationRow[],\n [stationsQuery.data]\n );\n const records = useMemo(() => recordsQuery.data?.checkInRecords.items ?? [], [recordsQuery.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\">Kiosk & Check-In</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">View configured check-in stations and station status.</p>\n </section>\n\n <EntityListSection\n heading={stationsQuery.loading ? 'Loading check-in stations...' : `Stations (${stations.length})`}\n emptyLabel=\"No check-in stations configured yet.\"\n rows={stations.map((row) => ({\n id: row.id,\n title: row.name ?? row.title ?? `Station ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n\n <EntityListSection\n heading={recordsQuery.loading ? 'Loading check-in records...' : `Check-In Records (${records.length})`}\n emptyLabel=\"No check-in records found.\"\n rows={records.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Record ${row.id}`,\n subtitle: `${row.method} • ${row.direction}`,\n status: row.status,\n }))}\n />\n </div>\n );\n}\n"],"mappings":";;;;;AAYA,SAAwB,IAAY;CAClC,IAAM,IAAgB,EAAwB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAClE,IAAe,EAAuB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAChE,IAAW,QACR,EAAc,MAAM,gBAAgB,SAAS,EAAE,EACtD,CAAC,EAAc,KAAK,CACrB,EACK,IAAU,QAAc,EAAa,MAAM,eAAe,SAAS,EAAE,EAAE,CAAC,EAAa,KAAK,CAAC;AAEjG,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,WAAD;IAAS,WAAU;cAAnB,CACE,kBAAC,MAAD;KAAI,WAAU;eAAuC;KAAqB,CAAA,EAC1E,kBAAC,KAAD;KAAG,WAAU;eAAmC;KAAyD,CAAA,CACjG;;GAEV,kBAAC,GAAD;IACE,SAAS,EAAc,UAAU,iCAAiC,aAAa,EAAS,OAAO;IAC/F,YAAW;IACX,MAAM,EAAS,KAAK,OAAS;KAC3B,IAAI,EAAI;KACR,OAAO,EAAI,QAAQ,EAAI,SAAS,WAAW,EAAI;KAC/C,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAS,EAAa,UAAU,gCAAgC,qBAAqB,EAAQ,OAAO;IACpG,YAAW;IACX,MAAM,EAAQ,KAAK,OAAS;KAC1B,IAAI,EAAI;KACR,OAAO,EAAI,aAAa,YAAY,EAAI,eAAe,UAAU,EAAI;KACrE,UAAU,GAAG,EAAI,OAAO,KAAK,EAAI;KACjC,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;GACE"}
1
+ {"version":3,"file":"KioskPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/KioskPage.tsx"],"sourcesContent":["import { EmphasisPanel, GradientText, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\n\nimport { useCheckInRecordsQuery, useCheckInStationsQuery } from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype StationRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function KioskPage() {\n const stationsQuery = useCheckInStationsQuery({ limit: 100, offset: 0 });\n const recordsQuery = useCheckInRecordsQuery({ limit: 100, offset: 0 });\n const stations = useMemo(\n () => (stationsQuery.data?.checkInStations.items ?? []) as StationRow[],\n [stationsQuery.data]\n );\n const records = useMemo(() => recordsQuery.data?.checkInRecords.items ?? [], [recordsQuery.data]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Kiosks are the front desk of your event. Each check-in station is a device or counter where attendees scan in,\n and check-in records are the live log of who arrived and when. Use this page to confirm your stations are\n online before doors open and to watch arrivals flow in on the day.\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>Kiosk</GradientText> &amp; Check-In\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">View configured check-in stations and station status.</p>\n </EmphasisPanel>\n\n <EntityListSection\n heading={stationsQuery.loading ? 'Loading check-in stations...' : `Stations (${stations.length})`}\n emptyLabel=\"No check-in stations configured yet.\"\n rows={stations.map((row) => ({\n id: row.id,\n title: row.name ?? row.title ?? `Station ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n\n <EntityListSection\n heading={recordsQuery.loading ? 'Loading check-in records...' : `Check-In Records (${records.length})`}\n emptyLabel=\"No check-in records found.\"\n rows={records.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Record ${row.id}`,\n subtitle: `${row.method} • ${row.direction}`,\n status: row.status,\n }))}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;AAaA,SAAwB,IAAY;CAClC,IAAM,IAAgB,EAAwB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAClE,IAAe,EAAuB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAChE,IAAW,QACR,EAAc,MAAM,gBAAgB,SAAS,EAAE,EACtD,CAAC,EAAc,KAAK,CACrB,EACK,IAAU,QAAc,EAAa,MAAM,eAAe,SAAS,EAAE,EAAE,CAAC,EAAa,KAAK,CAAC;AAEjG,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAA,UAAa,+RAIC,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cAAd,CACE,kBAAC,GAAD,EAAA,UAAc,SAAoB,CAAA,EAAA,cAC/B;OACL,kBAAC,KAAD;IAAG,WAAU;cAAmC;IAAyD,CAAA,CAC3F,EAAA,CAAA;GAEhB,kBAAC,GAAD;IACE,SAAS,EAAc,UAAU,iCAAiC,aAAa,EAAS,OAAO;IAC/F,YAAW;IACX,MAAM,EAAS,KAAK,OAAS;KAC3B,IAAI,EAAI;KACR,OAAO,EAAI,QAAQ,EAAI,SAAS,WAAW,EAAI;KAC/C,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAS,EAAa,UAAU,gCAAgC,qBAAqB,EAAQ,OAAO;IACpG,YAAW;IACX,MAAM,EAAQ,KAAK,OAAS;KAC1B,IAAI,EAAI;KACR,OAAO,EAAI,aAAa,YAAY,EAAI,eAAe,UAAU,EAAI;KACrE,UAAU,GAAG,EAAI,OAAO,KAAK,EAAI;KACjC,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;GACE"}
@@ -1,65 +1,95 @@
1
- import { useMeetingsQuery as e, useNetworkingMatchesQuery as t, useNetworkingProfilesQuery 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";
1
+ import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
2
+ import { useMeetingsQuery as t, useNetworkingMatchesQuery as n, useNetworkingProfilesQuery 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 { CalendarDays as c, Megaphone as l, Users as u } from "lucide-react";
7
+ import { EmphasisPanel as d, GradientText as f, NextSteps as p, PagePurpose as m } from "@burdenoff/fe-libs/ui";
5
8
  //#region src/eventfullymanaged/pages/modules/NetworkingPage.tsx
6
- function s() {
7
- let s = n({
9
+ function h() {
10
+ let { navigate: h } = e(), g = r({
8
11
  limit: 100,
9
12
  offset: 0
10
- }), c = t({
13
+ }), _ = n({
11
14
  limit: 100,
12
15
  offset: 0
13
- }), l = e({
16
+ }), v = t({
14
17
  limit: 100,
15
18
  offset: 0
16
- }), u = i(() => s.data?.networkingProfiles.items ?? [], [s.data]), d = i(() => c.data?.networkingMatches.items ?? [], [c.data]), f = i(() => l.data?.meetings.items ?? [], [l.data]);
17
- return /* @__PURE__ */ o("div", {
19
+ }), y = a(() => g.data?.networkingProfiles.items ?? [], [g.data]), b = a(() => _.data?.networkingMatches.items ?? [], [_.data]), x = a(() => v.data?.meetings.items ?? [], [v.data]);
20
+ return /* @__PURE__ */ s("div", {
18
21
  className: "space-y-6 p-6",
19
22
  children: [
20
- /* @__PURE__ */ o("section", {
21
- className: "rounded-lg border border-border-default bg-bg-surface p-5",
22
- children: [/* @__PURE__ */ a("h1", {
23
- className: "text-2xl font-bold text-text-primary",
24
- children: "Networking"
25
- }), /* @__PURE__ */ a("p", {
26
- className: "mt-1 text-sm text-text-secondary",
27
- children: "Manage networking matches and meeting schedules from live backend data."
28
- })]
29
- }),
30
- /* @__PURE__ */ a(r, {
31
- heading: s.loading ? "Loading networking profiles..." : `Profiles (${u.length})`,
23
+ /* @__PURE__ */ o(m, { children: "Networking turns attendees into connections. Profiles describe who each attendee is and what they are looking for, matches are the suggestions the engine makes between them, and meetings are the 1:1s they book. Use this page to spot strong matches and make sure scheduled meetings are running smoothly." }),
24
+ /* @__PURE__ */ s(d, { children: [/* @__PURE__ */ o("h1", {
25
+ className: "text-2xl font-bold text-text-primary",
26
+ children: /* @__PURE__ */ o(f, { children: "Networking" })
27
+ }), /* @__PURE__ */ o("p", {
28
+ className: "mt-1 text-sm text-text-secondary",
29
+ children: "Manage networking matches and meeting schedules from live backend data."
30
+ })] }),
31
+ /* @__PURE__ */ o(i, {
32
+ heading: g.loading ? "Loading networking profiles..." : `Profiles (${y.length})`,
32
33
  emptyLabel: "No networking profiles available.",
33
- rows: u.map((e) => ({
34
+ emptyIllustration: "empty-people",
35
+ rows: y.map((e) => ({
34
36
  id: e.id,
35
37
  title: e.attendeeId ? `Attendee ${e.attendeeId}` : `Profile ${e.id}`,
36
38
  subtitle: [e.role, e.industry].filter(Boolean).join(" • "),
37
39
  status: e.visibility
38
40
  }))
39
41
  }),
40
- /* @__PURE__ */ a(r, {
41
- heading: c.loading ? "Loading networking matches..." : `Matches (${d.length})`,
42
+ /* @__PURE__ */ o(i, {
43
+ heading: _.loading ? "Loading networking matches..." : `Matches (${b.length})`,
42
44
  emptyLabel: "No networking matches available.",
43
- rows: d.map((e) => ({
45
+ emptyIllustration: "empty-people",
46
+ rows: b.map((e) => ({
44
47
  id: e.id,
45
48
  title: e.name ?? e.title ?? `Match ${e.id}`,
46
49
  subtitle: "Suggested by networking engine",
47
50
  status: e.status ?? void 0
48
51
  }))
49
52
  }),
50
- /* @__PURE__ */ a(r, {
51
- heading: l.loading ? "Loading meetings..." : `Meetings (${f.length})`,
53
+ /* @__PURE__ */ o(i, {
54
+ heading: v.loading ? "Loading meetings..." : `Meetings (${x.length})`,
52
55
  emptyLabel: "No meetings scheduled.",
53
- rows: f.map((e) => ({
56
+ rows: x.map((e) => ({
54
57
  id: e.id,
55
58
  title: e.title ?? e.name ?? `Meeting ${e.id}`,
56
59
  status: e.status ?? void 0
57
60
  }))
61
+ }),
62
+ /* @__PURE__ */ o(p, {
63
+ storageKey: "eventfullymanaged-networking",
64
+ title: "Make networking land",
65
+ steps: [
66
+ {
67
+ id: "grow-attendees",
68
+ label: "Bring in more attendees",
69
+ description: "More registered attendees means richer matches and meetings.",
70
+ icon: /* @__PURE__ */ o(u, { className: "h-4 w-4" }),
71
+ onClick: () => h("/registration")
72
+ },
73
+ {
74
+ id: "announce-networking",
75
+ label: "Announce networking sessions",
76
+ description: "Let attendees know how and when to connect.",
77
+ icon: /* @__PURE__ */ o(l, { className: "h-4 w-4" }),
78
+ onClick: () => h("/communication")
79
+ },
80
+ {
81
+ id: "review-event",
82
+ label: "Review the event schedule",
83
+ description: "Make sure networking slots fit around your sessions.",
84
+ icon: /* @__PURE__ */ o(c, { className: "h-4 w-4" }),
85
+ onClick: () => h("/events")
86
+ }
87
+ ]
58
88
  })
59
89
  ]
60
90
  });
61
91
  }
62
92
  //#endregion
63
- export { s as default };
93
+ export { h as default };
64
94
 
65
95
  //# sourceMappingURL=NetworkingPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkingPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/NetworkingPage.tsx"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { useMeetingsQuery, useNetworkingMatchesQuery, useNetworkingProfilesQuery } from '../../api/eventApi';\nimport { EntityListSection } from './EntityListSection';\n\ntype SimpleRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function NetworkingPage() {\n const profilesQuery = useNetworkingProfilesQuery({ limit: 100, offset: 0 });\n const matchesQuery = useNetworkingMatchesQuery({ limit: 100, offset: 0 });\n const meetingsQuery = useMeetingsQuery({ limit: 100, offset: 0 });\n\n const profiles = useMemo(() => profilesQuery.data?.networkingProfiles.items ?? [], [profilesQuery.data]);\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\">Networking</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Manage networking matches and meeting schedules from live backend data.\n </p>\n </section>\n\n <EntityListSection\n heading={profilesQuery.loading ? 'Loading networking profiles...' : `Profiles (${profiles.length})`}\n emptyLabel=\"No networking profiles available.\"\n rows={profiles.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Profile ${row.id}`,\n subtitle: [row.role, row.industry].filter(Boolean).join(' • '),\n status: row.visibility,\n }))}\n />\n\n <EntityListSection\n heading={matchesQuery.loading ? 'Loading networking matches...' : `Matches (${matches.length})`}\n emptyLabel=\"No networking matches available.\"\n rows={matches.map((row) => ({\n id: row.id,\n title: row.name ?? row.title ?? `Match ${row.id}`,\n subtitle: 'Suggested by networking engine',\n status: row.status ?? undefined,\n }))}\n />\n\n <EntityListSection\n heading={meetingsQuery.loading ? 'Loading meetings...' : `Meetings (${meetings.length})`}\n emptyLabel=\"No meetings scheduled.\"\n rows={meetings.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Meeting ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n </div>\n );\n}\n"],"mappings":";;;;;AAYA,SAAwB,IAAiB;CACvC,IAAM,IAAgB,EAA2B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrE,IAAe,EAA0B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACnE,IAAgB,EAAiB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAE3D,IAAW,QAAc,EAAc,MAAM,mBAAmB,SAAS,EAAE,EAAE,CAAC,EAAc,KAAK,CAAC,EAClG,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;KAAe,CAAA,EACpE,kBAAC,KAAD;KAAG,WAAU;eAAmC;KAE5C,CAAA,CACI;;GAEV,kBAAC,GAAD;IACE,SAAS,EAAc,UAAU,mCAAmC,aAAa,EAAS,OAAO;IACjG,YAAW;IACX,MAAM,EAAS,KAAK,OAAS;KAC3B,IAAI,EAAI;KACR,OAAO,EAAI,aAAa,YAAY,EAAI,eAAe,WAAW,EAAI;KACtE,UAAU,CAAC,EAAI,MAAM,EAAI,SAAS,CAAC,OAAO,QAAQ,CAAC,KAAK,MAAM;KAC9D,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAS,EAAa,UAAU,kCAAkC,YAAY,EAAQ,OAAO;IAC7F,YAAW;IACX,MAAM,EAAQ,KAAK,OAAS;KAC1B,IAAI,EAAI;KACR,OAAO,EAAI,QAAQ,EAAI,SAAS,SAAS,EAAI;KAC7C,UAAU;KACV,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAS,EAAc,UAAU,wBAAwB,aAAa,EAAS,OAAO;IACtF,YAAW;IACX,MAAM,EAAS,KAAK,OAAS;KAC3B,IAAI,EAAI;KACR,OAAO,EAAI,SAAS,EAAI,QAAQ,WAAW,EAAI;KAC/C,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;GACE"}
1
+ {"version":3,"file":"NetworkingPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/NetworkingPage.tsx"],"sourcesContent":["import { CalendarDays, Megaphone, Users } from 'lucide-react';\nimport { EmphasisPanel, GradientText, NextSteps, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\n\nimport { useMeetingsQuery, useNetworkingMatchesQuery, useNetworkingProfilesQuery } from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { EntityListSection } from './EntityListSection';\n\ntype SimpleRow = {\n id: string;\n name?: string;\n title?: string;\n status?: string;\n};\n\nexport default function NetworkingPage() {\n const { navigate } = useEventfullyManaged();\n const profilesQuery = useNetworkingProfilesQuery({ limit: 100, offset: 0 });\n const matchesQuery = useNetworkingMatchesQuery({ limit: 100, offset: 0 });\n const meetingsQuery = useMeetingsQuery({ limit: 100, offset: 0 });\n\n const profiles = useMemo(() => profilesQuery.data?.networkingProfiles.items ?? [], [profilesQuery.data]);\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 Networking turns attendees into connections. Profiles describe who each attendee is and what they are looking\n for, matches are the suggestions the engine makes between them, and meetings are the 1:1s they book. Use this\n page to spot strong matches and make sure scheduled meetings are running smoothly.\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>Networking</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Manage networking matches and meeting schedules from live backend data.\n </p>\n </EmphasisPanel>\n\n <EntityListSection\n heading={profilesQuery.loading ? 'Loading networking profiles...' : `Profiles (${profiles.length})`}\n emptyLabel=\"No networking profiles available.\"\n emptyIllustration=\"empty-people\"\n rows={profiles.map((row) => ({\n id: row.id,\n title: row.attendeeId ? `Attendee ${row.attendeeId}` : `Profile ${row.id}`,\n subtitle: [row.role, row.industry].filter(Boolean).join(' • '),\n status: row.visibility,\n }))}\n />\n\n <EntityListSection\n heading={matchesQuery.loading ? 'Loading networking matches...' : `Matches (${matches.length})`}\n emptyLabel=\"No networking matches available.\"\n emptyIllustration=\"empty-people\"\n rows={matches.map((row) => ({\n id: row.id,\n title: row.name ?? row.title ?? `Match ${row.id}`,\n subtitle: 'Suggested by networking engine',\n status: row.status ?? undefined,\n }))}\n />\n\n <EntityListSection\n heading={meetingsQuery.loading ? 'Loading meetings...' : `Meetings (${meetings.length})`}\n emptyLabel=\"No meetings scheduled.\"\n rows={meetings.map((row) => ({\n id: row.id,\n title: row.title ?? row.name ?? `Meeting ${row.id}`,\n status: row.status ?? undefined,\n }))}\n />\n\n <NextSteps\n storageKey=\"eventfullymanaged-networking\"\n title=\"Make networking land\"\n steps={[\n {\n id: 'grow-attendees',\n label: 'Bring in more attendees',\n description: 'More registered attendees means richer matches and meetings.',\n icon: <Users className=\"h-4 w-4\" />,\n onClick: () => navigate('/registration'),\n },\n {\n id: 'announce-networking',\n label: 'Announce networking sessions',\n description: 'Let attendees know how and when to connect.',\n icon: <Megaphone className=\"h-4 w-4\" />,\n onClick: () => navigate('/communication'),\n },\n {\n id: 'review-event',\n label: 'Review the event schedule',\n description: 'Make sure networking slots fit around your sessions.',\n icon: <CalendarDays className=\"h-4 w-4\" />,\n onClick: () => navigate('/events'),\n },\n ]}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;AAeA,SAAwB,IAAiB;CACvC,IAAM,EAAE,gBAAa,GAAsB,EACrC,IAAgB,EAA2B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACrE,IAAe,EAA0B;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EACnE,IAAgB,EAAiB;EAAE,OAAO;EAAK,QAAQ;EAAG,CAAC,EAE3D,IAAW,QAAc,EAAc,MAAM,mBAAmB,SAAS,EAAE,EAAE,CAAC,EAAc,KAAK,CAAC,EAClG,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,kTAIC,CAAA;GAEd,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,MAAD;IAAI,WAAU;cACZ,kBAAC,GAAD,EAAA,UAAc,cAAyB,CAAA;IACpC,CAAA,EACL,kBAAC,KAAD;IAAG,WAAU;cAAmC;IAE5C,CAAA,CACU,EAAA,CAAA;GAEhB,kBAAC,GAAD;IACE,SAAS,EAAc,UAAU,mCAAmC,aAAa,EAAS,OAAO;IACjG,YAAW;IACX,mBAAkB;IAClB,MAAM,EAAS,KAAK,OAAS;KAC3B,IAAI,EAAI;KACR,OAAO,EAAI,aAAa,YAAY,EAAI,eAAe,WAAW,EAAI;KACtE,UAAU,CAAC,EAAI,MAAM,EAAI,SAAS,CAAC,OAAO,QAAQ,CAAC,KAAK,MAAM;KAC9D,QAAQ,EAAI;KACb,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAS,EAAa,UAAU,kCAAkC,YAAY,EAAQ,OAAO;IAC7F,YAAW;IACX,mBAAkB;IAClB,MAAM,EAAQ,KAAK,OAAS;KAC1B,IAAI,EAAI;KACR,OAAO,EAAI,QAAQ,EAAI,SAAS,SAAS,EAAI;KAC7C,UAAU;KACV,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,SAAS,EAAc,UAAU,wBAAwB,aAAa,EAAS,OAAO;IACtF,YAAW;IACX,MAAM,EAAS,KAAK,OAAS;KAC3B,IAAI,EAAI;KACR,OAAO,EAAI,SAAS,EAAI,QAAQ,WAAW,EAAI;KAC/C,QAAQ,EAAI,UAAU,KAAA;KACvB,EAAE;IACH,CAAA;GAEF,kBAAC,GAAD;IACE,YAAW;IACX,OAAM;IACN,OAAO;KACL;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAO,WAAU,WAAY,CAAA;MACnC,eAAe,EAAS,gBAAgB;MACzC;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;MACvC,eAAe,EAAS,iBAAiB;MAC1C;KACD;MACE,IAAI;MACJ,OAAO;MACP,aAAa;MACb,MAAM,kBAAC,GAAD,EAAc,WAAU,WAAY,CAAA;MAC1C,eAAe,EAAS,UAAU;MACnC;KACF;IACD,CAAA;GACE"}