@123usmanhaider321/ui 0.1.8 → 1.0.0
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/README.md +416 -31
- package/dist/images/icon/1LINK.svg +50 -0
- package/dist/images/icon/CreditCard.svg +83 -0
- package/dist/images/icon/Easypaisa.png +0 -0
- package/dist/images/icon/MobileWallet.png +0 -0
- package/dist/images/icon/Raast-Logo.png +0 -0
- package/dist/images/icon/VISA.png +0 -0
- package/dist/images/icon/add-circle-1.svg +5 -0
- package/dist/images/icon/check-circle-broken.svg +3 -0
- package/dist/images/icon/close-circle.svg +5 -0
- package/dist/images/icon/jazzcash.png +0 -0
- package/dist/images/icon/loading_icon.json +3347 -0
- package/dist/images/icon/mastercard-logo.webp +0 -0
- package/dist/images/icon/paymo.jpeg +0 -0
- package/dist/images/icon/preview-svgrepo-com.svg +36 -0
- package/dist/images/icon/trash.svg +7 -0
- package/dist/images/icon/unionpay-logo.svg +9 -0
- package/dist/index-87FQZHOs.js +11119 -0
- package/dist/index-87FQZHOs.js.map +1 -0
- package/dist/index-Tl9g213f.js +60475 -0
- package/dist/index-Tl9g213f.js.map +1 -0
- package/dist/index.d.ts +1 -10
- package/dist/index.es-CpgTaa1Y.js +16734 -0
- package/dist/index.es-CpgTaa1Y.js.map +1 -0
- package/dist/index.js +40 -12
- package/dist/index.js.map +1 -1
- package/dist/loading_icon-n5H5dQBl.js +3375 -0
- package/dist/loading_icon-n5H5dQBl.js.map +1 -0
- package/dist/src/components/Alert/ErrorAlert.d.ts +6 -0
- package/dist/src/components/Alert/SuccessAlert.d.ts +6 -0
- package/dist/{components → src/components}/FormBuilder/DiscountInput.d.ts +3 -6
- package/dist/{components → src/components}/FormBuilder/FormBuilder.d.ts +2 -11
- package/dist/{components → src/components}/FormBuilder/QuestionCard.d.ts +0 -5
- package/dist/{components → src/components}/FormBuilder/QuestionEditor.d.ts +0 -5
- package/dist/{components → src/components}/FormBuilder/SortableQuestionList.d.ts +0 -5
- package/dist/src/components/FormBuilder/questionIcons.d.ts +5 -0
- package/dist/{components/EventAddForm → src/components/NewAddEvent}/AddEventLayout.d.ts +2 -1
- package/dist/{components/EventAddForm → src/components/NewAddEvent}/AddEventStepper.d.ts +2 -2
- package/dist/{components/EventAddForm → src/components/NewAddEvent}/common/ConfirmationModal.d.ts +1 -1
- package/dist/src/components/NewAddEvent/components/EventSubmissionConfirmationModal.d.ts +14 -0
- package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/StepTwo/TicketTierSection.d.ts +1 -1
- package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/TicketTierForm.d.ts +1 -1
- package/dist/{components/EventAddForm → src/components/NewAddEvent}/hooks/useStepperForm.d.ts +22 -22
- package/dist/{components/EventAddForm → src/components/NewAddEvent}/hooks/useTicketTierForm.d.ts +63 -15
- package/dist/src/components/NewAddEvent/schemas/step1.d.ts +211 -0
- package/dist/src/components/NewAddEvent/schemas/step2.d.ts +411 -0
- package/dist/{components/EventAddForm → src/components/NewAddEvent}/schemas/utils.d.ts +8 -2
- package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/IndividualFormStep.d.ts +1 -1
- package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/SocialProfilesStep.d.ts +1 -1
- package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/TeamFormStep.d.ts +1 -1
- package/dist/src/components/Spinner/spinner.d.ts +4 -0
- package/dist/src/components/TicketlyUIProvider.d.ts +35 -0
- package/dist/src/components/common/Loader/index.d.ts +8 -0
- package/dist/src/components/common/Modals/ConfirmationModal.d.ts +7 -0
- package/dist/{components/FormInput → src/components/ui}/FormInput.d.ts +1 -1
- package/dist/src/components/ui/Loader.d.ts +4 -0
- package/dist/{components/Button/Button.d.ts → src/components/ui/button.d.ts} +1 -1
- package/dist/src/index.d.ts +10 -0
- package/dist/{lib → src/lib}/actions.d.ts +0 -126
- package/dist/src/lib/dom-utils.d.ts +2 -0
- package/dist/src/lib/storage-utils.d.ts +5 -0
- package/dist/src/lib/types.d.ts +258 -0
- package/dist/src/redux/baseQuery.d.ts +16 -0
- package/dist/{services → src/redux/features}/eventApi.d.ts +1053 -1745
- package/dist/src/redux/features/globalSlice.d.ts +17 -0
- package/dist/{services → src/redux/features/single-event}/single-event-api.d.ts +856 -1190
- package/dist/src/redux/types.d.ts +2 -0
- package/dist/src/services/library-services.d.ts +15 -0
- package/dist/src/services/remote-config.d.ts +27 -0
- package/dist/{services → src/services}/utils.d.ts +1 -1
- package/dist/src/theme/colors.d.ts +127 -0
- package/dist/src/theme/typography.d.ts +13 -0
- package/dist/src/types/api.d.ts +18 -0
- package/dist/style.css +2984 -0
- package/dist/styles.css +3758 -4012
- package/package.json +78 -68
- package/dist/_virtual/_commonjsHelpers.js +0 -9
- package/dist/_virtual/_commonjsHelpers.js.map +0 -1
- package/dist/_virtual/customParseFormat.js +0 -5
- package/dist/_virtual/customParseFormat.js.map +0 -1
- package/dist/_virtual/dayjs.min.js +0 -5
- package/dist/_virtual/dayjs.min.js.map +0 -1
- package/dist/_virtual/duration.js +0 -5
- package/dist/_virtual/duration.js.map +0 -1
- package/dist/_virtual/index.js +0 -5
- package/dist/_virtual/index.js.map +0 -1
- package/dist/_virtual/isBetween.js +0 -5
- package/dist/_virtual/isBetween.js.map +0 -1
- package/dist/_virtual/relativeTime.js +0 -5
- package/dist/_virtual/relativeTime.js.map +0 -1
- package/dist/_virtual/use-sync-external-store-shim.development.js +0 -5
- package/dist/_virtual/use-sync-external-store-shim.development.js.map +0 -1
- package/dist/_virtual/use-sync-external-store-shim.production.js +0 -5
- package/dist/_virtual/use-sync-external-store-shim.production.js.map +0 -1
- package/dist/_virtual/with-selector.development.js +0 -5
- package/dist/_virtual/with-selector.development.js.map +0 -1
- package/dist/_virtual/with-selector.js +0 -5
- package/dist/_virtual/with-selector.js.map +0 -1
- package/dist/_virtual/with-selector.production.js +0 -5
- package/dist/_virtual/with-selector.production.js.map +0 -1
- package/dist/components/Alert/Alert.js +0 -51
- package/dist/components/Alert/Alert.js.map +0 -1
- package/dist/components/Button/Button.js +0 -52
- package/dist/components/Button/Button.js.map +0 -1
- package/dist/components/Button/Button.test.d.ts +0 -1
- package/dist/components/Button/index.d.ts +0 -1
- package/dist/components/Checkbox/Checkbox.js +0 -50
- package/dist/components/Checkbox/Checkbox.js.map +0 -1
- package/dist/components/Checkbox/Checkbox.test.d.ts +0 -1
- package/dist/components/Checkbox/index.d.ts +0 -1
- package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +0 -25
- package/dist/components/CheckboxGroup/CheckboxGroup.js +0 -99
- package/dist/components/CheckboxGroup/CheckboxGroup.js.map +0 -1
- package/dist/components/ConfirmationModal/ConfirmationModal.d.ts +0 -15
- package/dist/components/ConfirmationModal/ConfirmationModal.js +0 -136
- package/dist/components/ConfirmationModal/ConfirmationModal.js.map +0 -1
- package/dist/components/ConfirmationModal/index.d.ts +0 -2
- package/dist/components/CustomSelect/CustomSelect.js +0 -259
- package/dist/components/CustomSelect/CustomSelect.js.map +0 -1
- package/dist/components/EventAddForm/AddEventLayout.js +0 -227
- package/dist/components/EventAddForm/AddEventLayout.js.map +0 -1
- package/dist/components/EventAddForm/AddEventStepper.js +0 -719
- package/dist/components/EventAddForm/AddEventStepper.js.map +0 -1
- package/dist/components/EventAddForm/common/ConfirmationModal.js +0 -136
- package/dist/components/EventAddForm/common/ConfirmationModal.js.map +0 -1
- package/dist/components/EventAddForm/common/DescriptionModal.js +0 -70
- package/dist/components/EventAddForm/common/DescriptionModal.js.map +0 -1
- package/dist/components/EventAddForm/components/AnimatedBackground.d.ts +0 -8
- package/dist/components/EventAddForm/components/ApprovalConfirmationModal.d.ts +0 -7
- package/dist/components/EventAddForm/components/CheckboxGroup.js +0 -92
- package/dist/components/EventAddForm/components/CheckboxGroup.js.map +0 -1
- package/dist/components/EventAddForm/components/CustomMeetingForm.js +0 -237
- package/dist/components/EventAddForm/components/CustomMeetingForm.js.map +0 -1
- package/dist/components/EventAddForm/components/DateTimeField.js +0 -173
- package/dist/components/EventAddForm/components/DateTimeField.js.map +0 -1
- package/dist/components/EventAddForm/components/EventSubmissionConfirmationModal.d.ts +0 -33
- package/dist/components/EventAddForm/components/EventSubmissionConfirmationModal.js +0 -366
- package/dist/components/EventAddForm/components/EventSubmissionConfirmationModal.js.map +0 -1
- package/dist/components/EventAddForm/components/FileUpload.js +0 -412
- package/dist/components/EventAddForm/components/FileUpload.js.map +0 -1
- package/dist/components/EventAddForm/components/FormBuilderProceedModal.js +0 -197
- package/dist/components/EventAddForm/components/FormBuilderProceedModal.js.map +0 -1
- package/dist/components/EventAddForm/components/GoogleMapsAutocompleteInput.js +0 -1179
- package/dist/components/EventAddForm/components/GoogleMapsAutocompleteInput.js.map +0 -1
- package/dist/components/EventAddForm/components/InputField.d.ts +0 -15
- package/dist/components/EventAddForm/components/RadioGroupButton.d.ts +0 -14
- package/dist/components/EventAddForm/components/SelectField.d.ts +0 -19
- package/dist/components/EventAddForm/components/SingleDateTimeInput.js +0 -102
- package/dist/components/EventAddForm/components/SingleDateTimeInput.js.map +0 -1
- package/dist/components/EventAddForm/components/StepTwo/CustomFormSection.js +0 -277
- package/dist/components/EventAddForm/components/StepTwo/CustomFormSection.js.map +0 -1
- package/dist/components/EventAddForm/components/StepTwo/TicketTierSection.js +0 -148
- package/dist/components/EventAddForm/components/StepTwo/TicketTierSection.js.map +0 -1
- package/dist/components/EventAddForm/components/TicketTierForm.js +0 -418
- package/dist/components/EventAddForm/components/TicketTierForm.js.map +0 -1
- package/dist/components/EventAddForm/components/TicketTypeSelection.js +0 -93
- package/dist/components/EventAddForm/components/TicketTypeSelection.js.map +0 -1
- package/dist/components/EventAddForm/hooks/useStepperForm.js +0 -371
- package/dist/components/EventAddForm/hooks/useStepperForm.js.map +0 -1
- package/dist/components/EventAddForm/hooks/useTicketTierForm.js +0 -237
- package/dist/components/EventAddForm/hooks/useTicketTierForm.js.map +0 -1
- package/dist/components/EventAddForm/index.d.ts +0 -3
- package/dist/components/EventAddForm/index.js +0 -41
- package/dist/components/EventAddForm/index.js.map +0 -1
- package/dist/components/EventAddForm/schemas/index.d.ts +0 -2
- package/dist/components/EventAddForm/schemas/step1.d.ts +0 -47
- package/dist/components/EventAddForm/schemas/step1.js +0 -135
- package/dist/components/EventAddForm/schemas/step1.js.map +0 -1
- package/dist/components/EventAddForm/schemas/step2.d.ts +0 -138
- package/dist/components/EventAddForm/schemas/step2.js +0 -94
- package/dist/components/EventAddForm/schemas/step2.js.map +0 -1
- package/dist/components/EventAddForm/schemas/utils.js +0 -28
- package/dist/components/EventAddForm/schemas/utils.js.map +0 -1
- package/dist/components/EventAddForm/steps/IndividualFormStep.js +0 -85
- package/dist/components/EventAddForm/steps/IndividualFormStep.js.map +0 -1
- package/dist/components/EventAddForm/steps/SocialProfilesStep.js +0 -123
- package/dist/components/EventAddForm/steps/SocialProfilesStep.js.map +0 -1
- package/dist/components/EventAddForm/steps/StepOne.js +0 -462
- package/dist/components/EventAddForm/steps/StepOne.js.map +0 -1
- package/dist/components/EventAddForm/steps/StepTwo.js +0 -173
- package/dist/components/EventAddForm/steps/StepTwo.js.map +0 -1
- package/dist/components/EventAddForm/steps/TeamFormStep.js +0 -13
- package/dist/components/EventAddForm/steps/TeamFormStep.js.map +0 -1
- package/dist/components/FormBuilder/CategoryList.js +0 -242
- package/dist/components/FormBuilder/CategoryList.js.map +0 -1
- package/dist/components/FormBuilder/DiscountInput.js +0 -366
- package/dist/components/FormBuilder/DiscountInput.js.map +0 -1
- package/dist/components/FormBuilder/FormBuilder.js +0 -918
- package/dist/components/FormBuilder/FormBuilder.js.map +0 -1
- package/dist/components/FormBuilder/OptionList.js +0 -120
- package/dist/components/FormBuilder/OptionList.js.map +0 -1
- package/dist/components/FormBuilder/PaymentPreview.d.ts +0 -12
- package/dist/components/FormBuilder/PaymentPreview.js +0 -70
- package/dist/components/FormBuilder/PaymentPreview.js.map +0 -1
- package/dist/components/FormBuilder/PreviewInput.d.ts +0 -10
- package/dist/components/FormBuilder/PreviewInput.js +0 -143
- package/dist/components/FormBuilder/PreviewInput.js.map +0 -1
- package/dist/components/FormBuilder/QuestionCard.js +0 -252
- package/dist/components/FormBuilder/QuestionCard.js.map +0 -1
- package/dist/components/FormBuilder/QuestionEditor.js +0 -166
- package/dist/components/FormBuilder/QuestionEditor.js.map +0 -1
- package/dist/components/FormBuilder/RequiredToggle.js +0 -43
- package/dist/components/FormBuilder/RequiredToggle.js.map +0 -1
- package/dist/components/FormBuilder/SortableQuestionList.js +0 -137
- package/dist/components/FormBuilder/SortableQuestionList.js.map +0 -1
- package/dist/components/FormBuilder/index.d.ts +0 -4
- package/dist/components/FormBuilder/utils.js +0 -229
- package/dist/components/FormBuilder/utils.js.map +0 -1
- package/dist/components/FormInput/FormInput.js +0 -126
- package/dist/components/FormInput/FormInput.js.map +0 -1
- package/dist/components/FormInput/FormInput.test.d.ts +0 -1
- package/dist/components/FormInput/index.d.ts +0 -2
- package/dist/components/ImageCropModal/index.js +0 -464
- package/dist/components/ImageCropModal/index.js.map +0 -1
- package/dist/components/InformationPopover/InformationPopover.d.ts +0 -7
- package/dist/components/InformationPopover/InformationPopover.js +0 -19
- package/dist/components/InformationPopover/InformationPopover.js.map +0 -1
- package/dist/components/InformationPopover.js +0 -19
- package/dist/components/InformationPopover.js.map +0 -1
- package/dist/components/InputErrorMessage/InputErrorMessage.js +0 -21
- package/dist/components/InputErrorMessage/InputErrorMessage.js.map +0 -1
- package/dist/components/Modal/Modal.d.ts +0 -15
- package/dist/components/Modal/Modal.js +0 -73
- package/dist/components/Modal/Modal.js.map +0 -1
- package/dist/components/Radio/Radio.js +0 -35
- package/dist/components/Radio/Radio.js.map +0 -1
- package/dist/components/Spinner/spinner.d.ts +0 -2
- package/dist/components/Spinner/spinner.js +0 -22
- package/dist/components/Spinner/spinner.js.map +0 -1
- package/dist/components/Toggle/Toggle.d.ts +0 -16
- package/dist/components/Toggle/index.d.ts +0 -2
- package/dist/components/Tooltip/Tooltip.d.ts +0 -12
- package/dist/components/Tooltip/Tooltip.js +0 -134
- package/dist/components/Tooltip/Tooltip.js.map +0 -1
- package/dist/components/common/FallbackImage.js +0 -47
- package/dist/components/common/FallbackImage.js.map +0 -1
- package/dist/components/ui/Calendar/calendar-utils.js +0 -51
- package/dist/components/ui/Calendar/calendar-utils.js.map +0 -1
- package/dist/components/ui/Calendar/index.js +0 -142
- package/dist/components/ui/Calendar/index.js.map +0 -1
- package/dist/components/ui/Checkbox.d.ts +0 -9
- package/dist/components/ui/Checkbox.js +0 -50
- package/dist/components/ui/Checkbox.js.map +0 -1
- package/dist/components/ui/DatePicker/index.js +0 -188
- package/dist/components/ui/DatePicker/index.js.map +0 -1
- package/dist/components/ui/FormInput.js +0 -129
- package/dist/components/ui/FormInput.js.map +0 -1
- package/dist/components/ui/InputErrorMessage.d.ts +0 -7
- package/dist/components/ui/InputErrorMessage.js +0 -21
- package/dist/components/ui/InputErrorMessage.js.map +0 -1
- package/dist/components/ui/Modal/index.js +0 -73
- package/dist/components/ui/Modal/index.js.map +0 -1
- package/dist/components/ui/Radio.d.ts +0 -6
- package/dist/components/ui/Radio.js +0 -35
- package/dist/components/ui/Radio.js.map +0 -1
- package/dist/components/ui/RichTextEditor.js +0 -242
- package/dist/components/ui/RichTextEditor.js.map +0 -1
- package/dist/components/ui/TimePicker/index.js +0 -215
- package/dist/components/ui/TimePicker/index.js.map +0 -1
- package/dist/components/ui/TimeSelector/index.js +0 -138
- package/dist/components/ui/TimeSelector/index.js.map +0 -1
- package/dist/components/ui/Tooltip.d.ts +0 -12
- package/dist/components/ui/Tooltip.js +0 -136
- package/dist/components/ui/Tooltip.js.map +0 -1
- package/dist/hooks/useDropdownPosition.d.ts +0 -11
- package/dist/hooks/useFirebaseAuthState.d.ts +0 -6
- package/dist/hooks/useFirebaseAuthState.js +0 -23
- package/dist/hooks/useFirebaseAuthState.js.map +0 -1
- package/dist/hooks/useTicketTierForm.d.ts +0 -61
- package/dist/lib/actions.js +0 -32
- package/dist/lib/actions.js.map +0 -1
- package/dist/lib/cropImage.js +0 -113
- package/dist/lib/cropImage.js.map +0 -1
- package/dist/lib/imageAnalysis.js +0 -58
- package/dist/lib/imageAnalysis.js.map +0 -1
- package/dist/lib/utils.js +0 -9
- package/dist/lib/utils.js.map +0 -1
- package/dist/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +0 -60
- package/dist/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +0 -1
- package/dist/node_modules/@dnd-kit/core/dist/core.esm.js +0 -3458
- package/dist/node_modules/@dnd-kit/core/dist/core.esm.js.map +0 -1
- package/dist/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +0 -593
- package/dist/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +0 -1
- package/dist/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +0 -302
- package/dist/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.map +0 -1
- package/dist/node_modules/@firebase/app/dist/esm/index.esm.js +0 -768
- package/dist/node_modules/@firebase/app/dist/esm/index.esm.js.map +0 -1
- package/dist/node_modules/@firebase/component/dist/esm/index.esm.js +0 -340
- package/dist/node_modules/@firebase/component/dist/esm/index.esm.js.map +0 -1
- package/dist/node_modules/@firebase/logger/dist/esm/index.esm.js +0 -123
- package/dist/node_modules/@firebase/logger/dist/esm/index.esm.js.map +0 -1
- package/dist/node_modules/@firebase/storage/dist/index.esm.js +0 -2623
- package/dist/node_modules/@firebase/storage/dist/index.esm.js.map +0 -1
- package/dist/node_modules/@firebase/util/dist/index.esm.js +0 -658
- package/dist/node_modules/@firebase/util/dist/index.esm.js.map +0 -1
- package/dist/node_modules/@firebase/util/dist/postinstall.js +0 -5
- package/dist/node_modules/@firebase/util/dist/postinstall.js.map +0 -1
- package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.js +0 -3179
- package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.js.map +0 -1
- package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.js +0 -60
- package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.js.map +0 -1
- package/dist/node_modules/@fortawesome/react-fontawesome/dist/index.js +0 -400
- package/dist/node_modules/@fortawesome/react-fontawesome/dist/index.js.map +0 -1
- package/dist/node_modules/@heroicons/react/20/solid/esm/CheckIcon.js +0 -27
- package/dist/node_modules/@heroicons/react/20/solid/esm/CheckIcon.js.map +0 -1
- package/dist/node_modules/@heroicons/react/20/solid/esm/ChevronDownIcon.js +0 -27
- package/dist/node_modules/@heroicons/react/20/solid/esm/ChevronDownIcon.js.map +0 -1
- package/dist/node_modules/@heroicons/react/24/outline/esm/ArrowRightIcon.js +0 -29
- package/dist/node_modules/@heroicons/react/24/outline/esm/ArrowRightIcon.js.map +0 -1
- package/dist/node_modules/@heroicons/react/24/outline/esm/ClockIcon.js +0 -29
- package/dist/node_modules/@heroicons/react/24/outline/esm/ClockIcon.js.map +0 -1
- package/dist/node_modules/@heroicons/react/24/outline/esm/DocumentDuplicateIcon.js +0 -29
- package/dist/node_modules/@heroicons/react/24/outline/esm/DocumentDuplicateIcon.js.map +0 -1
- package/dist/node_modules/@heroicons/react/24/outline/esm/InformationCircleIcon.js +0 -29
- package/dist/node_modules/@heroicons/react/24/outline/esm/InformationCircleIcon.js.map +0 -1
- package/dist/node_modules/@heroicons/react/24/outline/esm/LinkIcon.js +0 -29
- package/dist/node_modules/@heroicons/react/24/outline/esm/LinkIcon.js.map +0 -1
- package/dist/node_modules/@heroicons/react/24/outline/esm/MagnifyingGlassIcon.js +0 -29
- package/dist/node_modules/@heroicons/react/24/outline/esm/MagnifyingGlassIcon.js.map +0 -1
- package/dist/node_modules/@heroicons/react/24/outline/esm/MapPinIcon.js +0 -33
- package/dist/node_modules/@heroicons/react/24/outline/esm/MapPinIcon.js.map +0 -1
- package/dist/node_modules/@heroicons/react/24/outline/esm/VideoCameraIcon.js +0 -29
- package/dist/node_modules/@heroicons/react/24/outline/esm/VideoCameraIcon.js.map +0 -1
- package/dist/node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js +0 -29
- package/dist/node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js.map +0 -1
- package/dist/node_modules/@tiptap/core/dist/index.js +0 -5446
- package/dist/node_modules/@tiptap/core/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js +0 -21
- package/dist/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-blockquote/dist/index.js +0 -78
- package/dist/node_modules/@tiptap/extension-blockquote/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-bold/dist/index.js +0 -100
- package/dist/node_modules/@tiptap/extension-bold/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-code/dist/index.js +0 -70
- package/dist/node_modules/@tiptap/extension-code/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-code-block/dist/index.js +0 -317
- package/dist/node_modules/@tiptap/extension-code-block/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-document/dist/index.js +0 -16
- package/dist/node_modules/@tiptap/extension-document/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-hard-break/dist/index.js +0 -66
- package/dist/node_modules/@tiptap/extension-hard-break/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-heading/dist/index.js +0 -86
- package/dist/node_modules/@tiptap/extension-heading/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-horizontal-rule/dist/index.js +0 -80
- package/dist/node_modules/@tiptap/extension-horizontal-rule/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-italic/dist/index.js +0 -98
- package/dist/node_modules/@tiptap/extension-italic/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-link/dist/index.js +0 -423
- package/dist/node_modules/@tiptap/extension-link/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-list/dist/index.js +0 -1039
- package/dist/node_modules/@tiptap/extension-list/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-paragraph/dist/index.js +0 -61
- package/dist/node_modules/@tiptap/extension-paragraph/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-placeholder/dist/index.js +0 -7
- package/dist/node_modules/@tiptap/extension-placeholder/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-strike/dist/index.js +0 -79
- package/dist/node_modules/@tiptap/extension-strike/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-text/dist/index.js +0 -16
- package/dist/node_modules/@tiptap/extension-text/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extension-underline/dist/index.js +0 -76
- package/dist/node_modules/@tiptap/extension-underline/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/extensions/dist/index.js +0 -376
- package/dist/node_modules/@tiptap/extensions/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/react/dist/index.js +0 -650
- package/dist/node_modules/@tiptap/react/dist/index.js.map +0 -1
- package/dist/node_modules/@tiptap/starter-kit/dist/index.js +0 -97
- package/dist/node_modules/@tiptap/starter-kit/dist/index.js.map +0 -1
- package/dist/node_modules/dayjs/dayjs.min.js +0 -283
- package/dist/node_modules/dayjs/dayjs.min.js.map +0 -1
- package/dist/node_modules/dayjs/plugin/customParseFormat.js +0 -130
- package/dist/node_modules/dayjs/plugin/customParseFormat.js.map +0 -1
- package/dist/node_modules/dayjs/plugin/duration.js +0 -137
- package/dist/node_modules/dayjs/plugin/duration.js.map +0 -1
- package/dist/node_modules/dayjs/plugin/isBetween.js +0 -20
- package/dist/node_modules/dayjs/plugin/isBetween.js.map +0 -1
- package/dist/node_modules/dayjs/plugin/relativeTime.js +0 -49
- package/dist/node_modules/dayjs/plugin/relativeTime.js.map +0 -1
- package/dist/node_modules/fast-equals/dist/es/index.js +0 -442
- package/dist/node_modules/fast-equals/dist/es/index.js.map +0 -1
- package/dist/node_modules/idb/build/index.js +0 -70
- package/dist/node_modules/idb/build/index.js.map +0 -1
- package/dist/node_modules/idb/build/wrap-idb-value.js +0 -149
- package/dist/node_modules/idb/build/wrap-idb-value.js.map +0 -1
- package/dist/node_modules/linkifyjs/dist/linkify.js +0 -1159
- package/dist/node_modules/linkifyjs/dist/linkify.js.map +0 -1
- package/dist/node_modules/orderedmap/dist/index.js +0 -120
- package/dist/node_modules/orderedmap/dist/index.js.map +0 -1
- package/dist/node_modules/prosemirror-commands/dist/index.js +0 -527
- package/dist/node_modules/prosemirror-commands/dist/index.js.map +0 -1
- package/dist/node_modules/prosemirror-dropcursor/dist/index.js +0 -137
- package/dist/node_modules/prosemirror-dropcursor/dist/index.js.map +0 -1
- package/dist/node_modules/prosemirror-gapcursor/dist/index.js +0 -221
- package/dist/node_modules/prosemirror-gapcursor/dist/index.js.map +0 -1
- package/dist/node_modules/prosemirror-history/dist/index.js +0 -357
- package/dist/node_modules/prosemirror-history/dist/index.js.map +0 -1
- package/dist/node_modules/prosemirror-keymap/dist/index.js +0 -84
- package/dist/node_modules/prosemirror-keymap/dist/index.js.map +0 -1
- package/dist/node_modules/prosemirror-model/dist/index.js +0 -3209
- package/dist/node_modules/prosemirror-model/dist/index.js.map +0 -1
- package/dist/node_modules/prosemirror-schema-list/dist/index.js +0 -131
- package/dist/node_modules/prosemirror-schema-list/dist/index.js.map +0 -1
- package/dist/node_modules/prosemirror-state/dist/index.js +0 -936
- package/dist/node_modules/prosemirror-state/dist/index.js.map +0 -1
- package/dist/node_modules/prosemirror-transform/dist/index.js +0 -1881
- package/dist/node_modules/prosemirror-transform/dist/index.js.map +0 -1
- package/dist/node_modules/prosemirror-view/dist/index.js +0 -5232
- package/dist/node_modules/prosemirror-view/dist/index.js.map +0 -1
- package/dist/node_modules/rope-sequence/dist/index.js +0 -184
- package/dist/node_modules/rope-sequence/dist/index.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +0 -82
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js +0 -78
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +0 -78
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +0 -63
- package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/shim/index.js +0 -13
- package/dist/node_modules/use-sync-external-store/shim/index.js.map +0 -1
- package/dist/node_modules/use-sync-external-store/shim/with-selector.js +0 -13
- package/dist/node_modules/use-sync-external-store/shim/with-selector.js.map +0 -1
- package/dist/node_modules/w3c-keyname/index.js +0 -106
- package/dist/node_modules/w3c-keyname/index.js.map +0 -1
- package/dist/node_modules/zod/v4/classic/coerce.js +0 -10
- package/dist/node_modules/zod/v4/classic/coerce.js.map +0 -1
- package/dist/node_modules/zod/v4/classic/compat.js +0 -8
- package/dist/node_modules/zod/v4/classic/compat.js.map +0 -1
- package/dist/node_modules/zod/v4/classic/errors.js +0 -45
- package/dist/node_modules/zod/v4/classic/errors.js.map +0 -1
- package/dist/node_modules/zod/v4/classic/iso.js +0 -44
- package/dist/node_modules/zod/v4/classic/iso.js.map +0 -1
- package/dist/node_modules/zod/v4/classic/parse.js +0 -30
- package/dist/node_modules/zod/v4/classic/parse.js.map +0 -1
- package/dist/node_modules/zod/v4/classic/schemas.js +0 -711
- package/dist/node_modules/zod/v4/classic/schemas.js.map +0 -1
- package/dist/node_modules/zod/v4/core/api.js +0 -588
- package/dist/node_modules/zod/v4/core/api.js.map +0 -1
- package/dist/node_modules/zod/v4/core/checks.js +0 -411
- package/dist/node_modules/zod/v4/core/checks.js.map +0 -1
- package/dist/node_modules/zod/v4/core/core.js +0 -75
- package/dist/node_modules/zod/v4/core/core.js.map +0 -1
- package/dist/node_modules/zod/v4/core/doc.js +0 -38
- package/dist/node_modules/zod/v4/core/doc.js.map +0 -1
- package/dist/node_modules/zod/v4/core/errors.js +0 -73
- package/dist/node_modules/zod/v4/core/errors.js.map +0 -1
- package/dist/node_modules/zod/v4/core/json-schema-processors.js +0 -359
- package/dist/node_modules/zod/v4/core/json-schema-processors.js.map +0 -1
- package/dist/node_modules/zod/v4/core/parse.js +0 -96
- package/dist/node_modules/zod/v4/core/parse.js.map +0 -1
- package/dist/node_modules/zod/v4/core/regexes.js +0 -84
- package/dist/node_modules/zod/v4/core/regexes.js.map +0 -1
- package/dist/node_modules/zod/v4/core/registries.js +0 -52
- package/dist/node_modules/zod/v4/core/registries.js.map +0 -1
- package/dist/node_modules/zod/v4/core/schemas.js +0 -1391
- package/dist/node_modules/zod/v4/core/schemas.js.map +0 -1
- package/dist/node_modules/zod/v4/core/to-json-schema.js +0 -363
- package/dist/node_modules/zod/v4/core/to-json-schema.js.map +0 -1
- package/dist/node_modules/zod/v4/core/util.js +0 -431
- package/dist/node_modules/zod/v4/core/util.js.map +0 -1
- package/dist/node_modules/zod/v4/core/versions.js +0 -9
- package/dist/node_modules/zod/v4/core/versions.js.map +0 -1
- package/dist/redux/baseQuery.d.ts +0 -1
- package/dist/redux/baseQuery.js +0 -24
- package/dist/redux/baseQuery.js.map +0 -1
- package/dist/services/eventApi.js +0 -411
- package/dist/services/eventApi.js.map +0 -1
- package/dist/services/helpers.js +0 -115
- package/dist/services/helpers.js.map +0 -1
- package/dist/services/initialize-firebase.d.ts +0 -2
- package/dist/services/initialize-firebase.js +0 -20
- package/dist/services/initialize-firebase.js.map +0 -1
- package/dist/services/process-image-on-server.js +0 -30
- package/dist/services/process-image-on-server.js.map +0 -1
- package/dist/services/remote-config.d.ts +0 -5
- package/dist/services/remote-config.js +0 -9
- package/dist/services/remote-config.js.map +0 -1
- package/dist/services/single-event-api.js +0 -301
- package/dist/services/single-event-api.js.map +0 -1
- package/dist/services/utils.js +0 -107
- package/dist/services/utils.js.map +0 -1
- package/dist/setupTests.d.ts +0 -1
- package/dist/stories/Alert.stories.d.ts +0 -10
- package/dist/stories/Button.stories.d.ts +0 -13
- package/dist/types/redux-types.d.ts +0 -15
- package/dist/types/types.d.ts +0 -60
- package/dist/types/types.js +0 -10
- package/dist/types/types.js.map +0 -1
- package/dist/utils/cn.d.ts +0 -6
- package/dist/utils/cn.js +0 -9
- package/dist/utils/cn.js.map +0 -1
- package/dist/utils/date-range.d.ts +0 -4
- package/dist/utils/date-range.js +0 -13
- package/dist/utils/date-range.js.map +0 -1
- package/dist/utils/single-event-helpers.d.ts +0 -50
- package/dist/utils/single-event-helpers.js +0 -18
- package/dist/utils/single-event-helpers.js.map +0 -1
- package/dist/utils/social-validation.js +0 -42
- package/dist/utils/social-validation.js.map +0 -1
- package/dist/utils/utils.js +0 -20
- package/dist/utils/utils.js.map +0 -1
- /package/dist/{components/Alert/Alert.d.ts → src/components/Alert/index.d.ts} +0 -0
- /package/dist/{components → src/components}/FormBuilder/CategoryList.d.ts +0 -0
- /package/dist/{components → src/components}/FormBuilder/OptionList.d.ts +0 -0
- /package/dist/{components → src/components}/FormBuilder/RequiredToggle.d.ts +0 -0
- /package/dist/{components → src/components}/FormBuilder/types.d.ts +0 -0
- /package/dist/{components → src/components}/FormBuilder/utils.d.ts +0 -0
- /package/dist/{components → src/components}/ImageCropModal/index.d.ts +0 -0
- /package/dist/{components → src/components}/InformationPopover.d.ts +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/common/DescriptionModal.d.ts +0 -0
- /package/dist/{components/ui/FormInput.d.ts → src/components/NewAddEvent/components/AddEventFormInput.d.ts} +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/CheckboxGroup.d.ts +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/CustomMeetingForm.d.ts +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/DateTimeField.d.ts +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/FileUpload.d.ts +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/FormBuilderProceedModal.d.ts +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/GoogleMapsAutocompleteInput.d.ts +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/SingleDateTimeInput.d.ts +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/StepTwo/CustomFormSection.d.ts +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/TicketTypeSelection.d.ts +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/StepOne.d.ts +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/StepTwo.d.ts +0 -0
- /package/dist/{components/EventAddForm → src/components/NewAddEvent}/types.d.ts +0 -0
- /package/dist/{components → src/components}/common/FallbackImage.d.ts +0 -0
- /package/dist/{components → src/components}/ui/Calendar/calendar-utils.d.ts +0 -0
- /package/dist/{components → src/components}/ui/Calendar/index.d.ts +0 -0
- /package/dist/{components/Checkbox → src/components/ui}/Checkbox.d.ts +0 -0
- /package/dist/{components/CustomSelect → src/components/ui}/CustomSelect.d.ts +0 -0
- /package/dist/{components → src/components}/ui/DatePicker/index.d.ts +0 -0
- /package/dist/{components/InputErrorMessage → src/components/ui}/InputErrorMessage.d.ts +0 -0
- /package/dist/{components → src/components}/ui/Modal/index.d.ts +0 -0
- /package/dist/{components/Radio → src/components/ui}/Radio.d.ts +0 -0
- /package/dist/{components → src/components}/ui/RichTextEditor.d.ts +0 -0
- /package/dist/{components → src/components}/ui/TimePicker/index.d.ts +0 -0
- /package/dist/{components → src/components}/ui/TimeSelector/index.d.ts +0 -0
- /package/dist/{components → src/components}/ui/Tooltip/index.d.ts +0 -0
- /package/dist/{lib → src/lib}/constants.d.ts +0 -0
- /package/dist/{lib → src/lib}/cropImage.d.ts +0 -0
- /package/dist/{lib → src/lib}/imageAnalysis.d.ts +0 -0
- /package/dist/{utils → src/lib}/social-validation.d.ts +0 -0
- /package/dist/{lib/utils.d.ts → src/lib/tailwind-merge.d.ts} +0 -0
- /package/dist/{utils → src/lib}/utils.d.ts +0 -0
- /package/dist/{services → src/redux/features/single-event}/helpers.d.ts +0 -0
- /package/dist/{services → src/services}/process-image-on-server.d.ts +0 -0
- /package/dist/{types → src/types}/events.d.ts +0 -0
- /package/dist/{types → src/types}/question.d.ts +0 -0
|
@@ -1,462 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
-
import React__default, { memo, useState } from "react";
|
|
3
|
-
import { AnimatePresence, motion } from "framer-motion";
|
|
4
|
-
import FileUpload from "../components/FileUpload.js";
|
|
5
|
-
import FormInput from "../../ui/FormInput.js";
|
|
6
|
-
import DescriptionModal from "../common/DescriptionModal.js";
|
|
7
|
-
import CheckboxGroup from "../components/CheckboxGroup.js";
|
|
8
|
-
import DateTimeField from "../components/DateTimeField.js";
|
|
9
|
-
import { GenericLocationInput } from "../components/GoogleMapsAutocompleteInput.js";
|
|
10
|
-
import { validateEventDates } from "../schemas/step1.js";
|
|
11
|
-
import InformationPopover from "../../InformationPopover.js";
|
|
12
|
-
import { TicketTierAvailabilityType } from "../../../types/types.js";
|
|
13
|
-
import ConfirmationModal from "../common/ConfirmationModal.js";
|
|
14
|
-
import { useGetEventCategoriesQuery } from "../../../services/single-event-api.js";
|
|
15
|
-
import InputErrorMessage from "../../ui/InputErrorMessage.js";
|
|
16
|
-
const EVENT_TYPE_OPTIONS = [
|
|
17
|
-
{ value: "INCLUSIVE", label: "Open for all", disabled: false },
|
|
18
|
-
{ value: "INTERNAL", label: "Institution only", disabled: false },
|
|
19
|
-
{ value: "INVITE_ONLY", label: "Invite only", disabled: false },
|
|
20
|
-
{ value: "UN_LISTED", label: "Hidden (link only)", disabled: false }
|
|
21
|
-
];
|
|
22
|
-
function StepOne({ formState, setField, setMultipleFields, errors, validateField, setErrors, onBusyStateChange, isBusy }) {
|
|
23
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;
|
|
24
|
-
const { data: categories = [] } = useGetEventCategoriesQuery();
|
|
25
|
-
const [isDescriptionModalOpen, setIsDescriptionModalOpen] = useState(false);
|
|
26
|
-
React__default.useEffect(() => {
|
|
27
|
-
import("react-quill-new");
|
|
28
|
-
}, []);
|
|
29
|
-
const [showDateConflictModal, setShowDateConflictModal] = useState(false);
|
|
30
|
-
const [pendingDateUpdate, setPendingDateUpdate] = useState(null);
|
|
31
|
-
const [conflictingTiers, setConflictingTiers] = useState([]);
|
|
32
|
-
const stripHtml = (html) => {
|
|
33
|
-
const doc = new DOMParser().parseFromString(html, "text/html");
|
|
34
|
-
return doc.body.textContent || "";
|
|
35
|
-
};
|
|
36
|
-
const handleSetData = (updater) => {
|
|
37
|
-
setMultipleFields((prev) => {
|
|
38
|
-
const newData = updater(prev);
|
|
39
|
-
const othersCategory = categories.find((cat) => cat.name === "Others");
|
|
40
|
-
if (othersCategory && newData.event_categories && !newData.event_categories.includes(othersCategory.id)) {
|
|
41
|
-
delete newData.custom_category;
|
|
42
|
-
}
|
|
43
|
-
return newData;
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
const checkTierConflicts = (potentialNewState) => {
|
|
47
|
-
var _a2, _b2, _c2, _d2;
|
|
48
|
-
if (!potentialNewState.ticket_tiers) return [];
|
|
49
|
-
const tiers = Object.values(potentialNewState.ticket_tiers);
|
|
50
|
-
const conflicts = [];
|
|
51
|
-
const startDate = ((_a2 = potentialNewState.registration_start_timestamp) == null ? void 0 : _a2.date) || ((_b2 = potentialNewState.event_start_timestamp) == null ? void 0 : _b2.date);
|
|
52
|
-
const endDate = ((_c2 = potentialNewState.registration_end_timestamp) == null ? void 0 : _c2.date) || ((_d2 = potentialNewState.event_end_timestamp) == null ? void 0 : _d2.date);
|
|
53
|
-
if (!startDate || !endDate) return [];
|
|
54
|
-
tiers.forEach((tier) => {
|
|
55
|
-
if (tier.availability_type === TicketTierAvailabilityType.CUSTOM && tier.availability_schedule) {
|
|
56
|
-
const hasInvalidDates = tier.availability_schedule.some((dateKey) => {
|
|
57
|
-
return dateKey < startDate || dateKey > endDate;
|
|
58
|
-
});
|
|
59
|
-
if (hasInvalidDates) {
|
|
60
|
-
conflicts.push(tier);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
return conflicts;
|
|
65
|
-
};
|
|
66
|
-
const handleDateUpdate = (updater) => {
|
|
67
|
-
const potentialNewState = updater(formState);
|
|
68
|
-
const datesChanged = JSON.stringify(potentialNewState.event_start_timestamp) !== JSON.stringify(formState.event_start_timestamp) || JSON.stringify(potentialNewState.event_end_timestamp) !== JSON.stringify(formState.event_end_timestamp) || JSON.stringify(potentialNewState.registration_start_timestamp) !== JSON.stringify(formState.registration_start_timestamp) || JSON.stringify(potentialNewState.registration_end_timestamp) !== JSON.stringify(formState.registration_end_timestamp);
|
|
69
|
-
if (!datesChanged) {
|
|
70
|
-
handleSetData(updater);
|
|
71
|
-
return;
|
|
72
|
-
}
|
|
73
|
-
const conflicts = checkTierConflicts(potentialNewState);
|
|
74
|
-
if (conflicts.length > 0) {
|
|
75
|
-
setConflictingTiers(conflicts);
|
|
76
|
-
setPendingDateUpdate(() => updater);
|
|
77
|
-
setShowDateConflictModal(true);
|
|
78
|
-
} else {
|
|
79
|
-
handleSetData(updater);
|
|
80
|
-
const dateErrors = validateEventDates(potentialNewState);
|
|
81
|
-
const hasDateErrors = Object.keys(dateErrors).length > 0;
|
|
82
|
-
if (hasDateErrors) {
|
|
83
|
-
setErrors((prev) => ({
|
|
84
|
-
...prev,
|
|
85
|
-
...dateErrors
|
|
86
|
-
}));
|
|
87
|
-
} else {
|
|
88
|
-
setErrors((prev) => {
|
|
89
|
-
const next = { ...prev };
|
|
90
|
-
delete next.event_start_timestamp;
|
|
91
|
-
delete next.event_end_timestamp;
|
|
92
|
-
delete next.registration_start_timestamp;
|
|
93
|
-
delete next.registration_end_timestamp;
|
|
94
|
-
return next;
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
};
|
|
99
|
-
const handleConfirmDateChange = () => {
|
|
100
|
-
if (pendingDateUpdate) {
|
|
101
|
-
const newState = pendingDateUpdate(formState);
|
|
102
|
-
const updatedTiers = { ...formState.ticket_tiers };
|
|
103
|
-
conflictingTiers.forEach((tier) => {
|
|
104
|
-
delete updatedTiers[tier.id];
|
|
105
|
-
});
|
|
106
|
-
setMultipleFields({
|
|
107
|
-
...newState,
|
|
108
|
-
ticket_tiers: updatedTiers
|
|
109
|
-
});
|
|
110
|
-
setShowDateConflictModal(false);
|
|
111
|
-
setPendingDateUpdate(null);
|
|
112
|
-
setConflictingTiers([]);
|
|
113
|
-
if (errors == null ? void 0 : errors.event_start_timestamp) validateField("event_start_timestamp");
|
|
114
|
-
if (errors == null ? void 0 : errors.event_end_timestamp) validateField("event_end_timestamp");
|
|
115
|
-
if (errors == null ? void 0 : errors.registration_start_timestamp) validateField("registration_start_timestamp");
|
|
116
|
-
if (errors == null ? void 0 : errors.registration_end_timestamp) validateField("registration_end_timestamp");
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col lg:flex-row gap-8 items-start", children: [
|
|
120
|
-
/* @__PURE__ */ jsx("div", { className: "w-full lg:max-w-[40%] max-h-[500px] shrink-0 lg:sticky lg:top-4", children: /* @__PURE__ */ jsxs("div", { children: [
|
|
121
|
-
/* @__PURE__ */ jsx(
|
|
122
|
-
FileUpload,
|
|
123
|
-
{
|
|
124
|
-
formData: formState,
|
|
125
|
-
field: "image_url",
|
|
126
|
-
setFormData: (updater) => {
|
|
127
|
-
handleSetData(updater);
|
|
128
|
-
},
|
|
129
|
-
formErrors: errors,
|
|
130
|
-
setError: (error) => {
|
|
131
|
-
if (error) {
|
|
132
|
-
setErrors((prev) => ({ ...prev, image_url: error }));
|
|
133
|
-
} else {
|
|
134
|
-
setErrors((prev) => {
|
|
135
|
-
const newErrors = { ...prev };
|
|
136
|
-
delete newErrors.image_url;
|
|
137
|
-
return newErrors;
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
onLoadingChange: onBusyStateChange
|
|
142
|
-
}
|
|
143
|
-
),
|
|
144
|
-
/* @__PURE__ */ jsx(
|
|
145
|
-
InputErrorMessage,
|
|
146
|
-
{
|
|
147
|
-
error: isBusy && (errors == null ? void 0 : errors.image_url) ? "Your image is still uploading. Please wait..." : (errors == null ? void 0 : errors.image_url) == "Invalid input: expected string, received undefined" ? "Please upload an image" : errors == null ? void 0 : errors.image_url,
|
|
148
|
-
className: "mt-2"
|
|
149
|
-
}
|
|
150
|
-
)
|
|
151
|
-
] }) }),
|
|
152
|
-
/* @__PURE__ */ jsxs("div", { className: "w-full flex-1 rounded-lg", children: [
|
|
153
|
-
/* @__PURE__ */ jsx("div", { "data-name": "name", className: "px-4 rounded-xl", children: /* @__PURE__ */ jsx(
|
|
154
|
-
FormInput,
|
|
155
|
-
{
|
|
156
|
-
label: "Event name",
|
|
157
|
-
tooltip: "The official name of your event.",
|
|
158
|
-
type: "text",
|
|
159
|
-
placeholder: "Paymo Events",
|
|
160
|
-
value: formState.name || "",
|
|
161
|
-
onChange: (e) => {
|
|
162
|
-
var _a2;
|
|
163
|
-
return setField("name", (_a2 = e.target) == null ? void 0 : _a2.value);
|
|
164
|
-
},
|
|
165
|
-
onBlur: () => validateField("name"),
|
|
166
|
-
error: errors.name,
|
|
167
|
-
inputClassName: "text-[26px] py-2",
|
|
168
|
-
inputCon: "shadow-none rounded-b-none rounded-t-sm",
|
|
169
|
-
className: "px-0",
|
|
170
|
-
required: true
|
|
171
|
-
}
|
|
172
|
-
) }),
|
|
173
|
-
/* @__PURE__ */ jsxs("div", { "data-name": "description", className: "px-4 py-4 rounded-xl", children: [
|
|
174
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center mb-2 gap-x-2", children: [
|
|
175
|
-
/* @__PURE__ */ jsxs("label", { className: "block text-sm font-medium text-gray-700", children: [
|
|
176
|
-
"Write description ",
|
|
177
|
-
/* @__PURE__ */ jsx("span", { className: "text-error-500", children: "*" })
|
|
178
|
-
] }),
|
|
179
|
-
/* @__PURE__ */ jsx(InformationPopover, { text: "A detailed explanation of what your event is about." })
|
|
180
|
-
] }),
|
|
181
|
-
/* @__PURE__ */ jsx(
|
|
182
|
-
"button",
|
|
183
|
-
{
|
|
184
|
-
onClick: () => setIsDescriptionModalOpen(true),
|
|
185
|
-
className: `
|
|
186
|
-
w-full text-left px-3 py-2 rounded-lg text-sm input-border bg-white cursor-pointer transition-colors focus-visible:ring-2 focus-visible:ring-primaryx-500 focus-visible:ring-offset-2 outline-none focus:outline-none
|
|
187
|
-
flex items-center min-h-[44px]
|
|
188
|
-
${errors.description ? "border-error-500 bg-error-50" : "input-border"}
|
|
189
|
-
`,
|
|
190
|
-
children: formState.description ? /* @__PURE__ */ jsx("p", { className: "text-gray-900 line-clamp-2 break-all", children: stripHtml(formState.description) }) : /* @__PURE__ */ jsx("span", { className: "text-gray-400", children: "Tell us about your event.." })
|
|
191
|
-
}
|
|
192
|
-
),
|
|
193
|
-
/* @__PURE__ */ jsx(InputErrorMessage, { error: errors == null ? void 0 : errors.description, className: "mt-2" }),
|
|
194
|
-
/* @__PURE__ */ jsx(
|
|
195
|
-
DescriptionModal,
|
|
196
|
-
{
|
|
197
|
-
isOpen: isDescriptionModalOpen,
|
|
198
|
-
value: (formState == null ? void 0 : formState.description) || "",
|
|
199
|
-
onClose: () => {
|
|
200
|
-
setIsDescriptionModalOpen(false);
|
|
201
|
-
},
|
|
202
|
-
onSave: (val) => {
|
|
203
|
-
setField("description", val);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
)
|
|
207
|
-
] }),
|
|
208
|
-
/* @__PURE__ */ jsx("div", { "data-name": "event_type", className: "px-4 py-4 rounded-xl", children: /* @__PURE__ */ jsx(
|
|
209
|
-
CheckboxGroup,
|
|
210
|
-
{
|
|
211
|
-
label: "Select your event type",
|
|
212
|
-
tooltip: "Choose the type of audience for this event.",
|
|
213
|
-
options: EVENT_TYPE_OPTIONS.map((option) => {
|
|
214
|
-
const selectedEventTypes = formState.event_type || [];
|
|
215
|
-
const isInclusive = selectedEventTypes.includes("INCLUSIVE");
|
|
216
|
-
const isInternal = selectedEventTypes.includes("INTERNAL");
|
|
217
|
-
const isUnlisted = selectedEventTypes.includes("UN_LISTED");
|
|
218
|
-
let disabled = false;
|
|
219
|
-
let tooltip = "";
|
|
220
|
-
if (option.value === "INCLUSIVE") {
|
|
221
|
-
if (isInternal || isUnlisted) {
|
|
222
|
-
disabled = true;
|
|
223
|
-
tooltip = "Events open to everyone cannot be restricted to institution members or be hidden.";
|
|
224
|
-
} else {
|
|
225
|
-
tooltip = "Allows anyone to view and register for the event.";
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
if (option.value === "INTERNAL") {
|
|
229
|
-
if (isInclusive) {
|
|
230
|
-
disabled = true;
|
|
231
|
-
tooltip = "Institution-only events cannot be open to everyone.";
|
|
232
|
-
} else {
|
|
233
|
-
tooltip = "Restricts the event to members of your institution only.";
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
if (option.value === "UN_LISTED") {
|
|
237
|
-
if (isInclusive) {
|
|
238
|
-
disabled = true;
|
|
239
|
-
tooltip = "Hidden events cannot be open to everyone.";
|
|
240
|
-
} else {
|
|
241
|
-
tooltip = "The event will not appear in public listings and is accessible only via link.";
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
if (option.value === "INVITE_ONLY") {
|
|
245
|
-
tooltip = "Every registration will be treated as a request that will be approved by Organizer";
|
|
246
|
-
}
|
|
247
|
-
return { ...option, disabled, tooltip };
|
|
248
|
-
}),
|
|
249
|
-
formData: formState,
|
|
250
|
-
setFormData: (updater) => {
|
|
251
|
-
handleSetData(updater);
|
|
252
|
-
},
|
|
253
|
-
field: "event_type",
|
|
254
|
-
formErrors: errors,
|
|
255
|
-
inputType: "checkbox",
|
|
256
|
-
classname: "flex flex-col gap-y-3",
|
|
257
|
-
filled: false
|
|
258
|
-
}
|
|
259
|
-
) }),
|
|
260
|
-
/* @__PURE__ */ jsx(AnimatePresence, { children: ((_a = formState.event_type) == null ? void 0 : _a.includes("INTERNAL")) && /* @__PURE__ */ jsx(
|
|
261
|
-
motion.div,
|
|
262
|
-
{
|
|
263
|
-
initial: { opacity: 0, height: 0 },
|
|
264
|
-
animate: { opacity: 1, height: "auto" },
|
|
265
|
-
exit: { opacity: 0, height: 0 },
|
|
266
|
-
transition: { duration: 0.2 },
|
|
267
|
-
children: /* @__PURE__ */ jsx("div", { "data-name": "institution_name", className: "px-4 py-4 rounded-xl", children: /* @__PURE__ */ jsx(
|
|
268
|
-
FormInput,
|
|
269
|
-
{
|
|
270
|
-
label: "Institution name",
|
|
271
|
-
placeholder: "Enter institution name",
|
|
272
|
-
value: formState.institution_name || "",
|
|
273
|
-
onChange: (e) => setField("institution_name", e.target.value),
|
|
274
|
-
onBlur: () => validateField("institution_name"),
|
|
275
|
-
error: errors.institution_name,
|
|
276
|
-
type: "text",
|
|
277
|
-
required: true
|
|
278
|
-
}
|
|
279
|
-
) })
|
|
280
|
-
}
|
|
281
|
-
) }),
|
|
282
|
-
/* @__PURE__ */ jsxs("div", { "data-name": "registration_start_timestamp", className: "px-2 py-4 rounded-xl", children: [
|
|
283
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-2 px-2", children: [
|
|
284
|
-
/* @__PURE__ */ jsxs("label", { className: "block text-sm font-medium text-gray-700", children: [
|
|
285
|
-
"Registration timeline ",
|
|
286
|
-
/* @__PURE__ */ jsx("span", { className: "text-meta-1 animate-pulse", children: "*" })
|
|
287
|
-
] }),
|
|
288
|
-
/* @__PURE__ */ jsx(InformationPopover, { text: "Set the start and end dates/times for ticket registrations." })
|
|
289
|
-
] }),
|
|
290
|
-
/* @__PURE__ */ jsx(
|
|
291
|
-
DateTimeField,
|
|
292
|
-
{
|
|
293
|
-
label: "",
|
|
294
|
-
formData: formState,
|
|
295
|
-
setFormData: handleDateUpdate,
|
|
296
|
-
field: ["registration_start_timestamp", "registration_end_timestamp"],
|
|
297
|
-
classname: "bg-transparent",
|
|
298
|
-
formDateErrors: errors,
|
|
299
|
-
startMaxDate: ((_b = formState.event_start_timestamp) == null ? void 0 : _b.date) && ((_c = formState.event_end_timestamp) == null ? void 0 : _c.date) ? formState.event_start_timestamp.date < formState.event_end_timestamp.date ? formState.event_start_timestamp.date : formState.event_end_timestamp.date : ((_d = formState.event_start_timestamp) == null ? void 0 : _d.date) || ((_e = formState.event_end_timestamp) == null ? void 0 : _e.date),
|
|
300
|
-
startMaxTime: ((_f = formState.event_start_timestamp) == null ? void 0 : _f.date) && ((_g = formState.registration_start_timestamp) == null ? void 0 : _g.date) && formState.event_start_timestamp.date === formState.registration_start_timestamp.date ? formState.event_start_timestamp.time : void 0,
|
|
301
|
-
endMaxDate: (_h = formState.event_end_timestamp) == null ? void 0 : _h.date,
|
|
302
|
-
endMaxTime: ((_i = formState.event_end_timestamp) == null ? void 0 : _i.date) && ((_j = formState.registration_end_timestamp) == null ? void 0 : _j.date) && formState.event_end_timestamp.date === formState.registration_end_timestamp.date ? formState.event_end_timestamp.time : void 0
|
|
303
|
-
}
|
|
304
|
-
)
|
|
305
|
-
] }),
|
|
306
|
-
/* @__PURE__ */ jsxs("div", { "data-name": "event_start_timestamp", className: "px-2 py-4 rounded-xl", children: [
|
|
307
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-2 px-2", children: [
|
|
308
|
-
/* @__PURE__ */ jsxs("label", { className: "block text-sm font-medium text-gray-700", children: [
|
|
309
|
-
"Event timeline ",
|
|
310
|
-
/* @__PURE__ */ jsx("span", { className: "text-meta-1 animate-pulse", children: "*" })
|
|
311
|
-
] }),
|
|
312
|
-
/* @__PURE__ */ jsx(InformationPopover, { text: "Set the start and end dates/times for your event." })
|
|
313
|
-
] }),
|
|
314
|
-
/* @__PURE__ */ jsx(
|
|
315
|
-
DateTimeField,
|
|
316
|
-
{
|
|
317
|
-
label: "",
|
|
318
|
-
formData: formState,
|
|
319
|
-
setFormData: handleDateUpdate,
|
|
320
|
-
field: ["event_start_timestamp", "event_end_timestamp"],
|
|
321
|
-
classname: "bg-transparent",
|
|
322
|
-
formDateErrors: errors,
|
|
323
|
-
startMinDate: (_k = formState.registration_start_timestamp) == null ? void 0 : _k.date,
|
|
324
|
-
startMinTime: ((_l = formState.registration_start_timestamp) == null ? void 0 : _l.date) && ((_m = formState.event_start_timestamp) == null ? void 0 : _m.date) && formState.registration_start_timestamp.date === formState.event_start_timestamp.date ? formState.registration_start_timestamp.time : void 0,
|
|
325
|
-
endMinDate: ((_n = formState.registration_start_timestamp) == null ? void 0 : _n.date) && ((_o = formState.registration_end_timestamp) == null ? void 0 : _o.date) ? formState.registration_start_timestamp.date > formState.registration_end_timestamp.date ? formState.registration_start_timestamp.date : formState.registration_end_timestamp.date : ((_p = formState.registration_end_timestamp) == null ? void 0 : _p.date) || ((_q = formState.registration_start_timestamp) == null ? void 0 : _q.date),
|
|
326
|
-
endMinTime: ((_r = formState.registration_end_timestamp) == null ? void 0 : _r.date) && ((_s = formState.event_end_timestamp) == null ? void 0 : _s.date) && formState.registration_end_timestamp.date === formState.event_end_timestamp.date ? formState.registration_end_timestamp.time : void 0
|
|
327
|
-
}
|
|
328
|
-
)
|
|
329
|
-
] }),
|
|
330
|
-
/* @__PURE__ */ jsxs("div", { "data-name": "location_type", className: "px-4 py-4 rounded-xl", children: [
|
|
331
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-x-2 mb-2", children: [
|
|
332
|
-
/* @__PURE__ */ jsxs("label", { className: "block text-sm font-medium text-gray-700", children: [
|
|
333
|
-
"Venue ",
|
|
334
|
-
/* @__PURE__ */ jsx("span", { className: "text-meta-1 animate-pulse", children: "*" })
|
|
335
|
-
] }),
|
|
336
|
-
/* @__PURE__ */ jsx(InformationPopover, { text: "The place where the event will be conducted." })
|
|
337
|
-
] }),
|
|
338
|
-
/* @__PURE__ */ jsx(
|
|
339
|
-
GenericLocationInput,
|
|
340
|
-
{
|
|
341
|
-
googleApiKey: process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY,
|
|
342
|
-
enableGoogleMeet: false,
|
|
343
|
-
enableCustomLinks: true,
|
|
344
|
-
enablePhysicalLocation: true,
|
|
345
|
-
error: (errors.location_data || errors.venue || errors.location_type) && "Please select a venue / location",
|
|
346
|
-
onLocationSelected: (location) => {
|
|
347
|
-
setMultipleFields({
|
|
348
|
-
venue: (location == null ? void 0 : location.displayName) || "",
|
|
349
|
-
venue_place_id: (location == null ? void 0 : location.placeId) || "",
|
|
350
|
-
location_data: location,
|
|
351
|
-
// Fix stale data
|
|
352
|
-
location_type: location == null ? void 0 : location.type
|
|
353
|
-
});
|
|
354
|
-
if (location) {
|
|
355
|
-
setErrors((prev) => {
|
|
356
|
-
const newErrors = { ...prev };
|
|
357
|
-
delete newErrors.venue;
|
|
358
|
-
delete newErrors.location_data;
|
|
359
|
-
delete newErrors.location_type;
|
|
360
|
-
return newErrors;
|
|
361
|
-
});
|
|
362
|
-
} else {
|
|
363
|
-
setErrors((prev) => ({
|
|
364
|
-
...prev,
|
|
365
|
-
venue: "Location is required"
|
|
366
|
-
}));
|
|
367
|
-
}
|
|
368
|
-
},
|
|
369
|
-
formData: formState,
|
|
370
|
-
label: "",
|
|
371
|
-
placeholder: "Search for a location or add meeting details..."
|
|
372
|
-
}
|
|
373
|
-
)
|
|
374
|
-
] }),
|
|
375
|
-
/* @__PURE__ */ jsxs("div", { "data-name": "event_categories", className: "px-4 py-4 rounded-xl", children: [
|
|
376
|
-
/* @__PURE__ */ jsx(
|
|
377
|
-
CheckboxGroup,
|
|
378
|
-
{
|
|
379
|
-
label: "Select event category",
|
|
380
|
-
tooltip: "Select the category that best describes your event.",
|
|
381
|
-
options: (() => {
|
|
382
|
-
const dynamicOptions = categories.map((cat) => ({
|
|
383
|
-
value: cat.id,
|
|
384
|
-
label: cat.name,
|
|
385
|
-
disabled: false
|
|
386
|
-
}));
|
|
387
|
-
return dynamicOptions;
|
|
388
|
-
})(),
|
|
389
|
-
formData: formState,
|
|
390
|
-
setFormData: (updater) => {
|
|
391
|
-
handleSetData(updater);
|
|
392
|
-
},
|
|
393
|
-
field: "event_categories",
|
|
394
|
-
formErrors: errors,
|
|
395
|
-
inputType: "checkbox",
|
|
396
|
-
classname: "grid grid-cols-1 sm:grid-cols-2 gap-4",
|
|
397
|
-
filled: false
|
|
398
|
-
}
|
|
399
|
-
),
|
|
400
|
-
/* @__PURE__ */ jsx(AnimatePresence, { children: (() => {
|
|
401
|
-
var _a2;
|
|
402
|
-
const othersCategory = categories.find((cat) => cat.name === "Others");
|
|
403
|
-
const othersCategoryId = othersCategory == null ? void 0 : othersCategory.id;
|
|
404
|
-
return ((_a2 = formState.event_categories) == null ? void 0 : _a2.includes(othersCategoryId)) && /* @__PURE__ */ jsx(
|
|
405
|
-
motion.div,
|
|
406
|
-
{
|
|
407
|
-
initial: { height: 0, opacity: 0, marginTop: 0 },
|
|
408
|
-
animate: { height: "auto", opacity: 1, marginTop: 16 },
|
|
409
|
-
exit: { height: 0, opacity: 0, marginTop: 0 },
|
|
410
|
-
transition: { duration: 0.3, ease: "easeInOut" },
|
|
411
|
-
children: /* @__PURE__ */ jsx(
|
|
412
|
-
FormInput,
|
|
413
|
-
{
|
|
414
|
-
label: "Please specify",
|
|
415
|
-
type: "text",
|
|
416
|
-
placeholder: "e.g. Charity gala, Reunion, etc.",
|
|
417
|
-
value: formState.custom_category || "",
|
|
418
|
-
onChange: (e) => setField("custom_category", e.target.value),
|
|
419
|
-
onBlur: () => validateField("custom_category"),
|
|
420
|
-
error: errors.custom_category
|
|
421
|
-
}
|
|
422
|
-
)
|
|
423
|
-
}
|
|
424
|
-
);
|
|
425
|
-
})() })
|
|
426
|
-
] })
|
|
427
|
-
] }),
|
|
428
|
-
/* @__PURE__ */ jsx(
|
|
429
|
-
ConfirmationModal,
|
|
430
|
-
{
|
|
431
|
-
open: showDateConflictModal,
|
|
432
|
-
title: "Date conflict detected",
|
|
433
|
-
description: `Changing the event dates will invalidate the following ticket tier(s) because their custom dates fall outside the new range. Proceeding will permanently delete them.`,
|
|
434
|
-
onClose: () => {
|
|
435
|
-
setShowDateConflictModal(false);
|
|
436
|
-
setTimeout(() => {
|
|
437
|
-
setPendingDateUpdate(null);
|
|
438
|
-
setConflictingTiers([]);
|
|
439
|
-
}, 300);
|
|
440
|
-
},
|
|
441
|
-
onConfirm: handleConfirmDateChange,
|
|
442
|
-
confirmText: "Update & delete tiers",
|
|
443
|
-
cancelText: "Cancel",
|
|
444
|
-
children: /* @__PURE__ */ jsx("div", { className: "space-y-3 mt-4 border-t border-grey-100 pt-4 max-h-[200px] overflow-y-auto pr-2", children: conflictingTiers.map((tier) => /* @__PURE__ */ jsxs("div", { className: "bg-error-50 border border-error-200 rounded-lg p-3", children: [
|
|
445
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-baseline justify-between mb-1", children: [
|
|
446
|
-
/* @__PURE__ */ jsx("h4", { className: "text-sm font-semibold text-error-900 truncate pr-4", children: tier.name }),
|
|
447
|
-
/* @__PURE__ */ jsxs("span", { className: "text-sm font-bold text-error-700 whitespace-nowrap", children: [
|
|
448
|
-
"Rs. ",
|
|
449
|
-
tier.price.toLocaleString()
|
|
450
|
-
] })
|
|
451
|
-
] }),
|
|
452
|
-
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-3 text-xs text-error-600/80", children: /* @__PURE__ */ jsx("p", { className: "line-clamp-1", children: tier.description }) })
|
|
453
|
-
] }, tier.id)) })
|
|
454
|
-
}
|
|
455
|
-
)
|
|
456
|
-
] });
|
|
457
|
-
}
|
|
458
|
-
const StepOne$1 = memo(StepOne);
|
|
459
|
-
export {
|
|
460
|
-
StepOne$1 as default
|
|
461
|
-
};
|
|
462
|
-
//# sourceMappingURL=StepOne.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StepOne.js","sources":["../../../../src/components/EventAddForm/steps/StepOne.tsx"],"sourcesContent":["import React, { memo, useState } from 'react';\r\nimport { AnimatePresence, motion } from 'framer-motion';\r\nimport { StepperFormState } from '../types';\r\nimport FileUpload from '@/components/EventAddForm/components/FileUpload';\r\nimport FormInput from '@/components/ui/FormInput'; // Reusing established Input\r\nimport DescriptionModal from '../common/DescriptionModal';\r\nimport CheckboxGroup from '@/components/EventAddForm/components/CheckboxGroup'; // For Categories and Event type\r\nimport DateTimeField from '@/components/EventAddForm/components/DateTimeField';\r\nimport { GenericLocationInput } from '@/components/EventAddForm/components/GoogleMapsAutocompleteInput';\r\nimport { validateEventDates } from '../schemas/step1';\r\nimport InformationPopover from '../../InformationPopover';\r\nimport { TicketTier, TicketTierAvailabilityType } from '@/types/types';\r\nimport ConfirmationModal from '../common/ConfirmationModal';\r\nimport { useGetEventCategoriesQuery } from '@/services/single-event-api';\r\nimport Image from 'next/image';\r\nimport InputErrorMessage from '@/components/ui/InputErrorMessage';\r\n\r\n// Options for Event type\r\nconst EVENT_TYPE_OPTIONS = [\r\n { value: 'INCLUSIVE', label: 'Open for all', disabled: false },\r\n { value: 'INTERNAL', label: 'Institution only', disabled: false },\r\n { value: 'INVITE_ONLY', label: 'Invite only', disabled: false },\r\n { value: 'UN_LISTED', label: 'Hidden (link only)', disabled: false },\r\n];\r\n\r\n// Options for Event Categories\r\n// const CATEGORY_OPTIONS = [\r\n// { value: 'Music & Concerts', disabled: false },\r\n// { value: 'Arts & Culture', disabled: false },\r\n// { value: 'Campus Events', disabled: false },\r\n// { value: 'Workshops & Classes', disabled: false },\r\n// { value: 'Conferences & Seminars', disabled: false },\r\n// { value: 'Comedy & Entertainment', disabled: false },\r\n// { value: 'Startup & Entrepreneurship', disabled: false },\r\n// { value: 'Sports & Fitness', disabled: false },\r\n// { value: 'Food & Drink', disabled: false },\r\n// ];\r\n\r\ninterface StepOneProps {\r\n formState: StepperFormState;\r\n setField: (field: keyof StepperFormState, value: any) => void;\r\n setMultipleFields: (fields: Partial<StepperFormState> | ((prev: StepperFormState) => Partial<StepperFormState>)) => void;\r\n errors: Record<string, string>;\r\n validateField: (field: keyof StepperFormState, data?: StepperFormState) => void;\r\n setErrors: React.Dispatch<React.SetStateAction<Record<string, string>>>;\r\n eventData?: any;\r\n eventId?: string;\r\n onBusyStateChange?: (isBusy: boolean) => void;\r\n isBusy?: boolean;\r\n}\r\n\r\nfunction StepOne({ formState, setField, setMultipleFields, errors, validateField, setErrors, onBusyStateChange, isBusy }: StepOneProps) {\r\n const { data: categories = [] } = useGetEventCategoriesQuery();\r\n const [isDescriptionModalOpen, setIsDescriptionModalOpen] = useState(false);\r\n\r\n // Pre-load React Quill\r\n React.useEffect(() => {\r\n import('react-quill-new')\r\n }, []);\r\n\r\n // State for Date Change Confirmation\r\n const [showDateConflictModal, setShowDateConflictModal] = useState(false);\r\n const [pendingDateUpdate, setPendingDateUpdate] = useState<((prev: any) => any) | null>(null);\r\n const [conflictingTiers, setConflictingTiers] = useState<TicketTier[]>([]);\r\n\r\n const stripHtml = (html: string) => {\r\n const doc = new DOMParser().parseFromString(html, 'text/html');\r\n return doc.body.textContent || \"\";\r\n };\r\n\r\n const handleSetData = (updater: (prev: any) => any) => {\r\n setMultipleFields((prev) => {\r\n const newData = updater(prev);\r\n\r\n // Clear custom_category if \"Others\" is deselected\r\n const othersCategory = categories.find((cat: any) => cat.name === 'Others');\r\n if (othersCategory && newData.event_categories && !newData.event_categories.includes(othersCategory.id)) {\r\n delete newData.custom_category;\r\n }\r\n\r\n return newData;\r\n });\r\n };\r\n\r\n const checkTierConflicts = (potentialNewState: any) => {\r\n if (!potentialNewState.ticket_tiers) return [];\r\n\r\n const tiers = Object.values(potentialNewState.ticket_tiers) as TicketTier[];\r\n const conflicts: TicketTier[] = [];\r\n\r\n // Registration timeline is the strict boundary for ticket sales. Fallback to event timeline if not set.\r\n const startDate = potentialNewState.registration_start_timestamp?.date || potentialNewState.event_start_timestamp?.date;\r\n const endDate = potentialNewState.registration_end_timestamp?.date || potentialNewState.event_end_timestamp?.date;\r\n\r\n if (!startDate || !endDate) return [];\r\n\r\n tiers.forEach(tier => {\r\n if ((tier.availability_type as any) === TicketTierAvailabilityType.CUSTOM && tier.availability_schedule) {\r\n const hasInvalidDates = tier.availability_schedule.some((dateKey: string) => {\r\n return dateKey < startDate || dateKey > endDate;\r\n });\r\n if (hasInvalidDates) {\r\n conflicts.push(tier);\r\n }\r\n }\r\n });\r\n\r\n return conflicts;\r\n };\r\n\r\n const handleDateUpdate = (updater: (prev: any) => any) => {\r\n const potentialNewState = updater(formState);\r\n\r\n // Check if dates actually changed to prevent premature conflict modal on mount/normalization\r\n const datesChanged =\r\n JSON.stringify(potentialNewState.event_start_timestamp) !== JSON.stringify(formState.event_start_timestamp) ||\r\n JSON.stringify(potentialNewState.event_end_timestamp) !== JSON.stringify(formState.event_end_timestamp) ||\r\n JSON.stringify(potentialNewState.registration_start_timestamp) !== JSON.stringify(formState.registration_start_timestamp) ||\r\n JSON.stringify(potentialNewState.registration_end_timestamp) !== JSON.stringify(formState.registration_end_timestamp);\r\n\r\n if (!datesChanged) {\r\n handleSetData(updater);\r\n return;\r\n }\r\n\r\n const conflicts = checkTierConflicts(potentialNewState);\r\n\r\n if (conflicts.length > 0) {\r\n setConflictingTiers(conflicts);\r\n setPendingDateUpdate(() => updater); // Store the updater function\r\n setShowDateConflictModal(true);\r\n } else {\r\n // Safe to update\r\n handleSetData(updater);\r\n\r\n // Dynamic Date Validation using adaptive function\r\n const dateErrors = validateEventDates(potentialNewState);\r\n const hasDateErrors = Object.keys(dateErrors).length > 0;\r\n\r\n if (hasDateErrors) {\r\n setErrors(prev => ({\r\n ...prev,\r\n ...dateErrors\r\n }));\r\n } else {\r\n setErrors(prev => {\r\n const next = { ...prev };\r\n delete next.event_start_timestamp;\r\n delete next.event_end_timestamp;\r\n delete next.registration_start_timestamp;\r\n delete next.registration_end_timestamp;\r\n return next;\r\n });\r\n }\r\n }\r\n };\r\n\r\n const handleConfirmDateChange = () => {\r\n if (pendingDateUpdate) {\r\n // Apply the date update\r\n const newState = pendingDateUpdate(formState); // Calculate new state again or rely on closure if safe, but here we used updater pattern\r\n\r\n // Remove conflicting tiers\r\n const updatedTiers = { ...formState.ticket_tiers };\r\n conflictingTiers.forEach(tier => {\r\n delete updatedTiers[tier.id];\r\n });\r\n\r\n // Update both dates and tiers\r\n setMultipleFields({\r\n ...newState,\r\n ticket_tiers: updatedTiers\r\n });\r\n\r\n // Reset\r\n setShowDateConflictModal(false);\r\n setPendingDateUpdate(null);\r\n setConflictingTiers([]);\r\n\r\n // Validate\r\n if (errors?.event_start_timestamp) validateField('event_start_timestamp');\r\n if (errors?.event_end_timestamp) validateField('event_end_timestamp');\r\n if (errors?.registration_start_timestamp) validateField('registration_start_timestamp');\r\n if (errors?.registration_end_timestamp) validateField('registration_end_timestamp');\r\n }\r\n };\r\n\r\n return (\r\n <div className=\"flex flex-col lg:flex-row gap-8 items-start\">\r\n <div className=\"w-full lg:max-w-[40%] max-h-[500px] shrink-0 lg:sticky lg:top-4\">\r\n <div>\r\n <FileUpload\r\n formData={formState}\r\n field=\"image_url\"\r\n setFormData={(updater: any) => {\r\n handleSetData(updater);\r\n }}\r\n formErrors={errors}\r\n setError={(error) => {\r\n if (error) {\r\n setErrors(prev => ({ ...prev, image_url: error }));\r\n } else {\r\n setErrors(prev => {\r\n const newErrors = { ...prev };\r\n delete newErrors.image_url;\r\n return newErrors;\r\n });\r\n }\r\n }}\r\n onLoadingChange={onBusyStateChange}\r\n />\r\n <InputErrorMessage\r\n error={isBusy && errors?.image_url ? \"Your image is still uploading. Please wait...\" : (errors?.image_url == \"Invalid input: expected string, received undefined\" ? \"Please upload an image\" : errors?.image_url)}\r\n className=\"mt-2\"\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"w-full flex-1 rounded-lg\">\r\n <div data-name=\"name\" className='px-4 rounded-xl'>\r\n <FormInput\r\n label=\"Event name\"\r\n tooltip=\"The official name of your event.\"\r\n type=\"text\"\r\n placeholder=\"Paymo Events\"\r\n value={formState.name || ''}\r\n onChange={(e: any) => setField('name', e.target?.value)}\r\n onBlur={() => validateField('name')}\r\n error={errors.name}\r\n inputClassName='text-[26px] py-2'\r\n inputCon='shadow-none rounded-b-none rounded-t-sm'\r\n className='px-0'\r\n required\r\n />\r\n </div>\r\n\r\n <div data-name=\"description\" className='px-4 py-4 rounded-xl'>\r\n <div className=\"flex items-center mb-2 gap-x-2\">\r\n <label className=\"block text-sm font-medium text-gray-700\">\r\n Write description <span className=\"text-error-500\">*</span>\r\n </label>\r\n <InformationPopover text=\"A detailed explanation of what your event is about.\" />\r\n </div>\r\n <button\r\n onClick={() => setIsDescriptionModalOpen(true)}\r\n className={`\r\n w-full text-left px-3 py-2 rounded-lg text-sm input-border bg-white cursor-pointer transition-colors focus-visible:ring-2 focus-visible:ring-primaryx-500 focus-visible:ring-offset-2 outline-none focus:outline-none\r\n flex items-center min-h-[44px]\r\n ${errors.description ? 'border-error-500 bg-error-50' : 'input-border'}\r\n `}\r\n >\r\n {formState.description ? (\r\n <p className=\"text-gray-900 line-clamp-2 break-all\">{stripHtml(formState.description)}</p>\r\n ) : (\r\n <span className=\"text-gray-400\">Tell us about your event..</span>\r\n )}\r\n </button>\r\n <InputErrorMessage error={errors?.description} className=\"mt-2\" />\r\n\r\n\r\n <DescriptionModal\r\n isOpen={isDescriptionModalOpen}\r\n value={formState?.description || ''}\r\n onClose={() => {\r\n setIsDescriptionModalOpen(false);\r\n }}\r\n onSave={(val) => {\r\n setField('description', val);\r\n }}\r\n\r\n />\r\n </div>\r\n\r\n <div data-name=\"event_type\" className=\"px-4 py-4 rounded-xl\">\r\n <CheckboxGroup\r\n label=\"Select your event type\"\r\n tooltip=\"Choose the type of audience for this event.\"\r\n options={EVENT_TYPE_OPTIONS.map(option => {\r\n const selectedEventTypes = formState.event_type || [];\r\n const isInclusive = selectedEventTypes.includes('INCLUSIVE');\r\n const isInternal = selectedEventTypes.includes('INTERNAL');\r\n const isUnlisted = selectedEventTypes.includes('UN_LISTED');\r\n\r\n let disabled = false;\r\n\r\n // \"INCLUSIVE\" is mutually exclusive with \"INTERNAL\" and \"UN_LISTED\"\r\n let tooltip = \"\";\r\n if (option.value === 'INCLUSIVE') {\r\n if (isInternal || isUnlisted) {\r\n disabled = true;\r\n tooltip = \"Events open to everyone cannot be restricted to institution members or be hidden.\";\r\n } else {\r\n tooltip = \"Allows anyone to view and register for the event.\";\r\n }\r\n }\r\n if (option.value === 'INTERNAL') {\r\n if (isInclusive) {\r\n disabled = true;\r\n tooltip = \"Institution-only events cannot be open to everyone.\";\r\n } else {\r\n tooltip = \"Restricts the event to members of your institution only.\";\r\n }\r\n }\r\n if (option.value === 'UN_LISTED') {\r\n if (isInclusive) {\r\n disabled = true;\r\n tooltip = \"Hidden events cannot be open to everyone.\";\r\n } else {\r\n tooltip = \"The event will not appear in public listings and is accessible only via link.\";\r\n }\r\n }\r\n if (option.value === 'INVITE_ONLY') {\r\n tooltip = \"Every registration will be treated as a request that will be approved by Organizer\";\r\n }\r\n\r\n return { ...option, disabled, tooltip };\r\n })}\r\n formData={formState}\r\n setFormData={(updater: any) => {\r\n handleSetData(updater);\r\n }}\r\n field=\"event_type\"\r\n formErrors={errors}\r\n inputType=\"checkbox\"\r\n classname=\"flex flex-col gap-y-3\"\r\n filled={false}\r\n />\r\n </div>\r\n\r\n {/* Conditional Institution Name Input */}\r\n <AnimatePresence>\r\n {formState.event_type?.includes('INTERNAL') && (\r\n <motion.div\r\n initial={{ opacity: 0, height: 0 }}\r\n animate={{ opacity: 1, height: \"auto\" }}\r\n exit={{ opacity: 0, height: 0 }}\r\n transition={{ duration: 0.2 }}\r\n >\r\n <div data-name=\"institution_name\" className=\"px-4 py-4 rounded-xl\">\r\n <FormInput\r\n label=\"Institution name\"\r\n placeholder=\"Enter institution name\"\r\n value={formState.institution_name || \"\"}\r\n onChange={(e: any) => setField(\"institution_name\", e.target.value)}\r\n onBlur={() => validateField(\"institution_name\")}\r\n error={errors.institution_name}\r\n type=\"text\"\r\n required\r\n />\r\n </div>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n\r\n <div data-name=\"registration_start_timestamp\" className='px-2 py-4 rounded-xl'>\r\n <div className=\"flex items-center gap-x-2 px-2\">\r\n <label className=\"block text-sm font-medium text-gray-700\">\r\n Registration timeline <span className=\"text-meta-1 animate-pulse\">*</span>\r\n </label>\r\n <InformationPopover text=\"Set the start and end dates/times for ticket registrations.\" />\r\n </div>\r\n <DateTimeField\r\n label=\"\"\r\n formData={formState}\r\n setFormData={handleDateUpdate}\r\n field={['registration_start_timestamp', 'registration_end_timestamp']}\r\n classname=\"bg-transparent\"\r\n formDateErrors={errors}\r\n startMaxDate={\r\n (formState.event_start_timestamp?.date && formState.event_end_timestamp?.date)\r\n ? (formState.event_start_timestamp.date < formState.event_end_timestamp.date ? formState.event_start_timestamp.date : formState.event_end_timestamp.date)\r\n : (formState.event_start_timestamp?.date || formState.event_end_timestamp?.date)\r\n }\r\n startMaxTime={\r\n formState.event_start_timestamp?.date && formState.registration_start_timestamp?.date && formState.event_start_timestamp.date === formState.registration_start_timestamp.date\r\n ? formState.event_start_timestamp.time\r\n : undefined\r\n }\r\n endMaxDate={formState.event_end_timestamp?.date}\r\n endMaxTime={\r\n formState.event_end_timestamp?.date && formState.registration_end_timestamp?.date && formState.event_end_timestamp.date === formState.registration_end_timestamp.date\r\n ? formState.event_end_timestamp.time\r\n : undefined\r\n }\r\n />\r\n </div>\r\n\r\n <div data-name=\"event_start_timestamp\" className='px-2 py-4 rounded-xl'>\r\n <div className=\"flex items-center gap-x-2 px-2\">\r\n <label className=\"block text-sm font-medium text-gray-700\">\r\n Event timeline <span className=\"text-meta-1 animate-pulse\">*</span>\r\n </label>\r\n <InformationPopover text=\"Set the start and end dates/times for your event.\" />\r\n </div>\r\n <DateTimeField\r\n label=\"\"\r\n formData={formState}\r\n setFormData={handleDateUpdate}\r\n field={['event_start_timestamp', 'event_end_timestamp']}\r\n classname=\"bg-transparent\"\r\n formDateErrors={errors}\r\n startMinDate={formState.registration_start_timestamp?.date}\r\n startMinTime={\r\n formState.registration_start_timestamp?.date && formState.event_start_timestamp?.date && formState.registration_start_timestamp.date === formState.event_start_timestamp.date\r\n ? formState.registration_start_timestamp.time\r\n : undefined\r\n }\r\n endMinDate={\r\n (formState.registration_start_timestamp?.date && formState.registration_end_timestamp?.date)\r\n ? (formState.registration_start_timestamp.date > formState.registration_end_timestamp.date ? formState.registration_start_timestamp.date : formState.registration_end_timestamp.date)\r\n : (formState.registration_end_timestamp?.date || formState.registration_start_timestamp?.date)\r\n }\r\n endMinTime={\r\n formState.registration_end_timestamp?.date && formState.event_end_timestamp?.date && formState.registration_end_timestamp.date === formState.event_end_timestamp.date\r\n ? formState.registration_end_timestamp.time\r\n : undefined\r\n }\r\n />\r\n </div>\r\n\r\n <div data-name=\"location_type\" className='px-4 py-4 rounded-xl'>\r\n <div className=\"flex items-center gap-x-2 mb-2\">\r\n <label className=\"block text-sm font-medium text-gray-700\">\r\n Venue <span className=\"text-meta-1 animate-pulse\">*</span>\r\n </label>\r\n <InformationPopover text=\"The place where the event will be conducted.\" />\r\n </div>\r\n <GenericLocationInput\r\n googleApiKey={process.env.NEXT_PUBLIC_GOOGLE_MAPS_API_KEY as string}\r\n enableGoogleMeet={false}\r\n enableCustomLinks={true}\r\n enablePhysicalLocation={true}\r\n error={(errors.location_data as string || errors.venue || errors.location_type) && \"Please select a venue / location\"}\r\n onLocationSelected={(location) => {\r\n setMultipleFields({\r\n venue: location?.displayName || \"\",\r\n venue_place_id: location?.placeId || \"\",\r\n location_data: location, // Fix stale data\r\n location_type: location?.type\r\n });\r\n\r\n if (location) {\r\n // Immediately clear all location-related errors\r\n setErrors((prev) => {\r\n const newErrors = { ...prev };\r\n delete newErrors.venue;\r\n delete newErrors.location_data;\r\n delete newErrors.location_type;\r\n return newErrors;\r\n });\r\n } else {\r\n // immediate feedback for clear\r\n setErrors((prev) => ({\r\n ...prev,\r\n venue: \"Location is required\"\r\n }));\r\n }\r\n }}\r\n formData={formState}\r\n label=\"\"\r\n placeholder=\"Search for a location or add meeting details...\"\r\n />\r\n </div>\r\n\r\n <div data-name=\"event_categories\" className=\"px-4 py-4 rounded-xl\">\r\n <CheckboxGroup\r\n label=\"Select event category\"\r\n tooltip=\"Select the category that best describes your event.\"\r\n options={(() => {\r\n // Map fetched categories to options\r\n const dynamicOptions = categories.map((cat: any) => ({\r\n value: cat.id,\r\n label: cat.name,\r\n disabled: false\r\n }));\r\n return dynamicOptions;\r\n })()}\r\n formData={formState}\r\n setFormData={(updater: any) => {\r\n handleSetData(updater);\r\n }}\r\n field=\"event_categories\"\r\n formErrors={errors}\r\n inputType=\"checkbox\"\r\n classname=\"grid grid-cols-1 sm:grid-cols-2 gap-4\"\r\n filled={false}\r\n />\r\n\r\n <AnimatePresence>\r\n {(() => {\r\n const othersCategory = categories.find((cat: any) => cat.name === 'Others');\r\n const othersCategoryId = othersCategory?.id;\r\n\r\n return formState.event_categories?.includes(othersCategoryId) && (\r\n <motion.div\r\n initial={{ height: 0, opacity: 0, marginTop: 0 }}\r\n animate={{ height: 'auto', opacity: 1, marginTop: 16 }}\r\n exit={{ height: 0, opacity: 0, marginTop: 0 }}\r\n transition={{ duration: 0.3, ease: 'easeInOut' }}\r\n >\r\n <FormInput\r\n label=\"Please specify\"\r\n type=\"text\"\r\n placeholder=\"e.g. Charity gala, Reunion, etc.\"\r\n value={formState.custom_category || ''}\r\n onChange={(e: any) => setField('custom_category', e.target.value)}\r\n onBlur={() => validateField('custom_category')}\r\n error={errors.custom_category}\r\n />\r\n </motion.div>\r\n )\r\n })()}\r\n </AnimatePresence>\r\n </div>\r\n </div>\r\n\r\n <ConfirmationModal\r\n open={showDateConflictModal}\r\n title=\"Date conflict detected\"\r\n description={`Changing the event dates will invalidate the following ticket tier(s) because their custom dates fall outside the new range. Proceeding will permanently delete them.`}\r\n onClose={() => {\r\n setShowDateConflictModal(false);\r\n setTimeout(() => {\r\n setPendingDateUpdate(null);\r\n setConflictingTiers([]);\r\n }, 300); // 300ms matches standard transition duration\r\n }}\r\n onConfirm={handleConfirmDateChange}\r\n confirmText=\"Update & delete tiers\"\r\n cancelText=\"Cancel\"\r\n >\r\n <div className=\"space-y-3 mt-4 border-t border-grey-100 pt-4 max-h-[200px] overflow-y-auto pr-2\">\r\n {conflictingTiers.map(tier => (\r\n <div key={tier.id} className=\"bg-error-50 border border-error-200 rounded-lg p-3\">\r\n <div className=\"flex items-baseline justify-between mb-1\">\r\n <h4 className=\"text-sm font-semibold text-error-900 truncate pr-4\">{tier.name}</h4>\r\n <span className=\"text-sm font-bold text-error-700 whitespace-nowrap\">Rs. {tier.price.toLocaleString()}</span>\r\n </div>\r\n <div className=\"flex items-center gap-3 text-xs text-error-600/80\">\r\n <p className=\"line-clamp-1\">{tier.description}</p>\r\n </div>\r\n </div>\r\n ))}\r\n </div>\r\n </ConfirmationModal>\r\n </div>\r\n );\r\n}\r\n\r\nexport default memo(StepOne);\r\n"],"names":["React","_a","_b","_c","_d"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,qBAAqB;AAAA,EACvB,EAAE,OAAO,aAAa,OAAO,gBAAgB,UAAU,MAAA;AAAA,EACvD,EAAE,OAAO,YAAY,OAAO,oBAAoB,UAAU,MAAA;AAAA,EAC1D,EAAE,OAAO,eAAe,OAAO,eAAe,UAAU,MAAA;AAAA,EACxD,EAAE,OAAO,aAAa,OAAO,sBAAsB,UAAU,MAAA;AACjE;AA4BA,SAAS,QAAQ,EAAE,WAAW,UAAU,mBAAmB,QAAQ,eAAe,WAAW,mBAAmB,UAAwB;;AACpI,QAAM,EAAE,MAAM,aAAa,CAAA,EAAC,IAAM,2BAAA;AAClC,QAAM,CAAC,wBAAwB,yBAAyB,IAAI,SAAS,KAAK;AAG1EA,iBAAM,UAAU,MAAM;AAClB,WAAO,iBAAiB;AAAA,EAC5B,GAAG,CAAA,CAAE;AAGL,QAAM,CAAC,uBAAuB,wBAAwB,IAAI,SAAS,KAAK;AACxE,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAsC,IAAI;AAC5F,QAAM,CAAC,kBAAkB,mBAAmB,IAAI,SAAuB,CAAA,CAAE;AAEzE,QAAM,YAAY,CAAC,SAAiB;AAChC,UAAM,MAAM,IAAI,UAAA,EAAY,gBAAgB,MAAM,WAAW;AAC7D,WAAO,IAAI,KAAK,eAAe;AAAA,EACnC;AAEA,QAAM,gBAAgB,CAAC,YAAgC;AACnD,sBAAkB,CAAC,SAAS;AACxB,YAAM,UAAU,QAAQ,IAAI;AAG5B,YAAM,iBAAiB,WAAW,KAAK,CAAC,QAAa,IAAI,SAAS,QAAQ;AAC1E,UAAI,kBAAkB,QAAQ,oBAAoB,CAAC,QAAQ,iBAAiB,SAAS,eAAe,EAAE,GAAG;AACrG,eAAO,QAAQ;AAAA,MACnB;AAEA,aAAO;AAAA,IACX,CAAC;AAAA,EACL;AAEA,QAAM,qBAAqB,CAAC,sBAA2B;;AACnD,QAAI,CAAC,kBAAkB,aAAc,QAAO,CAAA;AAE5C,UAAM,QAAQ,OAAO,OAAO,kBAAkB,YAAY;AAC1D,UAAM,YAA0B,CAAA;AAGhC,UAAM,cAAYC,MAAA,kBAAkB,iCAAlB,gBAAAA,IAAgD,WAAQC,MAAA,kBAAkB,0BAAlB,gBAAAA,IAAyC;AACnH,UAAM,YAAUC,MAAA,kBAAkB,+BAAlB,gBAAAA,IAA8C,WAAQC,MAAA,kBAAkB,wBAAlB,gBAAAA,IAAuC;AAE7G,QAAI,CAAC,aAAa,CAAC,gBAAgB,CAAA;AAEnC,UAAM,QAAQ,CAAA,SAAQ;AAClB,UAAK,KAAK,sBAA8B,2BAA2B,UAAU,KAAK,uBAAuB;AACrG,cAAM,kBAAkB,KAAK,sBAAsB,KAAK,CAAC,YAAoB;AACzE,iBAAO,UAAU,aAAa,UAAU;AAAA,QAC5C,CAAC;AACD,YAAI,iBAAiB;AACjB,oBAAU,KAAK,IAAI;AAAA,QACvB;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,WAAO;AAAA,EACX;AAEA,QAAM,mBAAmB,CAAC,YAAgC;AACtD,UAAM,oBAAoB,QAAQ,SAAS;AAG3C,UAAM,eACF,KAAK,UAAU,kBAAkB,qBAAqB,MAAM,KAAK,UAAU,UAAU,qBAAqB,KAC1G,KAAK,UAAU,kBAAkB,mBAAmB,MAAM,KAAK,UAAU,UAAU,mBAAmB,KACtG,KAAK,UAAU,kBAAkB,4BAA4B,MAAM,KAAK,UAAU,UAAU,4BAA4B,KACxH,KAAK,UAAU,kBAAkB,0BAA0B,MAAM,KAAK,UAAU,UAAU,0BAA0B;AAExH,QAAI,CAAC,cAAc;AACf,oBAAc,OAAO;AACrB;AAAA,IACJ;AAEA,UAAM,YAAY,mBAAmB,iBAAiB;AAEtD,QAAI,UAAU,SAAS,GAAG;AACtB,0BAAoB,SAAS;AAC7B,2BAAqB,MAAM,OAAO;AAClC,+BAAyB,IAAI;AAAA,IACjC,OAAO;AAEH,oBAAc,OAAO;AAGrB,YAAM,aAAa,mBAAmB,iBAAiB;AACvD,YAAM,gBAAgB,OAAO,KAAK,UAAU,EAAE,SAAS;AAEvD,UAAI,eAAe;AACf,kBAAU,CAAA,UAAS;AAAA,UACf,GAAG;AAAA,UACH,GAAG;AAAA,QAAA,EACL;AAAA,MACN,OAAO;AACH,kBAAU,CAAA,SAAQ;AACd,gBAAM,OAAO,EAAE,GAAG,KAAA;AAClB,iBAAO,KAAK;AACZ,iBAAO,KAAK;AACZ,iBAAO,KAAK;AACZ,iBAAO,KAAK;AACZ,iBAAO;AAAA,QACX,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,EACJ;AAEA,QAAM,0BAA0B,MAAM;AAClC,QAAI,mBAAmB;AAEnB,YAAM,WAAW,kBAAkB,SAAS;AAG5C,YAAM,eAAe,EAAE,GAAG,UAAU,aAAA;AACpC,uBAAiB,QAAQ,CAAA,SAAQ;AAC7B,eAAO,aAAa,KAAK,EAAE;AAAA,MAC/B,CAAC;AAGD,wBAAkB;AAAA,QACd,GAAG;AAAA,QACH,cAAc;AAAA,MAAA,CACjB;AAGD,+BAAyB,KAAK;AAC9B,2BAAqB,IAAI;AACzB,0BAAoB,CAAA,CAAE;AAGtB,UAAI,iCAAQ,sBAAuB,eAAc,uBAAuB;AACxE,UAAI,iCAAQ,oBAAqB,eAAc,qBAAqB;AACpE,UAAI,iCAAQ,6BAA8B,eAAc,8BAA8B;AACtF,UAAI,iCAAQ,2BAA4B,eAAc,4BAA4B;AAAA,IACtF;AAAA,EACJ;AAEA,SACI,qBAAC,OAAA,EAAI,WAAU,+CACX,UAAA;AAAA,IAAA,oBAAC,OAAA,EAAI,WAAU,mEACX,UAAA,qBAAC,OAAA,EACG,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,UAAU;AAAA,UACV,OAAM;AAAA,UACN,aAAa,CAAC,YAAiB;AAC3B,0BAAc,OAAO;AAAA,UACzB;AAAA,UACA,YAAY;AAAA,UACZ,UAAU,CAAC,UAAU;AACjB,gBAAI,OAAO;AACP,wBAAU,WAAS,EAAE,GAAG,MAAM,WAAW,QAAQ;AAAA,YACrD,OAAO;AACH,wBAAU,CAAA,SAAQ;AACd,sBAAM,YAAY,EAAE,GAAG,KAAA;AACvB,uBAAO,UAAU;AACjB,uBAAO;AAAA,cACX,CAAC;AAAA,YACL;AAAA,UACJ;AAAA,UACA,iBAAiB;AAAA,QAAA;AAAA,MAAA;AAAA,MAErB;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,OAAO,WAAU,iCAAQ,aAAY,mDAAmD,iCAAQ,cAAa,uDAAuD,2BAA2B,iCAAQ;AAAA,UACvM,WAAU;AAAA,QAAA;AAAA,MAAA;AAAA,IACd,EAAA,CACJ,EAAA,CACJ;AAAA,IAEA,qBAAC,OAAA,EAAI,WAAU,4BACX,UAAA;AAAA,MAAA,oBAAC,OAAA,EAAI,aAAU,QAAO,WAAU,mBAC5B,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,aAAY;AAAA,UACZ,OAAO,UAAU,QAAQ;AAAA,UACzB,UAAU,CAAC;;AAAW,4BAAS,SAAQH,MAAA,EAAE,WAAF,gBAAAA,IAAU,KAAK;AAAA;AAAA,UACtD,QAAQ,MAAM,cAAc,MAAM;AAAA,UAClC,OAAO,OAAO;AAAA,UACd,gBAAe;AAAA,UACf,UAAS;AAAA,UACT,WAAU;AAAA,UACV,UAAQ;AAAA,QAAA;AAAA,MAAA,GAEhB;AAAA,MAEA,qBAAC,OAAA,EAAI,aAAU,eAAc,WAAU,wBACnC,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAU,kCACX,UAAA;AAAA,UAAA,qBAAC,SAAA,EAAM,WAAU,2CAA0C,UAAA;AAAA,YAAA;AAAA,YACrC,oBAAC,QAAA,EAAK,WAAU,kBAAiB,UAAA,IAAA,CAAC;AAAA,UAAA,GACxD;AAAA,UACA,oBAAC,oBAAA,EAAmB,MAAK,sDAAA,CAAsD;AAAA,QAAA,GACnF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,SAAS,MAAM,0BAA0B,IAAI;AAAA,YAC7C,WAAW;AAAA;AAAA;AAAA,8BAGL,OAAO,cAAc,iCAAiC,cAAc;AAAA;AAAA,YAGzE,UAAA,UAAU,cACP,oBAAC,KAAA,EAAE,WAAU,wCAAwC,UAAA,UAAU,UAAU,WAAW,GAAE,IAEtF,oBAAC,QAAA,EAAK,WAAU,iBAAgB,UAAA,6BAAA,CAA0B;AAAA,UAAA;AAAA,QAAA;AAAA,4BAGjE,mBAAA,EAAkB,OAAO,iCAAQ,aAAa,WAAU,QAAO;AAAA,QAGhE;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,QAAQ;AAAA,YACR,QAAO,uCAAW,gBAAe;AAAA,YACjC,SAAS,MAAM;AACX,wCAA0B,KAAK;AAAA,YACnC;AAAA,YACA,QAAQ,CAAC,QAAQ;AACb,uBAAS,eAAe,GAAG;AAAA,YAC/B;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ,GACJ;AAAA,MAEA,oBAAC,OAAA,EAAI,aAAU,cAAa,WAAU,wBAClC,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,SAAS,mBAAmB,IAAI,CAAA,WAAU;AACtC,kBAAM,qBAAqB,UAAU,cAAc,CAAA;AACnD,kBAAM,cAAc,mBAAmB,SAAS,WAAW;AAC3D,kBAAM,aAAa,mBAAmB,SAAS,UAAU;AACzD,kBAAM,aAAa,mBAAmB,SAAS,WAAW;AAE1D,gBAAI,WAAW;AAGf,gBAAI,UAAU;AACd,gBAAI,OAAO,UAAU,aAAa;AAC9B,kBAAI,cAAc,YAAY;AAC1B,2BAAW;AACX,0BAAU;AAAA,cACd,OAAO;AACH,0BAAU;AAAA,cACd;AAAA,YACJ;AACA,gBAAI,OAAO,UAAU,YAAY;AAC7B,kBAAI,aAAa;AACb,2BAAW;AACX,0BAAU;AAAA,cACd,OAAO;AACH,0BAAU;AAAA,cACd;AAAA,YACJ;AACA,gBAAI,OAAO,UAAU,aAAa;AAC9B,kBAAI,aAAa;AACb,2BAAW;AACX,0BAAU;AAAA,cACd,OAAO;AACH,0BAAU;AAAA,cACd;AAAA,YACJ;AACA,gBAAI,OAAO,UAAU,eAAe;AAChC,wBAAU;AAAA,YACd;AAEA,mBAAO,EAAE,GAAG,QAAQ,UAAU,QAAA;AAAA,UAClC,CAAC;AAAA,UACD,UAAU;AAAA,UACV,aAAa,CAAC,YAAiB;AAC3B,0BAAc,OAAO;AAAA,UACzB;AAAA,UACA,OAAM;AAAA,UACN,YAAY;AAAA,UACZ,WAAU;AAAA,UACV,WAAU;AAAA,UACV,QAAQ;AAAA,QAAA;AAAA,MAAA,GAEhB;AAAA,0BAGC,iBAAA,EACI,YAAA,eAAU,eAAV,mBAAsB,SAAS,gBAC5B;AAAA,QAAC,OAAO;AAAA,QAAP;AAAA,UACG,SAAS,EAAE,SAAS,GAAG,QAAQ,EAAA;AAAA,UAC/B,SAAS,EAAE,SAAS,GAAG,QAAQ,OAAA;AAAA,UAC/B,MAAM,EAAE,SAAS,GAAG,QAAQ,EAAA;AAAA,UAC5B,YAAY,EAAE,UAAU,IAAA;AAAA,UAExB,UAAA,oBAAC,OAAA,EAAI,aAAU,oBAAmB,WAAU,wBACxC,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,OAAM;AAAA,cACN,aAAY;AAAA,cACZ,OAAO,UAAU,oBAAoB;AAAA,cACrC,UAAU,CAAC,MAAW,SAAS,oBAAoB,EAAE,OAAO,KAAK;AAAA,cACjE,QAAQ,MAAM,cAAc,kBAAkB;AAAA,cAC9C,OAAO,OAAO;AAAA,cACd,MAAK;AAAA,cACL,UAAQ;AAAA,YAAA;AAAA,UAAA,EACZ,CACJ;AAAA,QAAA;AAAA,MAAA,GAGZ;AAAA,MAEA,qBAAC,OAAA,EAAI,aAAU,gCAA+B,WAAU,wBACpD,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAU,kCACX,UAAA;AAAA,UAAA,qBAAC,SAAA,EAAM,WAAU,2CAA0C,UAAA;AAAA,YAAA;AAAA,YACjC,oBAAC,QAAA,EAAK,WAAU,6BAA4B,UAAA,IAAA,CAAC;AAAA,UAAA,GACvE;AAAA,UACA,oBAAC,oBAAA,EAAmB,MAAK,8DAAA,CAA8D;AAAA,QAAA,GAC3F;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,OAAM;AAAA,YACN,UAAU;AAAA,YACV,aAAa;AAAA,YACb,OAAO,CAAC,gCAAgC,4BAA4B;AAAA,YACpE,WAAU;AAAA,YACV,gBAAgB;AAAA,YAChB,gBACK,eAAU,0BAAV,mBAAiC,WAAQ,eAAU,wBAAV,mBAA+B,QAClE,UAAU,sBAAsB,OAAO,UAAU,oBAAoB,OAAO,UAAU,sBAAsB,OAAO,UAAU,oBAAoB,SACjJ,eAAU,0BAAV,mBAAiC,WAAQ,eAAU,wBAAV,mBAA+B;AAAA,YAEnF,gBACI,eAAU,0BAAV,mBAAiC,WAAQ,eAAU,iCAAV,mBAAwC,SAAQ,UAAU,sBAAsB,SAAS,UAAU,6BAA6B,OACnK,UAAU,sBAAsB,OAChC;AAAA,YAEV,aAAY,eAAU,wBAAV,mBAA+B;AAAA,YAC3C,cACI,eAAU,wBAAV,mBAA+B,WAAQ,eAAU,+BAAV,mBAAsC,SAAQ,UAAU,oBAAoB,SAAS,UAAU,2BAA2B,OAC3J,UAAU,oBAAoB,OAC9B;AAAA,UAAA;AAAA,QAAA;AAAA,MAEd,GACJ;AAAA,MAEA,qBAAC,OAAA,EAAI,aAAU,yBAAwB,WAAU,wBAC7C,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAU,kCACX,UAAA;AAAA,UAAA,qBAAC,SAAA,EAAM,WAAU,2CAA0C,UAAA;AAAA,YAAA;AAAA,YACxC,oBAAC,QAAA,EAAK,WAAU,6BAA4B,UAAA,IAAA,CAAC;AAAA,UAAA,GAChE;AAAA,UACA,oBAAC,oBAAA,EAAmB,MAAK,oDAAA,CAAoD;AAAA,QAAA,GACjF;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,OAAM;AAAA,YACN,UAAU;AAAA,YACV,aAAa;AAAA,YACb,OAAO,CAAC,yBAAyB,qBAAqB;AAAA,YACtD,WAAU;AAAA,YACV,gBAAgB;AAAA,YAChB,eAAc,eAAU,iCAAV,mBAAwC;AAAA,YACtD,gBACI,eAAU,iCAAV,mBAAwC,WAAQ,eAAU,0BAAV,mBAAiC,SAAQ,UAAU,6BAA6B,SAAS,UAAU,sBAAsB,OACnK,UAAU,6BAA6B,OACvC;AAAA,YAEV,cACK,eAAU,iCAAV,mBAAwC,WAAQ,eAAU,+BAAV,mBAAsC,QAChF,UAAU,6BAA6B,OAAO,UAAU,2BAA2B,OAAO,UAAU,6BAA6B,OAAO,UAAU,2BAA2B,SAC7K,eAAU,+BAAV,mBAAsC,WAAQ,eAAU,iCAAV,mBAAwC;AAAA,YAEjG,cACI,eAAU,+BAAV,mBAAsC,WAAQ,eAAU,wBAAV,mBAA+B,SAAQ,UAAU,2BAA2B,SAAS,UAAU,oBAAoB,OAC3J,UAAU,2BAA2B,OACrC;AAAA,UAAA;AAAA,QAAA;AAAA,MAEd,GACJ;AAAA,MAEA,qBAAC,OAAA,EAAI,aAAU,iBAAgB,WAAU,wBACrC,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAU,kCACX,UAAA;AAAA,UAAA,qBAAC,SAAA,EAAM,WAAU,2CAA0C,UAAA;AAAA,YAAA;AAAA,YACjD,oBAAC,QAAA,EAAK,WAAU,6BAA4B,UAAA,IAAA,CAAC;AAAA,UAAA,GACvD;AAAA,UACA,oBAAC,oBAAA,EAAmB,MAAK,+CAAA,CAA+C;AAAA,QAAA,GAC5E;AAAA,QACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,cAAc,QAAQ,IAAI;AAAA,YAC1B,kBAAkB;AAAA,YAClB,mBAAmB;AAAA,YACnB,wBAAwB;AAAA,YACxB,QAAQ,OAAO,iBAA2B,OAAO,SAAS,OAAO,kBAAkB;AAAA,YACnF,oBAAoB,CAAC,aAAa;AAC9B,gCAAkB;AAAA,gBACd,QAAO,qCAAU,gBAAe;AAAA,gBAChC,iBAAgB,qCAAU,YAAW;AAAA,gBACrC,eAAe;AAAA;AAAA,gBACf,eAAe,qCAAU;AAAA,cAAA,CAC5B;AAED,kBAAI,UAAU;AAEV,0BAAU,CAAC,SAAS;AAChB,wBAAM,YAAY,EAAE,GAAG,KAAA;AACvB,yBAAO,UAAU;AACjB,yBAAO,UAAU;AACjB,yBAAO,UAAU;AACjB,yBAAO;AAAA,gBACX,CAAC;AAAA,cACL,OAAO;AAEH,0BAAU,CAAC,UAAU;AAAA,kBACjB,GAAG;AAAA,kBACH,OAAO;AAAA,gBAAA,EACT;AAAA,cACN;AAAA,YACJ;AAAA,YACA,UAAU;AAAA,YACV,OAAM;AAAA,YACN,aAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MAChB,GACJ;AAAA,MAEA,qBAAC,OAAA,EAAI,aAAU,oBAAmB,WAAU,wBACxC,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,OAAM;AAAA,YACN,SAAQ;AAAA,YACR,UAAU,MAAM;AAEZ,oBAAM,iBAAiB,WAAW,IAAI,CAAC,SAAc;AAAA,gBACjD,OAAO,IAAI;AAAA,gBACX,OAAO,IAAI;AAAA,gBACX,UAAU;AAAA,cAAA,EACZ;AACF,qBAAO;AAAA,YACX,GAAA;AAAA,YACA,UAAU;AAAA,YACV,aAAa,CAAC,YAAiB;AAC3B,4BAAc,OAAO;AAAA,YACzB;AAAA,YACA,OAAM;AAAA,YACN,YAAY;AAAA,YACZ,WAAU;AAAA,YACV,WAAU;AAAA,YACV,QAAQ;AAAA,UAAA;AAAA,QAAA;AAAA,QAGZ,oBAAC,mBACK,WAAA,MAAM;;AACJ,gBAAM,iBAAiB,WAAW,KAAK,CAAC,QAAa,IAAI,SAAS,QAAQ;AAC1E,gBAAM,mBAAmB,iDAAgB;AAEzC,mBAAOA,MAAA,UAAU,qBAAV,gBAAAA,IAA4B,SAAS,sBACxC;AAAA,YAAC,OAAO;AAAA,YAAP;AAAA,cACG,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,EAAA;AAAA,cAC7C,SAAS,EAAE,QAAQ,QAAQ,SAAS,GAAG,WAAW,GAAA;AAAA,cAClD,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,EAAA;AAAA,cAC1C,YAAY,EAAE,UAAU,KAAK,MAAM,YAAA;AAAA,cAEnC,UAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG,OAAM;AAAA,kBACN,MAAK;AAAA,kBACL,aAAY;AAAA,kBACZ,OAAO,UAAU,mBAAmB;AAAA,kBACpC,UAAU,CAAC,MAAW,SAAS,mBAAmB,EAAE,OAAO,KAAK;AAAA,kBAChE,QAAQ,MAAM,cAAc,iBAAiB;AAAA,kBAC7C,OAAO,OAAO;AAAA,gBAAA;AAAA,cAAA;AAAA,YAClB;AAAA,UAAA;AAAA,QAGZ,KAAG,CACP;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA,GACJ;AAAA,IAEA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,MAAM;AAAA,QACN,OAAM;AAAA,QACN,aAAa;AAAA,QACb,SAAS,MAAM;AACX,mCAAyB,KAAK;AAC9B,qBAAW,MAAM;AACb,iCAAqB,IAAI;AACzB,gCAAoB,CAAA,CAAE;AAAA,UAC1B,GAAG,GAAG;AAAA,QACV;AAAA,QACA,WAAW;AAAA,QACX,aAAY;AAAA,QACZ,YAAW;AAAA,QAEX,UAAA,oBAAC,OAAA,EAAI,WAAU,mFACV,UAAA,iBAAiB,IAAI,CAAA,SAClB,qBAAC,OAAA,EAAkB,WAAU,sDACzB,UAAA;AAAA,UAAA,qBAAC,OAAA,EAAI,WAAU,4CACX,UAAA;AAAA,YAAA,oBAAC,MAAA,EAAG,WAAU,sDAAsD,UAAA,KAAK,MAAK;AAAA,YAC9E,qBAAC,QAAA,EAAK,WAAU,sDAAqD,UAAA;AAAA,cAAA;AAAA,cAAK,KAAK,MAAM,eAAA;AAAA,YAAe,EAAA,CAAE;AAAA,UAAA,GAC1G;AAAA,UACA,oBAAC,OAAA,EAAI,WAAU,qDACX,UAAA,oBAAC,OAAE,WAAU,gBAAgB,UAAA,KAAK,YAAA,CAAY,EAAA,CAClD;AAAA,QAAA,KAPM,KAAK,EAQf,CACH,EAAA,CACL;AAAA,MAAA;AAAA,IAAA;AAAA,EACJ,GACJ;AAER;AAEA,MAAA,YAAe,KAAK,OAAO;"}
|