@burdenoff/microfe-eventfullymanaged 2026.704.7 → 2026.710.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 (152) hide show
  1. package/dist/dev/main.d.ts +2 -0
  2. package/dist/dev/main.d.ts.map +1 -0
  3. package/dist/eventfullymanaged/EventfullyManagedRoot.d.ts +4 -0
  4. package/dist/eventfullymanaged/EventfullyManagedRoot.d.ts.map +1 -0
  5. package/dist/eventfullymanaged/EventfullyManagedRoutes.d.ts +2 -0
  6. package/dist/eventfullymanaged/EventfullyManagedRoutes.d.ts.map +1 -0
  7. package/dist/eventfullymanaged/api/eventApi.d.ts +1185 -0
  8. package/dist/eventfullymanaged/api/eventApi.d.ts.map +1 -0
  9. package/dist/eventfullymanaged/components/ActionMenu.d.ts +45 -0
  10. package/dist/eventfullymanaged/components/ActionMenu.d.ts.map +1 -0
  11. package/dist/eventfullymanaged/components/EntityFormShell.d.ts +27 -0
  12. package/dist/eventfullymanaged/components/EntityFormShell.d.ts.map +1 -0
  13. package/dist/eventfullymanaged/components/EntityTagsField.d.ts +19 -0
  14. package/dist/eventfullymanaged/components/EntityTagsField.d.ts.map +1 -0
  15. package/dist/eventfullymanaged/components/EventCharts.d.ts +44 -0
  16. package/dist/eventfullymanaged/components/EventCharts.d.ts.map +1 -0
  17. package/dist/eventfullymanaged/components/EventCharts.js.map +1 -1
  18. package/dist/eventfullymanaged/components/ImageUploadField.d.ts +24 -0
  19. package/dist/eventfullymanaged/components/ImageUploadField.d.ts.map +1 -0
  20. package/dist/eventfullymanaged/components/PageLayout.d.ts +14 -0
  21. package/dist/eventfullymanaged/components/PageLayout.d.ts.map +1 -0
  22. package/dist/eventfullymanaged/components/Pagination.d.ts +41 -0
  23. package/dist/eventfullymanaged/components/Pagination.d.ts.map +1 -0
  24. package/dist/eventfullymanaged/components/SafeLink.d.ts +30 -0
  25. package/dist/eventfullymanaged/components/SafeLink.d.ts.map +1 -0
  26. package/dist/eventfullymanaged/components/index.d.ts +13 -0
  27. package/dist/eventfullymanaged/components/index.d.ts.map +1 -0
  28. package/dist/eventfullymanaged/context/EventfullyManagedContext.d.ts +25 -0
  29. package/dist/eventfullymanaged/context/EventfullyManagedContext.d.ts.map +1 -0
  30. package/dist/eventfullymanaged/hooks/index.d.ts +3 -0
  31. package/dist/eventfullymanaged/hooks/index.d.ts.map +1 -0
  32. package/dist/eventfullymanaged/index.d.ts +27 -0
  33. package/dist/eventfullymanaged/index.d.ts.map +1 -0
  34. package/dist/eventfullymanaged/lib/format.d.ts +18 -0
  35. package/dist/eventfullymanaged/lib/format.d.ts.map +1 -0
  36. package/dist/eventfullymanaged/lib/mutationResult.d.ts +23 -0
  37. package/dist/eventfullymanaged/lib/mutationResult.d.ts.map +1 -0
  38. package/dist/eventfullymanaged/lib/toast.d.ts +22 -0
  39. package/dist/eventfullymanaged/lib/toast.d.ts.map +1 -0
  40. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.d.ts +2 -0
  41. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.d.ts.map +1 -0
  42. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js.map +1 -1
  43. package/dist/eventfullymanaged/pages/events/EventDetailPage.d.ts +2 -0
  44. package/dist/eventfullymanaged/pages/events/EventDetailPage.d.ts.map +1 -0
  45. package/dist/eventfullymanaged/pages/events/EventDetailPage.js +1 -2
  46. package/dist/eventfullymanaged/pages/events/EventDetailPage.js.map +1 -1
  47. package/dist/eventfullymanaged/pages/events/EventFormPage.d.ts +2 -0
  48. package/dist/eventfullymanaged/pages/events/EventFormPage.d.ts.map +1 -0
  49. package/dist/eventfullymanaged/pages/events/SessionFormPage.d.ts +2 -0
  50. package/dist/eventfullymanaged/pages/events/SessionFormPage.d.ts.map +1 -0
  51. package/dist/eventfullymanaged/pages/events/TicketTypeFormPage.d.ts +2 -0
  52. package/dist/eventfullymanaged/pages/events/TicketTypeFormPage.d.ts.map +1 -0
  53. package/dist/eventfullymanaged/pages/events/eventFormUtils.d.ts +40 -0
  54. package/dist/eventfullymanaged/pages/events/eventFormUtils.d.ts.map +1 -0
  55. package/dist/eventfullymanaged/pages/exhibitors/ExhibitorFormPage.d.ts +2 -0
  56. package/dist/eventfullymanaged/pages/exhibitors/ExhibitorFormPage.d.ts.map +1 -0
  57. package/dist/eventfullymanaged/pages/exhibitors/ExhibitorsPage.d.ts +2 -0
  58. package/dist/eventfullymanaged/pages/exhibitors/ExhibitorsPage.d.ts.map +1 -0
  59. package/dist/eventfullymanaged/pages/leads/LeadCaptureDialog.d.ts +23 -0
  60. package/dist/eventfullymanaged/pages/leads/LeadCaptureDialog.d.ts.map +1 -0
  61. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.d.ts +2 -0
  62. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.d.ts.map +1 -0
  63. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js.map +1 -1
  64. package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.d.ts +2 -0
  65. package/dist/eventfullymanaged/pages/modules/AttendeeProfilePage.d.ts.map +1 -0
  66. package/dist/eventfullymanaged/pages/modules/CommunicationPage.d.ts +2 -0
  67. package/dist/eventfullymanaged/pages/modules/CommunicationPage.d.ts.map +1 -0
  68. package/dist/eventfullymanaged/pages/modules/CommunicationPage.js.map +1 -1
  69. package/dist/eventfullymanaged/pages/modules/EntityListSection.d.ts +16 -0
  70. package/dist/eventfullymanaged/pages/modules/EntityListSection.d.ts.map +1 -0
  71. package/dist/eventfullymanaged/pages/modules/EventsPage.d.ts +2 -0
  72. package/dist/eventfullymanaged/pages/modules/EventsPage.d.ts.map +1 -0
  73. package/dist/eventfullymanaged/pages/modules/EventsPage.js +223 -118
  74. package/dist/eventfullymanaged/pages/modules/EventsPage.js.map +1 -1
  75. package/dist/eventfullymanaged/pages/modules/KioskPage.d.ts +19 -0
  76. package/dist/eventfullymanaged/pages/modules/KioskPage.d.ts.map +1 -0
  77. package/dist/eventfullymanaged/pages/modules/NetworkingPage.d.ts +2 -0
  78. package/dist/eventfullymanaged/pages/modules/NetworkingPage.d.ts.map +1 -0
  79. package/dist/eventfullymanaged/pages/modules/OperationsHubPage.d.ts +9 -0
  80. package/dist/eventfullymanaged/pages/modules/OperationsHubPage.d.ts.map +1 -0
  81. package/dist/eventfullymanaged/pages/modules/RegistrationPage.d.ts +2 -0
  82. package/dist/eventfullymanaged/pages/modules/RegistrationPage.d.ts.map +1 -0
  83. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
  84. package/dist/eventfullymanaged/pages/modules/RoadmapPanel.d.ts +24 -0
  85. package/dist/eventfullymanaged/pages/modules/RoadmapPanel.d.ts.map +1 -0
  86. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.d.ts +2 -0
  87. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.d.ts.map +1 -0
  88. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js.map +1 -1
  89. package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.d.ts +2 -0
  90. package/dist/eventfullymanaged/pages/modules/SponsorLeadsPage.d.ts.map +1 -0
  91. package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.d.ts +2 -0
  92. package/dist/eventfullymanaged/pages/modules/VenueResourcesPage.d.ts.map +1 -0
  93. package/dist/eventfullymanaged/pages/modules/WorkflowsPage.d.ts +2 -0
  94. package/dist/eventfullymanaged/pages/modules/WorkflowsPage.d.ts.map +1 -0
  95. package/dist/eventfullymanaged/pages/networking/MeetingFormPage.d.ts +2 -0
  96. package/dist/eventfullymanaged/pages/networking/MeetingFormPage.d.ts.map +1 -0
  97. package/dist/eventfullymanaged/pages/networking/NetworkingProfileFormPage.d.ts +2 -0
  98. package/dist/eventfullymanaged/pages/networking/NetworkingProfileFormPage.d.ts.map +1 -0
  99. package/dist/eventfullymanaged/pages/registration/AttendeeFormPage.d.ts +2 -0
  100. package/dist/eventfullymanaged/pages/registration/AttendeeFormPage.d.ts.map +1 -0
  101. package/dist/eventfullymanaged/pages/registration/AttendeeFormPage.js.map +1 -1
  102. package/dist/eventfullymanaged/pages/registration/PromoCodeFormPage.d.ts +2 -0
  103. package/dist/eventfullymanaged/pages/registration/PromoCodeFormPage.d.ts.map +1 -0
  104. package/dist/eventfullymanaged/pages/registration/RegisterAttendeePage.d.ts +2 -0
  105. package/dist/eventfullymanaged/pages/registration/RegisterAttendeePage.d.ts.map +1 -0
  106. package/dist/eventfullymanaged/pages/registration/RegisterAttendeePage.js.map +1 -1
  107. package/dist/eventfullymanaged/pages/speakers/SpeakerFormPage.d.ts +2 -0
  108. package/dist/eventfullymanaged/pages/speakers/SpeakerFormPage.d.ts.map +1 -0
  109. package/dist/eventfullymanaged/pages/speakers/SpeakersPage.d.ts +2 -0
  110. package/dist/eventfullymanaged/pages/speakers/SpeakersPage.d.ts.map +1 -0
  111. package/dist/eventfullymanaged/pages/speakers/SpeakersPage.js.map +1 -1
  112. package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.d.ts +2 -0
  113. package/dist/eventfullymanaged/pages/sponsors/SponsorFormPage.d.ts.map +1 -0
  114. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.d.ts +2 -0
  115. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.d.ts.map +1 -0
  116. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js.map +1 -1
  117. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.d.ts +2 -0
  118. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.d.ts.map +1 -0
  119. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js.map +1 -1
  120. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.d.ts +2 -0
  121. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.d.ts.map +1 -0
  122. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js.map +1 -1
  123. package/dist/eventfullymanaged/pages/venues/VenueFormPage.d.ts +2 -0
  124. package/dist/eventfullymanaged/pages/venues/VenueFormPage.d.ts.map +1 -0
  125. package/dist/eventfullymanaged/pages/venues/VenueListPage.d.ts +2 -0
  126. package/dist/eventfullymanaged/pages/venues/VenueListPage.d.ts.map +1 -0
  127. package/dist/eventfullymanaged/store/eventfullyManagedStore.d.ts +47 -0
  128. package/dist/eventfullymanaged/store/eventfullyManagedStore.d.ts.map +1 -0
  129. package/dist/eventfullymanaged/types/index.d.ts +3649 -0
  130. package/dist/eventfullymanaged/types/index.d.ts.map +1 -0
  131. package/dist/eventfullymanaged/utils/cn.d.ts +2 -0
  132. package/dist/eventfullymanaged/utils/cn.d.ts.map +1 -0
  133. package/dist/eventfullymanaged/utils/constants.d.ts +3 -0
  134. package/dist/eventfullymanaged/utils/constants.d.ts.map +1 -0
  135. package/dist/eventfullymanaged/utils/navigation.d.ts +2 -0
  136. package/dist/eventfullymanaged/utils/navigation.d.ts.map +1 -0
  137. package/dist/generated/global-operations.d.ts +2 -0
  138. package/dist/generated/global-operations.d.ts.map +1 -0
  139. package/dist/generated/global-types.d.ts +23527 -0
  140. package/dist/generated/global-types.d.ts.map +1 -0
  141. package/dist/generated/wspace-operations.d.ts +2 -0
  142. package/dist/generated/wspace-operations.d.ts.map +1 -0
  143. package/dist/generated/wspace-types.d.ts +57851 -0
  144. package/dist/generated/wspace-types.d.ts.map +1 -0
  145. package/dist/index.d.ts +9 -0
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.js +2 -1
  148. package/dist/services/createSandboxAssistantTransport.d.ts +33 -0
  149. package/dist/services/createSandboxAssistantTransport.d.ts.map +1 -0
  150. package/dist/services/createSandboxAssistantTransport.js +19 -0
  151. package/dist/services/createSandboxAssistantTransport.js.map +1 -0
  152. package/package.json +7 -3
