@burdenoff/microfe-eventfullymanaged 2026.625.1 → 2026.703.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/eventfullymanaged/api/eventApi.js +83 -38
  2. package/dist/eventfullymanaged/api/eventApi.js.map +1 -1
  3. package/dist/eventfullymanaged/components/ImageUploadField.js +98 -0
  4. package/dist/eventfullymanaged/components/ImageUploadField.js.map +1 -0
  5. package/dist/eventfullymanaged/lib/mutationResult.js +12 -0
  6. package/dist/eventfullymanaged/lib/mutationResult.js.map +1 -0
  7. package/dist/eventfullymanaged/lib/toast.js +36 -0
  8. package/dist/eventfullymanaged/lib/toast.js.map +1 -0
  9. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js +88 -47
  10. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js.map +1 -1
  11. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js +63 -51
  12. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js.map +1 -1
  13. package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js +137 -78
  14. package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.js.map +1 -1
  15. package/dist/eventfullymanaged/pages/modules/CommunicationPage.js +56 -45
  16. package/dist/eventfullymanaged/pages/modules/CommunicationPage.js.map +1 -1
  17. package/dist/eventfullymanaged/pages/modules/EventsPage.js +89 -52
  18. package/dist/eventfullymanaged/pages/modules/EventsPage.js.map +1 -1
  19. package/dist/eventfullymanaged/pages/modules/KioskPage.js +11 -10
  20. package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
  21. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +73 -24
  22. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
  23. package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js +135 -105
  24. package/dist/eventfullymanaged/pages/modules/OperationsHubPage.js.map +1 -1
  25. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +63 -33
  26. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
  27. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js +132 -77
  28. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js.map +1 -1
  29. package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js +54 -23
  30. package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.js.map +1 -1
  31. package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js +67 -37
  32. package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.js.map +1 -1
  33. package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js +81 -48
  34. package/dist/eventfullymanaged/pages/modules/WorkflowsPage.js.map +1 -1
  35. package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js +161 -133
  36. package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.js.map +1 -1
  37. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js +22 -21
  38. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js.map +1 -1
  39. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js +103 -61
  40. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js.map +1 -1
  41. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js +67 -38
  42. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js.map +1 -1
  43. package/dist/eventfullymanaged/pages/venues/VenueFormPage.js +156 -147
  44. package/dist/eventfullymanaged/pages/venues/VenueFormPage.js.map +1 -1
  45. package/dist/eventfullymanaged/pages/venues/VenueListPage.js +23 -22
  46. package/dist/eventfullymanaged/pages/venues/VenueListPage.js.map +1 -1
  47. package/dist/node_modules/@apollo/client/react/context/ApolloContext.js.map +1 -1
  48. package/dist/node_modules/@apollo/client/react/hooks/internal/useDeepMemo.js.map +1 -1
  49. package/dist/node_modules/@apollo/client/react/hooks/internal/useIsomorphicLayoutEffect.js.map +1 -1
  50. package/dist/node_modules/@apollo/client/react/hooks/internal/wrapHook.js.map +1 -1
  51. package/dist/node_modules/@apollo/client/react/hooks/useApolloClient.js.map +1 -1
  52. package/dist/node_modules/@apollo/client/react/hooks/useMutation.js.map +1 -1
  53. package/dist/node_modules/@apollo/client/react/hooks/useQuery.js.map +1 -1
  54. package/dist/node_modules/@apollo/client/react/hooks/useSyncExternalStore.js.map +1 -1
  55. package/dist/node_modules/sonner/dist/index.js +163 -0
  56. package/dist/node_modules/sonner/dist/index.js.map +1 -0
  57. package/package.json +2 -2
@@ -1,89 +1,126 @@
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";
7
- import { Button as u, EmphasisPanel as d, GradientText as f, Input as p } from "@burdenoff/fe-libs/ui";
1
+ import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
2
+ import { notify as t } from "../../lib/toast.js";
3
+ import { useCreateEventMutation as n, useEventsQuery as r, useTicketTypesQuery as i } from "../../api/eventApi.js";
4
+ import { describeError as a, mutationSucceeded as o } from "../../lib/mutationResult.js";
5
+ import { EntityListSection as s } from "./EntityListSection.js";
6
+ import { useMemo as c, useState as l } from "react";
7
+ import { jsx as u, jsxs as d } from "react/jsx-runtime";
8
+ import { CalendarPlus as f, Ticket as p, Users as m } from "lucide-react";
9
+ import { useI18n as h } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
10
+ import { Button as g, EmphasisPanel as _, GradientText as v, Input as y, NextSteps as b, PagePurpose as x } from "@burdenoff/fe-libs/ui";
8
11
  //#region src/eventfullymanaged/pages/modules/EventsPage.tsx
