@burdenoff/microfe-eventfullymanaged 2026.704.5 → 2026.704.7

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 (856) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +20 -0
  2. package/dist/eventfullymanaged/api/eventApi.js +140 -100
  3. package/dist/eventfullymanaged/api/eventApi.js.map +1 -1
  4. package/dist/eventfullymanaged/components/EventCharts.js +260 -0
  5. package/dist/eventfullymanaged/components/EventCharts.js.map +1 -0
  6. package/dist/eventfullymanaged/components/index.js +1 -0
  7. package/dist/eventfullymanaged/lib/format.js +27 -0
  8. package/dist/eventfullymanaged/lib/format.js.map +1 -0
  9. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js +222 -78
  10. package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js.map +1 -1
  11. package/dist/eventfullymanaged/pages/events/EventDetailPage.js +689 -328
  12. package/dist/eventfullymanaged/pages/events/EventDetailPage.js.map +1 -1
  13. package/dist/eventfullymanaged/pages/events/EventFormPage.js +14 -0
  14. package/dist/eventfullymanaged/pages/events/EventFormPage.js.map +1 -1
  15. package/dist/eventfullymanaged/pages/exhibitors/ExhibitorsPage.js +240 -122
  16. package/dist/eventfullymanaged/pages/exhibitors/ExhibitorsPage.js.map +1 -1
  17. package/dist/eventfullymanaged/pages/leads/LeadCaptureDialog.js +60 -50
  18. package/dist/eventfullymanaged/pages/leads/LeadCaptureDialog.js.map +1 -1
  19. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js +318 -108
  20. package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js.map +1 -1
  21. package/dist/eventfullymanaged/pages/modules/CommunicationPage.js +288 -204
  22. package/dist/eventfullymanaged/pages/modules/CommunicationPage.js.map +1 -1
  23. package/dist/eventfullymanaged/pages/modules/EventsPage.js +206 -96
  24. package/dist/eventfullymanaged/pages/modules/EventsPage.js.map +1 -1
  25. package/dist/eventfullymanaged/pages/modules/KioskPage.js +597 -397
  26. package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
  27. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +349 -148
  28. package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
  29. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +343 -213
  30. package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
  31. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js +147 -100
  32. package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js.map +1 -1
  33. package/dist/eventfullymanaged/pages/registration/AttendeeFormPage.js +25 -2
  34. package/dist/eventfullymanaged/pages/registration/AttendeeFormPage.js.map +1 -1
  35. package/dist/eventfullymanaged/pages/registration/PromoCodeFormPage.js +134 -76
  36. package/dist/eventfullymanaged/pages/registration/PromoCodeFormPage.js.map +1 -1
  37. package/dist/eventfullymanaged/pages/registration/RegisterAttendeePage.js +661 -305
  38. package/dist/eventfullymanaged/pages/registration/RegisterAttendeePage.js.map +1 -1
  39. package/dist/eventfullymanaged/pages/speakers/SpeakersPage.js +199 -69
  40. package/dist/eventfullymanaged/pages/speakers/SpeakersPage.js.map +1 -1
  41. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js +254 -135
  42. package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js.map +1 -1
  43. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js +345 -112
  44. package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js.map +1 -1
  45. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js +73 -45
  46. package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js.map +1 -1
  47. package/dist/eventfullymanaged/pages/venues/VenueFormPage.js +101 -100
  48. package/dist/eventfullymanaged/pages/venues/VenueFormPage.js.map +1 -1
  49. package/dist/eventfullymanaged/pages/venues/VenueListPage.js +147 -104
  50. package/dist/eventfullymanaged/pages/venues/VenueListPage.js.map +1 -1
  51. package/dist/node_modules/clsx/dist/clsx.js +18 -0
  52. package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
  53. package/dist/node_modules/d3-array/src/ascending.js +8 -0
  54. package/dist/node_modules/d3-array/src/ascending.js.map +1 -0
  55. package/dist/node_modules/d3-array/src/bisect.js +10 -0
  56. package/dist/node_modules/d3-array/src/bisect.js.map +1 -0
  57. package/dist/node_modules/d3-array/src/bisector.js +43 -0
  58. package/dist/node_modules/d3-array/src/bisector.js.map +1 -0
  59. package/dist/node_modules/d3-array/src/descending.js +8 -0
  60. package/dist/node_modules/d3-array/src/descending.js.map +1 -0
  61. package/dist/node_modules/d3-array/src/max.js +14 -0
  62. package/dist/node_modules/d3-array/src/max.js.map +1 -0
  63. package/dist/node_modules/d3-array/src/min.js +14 -0
  64. package/dist/node_modules/d3-array/src/min.js.map +1 -0
  65. package/dist/node_modules/d3-array/src/number.js +15 -0
  66. package/dist/node_modules/d3-array/src/number.js.map +1 -0
  67. package/dist/node_modules/d3-array/src/quantile.js +25 -0
  68. package/dist/node_modules/d3-array/src/quantile.js.map +1 -0
  69. package/dist/node_modules/d3-array/src/quickselect.js +26 -0
  70. package/dist/node_modules/d3-array/src/quickselect.js.map +1 -0
  71. package/dist/node_modules/d3-array/src/range.js +10 -0
  72. package/dist/node_modules/d3-array/src/range.js.map +1 -0
  73. package/dist/node_modules/d3-array/src/sort.js +17 -0
  74. package/dist/node_modules/d3-array/src/sort.js.map +1 -0
  75. package/dist/node_modules/d3-array/src/ticks.js +34 -0
  76. package/dist/node_modules/d3-array/src/ticks.js.map +1 -0
  77. package/dist/node_modules/d3-color/src/color.js +291 -0
  78. package/dist/node_modules/d3-color/src/color.js.map +1 -0
  79. package/dist/node_modules/d3-color/src/define.js +13 -0
  80. package/dist/node_modules/d3-color/src/define.js.map +1 -0
  81. package/dist/node_modules/d3-format/src/defaultLocale.js +15 -0
  82. package/dist/node_modules/d3-format/src/defaultLocale.js.map +1 -0
  83. package/dist/node_modules/d3-format/src/exponent.js +9 -0
  84. package/dist/node_modules/d3-format/src/exponent.js.map +1 -0
  85. package/dist/node_modules/d3-format/src/formatDecimal.js +13 -0
  86. package/dist/node_modules/d3-format/src/formatDecimal.js.map +1 -0
  87. package/dist/node_modules/d3-format/src/formatGroup.js +11 -0
  88. package/dist/node_modules/d3-format/src/formatGroup.js.map +1 -0
  89. package/dist/node_modules/d3-format/src/formatNumerals.js +12 -0
  90. package/dist/node_modules/d3-format/src/formatNumerals.js.map +1 -0
  91. package/dist/node_modules/d3-format/src/formatPrefixAuto.js +13 -0
  92. package/dist/node_modules/d3-format/src/formatPrefixAuto.js.map +1 -0
  93. package/dist/node_modules/d3-format/src/formatRounded.js +12 -0
  94. package/dist/node_modules/d3-format/src/formatRounded.js.map +1 -0
  95. package/dist/node_modules/d3-format/src/formatSpecifier.js +29 -0
  96. package/dist/node_modules/d3-format/src/formatSpecifier.js.map +1 -0
  97. package/dist/node_modules/d3-format/src/formatTrim.js +20 -0
  98. package/dist/node_modules/d3-format/src/formatTrim.js.map +1 -0
  99. package/dist/node_modules/d3-format/src/formatTypes.js +23 -0
  100. package/dist/node_modules/d3-format/src/formatTypes.js.map +1 -0
  101. package/dist/node_modules/d3-format/src/identity.js +8 -0
  102. package/dist/node_modules/d3-format/src/identity.js.map +1 -0
  103. package/dist/node_modules/d3-format/src/locale.js +86 -0
  104. package/dist/node_modules/d3-format/src/locale.js.map +1 -0
  105. package/dist/node_modules/d3-format/src/precisionFixed.js +9 -0
  106. package/dist/node_modules/d3-format/src/precisionFixed.js.map +1 -0
  107. package/dist/node_modules/d3-format/src/precisionPrefix.js +9 -0
  108. package/dist/node_modules/d3-format/src/precisionPrefix.js.map +1 -0
  109. package/dist/node_modules/d3-format/src/precisionRound.js +9 -0
  110. package/dist/node_modules/d3-format/src/precisionRound.js.map +1 -0
  111. package/dist/node_modules/d3-interpolate/src/array.js +15 -0
  112. package/dist/node_modules/d3-interpolate/src/array.js.map +1 -0
  113. package/dist/node_modules/d3-interpolate/src/basis.js +16 -0
  114. package/dist/node_modules/d3-interpolate/src/basis.js.map +1 -0
  115. package/dist/node_modules/d3-interpolate/src/basisClosed.js +13 -0
  116. package/dist/node_modules/d3-interpolate/src/basisClosed.js.map +1 -0
  117. package/dist/node_modules/d3-interpolate/src/color.js +25 -0
  118. package/dist/node_modules/d3-interpolate/src/color.js.map +1 -0
  119. package/dist/node_modules/d3-interpolate/src/constant.js +6 -0
  120. package/dist/node_modules/d3-interpolate/src/constant.js.map +1 -0
  121. package/dist/node_modules/d3-interpolate/src/date.js +11 -0
  122. package/dist/node_modules/d3-interpolate/src/date.js.map +1 -0
  123. package/dist/node_modules/d3-interpolate/src/number.js +10 -0
  124. package/dist/node_modules/d3-interpolate/src/number.js.map +1 -0
  125. package/dist/node_modules/d3-interpolate/src/numberArray.js +16 -0
  126. package/dist/node_modules/d3-interpolate/src/numberArray.js.map +1 -0
  127. package/dist/node_modules/d3-interpolate/src/object.js +14 -0
  128. package/dist/node_modules/d3-interpolate/src/object.js.map +1 -0
  129. package/dist/node_modules/d3-interpolate/src/piecewise.js +14 -0
  130. package/dist/node_modules/d3-interpolate/src/piecewise.js.map +1 -0
  131. package/dist/node_modules/d3-interpolate/src/rgb.js +19 -0
  132. package/dist/node_modules/d3-interpolate/src/rgb.js.map +1 -0
  133. package/dist/node_modules/d3-interpolate/src/round.js +10 -0
  134. package/dist/node_modules/d3-interpolate/src/round.js.map +1 -0
  135. package/dist/node_modules/d3-interpolate/src/string.js +28 -0
  136. package/dist/node_modules/d3-interpolate/src/string.js.map +1 -0
  137. package/dist/node_modules/d3-interpolate/src/value.js +18 -0
  138. package/dist/node_modules/d3-interpolate/src/value.js.map +1 -0
  139. package/dist/node_modules/d3-path/src/path.js +65 -0
  140. package/dist/node_modules/d3-path/src/path.js.map +1 -0
  141. package/dist/node_modules/d3-scale/src/band.js +52 -0
  142. package/dist/node_modules/d3-scale/src/band.js.map +1 -0
  143. package/dist/node_modules/d3-scale/src/constant.js +10 -0
  144. package/dist/node_modules/d3-scale/src/constant.js.map +1 -0
  145. package/dist/node_modules/d3-scale/src/continuous.js +73 -0
  146. package/dist/node_modules/d3-scale/src/continuous.js.map +1 -0
  147. package/dist/node_modules/d3-scale/src/diverging.js +82 -0
  148. package/dist/node_modules/d3-scale/src/diverging.js.map +1 -0
  149. package/dist/node_modules/d3-scale/src/identity.js +20 -0
  150. package/dist/node_modules/d3-scale/src/identity.js.map +1 -0
  151. package/dist/node_modules/d3-scale/src/init.js +29 -0
  152. package/dist/node_modules/d3-scale/src/init.js.map +1 -0
  153. package/dist/node_modules/d3-scale/src/linear.js +36 -0
  154. package/dist/node_modules/d3-scale/src/linear.js.map +1 -0
  155. package/dist/node_modules/d3-scale/src/log.js +77 -0
  156. package/dist/node_modules/d3-scale/src/log.js.map +1 -0
  157. package/dist/node_modules/d3-scale/src/nice.js +10 -0
  158. package/dist/node_modules/d3-scale/src/nice.js.map +1 -0
  159. package/dist/node_modules/d3-scale/src/number.js +8 -0
  160. package/dist/node_modules/d3-scale/src/number.js.map +1 -0
  161. package/dist/node_modules/d3-scale/src/ordinal.js +31 -0
  162. package/dist/node_modules/d3-scale/src/ordinal.js.map +1 -0
  163. package/dist/node_modules/d3-scale/src/pow.js +37 -0
  164. package/dist/node_modules/d3-scale/src/pow.js.map +1 -0
  165. package/dist/node_modules/d3-scale/src/quantile.js +37 -0
  166. package/dist/node_modules/d3-scale/src/quantile.js.map +1 -0
  167. package/dist/node_modules/d3-scale/src/quantize.js +33 -0
  168. package/dist/node_modules/d3-scale/src/quantize.js.map +1 -0
  169. package/dist/node_modules/d3-scale/src/radial.js +39 -0
  170. package/dist/node_modules/d3-scale/src/radial.js.map +1 -0
  171. package/dist/node_modules/d3-scale/src/sequential.js +67 -0
  172. package/dist/node_modules/d3-scale/src/sequential.js.map +1 -0
  173. package/dist/node_modules/d3-scale/src/sequentialQuantile.js +30 -0
  174. package/dist/node_modules/d3-scale/src/sequentialQuantile.js.map +1 -0
  175. package/dist/node_modules/d3-scale/src/symlog.js +30 -0
  176. package/dist/node_modules/d3-scale/src/symlog.js.map +1 -0
  177. package/dist/node_modules/d3-scale/src/threshold.js +25 -0
  178. package/dist/node_modules/d3-scale/src/threshold.js.map +1 -0
  179. package/dist/node_modules/d3-scale/src/tickFormat.js +31 -0
  180. package/dist/node_modules/d3-scale/src/tickFormat.js.map +1 -0
  181. package/dist/node_modules/d3-scale/src/time.js +47 -0
  182. package/dist/node_modules/d3-scale/src/time.js.map +1 -0
  183. package/dist/node_modules/d3-scale/src/utcTime.js +19 -0
  184. package/dist/node_modules/d3-scale/src/utcTime.js.map +1 -0
  185. package/dist/node_modules/d3-shape/src/area.js +55 -0
  186. package/dist/node_modules/d3-shape/src/area.js.map +1 -0
  187. package/dist/node_modules/d3-shape/src/array.js +8 -0
  188. package/dist/node_modules/d3-shape/src/array.js.map +1 -0
  189. package/dist/node_modules/d3-shape/src/constant.js +10 -0
  190. package/dist/node_modules/d3-shape/src/constant.js.map +1 -0
  191. package/dist/node_modules/d3-shape/src/curve/basis.js +49 -0
  192. package/dist/node_modules/d3-shape/src/curve/basis.js.map +1 -0
  193. package/dist/node_modules/d3-shape/src/curve/basisClosed.js +50 -0
  194. package/dist/node_modules/d3-shape/src/curve/basisClosed.js.map +1 -0
  195. package/dist/node_modules/d3-shape/src/curve/basisOpen.js +46 -0
  196. package/dist/node_modules/d3-shape/src/curve/basisOpen.js.map +1 -0
  197. package/dist/node_modules/d3-shape/src/curve/bump.js +40 -0
  198. package/dist/node_modules/d3-shape/src/curve/bump.js.map +1 -0
  199. package/dist/node_modules/d3-shape/src/curve/linear.js +36 -0
  200. package/dist/node_modules/d3-shape/src/curve/linear.js.map +1 -0
  201. package/dist/node_modules/d3-shape/src/curve/linearClosed.js +25 -0
  202. package/dist/node_modules/d3-shape/src/curve/linearClosed.js.map +1 -0
  203. package/dist/node_modules/d3-shape/src/curve/monotone.js +94 -0
  204. package/dist/node_modules/d3-shape/src/curve/monotone.js.map +1 -0
  205. package/dist/node_modules/d3-shape/src/curve/natural.js +39 -0
  206. package/dist/node_modules/d3-shape/src/curve/natural.js.map +1 -0
  207. package/dist/node_modules/d3-shape/src/curve/step.js +47 -0
  208. package/dist/node_modules/d3-shape/src/curve/step.js.map +1 -0
  209. package/dist/node_modules/d3-shape/src/line.js +30 -0
  210. package/dist/node_modules/d3-shape/src/line.js.map +1 -0
  211. package/dist/node_modules/d3-shape/src/math.js +8 -0
  212. package/dist/node_modules/d3-shape/src/math.js.map +1 -0
  213. package/dist/node_modules/d3-shape/src/noop.js +6 -0
  214. package/dist/node_modules/d3-shape/src/noop.js.map +1 -0
  215. package/dist/node_modules/d3-shape/src/offset/expand.js +15 -0
  216. package/dist/node_modules/d3-shape/src/offset/expand.js.map +1 -0
  217. package/dist/node_modules/d3-shape/src/offset/none.js +8 -0
  218. package/dist/node_modules/d3-shape/src/offset/none.js.map +1 -0
  219. package/dist/node_modules/d3-shape/src/offset/silhouette.js +15 -0
  220. package/dist/node_modules/d3-shape/src/offset/silhouette.js.map +1 -0
  221. package/dist/node_modules/d3-shape/src/offset/wiggle.js +21 -0
  222. package/dist/node_modules/d3-shape/src/offset/wiggle.js.map +1 -0
  223. package/dist/node_modules/d3-shape/src/order/none.js +9 -0
  224. package/dist/node_modules/d3-shape/src/order/none.js.map +1 -0
  225. package/dist/node_modules/d3-shape/src/path.js +19 -0
  226. package/dist/node_modules/d3-shape/src/path.js.map +1 -0
  227. package/dist/node_modules/d3-shape/src/point.js +11 -0
  228. package/dist/node_modules/d3-shape/src/point.js.map +1 -0
  229. package/dist/node_modules/d3-shape/src/stack.js +34 -0
  230. package/dist/node_modules/d3-shape/src/stack.js.map +1 -0
  231. package/dist/node_modules/d3-shape/src/symbol/circle.js +10 -0
  232. package/dist/node_modules/d3-shape/src/symbol/circle.js.map +1 -0
  233. package/dist/node_modules/d3-shape/src/symbol/cross.js +10 -0
  234. package/dist/node_modules/d3-shape/src/symbol/cross.js.map +1 -0
  235. package/dist/node_modules/d3-shape/src/symbol/diamond.js +10 -0
  236. package/dist/node_modules/d3-shape/src/symbol/diamond.js.map +1 -0
  237. package/dist/node_modules/d3-shape/src/symbol/square.js +10 -0
  238. package/dist/node_modules/d3-shape/src/symbol/square.js.map +1 -0
  239. package/dist/node_modules/d3-shape/src/symbol/star.js +15 -0
  240. package/dist/node_modules/d3-shape/src/symbol/star.js.map +1 -0
  241. package/dist/node_modules/d3-shape/src/symbol/triangle.js +10 -0
  242. package/dist/node_modules/d3-shape/src/symbol/triangle.js.map +1 -0
  243. package/dist/node_modules/d3-shape/src/symbol/wye.js +10 -0
  244. package/dist/node_modules/d3-shape/src/symbol/wye.js.map +1 -0
  245. package/dist/node_modules/d3-shape/src/symbol.js +23 -0
  246. package/dist/node_modules/d3-shape/src/symbol.js.map +1 -0
  247. package/dist/node_modules/d3-time/src/day.js +21 -0
  248. package/dist/node_modules/d3-time/src/day.js.map +1 -0
  249. package/dist/node_modules/d3-time/src/duration.js +6 -0
  250. package/dist/node_modules/d3-time/src/duration.js.map +1 -0
  251. package/dist/node_modules/d3-time/src/hour.js +19 -0
  252. package/dist/node_modules/d3-time/src/hour.js.map +1 -0
  253. package/dist/node_modules/d3-time/src/interval.js +28 -0
  254. package/dist/node_modules/d3-time/src/interval.js.map +1 -0
  255. package/dist/node_modules/d3-time/src/millisecond.js +14 -0
  256. package/dist/node_modules/d3-time/src/millisecond.js.map +1 -0
  257. package/dist/node_modules/d3-time/src/minute.js +19 -0
  258. package/dist/node_modules/d3-time/src/minute.js.map +1 -0
  259. package/dist/node_modules/d3-time/src/month.js +18 -0
  260. package/dist/node_modules/d3-time/src/month.js.map +1 -0
  261. package/dist/node_modules/d3-time/src/second.js +13 -0
  262. package/dist/node_modules/d3-time/src/second.js.map +1 -0
  263. package/dist/node_modules/d3-time/src/ticks.js +125 -0
  264. package/dist/node_modules/d3-time/src/ticks.js.map +1 -0
  265. package/dist/node_modules/d3-time/src/week.js +25 -0
  266. package/dist/node_modules/d3-time/src/week.js.map +1 -0
  267. package/dist/node_modules/d3-time/src/year.js +26 -0
  268. package/dist/node_modules/d3-time/src/year.js.map +1 -0
  269. package/dist/node_modules/d3-time-format/src/defaultLocale.js +62 -0
  270. package/dist/node_modules/d3-time-format/src/defaultLocale.js.map +1 -0
  271. package/dist/node_modules/d3-time-format/src/locale.js +490 -0
  272. package/dist/node_modules/d3-time-format/src/locale.js.map +1 -0
  273. package/dist/node_modules/decimal.js-light/decimal.js +378 -0
  274. package/dist/node_modules/decimal.js-light/decimal.js.map +1 -0
  275. package/dist/node_modules/eventemitter3/index.js +95 -0
  276. package/dist/node_modules/eventemitter3/index.js.map +1 -0
  277. package/dist/node_modules/fast-equals/dist/es/index.js +267 -0
  278. package/dist/node_modules/fast-equals/dist/es/index.js.map +1 -0
  279. package/dist/node_modules/internmap/src/index.js +40 -0
  280. package/dist/node_modules/internmap/src/index.js.map +1 -0
  281. package/dist/node_modules/lodash/_DataView.js +12 -0
  282. package/dist/node_modules/lodash/_DataView.js.map +1 -0
  283. package/dist/node_modules/lodash/_Hash.js +23 -0
  284. package/dist/node_modules/lodash/_Hash.js.map +1 -0
  285. package/dist/node_modules/lodash/_ListCache.js +23 -0
  286. package/dist/node_modules/lodash/_ListCache.js.map +1 -0
  287. package/dist/node_modules/lodash/_Map.js +12 -0
  288. package/dist/node_modules/lodash/_Map.js.map +1 -0
  289. package/dist/node_modules/lodash/_MapCache.js +23 -0
  290. package/dist/node_modules/lodash/_MapCache.js.map +1 -0
  291. package/dist/node_modules/lodash/_Promise.js +12 -0
  292. package/dist/node_modules/lodash/_Promise.js.map +1 -0
  293. package/dist/node_modules/lodash/_Set.js +12 -0
  294. package/dist/node_modules/lodash/_Set.js.map +1 -0
  295. package/dist/node_modules/lodash/_SetCache.js +18 -0
  296. package/dist/node_modules/lodash/_SetCache.js.map +1 -0
  297. package/dist/node_modules/lodash/_Stack.js +20 -0
  298. package/dist/node_modules/lodash/_Stack.js.map +1 -0
  299. package/dist/node_modules/lodash/_Symbol.js +11 -0
  300. package/dist/node_modules/lodash/_Symbol.js.map +1 -0
  301. package/dist/node_modules/lodash/_Uint8Array.js +11 -0
  302. package/dist/node_modules/lodash/_Uint8Array.js.map +1 -0
  303. package/dist/node_modules/lodash/_WeakMap.js +12 -0
  304. package/dist/node_modules/lodash/_WeakMap.js.map +1 -0
  305. package/dist/node_modules/lodash/_apply.js +19 -0
  306. package/dist/node_modules/lodash/_apply.js.map +1 -0
  307. package/dist/node_modules/lodash/_arrayEvery.js +14 -0
  308. package/dist/node_modules/lodash/_arrayEvery.js.map +1 -0
  309. package/dist/node_modules/lodash/_arrayFilter.js +17 -0
  310. package/dist/node_modules/lodash/_arrayFilter.js.map +1 -0
  311. package/dist/node_modules/lodash/_arrayIncludes.js +15 -0
  312. package/dist/node_modules/lodash/_arrayIncludes.js.map +1 -0
  313. package/dist/node_modules/lodash/_arrayIncludesWith.js +14 -0
  314. package/dist/node_modules/lodash/_arrayIncludesWith.js.map +1 -0
  315. package/dist/node_modules/lodash/_arrayLikeKeys.js +22 -0
  316. package/dist/node_modules/lodash/_arrayLikeKeys.js.map +1 -0
  317. package/dist/node_modules/lodash/_arrayMap.js +14 -0
  318. package/dist/node_modules/lodash/_arrayMap.js.map +1 -0
  319. package/dist/node_modules/lodash/_arrayPush.js +14 -0
  320. package/dist/node_modules/lodash/_arrayPush.js.map +1 -0
  321. package/dist/node_modules/lodash/_arraySome.js +14 -0
  322. package/dist/node_modules/lodash/_arraySome.js.map +1 -0
  323. package/dist/node_modules/lodash/_asciiToArray.js +13 -0
  324. package/dist/node_modules/lodash/_asciiToArray.js.map +1 -0
  325. package/dist/node_modules/lodash/_assocIndexOf.js +16 -0
  326. package/dist/node_modules/lodash/_assocIndexOf.js.map +1 -0
  327. package/dist/node_modules/lodash/_baseAssignValue.js +20 -0
  328. package/dist/node_modules/lodash/_baseAssignValue.js.map +1 -0
  329. package/dist/node_modules/lodash/_baseEach.js +13 -0
  330. package/dist/node_modules/lodash/_baseEach.js.map +1 -0
  331. package/dist/node_modules/lodash/_baseEvery.js +18 -0
  332. package/dist/node_modules/lodash/_baseEvery.js.map +1 -0
  333. package/dist/node_modules/lodash/_baseExtremum.js +19 -0
  334. package/dist/node_modules/lodash/_baseExtremum.js.map +1 -0
  335. package/dist/node_modules/lodash/_baseFindIndex.js +14 -0
  336. package/dist/node_modules/lodash/_baseFindIndex.js.map +1 -0
  337. package/dist/node_modules/lodash/_baseFlatten.js +21 -0
  338. package/dist/node_modules/lodash/_baseFlatten.js.map +1 -0
  339. package/dist/node_modules/lodash/_baseFor.js +11 -0
  340. package/dist/node_modules/lodash/_baseFor.js.map +1 -0
  341. package/dist/node_modules/lodash/_baseForOwn.js +16 -0
  342. package/dist/node_modules/lodash/_baseForOwn.js.map +1 -0
  343. package/dist/node_modules/lodash/_baseGet.js +18 -0
  344. package/dist/node_modules/lodash/_baseGet.js.map +1 -0
  345. package/dist/node_modules/lodash/_baseGetAllKeys.js +17 -0
  346. package/dist/node_modules/lodash/_baseGetAllKeys.js.map +1 -0
  347. package/dist/node_modules/lodash/_baseGetTag.js +17 -0
  348. package/dist/node_modules/lodash/_baseGetTag.js.map +1 -0
  349. package/dist/node_modules/lodash/_baseGt.js +13 -0
  350. package/dist/node_modules/lodash/_baseGt.js.map +1 -0
  351. package/dist/node_modules/lodash/_baseHasIn.js +13 -0
  352. package/dist/node_modules/lodash/_baseHasIn.js.map +1 -0
  353. package/dist/node_modules/lodash/_baseIndexOf.js +17 -0
  354. package/dist/node_modules/lodash/_baseIndexOf.js.map +1 -0
  355. package/dist/node_modules/lodash/_baseIsArguments.js +16 -0
  356. package/dist/node_modules/lodash/_baseIsArguments.js.map +1 -0
  357. package/dist/node_modules/lodash/_baseIsEqual.js +16 -0
  358. package/dist/node_modules/lodash/_baseIsEqual.js.map +1 -0
  359. package/dist/node_modules/lodash/_baseIsEqualDeep.js +37 -0
  360. package/dist/node_modules/lodash/_baseIsEqualDeep.js.map +1 -0
  361. package/dist/node_modules/lodash/_baseIsMatch.js +33 -0
  362. package/dist/node_modules/lodash/_baseIsMatch.js.map +1 -0
  363. package/dist/node_modules/lodash/_baseIsNaN.js +13 -0
  364. package/dist/node_modules/lodash/_baseIsNaN.js.map +1 -0
  365. package/dist/node_modules/lodash/_baseIsNative.js +18 -0
  366. package/dist/node_modules/lodash/_baseIsNative.js.map +1 -0
  367. package/dist/node_modules/lodash/_baseIsTypedArray.js +18 -0
  368. package/dist/node_modules/lodash/_baseIsTypedArray.js.map +1 -0
  369. package/dist/node_modules/lodash/_baseIteratee.js +19 -0
  370. package/dist/node_modules/lodash/_baseIteratee.js.map +1 -0
  371. package/dist/node_modules/lodash/_baseKeys.js +19 -0
  372. package/dist/node_modules/lodash/_baseKeys.js.map +1 -0
  373. package/dist/node_modules/lodash/_baseLt.js +13 -0
  374. package/dist/node_modules/lodash/_baseLt.js.map +1 -0
  375. package/dist/node_modules/lodash/_baseMap.js +19 -0
  376. package/dist/node_modules/lodash/_baseMap.js.map +1 -0
  377. package/dist/node_modules/lodash/_baseMatches.js +20 -0
  378. package/dist/node_modules/lodash/_baseMatches.js.map +1 -0
  379. package/dist/node_modules/lodash/_baseMatchesProperty.js +24 -0
  380. package/dist/node_modules/lodash/_baseMatchesProperty.js.map +1 -0
  381. package/dist/node_modules/lodash/_baseOrderBy.js +39 -0
  382. package/dist/node_modules/lodash/_baseOrderBy.js.map +1 -0
  383. package/dist/node_modules/lodash/_baseProperty.js +15 -0
  384. package/dist/node_modules/lodash/_baseProperty.js.map +1 -0
  385. package/dist/node_modules/lodash/_basePropertyDeep.js +17 -0
  386. package/dist/node_modules/lodash/_basePropertyDeep.js.map +1 -0
  387. package/dist/node_modules/lodash/_baseRange.js +15 -0
  388. package/dist/node_modules/lodash/_baseRange.js.map +1 -0
  389. package/dist/node_modules/lodash/_baseRest.js +17 -0
  390. package/dist/node_modules/lodash/_baseRest.js.map +1 -0
  391. package/dist/node_modules/lodash/_baseSetToString.js +21 -0
  392. package/dist/node_modules/lodash/_baseSetToString.js.map +1 -0
  393. package/dist/node_modules/lodash/_baseSlice.js +16 -0
  394. package/dist/node_modules/lodash/_baseSlice.js.map +1 -0
  395. package/dist/node_modules/lodash/_baseSome.js +18 -0
  396. package/dist/node_modules/lodash/_baseSome.js.map +1 -0
  397. package/dist/node_modules/lodash/_baseSortBy.js +15 -0
  398. package/dist/node_modules/lodash/_baseSortBy.js.map +1 -0
  399. package/dist/node_modules/lodash/_baseTimes.js +14 -0
  400. package/dist/node_modules/lodash/_baseTimes.js.map +1 -0
  401. package/dist/node_modules/lodash/_baseToString.js +22 -0
  402. package/dist/node_modules/lodash/_baseToString.js.map +1 -0
  403. package/dist/node_modules/lodash/_baseTrim.js +15 -0
  404. package/dist/node_modules/lodash/_baseTrim.js.map +1 -0
  405. package/dist/node_modules/lodash/_baseUnary.js +15 -0
  406. package/dist/node_modules/lodash/_baseUnary.js.map +1 -0
  407. package/dist/node_modules/lodash/_baseUniq.js +34 -0
  408. package/dist/node_modules/lodash/_baseUniq.js.map +1 -0
  409. package/dist/node_modules/lodash/_cacheHas.js +13 -0
  410. package/dist/node_modules/lodash/_cacheHas.js.map +1 -0
  411. package/dist/node_modules/lodash/_castPath.js +18 -0
  412. package/dist/node_modules/lodash/_castPath.js.map +1 -0
  413. package/dist/node_modules/lodash/_castSlice.js +16 -0
  414. package/dist/node_modules/lodash/_castSlice.js.map +1 -0
  415. package/dist/node_modules/lodash/_compareAscending.js +20 -0
  416. package/dist/node_modules/lodash/_compareAscending.js.map +1 -0
  417. package/dist/node_modules/lodash/_compareMultiple.js +19 -0
  418. package/dist/node_modules/lodash/_compareMultiple.js.map +1 -0
  419. package/dist/node_modules/lodash/_coreJsData.js +11 -0
  420. package/dist/node_modules/lodash/_coreJsData.js.map +1 -0
  421. package/dist/node_modules/lodash/_createBaseEach.js +20 -0
  422. package/dist/node_modules/lodash/_createBaseEach.js.map +1 -0
  423. package/dist/node_modules/lodash/_createBaseFor.js +19 -0
  424. package/dist/node_modules/lodash/_createBaseFor.js.map +1 -0
  425. package/dist/node_modules/lodash/_createCaseFirst.js +22 -0
  426. package/dist/node_modules/lodash/_createCaseFirst.js.map +1 -0
  427. package/dist/node_modules/lodash/_createFind.js +27 -0
  428. package/dist/node_modules/lodash/_createFind.js.map +1 -0
  429. package/dist/node_modules/lodash/_createRange.js +19 -0
  430. package/dist/node_modules/lodash/_createRange.js.map +1 -0
  431. package/dist/node_modules/lodash/_createSet.js +16 -0
  432. package/dist/node_modules/lodash/_createSet.js.map +1 -0
  433. package/dist/node_modules/lodash/_defineProperty.js +17 -0
  434. package/dist/node_modules/lodash/_defineProperty.js.map +1 -0
  435. package/dist/node_modules/lodash/_equalArrays.js +42 -0
  436. package/dist/node_modules/lodash/_equalArrays.js.map +1 -0
  437. package/dist/node_modules/lodash/_equalByTag.js +42 -0
  438. package/dist/node_modules/lodash/_equalByTag.js.map +1 -0
  439. package/dist/node_modules/lodash/_equalObjects.js +39 -0
  440. package/dist/node_modules/lodash/_equalObjects.js.map +1 -0
  441. package/dist/node_modules/lodash/_freeGlobal.js +10 -0
  442. package/dist/node_modules/lodash/_freeGlobal.js.map +1 -0
  443. package/dist/node_modules/lodash/_getAllKeys.js +17 -0
  444. package/dist/node_modules/lodash/_getAllKeys.js.map +1 -0
  445. package/dist/node_modules/lodash/_getMapData.js +16 -0
  446. package/dist/node_modules/lodash/_getMapData.js.map +1 -0
  447. package/dist/node_modules/lodash/_getMatchData.js +24 -0
  448. package/dist/node_modules/lodash/_getMatchData.js.map +1 -0
  449. package/dist/node_modules/lodash/_getNative.js +17 -0
  450. package/dist/node_modules/lodash/_getNative.js.map +1 -0
  451. package/dist/node_modules/lodash/_getPrototype.js +11 -0
  452. package/dist/node_modules/lodash/_getPrototype.js.map +1 -0
  453. package/dist/node_modules/lodash/_getRawTag.js +21 -0
  454. package/dist/node_modules/lodash/_getRawTag.js.map +1 -0
  455. package/dist/node_modules/lodash/_getSymbols.js +17 -0
  456. package/dist/node_modules/lodash/_getSymbols.js.map +1 -0
  457. package/dist/node_modules/lodash/_getTag.js +28 -0
  458. package/dist/node_modules/lodash/_getTag.js.map +1 -0
  459. package/dist/node_modules/lodash/_getValue.js +13 -0
  460. package/dist/node_modules/lodash/_getValue.js.map +1 -0
  461. package/dist/node_modules/lodash/_hasPath.js +26 -0
  462. package/dist/node_modules/lodash/_hasPath.js.map +1 -0
  463. package/dist/node_modules/lodash/_hasUnicode.js +14 -0
  464. package/dist/node_modules/lodash/_hasUnicode.js.map +1 -0
  465. package/dist/node_modules/lodash/_hashClear.js +15 -0
  466. package/dist/node_modules/lodash/_hashClear.js.map +1 -0
  467. package/dist/node_modules/lodash/_hashDelete.js +14 -0
  468. package/dist/node_modules/lodash/_hashDelete.js.map +1 -0
  469. package/dist/node_modules/lodash/_hashGet.js +20 -0
  470. package/dist/node_modules/lodash/_hashGet.js.map +1 -0
  471. package/dist/node_modules/lodash/_hashHas.js +16 -0
  472. package/dist/node_modules/lodash/_hashHas.js.map +1 -0
  473. package/dist/node_modules/lodash/_hashSet.js +16 -0
  474. package/dist/node_modules/lodash/_hashSet.js.map +1 -0
  475. package/dist/node_modules/lodash/_isFlattenable.js +17 -0
  476. package/dist/node_modules/lodash/_isFlattenable.js.map +1 -0
  477. package/dist/node_modules/lodash/_isIndex.js +15 -0
  478. package/dist/node_modules/lodash/_isIndex.js.map +1 -0
  479. package/dist/node_modules/lodash/_isIterateeCall.js +20 -0
  480. package/dist/node_modules/lodash/_isIterateeCall.js.map +1 -0
  481. package/dist/node_modules/lodash/_isKey.js +18 -0
  482. package/dist/node_modules/lodash/_isKey.js.map +1 -0
  483. package/dist/node_modules/lodash/_isKeyable.js +14 -0
  484. package/dist/node_modules/lodash/_isKeyable.js.map +1 -0
  485. package/dist/node_modules/lodash/_isMasked.js +18 -0
  486. package/dist/node_modules/lodash/_isMasked.js.map +1 -0
  487. package/dist/node_modules/lodash/_isPrototype.js +15 -0
  488. package/dist/node_modules/lodash/_isPrototype.js.map +1 -0
  489. package/dist/node_modules/lodash/_isStrictComparable.js +15 -0
  490. package/dist/node_modules/lodash/_isStrictComparable.js.map +1 -0
  491. package/dist/node_modules/lodash/_listCacheClear.js +13 -0
  492. package/dist/node_modules/lodash/_listCacheClear.js.map +1 -0
  493. package/dist/node_modules/lodash/_listCacheDelete.js +16 -0
  494. package/dist/node_modules/lodash/_listCacheDelete.js.map +1 -0
  495. package/dist/node_modules/lodash/_listCacheGet.js +16 -0
  496. package/dist/node_modules/lodash/_listCacheGet.js.map +1 -0
  497. package/dist/node_modules/lodash/_listCacheHas.js +15 -0
  498. package/dist/node_modules/lodash/_listCacheHas.js.map +1 -0
  499. package/dist/node_modules/lodash/_listCacheSet.js +16 -0
  500. package/dist/node_modules/lodash/_listCacheSet.js.map +1 -0
  501. package/dist/node_modules/lodash/_mapCacheClear.js +21 -0
  502. package/dist/node_modules/lodash/_mapCacheClear.js.map +1 -0
  503. package/dist/node_modules/lodash/_mapCacheDelete.js +16 -0
  504. package/dist/node_modules/lodash/_mapCacheDelete.js.map +1 -0
  505. package/dist/node_modules/lodash/_mapCacheGet.js +15 -0
  506. package/dist/node_modules/lodash/_mapCacheGet.js.map +1 -0
  507. package/dist/node_modules/lodash/_mapCacheHas.js +15 -0
  508. package/dist/node_modules/lodash/_mapCacheHas.js.map +1 -0
  509. package/dist/node_modules/lodash/_mapCacheSet.js +16 -0
  510. package/dist/node_modules/lodash/_mapCacheSet.js.map +1 -0
  511. package/dist/node_modules/lodash/_mapToArray.js +16 -0
  512. package/dist/node_modules/lodash/_mapToArray.js.map +1 -0
  513. package/dist/node_modules/lodash/_matchesStrictComparable.js +15 -0
  514. package/dist/node_modules/lodash/_matchesStrictComparable.js.map +1 -0
  515. package/dist/node_modules/lodash/_memoizeCapped.js +18 -0
  516. package/dist/node_modules/lodash/_memoizeCapped.js.map +1 -0
  517. package/dist/node_modules/lodash/_nativeCreate.js +11 -0
  518. package/dist/node_modules/lodash/_nativeCreate.js.map +1 -0
  519. package/dist/node_modules/lodash/_nativeKeys.js +11 -0
  520. package/dist/node_modules/lodash/_nativeKeys.js.map +1 -0
  521. package/dist/node_modules/lodash/_nodeUtil.js +16 -0
  522. package/dist/node_modules/lodash/_nodeUtil.js.map +1 -0
  523. package/dist/node_modules/lodash/_objectToString.js +14 -0
  524. package/dist/node_modules/lodash/_objectToString.js.map +1 -0
  525. package/dist/node_modules/lodash/_overArg.js +15 -0
  526. package/dist/node_modules/lodash/_overArg.js.map +1 -0
  527. package/dist/node_modules/lodash/_overRest.js +20 -0
  528. package/dist/node_modules/lodash/_overRest.js.map +1 -0
  529. package/dist/node_modules/lodash/_root.js +12 -0
  530. package/dist/node_modules/lodash/_root.js.map +1 -0
  531. package/dist/node_modules/lodash/_setCacheAdd.js +14 -0
  532. package/dist/node_modules/lodash/_setCacheAdd.js.map +1 -0
  533. package/dist/node_modules/lodash/_setCacheHas.js +13 -0
  534. package/dist/node_modules/lodash/_setCacheHas.js.map +1 -0
  535. package/dist/node_modules/lodash/_setToArray.js +16 -0
  536. package/dist/node_modules/lodash/_setToArray.js.map +1 -0
  537. package/dist/node_modules/lodash/_setToString.js +13 -0
  538. package/dist/node_modules/lodash/_setToString.js.map +1 -0
  539. package/dist/node_modules/lodash/_shortOut.js +21 -0
  540. package/dist/node_modules/lodash/_shortOut.js.map +1 -0
  541. package/dist/node_modules/lodash/_stackClear.js +15 -0
  542. package/dist/node_modules/lodash/_stackClear.js.map +1 -0
  543. package/dist/node_modules/lodash/_stackDelete.js +14 -0
  544. package/dist/node_modules/lodash/_stackDelete.js.map +1 -0
  545. package/dist/node_modules/lodash/_stackGet.js +13 -0
  546. package/dist/node_modules/lodash/_stackGet.js.map +1 -0
  547. package/dist/node_modules/lodash/_stackHas.js +13 -0
  548. package/dist/node_modules/lodash/_stackHas.js.map +1 -0
  549. package/dist/node_modules/lodash/_stackSet.js +23 -0
  550. package/dist/node_modules/lodash/_stackSet.js.map +1 -0
  551. package/dist/node_modules/lodash/_strictIndexOf.js +14 -0
  552. package/dist/node_modules/lodash/_strictIndexOf.js.map +1 -0
  553. package/dist/node_modules/lodash/_stringToArray.js +17 -0
  554. package/dist/node_modules/lodash/_stringToArray.js.map +1 -0
  555. package/dist/node_modules/lodash/_stringToPath.js +17 -0
  556. package/dist/node_modules/lodash/_stringToPath.js.map +1 -0
  557. package/dist/node_modules/lodash/_toKey.js +17 -0
  558. package/dist/node_modules/lodash/_toKey.js.map +1 -0
  559. package/dist/node_modules/lodash/_toSource.js +22 -0
  560. package/dist/node_modules/lodash/_toSource.js.map +1 -0
  561. package/dist/node_modules/lodash/_trimmedEndIndex.js +15 -0
  562. package/dist/node_modules/lodash/_trimmedEndIndex.js.map +1 -0
  563. package/dist/node_modules/lodash/_unicodeToArray.js +24 -0
  564. package/dist/node_modules/lodash/_unicodeToArray.js.map +1 -0
  565. package/dist/node_modules/lodash/constant.js +15 -0
  566. package/dist/node_modules/lodash/constant.js.map +1 -0
  567. package/dist/node_modules/lodash/debounce.js +57 -0
  568. package/dist/node_modules/lodash/debounce.js.map +1 -0
  569. package/dist/node_modules/lodash/eq.js +13 -0
  570. package/dist/node_modules/lodash/eq.js.map +1 -0
  571. package/dist/node_modules/lodash/every.js +20 -0
  572. package/dist/node_modules/lodash/every.js.map +1 -0
  573. package/dist/node_modules/lodash/find.js +12 -0
  574. package/dist/node_modules/lodash/find.js.map +1 -0
  575. package/dist/node_modules/lodash/findIndex.js +20 -0
  576. package/dist/node_modules/lodash/findIndex.js.map +1 -0
  577. package/dist/node_modules/lodash/flatMap.js +16 -0
  578. package/dist/node_modules/lodash/flatMap.js.map +1 -0
  579. package/dist/node_modules/lodash/get.js +16 -0
  580. package/dist/node_modules/lodash/get.js.map +1 -0
  581. package/dist/node_modules/lodash/hasIn.js +16 -0
  582. package/dist/node_modules/lodash/hasIn.js.map +1 -0
  583. package/dist/node_modules/lodash/identity.js +13 -0
  584. package/dist/node_modules/lodash/identity.js.map +1 -0
  585. package/dist/node_modules/lodash/isArguments.js +17 -0
  586. package/dist/node_modules/lodash/isArguments.js.map +1 -0
  587. package/dist/node_modules/lodash/isArray.js +10 -0
  588. package/dist/node_modules/lodash/isArray.js.map +1 -0
  589. package/dist/node_modules/lodash/isArrayLike.js +16 -0
  590. package/dist/node_modules/lodash/isArrayLike.js.map +1 -0
  591. package/dist/node_modules/lodash/isBoolean.js +16 -0
  592. package/dist/node_modules/lodash/isBoolean.js.map +1 -0
  593. package/dist/node_modules/lodash/isBuffer.js +13 -0
  594. package/dist/node_modules/lodash/isBuffer.js.map +1 -0
  595. package/dist/node_modules/lodash/isEqual.js +15 -0
  596. package/dist/node_modules/lodash/isEqual.js.map +1 -0
  597. package/dist/node_modules/lodash/isFunction.js +18 -0
  598. package/dist/node_modules/lodash/isFunction.js.map +1 -0
  599. package/dist/node_modules/lodash/isLength.js +14 -0
  600. package/dist/node_modules/lodash/isLength.js.map +1 -0
  601. package/dist/node_modules/lodash/isNaN.js +15 -0
  602. package/dist/node_modules/lodash/isNaN.js.map +1 -0
  603. package/dist/node_modules/lodash/isNil.js +13 -0
  604. package/dist/node_modules/lodash/isNil.js.map +1 -0
  605. package/dist/node_modules/lodash/isNumber.js +16 -0
  606. package/dist/node_modules/lodash/isNumber.js.map +1 -0
  607. package/dist/node_modules/lodash/isObject.js +14 -0
  608. package/dist/node_modules/lodash/isObject.js.map +1 -0
  609. package/dist/node_modules/lodash/isObjectLike.js +13 -0
  610. package/dist/node_modules/lodash/isObjectLike.js.map +1 -0
  611. package/dist/node_modules/lodash/isPlainObject.js +21 -0
  612. package/dist/node_modules/lodash/isPlainObject.js.map +1 -0
  613. package/dist/node_modules/lodash/isString.js +17 -0
  614. package/dist/node_modules/lodash/isString.js.map +1 -0
  615. package/dist/node_modules/lodash/isSymbol.js +16 -0
  616. package/dist/node_modules/lodash/isSymbol.js.map +1 -0
  617. package/dist/node_modules/lodash/isTypedArray.js +14 -0
  618. package/dist/node_modules/lodash/isTypedArray.js.map +1 -0
  619. package/dist/node_modules/lodash/keys.js +17 -0
  620. package/dist/node_modules/lodash/keys.js.map +1 -0
  621. package/dist/node_modules/lodash/last.js +14 -0
  622. package/dist/node_modules/lodash/last.js.map +1 -0
  623. package/dist/node_modules/lodash/map.js +18 -0
  624. package/dist/node_modules/lodash/map.js.map +1 -0
  625. package/dist/node_modules/lodash/mapValues.js +20 -0
  626. package/dist/node_modules/lodash/mapValues.js.map +1 -0
  627. package/dist/node_modules/lodash/max.js +17 -0
  628. package/dist/node_modules/lodash/max.js.map +1 -0
  629. package/dist/node_modules/lodash/maxBy.js +17 -0
  630. package/dist/node_modules/lodash/maxBy.js.map +1 -0
  631. package/dist/node_modules/lodash/memoize.js +22 -0
  632. package/dist/node_modules/lodash/memoize.js.map +1 -0
  633. package/dist/node_modules/lodash/min.js +17 -0
  634. package/dist/node_modules/lodash/min.js.map +1 -0
  635. package/dist/node_modules/lodash/minBy.js +17 -0
  636. package/dist/node_modules/lodash/minBy.js.map +1 -0
  637. package/dist/node_modules/lodash/noop.js +11 -0
  638. package/dist/node_modules/lodash/noop.js.map +1 -0
  639. package/dist/node_modules/lodash/now.js +14 -0
  640. package/dist/node_modules/lodash/now.js.map +1 -0
  641. package/dist/node_modules/lodash/property.js +18 -0
  642. package/dist/node_modules/lodash/property.js.map +1 -0
  643. package/dist/node_modules/lodash/range.js +11 -0
  644. package/dist/node_modules/lodash/range.js.map +1 -0
  645. package/dist/node_modules/lodash/some.js +20 -0
  646. package/dist/node_modules/lodash/some.js.map +1 -0
  647. package/dist/node_modules/lodash/sortBy.js +19 -0
  648. package/dist/node_modules/lodash/sortBy.js.map +1 -0
  649. package/dist/node_modules/lodash/stubArray.js +13 -0
  650. package/dist/node_modules/lodash/stubArray.js.map +1 -0
  651. package/dist/node_modules/lodash/stubFalse.js +13 -0
  652. package/dist/node_modules/lodash/stubFalse.js.map +1 -0
  653. package/dist/node_modules/lodash/throttle.js +22 -0
  654. package/dist/node_modules/lodash/throttle.js.map +1 -0
  655. package/dist/node_modules/lodash/toFinite.js +15 -0
  656. package/dist/node_modules/lodash/toFinite.js.map +1 -0
  657. package/dist/node_modules/lodash/toInteger.js +16 -0
  658. package/dist/node_modules/lodash/toInteger.js.map +1 -0
  659. package/dist/node_modules/lodash/toNumber.js +26 -0
  660. package/dist/node_modules/lodash/toNumber.js.map +1 -0
  661. package/dist/node_modules/lodash/toString.js +15 -0
  662. package/dist/node_modules/lodash/toString.js.map +1 -0
  663. package/dist/node_modules/lodash/uniqBy.js +16 -0
  664. package/dist/node_modules/lodash/uniqBy.js.map +1 -0
  665. package/dist/node_modules/lodash/upperFirst.js +11 -0
  666. package/dist/node_modules/lodash/upperFirst.js.map +1 -0
  667. package/dist/node_modules/object-assign/index.js +41 -0
  668. package/dist/node_modules/object-assign/index.js.map +1 -0
  669. package/dist/node_modules/prop-types/checkPropTypes.js +46 -0
  670. package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -0
  671. package/dist/node_modules/prop-types/factoryWithThrowingShims.js +49 -0
  672. package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +1 -0
  673. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +272 -0
  674. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -0
  675. package/dist/node_modules/prop-types/index.js +16 -0
  676. package/dist/node_modules/prop-types/index.js.map +1 -0
  677. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +10 -0
  678. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +1 -0
  679. package/dist/node_modules/prop-types/lib/has.js +10 -0
  680. package/dist/node_modules/prop-types/lib/has.js.map +1 -0
  681. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +84 -0
  682. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -0
  683. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +64 -0
  684. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
  685. package/dist/node_modules/prop-types/node_modules/react-is/index.js +12 -0
  686. package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +1 -0
  687. package/dist/node_modules/react-is/cjs/react-is.development.js +87 -0
  688. package/dist/node_modules/react-is/cjs/react-is.development.js.map +1 -0
  689. package/dist/node_modules/react-is/cjs/react-is.production.min.js +65 -0
  690. package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
  691. package/dist/node_modules/react-is/index.js +12 -0
  692. package/dist/node_modules/react-is/index.js.map +1 -0
  693. package/dist/node_modules/react-smooth/es6/Animate.js +374 -0
  694. package/dist/node_modules/react-smooth/es6/Animate.js.map +1 -0
  695. package/dist/node_modules/react-smooth/es6/AnimateManager.js +73 -0
  696. package/dist/node_modules/react-smooth/es6/AnimateManager.js.map +1 -0
  697. package/dist/node_modules/react-smooth/es6/configUpdate.js +173 -0
  698. package/dist/node_modules/react-smooth/es6/configUpdate.js.map +1 -0
  699. package/dist/node_modules/react-smooth/es6/easing.js +152 -0
  700. package/dist/node_modules/react-smooth/es6/easing.js.map +1 -0
  701. package/dist/node_modules/react-smooth/es6/index.js +9 -0
  702. package/dist/node_modules/react-smooth/es6/index.js.map +1 -0
  703. package/dist/node_modules/react-smooth/es6/setRafTimeout.js +14 -0
  704. package/dist/node_modules/react-smooth/es6/setRafTimeout.js.map +1 -0
  705. package/dist/node_modules/react-smooth/es6/util.js +92 -0
  706. package/dist/node_modules/react-smooth/es6/util.js.map +1 -0
  707. package/dist/node_modules/recharts/es6/cartesian/Area.js +435 -0
  708. package/dist/node_modules/recharts/es6/cartesian/Area.js.map +1 -0
  709. package/dist/node_modules/recharts/es6/cartesian/Bar.js +387 -0
  710. package/dist/node_modules/recharts/es6/cartesian/Bar.js.map +1 -0
  711. package/dist/node_modules/recharts/es6/cartesian/Brush.js +499 -0
  712. package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +1 -0
  713. package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js +338 -0
  714. package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js.map +1 -0
  715. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js +243 -0
  716. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +1 -0
  717. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js +173 -0
  718. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +1 -0
  719. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js +178 -0
  720. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +1 -0
  721. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js +254 -0
  722. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +1 -0
  723. package/dist/node_modules/recharts/es6/cartesian/XAxis.js +144 -0
  724. package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +1 -0
  725. package/dist/node_modules/recharts/es6/cartesian/YAxis.js +143 -0
  726. package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +1 -0
  727. package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js +18 -0
  728. package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js.map +1 -0
  729. package/dist/node_modules/recharts/es6/cartesian/getTicks.js +121 -0
  730. package/dist/node_modules/recharts/es6/cartesian/getTicks.js.map +1 -0
  731. package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js +101 -0
  732. package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js.map +1 -0
  733. package/dist/node_modules/recharts/es6/chart/AreaChart.js +22 -0
  734. package/dist/node_modules/recharts/es6/chart/AreaChart.js.map +1 -0
  735. package/dist/node_modules/recharts/es6/chart/BarChart.js +24 -0
  736. package/dist/node_modules/recharts/es6/chart/BarChart.js.map +1 -0
  737. package/dist/node_modules/recharts/es6/chart/PieChart.js +34 -0
  738. package/dist/node_modules/recharts/es6/chart/PieChart.js.map +1 -0
  739. package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js +1245 -0
  740. package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js.map +1 -0
  741. package/dist/node_modules/recharts/es6/component/Cell.js +9 -0
  742. package/dist/node_modules/recharts/es6/component/Cell.js.map +1 -0
  743. package/dist/node_modules/recharts/es6/component/Cursor.js +93 -0
  744. package/dist/node_modules/recharts/es6/component/Cursor.js.map +1 -0
  745. package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js +237 -0
  746. package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js.map +1 -0
  747. package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js +171 -0
  748. package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js.map +1 -0
  749. package/dist/node_modules/recharts/es6/component/Label.js +353 -0
  750. package/dist/node_modules/recharts/es6/component/Label.js.map +1 -0
  751. package/dist/node_modules/recharts/es6/component/LabelList.js +166 -0
  752. package/dist/node_modules/recharts/es6/component/LabelList.js.map +1 -0
  753. package/dist/node_modules/recharts/es6/component/Legend.js +234 -0
  754. package/dist/node_modules/recharts/es6/component/Legend.js.map +1 -0
  755. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js +187 -0
  756. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +1 -0
  757. package/dist/node_modules/recharts/es6/component/Text.js +225 -0
  758. package/dist/node_modules/recharts/es6/component/Text.js.map +1 -0
  759. package/dist/node_modules/recharts/es6/component/Tooltip.js +182 -0
  760. package/dist/node_modules/recharts/es6/component/Tooltip.js.map +1 -0
  761. package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js +198 -0
  762. package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js.map +1 -0
  763. package/dist/node_modules/recharts/es6/container/Layer.js +40 -0
  764. package/dist/node_modules/recharts/es6/container/Layer.js.map +1 -0
  765. package/dist/node_modules/recharts/es6/container/Surface.js +60 -0
  766. package/dist/node_modules/recharts/es6/container/Surface.js.map +1 -0
  767. package/dist/node_modules/recharts/es6/context/chartLayoutContext.js +46 -0
  768. package/dist/node_modules/recharts/es6/context/chartLayoutContext.js.map +1 -0
  769. package/dist/node_modules/recharts/es6/polar/Pie.js +435 -0
  770. package/dist/node_modules/recharts/es6/polar/Pie.js.map +1 -0
  771. package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js +215 -0
  772. package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js.map +1 -0
  773. package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js +268 -0
  774. package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js.map +1 -0
  775. package/dist/node_modules/recharts/es6/shape/Cross.js +112 -0
  776. package/dist/node_modules/recharts/es6/shape/Cross.js.map +1 -0
  777. package/dist/node_modules/recharts/es6/shape/Curve.js +136 -0
  778. package/dist/node_modules/recharts/es6/shape/Curve.js.map +1 -0
  779. package/dist/node_modules/recharts/es6/shape/Dot.js +27 -0
  780. package/dist/node_modules/recharts/es6/shape/Dot.js.map +1 -0
  781. package/dist/node_modules/recharts/es6/shape/Polygon.js +112 -0
  782. package/dist/node_modules/recharts/es6/shape/Polygon.js.map +1 -0
  783. package/dist/node_modules/recharts/es6/shape/Rectangle.js +205 -0
  784. package/dist/node_modules/recharts/es6/shape/Rectangle.js.map +1 -0
  785. package/dist/node_modules/recharts/es6/shape/Sector.js +192 -0
  786. package/dist/node_modules/recharts/es6/shape/Sector.js.map +1 -0
  787. package/dist/node_modules/recharts/es6/shape/Symbols.js +143 -0
  788. package/dist/node_modules/recharts/es6/shape/Symbols.js.map +1 -0
  789. package/dist/node_modules/recharts/es6/shape/Trapezoid.js +175 -0
  790. package/dist/node_modules/recharts/es6/shape/Trapezoid.js.map +1 -0
  791. package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js +181 -0
  792. package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js.map +1 -0
  793. package/dist/node_modules/recharts/es6/util/BarUtils.js +112 -0
  794. package/dist/node_modules/recharts/es6/util/BarUtils.js.map +1 -0
  795. package/dist/node_modules/recharts/es6/util/CartesianUtils.js +234 -0
  796. package/dist/node_modules/recharts/es6/util/CartesianUtils.js.map +1 -0
  797. package/dist/node_modules/recharts/es6/util/ChartUtils.js +554 -0
  798. package/dist/node_modules/recharts/es6/util/ChartUtils.js.map +1 -0
  799. package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js +70 -0
  800. package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js.map +1 -0
  801. package/dist/node_modules/recharts/es6/util/DOMUtils.js +108 -0
  802. package/dist/node_modules/recharts/es6/util/DOMUtils.js.map +1 -0
  803. package/dist/node_modules/recharts/es6/util/DataUtils.js +57 -0
  804. package/dist/node_modules/recharts/es6/util/DataUtils.js.map +1 -0
  805. package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js +58 -0
  806. package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js.map +1 -0
  807. package/dist/node_modules/recharts/es6/util/Events.js +7 -0
  808. package/dist/node_modules/recharts/es6/util/Events.js.map +1 -0
  809. package/dist/node_modules/recharts/es6/util/Global.js +21 -0
  810. package/dist/node_modules/recharts/es6/util/Global.js.map +1 -0
  811. package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js +9 -0
  812. package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js.map +1 -0
  813. package/dist/node_modules/recharts/es6/util/LogUtils.js +15 -0
  814. package/dist/node_modules/recharts/es6/util/LogUtils.js.map +1 -0
  815. package/dist/node_modules/recharts/es6/util/PolarUtils.js +198 -0
  816. package/dist/node_modules/recharts/es6/util/PolarUtils.js.map +1 -0
  817. package/dist/node_modules/recharts/es6/util/ReactUtils.js +137 -0
  818. package/dist/node_modules/recharts/es6/util/ReactUtils.js.map +1 -0
  819. package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js +181 -0
  820. package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js.map +1 -0
  821. package/dist/node_modules/recharts/es6/util/ShallowEqual.js +10 -0
  822. package/dist/node_modules/recharts/es6/util/ShallowEqual.js.map +1 -0
  823. package/dist/node_modules/recharts/es6/util/TickUtils.js +31 -0
  824. package/dist/node_modules/recharts/es6/util/TickUtils.js.map +1 -0
  825. package/dist/node_modules/recharts/es6/util/calculateViewBox.js +25 -0
  826. package/dist/node_modules/recharts/es6/util/calculateViewBox.js.map +1 -0
  827. package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js +23 -0
  828. package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js.map +1 -0
  829. package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js +16 -0
  830. package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js.map +1 -0
  831. package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js +17 -0
  832. package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js.map +1 -0
  833. package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js +12 -0
  834. package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js.map +1 -0
  835. package/dist/node_modules/recharts/es6/util/getLegendProps.js +88 -0
  836. package/dist/node_modules/recharts/es6/util/getLegendProps.js.map +1 -0
  837. package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js +13 -0
  838. package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js.map +1 -0
  839. package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js +12 -0
  840. package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js.map +1 -0
  841. package/dist/node_modules/recharts/es6/util/tooltip/translate.js +87 -0
  842. package/dist/node_modules/recharts/es6/util/tooltip/translate.js.map +1 -0
  843. package/dist/node_modules/recharts/es6/util/types.js +43 -0
  844. package/dist/node_modules/recharts/es6/util/types.js.map +1 -0
  845. package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js +132 -0
  846. package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js.map +1 -0
  847. package/dist/node_modules/recharts-scale/es6/index.js +1 -0
  848. package/dist/node_modules/recharts-scale/es6/util/arithmetic.js +32 -0
  849. package/dist/node_modules/recharts-scale/es6/util/arithmetic.js.map +1 -0
  850. package/dist/node_modules/recharts-scale/es6/util/utils.js +79 -0
  851. package/dist/node_modules/recharts-scale/es6/util/utils.js.map +1 -0
  852. package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +13 -0
  853. package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +1 -0
  854. package/dist/node_modules/victory-vendor/es/d3-scale.js +53 -0
  855. package/dist/node_modules/victory-vendor/es/d3-scale.js.map +1 -0
  856. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CommunicationPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/CommunicationPage.tsx"],"sourcesContent":["import { Megaphone, Send, Upload } 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 PagePurpose,\n} from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport {\n useAnnouncementsQuery,\n useCommunicationCampaignsQuery,\n usePublishAnnouncementMutation,\n useSendCommunicationCampaignMutation,\n useUpsertAnnouncementMutation,\n useUpsertCommunicationCampaignMutation,\n} from '../../api/eventApi';\nimport { ActionMenu, type ActionMenuItem } from '../../components/ActionMenu';\nimport { Pagination, usePagination } from '../../components/Pagination';\nimport { describeError, mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\n\ntype SimpleRow = {\n id: string;\n name?: string | null;\n title?: string | null;\n status?: string | null;\n};\n\nfunction statusVariant(status: string): 'success' | 'warning' | 'secondary' | 'info' {\n const value = status.toLowerCase();\n if (['published', 'sent', 'active', 'completed'].includes(value)) return 'success';\n if (['cancelled', 'archived', 'failed', 'expired'].includes(value)) return 'warning';\n if (['draft', 'created', 'pending', 'scheduled'].includes(value)) return 'info';\n return 'secondary';\n}\n\nconst isDraft = (status?: string | null): boolean => {\n const value = (status ?? '').toLowerCase();\n return value === '' || value === 'draft' || value === 'created';\n};\n\nconst rowLabel = (row: SimpleRow, fallback: string): string => row.title ?? row.name ?? `${fallback} ${row.id}`;\n\nfunction EntityRow({\n title,\n status,\n actions,\n ariaLabel,\n}: {\n title: string;\n status?: string | null;\n actions: ActionMenuItem[];\n ariaLabel: string;\n}) {\n return (\n <li className=\"flex items-center justify-between gap-3 rounded-card border border-border-seam bg-bg-surface p-3 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1\">\n <p className=\"min-w-0 truncate font-medium text-text-primary\">{title}</p>\n <div className=\"flex shrink-0 items-center gap-2\">\n {status ? (\n <Badge variant={statusVariant(status)} className=\"uppercase\">\n {status}\n </Badge>\n ) : null}\n {actions.length > 0 ? <ActionMenu ariaLabel={ariaLabel} extraItems={actions} /> : null}\n </div>\n </li>\n );\n}\n\nexport default function CommunicationPage() {\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\n const announcementPagination = usePagination({ pageSize: 10 });\n const campaignPagination = usePagination({ pageSize: 10 });\n\n const announcementsQuery = useAnnouncementsQuery({\n limit: announcementPagination.limit,\n offset: announcementPagination.offset,\n });\n const campaignsQuery = useCommunicationCampaignsQuery({\n limit: campaignPagination.limit,\n offset: campaignPagination.offset,\n });\n\n const [createAnnouncement, { loading: creatingAnnouncement }] = useUpsertAnnouncementMutation();\n const [publishAnnouncement, { loading: publishing }] = usePublishAnnouncementMutation();\n const [createCampaign, { loading: creatingCampaign }] = useUpsertCommunicationCampaignMutation();\n const [sendCampaign, { loading: sending }] = useSendCommunicationCampaignMutation();\n\n const [announcementTitle, setAnnouncementTitle] = useState('');\n const [campaignTitle, setCampaignTitle] = useState('');\n\n const announcements = useMemo(\n () => (announcementsQuery.data?.announcements.items ?? []) as SimpleRow[],\n [announcementsQuery.data]\n );\n const announcementTotal = announcementsQuery.data?.announcements.total ?? 0;\n const campaigns = useMemo(\n () => (campaignsQuery.data?.communicationCampaigns.items ?? []) as SimpleRow[],\n [campaignsQuery.data]\n );\n const campaignTotal = campaignsQuery.data?.communicationCampaigns.total ?? 0;\n\n const onCreateAnnouncement = async () => {\n if (!announcementTitle.trim()) return;\n const failureMessage = t('eventfullymanaged.communication.errors.create', 'Could not create announcement');\n try {\n const response = await createAnnouncement({\n variables: { input: { title: announcementTitle, name: announcementTitle, status: 'draft', metadata: {} } },\n });\n if (!mutationSucceeded(response, response.data?.upsertAnnouncement?.id, failureMessage)) {\n return;\n }\n setAnnouncementTitle('');\n notify.success(t('eventfullymanaged.communication.created', 'Announcement created'));\n await announcementsQuery.refetch();\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n };\n\n const onPublishAnnouncement = async (row: SimpleRow) => {\n const failureMessage = t('eventfullymanaged.communication.errors.publish', 'Could not publish announcement');\n try {\n const response = await publishAnnouncement({ variables: { id: row.id } });\n if (!mutationSucceeded(response, response.data?.publishAnnouncement?.id, failureMessage)) {\n return;\n }\n notify.success(t('eventfullymanaged.communication.published', 'Announcement published'));\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n };\n\n const onCreateCampaign = async () => {\n if (!campaignTitle.trim()) return;\n const failureMessage = t('eventfullymanaged.communication.errors.createCampaign', 'Could not create campaign');\n try {\n const response = await createCampaign({\n variables: { input: { title: campaignTitle, name: campaignTitle, status: 'draft', metadata: {} } },\n });\n if (!mutationSucceeded(response, response.data?.upsertCommunicationCampaign?.id, failureMessage)) {\n return;\n }\n setCampaignTitle('');\n notify.success(t('eventfullymanaged.communication.campaignCreated', 'Campaign created'));\n await campaignsQuery.refetch();\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n };\n\n const onSendCampaign = async (row: SimpleRow) => {\n const failureMessage = t('eventfullymanaged.communication.errors.send', 'Could not send campaign');\n try {\n const response = await sendCampaign({ variables: { id: row.id } });\n if (!mutationSucceeded(response, response.data?.sendCommunicationCampaign?.id, failureMessage)) {\n return;\n }\n notify.success(t('eventfullymanaged.communication.sent', 'Campaign delivery started'));\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n {t(\n 'eventfullymanaged.communication.purpose',\n 'Keep attendees informed and engaged. Announcements are one-off broadcasts (a schedule change, a welcome message); campaigns are scheduled, multi-step outreach (reminder emails, follow-ups). Draft each one here, then publish an announcement or send a campaign — delivery runs server-side through the notification service.'\n )}\n </PagePurpose>\n\n <EmphasisPanel>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>{t('eventfullymanaged.communication.title', 'Communication')}</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {t(\n 'eventfullymanaged.communication.description',\n 'Draft announcements and campaigns, then publish or send them via workspace APIs.'\n )}\n </p>\n <div className=\"mt-4 grid grid-cols-1 gap-4 lg:grid-cols-2\">\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-text-primary\">\n {t('eventfullymanaged.communication.announcements.heading', 'Announcements')}\n </p>\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n <Input\n value={announcementTitle}\n onChange={(e) => setAnnouncementTitle(e.target.value)}\n placeholder={t('eventfullymanaged.communication.inputPlaceholder', 'Emergency schedule update')}\n aria-label={t('eventfullymanaged.communication.inputPlaceholder', 'Emergency schedule update')}\n className=\"flex-1\"\n />\n <Button type=\"button\" disabled={creatingAnnouncement} onClick={onCreateAnnouncement}>\n <Megaphone className=\"h-4 w-4\" />\n {creatingAnnouncement\n ? t('eventfullymanaged.communication.actions.creating', 'Creating...')\n : t('eventfullymanaged.communication.actions.createAnnouncement', 'Create Announcement')}\n </Button>\n </div>\n </div>\n <div className=\"space-y-2\">\n <p className=\"text-sm font-medium text-text-primary\">\n {t('eventfullymanaged.communication.campaigns.heading', 'Campaigns')}\n </p>\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n <Input\n value={campaignTitle}\n onChange={(e) => setCampaignTitle(e.target.value)}\n placeholder={t('eventfullymanaged.communication.campaignPlaceholder', 'Week-before reminder')}\n aria-label={t('eventfullymanaged.communication.campaignPlaceholder', 'Week-before reminder')}\n className=\"flex-1\"\n />\n <Button type=\"button\" variant=\"outline\" disabled={creatingCampaign} onClick={onCreateCampaign}>\n <Send className=\"h-4 w-4\" />\n {creatingCampaign\n ? t('eventfullymanaged.communication.actions.creating', 'Creating...')\n : t('eventfullymanaged.communication.actions.createCampaign', 'New Campaign')}\n </Button>\n </div>\n </div>\n </div>\n </EmphasisPanel>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {announcementsQuery.loading\n ? t('eventfullymanaged.communication.announcements.loading', 'Loading announcements...')\n : `${t('eventfullymanaged.communication.announcements.heading', 'Announcements')} (${announcementTotal})`}\n </h2>\n <div className=\"mt-4\">\n {announcements.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('eventfullymanaged.communication.announcements.empty', 'No announcements published yet.')}\n className=\"py-8\"\n />\n ) : (\n <ul className=\"space-y-2.5\">\n {announcements.map((row) => {\n const publishAction: ActionMenuItem[] = isDraft(row.status)\n ? [\n {\n key: 'publish',\n label: t('eventfullymanaged.communication.actions.publish', 'Publish'),\n icon: Upload,\n disabled: publishing,\n onSelect: () => void onPublishAnnouncement(row),\n },\n ]\n : [];\n return (\n <EntityRow\n key={row.id}\n title={rowLabel(row, t('eventfullymanaged.communication.announcements.itemPrefix', 'Announcement'))}\n status={row.status}\n actions={publishAction}\n ariaLabel={t('eventfullymanaged.communication.announcements.rowActions', 'Announcement actions')}\n />\n );\n })}\n </ul>\n )}\n <Pagination\n offset={announcementPagination.offset}\n limit={announcementPagination.limit}\n loadedCount={announcements.length}\n total={announcementTotal}\n onPrev={announcementPagination.prevPage}\n onNext={announcementPagination.nextPage}\n itemLabel={t('eventfullymanaged.communication.announcements.heading', 'Announcements').toLowerCase()}\n loading={announcementsQuery.loading}\n />\n </div>\n </GlassCard>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {campaignsQuery.loading\n ? t('eventfullymanaged.communication.campaigns.loading', 'Loading campaigns...')\n : `${t('eventfullymanaged.communication.campaigns.heading', 'Campaigns')} (${campaignTotal})`}\n </h2>\n <div className=\"mt-4\">\n {campaigns.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('eventfullymanaged.communication.campaigns.empty', 'No communication campaigns created yet.')}\n className=\"py-8\"\n />\n ) : (\n <ul className=\"space-y-2.5\">\n {campaigns.map((row) => {\n const sendAction: ActionMenuItem[] = isDraft(row.status)\n ? [\n {\n key: 'send',\n label: t('eventfullymanaged.communication.actions.send', 'Send Campaign'),\n icon: Send,\n disabled: sending,\n onSelect: () => void onSendCampaign(row),\n },\n ]\n : [];\n return (\n <EntityRow\n key={row.id}\n title={rowLabel(row, t('eventfullymanaged.communication.campaigns.itemPrefix', 'Campaign'))}\n status={row.status}\n actions={sendAction}\n ariaLabel={t('eventfullymanaged.communication.campaigns.rowActions', 'Campaign actions')}\n />\n );\n })}\n </ul>\n )}\n <Pagination\n offset={campaignPagination.offset}\n limit={campaignPagination.limit}\n loadedCount={campaigns.length}\n total={campaignTotal}\n onPrev={campaignPagination.prevPage}\n onNext={campaignPagination.nextPage}\n itemLabel={t('eventfullymanaged.communication.campaigns.heading', 'Campaigns').toLowerCase()}\n loading={campaignsQuery.loading}\n />\n </div>\n </GlassCard>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CommunicationPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/CommunicationPage.tsx"],"sourcesContent":["import { Mail, Megaphone, Plus, Send, Upload } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n Badge,\n Button,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n PagePurpose,\n Textarea,\n} from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport {\n useAnnouncementsQuery,\n useCommunicationCampaignsQuery,\n usePublishAnnouncementMutation,\n useSendCommunicationCampaignMutation,\n useUpsertAnnouncementMutation,\n useUpsertCommunicationCampaignMutation,\n} from '../../api/eventApi';\nimport { Pagination, usePagination } from '../../components/Pagination';\nimport { describeError, mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\n\ntype SimpleRow = {\n id: string;\n name?: string | null;\n title?: string | null;\n status?: string | null;\n};\n\ntype ComposeKind = 'announcement' | 'campaign';\n\nfunction statusVariant(status: string): 'success' | 'warning' | 'secondary' | 'info' {\n const value = status.toLowerCase();\n if (['published', 'sent', 'active', 'completed'].includes(value)) return 'success';\n if (['cancelled', 'archived', 'failed', 'expired'].includes(value)) return 'warning';\n if (['draft', 'created', 'pending', 'scheduled'].includes(value)) return 'info';\n return 'secondary';\n}\n\nconst isDraft = (status?: string | null): boolean => {\n const value = (status ?? '').toLowerCase();\n return value === '' || value === 'draft' || value === 'created';\n};\n\nconst rowLabel = (row: SimpleRow, fallback: string): string => row.title ?? row.name ?? `${fallback} ${row.id}`;\n\nexport default function CommunicationPage() {\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\n const announcementPagination = usePagination({ pageSize: 8 });\n const campaignPagination = usePagination({ pageSize: 8 });\n\n const announcementsQuery = useAnnouncementsQuery({\n limit: announcementPagination.limit,\n offset: announcementPagination.offset,\n });\n const campaignsQuery = useCommunicationCampaignsQuery({\n limit: campaignPagination.limit,\n offset: campaignPagination.offset,\n });\n\n const [createAnnouncement, { loading: creatingAnnouncement }] = useUpsertAnnouncementMutation();\n const [publishAnnouncement, { loading: publishing }] = usePublishAnnouncementMutation();\n const [createCampaign, { loading: creatingCampaign }] = useUpsertCommunicationCampaignMutation();\n const [sendCampaign, { loading: sending }] = useSendCommunicationCampaignMutation();\n\n const [kind, setKind] = useState<ComposeKind>('announcement');\n const [subject, setSubject] = useState('');\n const [audience, setAudience] = useState('');\n const [body, setBody] = useState('');\n\n const announcements = useMemo(\n () => (announcementsQuery.data?.announcements.items ?? []) as SimpleRow[],\n [announcementsQuery.data]\n );\n const announcementTotal = announcementsQuery.data?.announcements.total ?? 0;\n const campaigns = useMemo(\n () => (campaignsQuery.data?.communicationCampaigns.items ?? []) as SimpleRow[],\n [campaignsQuery.data]\n );\n const campaignTotal = campaignsQuery.data?.communicationCampaigns.total ?? 0;\n\n const composing = kind === 'announcement' ? creatingAnnouncement : creatingCampaign;\n const resetCompose = () => {\n setSubject('');\n setAudience('');\n setBody('');\n };\n\n const onCompose = async () => {\n if (!subject.trim()) {\n notify.error(t('eventfullymanaged.communication.subjectRequired', 'Subject required'), '');\n return;\n }\n const metadata: Record<string, unknown> = {};\n if (body.trim()) metadata.body = body.trim();\n if (audience.trim()) metadata.audience = audience.trim();\n\n if (kind === 'announcement') {\n const failureMessage = t('eventfullymanaged.communication.errors.create', 'Could not create announcement');\n try {\n const response = await createAnnouncement({\n variables: { input: { title: subject, name: subject, status: 'draft', metadata } },\n });\n if (!mutationSucceeded(response, response.data?.upsertAnnouncement?.id, failureMessage)) return;\n resetCompose();\n notify.success(t('eventfullymanaged.communication.created', 'Announcement created'));\n await announcementsQuery.refetch();\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n return;\n }\n\n const failureMessage = t('eventfullymanaged.communication.errors.createCampaign', 'Could not create campaign');\n try {\n const response = await createCampaign({\n variables: { input: { title: subject, name: subject, status: 'draft', metadata } },\n });\n if (!mutationSucceeded(response, response.data?.upsertCommunicationCampaign?.id, failureMessage)) return;\n resetCompose();\n notify.success(t('eventfullymanaged.communication.campaignCreated', 'Campaign created'));\n await campaignsQuery.refetch();\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n };\n\n const onPublishAnnouncement = async (row: SimpleRow) => {\n const failureMessage = t('eventfullymanaged.communication.errors.publish', 'Could not publish announcement');\n try {\n const response = await publishAnnouncement({ variables: { id: row.id } });\n if (!mutationSucceeded(response, response.data?.publishAnnouncement?.id, failureMessage)) return;\n notify.success(t('eventfullymanaged.communication.published', 'Announcement published'));\n await announcementsQuery.refetch();\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n };\n\n const onSendCampaign = async (row: SimpleRow) => {\n const failureMessage = t('eventfullymanaged.communication.errors.send', 'Could not send campaign');\n try {\n const response = await sendCampaign({ variables: { id: row.id } });\n if (!mutationSucceeded(response, response.data?.sendCommunicationCampaign?.id, failureMessage)) return;\n notify.success(t('eventfullymanaged.communication.sent', 'Campaign delivery started'));\n await campaignsQuery.refetch();\n } catch (error) {\n notify.error(failureMessage, describeError(error));\n }\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n {t(\n 'eventfullymanaged.communication.purpose',\n 'Keep attendees informed and engaged. Announcements are one-off broadcasts (a schedule change, a welcome message); campaigns are scheduled, multi-step outreach (reminder emails, follow-ups). Compose each one here, then publish an announcement or send a campaign — delivery runs server-side through the notification service.'\n )}\n </PagePurpose>\n\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.communication.title', 'Communications')}</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n {t('eventfullymanaged.communication.description', 'Draft, publish and send from one place.')}\n </p>\n </div>\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n <Button\n type=\"button\"\n variant={kind === 'announcement' ? 'default' : 'outline'}\n onClick={() => setKind('announcement')}\n >\n <Plus className=\"h-4 w-4\" />\n {t('eventfullymanaged.communication.actions.newAnnouncement', 'New announcement')}\n </Button>\n <Button\n type=\"button\"\n variant={kind === 'campaign' ? 'default' : 'outline'}\n onClick={() => setKind('campaign')}\n >\n <Plus className=\"h-4 w-4\" />\n {t('eventfullymanaged.communication.actions.newCampaign', 'New campaign')}\n </Button>\n </div>\n </div>\n\n {/* Compose + live preview */}\n <GlassCard treatment=\"glass\" glow className=\"p-5\">\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-2\">\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n {kind === 'announcement' ? (\n <Megaphone className=\"h-4 w-4 text-accent-primary\" />\n ) : (\n <Mail className=\"h-4 w-4 text-accent-primary\" />\n )}\n <h2 className=\"text-base font-semibold text-text-primary\">\n {kind === 'announcement'\n ? t('eventfullymanaged.communication.compose.announcement', 'Compose announcement')\n : t('eventfullymanaged.communication.compose.campaign', 'Compose campaign')}\n </h2>\n </div>\n <label className=\"block space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">\n {t('eventfullymanaged.communication.fields.subject', 'Subject')}\n </span>\n <Input\n value={subject}\n onChange={(e) => setSubject(e.target.value)}\n placeholder={t('eventfullymanaged.communication.fields.subjectPlaceholder', 'Q4 Product Roadmap Update')}\n aria-label={t('eventfullymanaged.communication.fields.subject', 'Subject')}\n />\n </label>\n <label className=\"block space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">\n {t('eventfullymanaged.communication.fields.audience', 'Audience')}\n </span>\n <Input\n value={audience}\n onChange={(e) => setAudience(e.target.value)}\n placeholder={t('eventfullymanaged.communication.fields.audiencePlaceholder', 'All attendees')}\n aria-label={t('eventfullymanaged.communication.fields.audience', 'Audience')}\n />\n </label>\n <label className=\"block space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">\n {t('eventfullymanaged.communication.fields.body', 'Message')}\n </span>\n <Textarea\n value={body}\n onChange={(e) => setBody(e.target.value)}\n rows={5}\n placeholder={t(\n 'eventfullymanaged.communication.fields.bodyPlaceholder',\n 'Hi there, here are the latest updates…'\n )}\n aria-label={t('eventfullymanaged.communication.fields.body', 'Message')}\n />\n </label>\n <div className=\"flex justify-end\">\n <Button type=\"button\" disabled={composing} onClick={onCompose}>\n {composing\n ? t('eventfullymanaged.communication.actions.saving', 'Saving…')\n : kind === 'announcement'\n ? t('eventfullymanaged.communication.actions.createAnnouncement', 'Create draft')\n : t('eventfullymanaged.communication.actions.createCampaign', 'Create draft')}\n </Button>\n </div>\n </div>\n\n {/* Live preview */}\n <div className=\"rounded-card border border-border-seam bg-bg-surface p-4\">\n <div className=\"flex items-center justify-between border-b border-border-seam pb-2\">\n <span className=\"flex items-center gap-2 text-xs font-medium uppercase tracking-wide text-text-muted\">\n <Mail className=\"h-3.5 w-3.5\" />\n {t('eventfullymanaged.communication.preview.label', 'Preview')}\n </span>\n <Badge variant=\"info\" className=\"uppercase\">\n {t('eventfullymanaged.communication.preview.draft', 'Draft')}\n </Badge>\n </div>\n <div className=\"mt-3 space-y-2\">\n <p className=\"text-base font-semibold text-text-primary\">\n {subject.trim() || t('eventfullymanaged.communication.preview.noSubject', 'Your subject line')}\n </p>\n {audience.trim() ? (\n <p className=\"text-xs text-text-secondary\">\n {t('eventfullymanaged.communication.preview.to', 'To')}: {audience.trim()}\n </p>\n ) : null}\n <p className=\"whitespace-pre-wrap text-sm text-text-secondary\">\n {body.trim() ||\n t(\n 'eventfullymanaged.communication.preview.noBody',\n 'Start typing to see your message preview here.'\n )}\n </p>\n </div>\n </div>\n </div>\n </GlassCard>\n\n {/* Two-pane lists */}\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-2\">\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {t('eventfullymanaged.communication.announcements.heading', 'Announcements')}\n </h2>\n {announcementTotal > 0 ? <span className=\"text-sm text-text-muted\">{announcementTotal}</span> : null}\n </div>\n <div className=\"mt-4\">\n {announcementsQuery.loading && announcements.length === 0 ? (\n <p className=\"py-8 text-center text-sm text-text-secondary\">\n {t('eventfullymanaged.communication.announcements.loading', 'Loading announcements…')}\n </p>\n ) : announcements.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('eventfullymanaged.communication.announcements.empty', 'No announcements yet.')}\n className=\"py-8\"\n />\n ) : (\n <ul className=\"space-y-2.5\">\n {announcements.map((row) => (\n <li\n key={row.id}\n className=\"flex items-center justify-between gap-3 rounded-card border border-border-seam bg-bg-surface p-3 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1\"\n >\n <p className=\"min-w-0 truncate font-medium text-text-primary\">\n {rowLabel(row, t('eventfullymanaged.communication.announcements.itemPrefix', 'Announcement'))}\n </p>\n <div className=\"flex shrink-0 items-center gap-2\">\n {row.status ? (\n <Badge variant={statusVariant(row.status)} className=\"uppercase\">\n {row.status}\n </Badge>\n ) : null}\n {isDraft(row.status) ? (\n <Button\n type=\"button\"\n size=\"sm\"\n disabled={publishing}\n onClick={() => void onPublishAnnouncement(row)}\n >\n <Upload className=\"h-3.5 w-3.5\" />\n {t('eventfullymanaged.communication.actions.publish', 'Publish')}\n </Button>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n )}\n <Pagination\n offset={announcementPagination.offset}\n limit={announcementPagination.limit}\n loadedCount={announcements.length}\n total={announcementTotal}\n onPrev={announcementPagination.prevPage}\n onNext={announcementPagination.nextPage}\n itemLabel={t('eventfullymanaged.communication.announcements.heading', 'Announcements').toLowerCase()}\n loading={announcementsQuery.loading}\n />\n </div>\n </GlassCard>\n\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <div className=\"flex items-center justify-between\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {t('eventfullymanaged.communication.campaigns.heading', 'Campaigns')}\n </h2>\n {campaignTotal > 0 ? <span className=\"text-sm text-text-muted\">{campaignTotal}</span> : null}\n </div>\n <div className=\"mt-4\">\n {campaignsQuery.loading && campaigns.length === 0 ? (\n <p className=\"py-8 text-center text-sm text-text-secondary\">\n {t('eventfullymanaged.communication.campaigns.loading', 'Loading campaigns…')}\n </p>\n ) : campaigns.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={t('eventfullymanaged.communication.campaigns.empty', 'No campaigns yet.')}\n className=\"py-8\"\n />\n ) : (\n <ul className=\"space-y-2.5\">\n {campaigns.map((row) => (\n <li\n key={row.id}\n className=\"flex items-center justify-between gap-3 rounded-card border border-border-seam bg-bg-surface p-3 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1\"\n >\n <p className=\"min-w-0 truncate font-medium text-text-primary\">\n {rowLabel(row, t('eventfullymanaged.communication.campaigns.itemPrefix', 'Campaign'))}\n </p>\n <div className=\"flex shrink-0 items-center gap-2\">\n {row.status ? (\n <Badge variant={statusVariant(row.status)} className=\"uppercase\">\n {row.status}\n </Badge>\n ) : null}\n {isDraft(row.status) ? (\n <Button type=\"button\" size=\"sm\" disabled={sending} onClick={() => void onSendCampaign(row)}>\n <Send className=\"h-3.5 w-3.5\" />\n {t('eventfullymanaged.communication.actions.send', 'Send campaign')}\n </Button>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n )}\n <Pagination\n offset={campaignPagination.offset}\n limit={campaignPagination.limit}\n loadedCount={campaigns.length}\n total={campaignTotal}\n onPrev={campaignPagination.prevPage}\n onNext={campaignPagination.nextPage}\n itemLabel={t('eventfullymanaged.communication.campaigns.heading', 'Campaigns').toLowerCase()}\n loading={campaignsQuery.loading}\n />\n </div>\n </GlassCard>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,14 +1,29 @@
1
1
  import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
2
- import { useEventsQuery as t } from "../../api/eventApi.js";
3
- import { ActionMenu as n } from "../../components/ActionMenu.js";
4
- import { Pagination as r, usePagination as i } from "../../components/Pagination.js";
5
- import { useMemo as a, useState as o } from "react";
6
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
7
- import { CalendarClock as l, CalendarPlus as u, Search as d, Ticket as f, Users as p } from "lucide-react";
8
- import { useI18n as m } from "@burdenoff/fe-libs/shared/providers/shell/I18nProvider";
9
- import { Badge as h, Button as g, EmphasisPanel as _, GlassCard as v, GradientText as y, IllustratedEmptyState as b, Input as x, NextSteps as S, PagePurpose as C } from "@burdenoff/fe-libs/ui";
2
+ import { gql as t } from "../../../node_modules/graphql-tag/lib/index.js";
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";
10
13
  //#region src/eventfullymanaged/pages/modules/EventsPage.tsx
11
- function w(e) {
14
+ var j = t`
15
+ query EventfullymanagedEventsRegistrations($limit: Int) {
16
+ registrations: eventfullyManagedRegistrations(limit: $limit, offset: 0) {
17
+ total
18
+ items {
19
+ id
20
+ eventId
21
+ checkedInAt
22
+ }
23
+ }
24
+ }
25
+ `;
26
+ function M(e) {
12
27
  let t = e.toLowerCase();
13
28
  return [
14
29
  "active",
@@ -30,126 +45,221 @@ function w(e) {
30
45
  "scheduled"
31
46
  ].includes(t) ? "info" : "secondary";
32
47
  }
33
- function T() {
34
- let { t: T } = m(), E = (e, t) => {
35
- let n = T(e);
36
- return n === e ? t : n;
37
- }, { navigate: D } = e(), [O, k] = o(""), A = i({ resetKey: O }), { data: j, loading: M } = t({
38
- search: O,
39
- limit: A.limit,
40
- offset: A.offset
41
- }), N = j?.events?.total ?? 0, P = a(() => j?.events?.items ?? [], [j]);
42
- return /* @__PURE__ */ c("div", {
48
+ function N(e, t) {
49
+ let n = e ? a(e) : "", r = t ? a(t) : "";
50
+ return n && r ? `${n} — ${r}` : n || r || "No schedule set";
51
+ }
52
+ function P({ icon: e, label: t, value: n }) {
53
+ return /* @__PURE__ */ f("div", {
54
+ className: "flex items-center gap-1.5",
55
+ children: [
56
+ /* @__PURE__ */ d(e, { className: "h-3.5 w-3.5 text-text-muted" }),
57
+ /* @__PURE__ */ d("span", {
58
+ className: "tabular-nums font-medium text-text-primary",
59
+ children: n
60
+ }),
61
+ /* @__PURE__ */ d("span", {
62
+ className: "text-text-muted",
63
+ children: t
64
+ })
65
+ ]
66
+ });
67
+ }
68
+ function F() {
69
+ let { t } = b(), a = (e, n) => {
70
+ let r = t(e);
71
+ 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({
77
+ limit: 100,
78
+ offset: 0
79
+ }), { data: H } = n(j, { variables: { limit: 500 } }), U = z?.events?.total ?? 0, W = l(() => z?.events?.items ?? [], [z]), G = l(() => {
80
+ let e = /* @__PURE__ */ new Map();
81
+ for (let t of V?.venues?.items ?? []) e.set(t.id, t.name);
82
+ return e;
83
+ }, [V]), K = l(() => {
84
+ let e = /* @__PURE__ */ new Map();
85
+ for (let t of H?.registrations?.items ?? []) {
86
+ let n = e.get(t.eventId) ?? {
87
+ registrations: 0,
88
+ checkedIn: 0
89
+ };
90
+ n.registrations += 1, t.checkedInAt && (n.checkedIn += 1), e.set(t.eventId, n);
91
+ }
92
+ return e;
93
+ }, [H]);
94
+ return /* @__PURE__ */ f("div", {
43
95
  className: "space-y-6 p-6",
44
96
  children: [
45
- /* @__PURE__ */ s(C, { children: E("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.") }),
46
- /* @__PURE__ */ s(_, { children: /* @__PURE__ */ c("div", {
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", {
47
99
  className: "flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
48
- children: [/* @__PURE__ */ c("div", { children: [/* @__PURE__ */ s("h1", {
100
+ children: [/* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d("h1", {
49
101
  className: "text-2xl font-bold text-text-primary",
50
- children: /* @__PURE__ */ s(y, { children: E("eventfullymanaged.events.title", "Events") })
51
- }), /* @__PURE__ */ s("p", {
102
+ children: /* @__PURE__ */ d(T, { children: a("eventfullymanaged.events.title", "Events") })
103
+ }), /* @__PURE__ */ d("p", {
52
104
  className: "mt-1 text-sm text-text-secondary",
53
- children: E("eventfullymanaged.events.description", "Create and manage live events from the workspace graph.")
54
- })] }), /* @__PURE__ */ c(g, {
105
+ children: a("eventfullymanaged.events.description", "Create and manage live events from the workspace graph.")
106
+ })] }), /* @__PURE__ */ f(S, {
55
107
  type: "button",
56
- onClick: () => D("/events/create"),
57
- children: [/* @__PURE__ */ s(u, { className: "h-4 w-4" }), E("eventfullymanaged.events.actions.create", "Create Event")]
108
+ onClick: () => F("/events/create"),
109
+ children: [/* @__PURE__ */ d(m, { className: "h-4 w-4" }), a("eventfullymanaged.events.actions.create", "Create Event")]
58
110
  })]
59
111
  }) }),
60
- /* @__PURE__ */ c("div", {
112
+ /* @__PURE__ */ f("div", {
61
113
  className: "relative",
62
- children: [/* @__PURE__ */ s(d, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted" }), /* @__PURE__ */ s(x, {
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, {
63
115
  type: "text",
64
- value: O,
65
- onChange: (e) => k(e.target.value),
66
- placeholder: E("eventfullymanaged.events.searchPlaceholder", "Search events"),
67
- "aria-label": E("eventfullymanaged.events.searchPlaceholder", "Search events"),
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"),
68
120
  className: "pl-10"
69
121
  })]
70
122
  }),
71
- M ? /* @__PURE__ */ s(v, {
72
- treatment: "plain",
73
- className: "border-border-seam p-8 text-center text-sm text-text-secondary",
74
- children: E("eventfullymanaged.events.list.loading", "Loading events...")
75
- }) : P.length === 0 ? /* @__PURE__ */ s(v, {
123
+ B ? /* @__PURE__ */ f("div", {
124
+ className: "space-y-3",
125
+ 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" })
129
+ ]
130
+ }) : W.length === 0 ? /* @__PURE__ */ d(w, {
76
131
  treatment: "plain",
77
132
  className: "border-border-seam",
78
- children: /* @__PURE__ */ s(b, {
79
- illustration: O ? "empty-search" : "empty-data",
80
- title: O ? E("eventfullymanaged.events.list.emptySearch", "No events match your search.") : E("eventfullymanaged.events.list.empty", "No events yet."),
81
- description: O ? E("eventfullymanaged.events.list.emptySearchHint", "Try a different name.") : E("eventfullymanaged.events.list.emptyHint", "Create your first event to get started."),
82
- action: O ? void 0 : /* @__PURE__ */ c(g, {
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, {
83
138
  type: "button",
84
- onClick: () => D("/events/create"),
85
- children: [/* @__PURE__ */ s(u, { className: "h-4 w-4" }), E("eventfullymanaged.events.actions.create", "Create Event")]
139
+ onClick: () => F("/events/create"),
140
+ children: [/* @__PURE__ */ d(m, { className: "h-4 w-4" }), a("eventfullymanaged.events.actions.create", "Create Event")]
86
141
  })
87
142
  })
88
- }) : /* @__PURE__ */ c("div", {
143
+ }) : /* @__PURE__ */ f("div", {
89
144
  className: "space-y-3",
90
- children: [P.map((e) => /* @__PURE__ */ s(v, {
91
- treatment: "plain",
92
- className: "cursor-pointer border-border-seam p-4 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1",
93
- onClick: () => D(`/events/${e.id}`),
94
- children: /* @__PURE__ */ c("div", {
95
- className: "flex items-center justify-between gap-3",
96
- children: [/* @__PURE__ */ c("div", {
97
- className: "min-w-0",
98
- children: [/* @__PURE__ */ s("p", {
99
- className: "truncate text-lg font-semibold text-text-primary",
100
- children: e.name
101
- }), /* @__PURE__ */ c("p", {
102
- className: "mt-0.5 flex items-center gap-2 truncate text-sm text-text-secondary",
103
- children: [/* @__PURE__ */ s(l, { className: "h-4 w-4 shrink-0" }), [e.type, e.startAt ? new Date(e.startAt).toLocaleString() : void 0].filter(Boolean).join(" • ") || "No schedule set"]
104
- })]
105
- }), /* @__PURE__ */ c("div", {
106
- className: "flex shrink-0 items-center gap-2",
107
- children: [e.status ? /* @__PURE__ */ s(h, {
108
- variant: w(e.status),
109
- className: "uppercase",
110
- children: e.status
111
- }) : null, /* @__PURE__ */ s(n, {
112
- ariaLabel: `Event actions for ${e.name}`,
113
- onView: () => D(`/events/${e.id}`),
114
- onEdit: () => D(`/events/${e.id}/edit`)
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, {
148
+ treatment: "plain",
149
+ role: "button",
150
+ tabIndex: 0,
151
+ "aria-label": e.name,
152
+ 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}`),
154
+ onKeyDown: (t) => {
155
+ (t.key === "Enter" || t.key === " ") && (t.preventDefault(), F(`/events/${e.id}`));
156
+ },
157
+ children: [/* @__PURE__ */ d("span", {
158
+ "aria-hidden": "true",
159
+ 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", {
161
+ 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", {
163
+ className: "min-w-0 space-y-2",
164
+ children: [
165
+ /* @__PURE__ */ f("div", {
166
+ className: "flex flex-wrap items-center gap-2",
167
+ children: [
168
+ /* @__PURE__ */ d("p", {
169
+ className: "truncate text-lg font-semibold text-text-primary",
170
+ children: e.name
171
+ }),
172
+ e.status ? /* @__PURE__ */ d(x, {
173
+ variant: M(e.status),
174
+ className: "uppercase",
175
+ children: e.status
176
+ }) : null,
177
+ e.type ? /* @__PURE__ */ d(x, {
178
+ variant: "secondary",
179
+ className: "capitalize",
180
+ children: e.type.toLowerCase().replace(/_/g, " ")
181
+ }) : null
182
+ ]
183
+ }),
184
+ /* @__PURE__ */ f("div", {
185
+ className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-sm text-text-secondary",
186
+ children: [/* @__PURE__ */ f("span", {
187
+ 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", {
190
+ 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")]
192
+ })]
193
+ }),
194
+ /* @__PURE__ */ f("div", {
195
+ className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-xs",
196
+ children: [
197
+ /* @__PURE__ */ d(P, {
198
+ icon: v,
199
+ label: a("eventfullymanaged.events.card.registered", "registered"),
200
+ value: s.toLocaleString()
201
+ }),
202
+ /* @__PURE__ */ d(P, {
203
+ icon: v,
204
+ label: a("eventfullymanaged.events.card.checkedIn", "checked in"),
205
+ value: `${c}%`
206
+ }),
207
+ /* @__PURE__ */ d(P, {
208
+ icon: y,
209
+ label: a("eventfullymanaged.events.card.capacity", "capacity"),
210
+ value: e.capacity == null ? "—" : e.capacity.toLocaleString()
211
+ })
212
+ ]
213
+ })
214
+ ]
215
+ }), /* @__PURE__ */ d("div", {
216
+ className: "flex shrink-0 items-center gap-2 self-start sm:self-center",
217
+ onClick: (e) => e.stopPropagation(),
218
+ onKeyDown: (e) => e.stopPropagation(),
219
+ role: "presentation",
220
+ children: /* @__PURE__ */ d(o, {
221
+ ariaLabel: `Event actions for ${e.name}`,
222
+ onView: () => F(`/events/${e.id}`),
223
+ onEdit: () => F(`/events/${e.id}/edit`)
224
+ })
115
225
  })]
116
226
  })]
117
- })
118
- }, e.id)), /* @__PURE__ */ s(r, {
119
- offset: A.offset,
120
- limit: A.limit,
121
- loadedCount: P.length,
122
- total: N,
123
- onPrev: A.prevPage,
124
- onNext: A.nextPage,
227
+ }, 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,
125
235
  itemLabel: "events",
126
- loading: M
236
+ loading: B
127
237
  })]
128
238
  }),
129
- /* @__PURE__ */ s(S, {
239
+ /* @__PURE__ */ d(O, {
130
240
  storageKey: "eventfullymanaged-events",
131
- title: E("eventfullymanaged.events.nextSteps.title", "Finish setting up your event"),
241
+ title: a("eventfullymanaged.events.nextSteps.title", "Finish setting up your event"),
132
242
  steps: [
133
243
  {
134
244
  id: "configure-registration",
135
- label: E("eventfullymanaged.events.nextSteps.registration", "Configure registration & tickets"),
136
- description: E("eventfullymanaged.events.nextSteps.registrationDesc", "Open an event and define ticket types so people can register."),
137
- icon: /* @__PURE__ */ s(f, { className: "h-4 w-4" }),
138
- onClick: () => D("/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")
139
249
  },
140
250
  {
141
251
  id: "plan-networking",
142
- label: E("eventfullymanaged.events.nextSteps.networking", "Plan networking & sessions"),
143
- description: E("eventfullymanaged.events.nextSteps.networkingDesc", "Set up attendee matchmaking and meeting schedules."),
144
- icon: /* @__PURE__ */ s(p, { className: "h-4 w-4" }),
145
- onClick: () => D("/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")
146
256
  },
147
257
  {
148
258
  id: "announce",
149
- label: E("eventfullymanaged.events.nextSteps.announce", "Announce to attendees"),
150
- description: E("eventfullymanaged.events.nextSteps.announceDesc", "Send announcements and run communication campaigns."),
151
- icon: /* @__PURE__ */ s(u, { className: "h-4 w-4" }),
152
- onClick: () => D("/communication")
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")
153
263
  }
154
264
  ]
155
265
  })
@@ -157,6 +267,6 @@ function T() {
157
267
  });
158
268
  }
159
269
  //#endregion
160
- export { T as default };
270
+ export { F as default };
161
271
 
162
272
  //# sourceMappingURL=EventsPage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventsPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/EventsPage.tsx"],"sourcesContent":["import { CalendarClock, CalendarPlus, Search, Ticket, 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} from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport { useEventsQuery } from '../../api/eventApi';\nimport { ActionMenu } from '../../components/ActionMenu';\nimport { Pagination, usePagination } from '../../components/Pagination';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype EventRow = {\n id: string;\n name: string;\n type?: string;\n status?: string;\n startAt?: string;\n endAt?: string;\n};\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\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\n const total = data?.events?.total ?? 0;\n const rows = useMemo(() => (data?.events?.items ?? []) as EventRow[], [data]);\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 <GlassCard treatment=\"plain\" className=\"border-border-seam p-8 text-center text-sm text-text-secondary\">\n {t('eventfullymanaged.events.list.loading', 'Loading events...')}\n </GlassCard>\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 <GlassCard\n key={event.id}\n treatment=\"plain\"\n className=\"cursor-pointer border-border-seam p-4 transition-[box-shadow,border-color] duration-200 hover:border-border-strong hover:shadow-elevation-1\"\n onClick={() => navigate(`/events/${event.id}`)}\n >\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"truncate text-lg font-semibold text-text-primary\">{event.name}</p>\n <p className=\"mt-0.5 flex items-center gap-2 truncate text-sm text-text-secondary\">\n <CalendarClock className=\"h-4 w-4 shrink-0\" />\n {[event.type, event.startAt ? new Date(event.startAt).toLocaleString() : undefined]\n .filter(Boolean)\n .join(' • ') || 'No schedule set'}\n </p>\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n {event.status ? (\n <Badge variant={statusVariant(event.status)} className=\"uppercase\">\n {event.status}\n </Badge>\n ) : null}\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 <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 { 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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"}