@@ -1,17 +1,17 @@
1
1
  import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
2
2
  import { gql as t } from "../../../node_modules/graphql-tag/lib/index.js";
3
3
  import { useQuery as n } from "../../../node_modules/@apollo/client/react/hooks/useQuery.js";
4
- import { useEventsQuery as r, useVenuesQuery as i } from "../../api/eventApi.js";
5
- import { formatDateTime as a } from "../events/eventFormUtils.js";
6
- import { ActionMenu as o } from "../../components/ActionMenu.js";
7
- import { Pagination as s, usePagination as c } from "../../components/Pagination.js";
8
- import { useMemo as l, useState as u } from "react";
9
- import { jsx as d, jsxs as f } from "react/jsx-runtime";
10
- import { CalendarClock as p, CalendarPlus as m, MapPin as h, Search as g, Ticket as _, UserCheck as v, Users as y } from "lucide-react";
11
- import { useI18n as b } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
12
- import { Badge as x, Button as S, EmphasisPanel as C, GlassCard as w, GradientText as T, IllustratedEmptyState as E, Input as D, NextSteps as O, PagePurpose as k, Skeleton as A } from "@burdenoff/fe-libs/ui";
4
+ import { useEventsQuery as r, useSponsorsQuery as i, useVenuesQuery as a } from "../../api/eventApi.js";
5
+ import { formatDateTime as o } from "../events/eventFormUtils.js";
6
+ import { ActionMenu as s } from "../../components/ActionMenu.js";
7
+ import { Pagination as c, usePagination as l } from "../../components/Pagination.js";
8
+ import { useMemo as u, useState as d } from "react";
9
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
10
+ import { Award as m, CalendarClock as h, CalendarDays as g, CalendarPlus as _, MapPin as v, Search as ee, Ticket as y, UserCheck as b, Users as x } from "lucide-react";
11
+ import { useI18n as S } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
12
+ import { Badge as C, Button as w, EmphasisPanel as T, GlassCard as E, GradientText as D, IllustratedEmptyState as O, Input as k, NextSteps as te, PagePurpose as ne, Skeleton as A, Tabs as re, TabsList as ie, TabsTrigger as j } from "@burdenoff/fe-libs/ui";
13
13
  //#region src/eventfullymanaged/pages/modules/EventsPage.tsx
