@burdenoff/microfe-eventfullymanaged 2026.704.6 → 2026.704.8

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 +88 -87
  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 +691 -347
  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 +313 -98
  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 +329 -215
  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 +198 -77
  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 +335 -116
  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":"KioskPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/KioskPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n EmphasisPanel,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n Label,\n PagePurpose,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n} from '@burdenoff/fe-libs/ui';\nimport { LogIn, MonitorSmartphone, Plus, ScanLine } from 'lucide-react';\nimport { useMemo, useState } from 'react';\n\nimport {\n useAttendeesQuery,\n useCheckInRecordsQuery,\n useCheckInStationsQuery,\n useCreateCheckInRecordMutation,\n useCreateCheckInStationMutation,\n useDeleteCheckInRecordMutation,\n useDeleteCheckInStationMutation,\n useEventSessionsQuery,\n useEventsQuery,\n useUpdateCheckInRecordMutation,\n useUpdateCheckInStationMutation,\n} from '../../api/eventApi';\nimport { ActionMenu, Pagination, usePagination } from '../../components';\nimport { describeError, mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\n\n// ---------------------------------------------------------------------------\n// Shared types\n// ---------------------------------------------------------------------------\n\ntype StationRow = {\n id: string;\n eventId?: string | null;\n name?: string | null;\n metadata?: Record<string, unknown> | null;\n};\n\ntype RecordRow = {\n id: string;\n eventId: string;\n stationId?: string | null;\n attendeeId?: string | null;\n registrationId?: string | null;\n method: string;\n status: string;\n direction: string;\n recordedAt: string;\n metadata?: Record<string, unknown> | null;\n};\n\nconst STATION_TYPES = ['DESK', 'GATE', 'SELF_SERVICE', 'MOBILE'] as const;\nconst CHECKIN_METHODS = ['QR', 'MANUAL'] as const;\nconst CHECKIN_DIRECTIONS = ['IN', 'OUT'] as const;\n\n/**\n * The stations list resolver projects a CheckInStation onto the generic\n * SimpleEntity shape (id/name/metadata) — it does NOT expose the `code`,\n * `location` or `isActive` columns. To keep create → list → edit lossless we\n * mirror those attributes into `metadata` on every write, so an edit opened from\n * a list row can rebuild the full required input without a by-id resolver.\n */\ntype StationMeta = {\n code?: string;\n location?: string;\n type?: string;\n isActive?: boolean;\n};\n\nfunction readStationMeta(metadata: Record<string, unknown> | null | undefined): StationMeta {\n if (!metadata || typeof metadata !== 'object') {\n return {};\n }\n const m = metadata as Record<string, unknown>;\n return {\n code: typeof m.code === 'string' ? m.code : undefined,\n location: typeof m.location === 'string' ? m.location : undefined,\n type: typeof m.type === 'string' ? m.type : undefined,\n isActive: typeof m.isActive === 'boolean' ? m.isActive : undefined,\n };\n}\n\nfunction slugCode(name: string): string {\n return (\n name\n .trim()\n .toUpperCase()\n .replace(/[^A-Z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 24) || 'STATION'\n );\n}\n\n// ===========================================================================\n// Station create / edit dialog\n// ===========================================================================\n\ntype StationFormState = {\n name: string;\n code: string;\n location: string;\n type: string;\n isActive: boolean;\n};\n\ninterface StationDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n eventId: string;\n eventName: string;\n /** Present when editing an existing station. */\n station?: StationRow;\n}\n\nfunction StationDialog({ open, onOpenChange, eventId, eventName, station }: StationDialogProps) {\n const isEdit = Boolean(station);\n const [createStation, { loading: creating }] = useCreateCheckInStationMutation();\n const [updateStation, { loading: updating }] = useUpdateCheckInStationMutation();\n\n const initial = useMemo<StationFormState>(() => {\n if (!station) {\n return { name: '', code: '', location: '', type: 'DESK', isActive: true };\n }\n const meta = readStationMeta(station.metadata);\n return {\n name: station.name ?? '',\n code: meta.code ?? slugCode(station.name ?? ''),\n location: meta.location ?? '',\n type: meta.type ?? 'DESK',\n isActive: meta.isActive ?? true,\n };\n }, [station]);\n\n const [form, setForm] = useState<StationFormState>(initial);\n // Reset the form to the active station whenever the dialog is (re)opened.\n const [seededFor, setSeededFor] = useState<string | null>(null);\n const seedKey = `${open ? 'open' : 'closed'}:${station?.id ?? 'new'}`;\n if (open && seededFor !== seedKey) {\n setSeededFor(seedKey);\n setForm(initial);\n }\n if (!open && seededFor !== null) {\n setSeededFor(null);\n }\n\n const onChange = <K extends keyof StationFormState>(field: K, value: StationFormState[K]) => {\n setForm((prev) => ({ ...prev, [field]: value }));\n };\n\n const saving = creating || updating;\n\n const onSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const code = form.code.trim() || slugCode(form.name);\n const input = {\n eventId,\n name: form.name.trim(),\n code,\n location: form.location.trim() || null,\n isActive: form.isActive,\n kioskConfig: { type: form.type },\n // Mirror the write-only columns so the SimpleEntity list can rebuild them.\n metadata: { code, location: form.location.trim(), type: form.type, isActive: form.isActive },\n };\n\n try {\n if (isEdit && station) {\n const res = await updateStation({ variables: { id: station.id, input } });\n if (!mutationSucceeded(res, res.data?.updateCheckInStation?.id, 'Could not update station')) {\n return;\n }\n notify.success('Station updated', `“${input.name}” is now ${form.isActive ? 'active' : 'disabled'}.`);\n } else {\n const res = await createStation({ variables: { input } });\n if (!mutationSucceeded(res, res.data?.createCheckInStation?.id, 'Could not create station')) {\n return;\n }\n notify.success('Station created', `“${input.name}” is ready at ${eventName}.`);\n }\n onOpenChange(false);\n } catch (error) {\n notify.error('Could not save station', describeError(error));\n }\n };\n\n return (\n <ResponsiveDialog open={open} onOpenChange={onOpenChange}>\n <ResponsiveDialogContent className=\"max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>{isEdit ? 'Edit check-in station' : 'New check-in station'}</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n A station is a desk, gate or device where attendees scan in at {eventName}.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <form id=\"station-form\" onSubmit={onSubmit} className=\"space-y-4\">\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Name</span>\n <Input\n value={form.name}\n onChange={(e) => onChange('name', e.target.value)}\n placeholder=\"Main entrance\"\n required\n />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Code</span>\n <Input\n value={form.code}\n onChange={(e) => onChange('code', e.target.value)}\n placeholder=\"Auto from name\"\n />\n </label>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Location</span>\n <Input\n value={form.location}\n onChange={(e) => onChange('location', e.target.value)}\n placeholder=\"North lobby\"\n />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Type</span>\n <Select value={form.type} onValueChange={(value) => onChange('type', value)}>\n <SelectTrigger aria-label=\"Station type\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {STATION_TYPES.map((type) => (\n <SelectItem key={type} value={type}>\n {type.replace('_', ' ')}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n <div className=\"flex items-center justify-between rounded-card border border-border-seam bg-bg-surface p-3\">\n <div>\n <Label htmlFor=\"station-active\" className=\"text-text-primary\">\n Active\n </Label>\n <p className=\"text-xs text-text-secondary\">Disabled stations stay configured but cannot accept scans.</p>\n </div>\n <Switch\n id=\"station-active\"\n checked={form.isActive}\n onCheckedChange={(checked) => onChange('isActive', checked)}\n aria-label=\"Station active\"\n />\n </div>\n </form>\n\n <ResponsiveDialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)} disabled={saving}>\n Cancel\n </Button>\n <Button type=\"submit\" form=\"station-form\" disabled={saving}>\n {saving ? 'Saving…' : isEdit ? 'Save station' : 'Create station'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\n// ===========================================================================\n// Check-in record edit dialog\n// ===========================================================================\n\ntype RecordFormState = {\n method: string;\n direction: string;\n status: string;\n stationId: string;\n attendeeId: string;\n};\n\ninterface RecordDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n record: RecordRow | null;\n stations: StationRow[];\n}\n\nfunction RecordDialog({ open, onOpenChange, record, stations }: RecordDialogProps) {\n const [updateRecord, { loading }] = useUpdateCheckInRecordMutation();\n\n const initial = useMemo<RecordFormState>(\n () => ({\n method: record?.method ?? 'MANUAL',\n direction: record?.direction ?? 'IN',\n status: record?.status ?? 'checked_in',\n stationId: record?.stationId ?? '',\n attendeeId: record?.attendeeId ?? '',\n }),\n [record]\n );\n const [form, setForm] = useState<RecordFormState>(initial);\n const [seededFor, setSeededFor] = useState<string | null>(null);\n const seedKey = `${open ? 'open' : 'closed'}:${record?.id ?? 'none'}`;\n if (open && seededFor !== seedKey) {\n setSeededFor(seedKey);\n setForm(initial);\n }\n if (!open && seededFor !== null) {\n setSeededFor(null);\n }\n\n const onChange = <K extends keyof RecordFormState>(field: K, value: RecordFormState[K]) => {\n setForm((prev) => ({ ...prev, [field]: value }));\n };\n\n const onSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!record) {\n return;\n }\n const input = {\n eventId: record.eventId,\n attendeeId: form.attendeeId.trim() || null,\n registrationId: record.registrationId ?? null,\n stationId: form.stationId || null,\n method: form.method,\n direction: form.direction,\n status: form.status.trim() || 'checked_in',\n metadata: record.metadata ?? {},\n };\n try {\n const res = await updateRecord({ variables: { id: record.id, input } });\n if (!mutationSucceeded(res, res.data?.updateCheckInRecord?.id, 'Could not update record')) {\n return;\n }\n notify.success('Check-in updated');\n onOpenChange(false);\n } catch (error) {\n notify.error('Could not update record', describeError(error));\n }\n };\n\n return (\n <ResponsiveDialog open={open} onOpenChange={onOpenChange}>\n <ResponsiveDialogContent className=\"max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Edit check-in record</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Correct the direction, method or station for this scan.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <form id=\"record-form\" onSubmit={onSubmit} className=\"space-y-4\">\n <label className=\"block space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Attendee ID</span>\n <Input value={form.attendeeId} onChange={(e) => onChange('attendeeId', e.target.value)} />\n </label>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Method</span>\n <Select value={form.method} onValueChange={(value) => onChange('method', value)}>\n <SelectTrigger aria-label=\"Method\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {CHECKIN_METHODS.map((method) => (\n <SelectItem key={method} value={method}>\n {method}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Direction</span>\n <Select value={form.direction} onValueChange={(value) => onChange('direction', value)}>\n <SelectTrigger aria-label=\"Direction\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {CHECKIN_DIRECTIONS.map((direction) => (\n <SelectItem key={direction} value={direction}>\n {direction}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Status</span>\n <Input value={form.status} onChange={(e) => onChange('status', e.target.value)} />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Station</span>\n <Select\n value={form.stationId || 'none'}\n onValueChange={(value) => onChange('stationId', value === 'none' ? '' : value)}\n >\n <SelectTrigger aria-label=\"Station\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">No station</SelectItem>\n {stations.map((s) => (\n <SelectItem key={s.id} value={s.id}>\n {s.name ?? s.id}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n </form>\n\n <ResponsiveDialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button type=\"submit\" form=\"record-form\" disabled={loading}>\n {loading ? 'Saving…' : 'Save record'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\n// ===========================================================================\n// Check-in action panel (the hero workflow)\n// ===========================================================================\n\ninterface CheckInPanelProps {\n eventId: string;\n stations: StationRow[];\n onCheckedIn: () => void;\n}\n\nfunction CheckInPanel({ eventId, stations, onCheckedIn }: CheckInPanelProps) {\n const [scanValue, setScanValue] = useState('');\n const [method, setMethod] = useState<string>('QR');\n const [direction, setDirection] = useState<string>('IN');\n const [stationId, setStationId] = useState('');\n const [sessionId, setSessionId] = useState('');\n\n const [createRecord, { loading }] = useCreateCheckInRecordMutation();\n const attendeesQuery = useAttendeesQuery({ eventId, limit: 100, offset: 0 });\n const sessionsQuery = useEventSessionsQuery({ eventId, limit: 100, offset: 0 });\n\n const attendees = attendeesQuery.data?.attendees.items ?? [];\n const sessions = sessionsQuery.data?.eventSessions.items ?? [];\n\n const resolveAttendee = (raw: string): { attendeeId: string | null; label: string } => {\n const value = raw.trim();\n if (!value) {\n return { attendeeId: null, label: 'attendee' };\n }\n if (value.includes('@')) {\n const match = attendees.find((a) => a.email?.toLowerCase() === value.toLowerCase());\n return { attendeeId: match?.id ?? null, label: match?.fullName ?? value };\n }\n const byId = attendees.find((a) => a.id === value);\n return { attendeeId: value, label: byId?.fullName ?? `attendee ${value}` };\n };\n\n const onSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const { attendeeId, label } = resolveAttendee(scanValue);\n if (scanValue.trim().includes('@') && !attendeeId) {\n notify.error('Attendee not found', `No attendee at this event matches “${scanValue.trim()}”.`);\n return;\n }\n const input = {\n eventId,\n attendeeId,\n stationId: stationId || null,\n method,\n direction,\n status: 'checked_in',\n recordedAt: new Date().toISOString(),\n metadata: sessionId ? { sessionId } : {},\n };\n try {\n const res = await createRecord({ variables: { input } });\n if (!mutationSucceeded(res, res.data?.createCheckInRecord?.id, 'Could not record check-in')) {\n return;\n }\n notify.success(\n `${label} checked ${direction === 'OUT' ? 'out' : 'in'}`,\n `Recorded via ${method}${stationId ? '' : ' • no station'}.`\n );\n setScanValue('');\n onCheckedIn();\n } catch (error) {\n notify.error('Could not record check-in', describeError(error));\n }\n };\n\n return (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <div className=\"flex items-center gap-2\">\n <ScanLine className=\"h-5 w-5 text-text-secondary\" aria-hidden=\"true\" />\n <h2 className=\"text-lg font-semibold text-text-primary\">Check in an attendee</h2>\n </div>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Scan a QR badge or type an attendee ID or email, then record the arrival.\n </p>\n\n <form onSubmit={onSubmit} className=\"mt-4 space-y-4\">\n <label className=\"block space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Attendee ID / email / QR</span>\n <Input\n value={scanValue}\n onChange={(e) => setScanValue(e.target.value)}\n placeholder=\"Scan badge or paste attendee ID / email\"\n autoComplete=\"off\"\n />\n </label>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Method</span>\n <Select value={method} onValueChange={setMethod}>\n <SelectTrigger aria-label=\"Check-in method\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {CHECKIN_METHODS.map((m) => (\n <SelectItem key={m} value={m}>\n {m}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Direction</span>\n <Select value={direction} onValueChange={setDirection}>\n <SelectTrigger aria-label=\"Direction\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {CHECKIN_DIRECTIONS.map((d) => (\n <SelectItem key={d} value={d}>\n {d}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Station</span>\n <Select value={stationId || 'none'} onValueChange={(value) => setStationId(value === 'none' ? '' : value)}>\n <SelectTrigger aria-label=\"Station\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">No station</SelectItem>\n {stations.map((s) => (\n <SelectItem key={s.id} value={s.id}>\n {s.name ?? s.id}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Session</span>\n <Select value={sessionId || 'none'} onValueChange={(value) => setSessionId(value === 'none' ? '' : value)}>\n <SelectTrigger aria-label=\"Session\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">Whole event</SelectItem>\n {sessions.map((s) => (\n <SelectItem key={s.id} value={s.id}>\n {s.title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n <div className=\"flex justify-end\">\n <Button type=\"submit\" disabled={loading || !scanValue.trim()}>\n <LogIn className=\"h-4 w-4\" />\n {loading ? 'Recording…' : 'Record check-in'}\n </Button>\n </div>\n </form>\n </GlassCard>\n );\n}\n\n// ===========================================================================\n// Page\n// ===========================================================================\n\nconst PAGE_SIZE = 10;\n\nexport default function KioskPage() {\n const eventsQuery = useEventsQuery({ limit: 100, offset: 0 });\n const events = eventsQuery.data?.events.items ?? [];\n const [selectedEventId, setSelectedEventId] = useState('');\n const scopeEventId = selectedEventId || undefined;\n const selectedEvent = events.find((e) => e.id === selectedEventId);\n\n const stationsPagination = usePagination({ pageSize: PAGE_SIZE, resetKey: selectedEventId });\n const recordsPagination = usePagination({ pageSize: PAGE_SIZE, resetKey: selectedEventId });\n\n const stationsQuery = useCheckInStationsQuery({\n eventId: scopeEventId,\n limit: stationsPagination.limit,\n offset: stationsPagination.offset,\n });\n const recordsQuery = useCheckInRecordsQuery({\n eventId: scopeEventId,\n limit: recordsPagination.limit,\n offset: recordsPagination.offset,\n });\n\n const stations = (stationsQuery.data?.checkInStations.items ?? []) as StationRow[];\n const stationsTotal = stationsQuery.data?.checkInStations.total ?? 0;\n const records = (recordsQuery.data?.checkInRecords.items ?? []) as RecordRow[];\n const recordsTotal = recordsQuery.data?.checkInRecords.total ?? 0;\n\n const [deleteStation] = useDeleteCheckInStationMutation();\n const [deleteRecord] = useDeleteCheckInRecordMutation();\n\n const [stationDialogOpen, setStationDialogOpen] = useState(false);\n const [editingStation, setEditingStation] = useState<StationRow | undefined>(undefined);\n const [recordDialogOpen, setRecordDialogOpen] = useState(false);\n const [editingRecord, setEditingRecord] = useState<RecordRow | null>(null);\n\n const openNewStation = () => {\n setEditingStation(undefined);\n setStationDialogOpen(true);\n };\n const openEditStation = (station: StationRow) => {\n setEditingStation(station);\n setStationDialogOpen(true);\n };\n const openEditRecord = (record: RecordRow) => {\n setEditingRecord(record);\n setRecordDialogOpen(true);\n };\n\n const onDeleteStation = async (station: StationRow) => {\n const res = await deleteStation({ variables: { id: station.id } });\n if (!mutationSucceeded(res, res.data?.deleteCheckInStation ? station.id : null, 'Could not delete station')) {\n return;\n }\n notify.success('Station deleted', `“${station.name ?? station.id}” was removed.`);\n };\n\n const onDeleteRecord = async (record: RecordRow) => {\n const res = await deleteRecord({ variables: { id: record.id } });\n if (!mutationSucceeded(res, res.data?.deleteCheckInRecord ? record.id : null, 'Could not delete record')) {\n return;\n }\n notify.success('Check-in record deleted');\n };\n\n const hasEvent = Boolean(selectedEventId);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Kiosks are the front desk of your event. Each check-in station is a device or counter where attendees scan in,\n and check-in records are the live log of who arrived and when. Configure your stations before doors open, then\n check attendees in from this page and watch arrivals flow in on the day.\n </PagePurpose>\n\n <EmphasisPanel>\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>Kiosk</GradientText> &amp; Check-In\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Manage check-in stations and record attendee arrivals against a live backend.\n </p>\n </div>\n <div className=\"flex flex-wrap items-end gap-3\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Event</span>\n <Select value={selectedEventId || 'all'} onValueChange={(v) => setSelectedEventId(v === 'all' ? '' : v)}>\n <SelectTrigger aria-label=\"Event\" className=\"min-w-52\">\n <SelectValue placeholder=\"All events\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All events</SelectItem>\n {events.map((event) => (\n <SelectItem key={event.id} value={event.id}>\n {event.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n <Button type=\"button\" onClick={openNewStation} disabled={!hasEvent}>\n <Plus className=\"h-4 w-4\" />\n New station\n </Button>\n </div>\n </div>\n </EmphasisPanel>\n\n {hasEvent ? (\n <CheckInPanel\n eventId={selectedEventId}\n stations={stations}\n onCheckedIn={() => {\n recordsPagination.reset();\n void recordsQuery.refetch();\n }}\n />\n ) : (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"Select an event to check attendees in\"\n description=\"Check-in stations and records belong to a specific event. Pick one above to configure stations and record arrivals.\"\n className=\"py-8\"\n />\n </GlassCard>\n )}\n\n {/* Stations */}\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <div className=\"flex items-center gap-2\">\n <MonitorSmartphone className=\"h-5 w-5 text-text-secondary\" aria-hidden=\"true\" />\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {stationsQuery.loading ? 'Loading stations…' : `Stations (${stationsTotal})`}\n </h2>\n </div>\n <div className=\"mt-4\">\n {stations.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No check-in stations yet\"\n description={hasEvent ? 'Create a station to start scanning attendees in.' : 'No stations configured.'}\n className=\"py-8\"\n />\n ) : (\n <ul className=\"space-y-2.5\">\n {stations.map((station) => {\n const meta = readStationMeta(station.metadata);\n const active = meta.isActive ?? true;\n const subtitle = [meta.type?.replace('_', ' '), meta.location, meta.code].filter(Boolean).join(' • ');\n return (\n <li\n key={station.id}\n className=\"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 <div className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"truncate font-medium text-text-primary\">{station.name ?? station.id}</p>\n {subtitle ? <p className=\"mt-0.5 truncate text-sm text-text-secondary\">{subtitle}</p> : null}\n </div>\n <div className=\"flex items-center gap-2\">\n <Badge variant={active ? 'success' : 'warning'} className=\"shrink-0 uppercase\">\n {active ? 'active' : 'disabled'}\n </Badge>\n <ActionMenu\n ariaLabel={`Station ${station.name ?? station.id} actions`}\n entityName={station.name ?? undefined}\n onEdit={() => openEditStation(station)}\n onDelete={() => onDeleteStation(station)}\n />\n </div>\n </div>\n </li>\n );\n })}\n </ul>\n )}\n </div>\n <Pagination\n offset={stationsPagination.offset}\n limit={stationsPagination.limit}\n loadedCount={stations.length}\n total={stationsTotal}\n onPrev={stationsPagination.prevPage}\n onNext={stationsPagination.nextPage}\n itemLabel=\"stations\"\n loading={stationsQuery.loading}\n />\n </GlassCard>\n\n {/* Records */}\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {recordsQuery.loading ? 'Loading check-in records…' : `Check-In Records (${recordsTotal})`}\n </h2>\n <div className=\"mt-4\">\n {records.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"No check-in records yet\"\n description=\"Arrivals recorded from this page show up here, newest first.\"\n className=\"py-8\"\n />\n ) : (\n <ul className=\"space-y-2.5\">\n {records.map((record) => (\n <li\n key={record.id}\n className=\"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 <div className=\"flex items-center justify-between gap-3\">\n <div className=\"min-w-0\">\n <p className=\"truncate font-medium text-text-primary\">\n {record.attendeeId ? `Attendee ${record.attendeeId}` : `Record ${record.id}`}\n </p>\n <p className=\"mt-0.5 truncate text-sm text-text-secondary\">\n {record.method} • {record.direction} • {new Date(record.recordedAt).toLocaleString()}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Badge variant=\"secondary\" className=\"shrink-0 uppercase\">\n {record.status}\n </Badge>\n <ActionMenu\n ariaLabel={`Check-in record ${record.id} actions`}\n onEdit={() => openEditRecord(record)}\n onDelete={() => onDeleteRecord(record)}\n />\n </div>\n </div>\n </li>\n ))}\n </ul>\n )}\n </div>\n <Pagination\n offset={recordsPagination.offset}\n limit={recordsPagination.limit}\n loadedCount={records.length}\n total={recordsTotal}\n onPrev={recordsPagination.prevPage}\n onNext={recordsPagination.nextPage}\n itemLabel=\"records\"\n loading={recordsQuery.loading}\n />\n </GlassCard>\n\n {selectedEventId ? (\n <StationDialog\n open={stationDialogOpen}\n onOpenChange={setStationDialogOpen}\n eventId={selectedEventId}\n eventName={selectedEvent?.name ?? 'this event'}\n station={editingStation}\n />\n ) : null}\n\n <RecordDialog\n open={recordDialogOpen}\n onOpenChange={setRecordDialogOpen}\n record={editingRecord}\n stations={stations}\n />\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"KioskPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/modules/KioskPage.tsx"],"sourcesContent":["import {\n Badge,\n Button,\n EmphasisPanel,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n Label,\n PagePurpose,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ScrollArea,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Switch,\n} from '@burdenoff/fe-libs/ui';\nimport {\n ArrowLeftFromLine,\n ArrowRightToLine,\n Camera,\n CameraOff,\n Keyboard,\n LogIn,\n Plus,\n QrCode,\n ScanLine,\n} from 'lucide-react';\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n useAttendeesQuery,\n useCheckInRecordsQuery,\n useCheckInStationsQuery,\n useCreateCheckInRecordMutation,\n useCreateCheckInStationMutation,\n useDeleteCheckInRecordMutation,\n useDeleteCheckInStationMutation,\n useEventSessionsQuery,\n useEventsQuery,\n useUpdateCheckInRecordMutation,\n useUpdateCheckInStationMutation,\n} from '../../api/eventApi';\nimport { ActionMenu, Pagination, usePagination } from '../../components';\nimport { describeError, mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\n\n// ---------------------------------------------------------------------------\n// BarcodeDetector — a built-in browser API (Chromium/Edge). No new dependency;\n// feature-detected so the scanner degrades gracefully to manual entry when the\n// API (or a camera) is unavailable.\n// ---------------------------------------------------------------------------\n\ninterface DetectedBarcode {\n rawValue: string;\n}\ninterface BarcodeDetectorLike {\n detect(source: CanvasImageSource): Promise<DetectedBarcode[]>;\n}\ninterface BarcodeDetectorCtor {\n new (options?: { formats: string[] }): BarcodeDetectorLike;\n}\ndeclare global {\n interface Window {\n BarcodeDetector?: BarcodeDetectorCtor;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Shared types\n// ---------------------------------------------------------------------------\n\ntype StationRow = {\n id: string;\n eventId?: string | null;\n name?: string | null;\n metadata?: Record<string, unknown> | null;\n};\n\ntype RecordRow = {\n id: string;\n eventId: string;\n stationId?: string | null;\n attendeeId?: string | null;\n registrationId?: string | null;\n method: string;\n status: string;\n direction: string;\n recordedAt: string;\n metadata?: Record<string, unknown> | null;\n};\n\nconst STATION_TYPES = ['DESK', 'GATE', 'SELF_SERVICE', 'MOBILE'] as const;\nconst CHECKIN_METHODS = ['QR', 'MANUAL'] as const;\nconst CHECKIN_DIRECTIONS = ['IN', 'OUT'] as const;\n\n/**\n * The stations list resolver projects a CheckInStation onto the generic\n * SimpleEntity shape (id/name/metadata) — it does NOT expose the `code`,\n * `location` or `isActive` columns. To keep create → list → edit lossless we\n * mirror those attributes into `metadata` on every write, so an edit opened from\n * a list row can rebuild the full required input without a by-id resolver.\n */\ntype StationMeta = {\n code?: string;\n location?: string;\n type?: string;\n isActive?: boolean;\n};\n\nfunction readStationMeta(metadata: Record<string, unknown> | null | undefined): StationMeta {\n if (!metadata || typeof metadata !== 'object') {\n return {};\n }\n const m = metadata as Record<string, unknown>;\n return {\n code: typeof m.code === 'string' ? m.code : undefined,\n location: typeof m.location === 'string' ? m.location : undefined,\n type: typeof m.type === 'string' ? m.type : undefined,\n isActive: typeof m.isActive === 'boolean' ? m.isActive : undefined,\n };\n}\n\nfunction slugCode(name: string): string {\n return (\n name\n .trim()\n .toUpperCase()\n .replace(/[^A-Z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '')\n .slice(0, 24) || 'STATION'\n );\n}\n\nfunction initials(label: string): string {\n const parts = label.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) {\n return '?';\n }\n if (parts.length === 1) {\n return parts[0].slice(0, 2).toUpperCase();\n }\n return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n}\n\nfunction formatTime(iso: string): string {\n const date = new Date(iso);\n if (Number.isNaN(date.getTime())) {\n return '';\n }\n return date.toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' });\n}\n\n// ===========================================================================\n// Camera QR scanner viewfinder\n// ===========================================================================\n\ninterface QrViewfinderProps {\n onDetected: (value: string) => void;\n}\n\nfunction QrViewfinder({ onDetected }: QrViewfinderProps) {\n const supported = typeof window !== 'undefined' && Boolean(window.BarcodeDetector);\n const videoRef = useRef<HTMLVideoElement | null>(null);\n const streamRef = useRef<MediaStream | null>(null);\n const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n const [active, setActive] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n const stop = useCallback(() => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n if (streamRef.current) {\n for (const track of streamRef.current.getTracks()) {\n track.stop();\n }\n streamRef.current = null;\n }\n if (videoRef.current) {\n videoRef.current.srcObject = null;\n }\n setActive(false);\n }, []);\n\n // Always release the camera when the component unmounts.\n useEffect(() => stop, [stop]);\n\n const start = useCallback(async () => {\n if (!supported || !window.BarcodeDetector) {\n return;\n }\n setError(null);\n try {\n const stream = await navigator.mediaDevices.getUserMedia({\n video: { facingMode: 'environment' },\n audio: false,\n });\n streamRef.current = stream;\n setActive(true);\n const video = videoRef.current;\n if (video) {\n video.srcObject = stream;\n await video.play().catch(() => undefined);\n }\n const detector = new window.BarcodeDetector({ formats: ['qr_code'] });\n intervalRef.current = setInterval(async () => {\n const el = videoRef.current;\n if (!el || el.readyState < 2) {\n return;\n }\n try {\n const results = await detector.detect(el);\n const hit = results.find((r) => r.rawValue.trim());\n if (hit) {\n onDetected(hit.rawValue.trim());\n stop();\n }\n } catch {\n // Transient decode frames can throw; ignore and keep polling.\n }\n }, 350);\n } catch {\n setError('Camera unavailable. Grant camera access or use manual lookup.');\n stop();\n }\n }, [onDetected, stop, supported]);\n\n return (\n <div className=\"relative aspect-square w-full overflow-hidden rounded-card border-2 border-accent-primary/70 bg-bg-sunken\">\n {/* Live camera feed (hidden until active). */}\n <video\n ref={videoRef}\n className={`h-full w-full object-cover transition-opacity duration-300 ${active ? 'opacity-100' : 'opacity-0'}`}\n muted\n playsInline\n aria-label=\"Attendee QR camera preview\"\n />\n\n {/* Corner brackets + scan affordance overlay. */}\n <div className=\"pointer-events-none absolute inset-0 p-5\">\n <div className=\"relative h-full w-full\">\n <span className=\"absolute left-0 top-0 h-10 w-10 rounded-tl-lg border-l-4 border-t-4 border-accent-primary\" />\n <span className=\"absolute right-0 top-0 h-10 w-10 rounded-tr-lg border-r-4 border-t-4 border-accent-primary\" />\n <span className=\"absolute bottom-0 left-0 h-10 w-10 rounded-bl-lg border-b-4 border-l-4 border-accent-primary\" />\n <span className=\"absolute bottom-0 right-0 h-10 w-10 rounded-br-lg border-b-4 border-r-4 border-accent-primary\" />\n {active ? <span className=\"absolute inset-x-6 top-1/2 h-0.5 animate-pulse bg-accent-primary/80\" /> : null}\n </div>\n </div>\n\n {/* Idle state. */}\n {!active ? (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center gap-3 text-center\">\n <QrCode className=\"h-16 w-16 text-text-muted\" aria-hidden=\"true\" />\n <p className=\"text-lg font-semibold text-text-primary\">Scan attendee QR</p>\n {supported ? (\n <Button type=\"button\" size=\"sm\" variant=\"secondary\" onClick={() => void start()}>\n <Camera className=\"h-4 w-4\" />\n Start camera\n </Button>\n ) : (\n <p className=\"max-w-56 text-xs text-text-secondary\">\n Camera scanning isn&apos;t available in this browser — use manual lookup below.\n </p>\n )}\n {error ? <p className=\"max-w-56 text-xs text-status-danger-text\">{error}</p> : null}\n </div>\n ) : (\n <div className=\"absolute inset-x-0 bottom-0 flex items-center justify-between gap-2 bg-bg-canvas/70 p-3 backdrop-blur\">\n <span className=\"flex items-center gap-1.5 text-xs font-medium text-text-primary\">\n <span className=\"h-2 w-2 animate-pulse rounded-full bg-status-success-text\" />\n Scanning…\n </span>\n <Button type=\"button\" size=\"sm\" variant=\"outline\" onClick={stop}>\n <CameraOff className=\"h-4 w-4\" />\n Stop\n </Button>\n </div>\n )}\n </div>\n );\n}\n\n// ===========================================================================\n// Segmented toggle (Method / Direction)\n// ===========================================================================\n\ninterface SegmentedProps<T extends string> {\n label: string;\n value: T;\n options: readonly { value: T; label: string; icon?: React.ComponentType<{ className?: string }> }[];\n onChange: (value: T) => void;\n}\n\nfunction Segmented<T extends string>({ label, value, options, onChange }: SegmentedProps<T>) {\n return (\n <div className=\"space-y-1.5\">\n <span className=\"text-xs font-medium uppercase tracking-wide text-text-secondary\">{label}</span>\n <div\n role=\"group\"\n aria-label={label}\n className=\"inline-flex rounded-input border border-border-default bg-bg-sunken p-0.5\"\n >\n {options.map((opt) => {\n const Icon = opt.icon;\n const selected = opt.value === value;\n return (\n <button\n key={opt.value}\n type=\"button\"\n aria-pressed={selected}\n onClick={() => onChange(opt.value)}\n className={`inline-flex items-center gap-1.5 rounded-[calc(var(--radius-input)-2px)] px-3 py-1.5 text-sm font-medium transition-colors ${\n selected\n ? 'bg-action-primary-bg text-action-primary-text shadow-elevation-1'\n : 'text-text-secondary hover:text-text-primary'\n }`}\n >\n {Icon ? <Icon className=\"h-4 w-4\" /> : null}\n {opt.label}\n </button>\n );\n })}\n </div>\n </div>\n );\n}\n\n// ===========================================================================\n// Station create / edit dialog\n// ===========================================================================\n\ntype StationFormState = {\n name: string;\n code: string;\n location: string;\n type: string;\n isActive: boolean;\n};\n\ninterface StationDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n eventId: string;\n eventName: string;\n /** Present when editing an existing station. */\n station?: StationRow;\n}\n\nfunction StationDialog({ open, onOpenChange, eventId, eventName, station }: StationDialogProps) {\n const isEdit = Boolean(station);\n const [createStation, { loading: creating }] = useCreateCheckInStationMutation();\n const [updateStation, { loading: updating }] = useUpdateCheckInStationMutation();\n\n const initial = useMemo<StationFormState>(() => {\n if (!station) {\n return { name: '', code: '', location: '', type: 'DESK', isActive: true };\n }\n const meta = readStationMeta(station.metadata);\n return {\n name: station.name ?? '',\n code: meta.code ?? slugCode(station.name ?? ''),\n location: meta.location ?? '',\n type: meta.type ?? 'DESK',\n isActive: meta.isActive ?? true,\n };\n }, [station]);\n\n const [form, setForm] = useState<StationFormState>(initial);\n // Reset the form to the active station whenever the dialog is (re)opened.\n const [seededFor, setSeededFor] = useState<string | null>(null);\n const seedKey = `${open ? 'open' : 'closed'}:${station?.id ?? 'new'}`;\n if (open && seededFor !== seedKey) {\n setSeededFor(seedKey);\n setForm(initial);\n }\n if (!open && seededFor !== null) {\n setSeededFor(null);\n }\n\n const onChange = <K extends keyof StationFormState>(field: K, value: StationFormState[K]) => {\n setForm((prev) => ({ ...prev, [field]: value }));\n };\n\n const saving = creating || updating;\n\n const onSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const code = form.code.trim() || slugCode(form.name);\n const input = {\n eventId,\n name: form.name.trim(),\n code,\n location: form.location.trim() || null,\n isActive: form.isActive,\n kioskConfig: { type: form.type },\n // Mirror the write-only columns so the SimpleEntity list can rebuild them.\n metadata: { code, location: form.location.trim(), type: form.type, isActive: form.isActive },\n };\n\n try {\n if (isEdit && station) {\n const res = await updateStation({ variables: { id: station.id, input } });\n if (!mutationSucceeded(res, res.data?.updateCheckInStation?.id, 'Could not update station')) {\n return;\n }\n notify.success('Station updated', `“${input.name}” is now ${form.isActive ? 'active' : 'disabled'}.`);\n } else {\n const res = await createStation({ variables: { input } });\n if (!mutationSucceeded(res, res.data?.createCheckInStation?.id, 'Could not create station')) {\n return;\n }\n notify.success('Station created', `“${input.name}” is ready at ${eventName}.`);\n }\n onOpenChange(false);\n } catch (error) {\n notify.error('Could not save station', describeError(error));\n }\n };\n\n return (\n <ResponsiveDialog open={open} onOpenChange={onOpenChange}>\n <ResponsiveDialogContent className=\"max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>{isEdit ? 'Edit check-in station' : 'New check-in station'}</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n A station is a desk, gate or device where attendees scan in at {eventName}.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <form id=\"station-form\" onSubmit={onSubmit} className=\"space-y-4\">\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Name</span>\n <Input\n value={form.name}\n onChange={(e) => onChange('name', e.target.value)}\n placeholder=\"Main entrance\"\n required\n />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Code</span>\n <Input\n value={form.code}\n onChange={(e) => onChange('code', e.target.value)}\n placeholder=\"Auto from name\"\n />\n </label>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Location</span>\n <Input\n value={form.location}\n onChange={(e) => onChange('location', e.target.value)}\n placeholder=\"North lobby\"\n />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Type</span>\n <Select value={form.type} onValueChange={(value) => onChange('type', value)}>\n <SelectTrigger aria-label=\"Station type\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {STATION_TYPES.map((type) => (\n <SelectItem key={type} value={type}>\n {type.replace('_', ' ')}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n <div className=\"flex items-center justify-between rounded-card border border-border-seam bg-bg-surface p-3\">\n <div>\n <Label htmlFor=\"station-active\" className=\"text-text-primary\">\n Active\n </Label>\n <p className=\"text-xs text-text-secondary\">Disabled stations stay configured but cannot accept scans.</p>\n </div>\n <Switch\n id=\"station-active\"\n checked={form.isActive}\n onCheckedChange={(checked) => onChange('isActive', checked)}\n aria-label=\"Station active\"\n />\n </div>\n </form>\n\n <ResponsiveDialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)} disabled={saving}>\n Cancel\n </Button>\n <Button type=\"submit\" form=\"station-form\" disabled={saving}>\n {saving ? 'Saving…' : isEdit ? 'Save station' : 'Create station'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\n// ===========================================================================\n// Check-in record edit dialog\n// ===========================================================================\n\ntype RecordFormState = {\n method: string;\n direction: string;\n status: string;\n stationId: string;\n attendeeId: string;\n};\n\ninterface RecordDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n record: RecordRow | null;\n stations: StationRow[];\n}\n\nfunction RecordDialog({ open, onOpenChange, record, stations }: RecordDialogProps) {\n const [updateRecord, { loading }] = useUpdateCheckInRecordMutation();\n\n const initial = useMemo<RecordFormState>(\n () => ({\n method: record?.method ?? 'MANUAL',\n direction: record?.direction ?? 'IN',\n status: record?.status ?? 'checked_in',\n stationId: record?.stationId ?? '',\n attendeeId: record?.attendeeId ?? '',\n }),\n [record]\n );\n const [form, setForm] = useState<RecordFormState>(initial);\n const [seededFor, setSeededFor] = useState<string | null>(null);\n const seedKey = `${open ? 'open' : 'closed'}:${record?.id ?? 'none'}`;\n if (open && seededFor !== seedKey) {\n setSeededFor(seedKey);\n setForm(initial);\n }\n if (!open && seededFor !== null) {\n setSeededFor(null);\n }\n\n const onChange = <K extends keyof RecordFormState>(field: K, value: RecordFormState[K]) => {\n setForm((prev) => ({ ...prev, [field]: value }));\n };\n\n const onSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n if (!record) {\n return;\n }\n const input = {\n eventId: record.eventId,\n attendeeId: form.attendeeId.trim() || null,\n registrationId: record.registrationId ?? null,\n stationId: form.stationId || null,\n method: form.method,\n direction: form.direction,\n status: form.status.trim() || 'checked_in',\n metadata: record.metadata ?? {},\n };\n try {\n const res = await updateRecord({ variables: { id: record.id, input } });\n if (!mutationSucceeded(res, res.data?.updateCheckInRecord?.id, 'Could not update record')) {\n return;\n }\n notify.success('Check-in updated');\n onOpenChange(false);\n } catch (error) {\n notify.error('Could not update record', describeError(error));\n }\n };\n\n return (\n <ResponsiveDialog open={open} onOpenChange={onOpenChange}>\n <ResponsiveDialogContent className=\"max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Edit check-in record</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Correct the direction, method or station for this scan.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n <form id=\"record-form\" onSubmit={onSubmit} className=\"space-y-4\">\n <label className=\"block space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Attendee ID</span>\n <Input value={form.attendeeId} onChange={(e) => onChange('attendeeId', e.target.value)} />\n </label>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Method</span>\n <Select value={form.method} onValueChange={(value) => onChange('method', value)}>\n <SelectTrigger aria-label=\"Method\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {CHECKIN_METHODS.map((method) => (\n <SelectItem key={method} value={method}>\n {method}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Direction</span>\n <Select value={form.direction} onValueChange={(value) => onChange('direction', value)}>\n <SelectTrigger aria-label=\"Direction\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {CHECKIN_DIRECTIONS.map((direction) => (\n <SelectItem key={direction} value={direction}>\n {direction}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Status</span>\n <Input value={form.status} onChange={(e) => onChange('status', e.target.value)} />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Station</span>\n <Select\n value={form.stationId || 'none'}\n onValueChange={(value) => onChange('stationId', value === 'none' ? '' : value)}\n >\n <SelectTrigger aria-label=\"Station\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">No station</SelectItem>\n {stations.map((s) => (\n <SelectItem key={s.id} value={s.id}>\n {s.name ?? s.id}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n </form>\n\n <ResponsiveDialogFooter>\n <Button type=\"button\" variant=\"outline\" onClick={() => onOpenChange(false)} disabled={loading}>\n Cancel\n </Button>\n <Button type=\"submit\" form=\"record-form\" disabled={loading}>\n {loading ? 'Saving…' : 'Save record'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\n// ===========================================================================\n// Kiosk check-in panel (the hero workflow)\n// ===========================================================================\n\ninterface AttendeeLite {\n id: string;\n fullName: string;\n email?: string | null;\n}\n\ninterface CheckInPanelProps {\n eventId: string;\n eventName: string;\n stations: StationRow[];\n attendees: AttendeeLite[];\n activeStationId: string;\n onStationChange: (stationId: string) => void;\n onCheckedIn: () => void;\n}\n\nfunction CheckInPanel({\n eventId,\n eventName,\n stations,\n attendees,\n activeStationId,\n onStationChange,\n onCheckedIn,\n}: CheckInPanelProps) {\n const [scanValue, setScanValue] = useState('');\n const [method, setMethod] = useState<(typeof CHECKIN_METHODS)[number]>('QR');\n const [direction, setDirection] = useState<(typeof CHECKIN_DIRECTIONS)[number]>('IN');\n const [sessionId, setSessionId] = useState('');\n const inputRef = useRef<HTMLInputElement | null>(null);\n\n const [createRecord, { loading }] = useCreateCheckInRecordMutation();\n const sessionsQuery = useEventSessionsQuery({ eventId, limit: 100, offset: 0 });\n const sessions = sessionsQuery.data?.eventSessions.items ?? [];\n\n const resolveAttendee = (raw: string): { attendeeId: string | null; label: string; matched: boolean } => {\n const value = raw.trim();\n if (!value) {\n return { attendeeId: null, label: 'attendee', matched: false };\n }\n if (value.includes('@')) {\n const match = attendees.find((a) => a.email?.toLowerCase() === value.toLowerCase());\n return { attendeeId: match?.id ?? null, label: match?.fullName ?? value, matched: Boolean(match) };\n }\n const byId = attendees.find((a) => a.id === value);\n return { attendeeId: value, label: byId?.fullName ?? `attendee ${value}`, matched: Boolean(byId) };\n };\n\n const onScanDetected = (value: string) => {\n setScanValue(value);\n setMethod('QR');\n notify.info('QR captured', 'Confirm the details and tap Check in.');\n inputRef.current?.focus();\n };\n\n const onSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n const { attendeeId, label } = resolveAttendee(scanValue);\n if (scanValue.trim().includes('@') && !attendeeId) {\n notify.error('Attendee not found', `No attendee at this event matches “${scanValue.trim()}”.`);\n return;\n }\n const input = {\n eventId,\n attendeeId,\n stationId: activeStationId || null,\n method,\n direction,\n status: direction === 'OUT' ? 'checked_out' : 'checked_in',\n recordedAt: new Date().toISOString(),\n metadata: sessionId ? { sessionId } : {},\n };\n try {\n const res = await createRecord({ variables: { input } });\n if (!mutationSucceeded(res, res.data?.createCheckInRecord?.id, 'Could not record check-in')) {\n return;\n }\n const activeStation = stations.find((s) => s.id === activeStationId);\n notify.success(\n `${label} checked ${direction === 'OUT' ? 'out' : 'in'}`,\n `Recorded via ${method}${activeStation?.name ? ` • ${activeStation.name}` : ''}.`\n );\n setScanValue('');\n inputRef.current?.focus();\n onCheckedIn();\n } catch (error) {\n notify.error('Could not record check-in', describeError(error));\n }\n };\n\n return (\n <GlassCard treatment=\"glass\" glow className=\"border-border-seam p-5 sm:p-6\">\n <div className=\"flex items-center gap-2\">\n <ScanLine className=\"h-5 w-5 text-accent-primary\" aria-hidden=\"true\" />\n <h2 className=\"text-lg font-semibold text-text-primary\">Kiosk mode</h2>\n </div>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Scan an attendee badge or look them up, set the direction, and check them into {eventName}.\n </p>\n\n <div className=\"mt-5\">\n <QrViewfinder onDetected={onScanDetected} />\n </div>\n\n <form onSubmit={onSubmit} className=\"mt-5 space-y-5\">\n <label className=\"block space-y-1.5\">\n <span className=\"flex items-center gap-1.5 text-xs font-medium uppercase tracking-wide text-text-secondary\">\n <Keyboard className=\"h-3.5 w-3.5\" />\n Manual lookup\n </span>\n <Input\n ref={inputRef}\n value={scanValue}\n onChange={(e) => setScanValue(e.target.value)}\n placeholder=\"Enter name, email or attendee ID\"\n autoComplete=\"off\"\n className=\"h-12 text-base\"\n />\n </label>\n\n <div className=\"flex flex-wrap gap-5\">\n <Segmented\n label=\"Method\"\n value={method}\n onChange={setMethod}\n options={[\n { value: 'QR', label: 'QR', icon: QrCode },\n { value: 'MANUAL', label: 'Manual', icon: Keyboard },\n ]}\n />\n <Segmented\n label=\"Direction\"\n value={direction}\n onChange={setDirection}\n options={[\n { value: 'IN', label: 'In', icon: ArrowRightToLine },\n { value: 'OUT', label: 'Out', icon: ArrowLeftFromLine },\n ]}\n />\n <label className=\"space-y-1.5\">\n <span className=\"text-xs font-medium uppercase tracking-wide text-text-secondary\">Station</span>\n <Select value={activeStationId || 'none'} onValueChange={(v) => onStationChange(v === 'none' ? '' : v)}>\n <SelectTrigger aria-label=\"Station\" className=\"min-w-40\">\n <SelectValue placeholder=\"No station\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">No station</SelectItem>\n {stations.map((s) => (\n <SelectItem key={s.id} value={s.id}>\n {s.name ?? s.id}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n <label className=\"space-y-1.5\">\n <span className=\"text-xs font-medium uppercase tracking-wide text-text-secondary\">Session</span>\n <Select value={sessionId || 'none'} onValueChange={(v) => setSessionId(v === 'none' ? '' : v)}>\n <SelectTrigger aria-label=\"Session\" className=\"min-w-40\">\n <SelectValue placeholder=\"Whole event\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"none\">Whole event</SelectItem>\n {sessions.map((s) => (\n <SelectItem key={s.id} value={s.id}>\n {s.title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n <Button type=\"submit\" size=\"lg\" disabled={loading || !scanValue.trim()} className=\"h-12 w-full text-base\">\n <LogIn className=\"h-5 w-5\" />\n {loading ? 'Recording…' : `Check ${direction === 'OUT' ? 'out' : 'in'}`}\n </Button>\n </form>\n </GlassCard>\n );\n}\n\n// ===========================================================================\n// Page\n// ===========================================================================\n\nconst PAGE_SIZE = 10;\nconst COUNTER_FETCH = 500;\n\nexport default function KioskPage() {\n const eventsQuery = useEventsQuery({ limit: 100, offset: 0 });\n const events = eventsQuery.data?.events.items ?? [];\n const [selectedEventId, setSelectedEventId] = useState('');\n const scopeEventId = selectedEventId || undefined;\n const selectedEvent = events.find((e) => e.id === selectedEventId);\n\n const [activeStationId, setActiveStationId] = useState('');\n const recordsPagination = usePagination({ pageSize: PAGE_SIZE, resetKey: selectedEventId });\n\n const stationsQuery = useCheckInStationsQuery({ eventId: scopeEventId, limit: 100, offset: 0 });\n const recordsQuery = useCheckInRecordsQuery({\n eventId: scopeEventId,\n limit: recordsPagination.limit,\n offset: recordsPagination.offset,\n });\n // Broad fetch powering the live \"checked in X / Y\" meter and per-station counts.\n const counterQuery = useCheckInRecordsQuery({ eventId: scopeEventId, limit: COUNTER_FETCH, offset: 0 });\n const attendeesQuery = useAttendeesQuery({ eventId: scopeEventId, limit: 200, offset: 0 });\n\n const stations = useMemo(\n () => (stationsQuery.data?.checkInStations.items ?? []) as StationRow[],\n [stationsQuery.data]\n );\n const records = (recordsQuery.data?.checkInRecords.items ?? []) as RecordRow[];\n const recordsTotal = recordsQuery.data?.checkInRecords.total ?? 0;\n const allRecords = useMemo(() => (counterQuery.data?.checkInRecords.items ?? []) as RecordRow[], [counterQuery.data]);\n const attendees = useMemo<AttendeeLite[]>(() => attendeesQuery.data?.attendees.items ?? [], [attendeesQuery.data]);\n const attendeesTotal = attendeesQuery.data?.attendees.total ?? 0;\n\n const attendeeNames = useMemo(() => {\n const map = new Map<string, string>();\n for (const a of attendees) {\n map.set(a.id, a.fullName);\n }\n return map;\n }, [attendees]);\n\n const stationNames = useMemo(() => {\n const map = new Map<string, string>();\n for (const s of stations) {\n map.set(s.id, s.name ?? s.id);\n }\n return map;\n }, [stations]);\n\n // Live counters derived from the broad records fetch — no fabricated numbers.\n const { checkedInCount, stationCounts } = useMemo(() => {\n const insideAttendees = new Set<string>();\n const anonInside = { count: 0 };\n const perStation = new Map<string, Set<string>>();\n // Replay records oldest→newest so the latest IN/OUT wins per attendee.\n const ordered = [...allRecords].sort((a, b) => new Date(a.recordedAt).getTime() - new Date(b.recordedAt).getTime());\n for (const r of ordered) {\n const key = r.attendeeId ?? '';\n if (r.direction === 'OUT') {\n if (key) {\n insideAttendees.delete(key);\n } else if (anonInside.count > 0) {\n anonInside.count -= 1;\n }\n } else {\n if (key) {\n insideAttendees.add(key);\n } else {\n anonInside.count += 1;\n }\n }\n if (r.stationId && r.direction !== 'OUT') {\n const set = perStation.get(r.stationId) ?? new Set<string>();\n set.add(r.id);\n perStation.set(r.stationId, set);\n }\n }\n const counts = new Map<string, number>();\n for (const [id, set] of perStation) {\n counts.set(id, set.size);\n }\n return { checkedInCount: insideAttendees.size + anonInside.count, stationCounts: counts };\n }, [allRecords]);\n\n const capacityTarget = attendeesTotal;\n const meterPct = capacityTarget > 0 ? Math.min(100, Math.round((checkedInCount / capacityTarget) * 100)) : 0;\n\n const [deleteStation] = useDeleteCheckInStationMutation();\n const [deleteRecord] = useDeleteCheckInRecordMutation();\n\n const [stationDialogOpen, setStationDialogOpen] = useState(false);\n const [editingStation, setEditingStation] = useState<StationRow | undefined>(undefined);\n const [recordDialogOpen, setRecordDialogOpen] = useState(false);\n const [editingRecord, setEditingRecord] = useState<RecordRow | null>(null);\n\n const openNewStation = () => {\n setEditingStation(undefined);\n setStationDialogOpen(true);\n };\n const openEditStation = (station: StationRow) => {\n setEditingStation(station);\n setStationDialogOpen(true);\n };\n const openEditRecord = (record: RecordRow) => {\n setEditingRecord(record);\n setRecordDialogOpen(true);\n };\n\n const onDeleteStation = async (station: StationRow) => {\n const res = await deleteStation({ variables: { id: station.id } });\n if (!mutationSucceeded(res, res.data?.deleteCheckInStation ? station.id : null, 'Could not delete station')) {\n return;\n }\n if (activeStationId === station.id) {\n setActiveStationId('');\n }\n notify.success('Station deleted', `“${station.name ?? station.id}” was removed.`);\n };\n\n const onDeleteRecord = async (record: RecordRow) => {\n const res = await deleteRecord({ variables: { id: record.id } });\n if (!mutationSucceeded(res, res.data?.deleteCheckInRecord ? record.id : null, 'Could not delete record')) {\n return;\n }\n notify.success('Check-in record deleted');\n };\n\n const refreshAfterCheckIn = () => {\n void recordsQuery.refetch();\n void counterQuery.refetch();\n };\n\n const recordLabel = (record: RecordRow): string => {\n if (record.attendeeId) {\n return attendeeNames.get(record.attendeeId) ?? `Attendee ${record.attendeeId.slice(0, 8)}`;\n }\n return 'Walk-in guest';\n };\n\n const hasEvent = Boolean(selectedEventId);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Kiosks are the front desk of your event. Each check-in station is a device or counter where attendees scan in,\n and check-in records are the live log of who arrived and when. Configure your stations before doors open, then\n check attendees in from this page and watch arrivals flow in on the day.\n </PagePurpose>\n\n <EmphasisPanel>\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">\n <GradientText>Kiosk</GradientText> &amp; Check-In\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Manage check-in stations and record attendee arrivals against a live backend.\n </p>\n </div>\n <div className=\"flex flex-wrap items-end gap-3\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Event</span>\n <Select value={selectedEventId || 'all'} onValueChange={(v) => setSelectedEventId(v === 'all' ? '' : v)}>\n <SelectTrigger aria-label=\"Event\" className=\"min-w-52\">\n <SelectValue placeholder=\"All events\" />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"all\">All events</SelectItem>\n {events.map((event) => (\n <SelectItem key={event.id} value={event.id}>\n {event.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n <Button type=\"button\" onClick={openNewStation} disabled={!hasEvent}>\n <Plus className=\"h-4 w-4\" />\n New station\n </Button>\n </div>\n </div>\n </EmphasisPanel>\n\n {!hasEvent ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title=\"Select an event to open the kiosk\"\n description=\"Check-in stations and records belong to a specific event. Pick one above to start scanning attendees in.\"\n className=\"py-8\"\n />\n </GlassCard>\n ) : (\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-12\">\n {/* Left — kiosk scan panel */}\n <div className=\"lg:col-span-5\">\n <CheckInPanel\n eventId={selectedEventId}\n eventName={selectedEvent?.name ?? 'this event'}\n stations={stations}\n attendees={attendees}\n activeStationId={activeStationId}\n onStationChange={setActiveStationId}\n onCheckedIn={refreshAfterCheckIn}\n />\n </div>\n\n {/* Right — stations + live records */}\n <div className=\"space-y-6 lg:col-span-7\">\n {/* Stations chip strip */}\n <section>\n <h2 className=\"text-sm font-semibold uppercase tracking-wide text-text-secondary\">Stations</h2>\n <div className=\"mt-3 flex flex-wrap gap-2\">\n {stations.map((station) => {\n const active = activeStationId === station.id;\n const count = stationCounts.get(station.id) ?? 0;\n return (\n <div\n key={station.id}\n className={`group inline-flex items-center gap-1.5 rounded-full border px-3 py-1.5 text-sm transition-colors ${\n active\n ? 'border-accent-primary bg-accent-primary/10 text-accent-primary'\n : 'border-border-default bg-bg-surface text-text-secondary hover:border-border-strong'\n }`}\n >\n <button\n type=\"button\"\n aria-pressed={active}\n onClick={() => setActiveStationId(active ? '' : station.id)}\n className=\"inline-flex items-center gap-1.5 font-medium outline-none\"\n >\n {station.name ?? station.id}\n {count > 0 ? (\n <span className=\"rounded-full bg-bg-sunken px-1.5 py-0.5 text-xs tabular-nums text-text-secondary\">\n {count}\n </span>\n ) : null}\n </button>\n <ActionMenu\n ariaLabel={`Station ${station.name ?? station.id} actions`}\n entityName={station.name ?? undefined}\n onEdit={() => openEditStation(station)}\n onDelete={() => onDeleteStation(station)}\n />\n </div>\n );\n })}\n <button\n type=\"button\"\n onClick={openNewStation}\n className=\"inline-flex items-center gap-1.5 rounded-full border border-dashed border-border-strong px-3 py-1.5 text-sm font-medium text-text-secondary transition-colors hover:border-accent-primary hover:text-accent-primary\"\n >\n <Plus className=\"h-3.5 w-3.5\" />\n New station\n </button>\n </div>\n {stationsQuery.loading && stations.length === 0 ? (\n <p className=\"mt-2 text-sm text-text-secondary\">Loading stations…</p>\n ) : null}\n </section>\n\n {/* Live records */}\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <div className=\"flex flex-wrap items-center justify-between gap-2\">\n <h2 className=\"text-lg font-semibold text-text-primary\">Check-In Records</h2>\n <p className=\"text-sm text-text-secondary\">\n Checked in{' '}\n <span className=\"text-lg font-bold tabular-nums text-text-primary\">\n {checkedInCount.toLocaleString()}\n </span>\n {capacityTarget > 0 ? (\n <>\n {' '}\n / <span className=\"tabular-nums\">{capacityTarget.toLocaleString()}</span>\n </>\n ) : null}\n </p>\n </div>\n\n {capacityTarget > 0 ? (\n <div\n className=\"mt-3 h-2 w-full overflow-hidden rounded-full bg-bg-sunken\"\n role=\"progressbar\"\n aria-valuenow={checkedInCount}\n aria-valuemin={0}\n aria-valuemax={capacityTarget}\n aria-label=\"Attendees checked in\"\n >\n <div\n className=\"h-full rounded-full bg-action-primary-bg transition-[width] duration-500\"\n style={{ width: `${meterPct}%` }}\n />\n </div>\n ) : null}\n\n <div className=\"mt-4\">\n {records.length === 0 ? (\n <IllustratedEmptyState\n illustration=\"empty-data\"\n title={recordsQuery.loading ? 'Loading check-in records…' : 'No check-in records yet'}\n description=\"Arrivals recorded from this kiosk show up here, newest first.\"\n className=\"py-8\"\n />\n ) : (\n <ScrollArea className=\"max-h-[28rem] pr-3\">\n <ul className=\"space-y-2.5\">\n {records.map((record) => {\n const label = recordLabel(record);\n const isOut = record.direction === 'OUT';\n const station = record.stationId ? stationNames.get(record.stationId) : null;\n return (\n <li\n key={record.id}\n className=\"flex items-center 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 <span\n className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-accent-primary/10 text-sm font-semibold text-accent-primary\"\n aria-hidden=\"true\"\n >\n {initials(label)}\n </span>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-medium text-text-primary\">{label}</p>\n <p className=\"mt-0.5 truncate text-sm text-text-secondary\">\n {formatTime(record.recordedAt)} • {record.method}\n </p>\n </div>\n <div className=\"flex shrink-0 items-center gap-2\">\n <Badge variant={isOut ? 'secondary' : 'success'} className=\"uppercase\">\n {isOut ? 'Checked out' : 'Checked in'}\n </Badge>\n {station ? (\n <span className=\"hidden text-sm text-text-secondary sm:inline\">{station}</span>\n ) : null}\n <ActionMenu\n ariaLabel={`Check-in record ${record.id} actions`}\n onEdit={() => openEditRecord(record)}\n onDelete={() => onDeleteRecord(record)}\n />\n </div>\n </li>\n );\n })}\n </ul>\n </ScrollArea>\n )}\n </div>\n <Pagination\n offset={recordsPagination.offset}\n limit={recordsPagination.limit}\n loadedCount={records.length}\n total={recordsTotal}\n onPrev={recordsPagination.prevPage}\n onNext={recordsPagination.nextPage}\n itemLabel=\"records\"\n loading={recordsQuery.loading}\n />\n </GlassCard>\n </div>\n </div>\n )}\n\n {selectedEventId ? (\n <StationDialog\n open={stationDialogOpen}\n onOpenChange={setStationDialogOpen}\n eventId={selectedEventId}\n eventName={selectedEvent?.name ?? 'this event'}\n station={editingStation}\n />\n ) : null}\n\n <RecordDialog\n open={recordDialogOpen}\n onOpenChange={setRecordDialogOpen}\n record={editingRecord}\n stations={stations}\n />\n </div>\n );\n}\n"],"mappings":"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"}