@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,412 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
-
import { memo, useState, useRef, useCallback, Fragment } from "react";
|
|
3
|
-
import { ref, uploadBytesResumable, getDownloadURL, deleteObject } from "../../../node_modules/@firebase/storage/dist/index.esm.js";
|
|
4
|
-
import { storage } from "../../../services/initialize-firebase.js";
|
|
5
|
-
import { AnimatePresence, motion } from "framer-motion";
|
|
6
|
-
import useFirebaseAuthState from "../../../hooks/useFirebaseAuthState.js";
|
|
7
|
-
import ImageCropModal from "../../ImageCropModal/index.js";
|
|
8
|
-
import { processImageOnServer } from "../../../services/process-image-on-server.js";
|
|
9
|
-
import FallbackImage from "../../common/FallbackImage.js";
|
|
10
|
-
function FileUpload({
|
|
11
|
-
formData,
|
|
12
|
-
field,
|
|
13
|
-
setFormData,
|
|
14
|
-
formErrors,
|
|
15
|
-
setError,
|
|
16
|
-
onLoadingChange
|
|
17
|
-
}) {
|
|
18
|
-
const [loading, setLoading] = useState(false);
|
|
19
|
-
const [progress, setProgress] = useState(0);
|
|
20
|
-
const [isTakingLong, setIsTakingLong] = useState(false);
|
|
21
|
-
const [isDragging, setIsDragging] = useState(false);
|
|
22
|
-
const { user } = useFirebaseAuthState();
|
|
23
|
-
const [cropModalOpen, setCropModalOpen] = useState(false);
|
|
24
|
-
const [tempImageSrc, setTempImageSrc] = useState(null);
|
|
25
|
-
const [currentFileName, setCurrentFileName] = useState("");
|
|
26
|
-
const fileInputRef = useRef(null);
|
|
27
|
-
const uploadToFirebase = async (file, fileName, updateProgress) => {
|
|
28
|
-
const storageRef = ref(storage, `/data/${user == null ? void 0 : user.uid}/events/images/${fileName}`);
|
|
29
|
-
const uploadTask = uploadBytesResumable(storageRef, file);
|
|
30
|
-
return new Promise((resolve, reject) => uploadTask.on(
|
|
31
|
-
"state_changed",
|
|
32
|
-
(snapshot) => {
|
|
33
|
-
const progress2 = Math.floor(snapshot.bytesTransferred / snapshot.totalBytes * 100);
|
|
34
|
-
updateProgress(progress2);
|
|
35
|
-
},
|
|
36
|
-
reject,
|
|
37
|
-
() => {
|
|
38
|
-
getDownloadURL(uploadTask.snapshot.ref).then(resolve).catch(reject);
|
|
39
|
-
}
|
|
40
|
-
));
|
|
41
|
-
};
|
|
42
|
-
const deleteFile = async (fileName) => {
|
|
43
|
-
try {
|
|
44
|
-
const storageRef = ref(storage, `/data/${user == null ? void 0 : user.uid}/events/images/${fileName}`);
|
|
45
|
-
await deleteObject(storageRef);
|
|
46
|
-
} catch {
|
|
47
|
-
console.warn("File not found : ", fileName);
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
const handleImageChange = async (file) => {
|
|
51
|
-
setLoading(true);
|
|
52
|
-
onLoadingChange == null ? void 0 : onLoadingChange(true);
|
|
53
|
-
setProgress(0);
|
|
54
|
-
setFormData((prev) => ({ ...prev, image_url: "", thumbnail_url: "" }));
|
|
55
|
-
const fileId = crypto.randomUUID();
|
|
56
|
-
const longUploadTimer = setTimeout(() => setIsTakingLong(true), 7e3);
|
|
57
|
-
try {
|
|
58
|
-
setError("");
|
|
59
|
-
const token = await (user == null ? void 0 : user.getIdToken()) || "";
|
|
60
|
-
const [processedFile1, processedFile2] = await Promise.all([
|
|
61
|
-
processImageOnServer(file, 1920, token),
|
|
62
|
-
processImageOnServer(file, 640, token)
|
|
63
|
-
]);
|
|
64
|
-
const totalProgress = { full: 0, thumb: 0 };
|
|
65
|
-
const updateProgress = (key) => (p) => {
|
|
66
|
-
totalProgress[key] = p;
|
|
67
|
-
setProgress(Math.floor((totalProgress.full + totalProgress.thumb) / 2));
|
|
68
|
-
};
|
|
69
|
-
const [download_url, thumb_url] = await Promise.all([
|
|
70
|
-
uploadToFirebase(processedFile1, `${fileId}_full`, updateProgress("full")),
|
|
71
|
-
uploadToFirebase(processedFile2, `${fileId}_thumb`, updateProgress("thumb"))
|
|
72
|
-
]);
|
|
73
|
-
setFormData((prev) => ({ ...prev, image_url: download_url, thumbnail_url: thumb_url }));
|
|
74
|
-
setError("");
|
|
75
|
-
} catch (error) {
|
|
76
|
-
console.error("Error uploading image:", error);
|
|
77
|
-
await Promise.all([
|
|
78
|
-
deleteFile(`${fileId}_full`),
|
|
79
|
-
deleteFile(`${fileId}_thumb`)
|
|
80
|
-
]);
|
|
81
|
-
setFormData((prev) => ({ ...prev, image_url: "", thumbnail_url: "" }));
|
|
82
|
-
setError(error instanceof Error ? error.message : "Could not process file. Please try uploading again.");
|
|
83
|
-
} finally {
|
|
84
|
-
clearTimeout(longUploadTimer);
|
|
85
|
-
setLoading(false);
|
|
86
|
-
onLoadingChange == null ? void 0 : onLoadingChange(false);
|
|
87
|
-
setTimeout(() => {
|
|
88
|
-
setProgress(0);
|
|
89
|
-
setIsTakingLong(false);
|
|
90
|
-
}, 1e3);
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
const handleFileSelect = (file) => {
|
|
94
|
-
if (!file) return;
|
|
95
|
-
const allowedTypes = ["image/jpg", "image/jpeg"];
|
|
96
|
-
if (!allowedTypes.includes(file.type)) {
|
|
97
|
-
setError("Only JPG and JPEG files are allowed");
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
if (+(file.size / (1024 * 1024)).toFixed(2) > 4.5) {
|
|
101
|
-
setError("Image size cannot be greater than 4.5 MB");
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
const url = URL.createObjectURL(file);
|
|
105
|
-
setTempImageSrc(url);
|
|
106
|
-
setCurrentFileName(file.name);
|
|
107
|
-
setCropModalOpen(true);
|
|
108
|
-
};
|
|
109
|
-
const handleDrop = useCallback((e) => {
|
|
110
|
-
e.preventDefault();
|
|
111
|
-
setIsDragging(false);
|
|
112
|
-
const file = e.dataTransfer.files[0];
|
|
113
|
-
if (file && file.type.startsWith("image/")) {
|
|
114
|
-
handleFileSelect(file);
|
|
115
|
-
}
|
|
116
|
-
}, []);
|
|
117
|
-
const handleCropConfirm = (blob) => {
|
|
118
|
-
if (!tempImageSrc) return;
|
|
119
|
-
const fileSizeMB = +(blob.size / (1024 * 1024)).toFixed(2);
|
|
120
|
-
if (fileSizeMB > 4.5) {
|
|
121
|
-
setError(`The cropped image is too large (${fileSizeMB}MB). Please try a smaller crop or a lower resolution.`);
|
|
122
|
-
setCropModalOpen(false);
|
|
123
|
-
URL.revokeObjectURL(tempImageSrc);
|
|
124
|
-
setTempImageSrc(null);
|
|
125
|
-
if (fileInputRef.current) fileInputRef.current.value = "";
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
const file = new File([blob], currentFileName, { type: blob.type });
|
|
129
|
-
handleImageChange(file);
|
|
130
|
-
setCropModalOpen(false);
|
|
131
|
-
URL.revokeObjectURL(tempImageSrc);
|
|
132
|
-
setTempImageSrc(null);
|
|
133
|
-
if (fileInputRef.current) fileInputRef.current.value = "";
|
|
134
|
-
};
|
|
135
|
-
const handleCropCancel = () => {
|
|
136
|
-
setCropModalOpen(false);
|
|
137
|
-
if (tempImageSrc) {
|
|
138
|
-
URL.revokeObjectURL(tempImageSrc);
|
|
139
|
-
setTempImageSrc(null);
|
|
140
|
-
}
|
|
141
|
-
if (fileInputRef.current) fileInputRef.current.value = "";
|
|
142
|
-
};
|
|
143
|
-
return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
|
|
144
|
-
/* @__PURE__ */ jsx(
|
|
145
|
-
"input",
|
|
146
|
-
{
|
|
147
|
-
ref: fileInputRef,
|
|
148
|
-
type: "file",
|
|
149
|
-
accept: "image/jpg, image/jpeg",
|
|
150
|
-
onChange: (e) => {
|
|
151
|
-
var _a;
|
|
152
|
-
const file = (_a = e.target.files) == null ? void 0 : _a[0];
|
|
153
|
-
if (file) handleFileSelect(file);
|
|
154
|
-
},
|
|
155
|
-
disabled: loading,
|
|
156
|
-
className: "hidden"
|
|
157
|
-
}
|
|
158
|
-
),
|
|
159
|
-
/* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", children: formData[field] && !loading ? /* @__PURE__ */ jsxs(
|
|
160
|
-
motion.div,
|
|
161
|
-
{
|
|
162
|
-
initial: { opacity: 0 },
|
|
163
|
-
animate: { opacity: 1 },
|
|
164
|
-
exit: { opacity: 0 },
|
|
165
|
-
className: "relative w-full aspect-[16/9] rounded-lg overflow-hidden group bg-black/5",
|
|
166
|
-
children: [
|
|
167
|
-
/* @__PURE__ */ jsx(
|
|
168
|
-
FallbackImage,
|
|
169
|
-
{
|
|
170
|
-
src: formData.thumbnail_url || formData[field],
|
|
171
|
-
alt: "Event banner",
|
|
172
|
-
fill: true,
|
|
173
|
-
className: "object-cover"
|
|
174
|
-
}
|
|
175
|
-
),
|
|
176
|
-
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-black/50 md:opacity-0 group-hover:md:opacity-100 transition-opacity duration-200 flex items-center justify-center", children: /* @__PURE__ */ jsx(
|
|
177
|
-
"button",
|
|
178
|
-
{
|
|
179
|
-
type: "button",
|
|
180
|
-
onClick: () => {
|
|
181
|
-
var _a;
|
|
182
|
-
console.log("replacing", fileInputRef.current);
|
|
183
|
-
(_a = fileInputRef.current) == null ? void 0 : _a.click();
|
|
184
|
-
},
|
|
185
|
-
className: "px-3 py-2 bg-white/10 hover:bg-white/20 rounded-lg text-white text-sm font-medium transition-colors",
|
|
186
|
-
children: "Replace Image"
|
|
187
|
-
}
|
|
188
|
-
) })
|
|
189
|
-
]
|
|
190
|
-
},
|
|
191
|
-
"preview"
|
|
192
|
-
) : /* @__PURE__ */ jsxs(
|
|
193
|
-
motion.div,
|
|
194
|
-
{
|
|
195
|
-
className: `
|
|
196
|
-
relative w-full aspect-[16/9] rounded-lg overflow-hidden
|
|
197
|
-
bg-gradient-to-br from-blue-500 via-purple-600 to-purple-700
|
|
198
|
-
shadow-lg transition-all duration-300 flex items-center justify-center
|
|
199
|
-
${isDragging ? "shadow-2xl" : "hover:shadow-2xl"}
|
|
200
|
-
${formErrors[field] ? "ring-2 ring-meta-1" : ""}
|
|
201
|
-
${loading ? "cursor-not-allowed" : "cursor-pointer"}
|
|
202
|
-
`,
|
|
203
|
-
style: {
|
|
204
|
-
backgroundImage: "url('/illustration/file_upload_bg.jpg')",
|
|
205
|
-
backgroundSize: "cover",
|
|
206
|
-
backgroundPosition: "center",
|
|
207
|
-
backgroundRepeat: "no-repeat"
|
|
208
|
-
},
|
|
209
|
-
initial: { opacity: 0, y: 20 },
|
|
210
|
-
animate: { opacity: 1, y: 0, scale: isDragging ? 1.01 : 1 },
|
|
211
|
-
whileHover: { scale: 1.01 },
|
|
212
|
-
whileTap: { scale: 0.99 },
|
|
213
|
-
onDragOver: (e) => {
|
|
214
|
-
e.preventDefault();
|
|
215
|
-
setIsDragging(true);
|
|
216
|
-
},
|
|
217
|
-
onDragEnter: (e) => {
|
|
218
|
-
e.preventDefault();
|
|
219
|
-
setIsDragging(true);
|
|
220
|
-
},
|
|
221
|
-
onDragLeave: (e) => {
|
|
222
|
-
e.preventDefault();
|
|
223
|
-
setIsDragging(false);
|
|
224
|
-
},
|
|
225
|
-
onDrop: handleDrop,
|
|
226
|
-
title: loading ? "Uploading" : "Please upload an image",
|
|
227
|
-
onClick: () => {
|
|
228
|
-
var _a;
|
|
229
|
-
return (_a = fileInputRef.current) == null ? void 0 : _a.click();
|
|
230
|
-
},
|
|
231
|
-
children: [
|
|
232
|
-
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 opacity-10", children: /* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-[url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgeG1sbnM9Imh0dHA6Ly93d3cuc3ZnLnVzZXJzL2dldHRpbmdzdGFydGVkLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSIyMCIgY3k9IjIwIiByPSIyIiBmaWxsPSIjZmZmIi8+PC9nPg==')] opacity-20" }) }),
|
|
233
|
-
/* @__PURE__ */ jsxs("div", { className: "relative h-full flex flex-col items-center justify-center p-6 text-white", children: [
|
|
234
|
-
/* @__PURE__ */ jsx(AnimatePresence, { children: isDragging && /* @__PURE__ */ jsx(
|
|
235
|
-
motion.div,
|
|
236
|
-
{
|
|
237
|
-
className: "absolute inset-0 pointer-events-none z-50",
|
|
238
|
-
initial: { opacity: 0 },
|
|
239
|
-
animate: { opacity: 1 },
|
|
240
|
-
exit: { opacity: 0 },
|
|
241
|
-
children: /* @__PURE__ */ jsxs("svg", { className: "w-full h-full p-[2px]", children: [
|
|
242
|
-
" ",
|
|
243
|
-
/* @__PURE__ */ jsx(
|
|
244
|
-
motion.rect,
|
|
245
|
-
{
|
|
246
|
-
width: "100%",
|
|
247
|
-
height: "100%",
|
|
248
|
-
rx: "20",
|
|
249
|
-
ry: "20",
|
|
250
|
-
fill: "none",
|
|
251
|
-
stroke: "white",
|
|
252
|
-
strokeWidth: "3",
|
|
253
|
-
strokeDasharray: "15 10",
|
|
254
|
-
initial: { strokeDashoffset: 0 },
|
|
255
|
-
animate: { strokeDashoffset: -25 },
|
|
256
|
-
transition: { duration: 0.5, repeat: Infinity, ease: "linear" }
|
|
257
|
-
}
|
|
258
|
-
)
|
|
259
|
-
] })
|
|
260
|
-
}
|
|
261
|
-
) }),
|
|
262
|
-
loading ? /* @__PURE__ */ jsx(LoadingState, { progress, isTakingLong }) : /* @__PURE__ */ jsx(UploadPrompt, { isDragging })
|
|
263
|
-
] }),
|
|
264
|
-
loading && /* @__PURE__ */ jsx(
|
|
265
|
-
motion.div,
|
|
266
|
-
{
|
|
267
|
-
className: "absolute bottom-0 left-0 right-0 h-2 bg-white/20",
|
|
268
|
-
initial: { opacity: 0 },
|
|
269
|
-
animate: { opacity: 1 },
|
|
270
|
-
children: /* @__PURE__ */ jsx(
|
|
271
|
-
motion.div,
|
|
272
|
-
{
|
|
273
|
-
className: "h-full bg-white rounded-full",
|
|
274
|
-
initial: { width: "0%" },
|
|
275
|
-
animate: { width: `${progress}%` },
|
|
276
|
-
transition: { duration: 0.3 }
|
|
277
|
-
}
|
|
278
|
-
)
|
|
279
|
-
}
|
|
280
|
-
)
|
|
281
|
-
]
|
|
282
|
-
},
|
|
283
|
-
"uploader"
|
|
284
|
-
) }),
|
|
285
|
-
tempImageSrc && /* @__PURE__ */ jsx(
|
|
286
|
-
ImageCropModal,
|
|
287
|
-
{
|
|
288
|
-
open: cropModalOpen,
|
|
289
|
-
imageSrc: tempImageSrc,
|
|
290
|
-
onClose: handleCropCancel,
|
|
291
|
-
onConfirm: handleCropConfirm,
|
|
292
|
-
aspect: 16 / 9,
|
|
293
|
-
cropShape: "rect",
|
|
294
|
-
showRotationControl: false
|
|
295
|
-
}
|
|
296
|
-
)
|
|
297
|
-
] });
|
|
298
|
-
}
|
|
299
|
-
const LoadingState = memo(function loadingState({ progress, isTakingLong }) {
|
|
300
|
-
return /* @__PURE__ */ jsxs(
|
|
301
|
-
motion.div,
|
|
302
|
-
{
|
|
303
|
-
className: "text-center scale-75 md:scale-100",
|
|
304
|
-
initial: { opacity: 0, scale: 0.9 },
|
|
305
|
-
animate: { opacity: 1, scale: 1 },
|
|
306
|
-
children: [
|
|
307
|
-
/* @__PURE__ */ jsx("div", { className: "flex justify-center", children: /* @__PURE__ */ jsxs("div", { className: "relative w-16 h-16 md:w-24 md:h-24 mb-2 md:mb-4", children: [
|
|
308
|
-
/* @__PURE__ */ jsx("svg", { className: "w-full h-full", viewBox: "0 0 100 100", children: /* @__PURE__ */ jsx(
|
|
309
|
-
motion.circle,
|
|
310
|
-
{
|
|
311
|
-
className: "text-white",
|
|
312
|
-
strokeWidth: "4",
|
|
313
|
-
stroke: "currentColor",
|
|
314
|
-
fill: "none",
|
|
315
|
-
r: "42",
|
|
316
|
-
cx: "50",
|
|
317
|
-
cy: "50",
|
|
318
|
-
initial: { pathLength: 0 },
|
|
319
|
-
animate: { pathLength: progress / 100 },
|
|
320
|
-
transition: { duration: 0.3 }
|
|
321
|
-
}
|
|
322
|
-
) }),
|
|
323
|
-
/* @__PURE__ */ jsxs("span", { className: "absolute inset-0 flex items-center justify-center text-md md:text-xl font-bold animate-pulse", children: [
|
|
324
|
-
progress,
|
|
325
|
-
"%"
|
|
326
|
-
] })
|
|
327
|
-
] }) }),
|
|
328
|
-
/* @__PURE__ */ jsxs(
|
|
329
|
-
motion.div,
|
|
330
|
-
{
|
|
331
|
-
initial: { opacity: 0 },
|
|
332
|
-
animate: { opacity: 1 },
|
|
333
|
-
transition: { delay: 0.2 },
|
|
334
|
-
className: "space-y-2",
|
|
335
|
-
children: [
|
|
336
|
-
/* @__PURE__ */ jsx("p", { className: "text-xl font-bold", children: "Almost there! ✨" }),
|
|
337
|
-
/* @__PURE__ */ jsx("p", { className: "text-white/80", children: isTakingLong ? "Taking longer than usual... ⏳" : "Your image is uploading..." })
|
|
338
|
-
]
|
|
339
|
-
}
|
|
340
|
-
)
|
|
341
|
-
]
|
|
342
|
-
}
|
|
343
|
-
);
|
|
344
|
-
});
|
|
345
|
-
const UploadPrompt = memo(function uploadPrompt({ isDragging }) {
|
|
346
|
-
return /* @__PURE__ */ jsxs(
|
|
347
|
-
motion.div,
|
|
348
|
-
{
|
|
349
|
-
className: "text-center space-y-3 md:scale-100 border border-dashed border-white p-4 rounded-xl bg-white/10 transition-all duration-300 ease-in-out",
|
|
350
|
-
initial: { opacity: 0, y: 20 },
|
|
351
|
-
animate: { opacity: 1, y: 0 },
|
|
352
|
-
children: [
|
|
353
|
-
/* @__PURE__ */ jsx(
|
|
354
|
-
motion.div,
|
|
355
|
-
{
|
|
356
|
-
className: "w-12 h-12 mx-auto bg-white rounded-full flex items-center justify-center",
|
|
357
|
-
whileHover: { scale: 1.1, rotate: 5 },
|
|
358
|
-
whileTap: { scale: 0.95 },
|
|
359
|
-
children: /* @__PURE__ */ jsx("svg", { width: "19", height: "17", viewBox: "0 0 19 17", className: "text-gray-600", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx("path", { d: "M5.83203 11.6673L9.16536 8.33398M9.16536 8.33398L12.4987 11.6673M9.16536 8.33398V15.834M15.832 12.2863C16.85 11.4457 17.4987 10.1739 17.4987 8.75065C17.4987 6.21935 15.4467 4.16732 12.9154 4.16732C12.7333 4.16732 12.5629 4.07231 12.4705 3.91543C11.3837 2.07135 9.37739 0.833984 7.08203 0.833984C3.63025 0.833984 0.832031 3.6322 0.832031 7.08398C0.832031 8.80574 1.52824 10.3649 2.65449 11.4953", stroke: "#474C56", strokeWidth: "1.66667", strokeLinecap: "round", strokeLinejoin: "round" }) })
|
|
360
|
-
}
|
|
361
|
-
),
|
|
362
|
-
/* @__PURE__ */ jsxs("div", { className: "space-y-1", children: [
|
|
363
|
-
/* @__PURE__ */ jsx(
|
|
364
|
-
motion.div,
|
|
365
|
-
{
|
|
366
|
-
className: "space-y-1 md:space-y-2",
|
|
367
|
-
initial: { opacity: 0 },
|
|
368
|
-
animate: { opacity: 1 },
|
|
369
|
-
transition: { delay: 0.2 },
|
|
370
|
-
children: /* @__PURE__ */ jsx("h5", { children: isDragging ? /* @__PURE__ */ jsx(
|
|
371
|
-
motion.span,
|
|
372
|
-
{
|
|
373
|
-
initial: { scale: 0.9 },
|
|
374
|
-
animate: { scale: 1 },
|
|
375
|
-
className: "block",
|
|
376
|
-
children: "Drop it here 🎨"
|
|
377
|
-
}
|
|
378
|
-
) : /* @__PURE__ */ jsxs("div", { className: "text-md", children: [
|
|
379
|
-
/* @__PURE__ */ jsx("span", { className: "text-[#5C48CC]", children: "Click to upload" }),
|
|
380
|
-
/* @__PURE__ */ jsxs("span", { children: [
|
|
381
|
-
" ",
|
|
382
|
-
"or drag and drop"
|
|
383
|
-
] })
|
|
384
|
-
] }) })
|
|
385
|
-
}
|
|
386
|
-
),
|
|
387
|
-
/* @__PURE__ */ jsx(
|
|
388
|
-
motion.div,
|
|
389
|
-
{
|
|
390
|
-
className: "flex flex-wrap justify-center gap-1 md:gap-2",
|
|
391
|
-
initial: { opacity: 0 },
|
|
392
|
-
animate: { opacity: 1 },
|
|
393
|
-
transition: { delay: 0.3 },
|
|
394
|
-
children: /* @__PURE__ */ jsxs("div", { className: "text-md", children: [
|
|
395
|
-
["JPG", "JPEG"].map((format) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
396
|
-
format,
|
|
397
|
-
" "
|
|
398
|
-
] }, format)),
|
|
399
|
-
"(Max | 10MB, Dimensions | 16:9)"
|
|
400
|
-
] })
|
|
401
|
-
}
|
|
402
|
-
)
|
|
403
|
-
] })
|
|
404
|
-
]
|
|
405
|
-
}
|
|
406
|
-
);
|
|
407
|
-
});
|
|
408
|
-
const FileUpload$1 = memo(FileUpload);
|
|
409
|
-
export {
|
|
410
|
-
FileUpload$1 as default
|
|
411
|
-
};
|
|
412
|
-
//# sourceMappingURL=FileUpload.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FileUpload.js","sources":["../../../../src/components/EventAddForm/components/FileUpload.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\r\nimport { useState, useCallback, useRef, memo, Fragment } from \"react\";\r\nimport { ref, getDownloadURL, uploadBytesResumable, deleteObject } from \"firebase/storage\";\r\nimport { storage } from \"@/services/initialize-firebase\";\r\nimport { motion, AnimatePresence } from \"framer-motion\"; // Add framer-motion for smooth animations\r\nimport useFirebaseAuthState from \"@/hooks/useFirebaseAuthState\";\r\nimport ImageCropModal from \"@/components/ImageCropModal\";\r\nimport { processImageOnServer } from \"@/services/process-image-on-server\";\r\nimport FallbackImage from \"@/components/common/FallbackImage\";\r\n\r\ninterface FileUploadProps {\r\n formData: any;\r\n field: string;\r\n setFormData: any;\r\n label?: string;\r\n description?: string;\r\n formErrors?: any;\r\n validation?: any;\r\n setError: (error: string) => void;\r\n onLoadingChange?: (loading: boolean) => void;\r\n}\r\n\r\nfunction FileUpload({\r\n formData,\r\n field,\r\n setFormData,\r\n formErrors,\r\n setError,\r\n onLoadingChange\r\n}: FileUploadProps) {\r\n const [loading, setLoading] = useState(false);\r\n const [progress, setProgress] = useState(0); // Add upload progress\r\n const [isTakingLong, setIsTakingLong] = useState(false); // UI feedback for slow uploads\r\n const [isDragging, setIsDragging] = useState(false);\r\n const { user } = useFirebaseAuthState();\r\n\r\n // Crop Modal State\r\n const [cropModalOpen, setCropModalOpen] = useState(false);\r\n const [tempImageSrc, setTempImageSrc] = useState<string | null>(null);\r\n const [currentFileName, setCurrentFileName] = useState<string>(\"\");\r\n const fileInputRef = useRef<HTMLInputElement>(null);\r\n\r\n const uploadToFirebase = async (file: any, fileName: string, updateProgress: (p: number) => void) => {\r\n const storageRef = ref(storage, `/data/${user?.uid}/events/images/${fileName}`);\r\n const uploadTask = uploadBytesResumable(storageRef, file);\r\n\r\n return new Promise((resolve, reject) => uploadTask.on('state_changed',\r\n (snapshot) => {\r\n const progress = Math.floor((snapshot.bytesTransferred / snapshot.totalBytes) * 100);\r\n\r\n updateProgress(progress);\r\n\r\n },\r\n reject,\r\n () => {\r\n getDownloadURL(uploadTask.snapshot.ref).then(resolve).catch(reject);\r\n }\r\n ))\r\n }\r\n\r\n const deleteFile = async (fileName: any) => {\r\n try {\r\n const storageRef = ref(storage, `/data/${user?.uid}/events/images/${fileName}`);\r\n\r\n await deleteObject(storageRef);\r\n }\r\n catch {\r\n console.warn(\"File not found : \", fileName)\r\n }\r\n }\r\n\r\n const handleImageChange = async (file: File) => {\r\n setLoading(true);\r\n onLoadingChange?.(true);\r\n setProgress(0);\r\n\r\n // Clear existing image data so validation fails if they click Next too early\r\n setFormData((prev: any) => ({ ...prev, image_url: \"\", thumbnail_url: \"\" }));\r\n\r\n const fileId = crypto.randomUUID();\r\n const longUploadTimer = setTimeout(() => setIsTakingLong(true), 7000); // 7 seconds threshold\r\n\r\n try {\r\n setError(\"\");\r\n const token = await user?.getIdToken() || \"\";\r\n\r\n const [processedFile1, processedFile2] = await Promise.all([\r\n processImageOnServer(file, 1920, token),\r\n processImageOnServer(file, 640, token)\r\n ]);\r\n\r\n const totalProgress = { full: 0, thumb: 0 };\r\n\r\n const updateProgress = (key: 'full' | 'thumb') => (p: number) => {\r\n totalProgress[key] = p;\r\n setProgress(Math.floor((totalProgress.full + totalProgress.thumb) / 2));\r\n };\r\n\r\n const [download_url, thumb_url] = await Promise.all([\r\n uploadToFirebase(processedFile1, `${fileId}_full`, updateProgress('full')),\r\n uploadToFirebase(processedFile2, `${fileId}_thumb`, updateProgress('thumb'))\r\n ])\r\n\r\n\r\n setFormData((prev: any) => ({ ...prev, image_url: download_url, thumbnail_url: thumb_url }));\r\n setError(\"\");\r\n } catch (error) {\r\n console.error('Error uploading image:', error);\r\n\r\n await Promise.all([\r\n deleteFile(`${fileId}_full`),\r\n deleteFile(`${fileId}_thumb`)\r\n ])\r\n\r\n setFormData((prev: any) => ({ ...prev, image_url: \"\", thumbnail_url: \"\" }));\r\n setError(error instanceof Error ? error.message : \"Could not process file. Please try uploading again.\");\r\n } finally {\r\n clearTimeout(longUploadTimer);\r\n setLoading(false);\r\n onLoadingChange?.(false);\r\n setTimeout(() => {\r\n setProgress(0);\r\n setIsTakingLong(false);\r\n }, 1000);\r\n }\r\n }\r\n\r\n const handleFileSelect = (file: File) => {\r\n if (!file) return;\r\n\r\n // Check if file type is valid\r\n const allowedTypes = ['image/jpg', 'image/jpeg'];\r\n if (!allowedTypes.includes(file.type)) {\r\n setError(\"Only JPG and JPEG files are allowed\");\r\n return;\r\n }\r\n\r\n // Check size before processing\r\n if (+(file.size / (1024 * 1024)).toFixed(2) > 4.5) {\r\n setError(\"Image size cannot be greater than 4.5 MB\");\r\n return;\r\n }\r\n\r\n const url = URL.createObjectURL(file);\r\n setTempImageSrc(url);\r\n setCurrentFileName(file.name);\r\n setCropModalOpen(true);\r\n };\r\n\r\n const handleDrop = useCallback((e: React.DragEvent) => {\r\n e.preventDefault();\r\n setIsDragging(false);\r\n\r\n const file = e.dataTransfer.files[0];\r\n if (file && file.type.startsWith('image/')) {\r\n handleFileSelect(file);\r\n }\r\n }, []);\r\n\r\n const handleCropConfirm = (blob: Blob) => {\r\n if (!tempImageSrc) return;\r\n\r\n // Check size of the cropped result\r\n const fileSizeMB = +(blob.size / (1024 * 1024)).toFixed(2);\r\n if (fileSizeMB > 4.5) {\r\n setError(`The cropped image is too large (${fileSizeMB}MB). Please try a smaller crop or a lower resolution.`);\r\n setCropModalOpen(false);\r\n URL.revokeObjectURL(tempImageSrc);\r\n setTempImageSrc(null);\r\n if (fileInputRef.current) fileInputRef.current.value = \"\";\r\n return;\r\n }\r\n\r\n // Convert Blob back to File\r\n const file = new File([blob], currentFileName, { type: blob.type });\r\n\r\n // Proceed with original upload logic\r\n handleImageChange(file);\r\n\r\n // Cleanup\r\n setCropModalOpen(false);\r\n URL.revokeObjectURL(tempImageSrc);\r\n setTempImageSrc(null);\r\n if (fileInputRef.current) fileInputRef.current.value = \"\";\r\n };\r\n\r\n const handleCropCancel = () => {\r\n setCropModalOpen(false);\r\n if (tempImageSrc) {\r\n URL.revokeObjectURL(tempImageSrc);\r\n setTempImageSrc(null);\r\n }\r\n if (fileInputRef.current) fileInputRef.current.value = \"\";\r\n };\r\n\r\n return (\r\n <div className=\"w-full\">\r\n {/* Hidden File Input (Always mounted) */}\r\n <input\r\n ref={fileInputRef}\r\n type=\"file\"\r\n accept=\"image/jpg, image/jpeg\"\r\n onChange={(e) => {\r\n const file = e.target.files?.[0];\r\n if (file) handleFileSelect(file);\r\n }}\r\n disabled={loading}\r\n className=\"hidden\"\r\n />\r\n <AnimatePresence mode=\"wait\">\r\n {formData[field] && !loading ? (\r\n <motion.div\r\n key=\"preview\"\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n className=\"relative w-full aspect-[16/9] rounded-lg overflow-hidden group bg-black/5\"\r\n >\r\n <FallbackImage\r\n src={(formData.thumbnail_url || formData[field])}\r\n alt=\"Event banner\"\r\n fill\r\n className=\"object-cover\"\r\n />\r\n <div className=\"absolute inset-0 bg-black/50 md:opacity-0 group-hover:md:opacity-100 transition-opacity duration-200 flex items-center justify-center\">\r\n <button\r\n type=\"button\"\r\n onClick={() => {\r\n console.log(\"replacing\", fileInputRef.current);\r\n fileInputRef.current?.click()\r\n }}\r\n className=\"px-3 py-2 bg-white/10 hover:bg-white/20 rounded-lg text-white text-sm font-medium transition-colors\"\r\n >\r\n Replace Image\r\n </button>\r\n </div>\r\n </motion.div>\r\n ) : (\r\n <motion.div\r\n key=\"uploader\"\r\n className={`\r\n relative w-full aspect-[16/9] rounded-lg overflow-hidden\r\n bg-gradient-to-br from-blue-500 via-purple-600 to-purple-700\r\n shadow-lg transition-all duration-300 flex items-center justify-center\r\n ${isDragging ? 'shadow-2xl' : 'hover:shadow-2xl'}\r\n ${formErrors[field] ? \"ring-2 ring-meta-1\" : \"\"}\r\n ${loading ? \"cursor-not-allowed\" : \"cursor-pointer\"}\r\n `}\r\n style={{\r\n backgroundImage: \"url('/illustration/file_upload_bg.jpg')\",\r\n backgroundSize: \"cover\",\r\n backgroundPosition: \"center\",\r\n backgroundRepeat: \"no-repeat\"\r\n }}\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0, scale: isDragging ? 1.01 : 1 }}\r\n whileHover={{ scale: 1.01 }}\r\n whileTap={{ scale: 0.99 }}\r\n onDragOver={(e) => {\r\n e.preventDefault();\r\n setIsDragging(true);\r\n }}\r\n onDragEnter={(e) => {\r\n e.preventDefault();\r\n setIsDragging(true);\r\n }}\r\n onDragLeave={(e) => {\r\n e.preventDefault();\r\n setIsDragging(false);\r\n }}\r\n onDrop={handleDrop}\r\n title={loading ? \"Uploading\" : \"Please upload an image\"}\r\n onClick={() => fileInputRef.current?.click()}\r\n >\r\n\r\n {/* Cool Background Pattern */}\r\n <div className=\"absolute inset-0 opacity-10\">\r\n <div className=\"absolute inset-0 bg-[url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgeG1sbnM9Imh0dHA6Ly93d3cuc3ZnLnVzZXJzL2dldHRpbmdzdGFydGVkLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSIyMCIgY3k9IjIwIiByPSIyIiBmaWxsPSIjZmZmIi8+PC9nPg==')] opacity-20\" />\r\n </div>\r\n\r\n {/* Main Content Area */}\r\n <div className=\"relative h-full flex flex-col items-center justify-center p-6 text-white\">\r\n {/* Animated Dashed Border on Drag */}\r\n <AnimatePresence>\r\n {isDragging && (\r\n <motion.div\r\n className=\"absolute inset-0 pointer-events-none z-50\"\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n exit={{ opacity: 0 }}\r\n >\r\n <svg className=\"w-full h-full p-[2px]\"> {/* Padding to ensure border is visible slightly inside */}\r\n <motion.rect\r\n width=\"100%\"\r\n height=\"100%\"\r\n rx=\"20\"\r\n ry=\"20\"\r\n fill=\"none\"\r\n stroke=\"white\"\r\n strokeWidth=\"3\"\r\n strokeDasharray=\"15 10\"\r\n initial={{ strokeDashoffset: 0 }}\r\n animate={{ strokeDashoffset: -25 }}\r\n transition={{ duration: 0.5, repeat: Infinity, ease: \"linear\" }}\r\n />\r\n </svg>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n\r\n {loading ? (\r\n <LoadingState progress={progress} isTakingLong={isTakingLong} />\r\n ) : (\r\n <UploadPrompt isDragging={isDragging} />\r\n )}\r\n </div>\r\n\r\n {/* Animated Progress Bar */}\r\n {loading && (\r\n <motion.div\r\n className=\"absolute bottom-0 left-0 right-0 h-2 bg-white/20\"\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n >\r\n <motion.div\r\n className=\"h-full bg-white rounded-full\"\r\n initial={{ width: '0%' }}\r\n animate={{ width: `${progress}%` }}\r\n transition={{ duration: 0.3 }}\r\n />\r\n </motion.div>\r\n )}\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n\r\n {/* Image Crop Modal */}\r\n {tempImageSrc && (\r\n <ImageCropModal\r\n open={cropModalOpen}\r\n imageSrc={tempImageSrc}\r\n onClose={handleCropCancel}\r\n onConfirm={handleCropConfirm}\r\n aspect={16 / 9} // Default aspect ratio for banners, can be props if needed\r\n cropShape=\"rect\"\r\n showRotationControl={false}\r\n />\r\n )}\r\n </div>\r\n );\r\n}\r\n\r\nconst LoadingState = memo(function loadingState({ progress, isTakingLong }: { progress: number, isTakingLong?: boolean }) {\r\n return (\r\n <motion.div\r\n className=\"text-center scale-75 md:scale-100\" // Scaled down on mobile\r\n initial={{ opacity: 0, scale: 0.9 }}\r\n animate={{ opacity: 1, scale: 1 }}\r\n >\r\n <div className=\"flex justify-center\">\r\n <div className=\"relative w-16 h-16 md:w-24 md:h-24 mb-2 md:mb-4\">\r\n <svg className=\"w-full h-full\" viewBox=\"0 0 100 100\">\r\n <motion.circle\r\n className=\"text-white\"\r\n strokeWidth=\"4\"\r\n stroke=\"currentColor\"\r\n fill=\"none\"\r\n r=\"42\"\r\n cx=\"50\"\r\n cy=\"50\"\r\n initial={{ pathLength: 0 }}\r\n animate={{ pathLength: progress / 100 }}\r\n transition={{ duration: 0.3 }}\r\n />\r\n </svg>\r\n <span className=\"absolute inset-0 flex items-center justify-center text-md md:text-xl font-bold animate-pulse\">\r\n {progress}%\r\n </span>\r\n </div>\r\n </div>\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n transition={{ delay: 0.2 }}\r\n className=\"space-y-2\"\r\n >\r\n <p className=\"text-xl font-bold\">Almost there! ✨</p>\r\n <p className=\"text-white/80\">\r\n {isTakingLong ? \"Taking longer than usual... ⏳\" : \"Your image is uploading...\"}\r\n </p>\r\n </motion.div>\r\n </motion.div>\r\n )\r\n});\r\n\r\nconst UploadPrompt = memo(function uploadPrompt({ isDragging }: { isDragging: boolean }) {\r\n return (\r\n <motion.div\r\n className=\"text-center space-y-3 md:scale-100 border border-dashed border-white p-4 rounded-xl bg-white/10 transition-all duration-300 ease-in-out\" // Adjusted spacing and scale\r\n initial={{ opacity: 0, y: 20 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n >\r\n <motion.div\r\n className=\"w-12 h-12 mx-auto bg-white rounded-full flex items-center justify-center\"\r\n whileHover={{ scale: 1.1, rotate: 5 }}\r\n whileTap={{ scale: 0.95 }}\r\n >\r\n <svg width=\"19\" height=\"17\" viewBox=\"0 0 19 17\" className=\"text-gray-600\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M5.83203 11.6673L9.16536 8.33398M9.16536 8.33398L12.4987 11.6673M9.16536 8.33398V15.834M15.832 12.2863C16.85 11.4457 17.4987 10.1739 17.4987 8.75065C17.4987 6.21935 15.4467 4.16732 12.9154 4.16732C12.7333 4.16732 12.5629 4.07231 12.4705 3.91543C11.3837 2.07135 9.37739 0.833984 7.08203 0.833984C3.63025 0.833984 0.832031 3.6322 0.832031 7.08398C0.832031 8.80574 1.52824 10.3649 2.65449 11.4953\" stroke=\"#474C56\" strokeWidth=\"1.66667\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\r\n </svg>\r\n </motion.div>\r\n\r\n <div className=\"space-y-1\">\r\n <motion.div\r\n className=\"space-y-1 md:space-y-2\"\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n transition={{ delay: 0.2 }}\r\n >\r\n <h5>\r\n {isDragging ? (\r\n <motion.span\r\n initial={{ scale: 0.9 }}\r\n animate={{ scale: 1 }}\r\n className=\"block\"\r\n >\r\n Drop it here 🎨\r\n </motion.span>\r\n ) : (\r\n <div className=\"text-md\">\r\n <span className=\"text-[#5C48CC]\">\r\n Click to upload\r\n </span>\r\n <span>\r\n {\" \"}or drag and drop\r\n </span>\r\n </div>\r\n )}\r\n </h5>\r\n </motion.div>\r\n\r\n <motion.div\r\n className=\"flex flex-wrap justify-center gap-1 md:gap-2\"\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n transition={{ delay: 0.3 }}\r\n >\r\n <div className=\"text-md\">\r\n {['JPG', 'JPEG'].map((format) => (\r\n <Fragment key={format}>{format}{\" \"}</Fragment>\r\n ))}\r\n (Max | 10MB, Dimensions | 16:9)\r\n </div>\r\n </motion.div>\r\n </div>\r\n </motion.div>\r\n )\r\n});\r\n\r\nexport default memo(FileUpload);\r\n"],"names":["progress"],"mappings":"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"}
|