9
- function m() {
10
- let { t: m } = l(), h = (e, t) => {
11
- let n = m(e);
12
+ function S() {
13
+ let { t: S } = h(), C = (e, t) => {
14
+ let n = S(e);
12
15
  return n === e ? t : n;
13
- }, { data: g, loading: _ } = t({
16
+ }, { navigate: w } = e(), { data: T, loading: E } = r({
14
17
  limit: 100,
15
18
  offset: 0
16
- }), v = n({
19
+ }), D = i({
17
20
  limit: 100,
18
21
  offset: 0
19
- }), [y, { loading: b }] = e(), [x, S] = a(""), C = i(() => g?.events.items ?? [], [g]), w = i(() => v.data?.ticketTypes.items ?? [], [v.data]);
20
- return /* @__PURE__ */ s("div", {
22
+ }), [O, { loading: k }] = n(), [A, j] = l(""), M = c(() => T?.events.items ?? [], [T]), N = c(() => D.data?.ticketTypes.items ?? [], [D.data]);
23
+ return /* @__PURE__ */ d("div", {
21
24
  className: "space-y-6 p-6",
22
25
  children: [
23
- /* @__PURE__ */ s(d, { children: [
24
- /* @__PURE__ */ o("h1", {
26
+ /* @__PURE__ */ u(x, { children: C("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.") }),
27
+ /* @__PURE__ */ d(_, { children: [
28
+ /* @__PURE__ */ u("h1", {
25
29
  className: "text-2xl font-bold text-text-primary",
26
- children: /* @__PURE__ */ o(f, { children: h("eventfullymanaged.events.title", "Events") })
30
+ children: /* @__PURE__ */ u(v, { children: C("eventfullymanaged.events.title", "Events") })
27
31
  }),
28
- /* @__PURE__ */ o("p", {
32
+ /* @__PURE__ */ u("p", {
29
33
  className: "mt-1 text-sm text-text-secondary",
30
- children: h("eventfullymanaged.events.description", "Create and manage live events from the workspace graph.")
34
+ children: C("eventfullymanaged.events.description", "Create and manage live events from the workspace graph.")
31
35
  }),
32
- /* @__PURE__ */ s("div", {
36
+ /* @__PURE__ */ d("div", {
33
37
  className: "mt-4 flex flex-col gap-3 sm:flex-row",
34
- children: [/* @__PURE__ */ o(p, {
35
- value: x,
36
- onChange: (e) => S(e.target.value),
37
- placeholder: h("eventfullymanaged.events.namePlaceholder", "Annual Innovation Summit"),
38
- "aria-label": h("eventfullymanaged.events.namePlaceholder", "Annual Innovation Summit"),
38
+ children: [/* @__PURE__ */ u(y, {
39
+ value: A,
40
+ onChange: (e) => j(e.target.value),
41
+ placeholder: C("eventfullymanaged.events.namePlaceholder", "Annual Innovation Summit"),
42
+ "aria-label": C("eventfullymanaged.events.namePlaceholder", "Annual Innovation Summit"),
39
43
  className: "flex-1"
40
- }), /* @__PURE__ */ s(u, {
44
+ }), /* @__PURE__ */ d(g, {
41
45
  type: "button",
42
- disabled: b,
46
+ disabled: k,
43
47
  onClick: async () => {
44
- if (!x.trim()) return;
45
- let e = /* @__PURE__ */ new Date(), t = new Date(e.getTime() + 3600 * 1e3);
46
- await y({ variables: { input: {
47
- name: x.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
- } } }), S("");
48
+ if (!A.trim()) return;
49
+ let e = /* @__PURE__ */ new Date(), n = new Date(e.getTime() + 3600 * 1e3);
50
+ try {
51
+ let r = await O({ variables: { input: {
52
+ name: A.trim(),
53
+ description: "",
54
+ type: "IN_PERSON",
55
+ status: "DRAFT",
56
+ timezone: "Asia/Kolkata",
57
+ startAt: e.toISOString(),
58
+ endAt: n.toISOString(),
59
+ visibility: "private",
60
+ capacity: 100,
61
+ metadata: {}
62
+ } } });
63
+ if (!o(r, r.data?.createEvent?.id, C("eventfullymanaged.events.errors.create", "Could not create event"))) return;
64
+ j(""), t.success(C("eventfullymanaged.events.created", "Event created"));
65
+ } catch (e) {
66
+ t.error(C("eventfullymanaged.events.errors.create", "Could not create event"), a(e));
67
+ }
58
68
  },
59
- children: [/* @__PURE__ */ o(c, { className: "h-4 w-4" }), b ? h("eventfullymanaged.events.actions.creating", "Creating...") : h("eventfullymanaged.events.actions.create", "Create Event")]
69
+ children: [/* @__PURE__ */ u(f, { className: "h-4 w-4" }), k ? C("eventfullymanaged.events.actions.creating", "Creating...") : C("eventfullymanaged.events.actions.create", "Create Event")]
60
70
  })]
61
71
  })
62
72
  ] }),
63
- /* @__PURE__ */ o(r, {
64
- heading: _ ? h("eventfullymanaged.events.list.loading", "Loading events...") : `${h("eventfullymanaged.events.list.heading", "Events")} (${C.length})`,
65
- emptyLabel: h("eventfullymanaged.events.list.empty", "No events found."),
66
- rows: C.map((e) => ({
73
+ /* @__PURE__ */ u(s, {
74
+ heading: E ? C("eventfullymanaged.events.list.loading", "Loading events...") : `${C("eventfullymanaged.events.list.heading", "Events")} (${M.length})`,
75
+ emptyLabel: C("eventfullymanaged.events.list.empty", "No events found."),
76
+ rows: M.map((e) => ({
67
77
  id: e.id,
68
78
  title: e.name,
69
79
  subtitle: [e.type, e.startAt ? new Date(e.startAt).toLocaleString() : void 0].filter(Boolean).join(" • "),
70
80
  status: e.status
71
81
  }))
72
82
  }),
73
- /* @__PURE__ */ o(r, {
74
- heading: v.loading ? h("eventfullymanaged.events.ticketTypes.loading", "Loading ticket types...") : `${h("eventfullymanaged.events.ticketTypes.heading", "Ticket Types")} (${w.length})`,
75
- emptyLabel: h("eventfullymanaged.events.ticketTypes.empty", "No ticket types configured."),
76
- rows: w.map((e) => ({
83
+ /* @__PURE__ */ u(s, {
84
+ heading: D.loading ? C("eventfullymanaged.events.ticketTypes.loading", "Loading ticket types...") : `${C("eventfullymanaged.events.ticketTypes.heading", "Ticket Types")} (${N.length})`,
85
+ emptyLabel: C("eventfullymanaged.events.ticketTypes.empty", "No ticket types configured."),
86
+ rows: N.map((e) => ({
77
87
  id: e.id,
78
88
  title: e.name,
79
- subtitle: `${e.price} ${e.currency} • ${h("eventfullymanaged.events.ticketTypes.soldPrefix", "Sold")} ${e.soldCount}`,
89
+ subtitle: `${e.price} ${e.currency} • ${C("eventfullymanaged.events.ticketTypes.soldPrefix", "Sold")} ${e.soldCount}`,
80
90
  status: e.isActive ? "active" : "inactive"
81
91
  }))
92
+ }),
93
+ /* @__PURE__ */ u(b, {
94
+ storageKey: "eventfullymanaged-events",
95
+ title: C("eventfullymanaged.events.nextSteps.title", "Finish setting up your event"),
96
+ steps: [
97
+ {
98
+ id: "configure-registration",
99
+ label: C("eventfullymanaged.events.nextSteps.registration", "Configure registration & tickets"),
100
+ description: C("eventfullymanaged.events.nextSteps.registrationDesc", "Define ticket types and open sign-ups for attendees."),
101
+ icon: /* @__PURE__ */ u(p, { className: "h-4 w-4" }),
102
+ onClick: () => w("/registration")
103
+ },
104
+ {
105
+ id: "plan-networking",
106
+ label: C("eventfullymanaged.events.nextSteps.networking", "Plan networking & sessions"),
107
+ description: C("eventfullymanaged.events.nextSteps.networkingDesc", "Set up attendee matchmaking and meeting schedules."),
108
+ icon: /* @__PURE__ */ u(m, { className: "h-4 w-4" }),
109
+ onClick: () => w("/networking")
110
+ },
111
+ {
112
+ id: "announce",
113
+ label: C("eventfullymanaged.events.nextSteps.announce", "Announce to attendees"),
114
+ description: C("eventfullymanaged.events.nextSteps.announceDesc", "Send announcements and run communication campaigns."),
115
+ icon: /* @__PURE__ */ u(f, { className: "h-4 w-4" }),
116
+ onClick: () => w("/communication")
117
+ }
118
+ ]
82
119
  })
83
120
  ]
84
121
  });
85
122
  }
86
123
  //#endregion
87
- export { m as default };
124
+ export { S as default };
88
125
 
89
126
  //# 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 { Button, EmphasisPanel, GradientText, Input } from '@burdenoff/fe-libs/ui';\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 <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 </div>\n );\n}\n"],"mappings":";;;;;;;;AAiBA,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,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,SAxCjC,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;;gBAoBL,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;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 { describeError, mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\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 try {\n const response = 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 if (\n !mutationSucceeded(\n response,\n response.data?.createEvent?.id,\n t('eventfullymanaged.events.errors.create', 'Could not create event')\n )\n ) {\n return;\n }\n setName('');\n notify.success(t('eventfullymanaged.events.created', 'Event created'));\n } catch (error) {\n notify.error(t('eventfullymanaged.events.errors.create', 'Could not create event'), describeError(error));\n }\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":"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"}
@@ -2,19 +2,20 @@ 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 } from "@burdenoff/fe-libs/ui";
5
+ import { EmphasisPanel as o, GradientText as s, PagePurpose as c } from "@burdenoff/fe-libs/ui";
6
6
  //#region src/eventfullymanaged/pages/modules/KioskPage.tsx
7
- function c() {
8
- let c = t({
7
+ function l() {
8
+ let l = t({
9
9
  limit: 100,
10
10
  offset: 0
11
- }), l = e({
11
+ }), u = e({
12
12
  limit: 100,
13
13
  offset: 0
14
- }), u = r(() => c.data?.checkInStations.items ?? [], [c.data]), d = r(() => l.data?.checkInRecords.items ?? [], [l.data]);
14
+ }), d = r(() => l.data?.checkInStations.items ?? [], [l.data]), f = r(() => u.data?.checkInRecords.items ?? [], [u.data]);
15
15
  return /* @__PURE__ */ a("div", {
16
16
  className: "space-y-6 p-6",
17
17
  children: [
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." }),
18
19
  /* @__PURE__ */ a(o, { children: [/* @__PURE__ */ a("h1", {
19
20
  className: "text-2xl font-bold text-text-primary",
20
21
  children: [/* @__PURE__ */ i(s, { children: "Kiosk" }), " & Check-In"]
@@ -23,18 +24,18 @@ function c() {
23
24
  children: "View configured check-in stations and station status."
24
25
  })] }),
25
26
  /* @__PURE__ */ i(n, {
26
- heading: c.loading ? "Loading check-in stations..." : `Stations (${u.length})`,
27
+ heading: l.loading ? "Loading check-in stations..." : `Stations (${d.length})`,
27
28
  emptyLabel: "No check-in stations configured yet.",
28
- rows: u.map((e) => ({
29
+ rows: d.map((e) => ({
29
30
  id: e.id,
30
31
  title: e.name ?? e.title ?? `Station ${e.id}`,
31
32
  status: e.status ?? void 0
32
33
  }))
33
34
  }),
34
35
  /* @__PURE__ */ i(n, {
35
- heading: l.loading ? "Loading check-in records..." : `Check-In Records (${d.length})`,
36
+ heading: u.loading ? "Loading check-in records..." : `Check-In Records (${f.length})`,
36
37
  emptyLabel: "No check-in records found.",
37
- rows: d.map((e) => ({
38
+ rows: f.map((e) => ({
38
39
  id: e.id,
39
40
  title: e.attendeeId ? `Attendee ${e.attendeeId}` : `Record ${e.id}`,
40
41
  subtitle: `${e.method} • ${e.direction}`,
@@ -45,6 +46,6 @@ function c() {
45
46
  });
46
47
  }
47
48
  //#endregion
48
- export { c as default };
49
+ export { l as default };
49
50
 
50
51
  //# sourceMappingURL=KioskPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"KioskPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/KioskPage.tsx"],"sourcesContent":["import { EmphasisPanel, GradientText } 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 <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,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
+ {"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,114 @@
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";
5
- import { EmphasisPanel as s, GradientText as c } from "@burdenoff/fe-libs/ui";
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";
8
+ import { ContextConversationWidget as h } from "@burdenoff/fe-libs/shared";
9
+ import { useRegisterPageConversationContext as g } from "@burdenoff/fe-libs/shared/providers/shell";
6
10
  //#region src/eventfullymanaged/pages/modules/NetworkingPage.tsx
7
- function l() {
8
- let l = n({
11
+ function _() {
12
+ return g({
13
+ entityType: "EVENTFULLYMANAGED_NETWORKING_LOUNGE",
14
+ entityId: "general",
15
+ contextTitle: "Networking Lounge"
16
+ }), /* @__PURE__ */ o(h, { widgetKey: "networking-lounge" });
17
+ }
18
+ function v() {
19
+ let { navigate: h } = e(), g = r({
9
20
  limit: 100,
10
21
  offset: 0
11
- }), u = t({
22
+ }), v = n({
12
23
  limit: 100,
13
24
  offset: 0
14
- }), d = e({
25
+ }), y = t({
15
26
  limit: 100,
16
27
  offset: 0
17
- }), f = i(() => l.data?.networkingProfiles.items ?? [], [l.data]), p = i(() => u.data?.networkingMatches.items ?? [], [u.data]), m = i(() => d.data?.meetings.items ?? [], [d.data]);
18
- return /* @__PURE__ */ o("div", {
28
+ }), b = a(() => g.data?.networkingProfiles.items ?? [], [g.data]), x = a(() => v.data?.networkingMatches.items ?? [], [v.data]), S = a(() => y.data?.meetings.items ?? [], [y.data]);
29
+ return /* @__PURE__ */ s("div", {
19
30
  className: "space-y-6 p-6",
20
31
  children: [
21
- /* @__PURE__ */ o(s, { children: [/* @__PURE__ */ a("h1", {
32
+ /* @__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." }),
33
+ /* @__PURE__ */ s(d, { children: [/* @__PURE__ */ o("h1", {
22
34
  className: "text-2xl font-bold text-text-primary",
23
- children: /* @__PURE__ */ a(c, { children: "Networking" })
24
- }), /* @__PURE__ */ a("p", {
35
+ children: /* @__PURE__ */ o(f, { children: "Networking" })
36
+ }), /* @__PURE__ */ o("p", {
25
37
  className: "mt-1 text-sm text-text-secondary",
26
38
  children: "Manage networking matches and meeting schedules from live backend data."
27
39
  })] }),
28
- /* @__PURE__ */ a(r, {
29
- heading: l.loading ? "Loading networking profiles..." : `Profiles (${f.length})`,
40
+ /* @__PURE__ */ o(i, {
41
+ heading: g.loading ? "Loading networking profiles..." : `Profiles (${b.length})`,
30
42
  emptyLabel: "No networking profiles available.",
31
43
  emptyIllustration: "empty-people",
32
- rows: f.map((e) => ({
44
+ rows: b.map((e) => ({
33
45
  id: e.id,
34
46
  title: e.attendeeId ? `Attendee ${e.attendeeId}` : `Profile ${e.id}`,
35
47
  subtitle: [e.role, e.industry].filter(Boolean).join(" • "),
36
48
  status: e.visibility
37
49
  }))
38
50
  }),
39
- /* @__PURE__ */ a(r, {
40
- heading: u.loading ? "Loading networking matches..." : `Matches (${p.length})`,
51
+ /* @__PURE__ */ o(i, {
52
+ heading: v.loading ? "Loading networking matches..." : `Matches (${x.length})`,
41
53
  emptyLabel: "No networking matches available.",
42
54
  emptyIllustration: "empty-people",
43
- rows: p.map((e) => ({
55
+ rows: x.map((e) => ({
44
56
  id: e.id,
45
57
  title: e.name ?? e.title ?? `Match ${e.id}`,
46
58
  subtitle: "Suggested by networking engine",
47
59
  status: e.status ?? void 0
48
60
  }))
49
61
  }),
50
- /* @__PURE__ */ a(r, {
51
- heading: d.loading ? "Loading meetings..." : `Meetings (${m.length})`,
62
+ /* @__PURE__ */ o(i, {
63
+ heading: y.loading ? "Loading meetings..." : `Meetings (${S.length})`,
52
64
  emptyLabel: "No meetings scheduled.",
53
- rows: m.map((e) => ({
65
+ rows: S.map((e) => ({
54
66
  id: e.id,
55
67
  title: e.title ?? e.name ?? `Meeting ${e.id}`,
56
68
  status: e.status ?? void 0
57
69
  }))
70
+ }),
71
+ /* @__PURE__ */ s("div", {
72
+ className: "space-y-3",
73
+ children: [/* @__PURE__ */ s("div", { children: [/* @__PURE__ */ o("h2", {
74
+ className: "text-lg font-semibold text-text-primary",
75
+ children: "Networking chat"
76
+ }), /* @__PURE__ */ o("p", {
77
+ className: "mt-1 text-sm text-text-secondary",
78
+ children: "A shared space for attendees and organizers to connect, backed by the conversations service."
79
+ })] }), /* @__PURE__ */ o(_, {})]
80
+ }),
81
+ /* @__PURE__ */ o(p, {
82
+ storageKey: "eventfullymanaged-networking",
83
+ title: "Make networking land",
84
+ steps: [
85
+ {
86
+ id: "grow-attendees",
87
+ label: "Bring in more attendees",
88
+ description: "More registered attendees means richer matches and meetings.",
89
+ icon: /* @__PURE__ */ o(u, { className: "h-4 w-4" }),
90
+ onClick: () => h("/registration")
91
+ },
92
+ {
93
+ id: "announce-networking",
94
+ label: "Announce networking sessions",
95
+ description: "Let attendees know how and when to connect.",
96
+ icon: /* @__PURE__ */ o(l, { className: "h-4 w-4" }),
97
+ onClick: () => h("/communication")
98
+ },
99
+ {
100
+ id: "review-event",
101
+ label: "Review the event schedule",
102
+ description: "Make sure networking slots fit around your sessions.",
103
+ icon: /* @__PURE__ */ o(c, { className: "h-4 w-4" }),
104
+ onClick: () => h("/events")
105
+ }
106
+ ]
58
107
  })
59
108
  ]
60
109
  });
61
110
  }
62
111
  //#endregion
63
- export { l as default };
112
+ export { v as default };
64
113
 
65
114
  //# sourceMappingURL=NetworkingPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkingPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/NetworkingPage.tsx"],"sourcesContent":["import { EmphasisPanel, GradientText } from '@burdenoff/fe-libs/ui';\nimport { 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 <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 </div>\n );\n}\n"],"mappings":";;;;;;AAaA,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,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;GACE"}
1
+ {"version":3,"file":"NetworkingPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/NetworkingPage.tsx"],"sourcesContent":["import { CalendarDays, Megaphone, Users } from 'lucide-react';\nimport { ContextConversationWidget } from '@burdenoff/fe-libs/shared';\nimport { useRegisterPageConversationContext } from '@burdenoff/fe-libs/shared/providers/shell';\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\n/**\n * Shared networking lounge chat, backed by wspace-conversations-svc. Scoped by a\n * stable networking entity so every organizer/attendee on this workspace lands in\n * the same thread.\n */\nfunction NetworkingLounge() {\n useRegisterPageConversationContext({\n entityType: 'EVENTFULLYMANAGED_NETWORKING_LOUNGE',\n entityId: 'general',\n contextTitle: 'Networking Lounge',\n });\n return <ContextConversationWidget widgetKey=\"networking-lounge\" />;\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 <div className=\"space-y-3\">\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">Networking chat</h2>\n <p className=\"mt-1 text-sm text-text-secondary\">\n A shared space for attendees and organizers to connect, backed by the conversations service.\n </p>\n </div>\n <NetworkingLounge />\n </div>\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":"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"}