@burdenoff/microfe-eventfullymanaged 2026.704.5 → 2026.704.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/_rolldown/runtime.js +20 -0
- package/dist/eventfullymanaged/api/eventApi.js +140 -100
- package/dist/eventfullymanaged/api/eventApi.js.map +1 -1
- package/dist/eventfullymanaged/components/EventCharts.js +260 -0
- package/dist/eventfullymanaged/components/EventCharts.js.map +1 -0
- package/dist/eventfullymanaged/components/index.js +1 -0
- package/dist/eventfullymanaged/lib/format.js +27 -0
- package/dist/eventfullymanaged/lib/format.js.map +1 -0
- package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js +222 -78
- package/dist/eventfullymanaged/pages/dashboard/DashboardPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/events/EventDetailPage.js +689 -328
- package/dist/eventfullymanaged/pages/events/EventDetailPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/events/EventFormPage.js +14 -0
- package/dist/eventfullymanaged/pages/events/EventFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/exhibitors/ExhibitorsPage.js +240 -122
- package/dist/eventfullymanaged/pages/exhibitors/ExhibitorsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/leads/LeadCaptureDialog.js +60 -50
- package/dist/eventfullymanaged/pages/leads/LeadCaptureDialog.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js +318 -108
- package/dist/eventfullymanaged/pages/modules/AnalyticsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/CommunicationPage.js +288 -204
- package/dist/eventfullymanaged/pages/modules/CommunicationPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/EventsPage.js +206 -96
- package/dist/eventfullymanaged/pages/modules/EventsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/KioskPage.js +597 -397
- package/dist/eventfullymanaged/pages/modules/KioskPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js +349 -148
- package/dist/eventfullymanaged/pages/modules/NetworkingPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.js +343 -213
- package/dist/eventfullymanaged/pages/modules/RegistrationPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js +147 -100
- package/dist/eventfullymanaged/pages/modules/SponsorDetailsPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/registration/AttendeeFormPage.js +25 -2
- package/dist/eventfullymanaged/pages/registration/AttendeeFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/registration/PromoCodeFormPage.js +134 -76
- package/dist/eventfullymanaged/pages/registration/PromoCodeFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/registration/RegisterAttendeePage.js +661 -305
- package/dist/eventfullymanaged/pages/registration/RegisterAttendeePage.js.map +1 -1
- package/dist/eventfullymanaged/pages/speakers/SpeakersPage.js +199 -69
- package/dist/eventfullymanaged/pages/speakers/SpeakersPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js +254 -135
- package/dist/eventfullymanaged/pages/sponsors/SponsorsListPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js +345 -112
- package/dist/eventfullymanaged/pages/venues/FloorPlansPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js +73 -45
- package/dist/eventfullymanaged/pages/venues/VenueDetailPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueFormPage.js +101 -100
- package/dist/eventfullymanaged/pages/venues/VenueFormPage.js.map +1 -1
- package/dist/eventfullymanaged/pages/venues/VenueListPage.js +147 -104
- package/dist/eventfullymanaged/pages/venues/VenueListPage.js.map +1 -1
- package/dist/node_modules/clsx/dist/clsx.js +18 -0
- package/dist/node_modules/clsx/dist/clsx.js.map +1 -0
- package/dist/node_modules/d3-array/src/ascending.js +8 -0
- package/dist/node_modules/d3-array/src/ascending.js.map +1 -0
- package/dist/node_modules/d3-array/src/bisect.js +10 -0
- package/dist/node_modules/d3-array/src/bisect.js.map +1 -0
- package/dist/node_modules/d3-array/src/bisector.js +43 -0
- package/dist/node_modules/d3-array/src/bisector.js.map +1 -0
- package/dist/node_modules/d3-array/src/descending.js +8 -0
- package/dist/node_modules/d3-array/src/descending.js.map +1 -0
- package/dist/node_modules/d3-array/src/max.js +14 -0
- package/dist/node_modules/d3-array/src/max.js.map +1 -0
- package/dist/node_modules/d3-array/src/min.js +14 -0
- package/dist/node_modules/d3-array/src/min.js.map +1 -0
- package/dist/node_modules/d3-array/src/number.js +15 -0
- package/dist/node_modules/d3-array/src/number.js.map +1 -0
- package/dist/node_modules/d3-array/src/quantile.js +25 -0
- package/dist/node_modules/d3-array/src/quantile.js.map +1 -0
- package/dist/node_modules/d3-array/src/quickselect.js +26 -0
- package/dist/node_modules/d3-array/src/quickselect.js.map +1 -0
- package/dist/node_modules/d3-array/src/range.js +10 -0
- package/dist/node_modules/d3-array/src/range.js.map +1 -0
- package/dist/node_modules/d3-array/src/sort.js +17 -0
- package/dist/node_modules/d3-array/src/sort.js.map +1 -0
- package/dist/node_modules/d3-array/src/ticks.js +34 -0
- package/dist/node_modules/d3-array/src/ticks.js.map +1 -0
- package/dist/node_modules/d3-color/src/color.js +291 -0
- package/dist/node_modules/d3-color/src/color.js.map +1 -0
- package/dist/node_modules/d3-color/src/define.js +13 -0
- package/dist/node_modules/d3-color/src/define.js.map +1 -0
- package/dist/node_modules/d3-format/src/defaultLocale.js +15 -0
- package/dist/node_modules/d3-format/src/defaultLocale.js.map +1 -0
- package/dist/node_modules/d3-format/src/exponent.js +9 -0
- package/dist/node_modules/d3-format/src/exponent.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatDecimal.js +13 -0
- package/dist/node_modules/d3-format/src/formatDecimal.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatGroup.js +11 -0
- package/dist/node_modules/d3-format/src/formatGroup.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatNumerals.js +12 -0
- package/dist/node_modules/d3-format/src/formatNumerals.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatPrefixAuto.js +13 -0
- package/dist/node_modules/d3-format/src/formatPrefixAuto.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatRounded.js +12 -0
- package/dist/node_modules/d3-format/src/formatRounded.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatSpecifier.js +29 -0
- package/dist/node_modules/d3-format/src/formatSpecifier.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatTrim.js +20 -0
- package/dist/node_modules/d3-format/src/formatTrim.js.map +1 -0
- package/dist/node_modules/d3-format/src/formatTypes.js +23 -0
- package/dist/node_modules/d3-format/src/formatTypes.js.map +1 -0
- package/dist/node_modules/d3-format/src/identity.js +8 -0
- package/dist/node_modules/d3-format/src/identity.js.map +1 -0
- package/dist/node_modules/d3-format/src/locale.js +86 -0
- package/dist/node_modules/d3-format/src/locale.js.map +1 -0
- package/dist/node_modules/d3-format/src/precisionFixed.js +9 -0
- package/dist/node_modules/d3-format/src/precisionFixed.js.map +1 -0
- package/dist/node_modules/d3-format/src/precisionPrefix.js +9 -0
- package/dist/node_modules/d3-format/src/precisionPrefix.js.map +1 -0
- package/dist/node_modules/d3-format/src/precisionRound.js +9 -0
- package/dist/node_modules/d3-format/src/precisionRound.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/array.js +15 -0
- package/dist/node_modules/d3-interpolate/src/array.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/basis.js +16 -0
- package/dist/node_modules/d3-interpolate/src/basis.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/basisClosed.js +13 -0
- package/dist/node_modules/d3-interpolate/src/basisClosed.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/color.js +25 -0
- package/dist/node_modules/d3-interpolate/src/color.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/constant.js +6 -0
- package/dist/node_modules/d3-interpolate/src/constant.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/date.js +11 -0
- package/dist/node_modules/d3-interpolate/src/date.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/number.js +10 -0
- package/dist/node_modules/d3-interpolate/src/number.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/numberArray.js +16 -0
- package/dist/node_modules/d3-interpolate/src/numberArray.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/object.js +14 -0
- package/dist/node_modules/d3-interpolate/src/object.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/piecewise.js +14 -0
- package/dist/node_modules/d3-interpolate/src/piecewise.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/rgb.js +19 -0
- package/dist/node_modules/d3-interpolate/src/rgb.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/round.js +10 -0
- package/dist/node_modules/d3-interpolate/src/round.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/string.js +28 -0
- package/dist/node_modules/d3-interpolate/src/string.js.map +1 -0
- package/dist/node_modules/d3-interpolate/src/value.js +18 -0
- package/dist/node_modules/d3-interpolate/src/value.js.map +1 -0
- package/dist/node_modules/d3-path/src/path.js +65 -0
- package/dist/node_modules/d3-path/src/path.js.map +1 -0
- package/dist/node_modules/d3-scale/src/band.js +52 -0
- package/dist/node_modules/d3-scale/src/band.js.map +1 -0
- package/dist/node_modules/d3-scale/src/constant.js +10 -0
- package/dist/node_modules/d3-scale/src/constant.js.map +1 -0
- package/dist/node_modules/d3-scale/src/continuous.js +73 -0
- package/dist/node_modules/d3-scale/src/continuous.js.map +1 -0
- package/dist/node_modules/d3-scale/src/diverging.js +82 -0
- package/dist/node_modules/d3-scale/src/diverging.js.map +1 -0
- package/dist/node_modules/d3-scale/src/identity.js +20 -0
- package/dist/node_modules/d3-scale/src/identity.js.map +1 -0
- package/dist/node_modules/d3-scale/src/init.js +29 -0
- package/dist/node_modules/d3-scale/src/init.js.map +1 -0
- package/dist/node_modules/d3-scale/src/linear.js +36 -0
- package/dist/node_modules/d3-scale/src/linear.js.map +1 -0
- package/dist/node_modules/d3-scale/src/log.js +77 -0
- package/dist/node_modules/d3-scale/src/log.js.map +1 -0
- package/dist/node_modules/d3-scale/src/nice.js +10 -0
- package/dist/node_modules/d3-scale/src/nice.js.map +1 -0
- package/dist/node_modules/d3-scale/src/number.js +8 -0
- package/dist/node_modules/d3-scale/src/number.js.map +1 -0
- package/dist/node_modules/d3-scale/src/ordinal.js +31 -0
- package/dist/node_modules/d3-scale/src/ordinal.js.map +1 -0
- package/dist/node_modules/d3-scale/src/pow.js +37 -0
- package/dist/node_modules/d3-scale/src/pow.js.map +1 -0
- package/dist/node_modules/d3-scale/src/quantile.js +37 -0
- package/dist/node_modules/d3-scale/src/quantile.js.map +1 -0
- package/dist/node_modules/d3-scale/src/quantize.js +33 -0
- package/dist/node_modules/d3-scale/src/quantize.js.map +1 -0
- package/dist/node_modules/d3-scale/src/radial.js +39 -0
- package/dist/node_modules/d3-scale/src/radial.js.map +1 -0
- package/dist/node_modules/d3-scale/src/sequential.js +67 -0
- package/dist/node_modules/d3-scale/src/sequential.js.map +1 -0
- package/dist/node_modules/d3-scale/src/sequentialQuantile.js +30 -0
- package/dist/node_modules/d3-scale/src/sequentialQuantile.js.map +1 -0
- package/dist/node_modules/d3-scale/src/symlog.js +30 -0
- package/dist/node_modules/d3-scale/src/symlog.js.map +1 -0
- package/dist/node_modules/d3-scale/src/threshold.js +25 -0
- package/dist/node_modules/d3-scale/src/threshold.js.map +1 -0
- package/dist/node_modules/d3-scale/src/tickFormat.js +31 -0
- package/dist/node_modules/d3-scale/src/tickFormat.js.map +1 -0
- package/dist/node_modules/d3-scale/src/time.js +47 -0
- package/dist/node_modules/d3-scale/src/time.js.map +1 -0
- package/dist/node_modules/d3-scale/src/utcTime.js +19 -0
- package/dist/node_modules/d3-scale/src/utcTime.js.map +1 -0
- package/dist/node_modules/d3-shape/src/area.js +55 -0
- package/dist/node_modules/d3-shape/src/area.js.map +1 -0
- package/dist/node_modules/d3-shape/src/array.js +8 -0
- package/dist/node_modules/d3-shape/src/array.js.map +1 -0
- package/dist/node_modules/d3-shape/src/constant.js +10 -0
- package/dist/node_modules/d3-shape/src/constant.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/basis.js +49 -0
- package/dist/node_modules/d3-shape/src/curve/basis.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/basisClosed.js +50 -0
- package/dist/node_modules/d3-shape/src/curve/basisClosed.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/basisOpen.js +46 -0
- package/dist/node_modules/d3-shape/src/curve/basisOpen.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/bump.js +40 -0
- package/dist/node_modules/d3-shape/src/curve/bump.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/linear.js +36 -0
- package/dist/node_modules/d3-shape/src/curve/linear.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/linearClosed.js +25 -0
- package/dist/node_modules/d3-shape/src/curve/linearClosed.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/monotone.js +94 -0
- package/dist/node_modules/d3-shape/src/curve/monotone.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/natural.js +39 -0
- package/dist/node_modules/d3-shape/src/curve/natural.js.map +1 -0
- package/dist/node_modules/d3-shape/src/curve/step.js +47 -0
- package/dist/node_modules/d3-shape/src/curve/step.js.map +1 -0
- package/dist/node_modules/d3-shape/src/line.js +30 -0
- package/dist/node_modules/d3-shape/src/line.js.map +1 -0
- package/dist/node_modules/d3-shape/src/math.js +8 -0
- package/dist/node_modules/d3-shape/src/math.js.map +1 -0
- package/dist/node_modules/d3-shape/src/noop.js +6 -0
- package/dist/node_modules/d3-shape/src/noop.js.map +1 -0
- package/dist/node_modules/d3-shape/src/offset/expand.js +15 -0
- package/dist/node_modules/d3-shape/src/offset/expand.js.map +1 -0
- package/dist/node_modules/d3-shape/src/offset/none.js +8 -0
- package/dist/node_modules/d3-shape/src/offset/none.js.map +1 -0
- package/dist/node_modules/d3-shape/src/offset/silhouette.js +15 -0
- package/dist/node_modules/d3-shape/src/offset/silhouette.js.map +1 -0
- package/dist/node_modules/d3-shape/src/offset/wiggle.js +21 -0
- package/dist/node_modules/d3-shape/src/offset/wiggle.js.map +1 -0
- package/dist/node_modules/d3-shape/src/order/none.js +9 -0
- package/dist/node_modules/d3-shape/src/order/none.js.map +1 -0
- package/dist/node_modules/d3-shape/src/path.js +19 -0
- package/dist/node_modules/d3-shape/src/path.js.map +1 -0
- package/dist/node_modules/d3-shape/src/point.js +11 -0
- package/dist/node_modules/d3-shape/src/point.js.map +1 -0
- package/dist/node_modules/d3-shape/src/stack.js +34 -0
- package/dist/node_modules/d3-shape/src/stack.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/circle.js +10 -0
- package/dist/node_modules/d3-shape/src/symbol/circle.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/cross.js +10 -0
- package/dist/node_modules/d3-shape/src/symbol/cross.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/diamond.js +10 -0
- package/dist/node_modules/d3-shape/src/symbol/diamond.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/square.js +10 -0
- package/dist/node_modules/d3-shape/src/symbol/square.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/star.js +15 -0
- package/dist/node_modules/d3-shape/src/symbol/star.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/triangle.js +10 -0
- package/dist/node_modules/d3-shape/src/symbol/triangle.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol/wye.js +10 -0
- package/dist/node_modules/d3-shape/src/symbol/wye.js.map +1 -0
- package/dist/node_modules/d3-shape/src/symbol.js +23 -0
- package/dist/node_modules/d3-shape/src/symbol.js.map +1 -0
- package/dist/node_modules/d3-time/src/day.js +21 -0
- package/dist/node_modules/d3-time/src/day.js.map +1 -0
- package/dist/node_modules/d3-time/src/duration.js +6 -0
- package/dist/node_modules/d3-time/src/duration.js.map +1 -0
- package/dist/node_modules/d3-time/src/hour.js +19 -0
- package/dist/node_modules/d3-time/src/hour.js.map +1 -0
- package/dist/node_modules/d3-time/src/interval.js +28 -0
- package/dist/node_modules/d3-time/src/interval.js.map +1 -0
- package/dist/node_modules/d3-time/src/millisecond.js +14 -0
- package/dist/node_modules/d3-time/src/millisecond.js.map +1 -0
- package/dist/node_modules/d3-time/src/minute.js +19 -0
- package/dist/node_modules/d3-time/src/minute.js.map +1 -0
- package/dist/node_modules/d3-time/src/month.js +18 -0
- package/dist/node_modules/d3-time/src/month.js.map +1 -0
- package/dist/node_modules/d3-time/src/second.js +13 -0
- package/dist/node_modules/d3-time/src/second.js.map +1 -0
- package/dist/node_modules/d3-time/src/ticks.js +125 -0
- package/dist/node_modules/d3-time/src/ticks.js.map +1 -0
- package/dist/node_modules/d3-time/src/week.js +25 -0
- package/dist/node_modules/d3-time/src/week.js.map +1 -0
- package/dist/node_modules/d3-time/src/year.js +26 -0
- package/dist/node_modules/d3-time/src/year.js.map +1 -0
- package/dist/node_modules/d3-time-format/src/defaultLocale.js +62 -0
- package/dist/node_modules/d3-time-format/src/defaultLocale.js.map +1 -0
- package/dist/node_modules/d3-time-format/src/locale.js +490 -0
- package/dist/node_modules/d3-time-format/src/locale.js.map +1 -0
- package/dist/node_modules/decimal.js-light/decimal.js +378 -0
- package/dist/node_modules/decimal.js-light/decimal.js.map +1 -0
- package/dist/node_modules/eventemitter3/index.js +95 -0
- package/dist/node_modules/eventemitter3/index.js.map +1 -0
- package/dist/node_modules/fast-equals/dist/es/index.js +267 -0
- package/dist/node_modules/fast-equals/dist/es/index.js.map +1 -0
- package/dist/node_modules/internmap/src/index.js +40 -0
- package/dist/node_modules/internmap/src/index.js.map +1 -0
- package/dist/node_modules/lodash/_DataView.js +12 -0
- package/dist/node_modules/lodash/_DataView.js.map +1 -0
- package/dist/node_modules/lodash/_Hash.js +23 -0
- package/dist/node_modules/lodash/_Hash.js.map +1 -0
- package/dist/node_modules/lodash/_ListCache.js +23 -0
- package/dist/node_modules/lodash/_ListCache.js.map +1 -0
- package/dist/node_modules/lodash/_Map.js +12 -0
- package/dist/node_modules/lodash/_Map.js.map +1 -0
- package/dist/node_modules/lodash/_MapCache.js +23 -0
- package/dist/node_modules/lodash/_MapCache.js.map +1 -0
- package/dist/node_modules/lodash/_Promise.js +12 -0
- package/dist/node_modules/lodash/_Promise.js.map +1 -0
- package/dist/node_modules/lodash/_Set.js +12 -0
- package/dist/node_modules/lodash/_Set.js.map +1 -0
- package/dist/node_modules/lodash/_SetCache.js +18 -0
- package/dist/node_modules/lodash/_SetCache.js.map +1 -0
- package/dist/node_modules/lodash/_Stack.js +20 -0
- package/dist/node_modules/lodash/_Stack.js.map +1 -0
- package/dist/node_modules/lodash/_Symbol.js +11 -0
- package/dist/node_modules/lodash/_Symbol.js.map +1 -0
- package/dist/node_modules/lodash/_Uint8Array.js +11 -0
- package/dist/node_modules/lodash/_Uint8Array.js.map +1 -0
- package/dist/node_modules/lodash/_WeakMap.js +12 -0
- package/dist/node_modules/lodash/_WeakMap.js.map +1 -0
- package/dist/node_modules/lodash/_apply.js +19 -0
- package/dist/node_modules/lodash/_apply.js.map +1 -0
- package/dist/node_modules/lodash/_arrayEvery.js +14 -0
- package/dist/node_modules/lodash/_arrayEvery.js.map +1 -0
- package/dist/node_modules/lodash/_arrayFilter.js +17 -0
- package/dist/node_modules/lodash/_arrayFilter.js.map +1 -0
- package/dist/node_modules/lodash/_arrayIncludes.js +15 -0
- package/dist/node_modules/lodash/_arrayIncludes.js.map +1 -0
- package/dist/node_modules/lodash/_arrayIncludesWith.js +14 -0
- package/dist/node_modules/lodash/_arrayIncludesWith.js.map +1 -0
- package/dist/node_modules/lodash/_arrayLikeKeys.js +22 -0
- package/dist/node_modules/lodash/_arrayLikeKeys.js.map +1 -0
- package/dist/node_modules/lodash/_arrayMap.js +14 -0
- package/dist/node_modules/lodash/_arrayMap.js.map +1 -0
- package/dist/node_modules/lodash/_arrayPush.js +14 -0
- package/dist/node_modules/lodash/_arrayPush.js.map +1 -0
- package/dist/node_modules/lodash/_arraySome.js +14 -0
- package/dist/node_modules/lodash/_arraySome.js.map +1 -0
- package/dist/node_modules/lodash/_asciiToArray.js +13 -0
- package/dist/node_modules/lodash/_asciiToArray.js.map +1 -0
- package/dist/node_modules/lodash/_assocIndexOf.js +16 -0
- package/dist/node_modules/lodash/_assocIndexOf.js.map +1 -0
- package/dist/node_modules/lodash/_baseAssignValue.js +20 -0
- package/dist/node_modules/lodash/_baseAssignValue.js.map +1 -0
- package/dist/node_modules/lodash/_baseEach.js +13 -0
- package/dist/node_modules/lodash/_baseEach.js.map +1 -0
- package/dist/node_modules/lodash/_baseEvery.js +18 -0
- package/dist/node_modules/lodash/_baseEvery.js.map +1 -0
- package/dist/node_modules/lodash/_baseExtremum.js +19 -0
- package/dist/node_modules/lodash/_baseExtremum.js.map +1 -0
- package/dist/node_modules/lodash/_baseFindIndex.js +14 -0
- package/dist/node_modules/lodash/_baseFindIndex.js.map +1 -0
- package/dist/node_modules/lodash/_baseFlatten.js +21 -0
- package/dist/node_modules/lodash/_baseFlatten.js.map +1 -0
- package/dist/node_modules/lodash/_baseFor.js +11 -0
- package/dist/node_modules/lodash/_baseFor.js.map +1 -0
- package/dist/node_modules/lodash/_baseForOwn.js +16 -0
- package/dist/node_modules/lodash/_baseForOwn.js.map +1 -0
- package/dist/node_modules/lodash/_baseGet.js +18 -0
- package/dist/node_modules/lodash/_baseGet.js.map +1 -0
- package/dist/node_modules/lodash/_baseGetAllKeys.js +17 -0
- package/dist/node_modules/lodash/_baseGetAllKeys.js.map +1 -0
- package/dist/node_modules/lodash/_baseGetTag.js +17 -0
- package/dist/node_modules/lodash/_baseGetTag.js.map +1 -0
- package/dist/node_modules/lodash/_baseGt.js +13 -0
- package/dist/node_modules/lodash/_baseGt.js.map +1 -0
- package/dist/node_modules/lodash/_baseHasIn.js +13 -0
- package/dist/node_modules/lodash/_baseHasIn.js.map +1 -0
- package/dist/node_modules/lodash/_baseIndexOf.js +17 -0
- package/dist/node_modules/lodash/_baseIndexOf.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsArguments.js +16 -0
- package/dist/node_modules/lodash/_baseIsArguments.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsEqual.js +16 -0
- package/dist/node_modules/lodash/_baseIsEqual.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsEqualDeep.js +37 -0
- package/dist/node_modules/lodash/_baseIsEqualDeep.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsMatch.js +33 -0
- package/dist/node_modules/lodash/_baseIsMatch.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsNaN.js +13 -0
- package/dist/node_modules/lodash/_baseIsNaN.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsNative.js +18 -0
- package/dist/node_modules/lodash/_baseIsNative.js.map +1 -0
- package/dist/node_modules/lodash/_baseIsTypedArray.js +18 -0
- package/dist/node_modules/lodash/_baseIsTypedArray.js.map +1 -0
- package/dist/node_modules/lodash/_baseIteratee.js +19 -0
- package/dist/node_modules/lodash/_baseIteratee.js.map +1 -0
- package/dist/node_modules/lodash/_baseKeys.js +19 -0
- package/dist/node_modules/lodash/_baseKeys.js.map +1 -0
- package/dist/node_modules/lodash/_baseLt.js +13 -0
- package/dist/node_modules/lodash/_baseLt.js.map +1 -0
- package/dist/node_modules/lodash/_baseMap.js +19 -0
- package/dist/node_modules/lodash/_baseMap.js.map +1 -0
- package/dist/node_modules/lodash/_baseMatches.js +20 -0
- package/dist/node_modules/lodash/_baseMatches.js.map +1 -0
- package/dist/node_modules/lodash/_baseMatchesProperty.js +24 -0
- package/dist/node_modules/lodash/_baseMatchesProperty.js.map +1 -0
- package/dist/node_modules/lodash/_baseOrderBy.js +39 -0
- package/dist/node_modules/lodash/_baseOrderBy.js.map +1 -0
- package/dist/node_modules/lodash/_baseProperty.js +15 -0
- package/dist/node_modules/lodash/_baseProperty.js.map +1 -0
- package/dist/node_modules/lodash/_basePropertyDeep.js +17 -0
- package/dist/node_modules/lodash/_basePropertyDeep.js.map +1 -0
- package/dist/node_modules/lodash/_baseRange.js +15 -0
- package/dist/node_modules/lodash/_baseRange.js.map +1 -0
- package/dist/node_modules/lodash/_baseRest.js +17 -0
- package/dist/node_modules/lodash/_baseRest.js.map +1 -0
- package/dist/node_modules/lodash/_baseSetToString.js +21 -0
- package/dist/node_modules/lodash/_baseSetToString.js.map +1 -0
- package/dist/node_modules/lodash/_baseSlice.js +16 -0
- package/dist/node_modules/lodash/_baseSlice.js.map +1 -0
- package/dist/node_modules/lodash/_baseSome.js +18 -0
- package/dist/node_modules/lodash/_baseSome.js.map +1 -0
- package/dist/node_modules/lodash/_baseSortBy.js +15 -0
- package/dist/node_modules/lodash/_baseSortBy.js.map +1 -0
- package/dist/node_modules/lodash/_baseTimes.js +14 -0
- package/dist/node_modules/lodash/_baseTimes.js.map +1 -0
- package/dist/node_modules/lodash/_baseToString.js +22 -0
- package/dist/node_modules/lodash/_baseToString.js.map +1 -0
- package/dist/node_modules/lodash/_baseTrim.js +15 -0
- package/dist/node_modules/lodash/_baseTrim.js.map +1 -0
- package/dist/node_modules/lodash/_baseUnary.js +15 -0
- package/dist/node_modules/lodash/_baseUnary.js.map +1 -0
- package/dist/node_modules/lodash/_baseUniq.js +34 -0
- package/dist/node_modules/lodash/_baseUniq.js.map +1 -0
- package/dist/node_modules/lodash/_cacheHas.js +13 -0
- package/dist/node_modules/lodash/_cacheHas.js.map +1 -0
- package/dist/node_modules/lodash/_castPath.js +18 -0
- package/dist/node_modules/lodash/_castPath.js.map +1 -0
- package/dist/node_modules/lodash/_castSlice.js +16 -0
- package/dist/node_modules/lodash/_castSlice.js.map +1 -0
- package/dist/node_modules/lodash/_compareAscending.js +20 -0
- package/dist/node_modules/lodash/_compareAscending.js.map +1 -0
- package/dist/node_modules/lodash/_compareMultiple.js +19 -0
- package/dist/node_modules/lodash/_compareMultiple.js.map +1 -0
- package/dist/node_modules/lodash/_coreJsData.js +11 -0
- package/dist/node_modules/lodash/_coreJsData.js.map +1 -0
- package/dist/node_modules/lodash/_createBaseEach.js +20 -0
- package/dist/node_modules/lodash/_createBaseEach.js.map +1 -0
- package/dist/node_modules/lodash/_createBaseFor.js +19 -0
- package/dist/node_modules/lodash/_createBaseFor.js.map +1 -0
- package/dist/node_modules/lodash/_createCaseFirst.js +22 -0
- package/dist/node_modules/lodash/_createCaseFirst.js.map +1 -0
- package/dist/node_modules/lodash/_createFind.js +27 -0
- package/dist/node_modules/lodash/_createFind.js.map +1 -0
- package/dist/node_modules/lodash/_createRange.js +19 -0
- package/dist/node_modules/lodash/_createRange.js.map +1 -0
- package/dist/node_modules/lodash/_createSet.js +16 -0
- package/dist/node_modules/lodash/_createSet.js.map +1 -0
- package/dist/node_modules/lodash/_defineProperty.js +17 -0
- package/dist/node_modules/lodash/_defineProperty.js.map +1 -0
- package/dist/node_modules/lodash/_equalArrays.js +42 -0
- package/dist/node_modules/lodash/_equalArrays.js.map +1 -0
- package/dist/node_modules/lodash/_equalByTag.js +42 -0
- package/dist/node_modules/lodash/_equalByTag.js.map +1 -0
- package/dist/node_modules/lodash/_equalObjects.js +39 -0
- package/dist/node_modules/lodash/_equalObjects.js.map +1 -0
- package/dist/node_modules/lodash/_freeGlobal.js +10 -0
- package/dist/node_modules/lodash/_freeGlobal.js.map +1 -0
- package/dist/node_modules/lodash/_getAllKeys.js +17 -0
- package/dist/node_modules/lodash/_getAllKeys.js.map +1 -0
- package/dist/node_modules/lodash/_getMapData.js +16 -0
- package/dist/node_modules/lodash/_getMapData.js.map +1 -0
- package/dist/node_modules/lodash/_getMatchData.js +24 -0
- package/dist/node_modules/lodash/_getMatchData.js.map +1 -0
- package/dist/node_modules/lodash/_getNative.js +17 -0
- package/dist/node_modules/lodash/_getNative.js.map +1 -0
- package/dist/node_modules/lodash/_getPrototype.js +11 -0
- package/dist/node_modules/lodash/_getPrototype.js.map +1 -0
- package/dist/node_modules/lodash/_getRawTag.js +21 -0
- package/dist/node_modules/lodash/_getRawTag.js.map +1 -0
- package/dist/node_modules/lodash/_getSymbols.js +17 -0
- package/dist/node_modules/lodash/_getSymbols.js.map +1 -0
- package/dist/node_modules/lodash/_getTag.js +28 -0
- package/dist/node_modules/lodash/_getTag.js.map +1 -0
- package/dist/node_modules/lodash/_getValue.js +13 -0
- package/dist/node_modules/lodash/_getValue.js.map +1 -0
- package/dist/node_modules/lodash/_hasPath.js +26 -0
- package/dist/node_modules/lodash/_hasPath.js.map +1 -0
- package/dist/node_modules/lodash/_hasUnicode.js +14 -0
- package/dist/node_modules/lodash/_hasUnicode.js.map +1 -0
- package/dist/node_modules/lodash/_hashClear.js +15 -0
- package/dist/node_modules/lodash/_hashClear.js.map +1 -0
- package/dist/node_modules/lodash/_hashDelete.js +14 -0
- package/dist/node_modules/lodash/_hashDelete.js.map +1 -0
- package/dist/node_modules/lodash/_hashGet.js +20 -0
- package/dist/node_modules/lodash/_hashGet.js.map +1 -0
- package/dist/node_modules/lodash/_hashHas.js +16 -0
- package/dist/node_modules/lodash/_hashHas.js.map +1 -0
- package/dist/node_modules/lodash/_hashSet.js +16 -0
- package/dist/node_modules/lodash/_hashSet.js.map +1 -0
- package/dist/node_modules/lodash/_isFlattenable.js +17 -0
- package/dist/node_modules/lodash/_isFlattenable.js.map +1 -0
- package/dist/node_modules/lodash/_isIndex.js +15 -0
- package/dist/node_modules/lodash/_isIndex.js.map +1 -0
- package/dist/node_modules/lodash/_isIterateeCall.js +20 -0
- package/dist/node_modules/lodash/_isIterateeCall.js.map +1 -0
- package/dist/node_modules/lodash/_isKey.js +18 -0
- package/dist/node_modules/lodash/_isKey.js.map +1 -0
- package/dist/node_modules/lodash/_isKeyable.js +14 -0
- package/dist/node_modules/lodash/_isKeyable.js.map +1 -0
- package/dist/node_modules/lodash/_isMasked.js +18 -0
- package/dist/node_modules/lodash/_isMasked.js.map +1 -0
- package/dist/node_modules/lodash/_isPrototype.js +15 -0
- package/dist/node_modules/lodash/_isPrototype.js.map +1 -0
- package/dist/node_modules/lodash/_isStrictComparable.js +15 -0
- package/dist/node_modules/lodash/_isStrictComparable.js.map +1 -0
- package/dist/node_modules/lodash/_listCacheClear.js +13 -0
- package/dist/node_modules/lodash/_listCacheClear.js.map +1 -0
- package/dist/node_modules/lodash/_listCacheDelete.js +16 -0
- package/dist/node_modules/lodash/_listCacheDelete.js.map +1 -0
- package/dist/node_modules/lodash/_listCacheGet.js +16 -0
- package/dist/node_modules/lodash/_listCacheGet.js.map +1 -0
- package/dist/node_modules/lodash/_listCacheHas.js +15 -0
- package/dist/node_modules/lodash/_listCacheHas.js.map +1 -0
- package/dist/node_modules/lodash/_listCacheSet.js +16 -0
- package/dist/node_modules/lodash/_listCacheSet.js.map +1 -0
- package/dist/node_modules/lodash/_mapCacheClear.js +21 -0
- package/dist/node_modules/lodash/_mapCacheClear.js.map +1 -0
- package/dist/node_modules/lodash/_mapCacheDelete.js +16 -0
- package/dist/node_modules/lodash/_mapCacheDelete.js.map +1 -0
- package/dist/node_modules/lodash/_mapCacheGet.js +15 -0
- package/dist/node_modules/lodash/_mapCacheGet.js.map +1 -0
- package/dist/node_modules/lodash/_mapCacheHas.js +15 -0
- package/dist/node_modules/lodash/_mapCacheHas.js.map +1 -0
- package/dist/node_modules/lodash/_mapCacheSet.js +16 -0
- package/dist/node_modules/lodash/_mapCacheSet.js.map +1 -0
- package/dist/node_modules/lodash/_mapToArray.js +16 -0
- package/dist/node_modules/lodash/_mapToArray.js.map +1 -0
- package/dist/node_modules/lodash/_matchesStrictComparable.js +15 -0
- package/dist/node_modules/lodash/_matchesStrictComparable.js.map +1 -0
- package/dist/node_modules/lodash/_memoizeCapped.js +18 -0
- package/dist/node_modules/lodash/_memoizeCapped.js.map +1 -0
- package/dist/node_modules/lodash/_nativeCreate.js +11 -0
- package/dist/node_modules/lodash/_nativeCreate.js.map +1 -0
- package/dist/node_modules/lodash/_nativeKeys.js +11 -0
- package/dist/node_modules/lodash/_nativeKeys.js.map +1 -0
- package/dist/node_modules/lodash/_nodeUtil.js +16 -0
- package/dist/node_modules/lodash/_nodeUtil.js.map +1 -0
- package/dist/node_modules/lodash/_objectToString.js +14 -0
- package/dist/node_modules/lodash/_objectToString.js.map +1 -0
- package/dist/node_modules/lodash/_overArg.js +15 -0
- package/dist/node_modules/lodash/_overArg.js.map +1 -0
- package/dist/node_modules/lodash/_overRest.js +20 -0
- package/dist/node_modules/lodash/_overRest.js.map +1 -0
- package/dist/node_modules/lodash/_root.js +12 -0
- package/dist/node_modules/lodash/_root.js.map +1 -0
- package/dist/node_modules/lodash/_setCacheAdd.js +14 -0
- package/dist/node_modules/lodash/_setCacheAdd.js.map +1 -0
- package/dist/node_modules/lodash/_setCacheHas.js +13 -0
- package/dist/node_modules/lodash/_setCacheHas.js.map +1 -0
- package/dist/node_modules/lodash/_setToArray.js +16 -0
- package/dist/node_modules/lodash/_setToArray.js.map +1 -0
- package/dist/node_modules/lodash/_setToString.js +13 -0
- package/dist/node_modules/lodash/_setToString.js.map +1 -0
- package/dist/node_modules/lodash/_shortOut.js +21 -0
- package/dist/node_modules/lodash/_shortOut.js.map +1 -0
- package/dist/node_modules/lodash/_stackClear.js +15 -0
- package/dist/node_modules/lodash/_stackClear.js.map +1 -0
- package/dist/node_modules/lodash/_stackDelete.js +14 -0
- package/dist/node_modules/lodash/_stackDelete.js.map +1 -0
- package/dist/node_modules/lodash/_stackGet.js +13 -0
- package/dist/node_modules/lodash/_stackGet.js.map +1 -0
- package/dist/node_modules/lodash/_stackHas.js +13 -0
- package/dist/node_modules/lodash/_stackHas.js.map +1 -0
- package/dist/node_modules/lodash/_stackSet.js +23 -0
- package/dist/node_modules/lodash/_stackSet.js.map +1 -0
- package/dist/node_modules/lodash/_strictIndexOf.js +14 -0
- package/dist/node_modules/lodash/_strictIndexOf.js.map +1 -0
- package/dist/node_modules/lodash/_stringToArray.js +17 -0
- package/dist/node_modules/lodash/_stringToArray.js.map +1 -0
- package/dist/node_modules/lodash/_stringToPath.js +17 -0
- package/dist/node_modules/lodash/_stringToPath.js.map +1 -0
- package/dist/node_modules/lodash/_toKey.js +17 -0
- package/dist/node_modules/lodash/_toKey.js.map +1 -0
- package/dist/node_modules/lodash/_toSource.js +22 -0
- package/dist/node_modules/lodash/_toSource.js.map +1 -0
- package/dist/node_modules/lodash/_trimmedEndIndex.js +15 -0
- package/dist/node_modules/lodash/_trimmedEndIndex.js.map +1 -0
- package/dist/node_modules/lodash/_unicodeToArray.js +24 -0
- package/dist/node_modules/lodash/_unicodeToArray.js.map +1 -0
- package/dist/node_modules/lodash/constant.js +15 -0
- package/dist/node_modules/lodash/constant.js.map +1 -0
- package/dist/node_modules/lodash/debounce.js +57 -0
- package/dist/node_modules/lodash/debounce.js.map +1 -0
- package/dist/node_modules/lodash/eq.js +13 -0
- package/dist/node_modules/lodash/eq.js.map +1 -0
- package/dist/node_modules/lodash/every.js +20 -0
- package/dist/node_modules/lodash/every.js.map +1 -0
- package/dist/node_modules/lodash/find.js +12 -0
- package/dist/node_modules/lodash/find.js.map +1 -0
- package/dist/node_modules/lodash/findIndex.js +20 -0
- package/dist/node_modules/lodash/findIndex.js.map +1 -0
- package/dist/node_modules/lodash/flatMap.js +16 -0
- package/dist/node_modules/lodash/flatMap.js.map +1 -0
- package/dist/node_modules/lodash/get.js +16 -0
- package/dist/node_modules/lodash/get.js.map +1 -0
- package/dist/node_modules/lodash/hasIn.js +16 -0
- package/dist/node_modules/lodash/hasIn.js.map +1 -0
- package/dist/node_modules/lodash/identity.js +13 -0
- package/dist/node_modules/lodash/identity.js.map +1 -0
- package/dist/node_modules/lodash/isArguments.js +17 -0
- package/dist/node_modules/lodash/isArguments.js.map +1 -0
- package/dist/node_modules/lodash/isArray.js +10 -0
- package/dist/node_modules/lodash/isArray.js.map +1 -0
- package/dist/node_modules/lodash/isArrayLike.js +16 -0
- package/dist/node_modules/lodash/isArrayLike.js.map +1 -0
- package/dist/node_modules/lodash/isBoolean.js +16 -0
- package/dist/node_modules/lodash/isBoolean.js.map +1 -0
- package/dist/node_modules/lodash/isBuffer.js +13 -0
- package/dist/node_modules/lodash/isBuffer.js.map +1 -0
- package/dist/node_modules/lodash/isEqual.js +15 -0
- package/dist/node_modules/lodash/isEqual.js.map +1 -0
- package/dist/node_modules/lodash/isFunction.js +18 -0
- package/dist/node_modules/lodash/isFunction.js.map +1 -0
- package/dist/node_modules/lodash/isLength.js +14 -0
- package/dist/node_modules/lodash/isLength.js.map +1 -0
- package/dist/node_modules/lodash/isNaN.js +15 -0
- package/dist/node_modules/lodash/isNaN.js.map +1 -0
- package/dist/node_modules/lodash/isNil.js +13 -0
- package/dist/node_modules/lodash/isNil.js.map +1 -0
- package/dist/node_modules/lodash/isNumber.js +16 -0
- package/dist/node_modules/lodash/isNumber.js.map +1 -0
- package/dist/node_modules/lodash/isObject.js +14 -0
- package/dist/node_modules/lodash/isObject.js.map +1 -0
- package/dist/node_modules/lodash/isObjectLike.js +13 -0
- package/dist/node_modules/lodash/isObjectLike.js.map +1 -0
- package/dist/node_modules/lodash/isPlainObject.js +21 -0
- package/dist/node_modules/lodash/isPlainObject.js.map +1 -0
- package/dist/node_modules/lodash/isString.js +17 -0
- package/dist/node_modules/lodash/isString.js.map +1 -0
- package/dist/node_modules/lodash/isSymbol.js +16 -0
- package/dist/node_modules/lodash/isSymbol.js.map +1 -0
- package/dist/node_modules/lodash/isTypedArray.js +14 -0
- package/dist/node_modules/lodash/isTypedArray.js.map +1 -0
- package/dist/node_modules/lodash/keys.js +17 -0
- package/dist/node_modules/lodash/keys.js.map +1 -0
- package/dist/node_modules/lodash/last.js +14 -0
- package/dist/node_modules/lodash/last.js.map +1 -0
- package/dist/node_modules/lodash/map.js +18 -0
- package/dist/node_modules/lodash/map.js.map +1 -0
- package/dist/node_modules/lodash/mapValues.js +20 -0
- package/dist/node_modules/lodash/mapValues.js.map +1 -0
- package/dist/node_modules/lodash/max.js +17 -0
- package/dist/node_modules/lodash/max.js.map +1 -0
- package/dist/node_modules/lodash/maxBy.js +17 -0
- package/dist/node_modules/lodash/maxBy.js.map +1 -0
- package/dist/node_modules/lodash/memoize.js +22 -0
- package/dist/node_modules/lodash/memoize.js.map +1 -0
- package/dist/node_modules/lodash/min.js +17 -0
- package/dist/node_modules/lodash/min.js.map +1 -0
- package/dist/node_modules/lodash/minBy.js +17 -0
- package/dist/node_modules/lodash/minBy.js.map +1 -0
- package/dist/node_modules/lodash/noop.js +11 -0
- package/dist/node_modules/lodash/noop.js.map +1 -0
- package/dist/node_modules/lodash/now.js +14 -0
- package/dist/node_modules/lodash/now.js.map +1 -0
- package/dist/node_modules/lodash/property.js +18 -0
- package/dist/node_modules/lodash/property.js.map +1 -0
- package/dist/node_modules/lodash/range.js +11 -0
- package/dist/node_modules/lodash/range.js.map +1 -0
- package/dist/node_modules/lodash/some.js +20 -0
- package/dist/node_modules/lodash/some.js.map +1 -0
- package/dist/node_modules/lodash/sortBy.js +19 -0
- package/dist/node_modules/lodash/sortBy.js.map +1 -0
- package/dist/node_modules/lodash/stubArray.js +13 -0
- package/dist/node_modules/lodash/stubArray.js.map +1 -0
- package/dist/node_modules/lodash/stubFalse.js +13 -0
- package/dist/node_modules/lodash/stubFalse.js.map +1 -0
- package/dist/node_modules/lodash/throttle.js +22 -0
- package/dist/node_modules/lodash/throttle.js.map +1 -0
- package/dist/node_modules/lodash/toFinite.js +15 -0
- package/dist/node_modules/lodash/toFinite.js.map +1 -0
- package/dist/node_modules/lodash/toInteger.js +16 -0
- package/dist/node_modules/lodash/toInteger.js.map +1 -0
- package/dist/node_modules/lodash/toNumber.js +26 -0
- package/dist/node_modules/lodash/toNumber.js.map +1 -0
- package/dist/node_modules/lodash/toString.js +15 -0
- package/dist/node_modules/lodash/toString.js.map +1 -0
- package/dist/node_modules/lodash/uniqBy.js +16 -0
- package/dist/node_modules/lodash/uniqBy.js.map +1 -0
- package/dist/node_modules/lodash/upperFirst.js +11 -0
- package/dist/node_modules/lodash/upperFirst.js.map +1 -0
- package/dist/node_modules/object-assign/index.js +41 -0
- package/dist/node_modules/object-assign/index.js.map +1 -0
- package/dist/node_modules/prop-types/checkPropTypes.js +46 -0
- package/dist/node_modules/prop-types/checkPropTypes.js.map +1 -0
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js +49 -0
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +1 -0
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +272 -0
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +1 -0
- package/dist/node_modules/prop-types/index.js +16 -0
- package/dist/node_modules/prop-types/index.js.map +1 -0
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +10 -0
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +1 -0
- package/dist/node_modules/prop-types/lib/has.js +10 -0
- package/dist/node_modules/prop-types/lib/has.js.map +1 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +84 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +1 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +64 -0
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
- package/dist/node_modules/prop-types/node_modules/react-is/index.js +12 -0
- package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +1 -0
- package/dist/node_modules/react-is/cjs/react-is.development.js +87 -0
- package/dist/node_modules/react-is/cjs/react-is.development.js.map +1 -0
- package/dist/node_modules/react-is/cjs/react-is.production.min.js +65 -0
- package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +1 -0
- package/dist/node_modules/react-is/index.js +12 -0
- package/dist/node_modules/react-is/index.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/Animate.js +374 -0
- package/dist/node_modules/react-smooth/es6/Animate.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/AnimateManager.js +73 -0
- package/dist/node_modules/react-smooth/es6/AnimateManager.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/configUpdate.js +173 -0
- package/dist/node_modules/react-smooth/es6/configUpdate.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/easing.js +152 -0
- package/dist/node_modules/react-smooth/es6/easing.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/index.js +9 -0
- package/dist/node_modules/react-smooth/es6/index.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/setRafTimeout.js +14 -0
- package/dist/node_modules/react-smooth/es6/setRafTimeout.js.map +1 -0
- package/dist/node_modules/react-smooth/es6/util.js +92 -0
- package/dist/node_modules/react-smooth/es6/util.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/Area.js +435 -0
- package/dist/node_modules/recharts/es6/cartesian/Area.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/Bar.js +387 -0
- package/dist/node_modules/recharts/es6/cartesian/Bar.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/Brush.js +499 -0
- package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js +338 -0
- package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js +243 -0
- package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js +173 -0
- package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js +178 -0
- package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js +254 -0
- package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/XAxis.js +144 -0
- package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/YAxis.js +143 -0
- package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js +18 -0
- package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js.map +1 -0
- package/dist/node_modules/recharts/es6/cartesian/getTicks.js +121 -0
- package/dist/node_modules/recharts/es6/cartesian/getTicks.js.map +1 -0
- package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js +101 -0
- package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js.map +1 -0
- package/dist/node_modules/recharts/es6/chart/AreaChart.js +22 -0
- package/dist/node_modules/recharts/es6/chart/AreaChart.js.map +1 -0
- package/dist/node_modules/recharts/es6/chart/BarChart.js +24 -0
- package/dist/node_modules/recharts/es6/chart/BarChart.js.map +1 -0
- package/dist/node_modules/recharts/es6/chart/PieChart.js +34 -0
- package/dist/node_modules/recharts/es6/chart/PieChart.js.map +1 -0
- package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js +1245 -0
- package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/Cell.js +9 -0
- package/dist/node_modules/recharts/es6/component/Cell.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/Cursor.js +93 -0
- package/dist/node_modules/recharts/es6/component/Cursor.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js +237 -0
- package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js +171 -0
- package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/Label.js +353 -0
- package/dist/node_modules/recharts/es6/component/Label.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/LabelList.js +166 -0
- package/dist/node_modules/recharts/es6/component/LabelList.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/Legend.js +234 -0
- package/dist/node_modules/recharts/es6/component/Legend.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js +187 -0
- package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/Text.js +225 -0
- package/dist/node_modules/recharts/es6/component/Text.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/Tooltip.js +182 -0
- package/dist/node_modules/recharts/es6/component/Tooltip.js.map +1 -0
- package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js +198 -0
- package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js.map +1 -0
- package/dist/node_modules/recharts/es6/container/Layer.js +40 -0
- package/dist/node_modules/recharts/es6/container/Layer.js.map +1 -0
- package/dist/node_modules/recharts/es6/container/Surface.js +60 -0
- package/dist/node_modules/recharts/es6/container/Surface.js.map +1 -0
- package/dist/node_modules/recharts/es6/context/chartLayoutContext.js +46 -0
- package/dist/node_modules/recharts/es6/context/chartLayoutContext.js.map +1 -0
- package/dist/node_modules/recharts/es6/polar/Pie.js +435 -0
- package/dist/node_modules/recharts/es6/polar/Pie.js.map +1 -0
- package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js +215 -0
- package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js.map +1 -0
- package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js +268 -0
- package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Cross.js +112 -0
- package/dist/node_modules/recharts/es6/shape/Cross.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Curve.js +136 -0
- package/dist/node_modules/recharts/es6/shape/Curve.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Dot.js +27 -0
- package/dist/node_modules/recharts/es6/shape/Dot.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Polygon.js +112 -0
- package/dist/node_modules/recharts/es6/shape/Polygon.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Rectangle.js +205 -0
- package/dist/node_modules/recharts/es6/shape/Rectangle.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Sector.js +192 -0
- package/dist/node_modules/recharts/es6/shape/Sector.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Symbols.js +143 -0
- package/dist/node_modules/recharts/es6/shape/Symbols.js.map +1 -0
- package/dist/node_modules/recharts/es6/shape/Trapezoid.js +175 -0
- package/dist/node_modules/recharts/es6/shape/Trapezoid.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js +181 -0
- package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/BarUtils.js +112 -0
- package/dist/node_modules/recharts/es6/util/BarUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/CartesianUtils.js +234 -0
- package/dist/node_modules/recharts/es6/util/CartesianUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/ChartUtils.js +554 -0
- package/dist/node_modules/recharts/es6/util/ChartUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js +70 -0
- package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/DOMUtils.js +108 -0
- package/dist/node_modules/recharts/es6/util/DOMUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/DataUtils.js +57 -0
- package/dist/node_modules/recharts/es6/util/DataUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js +58 -0
- package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/Events.js +7 -0
- package/dist/node_modules/recharts/es6/util/Events.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/Global.js +21 -0
- package/dist/node_modules/recharts/es6/util/Global.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js +9 -0
- package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/LogUtils.js +15 -0
- package/dist/node_modules/recharts/es6/util/LogUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/PolarUtils.js +198 -0
- package/dist/node_modules/recharts/es6/util/PolarUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/ReactUtils.js +137 -0
- package/dist/node_modules/recharts/es6/util/ReactUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js +181 -0
- package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/ShallowEqual.js +10 -0
- package/dist/node_modules/recharts/es6/util/ShallowEqual.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/TickUtils.js +31 -0
- package/dist/node_modules/recharts/es6/util/TickUtils.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/calculateViewBox.js +25 -0
- package/dist/node_modules/recharts/es6/util/calculateViewBox.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js +23 -0
- package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js +16 -0
- package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js +17 -0
- package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js +12 -0
- package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/getLegendProps.js +88 -0
- package/dist/node_modules/recharts/es6/util/getLegendProps.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js +13 -0
- package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js +12 -0
- package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/tooltip/translate.js +87 -0
- package/dist/node_modules/recharts/es6/util/tooltip/translate.js.map +1 -0
- package/dist/node_modules/recharts/es6/util/types.js +43 -0
- package/dist/node_modules/recharts/es6/util/types.js.map +1 -0
- package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js +132 -0
- package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js.map +1 -0
- package/dist/node_modules/recharts-scale/es6/index.js +1 -0
- package/dist/node_modules/recharts-scale/es6/util/arithmetic.js +32 -0
- package/dist/node_modules/recharts-scale/es6/util/arithmetic.js.map +1 -0
- package/dist/node_modules/recharts-scale/es6/util/utils.js +79 -0
- package/dist/node_modules/recharts-scale/es6/util/utils.js.map +1 -0
- package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +13 -0
- package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +1 -0
- package/dist/node_modules/victory-vendor/es/d3-scale.js +53 -0
- package/dist/node_modules/victory-vendor/es/d3-scale.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RegisterAttendeePage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/registration/RegisterAttendeePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { ArrowLeft, CheckCircle2, Ticket } from 'lucide-react';\nimport {\n Button,\n EmphasisPanel,\n GlassCard,\n Input,\n PagePurpose,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@burdenoff/fe-libs/ui';\n\nimport {\n useAttendeesQuery,\n useCreateAttendeeMutation,\n useCreateRegistrationMutation,\n useEventsQuery,\n usePromoCodesQuery,\n useTicketTypesQuery,\n} from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { describeError, mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\n\ntype Confirmation = {\n attendeeName: string;\n eventName: string;\n ticketName: string;\n quantity: number;\n status: string;\n amountLabel: string;\n};\n\nconst NEW_ATTENDEE = '__new__';\n\nexport default function RegisterAttendeePage() {\n const { navigate } = useEventfullyManaged();\n\n const [eventId, setEventId] = useState('');\n const [ticketTypeId, setTicketTypeId] = useState('');\n const [attendeeId, setAttendeeId] = useState(NEW_ATTENDEE);\n const [fullName, setFullName] = useState('');\n const [email, setEmail] = useState('');\n const [company, setCompany] = useState('');\n const [phone, setPhone] = useState('');\n const [quantity, setQuantity] = useState('1');\n const [promoCode, setPromoCode] = useState('');\n const [billingAccountId, setBillingAccountId] = useState('');\n const [confirmation, setConfirmation] = useState<Confirmation | null>(null);\n\n const { data: eventsData } = useEventsQuery({ limit: 100, offset: 0 });\n const { data: ticketData } = useTicketTypesQuery({ eventId: eventId || undefined, limit: 100, offset: 0 });\n const { data: attendeesData } = useAttendeesQuery({ eventId: eventId || undefined, limit: 100, offset: 0 });\n const { data: promoData } = usePromoCodesQuery({ eventId: eventId || undefined, limit: 100, offset: 0 });\n\n const [createAttendee, { loading: creatingAttendee }] = useCreateAttendeeMutation();\n const [createRegistration, { loading: creatingRegistration }] = useCreateRegistrationMutation();\n\n const events = eventsData?.events.items ?? [];\n const tickets = useMemo(\n () => (ticketData?.ticketTypes.items ?? []).filter((ticket) => !eventId || ticket.eventId === eventId),\n [ticketData, eventId]\n );\n const attendees = useMemo(\n () => (attendeesData?.attendees.items ?? []).filter((attendee) => !eventId || attendee.eventId === eventId),\n [attendeesData, eventId]\n );\n const promoCodes = useMemo(\n () =>\n (promoData?.promoCodes.items ?? []).filter((promo) => promo.isActive && (!eventId || promo.eventId === eventId)),\n [promoData, eventId]\n );\n\n const selectedTicket = useMemo(() => tickets.find((ticket) => ticket.id === ticketTypeId), [tickets, ticketTypeId]);\n const qty = Math.max(1, Number(quantity) || 1);\n const unitPrice = selectedTicket ? Number(selectedTicket.price) : 0;\n const currency = selectedTicket?.currency ?? 'USD';\n const grossAmount = Number.isFinite(unitPrice) ? unitPrice * qty : 0;\n const hasPositiveAmount = grossAmount > 0;\n\n const onEventChange = (value: string) => {\n setEventId(value);\n // Reset dependent selections so the user can't submit a stale ticket/attendee.\n setTicketTypeId('');\n setAttendeeId(NEW_ATTENDEE);\n setPromoCode('');\n };\n\n const saving = creatingAttendee || creatingRegistration;\n\n const resetForm = () => {\n setTicketTypeId('');\n setAttendeeId(NEW_ATTENDEE);\n setFullName('');\n setEmail('');\n setCompany('');\n setPhone('');\n setQuantity('1');\n setPromoCode('');\n setBillingAccountId('');\n };\n\n const onSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n if (!eventId) {\n notify.error('Event required', 'Choose the event to register for.');\n return;\n }\n if (!ticketTypeId) {\n notify.error('Ticket required', 'Choose a ticket type.');\n return;\n }\n\n const isNewAttendee = attendeeId === NEW_ATTENDEE;\n if (isNewAttendee && (!fullName.trim() || !email.trim())) {\n notify.error('Attendee required', 'Enter a name and email, or pick an existing attendee.');\n return;\n }\n\n try {\n let resolvedAttendeeId = attendeeId;\n let resolvedAttendeeName = attendees.find((attendee) => attendee.id === attendeeId)?.fullName ?? '';\n\n if (isNewAttendee) {\n const attendeeResponse = await createAttendee({\n variables: {\n input: {\n eventId,\n fullName: fullName.trim(),\n email: email.trim(),\n company: company.trim() || null,\n phone: phone.trim() || null,\n profile: {},\n metadata: {},\n },\n },\n });\n const createdId = attendeeResponse.data?.createAttendee?.id;\n if (!mutationSucceeded(attendeeResponse, createdId, 'Could not create attendee') || !createdId) {\n return;\n }\n resolvedAttendeeId = createdId;\n resolvedAttendeeName = fullName.trim();\n }\n\n // The money leg is owned by global-billing-svc — never price locally. We\n // only forward a billing account reference (when supplied) via metadata so\n // the backend can attach the charge; totalAmount is left for the backend.\n const metadata: Record<string, unknown> = {};\n if (promoCode) {\n metadata.promoCode = promoCode;\n }\n if (hasPositiveAmount && billingAccountId.trim()) {\n metadata.billingAccountId = billingAccountId.trim();\n }\n\n const registrationResponse = await createRegistration({\n variables: {\n input: {\n eventId,\n attendeeId: resolvedAttendeeId,\n ticketTypeId,\n quantity: qty,\n currency,\n status: 'CONFIRMED',\n metadata,\n },\n },\n });\n if (\n !mutationSucceeded(\n registrationResponse,\n registrationResponse.data?.createRegistration?.id,\n 'Could not create registration'\n )\n ) {\n return;\n }\n\n const registration = registrationResponse.data?.createRegistration;\n setConfirmation({\n attendeeName: resolvedAttendeeName || 'Attendee',\n eventName: events.find((item) => item.id === eventId)?.name ?? 'Event',\n ticketName: selectedTicket?.name ?? 'Ticket',\n quantity: qty,\n status: registration?.status ?? 'CONFIRMED',\n amountLabel: hasPositiveAmount\n ? `${grossAmount.toLocaleString()} ${currency} — billed by the billing service`\n : 'Free',\n });\n notify.success('Registration confirmed', resolvedAttendeeName || undefined);\n resetForm();\n } catch (error) {\n notify.error('Could not register attendee', describeError(error));\n }\n };\n\n if (confirmation) {\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/registration')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Registration\n </Button>\n </div>\n <GlassCard treatment=\"glass\" glow className=\"p-8 text-center\">\n <CheckCircle2 className=\"mx-auto h-12 w-12 text-status-success-text\" aria-hidden=\"true\" />\n <h1 className=\"mt-4 text-2xl font-bold text-text-primary\">Registration confirmed</h1>\n <p className=\"mt-2 text-sm text-text-secondary\">\n {confirmation.attendeeName} is registered for {confirmation.eventName}.\n </p>\n <dl className=\"mx-auto mt-6 max-w-sm space-y-2 text-left text-sm\">\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Ticket</dt>\n <dd className=\"font-medium text-text-primary\">{confirmation.ticketName}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Quantity</dt>\n <dd className=\"font-medium tabular-nums text-text-primary\">{confirmation.quantity}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Status</dt>\n <dd className=\"font-medium text-text-primary\">{confirmation.status}</dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Amount</dt>\n <dd className=\"font-medium tabular-nums text-text-primary\">{confirmation.amountLabel}</dd>\n </div>\n </dl>\n <div className=\"mt-8 flex justify-center gap-3\">\n <Button type=\"button\" variant=\"outline\" onClick={() => navigate('/registration')}>\n Back to Registrations\n </Button>\n <Button type=\"button\" onClick={() => setConfirmation(null)}>\n Register another\n </Button>\n </div>\n </GlassCard>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/registration')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Registration\n </Button>\n <h1 className=\"mt-3 text-2xl font-bold text-text-primary\">Register Attendee</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">Sign someone up for an event against a ticket type.</p>\n </div>\n\n <PagePurpose>\n Register a person for an event in one step. Pick the event and the ticket they are buying, then either choose an\n existing attendee or enter a new one. Apply a promo code if they have one. Pricing and payment are handled by\n the billing service — you just confirm who is coming and on which ticket.\n </PagePurpose>\n\n <EmphasisPanel>\n <form onSubmit={onSubmit} className=\"space-y-4\">\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Event</span>\n <Select value={eventId} onValueChange={onEventChange}>\n <SelectTrigger aria-label=\"Event\">\n <SelectValue placeholder=\"Select Event\" />\n </SelectTrigger>\n <SelectContent>\n {events.map((eventItem) => (\n <SelectItem key={eventItem.id} value={eventItem.id}>\n {eventItem.name}\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\">Ticket Type</span>\n <Select value={ticketTypeId} onValueChange={setTicketTypeId} disabled={!eventId}>\n <SelectTrigger aria-label=\"Ticket Type\">\n <SelectValue placeholder={eventId ? 'Select Ticket' : 'Select an event first'} />\n </SelectTrigger>\n <SelectContent>\n {tickets.map((ticket) => (\n <SelectItem key={ticket.id} value={ticket.id}>\n {ticket.name} — {ticket.price} {ticket.currency}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Attendee</span>\n <Select value={attendeeId} onValueChange={setAttendeeId}>\n <SelectTrigger aria-label=\"Attendee\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value={NEW_ATTENDEE}>+ New attendee</SelectItem>\n {attendees.map((attendee) => (\n <SelectItem key={attendee.id} value={attendee.id}>\n {attendee.fullName} · {attendee.email}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n\n {attendeeId === NEW_ATTENDEE ? (\n <div className=\"grid grid-cols-1 gap-4 rounded-input border border-border-seam bg-bg-surface p-4 md:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Full Name</span>\n <Input value={fullName} onChange={(e) => setFullName(e.target.value)} required />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Email</span>\n <Input type=\"email\" value={email} onChange={(e) => setEmail(e.target.value)} required />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Company</span>\n <Input value={company} onChange={(e) => setCompany(e.target.value)} />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Phone</span>\n <Input value={phone} onChange={(e) => setPhone(e.target.value)} />\n </label>\n </div>\n ) : null}\n\n <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Quantity</span>\n <Input type=\"number\" min=\"1\" value={quantity} onChange={(e) => setQuantity(e.target.value)} required />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Promo Code (optional)</span>\n <Select value={promoCode} onValueChange={setPromoCode} disabled={promoCodes.length === 0}>\n <SelectTrigger aria-label=\"Promo Code\">\n <SelectValue placeholder={promoCodes.length === 0 ? 'No active codes' : 'No promo code'} />\n </SelectTrigger>\n <SelectContent>\n {promoCodes.map((promo) => (\n <SelectItem key={promo.id} value={promo.code}>\n {promo.code} —{' '}\n {promo.discountType === 'PERCENT' ? `${promo.discountValue}%` : promo.discountValue}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n {hasPositiveAmount ? (\n <div className=\"space-y-3 rounded-input border border-border-seam bg-bg-surface p-4\">\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Ticket className=\"h-4 w-4 text-text-muted\" aria-hidden=\"true\" />\n <span>\n Estimated total{' '}\n <span className=\"font-semibold tabular-nums text-text-primary\">\n {grossAmount.toLocaleString()} {currency}\n </span>{' '}\n — final pricing and payment are handled by the billing service.\n </span>\n </div>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Billing Account ID (optional)</span>\n <Input\n value={billingAccountId}\n onChange={(e) => setBillingAccountId(e.target.value)}\n placeholder=\"Attach an existing billing account\"\n />\n <span className=\"text-xs text-text-secondary\">\n When provided, the charge is attached to this billing account.\n </span>\n </label>\n </div>\n ) : null}\n\n <div className=\"flex justify-end gap-3\">\n <Button type=\"button\" variant=\"outline\" onClick={() => navigate('/registration')} disabled={saving}>\n Cancel\n </Button>\n <Button type=\"submit\" disabled={saving}>\n <Ticket className=\"h-4 w-4\" />\n {saving ? 'Registering…' : 'Register Attendee'}\n </Button>\n </div>\n </form>\n </EmphasisPanel>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RegisterAttendeePage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/registration/RegisterAttendeePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport {\n ArrowLeft,\n ArrowRight,\n BadgePercent,\n CalendarDays,\n Check,\n CheckCircle2,\n Minus,\n Plus,\n Ticket,\n UserRound,\n} from 'lucide-react';\nimport {\n Button,\n GlassCard,\n GradientText,\n Input,\n PagePurpose,\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n Stepper,\n} from '@burdenoff/fe-libs/ui';\n\nimport {\n useAttendeesQuery,\n useCreateAttendeeMutation,\n useCreateRegistrationMutation,\n useEventsQuery,\n usePromoCodesQuery,\n useTicketTypesQuery,\n type PromoCodeGql,\n} from '../../api/eventApi';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { computeDiscount, describeDiscount, formatMoney } from '../../lib/format';\nimport { describeError, mutationSucceeded } from '../../lib/mutationResult';\nimport { notify } from '../../lib/toast';\n\ntype Confirmation = {\n attendeeName: string;\n eventName: string;\n ticketName: string;\n quantity: number;\n status: string;\n subtotal: number;\n discount: number;\n total: number;\n currency: string;\n promoCode: string | null;\n free: boolean;\n};\n\nconst STEPS = [\n { key: 'event', label: 'Event', description: 'Choose the event' },\n { key: 'ticket', label: 'Ticket', description: 'Pick a ticket type' },\n { key: 'attendee', label: 'Attendee', description: 'Who is coming' },\n { key: 'confirm', label: 'Confirm', description: 'Review & submit' },\n];\n\nexport default function RegisterAttendeePage() {\n const { navigate } = useEventfullyManaged();\n\n const [step, setStep] = useState(0);\n const [eventId, setEventId] = useState('');\n const [ticketTypeId, setTicketTypeId] = useState('');\n const [attendeeMode, setAttendeeMode] = useState<'new' | 'existing'>('new');\n const [attendeeId, setAttendeeId] = useState('');\n const [fullName, setFullName] = useState('');\n const [email, setEmail] = useState('');\n const [company, setCompany] = useState('');\n const [phone, setPhone] = useState('');\n const [quantity, setQuantity] = useState(1);\n const [promoInput, setPromoInput] = useState('');\n const [appliedPromo, setAppliedPromo] = useState<PromoCodeGql | null>(null);\n const [promoError, setPromoError] = useState('');\n const [billingAccountId, setBillingAccountId] = useState('');\n const [confirmation, setConfirmation] = useState<Confirmation | null>(null);\n\n const { data: eventsData, loading: eventsLoading } = useEventsQuery({ limit: 100, offset: 0 });\n const { data: ticketData, loading: ticketsLoading } = useTicketTypesQuery({\n eventId: eventId || undefined,\n limit: 100,\n offset: 0,\n });\n const { data: attendeesData } = useAttendeesQuery({ eventId: eventId || undefined, limit: 100, offset: 0 });\n const { data: promoData } = usePromoCodesQuery({ eventId: eventId || undefined, limit: 100, offset: 0 });\n\n const events = useMemo(() => eventsData?.events.items ?? [], [eventsData]);\n const tickets = useMemo(\n () =>\n (ticketData?.ticketTypes.items ?? []).filter((ticket) => (!eventId || ticket.eventId === eventId) && ticket.isActive),\n [ticketData, eventId]\n );\n const attendees = useMemo(\n () => (attendeesData?.attendees.items ?? []).filter((attendee) => !eventId || attendee.eventId === eventId),\n [attendeesData, eventId]\n );\n const activePromos = useMemo(\n () =>\n (promoData?.promoCodes.items ?? []).filter((promo) => promo.isActive && (!eventId || promo.eventId === eventId)),\n [promoData, eventId]\n );\n\n const [createAttendee, { loading: creatingAttendee }] = useCreateAttendeeMutation();\n const [createRegistration, { loading: creatingRegistration }] = useCreateRegistrationMutation();\n const saving = creatingAttendee || creatingRegistration;\n\n const selectedEvent = useMemo(() => events.find((item) => item.id === eventId), [events, eventId]);\n const selectedTicket = useMemo(() => tickets.find((ticket) => ticket.id === ticketTypeId), [tickets, ticketTypeId]);\n const selectedAttendee = useMemo(\n () => attendees.find((attendee) => attendee.id === attendeeId),\n [attendees, attendeeId]\n );\n\n const qty = Math.max(1, quantity);\n const unitPrice = selectedTicket ? Number(selectedTicket.price) : 0;\n const currency = selectedTicket?.currency ?? 'USD';\n const subtotal = Number.isFinite(unitPrice) ? unitPrice * qty : 0;\n const discount = appliedPromo\n ? computeDiscount(subtotal, appliedPromo.discountType, Number(appliedPromo.discountValue))\n : 0;\n const total = Math.max(subtotal - discount, 0);\n const hasPositiveAmount = subtotal > 0;\n\n const attendeeName =\n attendeeMode === 'existing' ? (selectedAttendee?.fullName ?? '') : fullName.trim();\n\n const onEventChange = (value: string) => {\n setEventId(value);\n setTicketTypeId('');\n setAttendeeMode('new');\n setAttendeeId('');\n setAppliedPromo(null);\n setPromoInput('');\n setPromoError('');\n };\n\n const isStepValid = (index: number): boolean => {\n switch (index) {\n case 0:\n return Boolean(eventId);\n case 1:\n return Boolean(ticketTypeId);\n case 2:\n return attendeeMode === 'existing' ? Boolean(attendeeId) : Boolean(fullName.trim() && email.trim());\n default:\n return true;\n }\n };\n\n const canGoTo = (index: number): boolean => {\n if (index <= step) return true;\n for (let i = 0; i < index; i += 1) {\n if (!isStepValid(i)) return false;\n }\n return true;\n };\n\n const goToStep = (index: number) => {\n if (canGoTo(index)) {\n setStep(index);\n }\n };\n\n const goNext = () => {\n if (!isStepValid(step)) {\n const messages = [\n 'Choose an event to continue.',\n 'Pick a ticket type to continue.',\n 'Select or enter an attendee to continue.',\n ];\n notify.error('One more thing', messages[step] ?? 'Complete this step to continue.');\n return;\n }\n setStep((current) => Math.min(current + 1, STEPS.length - 1));\n };\n\n const goBack = () => setStep((current) => Math.max(current - 1, 0));\n\n const applyPromo = () => {\n const code = promoInput.trim().toUpperCase();\n if (!code) {\n setAppliedPromo(null);\n setPromoError('');\n return;\n }\n const match = activePromos.find((promo) => promo.code.toUpperCase() === code);\n if (!match) {\n setAppliedPromo(null);\n setPromoError('That code is not active for this event.');\n return;\n }\n setAppliedPromo(match);\n setPromoError('');\n notify.success('Promo applied', describeDiscount(match.discountType, match.discountValue, currency));\n };\n\n const clearPromo = () => {\n setAppliedPromo(null);\n setPromoInput('');\n setPromoError('');\n };\n\n const resetAll = () => {\n setStep(0);\n setEventId('');\n setTicketTypeId('');\n setAttendeeMode('new');\n setAttendeeId('');\n setFullName('');\n setEmail('');\n setCompany('');\n setPhone('');\n setQuantity(1);\n clearPromo();\n setBillingAccountId('');\n };\n\n const onConfirm = async () => {\n if (!eventId || !ticketTypeId) {\n notify.error('Incomplete', 'Pick an event and ticket first.');\n return;\n }\n if (attendeeMode === 'new' && (!fullName.trim() || !email.trim())) {\n notify.error('Attendee required', 'Enter a name and email, or pick an existing attendee.');\n return;\n }\n if (attendeeMode === 'existing' && !attendeeId) {\n notify.error('Attendee required', 'Select an existing attendee.');\n return;\n }\n\n try {\n let resolvedAttendeeId = attendeeId;\n let resolvedAttendeeName = selectedAttendee?.fullName ?? '';\n\n if (attendeeMode === 'new') {\n const attendeeResponse = await createAttendee({\n variables: {\n input: {\n eventId,\n fullName: fullName.trim(),\n email: email.trim(),\n company: company.trim() || null,\n phone: phone.trim() || null,\n profile: {},\n metadata: {},\n },\n },\n });\n const createdId = attendeeResponse.data?.createAttendee?.id;\n if (!mutationSucceeded(attendeeResponse, createdId, 'Could not create attendee') || !createdId) {\n return;\n }\n resolvedAttendeeId = createdId;\n resolvedAttendeeName = fullName.trim();\n }\n\n // The money leg is owned by global-billing-svc — never price locally. We\n // forward the promo code + optional billing-account reference via metadata\n // so the backend can attach the charge; totalAmount is left for the backend.\n const metadata: Record<string, unknown> = {};\n if (appliedPromo) {\n metadata.promoCode = appliedPromo.code;\n }\n if (hasPositiveAmount && billingAccountId.trim()) {\n metadata.billingAccountId = billingAccountId.trim();\n }\n\n const registrationResponse = await createRegistration({\n variables: {\n input: {\n eventId,\n attendeeId: resolvedAttendeeId,\n ticketTypeId,\n quantity: qty,\n currency,\n status: 'CONFIRMED',\n metadata,\n },\n },\n });\n if (\n !mutationSucceeded(\n registrationResponse,\n registrationResponse.data?.createRegistration?.id,\n 'Could not create registration'\n )\n ) {\n return;\n }\n\n const registration = registrationResponse.data?.createRegistration;\n setConfirmation({\n attendeeName: resolvedAttendeeName || 'Attendee',\n eventName: selectedEvent?.name ?? 'Event',\n ticketName: selectedTicket?.name ?? 'Ticket',\n quantity: qty,\n status: registration?.status ?? 'CONFIRMED',\n subtotal,\n discount,\n total,\n currency,\n promoCode: appliedPromo?.code ?? null,\n free: !hasPositiveAmount,\n });\n notify.success('Registration confirmed', resolvedAttendeeName || undefined);\n } catch (error) {\n notify.error('Could not register attendee', describeError(error));\n }\n };\n\n if (confirmation) {\n return (\n <div className=\"mx-auto max-w-2xl space-y-6 p-6\">\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/registration')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Registration\n </Button>\n </div>\n <GlassCard treatment=\"glass\" glow className=\"p-8 text-center\">\n <div className=\"mx-auto flex h-14 w-14 items-center justify-center rounded-full bg-status-success-bg-subtle\">\n <CheckCircle2 className=\"h-8 w-8 text-status-success-text\" aria-hidden=\"true\" />\n </div>\n <h1 className=\"mt-4 text-2xl font-bold text-text-primary\">Registration confirmed</h1>\n <p className=\"mt-2 text-sm text-text-secondary\">\n {confirmation.attendeeName} is registered for {confirmation.eventName}.\n </p>\n\n <dl className=\"mx-auto mt-6 max-w-sm space-y-2 rounded-card border border-border-seam bg-bg-surface p-4 text-left text-sm\">\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Ticket</dt>\n <dd className=\"font-medium text-text-primary\">\n {confirmation.ticketName}\n {confirmation.quantity > 1 ? ` × ${confirmation.quantity}` : ''}\n </dd>\n </div>\n {!confirmation.free ? (\n <>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Subtotal</dt>\n <dd className=\"tabular-nums text-text-primary\">\n {formatMoney(confirmation.subtotal, confirmation.currency)}\n </dd>\n </div>\n {confirmation.discount > 0 ? (\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">\n Promo{confirmation.promoCode ? ` · ${confirmation.promoCode}` : ''}\n </dt>\n <dd className=\"tabular-nums text-status-success-text\">\n −{formatMoney(confirmation.discount, confirmation.currency)}\n </dd>\n </div>\n ) : null}\n </>\n ) : null}\n <div className=\"flex justify-between border-t border-border-seam pt-2\">\n <dt className=\"font-semibold text-text-primary\">Total</dt>\n <dd className=\"font-bold tabular-nums text-text-primary\">\n {confirmation.free ? 'Free' : formatMoney(confirmation.total, confirmation.currency)}\n </dd>\n </div>\n <div className=\"flex justify-between\">\n <dt className=\"text-text-secondary\">Status</dt>\n <dd className=\"font-medium text-text-primary\">{confirmation.status}</dd>\n </div>\n </dl>\n {!confirmation.free ? (\n <p className=\"mt-3 text-xs text-text-muted\">Final pricing and payment are settled by the billing service.</p>\n ) : null}\n\n <div className=\"mt-8 flex flex-col justify-center gap-3 sm:flex-row\">\n <Button type=\"button\" variant=\"outline\" onClick={() => navigate('/registration')}>\n Back to Registrations\n </Button>\n <Button\n type=\"button\"\n onClick={() => {\n setConfirmation(null);\n resetAll();\n }}\n >\n Register another\n </Button>\n </div>\n </GlassCard>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={() => navigate('/registration')}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back to Registration\n </Button>\n <h1 className=\"mt-3 text-2xl font-bold text-text-primary\">\n <GradientText>Register Attendee</GradientText>\n </h1>\n <p className=\"mt-1 text-sm text-text-secondary\">\n Walk through the event, ticket and attendee in a few quick steps.\n </p>\n </div>\n\n <PagePurpose>\n Register a person for an event against a ticket type. Pick the event and ticket, choose an existing attendee or\n add a new one, apply a promo code if they have one, then confirm. The order summary previews the price — final\n pricing and payment are handled by the billing service.\n </PagePurpose>\n\n <Stepper steps={STEPS} active={step} onStepClick={goToStep} />\n\n <div className=\"grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_20rem]\">\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5 sm:p-6\">\n {/* STEP 0 — EVENT */}\n {step === 0 ? (\n <div className=\"space-y-4\">\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">Which event?</h2>\n <p className=\"mt-1 text-sm text-text-secondary\">Choose the event this attendee is signing up for.</p>\n </div>\n {eventsLoading ? (\n <p className=\"text-sm text-text-muted\">Loading events…</p>\n ) : events.length === 0 ? (\n <div className=\"rounded-card border border-dashed border-border-default p-6 text-center text-sm text-text-secondary\">\n No events yet.{' '}\n <button\n type=\"button\"\n className=\"font-medium text-text-link underline-offset-2 hover:underline\"\n onClick={() => navigate('/events/create')}\n >\n Create an event\n </button>{' '}\n first.\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2\">\n {events.map((eventItem) => {\n const selected = eventItem.id === eventId;\n return (\n <button\n key={eventItem.id}\n type=\"button\"\n onClick={() => onEventChange(eventItem.id)}\n aria-pressed={selected}\n className={`flex items-center gap-3 rounded-card border p-4 text-left transition-colors ${\n selected\n ? 'border-action-primary-border bg-accent-wash'\n : 'border-border-seam bg-bg-surface hover:border-border-strong'\n }`}\n >\n <span\n className={`flex h-10 w-10 shrink-0 items-center justify-center rounded-input ${\n selected ? 'bg-action-primary-bg text-action-primary-text' : 'bg-bg-sunken text-text-muted'\n }`}\n >\n <CalendarDays className=\"h-5 w-5\" aria-hidden=\"true\" />\n </span>\n <span className=\"min-w-0 flex-1 truncate text-sm font-medium text-text-primary\">\n {eventItem.name}\n </span>\n {selected ? <Check className=\"h-4 w-4 shrink-0 text-action-primary-bg\" aria-hidden=\"true\" /> : null}\n </button>\n );\n })}\n </div>\n )}\n </div>\n ) : null}\n\n {/* STEP 1 — TICKET */}\n {step === 1 ? (\n <div className=\"space-y-4\">\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">Ticket type</h2>\n <p className=\"mt-1 text-sm text-text-secondary\">Pick the ticket and how many they need.</p>\n </div>\n {ticketsLoading ? (\n <p className=\"text-sm text-text-muted\">Loading tickets…</p>\n ) : tickets.length === 0 ? (\n <div className=\"rounded-card border border-dashed border-border-default p-6 text-center text-sm text-text-secondary\">\n This event has no active ticket types.\n </div>\n ) : (\n <div className=\"grid grid-cols-1 gap-3 sm:grid-cols-2 xl:grid-cols-3\">\n {tickets.map((ticket) => {\n const selected = ticket.id === ticketTypeId;\n const cap = ticket.capacity ?? null;\n const sold = ticket.soldCount ?? 0;\n const pct = cap && cap > 0 ? Math.min(100, Math.round((sold / cap) * 100)) : null;\n const soldOut = cap != null && sold >= cap;\n return (\n <button\n key={ticket.id}\n type=\"button\"\n disabled={soldOut && !selected}\n onClick={() => setTicketTypeId(ticket.id)}\n aria-pressed={selected}\n className={`flex flex-col gap-3 rounded-card border p-4 text-left transition-colors disabled:cursor-not-allowed disabled:opacity-60 ${\n selected\n ? 'border-action-primary-border bg-accent-wash ring-1 ring-border-focus'\n : 'border-border-seam bg-bg-surface hover:border-border-strong'\n }`}\n >\n <div className=\"flex items-start justify-between gap-2\">\n <span className=\"text-sm font-semibold text-text-primary\">{ticket.name}</span>\n {selected ? (\n <Check className=\"h-4 w-4 shrink-0 text-action-primary-bg\" aria-hidden=\"true\" />\n ) : (\n <Ticket className=\"h-4 w-4 shrink-0 text-text-muted\" aria-hidden=\"true\" />\n )}\n </div>\n <span className=\"text-lg font-bold tabular-nums text-text-primary\">\n {Number(ticket.price) > 0 ? formatMoney(Number(ticket.price), ticket.currency) : 'Free'}\n </span>\n {cap != null ? (\n <div className=\"space-y-1\">\n <div className=\"h-1.5 w-full overflow-hidden rounded-full bg-bg-sunken\">\n <div\n className=\"h-full rounded-full bg-action-primary-bg\"\n style={{ width: `${pct ?? 0}%` }}\n />\n </div>\n <span className=\"text-xs text-text-muted\">\n {soldOut ? 'Sold out' : `${sold} / ${cap} sold`}\n </span>\n </div>\n ) : (\n <span className=\"text-xs text-text-muted\">{sold} sold</span>\n )}\n </button>\n );\n })}\n </div>\n )}\n\n <div className=\"flex flex-wrap items-end gap-4 border-t border-border-seam pt-4\">\n <div className=\"space-y-1\">\n <span className=\"text-sm font-medium text-text-primary\">Quantity</span>\n <div className=\"flex items-center gap-1\">\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n aria-label=\"Decrease quantity\"\n disabled={qty <= 1}\n onClick={() => setQuantity((value) => Math.max(1, value - 1))}\n >\n <Minus className=\"h-4 w-4\" />\n </Button>\n <span className=\"w-10 text-center text-base font-semibold tabular-nums text-text-primary\">{qty}</span>\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"icon\"\n aria-label=\"Increase quantity\"\n onClick={() => setQuantity((value) => value + 1)}\n >\n <Plus className=\"h-4 w-4\" />\n </Button>\n </div>\n </div>\n </div>\n </div>\n ) : null}\n\n {/* STEP 2 — ATTENDEE */}\n {step === 2 ? (\n <div className=\"space-y-4\">\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">Attendee information</h2>\n <p className=\"mt-1 text-sm text-text-secondary\">Add someone new or pick an existing attendee.</p>\n </div>\n\n <div className=\"inline-flex rounded-input border border-border-seam bg-bg-sunken p-1\">\n <button\n type=\"button\"\n onClick={() => setAttendeeMode('new')}\n className={`rounded-[calc(var(--radius-input)-2px)] px-3 py-1.5 text-sm font-medium transition-colors ${\n attendeeMode === 'new'\n ? 'bg-bg-surface text-text-primary shadow-sm'\n : 'text-text-secondary hover:text-text-primary'\n }`}\n >\n New attendee\n </button>\n <button\n type=\"button\"\n onClick={() => setAttendeeMode('existing')}\n disabled={attendees.length === 0}\n className={`rounded-[calc(var(--radius-input)-2px)] px-3 py-1.5 text-sm font-medium transition-colors disabled:cursor-not-allowed disabled:opacity-50 ${\n attendeeMode === 'existing'\n ? 'bg-bg-surface text-text-primary shadow-sm'\n : 'text-text-secondary hover:text-text-primary'\n }`}\n >\n Existing attendee\n </button>\n </div>\n\n {attendeeMode === 'existing' ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Attendee</span>\n <Select value={attendeeId} onValueChange={setAttendeeId}>\n <SelectTrigger aria-label=\"Attendee\">\n <SelectValue placeholder=\"Select an attendee\" />\n </SelectTrigger>\n <SelectContent>\n {attendees.map((attendee) => (\n <SelectItem key={attendee.id} value={attendee.id}>\n {attendee.fullName} · {attendee.email}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\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\">Full name</span>\n <Input value={fullName} onChange={(e) => setFullName(e.target.value)} placeholder=\"Enter full name\" />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Email</span>\n <Input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"Enter email address\"\n />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Company</span>\n <Input\n value={company}\n onChange={(e) => setCompany(e.target.value)}\n placeholder=\"Enter company name\"\n />\n </label>\n <label className=\"space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Phone</span>\n <Input value={phone} onChange={(e) => setPhone(e.target.value)} placeholder=\"Optional\" />\n </label>\n </div>\n )}\n\n {/* Promo code */}\n <div className=\"space-y-2 border-t border-border-seam pt-4\">\n <span className=\"text-sm font-medium text-text-primary\">Promo code (optional)</span>\n <div className=\"flex flex-col gap-2 sm:flex-row\">\n <Input\n value={promoInput}\n onChange={(e) => {\n setPromoInput(e.target.value);\n setPromoError('');\n }}\n placeholder=\"Enter promo code\"\n className=\"sm:flex-1\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n applyPromo();\n }\n }}\n />\n {appliedPromo ? (\n <Button type=\"button\" variant=\"outline\" onClick={clearPromo}>\n Remove\n </Button>\n ) : (\n <Button type=\"button\" variant=\"outline\" onClick={applyPromo} disabled={!promoInput.trim()}>\n Apply\n </Button>\n )}\n </div>\n {appliedPromo ? (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-status-success-bg-subtle px-2.5 py-0.5 text-xs font-medium text-status-success-text\">\n <BadgePercent className=\"h-3.5 w-3.5\" aria-hidden=\"true\" />\n {describeDiscount(appliedPromo.discountType, appliedPromo.discountValue, currency)} applied\n </span>\n ) : promoError ? (\n <span className=\"text-xs text-status-error-text\">{promoError}</span>\n ) : activePromos.length > 0 ? (\n <div className=\"flex flex-wrap items-center gap-1.5 text-xs text-text-muted\">\n <span>Available:</span>\n {activePromos.slice(0, 4).map((promo) => (\n <button\n key={promo.id}\n type=\"button\"\n onClick={() => {\n setPromoInput(promo.code);\n setAppliedPromo(promo);\n setPromoError('');\n }}\n className=\"rounded-full border border-border-seam bg-bg-surface px-2 py-0.5 font-medium text-text-secondary hover:border-border-strong hover:text-text-primary\"\n >\n {promo.code}\n </button>\n ))}\n </div>\n ) : null}\n </div>\n </div>\n ) : null}\n\n {/* STEP 3 — CONFIRM */}\n {step === 3 ? (\n <div className=\"space-y-4\">\n <div>\n <h2 className=\"text-lg font-semibold text-text-primary\">Review & confirm</h2>\n <p className=\"mt-1 text-sm text-text-secondary\">Double-check the details before registering.</p>\n </div>\n <dl className=\"divide-y divide-border-seam rounded-card border border-border-seam bg-bg-surface text-sm\">\n <div className=\"flex items-center gap-3 p-3\">\n <CalendarDays className=\"h-4 w-4 text-text-muted\" aria-hidden=\"true\" />\n <dt className=\"text-text-secondary\">Event</dt>\n <dd className=\"ml-auto font-medium text-text-primary\">{selectedEvent?.name ?? '—'}</dd>\n </div>\n <div className=\"flex items-center gap-3 p-3\">\n <Ticket className=\"h-4 w-4 text-text-muted\" aria-hidden=\"true\" />\n <dt className=\"text-text-secondary\">Ticket</dt>\n <dd className=\"ml-auto font-medium text-text-primary\">\n {selectedTicket?.name ?? '—'}\n {qty > 1 ? ` × ${qty}` : ''}\n </dd>\n </div>\n <div className=\"flex items-center gap-3 p-3\">\n <UserRound className=\"h-4 w-4 text-text-muted\" aria-hidden=\"true\" />\n <dt className=\"text-text-secondary\">Attendee</dt>\n <dd className=\"ml-auto text-right font-medium text-text-primary\">\n {attendeeName || '—'}\n <span className=\"block text-xs font-normal text-text-secondary\">\n {attendeeMode === 'existing' ? selectedAttendee?.email : email.trim()}\n </span>\n </dd>\n </div>\n </dl>\n\n {hasPositiveAmount ? (\n <label className=\"block space-y-1 text-sm\">\n <span className=\"font-medium text-text-primary\">Billing account ID (optional)</span>\n <Input\n value={billingAccountId}\n onChange={(e) => setBillingAccountId(e.target.value)}\n placeholder=\"Attach an existing billing account\"\n />\n <span className=\"text-xs text-text-secondary\">\n When provided, the charge is attached to this billing account.\n </span>\n </label>\n ) : null}\n </div>\n ) : null}\n\n {/* Wizard controls */}\n <div className=\"mt-6 flex items-center justify-between gap-3 border-t border-border-seam pt-4\">\n <Button type=\"button\" variant=\"ghost\" onClick={goBack} disabled={step === 0 || saving}>\n <ArrowLeft className=\"h-4 w-4\" />\n Back\n </Button>\n {step < STEPS.length - 1 ? (\n <Button type=\"button\" onClick={goNext}>\n Continue\n <ArrowRight className=\"h-4 w-4\" />\n </Button>\n ) : (\n <Button type=\"button\" onClick={onConfirm} disabled={saving}>\n <Ticket className=\"h-4 w-4\" />\n {saving ? 'Registering…' : 'Confirm registration'}\n </Button>\n )}\n </div>\n </GlassCard>\n\n {/* ORDER SUMMARY */}\n <GlassCard treatment=\"glass\" className=\"h-fit p-5 lg:sticky lg:top-6\">\n <h2 className=\"text-base font-semibold text-text-primary\">Order summary</h2>\n {selectedTicket ? (\n <div className=\"mt-4 space-y-3 text-sm\">\n <div className=\"flex items-start justify-between gap-3\">\n <span className=\"min-w-0 text-text-secondary\">\n {selectedEvent?.name ? `${selectedEvent.name} — ` : ''}\n {selectedTicket.name}\n {qty > 1 ? <span className=\"text-text-muted\"> × {qty}</span> : null}\n </span>\n <span className=\"shrink-0 tabular-nums text-text-primary\">\n {subtotal > 0 ? formatMoney(subtotal, currency) : 'Free'}\n </span>\n </div>\n {appliedPromo && discount > 0 ? (\n <div className=\"flex items-start justify-between gap-3\">\n <span className=\"text-text-secondary\">Promo · {appliedPromo.code}</span>\n <span className=\"shrink-0 tabular-nums text-status-success-text\">\n −{formatMoney(discount, currency)}\n </span>\n </div>\n ) : null}\n <div className=\"flex items-center justify-between border-t border-border-seam pt-3\">\n <span className=\"font-semibold text-text-primary\">Total</span>\n <span className=\"text-lg font-bold tabular-nums text-text-primary\">\n {subtotal > 0 ? formatMoney(total, currency) : 'Free'}\n </span>\n </div>\n {subtotal > 0 ? (\n <p className=\"text-xs text-text-muted\">Final pricing & payment handled by the billing service.</p>\n ) : null}\n </div>\n ) : (\n <p className=\"mt-4 text-sm text-text-muted\">\n Pick a ticket to see the price breakdown. Your order total updates as you go.\n </p>\n )}\n </GlassCard>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,96 +1,226 @@
|
|
|
1
1
|
import { useEventfullyManaged as e } from "../../context/EventfullyManagedContext.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
2
|
+
import { gql as t } from "../../../node_modules/graphql-tag/lib/index.js";
|
|
3
|
+
import { useQuery as n } from "../../../node_modules/@apollo/client/react/hooks/useQuery.js";
|
|
4
|
+
import { notify as r } from "../../lib/toast.js";
|
|
5
|
+
import { useDeleteSpeakerMutation as i, useEntityTagsQuery as a } from "../../api/eventApi.js";
|
|
6
|
+
import { ActionMenu as o } from "../../components/ActionMenu.js";
|
|
7
|
+
import { Pagination as s, usePagination as c } from "../../components/Pagination.js";
|
|
8
|
+
import { useMemo as l, useState as u } from "react";
|
|
9
|
+
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
10
|
+
import { Plus as p, Search as m } from "lucide-react";
|
|
11
|
+
import { Badge as h, Button as g, GlassCard as _, GradientText as v, IllustratedEmptyState as y, Input as b, PagePurpose as x, Skeleton as S } from "@burdenoff/fe-libs/ui";
|
|
9
12
|
//#region src/eventfullymanaged/pages/speakers/SpeakersPage.tsx
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
var C = t`
|
|
14
|
+
query EventfullymanagedSpeakerGrid($limit: Int, $offset: Int) {
|
|
15
|
+
speakers: eventfullyManagedSpeakers(limit: $limit, offset: $offset) {
|
|
16
|
+
total
|
|
17
|
+
items {
|
|
18
|
+
id
|
|
19
|
+
fullName
|
|
20
|
+
title
|
|
21
|
+
organization
|
|
22
|
+
bio
|
|
23
|
+
avatarUrl
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
`;
|
|
28
|
+
function w(e) {
|
|
29
|
+
let t = e.trim().split(/\s+/).filter(Boolean);
|
|
30
|
+
return t.length === 0 ? "?" : t.length === 1 ? t[0].slice(0, 2).toUpperCase() : (t[0][0] + t[t.length - 1][0]).toUpperCase();
|
|
31
|
+
}
|
|
32
|
+
function T({ speaker: e }) {
|
|
33
|
+
let [t, n] = u(!1);
|
|
34
|
+
return /* @__PURE__ */ d("span", {
|
|
35
|
+
className: "relative flex h-16 w-16 shrink-0 items-center justify-center overflow-hidden rounded-full bg-bg-sunken ring-1 ring-border-subtle",
|
|
36
|
+
children: e.avatarUrl && !t ? /* @__PURE__ */ d("img", {
|
|
37
|
+
src: e.avatarUrl ?? "",
|
|
38
|
+
alt: e.fullName,
|
|
39
|
+
loading: "lazy",
|
|
40
|
+
onError: () => n(!0),
|
|
41
|
+
className: "h-full w-full object-cover"
|
|
42
|
+
}) : /* @__PURE__ */ d("span", {
|
|
43
|
+
className: "text-base font-semibold text-text-secondary",
|
|
44
|
+
children: w(e.fullName)
|
|
45
|
+
})
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
function E({ speakerId: e }) {
|
|
49
|
+
let { data: t } = a({ input: {
|
|
50
|
+
entityType: "EVENTFULLYMANAGED_SPEAKER",
|
|
51
|
+
entityId: e
|
|
52
|
+
} }), n = t?.eventfullyManagedEntityTags ?? [];
|
|
53
|
+
return n.length === 0 ? null : /* @__PURE__ */ d("div", {
|
|
54
|
+
className: "mt-3 flex flex-wrap gap-1.5",
|
|
55
|
+
role: "list",
|
|
56
|
+
"aria-label": "Topics",
|
|
57
|
+
children: n.slice(0, 4).map((e) => {
|
|
58
|
+
let t = e.tagInfo, n = t?.color ?? void 0;
|
|
59
|
+
return /* @__PURE__ */ f(h, {
|
|
60
|
+
variant: "secondary",
|
|
61
|
+
className: "gap-1.5",
|
|
62
|
+
role: "listitem",
|
|
63
|
+
children: [n ? /* @__PURE__ */ d("span", {
|
|
64
|
+
className: "h-2 w-2 rounded-full",
|
|
65
|
+
style: { backgroundColor: n },
|
|
66
|
+
"aria-hidden": "true"
|
|
67
|
+
}) : null, t?.label ?? t?.key ?? "Topic"]
|
|
68
|
+
}, e.id);
|
|
69
|
+
})
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
function D() {
|
|
73
|
+
return /* @__PURE__ */ d(_, {
|
|
74
|
+
treatment: "plain",
|
|
75
|
+
className: "border-border-seam p-5",
|
|
76
|
+
children: /* @__PURE__ */ f("div", {
|
|
77
|
+
className: "flex items-start gap-4",
|
|
78
|
+
children: [/* @__PURE__ */ d(S, { className: "h-16 w-16 shrink-0 rounded-full" }), /* @__PURE__ */ f("div", {
|
|
79
|
+
className: "min-w-0 flex-1 space-y-2",
|
|
80
|
+
children: [
|
|
81
|
+
/* @__PURE__ */ d(S, { className: "h-5 w-32" }),
|
|
82
|
+
/* @__PURE__ */ d(S, { className: "h-4 w-40" }),
|
|
83
|
+
/* @__PURE__ */ d(S, { className: "h-4 w-full" }),
|
|
84
|
+
/* @__PURE__ */ f("div", {
|
|
85
|
+
className: "flex gap-1.5 pt-1",
|
|
86
|
+
children: [/* @__PURE__ */ d(S, { className: "h-5 w-12 rounded-full" }), /* @__PURE__ */ d(S, { className: "h-5 w-16 rounded-full" })]
|
|
87
|
+
})
|
|
88
|
+
]
|
|
89
|
+
})]
|
|
90
|
+
})
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
function O() {
|
|
94
|
+
let { navigate: t } = e(), a = c({ pageSize: 12 }), [h, S] = u(""), { data: w, loading: O, refetch: k } = n(C, { variables: {
|
|
95
|
+
limit: a.limit,
|
|
96
|
+
offset: a.offset
|
|
97
|
+
} }), [A] = i(), j = w?.speakers?.total ?? 0, M = l(() => w?.speakers?.items ?? [], [w]), N = l(() => {
|
|
98
|
+
let e = h.trim().toLowerCase();
|
|
99
|
+
return e ? M.filter((t) => [
|
|
100
|
+
t.fullName,
|
|
101
|
+
t.title,
|
|
102
|
+
t.organization,
|
|
103
|
+
t.bio
|
|
104
|
+
].filter(Boolean).some((t) => t.toLowerCase().includes(e))) : M;
|
|
105
|
+
}, [M, h]), P = async (e) => {
|
|
106
|
+
let t = await A({ variables: { id: e.id } });
|
|
107
|
+
if (t.error) throw r.error("Could not delete speaker", t.error.message), t.error;
|
|
108
|
+
if (!t.data?.deleteSpeaker) throw r.error("Could not delete speaker", "The server did not confirm the change."), Error("delete-unconfirmed");
|
|
109
|
+
r.success("Speaker deleted", e.fullName), await k();
|
|
110
|
+
};
|
|
111
|
+
return /* @__PURE__ */ f("div", {
|
|
16
112
|
className: "space-y-6 p-6",
|
|
17
113
|
children: [
|
|
18
|
-
/* @__PURE__ */
|
|
19
|
-
/* @__PURE__ */
|
|
20
|
-
className: "flex flex-col gap-4 sm:flex-row sm:items-
|
|
21
|
-
children: [/* @__PURE__ */
|
|
22
|
-
|
|
114
|
+
/* @__PURE__ */ d(x, { children: "Speakers are the people who present your sessions. Keep a roster here — their name, role, company and bio — so that when you build the agenda you can assign a speaker to each session in a couple of clicks. A good speaker profile also gives attendees a reason to attend." }),
|
|
115
|
+
/* @__PURE__ */ f("div", {
|
|
116
|
+
className: "flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between",
|
|
117
|
+
children: [/* @__PURE__ */ f("div", { children: [/* @__PURE__ */ d(v, {
|
|
118
|
+
as: "h1",
|
|
119
|
+
className: "text-2xl font-bold",
|
|
23
120
|
children: "Speakers"
|
|
24
|
-
}), /* @__PURE__ */
|
|
121
|
+
}), /* @__PURE__ */ d("p", {
|
|
25
122
|
className: "mt-1 text-sm text-text-secondary",
|
|
26
123
|
children: "Manage your speaker roster with live API data."
|
|
27
|
-
})] }), /* @__PURE__ */
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
124
|
+
})] }), /* @__PURE__ */ f("div", {
|
|
125
|
+
className: "flex flex-col gap-2 sm:flex-row sm:items-center",
|
|
126
|
+
children: [/* @__PURE__ */ f("div", {
|
|
127
|
+
className: "relative",
|
|
128
|
+
children: [/* @__PURE__ */ d(m, { className: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted" }), /* @__PURE__ */ d(b, {
|
|
129
|
+
type: "search",
|
|
130
|
+
value: h,
|
|
131
|
+
onChange: (e) => S(e.target.value),
|
|
132
|
+
placeholder: "Search speakers…",
|
|
133
|
+
"aria-label": "Search speakers on this page",
|
|
134
|
+
className: "pl-10 sm:w-64"
|
|
135
|
+
})]
|
|
136
|
+
}), /* @__PURE__ */ f(g, {
|
|
137
|
+
type: "button",
|
|
138
|
+
onClick: () => t("/speakers/create"),
|
|
139
|
+
children: [/* @__PURE__ */ d(p, { className: "h-4 w-4" }), "Add Speaker"]
|
|
140
|
+
})]
|
|
31
141
|
})]
|
|
32
142
|
}),
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}) : y.length === 0 ? /* @__PURE__ */ o(d, {
|
|
143
|
+
O ? /* @__PURE__ */ d("div", {
|
|
144
|
+
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-3",
|
|
145
|
+
children: Array.from({ length: 6 }).map((e, t) => /* @__PURE__ */ d(D, {}, t))
|
|
146
|
+
}) : M.length === 0 ? /* @__PURE__ */ d(_, {
|
|
38
147
|
treatment: "plain",
|
|
39
148
|
className: "border-border-seam",
|
|
40
|
-
children: /* @__PURE__ */
|
|
149
|
+
children: /* @__PURE__ */ d(y, {
|
|
41
150
|
illustration: "empty-people",
|
|
42
151
|
title: "No speakers yet.",
|
|
43
152
|
description: "Add your first speaker to start building the agenda.",
|
|
44
|
-
action: /* @__PURE__ */
|
|
153
|
+
action: /* @__PURE__ */ f(g, {
|
|
45
154
|
type: "button",
|
|
46
|
-
onClick: () =>
|
|
47
|
-
children: [/* @__PURE__ */
|
|
155
|
+
onClick: () => t("/speakers/create"),
|
|
156
|
+
children: [/* @__PURE__ */ d(p, { className: "h-4 w-4" }), "Add Speaker"]
|
|
48
157
|
})
|
|
49
158
|
})
|
|
50
|
-
}) : /* @__PURE__ */
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
159
|
+
}) : N.length === 0 ? /* @__PURE__ */ d(_, {
|
|
160
|
+
treatment: "plain",
|
|
161
|
+
className: "border-border-seam",
|
|
162
|
+
children: /* @__PURE__ */ d(y, {
|
|
163
|
+
illustration: "empty-search",
|
|
164
|
+
title: "No speakers match your search.",
|
|
165
|
+
description: "Try a different name, title or company."
|
|
166
|
+
})
|
|
167
|
+
}) : /* @__PURE__ */ f("div", {
|
|
168
|
+
className: "space-y-4",
|
|
169
|
+
children: [/* @__PURE__ */ d("div", {
|
|
170
|
+
className: "grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-3",
|
|
171
|
+
children: N.map((e) => {
|
|
172
|
+
let n = [e.title, e.organization].filter(Boolean).join(", ");
|
|
173
|
+
return /* @__PURE__ */ f(_, {
|
|
174
|
+
treatment: "plain",
|
|
175
|
+
className: "group flex flex-col border-border-seam p-5 transition-shadow duration-200 hover:shadow-elevation-1",
|
|
176
|
+
children: [
|
|
177
|
+
/* @__PURE__ */ f("div", {
|
|
178
|
+
className: "flex items-start gap-4",
|
|
179
|
+
children: [/* @__PURE__ */ d(T, { speaker: e }), /* @__PURE__ */ f("div", {
|
|
180
|
+
className: "min-w-0 flex-1",
|
|
181
|
+
children: [/* @__PURE__ */ f("div", {
|
|
182
|
+
className: "flex items-start justify-between gap-2",
|
|
183
|
+
children: [/* @__PURE__ */ d("button", {
|
|
184
|
+
type: "button",
|
|
185
|
+
onClick: () => t(`/speakers/${e.id}/edit`),
|
|
186
|
+
className: "rounded-button text-left text-base font-semibold text-text-primary transition-colors hover:text-text-link focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border-focus",
|
|
187
|
+
children: e.fullName
|
|
188
|
+
}), /* @__PURE__ */ d(o, {
|
|
189
|
+
ariaLabel: `Speaker actions for ${e.fullName}`,
|
|
190
|
+
entityName: e.fullName,
|
|
191
|
+
deleteLabel: "Delete speaker",
|
|
192
|
+
onEdit: () => t(`/speakers/${e.id}/edit`),
|
|
193
|
+
onDelete: () => P(e)
|
|
194
|
+
})]
|
|
195
|
+
}), /* @__PURE__ */ d("p", {
|
|
196
|
+
className: "mt-0.5 truncate text-sm text-text-secondary",
|
|
197
|
+
children: n || "Speaker"
|
|
198
|
+
})]
|
|
199
|
+
})]
|
|
200
|
+
}),
|
|
201
|
+
e.bio ? /* @__PURE__ */ d("p", {
|
|
202
|
+
className: "mt-3 line-clamp-2 text-sm text-text-secondary",
|
|
203
|
+
children: e.bio
|
|
204
|
+
}) : null,
|
|
205
|
+
/* @__PURE__ */ d(E, { speakerId: e.id })
|
|
206
|
+
]
|
|
207
|
+
}, e.id);
|
|
78
208
|
})
|
|
79
|
-
},
|
|
80
|
-
offset:
|
|
81
|
-
limit:
|
|
82
|
-
loadedCount:
|
|
83
|
-
total:
|
|
84
|
-
onPrev:
|
|
85
|
-
onNext:
|
|
209
|
+
}), h.trim() ? null : /* @__PURE__ */ d(s, {
|
|
210
|
+
offset: a.offset,
|
|
211
|
+
limit: a.limit,
|
|
212
|
+
loadedCount: M.length,
|
|
213
|
+
total: j,
|
|
214
|
+
onPrev: a.prevPage,
|
|
215
|
+
onNext: a.nextPage,
|
|
86
216
|
itemLabel: "speakers",
|
|
87
|
-
loading:
|
|
217
|
+
loading: O
|
|
88
218
|
})]
|
|
89
219
|
})
|
|
90
220
|
]
|
|
91
221
|
});
|
|
92
222
|
}
|
|
93
223
|
//#endregion
|
|
94
|
-
export {
|
|
224
|
+
export { O as default };
|
|
95
225
|
|
|
96
226
|
//# sourceMappingURL=SpeakersPage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpeakersPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/speakers/SpeakersPage.tsx"],"sourcesContent":["import { Mic2, Plus } from 'lucide-react';\nimport { Button, GlassCard, IllustratedEmptyState, PagePurpose } from '@burdenoff/fe-libs/ui';\nimport { useMemo } from 'react';\n\nimport { useSpeakersQuery } from '../../api/eventApi';\nimport { ActionMenu } from '../../components/ActionMenu';\nimport { Pagination, usePagination } from '../../components/Pagination';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\n\ntype SpeakerRow = {\n id: string;\n fullName: string;\n title?: string | null;\n organization?: string | null;\n email?: string | null;\n};\n\nexport default function SpeakersPage() {\n const { navigate } = useEventfullyManaged();\n const pagination = usePagination();\n const { data, loading } = useSpeakersQuery({ limit: pagination.limit, offset: pagination.offset });\n\n const total = data?.speakers?.total ?? 0;\n const speakers = useMemo(() => (data?.speakers?.items ?? []) as unknown as SpeakerRow[], [data]);\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Speakers are the people who present your sessions. Keep a roster here — their name, role, company and bio — so\n that when you build the agenda you can assign a speaker to each session in a couple of clicks. A good speaker\n profile also gives attendees a reason to attend.\n </PagePurpose>\n\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <h1 className=\"text-2xl font-bold text-text-primary\">Speakers</h1>\n <p className=\"mt-1 text-sm text-text-secondary\">Manage your speaker roster with live API data.</p>\n </div>\n <Button type=\"button\" onClick={() => navigate('/speakers/create')}>\n <Plus className=\"h-4 w-4\" />\n Add Speaker\n </Button>\n </div>\n\n {loading ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-8 text-center text-sm text-text-secondary\">\n Loading speakers…\n </GlassCard>\n ) : speakers.length === 0 ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration=\"empty-people\"\n title=\"No speakers yet.\"\n description=\"Add your first speaker to start building the agenda.\"\n action={\n <Button type=\"button\" onClick={() => navigate('/speakers/create')}>\n <Plus className=\"h-4 w-4\" />\n Add Speaker\n </Button>\n }\n />\n </GlassCard>\n ) : (\n <div className=\"space-y-3\">\n {speakers.map((speaker) => (\n <GlassCard key={speaker.id} treatment=\"plain\" className=\"border-border-seam p-4\">\n <div className=\"flex items-center justify-between gap-3\">\n <div className=\"flex min-w-0 items-center gap-3\">\n <span className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-full bg-bg-sunken text-text-secondary\">\n <Mic2 className=\"h-5 w-5\" />\n </span>\n <div className=\"min-w-0\">\n <button\n type=\"button\"\n onClick={() => navigate(`/speakers/${speaker.id}/edit`)}\n className=\"rounded-button text-left font-semibold text-text-primary transition-colors hover:text-text-link focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border-focus\"\n >\n {speaker.fullName}\n </button>\n <p className=\"mt-0.5 truncate text-sm text-text-secondary\">\n {[speaker.title, speaker.organization].filter(Boolean).join(' • ') || 'Speaker'}\n </p>\n </div>\n </div>\n <ActionMenu\n ariaLabel={`Speaker actions for ${speaker.fullName}`}\n onEdit={() => navigate(`/speakers/${speaker.id}/edit`)}\n />\n </div>\n </GlassCard>\n ))}\n\n <Pagination\n offset={pagination.offset}\n limit={pagination.limit}\n loadedCount={speakers.length}\n total={total}\n onPrev={pagination.prevPage}\n onNext={pagination.nextPage}\n itemLabel=\"speakers\"\n loading={loading}\n />\n </div>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;AAiBA,SAAwB,IAAe;CACrC,IAAM,EAAE,gBAAa,GAAsB,EACrC,IAAa,GAAe,EAC5B,EAAE,SAAM,eAAY,EAAiB;EAAE,OAAO,EAAW;EAAO,QAAQ,EAAW;EAAQ,CAAC,EAE5F,IAAQ,GAAM,UAAU,SAAS,GACjC,IAAW,QAAe,GAAM,UAAU,SAAS,EAAE,EAA8B,CAAC,EAAK,CAAC;AAEhG,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,GAAD,EAAA,UAAa,iRAIC,CAAA;GAEd,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,MAAD;KAAI,WAAU;eAAuC;KAAa,CAAA,EAClE,kBAAC,KAAD;KAAG,WAAU;eAAmC;KAAkD,CAAA,CAC9F,EAAA,CAAA,EACN,kBAAC,GAAD;KAAQ,MAAK;KAAS,eAAe,EAAS,mBAAmB;eAAjE,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAAA,cAErB;OACL;;GAEL,IACC,kBAAC,GAAD;IAAW,WAAU;IAAQ,WAAU;cAAiE;IAE5F,CAAA,GACV,EAAS,WAAW,IACtB,kBAAC,GAAD;IAAW,WAAU;IAAQ,WAAU;cACrC,kBAAC,GAAD;KACE,cAAa;KACb,OAAM;KACN,aAAY;KACZ,QACE,kBAAC,GAAD;MAAQ,MAAK;MAAS,eAAe,EAAS,mBAAmB;gBAAjE,CACE,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA,EAAA,cAErB;;KAEX,CAAA;IACQ,CAAA,GAEZ,kBAAC,OAAD;IAAK,WAAU;cAAf,CACG,EAAS,KAAK,MACb,kBAAC,GAAD;KAA4B,WAAU;KAAQ,WAAU;eACtD,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBACd,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA;QACvB,CAAA,EACP,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,UAAD;SACE,MAAK;SACL,eAAe,EAAS,aAAa,EAAQ,GAAG,OAAO;SACvD,WAAU;mBAET,EAAQ;SACF,CAAA,EACT,kBAAC,KAAD;SAAG,WAAU;mBACV,CAAC,EAAQ,OAAO,EAAQ,aAAa,CAAC,OAAO,QAAQ,CAAC,KAAK,MAAM,IAAI;SACpE,CAAA,CACA;UACF;UACN,kBAAC,GAAD;OACE,WAAW,uBAAuB,EAAQ;OAC1C,cAAc,EAAS,aAAa,EAAQ,GAAG,OAAO;OACtD,CAAA,CACE;;KACI,EAxBI,EAAQ,GAwBZ,CACZ,EAEF,kBAAC,GAAD;KACE,QAAQ,EAAW;KACnB,OAAO,EAAW;KAClB,aAAa,EAAS;KACf;KACP,QAAQ,EAAW;KACnB,QAAQ,EAAW;KACnB,WAAU;KACD;KACT,CAAA,CACE;;GAEJ"}
|
|
1
|
+
{"version":3,"file":"SpeakersPage.js","names":[],"sources":["../../../../src/eventfullymanaged/pages/speakers/SpeakersPage.tsx"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Plus, Search } from 'lucide-react';\nimport {\n Badge,\n Button,\n GlassCard,\n GradientText,\n IllustratedEmptyState,\n Input,\n PagePurpose,\n Skeleton,\n} from '@burdenoff/fe-libs/ui';\nimport { useMemo, useState } from 'react';\n\nimport { useDeleteSpeakerMutation, useEntityTagsQuery } from '../../api/eventApi';\nimport { ActionMenu } from '../../components/ActionMenu';\nimport { Pagination, usePagination } from '../../components/Pagination';\nimport { useEventfullyManaged } from '../../context/EventfullyManagedContext';\nimport { notify } from '../../lib/toast';\n\n// The foundation SPEAKERS_QUERY only selects the columns other screens need\n// (id/name/title/org/email). The roster grid additionally shows the headshot\n// and the one-line talk abstract, so it reads from this fuller selection rather\n// than mutating the shared hook that Event/Session pages also consume.\nconst SPEAKER_GRID_QUERY = gql`\n query EventfullymanagedSpeakerGrid($limit: Int, $offset: Int) {\n speakers: eventfullyManagedSpeakers(limit: $limit, offset: $offset) {\n total\n items {\n id\n fullName\n title\n organization\n bio\n avatarUrl\n }\n }\n }\n`;\n\ntype SpeakerRow = {\n id: string;\n fullName: string;\n title?: string | null;\n organization?: string | null;\n bio?: string | null;\n avatarUrl?: string | null;\n};\n\ntype SpeakerGridResponse = { speakers: { total: number; items: SpeakerRow[] } };\n\nfunction initials(name: string): string {\n const parts = name.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 SpeakerAvatar({ speaker }: { speaker: SpeakerRow }) {\n const [failed, setFailed] = useState(false);\n const showImage = Boolean(speaker.avatarUrl) && !failed;\n return (\n <span className=\"relative flex h-16 w-16 shrink-0 items-center justify-center overflow-hidden rounded-full bg-bg-sunken ring-1 ring-border-subtle\">\n {showImage ? (\n <img\n src={speaker.avatarUrl ?? ''}\n alt={speaker.fullName}\n loading=\"lazy\"\n onError={() => setFailed(true)}\n className=\"h-full w-full object-cover\"\n />\n ) : (\n <span className=\"text-base font-semibold text-text-secondary\">{initials(speaker.fullName)}</span>\n )}\n </span>\n );\n}\n\n// Read-only topic chips sourced from the platform tags service for this speaker.\n// The mock shows two topic tags per speaker; these are the real assignments.\nfunction SpeakerTopics({ speakerId }: { speakerId: string }) {\n const { data } = useEntityTagsQuery({ input: { entityType: 'EVENTFULLYMANAGED_SPEAKER', entityId: speakerId } });\n const assignments = data?.eventfullyManagedEntityTags ?? [];\n if (assignments.length === 0) {\n return null;\n }\n return (\n <div className=\"mt-3 flex flex-wrap gap-1.5\" role=\"list\" aria-label=\"Topics\">\n {assignments.slice(0, 4).map((assignment) => {\n const info = assignment.tagInfo;\n const color = info?.color ?? undefined;\n return (\n <Badge key={assignment.id} variant=\"secondary\" className=\"gap-1.5\" role=\"listitem\">\n {color ? (\n <span className=\"h-2 w-2 rounded-full\" style={{ backgroundColor: color }} aria-hidden=\"true\" />\n ) : null}\n {info?.label ?? info?.key ?? 'Topic'}\n </Badge>\n );\n })}\n </div>\n );\n}\n\nfunction SpeakerCardSkeleton() {\n return (\n <GlassCard treatment=\"plain\" className=\"border-border-seam p-5\">\n <div className=\"flex items-start gap-4\">\n <Skeleton className=\"h-16 w-16 shrink-0 rounded-full\" />\n <div className=\"min-w-0 flex-1 space-y-2\">\n <Skeleton className=\"h-5 w-32\" />\n <Skeleton className=\"h-4 w-40\" />\n <Skeleton className=\"h-4 w-full\" />\n <div className=\"flex gap-1.5 pt-1\">\n <Skeleton className=\"h-5 w-12 rounded-full\" />\n <Skeleton className=\"h-5 w-16 rounded-full\" />\n </div>\n </div>\n </div>\n </GlassCard>\n );\n}\n\nexport default function SpeakersPage() {\n const { navigate } = useEventfullyManaged();\n const pagination = usePagination({ pageSize: 12 });\n const [search, setSearch] = useState('');\n const { data, loading, refetch } = useQuery<SpeakerGridResponse, { limit?: number; offset?: number }>(\n SPEAKER_GRID_QUERY,\n { variables: { limit: pagination.limit, offset: pagination.offset } }\n );\n const [deleteSpeaker] = useDeleteSpeakerMutation();\n\n const total = data?.speakers?.total ?? 0;\n const speakers = useMemo(() => data?.speakers?.items ?? [], [data]);\n\n const filtered = useMemo(() => {\n const term = search.trim().toLowerCase();\n if (!term) {\n return speakers;\n }\n return speakers.filter((speaker) =>\n [speaker.fullName, speaker.title, speaker.organization, speaker.bio]\n .filter(Boolean)\n .some((field) => (field as string).toLowerCase().includes(term))\n );\n }, [speakers, search]);\n\n const onDelete = async (speaker: SpeakerRow) => {\n const response = await deleteSpeaker({ variables: { id: speaker.id } });\n if (response.error) {\n notify.error('Could not delete speaker', response.error.message);\n throw response.error;\n }\n if (!response.data?.deleteSpeaker) {\n notify.error('Could not delete speaker', 'The server did not confirm the change.');\n throw new Error('delete-unconfirmed');\n }\n notify.success('Speaker deleted', speaker.fullName);\n await refetch();\n };\n\n return (\n <div className=\"space-y-6 p-6\">\n <PagePurpose>\n Speakers are the people who present your sessions. Keep a roster here — their name, role, company and bio — so\n that when you build the agenda you can assign a speaker to each session in a couple of clicks. A good speaker\n profile also gives attendees a reason to attend.\n </PagePurpose>\n\n <div className=\"flex flex-col gap-4 sm:flex-row sm:items-end sm:justify-between\">\n <div>\n <GradientText as=\"h1\" className=\"text-2xl font-bold\">\n Speakers\n </GradientText>\n <p className=\"mt-1 text-sm text-text-secondary\">Manage your speaker roster with live API data.</p>\n </div>\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center\">\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-text-muted\" />\n <Input\n type=\"search\"\n value={search}\n onChange={(event) => setSearch(event.target.value)}\n placeholder=\"Search speakers…\"\n aria-label=\"Search speakers on this page\"\n className=\"pl-10 sm:w-64\"\n />\n </div>\n <Button type=\"button\" onClick={() => navigate('/speakers/create')}>\n <Plus className=\"h-4 w-4\" />\n Add Speaker\n </Button>\n </div>\n </div>\n\n {loading ? (\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-3\">\n {Array.from({ length: 6 }).map((_, index) => (\n <SpeakerCardSkeleton key={index} />\n ))}\n </div>\n ) : speakers.length === 0 ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration=\"empty-people\"\n title=\"No speakers yet.\"\n description=\"Add your first speaker to start building the agenda.\"\n action={\n <Button type=\"button\" onClick={() => navigate('/speakers/create')}>\n <Plus className=\"h-4 w-4\" />\n Add Speaker\n </Button>\n }\n />\n </GlassCard>\n ) : filtered.length === 0 ? (\n <GlassCard treatment=\"plain\" className=\"border-border-seam\">\n <IllustratedEmptyState\n illustration=\"empty-search\"\n title=\"No speakers match your search.\"\n description=\"Try a different name, title or company.\"\n />\n </GlassCard>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"grid grid-cols-1 gap-4 sm:grid-cols-2 xl:grid-cols-3\">\n {filtered.map((speaker) => {\n const roleLine = [speaker.title, speaker.organization].filter(Boolean).join(', ');\n return (\n <GlassCard\n key={speaker.id}\n treatment=\"plain\"\n className=\"group flex flex-col border-border-seam p-5 transition-shadow duration-200 hover:shadow-elevation-1\"\n >\n <div className=\"flex items-start gap-4\">\n <SpeakerAvatar speaker={speaker} />\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-start justify-between gap-2\">\n <button\n type=\"button\"\n onClick={() => navigate(`/speakers/${speaker.id}/edit`)}\n className=\"rounded-button text-left text-base font-semibold text-text-primary transition-colors hover:text-text-link focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border-focus\"\n >\n {speaker.fullName}\n </button>\n <ActionMenu\n ariaLabel={`Speaker actions for ${speaker.fullName}`}\n entityName={speaker.fullName}\n deleteLabel=\"Delete speaker\"\n onEdit={() => navigate(`/speakers/${speaker.id}/edit`)}\n onDelete={() => onDelete(speaker)}\n />\n </div>\n <p className=\"mt-0.5 truncate text-sm text-text-secondary\">{roleLine || 'Speaker'}</p>\n </div>\n </div>\n\n {speaker.bio ? (\n <p className=\"mt-3 line-clamp-2 text-sm text-text-secondary\">{speaker.bio}</p>\n ) : null}\n\n <SpeakerTopics speakerId={speaker.id} />\n </GlassCard>\n );\n })}\n </div>\n\n {search.trim() ? null : (\n <Pagination\n offset={pagination.offset}\n limit={pagination.limit}\n loadedCount={speakers.length}\n total={total}\n onPrev={pagination.prevPage}\n onNext={pagination.nextPage}\n itemLabel=\"speakers\"\n loading={loading}\n />\n )}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|