14
- var j = t`
14
+ var M = t`
15
15
  query EventfullymanagedEventsRegistrations($limit: Int) {
16
16
  registrations: eventfullyManagedRegistrations(limit: $limit, offset: 0) {
17
17
  total
@@ -23,7 +23,7 @@ var j = t`
23
23
  }
24
24
  }
25
25
  `;
26
- function M(e) {
26
+ function N(e) {
27
27
  let t = e.toLowerCase();
28
28
  return [
29
29
  "active",
@@ -45,44 +45,73 @@ function M(e) {
45
45
  "scheduled"
46
46
  ].includes(t) ? "info" : "secondary";
47
47
  }
48
- function N(e, t) {
49
- let n = e ? a(e) : "", r = t ? a(t) : "";
48
+ function P(e, t) {
49
+ let n = e ? o(e) : "", r = t ? o(t) : "";
50
50
  return n && r ? `${n} — ${r}` : n || r || "No schedule set";
51
51
  }
52
- function P({ icon: e, label: t, value: n }) {
53
- return /* @__PURE__ */ f("div", {
52
+ function F(e, t) {
53
+ let n = Date.now(), r = e ? new Date(e).getTime() : NaN, i = t ? new Date(t).getTime() : NaN, a = !Number.isNaN(r), o = !Number.isNaN(i);
54
+ return !a && !o ? null : a && n < r ? "upcoming" : o && n > i ? "past" : a ? "live" : "upcoming";
55
+ }
56
+ function I({ icon: e, label: t, value: n, loading: r }) {
57
+ return /* @__PURE__ */ f(E, {
58
+ treatment: "plain",
59
+ className: "border-border-seam p-4",
60
+ children: /* @__PURE__ */ p("div", {
61
+ className: "flex items-center gap-3",
62
+ children: [/* @__PURE__ */ f("span", {
63
+ className: "flex h-9 w-9 shrink-0 items-center justify-center rounded-button bg-bg-sunken text-text-secondary",
64
+ children: /* @__PURE__ */ f(e, { className: "h-4 w-4" })
65
+ }), /* @__PURE__ */ p("div", {
66
+ className: "min-w-0",
67
+ children: [r ? /* @__PURE__ */ f(A, { className: "h-6 w-12" }) : /* @__PURE__ */ f("p", {
68
+ className: "truncate text-xl font-bold tabular-nums text-text-primary",
69
+ children: n
70
+ }), /* @__PURE__ */ f("p", {
71
+ className: "truncate text-xs text-text-muted",
72
+ children: t
73
+ })]
74
+ })]
75
+ })
76
+ });
77
+ }
78
+ function L({ icon: e, label: t, value: n }) {
79
+ return /* @__PURE__ */ p("div", {
54
80
  className: "flex items-center gap-1.5",
55
81
  children: [
56
- /* @__PURE__ */ d(e, { className: "h-3.5 w-3.5 text-text-muted" }),
57
- /* @__PURE__ */ d("span", {
82
+ /* @__PURE__ */ f(e, { className: "h-3.5 w-3.5 text-text-muted" }),
83
+ /* @__PURE__ */ f("span", {
58
84
  className: "tabular-nums font-medium text-text-primary",
59
85
  children: n
60
86
  }),
61
- /* @__PURE__ */ d("span", {
87
+ /* @__PURE__ */ f("span", {
62
88
  className: "text-text-muted",
63
89
  children: t
64
90
  })
65
91
  ]
66
92
  });
67
93
  }
68
- function F() {
69
- let { t } = b(), a = (e, n) => {
94
+ function R() {
95
+ let { t } = S(), o = (e, n) => {
70
96
  let r = t(e);
71
97
  return r === e ? n : r;
72
- }, { navigate: F } = e(), [I, L] = u(""), R = c({ resetKey: I }), { data: z, loading: B } = r({
73
- search: I,
74
- limit: R.limit,
75
- offset: R.offset
76
- }), { data: V } = i({
98
+ }, { navigate: R } = e(), [z, B] = d(""), [V, H] = d("all"), U = l({ resetKey: z }), { data: W, loading: G } = r({
99
+ search: z,
100
+ limit: U.limit,
101
+ offset: U.offset
102
+ }), { data: K, loading: q } = a({
77
103
  limit: 100,
78
104
  offset: 0
79
- }), { data: H } = n(j, { variables: { limit: 500 } }), U = z?.events?.total ?? 0, W = l(() => z?.events?.items ?? [], [z]), G = l(() => {
105
+ }), { data: J, loading: ae } = i({
106
+ limit: 1,
107
+ offset: 0
108
+ }), { data: Y, loading: oe } = n(M, { variables: { limit: 500 } }), X = W?.events?.total ?? 0, Z = u(() => W?.events?.items ?? [], [W]), se = Y?.registrations?.total ?? 0, Q = K?.venues?.total ?? 0, ce = J?.sponsors?.total ?? 0, $ = u(() => V === "all" ? Z : Z.filter((e) => F(e.startAt, e.endAt) === V), [Z, V]), le = u(() => {
80
109
  let e = /* @__PURE__ */ new Map();
81
- for (let t of V?.venues?.items ?? []) e.set(t.id, t.name);
110
+ for (let t of K?.venues?.items ?? []) e.set(t.id, t.name);
82
111
  return e;
83
- }, [V]), K = l(() => {
112
+ }, [K]), ue = u(() => {
84
113
  let e = /* @__PURE__ */ new Map();
85
- for (let t of H?.registrations?.items ?? []) {
114
+ for (let t of Y?.registrations?.items ?? []) {
86
115
  let n = e.get(t.eventId) ?? {
87
116
  registrations: 0,
88
117
  checkedIn: 0
@@ -90,176 +119,252 @@ function F() {
90
119
  n.registrations += 1, t.checkedInAt && (n.checkedIn += 1), e.set(t.eventId, n);
91
120
  }
92
121
  return e;
93
- }, [H]);
94
- return /* @__PURE__ */ f("div", {
122
+ }, [Y]);
123
+ return /* @__PURE__ */ p("div", {
95
124
  className: "space-y-6 p-6",
96
125
  children: [
97
- /* @__PURE__ */ d(k, { children: a("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, open it to reveal its agenda, speakers and ticket types, then publish it when it is ready.") }),
98
- /* @__PURE__ */ d(C, { children: /* @__PURE__ */ f("div", {
126
+ /* @__PURE__ */ f(ne, { children: o("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, open it to reveal its agenda, speakers and ticket types, then publish it when it is ready.") }),
127
+ /* @__PURE__ */ f(T, { children: /* @__PURE__ */ p("div", {
99
128
  className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
100
- children: [/* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("h1", {
129
+ children: [/* @__PURE__ */ p("div", { children: [/* @__PURE__ */ f("h1", {
101
130
  className: "text-2xl font-bold text-text-primary",
102
- children: /* @__PURE__ */ d(T, { children: a("eventfullymanaged.events.title", "Events") })
103
- }), /* @__PURE__ */ d("p", {
131
+ children: /* @__PURE__ */ f(D, { children: o("eventfullymanaged.events.title", "Events") })
132
+ }), /* @__PURE__ */ f("p", {
104
133
  className: "mt-1 text-sm text-text-secondary",
105
- children: a("eventfullymanaged.events.description", "Create and manage live events from the workspace graph.")
106
- })] }), /* @__PURE__ */ f(S, {
134
+ children: o("eventfullymanaged.events.description", "Create and manage live events from the workspace graph.")
135
+ })] }), /* @__PURE__ */ p(w, {
107
136
  type: "button",
108
- onClick: () => F("/events/create"),
109
- children: [/* @__PURE__ */ d(m, { className: "h-4 w-4" }), a("eventfullymanaged.events.actions.create", "Create Event")]
137
+ onClick: () => R("/events/create"),
138
+ children: [/* @__PURE__ */ f(_, { className: "h-4 w-4" }), o("eventfullymanaged.events.actions.create", "Create Event")]
110
139
  })]
111
140
  }) }),
112
- /* @__PURE__ */ f("div", {
113
- className: "relative",
114
- children: [/* @__PURE__ */ d(g, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted" }), /* @__PURE__ */ d(D, {
115
- type: "text",
116
- value: I,
117
- onChange: (e) => L(e.target.value),
118
- placeholder: a("eventfullymanaged.events.searchPlaceholder", "Search events"),
119
- "aria-label": a("eventfullymanaged.events.searchPlaceholder", "Search events"),
120
- className: "pl-10"
141
+ /* @__PURE__ */ p("div", {
142
+ className: "grid grid-cols-2 gap-3 sm:grid-cols-4",
143
+ children: [
144
+ /* @__PURE__ */ f(I, {
145
+ icon: g,
146
+ label: o("eventfullymanaged.events.portfolio.events", "Events"),
147
+ value: X.toLocaleString(),
148
+ loading: G && X === 0
149
+ }),
150
+ /* @__PURE__ */ f(I, {
151
+ icon: x,
152
+ label: o("eventfullymanaged.events.portfolio.registrations", "Registrations"),
153
+ value: se.toLocaleString(),
154
+ loading: oe && !Y
155
+ }),
156
+ /* @__PURE__ */ f(I, {
157
+ icon: v,
158
+ label: o("eventfullymanaged.events.portfolio.venues", "Venues"),
159
+ value: Q.toLocaleString(),
160
+ loading: q && !K
161
+ }),
162
+ /* @__PURE__ */ f(I, {
163
+ icon: m,
164
+ label: o("eventfullymanaged.events.portfolio.sponsors", "Sponsors"),
165
+ value: ce.toLocaleString(),
166
+ loading: ae && !J
167
+ })
168
+ ]
169
+ }),
170
+ /* @__PURE__ */ p("div", {
171
+ className: "flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
172
+ children: [/* @__PURE__ */ p("div", {
173
+ className: "relative flex-1",
174
+ children: [/* @__PURE__ */ f(ee, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted" }), /* @__PURE__ */ f(k, {
175
+ type: "text",
176
+ value: z,
177
+ onChange: (e) => B(e.target.value),
178
+ placeholder: o("eventfullymanaged.events.searchPlaceholder", "Search events"),
179
+ "aria-label": o("eventfullymanaged.events.searchPlaceholder", "Search events"),
180
+ className: "pl-10"
181
+ })]
182
+ }), /* @__PURE__ */ f(re, {
183
+ value: V,
184
+ onValueChange: (e) => H(e),
185
+ className: "w-full sm:w-auto",
186
+ children: /* @__PURE__ */ p(ie, {
187
+ className: "w-full overflow-x-auto sm:w-auto",
188
+ children: [
189
+ /* @__PURE__ */ f(j, {
190
+ value: "all",
191
+ children: o("eventfullymanaged.events.filters.all", "All")
192
+ }),
193
+ /* @__PURE__ */ f(j, {
194
+ value: "upcoming",
195
+ children: o("eventfullymanaged.events.filters.upcoming", "Upcoming")
196
+ }),
197
+ /* @__PURE__ */ f(j, {
198
+ value: "live",
199
+ children: o("eventfullymanaged.events.filters.live", "Live")
200
+ }),
201
+ /* @__PURE__ */ f(j, {
202
+ value: "past",
203
+ children: o("eventfullymanaged.events.filters.past", "Past")
204
+ })
205
+ ]
206
+ })
121
207
  })]
122
208
  }),
123
- B ? /* @__PURE__ */ f("div", {
209
+ G ? /* @__PURE__ */ p("div", {
124
210
  className: "space-y-3",
125
211
  children: [
126
- /* @__PURE__ */ d(A, { className: "h-28 w-full rounded-card" }),
127
- /* @__PURE__ */ d(A, { className: "h-28 w-full rounded-card" }),
128
- /* @__PURE__ */ d(A, { className: "h-28 w-full rounded-card" })
212
+ /* @__PURE__ */ f(A, { className: "h-28 w-full rounded-card" }),
213
+ /* @__PURE__ */ f(A, { className: "h-28 w-full rounded-card" }),
214
+ /* @__PURE__ */ f(A, { className: "h-28 w-full rounded-card" })
129
215
  ]
130
- }) : W.length === 0 ? /* @__PURE__ */ d(w, {
216
+ }) : Z.length === 0 ? /* @__PURE__ */ f(E, {
131
217
  treatment: "plain",
132
218
  className: "border-border-seam",
133
- children: /* @__PURE__ */ d(E, {
134
- illustration: I ? "empty-search" : "empty-data",
135
- title: I ? a("eventfullymanaged.events.list.emptySearch", "No events match your search.") : a("eventfullymanaged.events.list.empty", "No events yet."),
136
- description: I ? a("eventfullymanaged.events.list.emptySearchHint", "Try a different name.") : a("eventfullymanaged.events.list.emptyHint", "Create your first event to get started."),
137
- action: I ? void 0 : /* @__PURE__ */ f(S, {
219
+ children: /* @__PURE__ */ f(O, {
220
+ illustration: z ? "empty-search" : "empty-data",
221
+ title: z ? o("eventfullymanaged.events.list.emptySearch", "No events match your search.") : o("eventfullymanaged.events.list.empty", "No events yet."),
222
+ description: z ? o("eventfullymanaged.events.list.emptySearchHint", "Try a different name.") : o("eventfullymanaged.events.list.emptyHint", "Create your first event to get started."),
223
+ action: z ? void 0 : /* @__PURE__ */ p(w, {
138
224
  type: "button",
139
- onClick: () => F("/events/create"),
140
- children: [/* @__PURE__ */ d(m, { className: "h-4 w-4" }), a("eventfullymanaged.events.actions.create", "Create Event")]
225
+ onClick: () => R("/events/create"),
226
+ children: [/* @__PURE__ */ f(_, { className: "h-4 w-4" }), o("eventfullymanaged.events.actions.create", "Create Event")]
141
227
  })
142
228
  })
143
- }) : /* @__PURE__ */ f("div", {
229
+ }) : $.length === 0 ? /* @__PURE__ */ p("div", {
230
+ className: "space-y-3",
231
+ children: [/* @__PURE__ */ f(E, {
232
+ treatment: "plain",
233
+ className: "border-border-seam",
234
+ children: /* @__PURE__ */ f("p", {
235
+ className: "px-2 py-8 text-center text-sm text-text-secondary",
236
+ children: o("eventfullymanaged.events.filters.empty", `No ${V} events on this page. Switch tabs or move to another page.`)
237
+ })
238
+ }), /* @__PURE__ */ f(c, {
239
+ offset: U.offset,
240
+ limit: U.limit,
241
+ loadedCount: Z.length,
242
+ total: X,
243
+ onPrev: U.prevPage,
244
+ onNext: U.nextPage,
245
+ itemLabel: "events",
246
+ loading: G
247
+ })]
248
+ }) : /* @__PURE__ */ p("div", {
144
249
  className: "space-y-3",
145
- children: [W.map((e) => {
146
- let t = e.metadata ?? {}, n = typeof t.venueId == "string" ? t.venueId : "", r = n ? G.get(n) : void 0, i = K.get(e.id), s = i?.registrations ?? 0, c = s > 0 ? Math.round((i?.checkedIn ?? 0) / s * 100) : 0;
147
- return /* @__PURE__ */ f(w, {
250
+ children: [$.map((e) => {
251
+ let t = e.metadata ?? {}, n = typeof t.venueId == "string" ? t.venueId : "", r = n ? le.get(n) : void 0, i = ue.get(e.id), a = i?.registrations ?? 0, c = a > 0 ? Math.round((i?.checkedIn ?? 0) / a * 100) : 0;
252
+ return /* @__PURE__ */ p(E, {
148
253
  treatment: "plain",
149
254
  role: "button",
150
255
  tabIndex: 0,
151
256
  "aria-label": e.name,
152
257
  className: "group relative cursor-pointer overflow-hidden border-border-seam p-0 outline-none transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1 focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]",
153
- onClick: () => F(`/events/${e.id}`),
258
+ onClick: () => R(`/events/${e.id}`),
154
259
  onKeyDown: (t) => {
155
- (t.key === "Enter" || t.key === " ") && (t.preventDefault(), F(`/events/${e.id}`));
260
+ (t.key === "Enter" || t.key === " ") && (t.preventDefault(), R(`/events/${e.id}`));
156
261
  },
157
- children: [/* @__PURE__ */ d("span", {
262
+ children: [/* @__PURE__ */ f("span", {
158
263
  "aria-hidden": "true",
159
264
  className: "absolute inset-y-0 left-0 w-1.5 bg-gradient-to-b from-[var(--color-chart-1)] to-[var(--color-chart-2)]"
160
- }), /* @__PURE__ */ f("div", {
265
+ }), /* @__PURE__ */ p("div", {
161
266
  className: "flex flex-col gap-3 py-4 pl-5 pr-4 sm:flex-row sm:items-center sm:justify-between",
162
- children: [/* @__PURE__ */ f("div", {
267
+ children: [/* @__PURE__ */ p("div", {
163
268
  className: "min-w-0 space-y-2",
164
269
  children: [
165
- /* @__PURE__ */ f("div", {
270
+ /* @__PURE__ */ p("div", {
166
271
  className: "flex flex-wrap items-center gap-2",
167
272
  children: [
168
- /* @__PURE__ */ d("p", {
273
+ /* @__PURE__ */ f("p", {
169
274
  className: "truncate text-lg font-semibold text-text-primary",
170
275
  children: e.name
171
276
  }),
172
- e.status ? /* @__PURE__ */ d(x, {
173
- variant: M(e.status),
277
+ e.status ? /* @__PURE__ */ f(C, {
278
+ variant: N(e.status),
174
279
  className: "uppercase",
175
280
  children: e.status
176
281
  }) : null,
177
- e.type ? /* @__PURE__ */ d(x, {
282
+ e.type ? /* @__PURE__ */ f(C, {
178
283
  variant: "secondary",
179
284
  className: "capitalize",
180
285
  children: e.type.toLowerCase().replace(/_/g, " ")
181
286
  }) : null
182
287
  ]
183
288
  }),
184
- /* @__PURE__ */ f("div", {
289
+ /* @__PURE__ */ p("div", {
185
290
  className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-sm text-text-secondary",
186
- children: [/* @__PURE__ */ f("span", {
291
+ children: [/* @__PURE__ */ p("span", {
187
292
  className: "flex items-center gap-1.5",
188
- children: [/* @__PURE__ */ d(p, { className: "h-4 w-4 shrink-0 text-text-muted" }), N(e.startAt, e.endAt)]
189
- }), /* @__PURE__ */ f("span", {
293
+ children: [/* @__PURE__ */ f(h, { className: "h-4 w-4 shrink-0 text-text-muted" }), P(e.startAt, e.endAt)]
294
+ }), /* @__PURE__ */ p("span", {
190
295
  className: "flex items-center gap-1.5",
191
- children: [/* @__PURE__ */ d(h, { className: "h-4 w-4 shrink-0 text-text-muted" }), r ?? a("eventfullymanaged.events.card.noVenue", "No venue")]
296
+ children: [/* @__PURE__ */ f(v, { className: "h-4 w-4 shrink-0 text-text-muted" }), r ?? o("eventfullymanaged.events.card.noVenue", "No venue")]
192
297
  })]
193
298
  }),
194
- /* @__PURE__ */ f("div", {
299
+ /* @__PURE__ */ p("div", {
195
300
  className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-xs",
196
301
  children: [
197
- /* @__PURE__ */ d(P, {
198
- icon: v,
199
- label: a("eventfullymanaged.events.card.registered", "registered"),
200
- value: s.toLocaleString()
302
+ /* @__PURE__ */ f(L, {
303
+ icon: b,
304
+ label: o("eventfullymanaged.events.card.registered", "registered"),
305
+ value: a.toLocaleString()
201
306
  }),
202
- /* @__PURE__ */ d(P, {
203
- icon: v,
204
- label: a("eventfullymanaged.events.card.checkedIn", "checked in"),
307
+ /* @__PURE__ */ f(L, {
308
+ icon: b,
309
+ label: o("eventfullymanaged.events.card.checkedIn", "checked in"),
205
310
  value: `${c}%`
206
311
  }),
207
- /* @__PURE__ */ d(P, {
208
- icon: y,
209
- label: a("eventfullymanaged.events.card.capacity", "capacity"),
312
+ /* @__PURE__ */ f(L, {
313
+ icon: x,
314
+ label: o("eventfullymanaged.events.card.capacity", "capacity"),
210
315
  value: e.capacity == null ? "—" : e.capacity.toLocaleString()
211
316
  })
212
317
  ]
213
318
  })
214
319
  ]
215
- }), /* @__PURE__ */ d("div", {
320
+ }), /* @__PURE__ */ f("div", {
216
321
  className: "flex shrink-0 items-center gap-2 self-start sm:self-center",
217
322
  onClick: (e) => e.stopPropagation(),
218
323
  onKeyDown: (e) => e.stopPropagation(),
219
324
  role: "presentation",
220
- children: /* @__PURE__ */ d(o, {
325
+ children: /* @__PURE__ */ f(s, {
221
326
  ariaLabel: `Event actions for ${e.name}`,
222
- onView: () => F(`/events/${e.id}`),
223
- onEdit: () => F(`/events/${e.id}/edit`)
327
+ onView: () => R(`/events/${e.id}`),
328
+ onEdit: () => R(`/events/${e.id}/edit`)
224
329
  })
225
330
  })]
226
331
  })]
227
332
  }, e.id);
228
- }), /* @__PURE__ */ d(s, {
229
- offset: R.offset,
230
- limit: R.limit,
231
- loadedCount: W.length,
232
- total: U,
233
- onPrev: R.prevPage,
234
- onNext: R.nextPage,
333
+ }), /* @__PURE__ */ f(c, {
334
+ offset: U.offset,
335
+ limit: U.limit,
336
+ loadedCount: Z.length,
337
+ total: X,
338
+ onPrev: U.prevPage,
339
+ onNext: U.nextPage,
235
340
  itemLabel: "events",
236
- loading: B
341
+ loading: G
237
342
  })]
238
343
  }),
239
- /* @__PURE__ */ d(O, {
344
+ /* @__PURE__ */ f(te, {
240
345
  storageKey: "eventfullymanaged-events",
241
- title: a("eventfullymanaged.events.nextSteps.title", "Finish setting up your event"),
346
+ title: o("eventfullymanaged.events.nextSteps.title", "Finish setting up your event"),
242
347
  steps: [
243
348
  {
244
349
  id: "configure-registration",
245
- label: a("eventfullymanaged.events.nextSteps.registration", "Configure registration & tickets"),
246
- description: a("eventfullymanaged.events.nextSteps.registrationDesc", "Open an event and define ticket types so people can register."),
247
- icon: /* @__PURE__ */ d(_, { className: "h-4 w-4" }),
248
- onClick: () => F("/registration")
350
+ label: o("eventfullymanaged.events.nextSteps.registration", "Configure registration & tickets"),
351
+ description: o("eventfullymanaged.events.nextSteps.registrationDesc", "Open an event and define ticket types so people can register."),
352
+ icon: /* @__PURE__ */ f(y, { className: "h-4 w-4" }),
353
+ onClick: () => R("/registration")
249
354
  },
250
355
  {
251
356
  id: "plan-networking",
252
- label: a("eventfullymanaged.events.nextSteps.networking", "Plan networking & sessions"),
253
- description: a("eventfullymanaged.events.nextSteps.networkingDesc", "Set up attendee matchmaking and meeting schedules."),
254
- icon: /* @__PURE__ */ d(y, { className: "h-4 w-4" }),
255
- onClick: () => F("/networking")
357
+ label: o("eventfullymanaged.events.nextSteps.networking", "Plan networking & sessions"),
358
+ description: o("eventfullymanaged.events.nextSteps.networkingDesc", "Set up attendee matchmaking and meeting schedules."),
359
+ icon: /* @__PURE__ */ f(x, { className: "h-4 w-4" }),
360
+ onClick: () => R("/networking")
256
361
  },
257
362
  {
258
363
  id: "announce",
259
- label: a("eventfullymanaged.events.nextSteps.announce", "Announce to attendees"),
260
- description: a("eventfullymanaged.events.nextSteps.announceDesc", "Send announcements and run communication campaigns."),
261
- icon: /* @__PURE__ */ d(m, { className: "h-4 w-4" }),
262
- onClick: () => F("/communication")
364
+ label: o("eventfullymanaged.events.nextSteps.announce", "Announce to attendees"),
365
+ description: o("eventfullymanaged.events.nextSteps.announceDesc", "Send announcements and run communication campaigns."),
366
+ icon: /* @__PURE__ */ f(_, { className: "h-4 w-4" }),
367
+ onClick: () => R("/communication")
263
368
  }
264
369
  ]
265
370
  })
@@ -267,6 +372,6 @@ function F() {
267
372
  });
268
373
  }
269
374
  //#endregion
270
- export { F as default };
375
+ export { R as default };
271
376
 
272
377
  //# sourceMappingURL=EventsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventsPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/EventsPage.tsx"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { CalendarClock, CalendarPlus, MapPin, Search, Ticket, UserCheck, Users } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n Badge,\n Button,\n EmphasisPanel,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n NextSteps,\n PagePurpose,\n Skeleton,\n} from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport { useEventsQuery, useVenuesQuery } from '../../api/eventApi';\nimport { ActionMenu } from '../../components/ActionMenu';\nimport { Pagination, usePagination } from '../../components/Pagination';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { formatDateTime } from '../events/eventFormUtils';\n\ntype EventRow = {\n id: string;\n name: string;\n type?: string;\n status?: string;\n startAt?: string;\n endAt?: string;\n capacity?: number | null;\n visibility?: string;\n metadata?: Record<string, unknown> | null;\n};\n\n// Per-event registration + check-in counts, computed once from a real registrations\n// read (no per-row queries) so each card can show live mini-stats.\nconst EVENTS_REGISTRATIONS_QUERY = gql`\n query EventfullymanagedEventsRegistrations($limit: Int) {\n registrations: eventfullyManagedRegistrations(limit: $limit, offset: 0) {\n total\n items {\n id\n eventId\n checkedInAt\n }\n }\n }\n`;\n\ntype RegistrationStat = { id: string; eventId: string; checkedInAt?: string | null };\ntype EventsRegistrationsResponse = { registrations: { total: number; items: RegistrationStat[] } };\n\nfunction statusVariant(status: string): 'success' | 'warning' | 'secondary' | 'info' {\n const value = status.toLowerCase();\n if (['active', 'published', 'live', 'confirmed', 'completed', 'approved'].includes(value)) {\n return 'success';\n }\n if (['inactive', 'cancelled', 'archived', 'closed', 'expired'].includes(value)) {\n return 'warning';\n }\n if (['draft', 'created', 'pending', 'scheduled'].includes(value)) {\n return 'info';\n }\n return 'secondary';\n}\n\nfunction formatDateRange(startAt?: string, endAt?: string): string {\n const start = startAt ? formatDateTime(startAt) : '';\n const end = endAt ? formatDateTime(endAt) : '';\n if (start && end) {\n return `${start} — ${end}`;\n }\n return start || end || 'No schedule set';\n}\n\nfunction MiniStat({\n icon: Icon,\n label,\n value,\n}: {\n icon: React.ComponentType<{ className?: string }>;\n label: string;\n value: string;\n}) {\n return (\n <div className=\"flex items-center gap-1.5\">\n <Icon className=\"h-3.5 w-3.5 text-text-muted\" />\n <span className=\"tabular-nums font-medium text-text-primary\">{value}</span>\n <span className=\"text-text-muted\">{label}</span>\n </div>\n );\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 [search, setSearch] = useState('');\n const pagination = usePagination({ resetKey: search });\n const { data, loading } = useEventsQuery({ search, limit: pagination.limit, offset: pagination.offset });\n const { data: venuesData } = useVenuesQuery({ limit: 100, offset: 0 });\n const { data: registrationsData } = useQuery<EventsRegistrationsResponse, { limit: number }>(\n EVENTS_REGISTRATIONS_QUERY,\n { variables: { limit: 500 } }\n );\n\n const total = data?.events?.total ?? 0;\n const rows = useMemo(() => (data?.events?.items ?? []) as EventRow[], [data]);\n\n const venueNameById = useMemo(() => {\n const map = new Map<string, string>();\n for (const venue of venuesData?.venues?.items ?? []) {\n map.set(venue.id, venue.name);\n }\n return map;\n }, [venuesData]);\n\n const statsByEvent = useMemo(() => {\n const map = new Map<string, { registrations: number; checkedIn: number }>();\n for (const registration of registrationsData?.registrations?.items ?? []) {\n const entry = map.get(registration.eventId) ?? { registrations: 0, checkedIn: 0 };\n entry.registrations += 1;\n if (registration.checkedInAt) {\n entry.checkedIn += 1;\n }\n map.set(registration.eventId, entry);\n }\n return map;\n }, [registrationsData]);\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, open it to reveal its agenda, speakers and ticket types, then publish it when it is ready.'\n )}\n </PagePurpose>\n\n <EmphasisPanel>\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\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>\n <Button type=\"button\" onClick={() => navigate('/events/create')}>\n <CalendarPlus className=\"h-4 w-4\" />\n {t('eventfullymanaged.events.actions.create', 'Create Event')}\n </Button>\n </div>\n </EmphasisPanel>\n\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted\" />\n <Input\n type=\"text\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n placeholder={t('eventfullymanaged.events.searchPlaceholder', 'Search events')}\n aria-label={t('eventfullymanaged.events.searchPlaceholder', 'Search events')}\n className=\"pl-10\"\n />\n </div>\n\n {loading ? (\n <div className=\"space-y-3\">\n <Skeleton className=\"h-28 w-full rounded-card\" />\n <Skeleton className=\"h-28 w-full rounded-card\" />\n <Skeleton className=\"h-28 w-full rounded-card\" />\n </div>\n ) : rows.length === 0 ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration={search ? 'empty-search' : 'empty-data'}\n title={\n search\n ? t('eventfullymanaged.events.list.emptySearch', 'No events match your search.')\n : t('eventfullymanaged.events.list.empty', 'No events yet.')\n }\n description={\n search\n ? t('eventfullymanaged.events.list.emptySearchHint', 'Try a different name.')\n : t('eventfullymanaged.events.list.emptyHint', 'Create your first event to get started.')\n }\n action={\n !search ? (\n <Button type=\"button\" onClick={() => navigate('/events/create')}>\n <CalendarPlus className=\"h-4 w-4\" />\n {t('eventfullymanaged.events.actions.create', 'Create Event')}\n </Button>\n ) : undefined\n }\n />\n </GlassCard>\n ) : (\n <div className=\"space-y-3\">\n {rows.map((event) => {\n const metadata = (event.metadata ?? {}) as Record<string, unknown>;\n const venueId = typeof metadata.venueId === 'string' ? metadata.venueId : '';\n const venueName = venueId ? venueNameById.get(venueId) : undefined;\n const stat = statsByEvent.get(event.id);\n const registrations = stat?.registrations ?? 0;\n const checkInPct = registrations > 0 ? Math.round(((stat?.checkedIn ?? 0) / registrations) * 100) : 0;\n return (\n <GlassCard\n key={event.id}\n treatment=\"plain\"\n role=\"button\"\n tabIndex={0}\n aria-label={event.name}\n className=\"group relative cursor-pointer overflow-hidden border-border-seam p-0 outline-none transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1 focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]\"\n onClick={() => navigate(`/events/${event.id}`)}\n onKeyDown={(keyEvent) => {\n if (keyEvent.key === 'Enter' || keyEvent.key === ' ') {\n keyEvent.preventDefault();\n navigate(`/events/${event.id}`);\n }\n }}\n >\n {/* Cover accent strip */}\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-y-0 left-0 w-1.5 bg-gradient-to-b from-[var(--color-chart-1)] to-[var(--color-chart-2)]\"\n />\n <div className=\"flex flex-col gap-3 py-4 pl-5 pr-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"min-w-0 space-y-2\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <p className=\"truncate text-lg font-semibold text-text-primary\">{event.name}</p>\n {event.status ? (\n <Badge variant={statusVariant(event.status)} className=\"uppercase\">\n {event.status}\n </Badge>\n ) : null}\n {event.type ? (\n <Badge variant=\"secondary\" className=\"capitalize\">\n {event.type.toLowerCase().replace(/_/g, ' ')}\n </Badge>\n ) : null}\n </div>\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-sm text-text-secondary\">\n <span className=\"flex items-center gap-1.5\">\n <CalendarClock className=\"h-4 w-4 shrink-0 text-text-muted\" />\n {formatDateRange(event.startAt, event.endAt)}\n </span>\n <span className=\"flex items-center gap-1.5\">\n <MapPin className=\"h-4 w-4 shrink-0 text-text-muted\" />\n {venueName ?? t('eventfullymanaged.events.card.noVenue', 'No venue')}\n </span>\n </div>\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs\">\n <MiniStat\n icon={UserCheck}\n label={t('eventfullymanaged.events.card.registered', 'registered')}\n value={registrations.toLocaleString()}\n />\n <MiniStat\n icon={UserCheck}\n label={t('eventfullymanaged.events.card.checkedIn', 'checked in')}\n value={`${checkInPct}%`}\n />\n <MiniStat\n icon={Users}\n label={t('eventfullymanaged.events.card.capacity', 'capacity')}\n value={event.capacity != null ? event.capacity.toLocaleString() : '—'}\n />\n </div>\n </div>\n <div\n className=\"flex shrink-0 items-center gap-2 self-start sm:self-center\"\n onClick={(clickEvent) => clickEvent.stopPropagation()}\n onKeyDown={(keyEvent) => keyEvent.stopPropagation()}\n role=\"presentation\"\n >\n <ActionMenu\n ariaLabel={`Event actions for ${event.name}`}\n onView={() => navigate(`/events/${event.id}`)}\n onEdit={() => navigate(`/events/${event.id}/edit`)}\n />\n </div>\n </div>\n </GlassCard>\n );\n })}\n\n <Pagination\n offset={pagination.offset}\n limit={pagination.limit}\n loadedCount={rows.length}\n total={total}\n onPrev={pagination.prevPage}\n onNext={pagination.nextPage}\n itemLabel=\"events\"\n loading={loading}\n />\n </div>\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 'Open an event and define ticket types so people can register.'\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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"}
1
+ {"version":3,"file":"EventsPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/EventsPage.tsx"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport {\n Award,\n CalendarClock,\n CalendarDays,\n CalendarPlus,\n MapPin,\n Search,\n Ticket,\n UserCheck,\n Users,\n} from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n Badge,\n Button,\n EmphasisPanel,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n NextSteps,\n PagePurpose,\n Skeleton,\n Tabs,\n TabsList,\n TabsTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport { useEventsQuery, useSponsorsQuery, useVenuesQuery } from '../../api/eventApi';\nimport { ActionMenu } from '../../components/ActionMenu';\nimport { Pagination, usePagination } from '../../components/Pagination';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { formatDateTime } from '../events/eventFormUtils';\n\ntype EventRow = {\n id: string;\n name: string;\n type?: string;\n status?: string;\n startAt?: string;\n endAt?: string;\n capacity?: number | null;\n visibility?: string;\n metadata?: Record<string, unknown> | null;\n};\n\n// Per-event registration + check-in counts, computed once from a real registrations\n// read (no per-row queries) so each card can show live mini-stats.\nconst EVENTS_REGISTRATIONS_QUERY = gql`\n query EventfullymanagedEventsRegistrations($limit: Int) {\n registrations: eventfullyManagedRegistrations(limit: $limit, offset: 0) {\n total\n items {\n id\n eventId\n checkedInAt\n }\n }\n }\n`;\n\ntype RegistrationStat = { id: string; eventId: string; checkedInAt?: string | null };\ntype EventsRegistrationsResponse = { registrations: { total: number; items: RegistrationStat[] } };\n\nfunction statusVariant(status: string): 'success' | 'warning' | 'secondary' | 'info' {\n const value = status.toLowerCase();\n if (['active', 'published', 'live', 'confirmed', 'completed', 'approved'].includes(value)) {\n return 'success';\n }\n if (['inactive', 'cancelled', 'archived', 'closed', 'expired'].includes(value)) {\n return 'warning';\n }\n if (['draft', 'created', 'pending', 'scheduled'].includes(value)) {\n return 'info';\n }\n return 'secondary';\n}\n\nfunction formatDateRange(startAt?: string, endAt?: string): string {\n const start = startAt ? formatDateTime(startAt) : '';\n const end = endAt ? formatDateTime(endAt) : '';\n if (start && end) {\n return `${start} — ${end}`;\n }\n return start || end || 'No schedule set';\n}\n\ntype Lifecycle = 'upcoming' | 'live' | 'past';\ntype LifecycleFilter = 'all' | Lifecycle;\n\n// Derive an event's lifecycle from its schedule (DateTime scalars arrive as ISO\n// strings, so parse via `new Date(...)`). Upcoming = starts in the future, Live =\n// now falls within start–end (open-ended if no end), Past = already ended.\nfunction eventLifecycle(startAt?: string, endAt?: string): Lifecycle | null {\n const now = Date.now();\n const start = startAt ? new Date(startAt).getTime() : Number.NaN;\n const end = endAt ? new Date(endAt).getTime() : Number.NaN;\n const hasStart = !Number.isNaN(start);\n const hasEnd = !Number.isNaN(end);\n if (!hasStart && !hasEnd) {\n return null;\n }\n if (hasStart && now < start) {\n return 'upcoming';\n }\n if (hasEnd && now > end) {\n return 'past';\n }\n if (hasStart) {\n return 'live';\n }\n return 'upcoming';\n}\n\nfunction PortfolioStat({\n icon: Icon,\n label,\n value,\n loading,\n}: {\n icon: React.ComponentType<{ className?: string }>;\n label: string;\n value: string;\n loading: boolean;\n}) {\n return (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-4\">\n <div className=\"flex items-center gap-3\">\n <span className=\"flex h-9 w-9 shrink-0 items-center justify-center rounded-button bg-bg-sunken text-text-secondary\">\n <Icon className=\"h-4 w-4\" />\n </span>\n <div className=\"min-w-0\">\n {loading ? (\n <Skeleton className=\"h-6 w-12\" />\n ) : (\n <p className=\"truncate text-xl font-bold tabular-nums text-text-primary\">{value}</p>\n )}\n <p className=\"truncate text-xs text-text-muted\">{label}</p>\n </div>\n </div>\n </GlassCard>\n );\n}\n\nfunction MiniStat({\n icon: Icon,\n label,\n value,\n}: {\n icon: React.ComponentType<{ className?: string }>;\n label: string;\n value: string;\n}) {\n return (\n <div className=\"flex items-center gap-1.5\">\n <Icon className=\"h-3.5 w-3.5 text-text-muted\" />\n <span className=\"tabular-nums font-medium text-text-primary\">{value}</span>\n <span className=\"text-text-muted\">{label}</span>\n </div>\n );\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 [search, setSearch] = useState('');\n const [statusFilter, setStatusFilter] = useState<LifecycleFilter>('all');\n const pagination = usePagination({ resetKey: search });\n const { data, loading } = useEventsQuery({ search, limit: pagination.limit, offset: pagination.offset });\n const { data: venuesData, loading: venuesLoading } = useVenuesQuery({ limit: 100, offset: 0 });\n const { data: sponsorsData, loading: sponsorsLoading } = useSponsorsQuery({ limit: 1, offset: 0 });\n const { data: registrationsData, loading: registrationsLoading } = useQuery<\n EventsRegistrationsResponse,\n { limit: number }\n >(EVENTS_REGISTRATIONS_QUERY, { variables: { limit: 500 } });\n\n const total = data?.events?.total ?? 0;\n const rows = useMemo(() => (data?.events?.items ?? []) as EventRow[], [data]);\n\n const registrationsTotal = registrationsData?.registrations?.total ?? 0;\n const venuesTotal = venuesData?.venues?.total ?? 0;\n const sponsorsTotal = sponsorsData?.sponsors?.total ?? 0;\n\n const visibleRows = useMemo(() => {\n if (statusFilter === 'all') {\n return rows;\n }\n return rows.filter((event) => eventLifecycle(event.startAt, event.endAt) === statusFilter);\n }, [rows, statusFilter]);\n\n const venueNameById = useMemo(() => {\n const map = new Map<string, string>();\n for (const venue of venuesData?.venues?.items ?? []) {\n map.set(venue.id, venue.name);\n }\n return map;\n }, [venuesData]);\n\n const statsByEvent = useMemo(() => {\n const map = new Map<string, { registrations: number; checkedIn: number }>();\n for (const registration of registrationsData?.registrations?.items ?? []) {\n const entry = map.get(registration.eventId) ?? { registrations: 0, checkedIn: 0 };\n entry.registrations += 1;\n if (registration.checkedInAt) {\n entry.checkedIn += 1;\n }\n map.set(registration.eventId, entry);\n }\n return map;\n }, [registrationsData]);\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, open it to reveal its agenda, speakers and ticket types, then publish it when it is ready.'\n )}\n </PagePurpose>\n\n <EmphasisPanel>\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\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>\n <Button type=\"button\" onClick={() => navigate('/events/create')}>\n <CalendarPlus className=\"h-4 w-4\" />\n {t('eventfullymanaged.events.actions.create', 'Create Event')}\n </Button>\n </div>\n </EmphasisPanel>\n\n {/* Portfolio summary — real aggregate totals across the whole workspace graph. */}\n <div className=\"grid grid-cols-2 gap-3 sm:grid-cols-4\">\n <PortfolioStat\n icon={CalendarDays}\n label={t('eventfullymanaged.events.portfolio.events', 'Events')}\n value={total.toLocaleString()}\n loading={loading && total === 0}\n />\n <PortfolioStat\n icon={Users}\n label={t('eventfullymanaged.events.portfolio.registrations', 'Registrations')}\n value={registrationsTotal.toLocaleString()}\n loading={registrationsLoading && !registrationsData}\n />\n <PortfolioStat\n icon={MapPin}\n label={t('eventfullymanaged.events.portfolio.venues', 'Venues')}\n value={venuesTotal.toLocaleString()}\n loading={venuesLoading && !venuesData}\n />\n <PortfolioStat\n icon={Award}\n label={t('eventfullymanaged.events.portfolio.sponsors', 'Sponsors')}\n value={sponsorsTotal.toLocaleString()}\n loading={sponsorsLoading && !sponsorsData}\n />\n </div>\n\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"relative flex-1\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted\" />\n <Input\n type=\"text\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n placeholder={t('eventfullymanaged.events.searchPlaceholder', 'Search events')}\n aria-label={t('eventfullymanaged.events.searchPlaceholder', 'Search events')}\n className=\"pl-10\"\n />\n </div>\n <Tabs\n value={statusFilter}\n onValueChange={(value) => setStatusFilter(value as LifecycleFilter)}\n className=\"w-full sm:w-auto\"\n >\n <TabsList className=\"w-full overflow-x-auto sm:w-auto\">\n <TabsTrigger value=\"all\">{t('eventfullymanaged.events.filters.all', 'All')}</TabsTrigger>\n <TabsTrigger value=\"upcoming\">{t('eventfullymanaged.events.filters.upcoming', 'Upcoming')}</TabsTrigger>\n <TabsTrigger value=\"live\">{t('eventfullymanaged.events.filters.live', 'Live')}</TabsTrigger>\n <TabsTrigger value=\"past\">{t('eventfullymanaged.events.filters.past', 'Past')}</TabsTrigger>\n </TabsList>\n </Tabs>\n </div>\n\n {loading ? (\n <div className=\"space-y-3\">\n <Skeleton className=\"h-28 w-full rounded-card\" />\n <Skeleton className=\"h-28 w-full rounded-card\" />\n <Skeleton className=\"h-28 w-full rounded-card\" />\n </div>\n ) : rows.length === 0 ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration={search ? 'empty-search' : 'empty-data'}\n title={\n search\n ? t('eventfullymanaged.events.list.emptySearch', 'No events match your search.')\n : t('eventfullymanaged.events.list.empty', 'No events yet.')\n }\n description={\n search\n ? t('eventfullymanaged.events.list.emptySearchHint', 'Try a different name.')\n : t('eventfullymanaged.events.list.emptyHint', 'Create your first event to get started.')\n }\n action={\n !search ? (\n <Button type=\"button\" onClick={() => navigate('/events/create')}>\n <CalendarPlus className=\"h-4 w-4\" />\n {t('eventfullymanaged.events.actions.create', 'Create Event')}\n </Button>\n ) : undefined\n }\n />\n </GlassCard>\n ) : visibleRows.length === 0 ? (\n <div className=\"space-y-3\">\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <p className=\"px-2 py-8 text-center text-sm text-text-secondary\">\n {t(\n 'eventfullymanaged.events.filters.empty',\n `No ${statusFilter} events on this page. Switch tabs or move to another page.`\n )}\n </p>\n </GlassCard>\n <Pagination\n offset={pagination.offset}\n limit={pagination.limit}\n loadedCount={rows.length}\n total={total}\n onPrev={pagination.prevPage}\n onNext={pagination.nextPage}\n itemLabel=\"events\"\n loading={loading}\n />\n </div>\n ) : (\n <div className=\"space-y-3\">\n {visibleRows.map((event) => {\n const metadata = (event.metadata ?? {}) as Record<string, unknown>;\n const venueId = typeof metadata.venueId === 'string' ? metadata.venueId : '';\n const venueName = venueId ? venueNameById.get(venueId) : undefined;\n const stat = statsByEvent.get(event.id);\n const registrations = stat?.registrations ?? 0;\n const checkInPct = registrations > 0 ? Math.round(((stat?.checkedIn ?? 0) / registrations) * 100) : 0;\n return (\n <GlassCard\n key={event.id}\n treatment=\"plain\"\n role=\"button\"\n tabIndex={0}\n aria-label={event.name}\n className=\"group relative cursor-pointer overflow-hidden border-border-seam p-0 outline-none transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1 focus-visible:ring-1 focus-visible:ring-[var(--color-focus-ring)]\"\n onClick={() => navigate(`/events/${event.id}`)}\n onKeyDown={(keyEvent) => {\n if (keyEvent.key === 'Enter' || keyEvent.key === ' ') {\n keyEvent.preventDefault();\n navigate(`/events/${event.id}`);\n }\n }}\n >\n {/* Cover accent strip */}\n <span\n aria-hidden=\"true\"\n className=\"absolute inset-y-0 left-0 w-1.5 bg-gradient-to-b from-[var(--color-chart-1)] to-[var(--color-chart-2)]\"\n />\n <div className=\"flex flex-col gap-3 py-4 pl-5 pr-4 sm:flex-row sm:items-center sm:justify-between\">\n <div className=\"min-w-0 space-y-2\">\n <div className=\"flex flex-wrap items-center gap-2\">\n <p className=\"truncate text-lg font-semibold text-text-primary\">{event.name}</p>\n {event.status ? (\n <Badge variant={statusVariant(event.status)} className=\"uppercase\">\n {event.status}\n </Badge>\n ) : null}\n {event.type ? (\n <Badge variant=\"secondary\" className=\"capitalize\">\n {event.type.toLowerCase().replace(/_/g, ' ')}\n </Badge>\n ) : null}\n </div>\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-sm text-text-secondary\">\n <span className=\"flex items-center gap-1.5\">\n <CalendarClock className=\"h-4 w-4 shrink-0 text-text-muted\" />\n {formatDateRange(event.startAt, event.endAt)}\n </span>\n <span className=\"flex items-center gap-1.5\">\n <MapPin className=\"h-4 w-4 shrink-0 text-text-muted\" />\n {venueName ?? t('eventfullymanaged.events.card.noVenue', 'No venue')}\n </span>\n </div>\n <div className=\"flex flex-wrap items-center gap-x-4 gap-y-1 text-xs\">\n <MiniStat\n icon={UserCheck}\n label={t('eventfullymanaged.events.card.registered', 'registered')}\n value={registrations.toLocaleString()}\n />\n <MiniStat\n icon={UserCheck}\n label={t('eventfullymanaged.events.card.checkedIn', 'checked in')}\n value={`${checkInPct}%`}\n />\n <MiniStat\n icon={Users}\n label={t('eventfullymanaged.events.card.capacity', 'capacity')}\n value={event.capacity != null ? event.capacity.toLocaleString() : '—'}\n />\n </div>\n </div>\n <div\n className=\"flex shrink-0 items-center gap-2 self-start sm:self-center\"\n onClick={(clickEvent) => clickEvent.stopPropagation()}\n onKeyDown={(keyEvent) => keyEvent.stopPropagation()}\n role=\"presentation\"\n >\n <ActionMenu\n ariaLabel={`Event actions for ${event.name}`}\n onView={() => navigate(`/events/${event.id}`)}\n onEdit={() => navigate(`/events/${event.id}/edit`)}\n />\n </div>\n </div>\n </GlassCard>\n );\n })}\n\n <Pagination\n offset={pagination.offset}\n limit={pagination.limit}\n loadedCount={rows.length}\n total={total}\n onPrev={pagination.prevPage}\n onNext={pagination.nextPage}\n itemLabel=\"events\"\n loading={loading}\n />\n </div>\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 'Open an event and define ticket types so people can register.'\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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"}
@@ -0,0 +1,19 @@
1
+ interface DetectedBarcode {
2
+ rawValue: string;
3
+ }
4
+ interface BarcodeDetectorLike {
5
+ detect(source: CanvasImageSource): Promise<DetectedBarcode[]>;
6
+ }
7
+ interface BarcodeDetectorCtor {
8
+ new (options?: {
9
+ formats: string[];
10
+ }): BarcodeDetectorLike;
11
+ }
12
+ declare global {
13
+ interface Window {
14
+ BarcodeDetector?: BarcodeDetectorCtor;
15
+ }
16
+ }
17
+ export default function KioskPage(): import("react/jsx-runtime").JSX.Element;
18
+ export {};
19
+ //# sourceMappingURL=KioskPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KioskPage.d.ts","sourceRoot":"","sources":["../../../../src/eventfullymanaged/pages/modules/KioskPage.tsx"],"names":[],"mappings":"AA4DA,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,UAAU,mBAAmB;IAC3B,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;CAC/D;AACD,UAAU,mBAAmB;IAC3B,KAAK,OAAO,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,mBAAmB,CAAC;CAC5D;AACD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,eAAe,CAAC,EAAE,mBAAmB,CAAC;KACvC;CACF;AA6xBD,MAAM,CAAC,OAAO,UAAU,SAAS,4CA0XhC"}