@123usmanhaider321/ui 0.1.8 → 1.0.2
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-BLoegwT6.js +60476 -0
- package/dist/index-BLoegwT6.js.map +1 -0
- package/dist/index-CPnu5V8f.js +11119 -0
- package/dist/index-CPnu5V8f.js.map +1 -0
- package/dist/index.d.ts +1 -10
- package/dist/index.es-C5pDhGOr.js +16734 -0
- package/dist/index.es-C5pDhGOr.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 +3760 -4014
- 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,464 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs, Fragment as Fragment$1 } from "react/jsx-runtime";
|
|
2
|
-
import Cropper from "react-easy-crop";
|
|
3
|
-
import { useState, useRef, useEffect, Fragment } from "react";
|
|
4
|
-
import getCroppedImage from "../../lib/cropImage.js";
|
|
5
|
-
import { getImageLuminance, calculateInitialZoom } from "../../lib/imageAnalysis.js";
|
|
6
|
-
import Modal from "../ui/Modal/index.js";
|
|
7
|
-
import { Transition, Dialog } from "@headlessui/react";
|
|
8
|
-
import { Image, X, Move, ZoomOut, ZoomIn, RotateCw, Stamp, Palette } from "lucide-react";
|
|
9
|
-
import Image$1 from "next/image";
|
|
10
|
-
import { Button } from "../Button/Button.js";
|
|
11
|
-
function ImageCropModal({
|
|
12
|
-
open,
|
|
13
|
-
imageSrc,
|
|
14
|
-
onClose,
|
|
15
|
-
onConfirm,
|
|
16
|
-
aspect = 16 / 9,
|
|
17
|
-
cropShape = "rect",
|
|
18
|
-
showRotationControl = false,
|
|
19
|
-
allowBackgroundColor = false,
|
|
20
|
-
allowBothFitting = false,
|
|
21
|
-
hideWatermark = false
|
|
22
|
-
}) {
|
|
23
|
-
const getLuminance = (hex) => {
|
|
24
|
-
const c = hex.substring(1);
|
|
25
|
-
const rgb = parseInt(c, 16);
|
|
26
|
-
const r = rgb >> 16 & 255;
|
|
27
|
-
const g = rgb >> 8 & 255;
|
|
28
|
-
const b = rgb >> 0 & 255;
|
|
29
|
-
return 0.2126 * r + 0.7152 * g + 0.0722 * b;
|
|
30
|
-
};
|
|
31
|
-
const [crop, setCrop] = useState({ x: 0, y: 0 });
|
|
32
|
-
const [rotation, setRotation] = useState(0);
|
|
33
|
-
const [zoom, setZoom] = useState(1);
|
|
34
|
-
const [croppedAreaPixels, setCroppedAreaPixels] = useState(null);
|
|
35
|
-
const [loading, setLoading] = useState(false);
|
|
36
|
-
const [backgroundColor, setBackgroundColor] = useState("#ffffff");
|
|
37
|
-
const [watermarkPos, setWatermarkPos] = useState({ x: 20, y: 20 });
|
|
38
|
-
const [isDraggingWatermark, setIsDraggingWatermark] = useState(false);
|
|
39
|
-
const [watermarkTheme, setWatermarkTheme] = useState("auto");
|
|
40
|
-
const dragStart = useRef({ x: 0, y: 0 });
|
|
41
|
-
const [cropSize, setCropSize] = useState(void 0);
|
|
42
|
-
const [mediaSize, setMediaSize] = useState(void 0);
|
|
43
|
-
const [isDarkImage, setIsDarkImage] = useState(false);
|
|
44
|
-
const containerRef = useRef(null);
|
|
45
|
-
const watermarkRef = useRef(null);
|
|
46
|
-
const initializedRef = useRef(false);
|
|
47
|
-
useEffect(() => {
|
|
48
|
-
if (imageSrc) {
|
|
49
|
-
getImageLuminance(imageSrc).then((brightness) => {
|
|
50
|
-
setIsDarkImage(brightness < 128);
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
}, [imageSrc]);
|
|
54
|
-
useEffect(() => {
|
|
55
|
-
const calculateCropSize = () => {
|
|
56
|
-
if (!containerRef.current) return;
|
|
57
|
-
const { clientWidth, clientHeight } = containerRef.current;
|
|
58
|
-
const fitRatio = aspect;
|
|
59
|
-
const containerRatio = clientWidth / clientHeight;
|
|
60
|
-
let width, height;
|
|
61
|
-
if (containerRatio > fitRatio) {
|
|
62
|
-
height = clientHeight;
|
|
63
|
-
width = height * fitRatio;
|
|
64
|
-
} else {
|
|
65
|
-
width = clientWidth;
|
|
66
|
-
height = width / fitRatio;
|
|
67
|
-
}
|
|
68
|
-
const newCropSize = { width: width * 0.9, height: height * 0.9 };
|
|
69
|
-
setCropSize(newCropSize);
|
|
70
|
-
if (mediaSize && !initializedRef.current) {
|
|
71
|
-
const containerRect = containerRef.current.getBoundingClientRect();
|
|
72
|
-
const containerW = containerRect.width;
|
|
73
|
-
const containerH = containerRect.height;
|
|
74
|
-
const targetZoom = calculateInitialZoom({
|
|
75
|
-
containerSize: { width: containerW, height: containerH },
|
|
76
|
-
mediaSize: { naturalWidth: mediaSize.naturalWidth, naturalHeight: mediaSize.naturalHeight },
|
|
77
|
-
cropSize: newCropSize,
|
|
78
|
-
allowBothFitting
|
|
79
|
-
});
|
|
80
|
-
setZoom(targetZoom);
|
|
81
|
-
const wmWidth = newCropSize.width * 0.15;
|
|
82
|
-
const wmHeight = wmWidth / 3;
|
|
83
|
-
setWatermarkPos({
|
|
84
|
-
x: newCropSize.width - wmWidth - 20,
|
|
85
|
-
// 20px padding
|
|
86
|
-
y: newCropSize.height - wmHeight - 20
|
|
87
|
-
});
|
|
88
|
-
initializedRef.current = true;
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
const observer = new ResizeObserver(() => {
|
|
92
|
-
calculateCropSize();
|
|
93
|
-
});
|
|
94
|
-
if (containerRef.current) {
|
|
95
|
-
observer.observe(containerRef.current);
|
|
96
|
-
}
|
|
97
|
-
return () => {
|
|
98
|
-
observer.disconnect();
|
|
99
|
-
};
|
|
100
|
-
}, [aspect, open, mediaSize]);
|
|
101
|
-
useEffect(() => {
|
|
102
|
-
const handleMouseMove = (e) => {
|
|
103
|
-
if (!isDraggingWatermark || !cropSize) return;
|
|
104
|
-
const dx = e.clientX - dragStart.current.x;
|
|
105
|
-
const dy = e.clientY - dragStart.current.y;
|
|
106
|
-
setWatermarkPos((prev) => {
|
|
107
|
-
const newX = prev.x + dx;
|
|
108
|
-
const newY = prev.y + dy;
|
|
109
|
-
const watermarkWidth = cropSize.width * 0.15;
|
|
110
|
-
const ratio = watermarkRef.current ? watermarkRef.current.naturalWidth / watermarkRef.current.naturalHeight : 1;
|
|
111
|
-
const watermarkHeight = watermarkWidth / ratio;
|
|
112
|
-
return {
|
|
113
|
-
x: Math.min(Math.max(0, newX), cropSize.width - watermarkWidth),
|
|
114
|
-
y: Math.min(Math.max(0, newY), cropSize.height - watermarkHeight)
|
|
115
|
-
};
|
|
116
|
-
});
|
|
117
|
-
dragStart.current = { x: e.clientX, y: e.clientY };
|
|
118
|
-
};
|
|
119
|
-
const handleMouseUp = () => {
|
|
120
|
-
setIsDraggingWatermark(false);
|
|
121
|
-
};
|
|
122
|
-
if (isDraggingWatermark) {
|
|
123
|
-
window.addEventListener("mousemove", handleMouseMove);
|
|
124
|
-
window.addEventListener("mouseup", handleMouseUp);
|
|
125
|
-
}
|
|
126
|
-
return () => {
|
|
127
|
-
window.removeEventListener("mousemove", handleMouseMove);
|
|
128
|
-
window.removeEventListener("mouseup", handleMouseUp);
|
|
129
|
-
};
|
|
130
|
-
}, [isDraggingWatermark, cropSize]);
|
|
131
|
-
const cropOffset = containerRef.current && cropSize ? {
|
|
132
|
-
x: (containerRef.current.clientWidth - cropSize.width) / 2,
|
|
133
|
-
y: (containerRef.current.clientHeight - cropSize.height) / 2
|
|
134
|
-
} : { x: 0, y: 0 };
|
|
135
|
-
const getWatermarkUrl = () => {
|
|
136
|
-
if (watermarkTheme === "dark") return "/images/logo/login.svg";
|
|
137
|
-
if (watermarkTheme === "light") return "/logos/ticketly-logo.svg";
|
|
138
|
-
const shouldUseLightLogo = allowBackgroundColor ? getLuminance(backgroundColor) <= 128 : isDarkImage;
|
|
139
|
-
return shouldUseLightLogo ? "/logos/ticketly-logo.svg" : "/images/logo/login.svg";
|
|
140
|
-
};
|
|
141
|
-
const watermarkUrl = getWatermarkUrl();
|
|
142
|
-
const handleSave = async () => {
|
|
143
|
-
var _a, _b;
|
|
144
|
-
if (!croppedAreaPixels) return;
|
|
145
|
-
try {
|
|
146
|
-
setLoading(true);
|
|
147
|
-
let currentBlob = null;
|
|
148
|
-
let currentMaxDim = 2500;
|
|
149
|
-
let currentQuality = 0.85;
|
|
150
|
-
let attempt = 0;
|
|
151
|
-
const maxAttempts = 3;
|
|
152
|
-
while (attempt < maxAttempts) {
|
|
153
|
-
console.log(`[Crop Export] Attempt ${attempt + 1}: Dim=${currentMaxDim}, Qual=${currentQuality}`);
|
|
154
|
-
currentBlob = await getCroppedImage(
|
|
155
|
-
imageSrc,
|
|
156
|
-
croppedAreaPixels,
|
|
157
|
-
rotation,
|
|
158
|
-
void 0,
|
|
159
|
-
backgroundColor,
|
|
160
|
-
hideWatermark ? void 0 : {
|
|
161
|
-
url: watermarkUrl,
|
|
162
|
-
// Calculate relative position in the final cropped image
|
|
163
|
-
x: watermarkPos.x / ((cropSize == null ? void 0 : cropSize.width) || 1) * croppedAreaPixels.width,
|
|
164
|
-
y: watermarkPos.y / ((cropSize == null ? void 0 : cropSize.height) || 1) * croppedAreaPixels.height,
|
|
165
|
-
// Width is 15% of the final cropped image width
|
|
166
|
-
width: croppedAreaPixels.width * 0.15,
|
|
167
|
-
// Calculate height based on aspect ratio
|
|
168
|
-
height: croppedAreaPixels.width * 0.15 / ((((_a = watermarkRef.current) == null ? void 0 : _a.naturalWidth) || 100) / (((_b = watermarkRef.current) == null ? void 0 : _b.naturalHeight) || 100))
|
|
169
|
-
},
|
|
170
|
-
allowBackgroundColor ? void 0 : true,
|
|
171
|
-
currentMaxDim,
|
|
172
|
-
currentQuality
|
|
173
|
-
);
|
|
174
|
-
if (currentBlob.size <= 4.5 * 1024 * 1024) {
|
|
175
|
-
break;
|
|
176
|
-
}
|
|
177
|
-
attempt++;
|
|
178
|
-
if (attempt === 1) {
|
|
179
|
-
currentMaxDim = 2e3;
|
|
180
|
-
currentQuality = 0.75;
|
|
181
|
-
} else if (attempt === 2) {
|
|
182
|
-
currentMaxDim = 1600;
|
|
183
|
-
currentQuality = 0.65;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
if (currentBlob) {
|
|
187
|
-
onConfirm(currentBlob);
|
|
188
|
-
onClose();
|
|
189
|
-
}
|
|
190
|
-
} catch (e) {
|
|
191
|
-
console.error(e);
|
|
192
|
-
} finally {
|
|
193
|
-
setLoading(false);
|
|
194
|
-
}
|
|
195
|
-
};
|
|
196
|
-
return /* @__PURE__ */ jsx(Modal, { open, handleClose: onClose, children: /* @__PURE__ */ jsx("div", { className: "fixed inset-0 overflow-y-auto", children: /* @__PURE__ */ jsx("div", { className: "flex min-h-full items-center justify-center px-4 py-2 text-center", children: /* @__PURE__ */ jsx(
|
|
197
|
-
Transition.Child,
|
|
198
|
-
{
|
|
199
|
-
as: Fragment,
|
|
200
|
-
enter: "ease-out duration-300",
|
|
201
|
-
enterFrom: "opacity-0 scale-95",
|
|
202
|
-
enterTo: "opacity-100 scale-100",
|
|
203
|
-
leave: "ease-in duration-200",
|
|
204
|
-
leaveFrom: "opacity-100 scale-100",
|
|
205
|
-
leaveTo: "opacity-0 scale-95",
|
|
206
|
-
children: /* @__PURE__ */ jsxs(Dialog.Panel, { className: "w-full max-w-5xl transform overflow-hidden rounded-2xl bg-white text-left align-middle shadow-xl transition-all", children: [
|
|
207
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between border-b border-grey-200 px-6 py-4", children: [
|
|
208
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
209
|
-
/* @__PURE__ */ jsx("div", { className: "p-2 bg-primaryx-50 rounded-lg", children: /* @__PURE__ */ jsx(Image, { className: "w-5 h-5 text-primaryx-600" }) }),
|
|
210
|
-
/* @__PURE__ */ jsx(Dialog.Title, { className: "text-lg font-semibold text-grey-900", children: cropShape === "round" ? "Crop profile picture" : "Crop image" })
|
|
211
|
-
] }),
|
|
212
|
-
/* @__PURE__ */ jsx(
|
|
213
|
-
"button",
|
|
214
|
-
{
|
|
215
|
-
onClick: onClose,
|
|
216
|
-
className: "rounded-lg p-2 text-grey-400 hover:bg-grey-100 hover:text-grey-500 transition-colors focus:outline-none",
|
|
217
|
-
children: /* @__PURE__ */ jsx(X, { className: "w-5 h-5" })
|
|
218
|
-
}
|
|
219
|
-
)
|
|
220
|
-
] }),
|
|
221
|
-
/* @__PURE__ */ jsx("div", { className: "p-0", children: /* @__PURE__ */ jsxs(
|
|
222
|
-
"div",
|
|
223
|
-
{
|
|
224
|
-
ref: containerRef,
|
|
225
|
-
className: "relative h-[70vh] w-full bg-grey-900",
|
|
226
|
-
children: [
|
|
227
|
-
!allowBackgroundColor && /* @__PURE__ */ jsxs("div", { className: "absolute inset-0 overflow-hidden pointer-events-none", children: [
|
|
228
|
-
/* @__PURE__ */ jsx(
|
|
229
|
-
Image$1,
|
|
230
|
-
{
|
|
231
|
-
src: imageSrc,
|
|
232
|
-
className: "w-full h-full object-cover blur-[20px] scale-110 opacity-70",
|
|
233
|
-
alt: "blur-bg",
|
|
234
|
-
width: 1,
|
|
235
|
-
height: 1
|
|
236
|
-
}
|
|
237
|
-
),
|
|
238
|
-
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 bg-black/30" })
|
|
239
|
-
] }),
|
|
240
|
-
/* @__PURE__ */ jsx(
|
|
241
|
-
Cropper,
|
|
242
|
-
{
|
|
243
|
-
image: imageSrc,
|
|
244
|
-
crop,
|
|
245
|
-
rotation,
|
|
246
|
-
zoom,
|
|
247
|
-
aspect,
|
|
248
|
-
cropShape,
|
|
249
|
-
onCropChange: setCrop,
|
|
250
|
-
onRotationChange: setRotation,
|
|
251
|
-
onZoomChange: setZoom,
|
|
252
|
-
onMediaLoaded: (media) => {
|
|
253
|
-
setMediaSize(media);
|
|
254
|
-
initializedRef.current = false;
|
|
255
|
-
},
|
|
256
|
-
maxZoom: 3,
|
|
257
|
-
minZoom: 0.1,
|
|
258
|
-
zoomSpeed: 0.01,
|
|
259
|
-
onCropComplete: (_, areaPixels) => setCroppedAreaPixels(areaPixels),
|
|
260
|
-
cropSize,
|
|
261
|
-
restrictPosition: false,
|
|
262
|
-
objectFit: "contain",
|
|
263
|
-
style: {
|
|
264
|
-
containerStyle: {
|
|
265
|
-
background: allowBackgroundColor ? backgroundColor : "transparent",
|
|
266
|
-
width: "100%"
|
|
267
|
-
},
|
|
268
|
-
cropAreaStyle: {
|
|
269
|
-
border: "2px solid white",
|
|
270
|
-
boxShadow: "0 0 0 9999em rgba(0, 0, 0, 0.5)"
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
),
|
|
275
|
-
!hideWatermark && cropSize && /* @__PURE__ */ jsx(
|
|
276
|
-
"div",
|
|
277
|
-
{
|
|
278
|
-
className: "absolute pointer-events-none",
|
|
279
|
-
style: {
|
|
280
|
-
left: cropOffset.x,
|
|
281
|
-
top: cropOffset.y,
|
|
282
|
-
width: cropSize.width,
|
|
283
|
-
height: cropSize.height,
|
|
284
|
-
border: "1px dashed rgba(255,255,255,0.3)"
|
|
285
|
-
},
|
|
286
|
-
children: /* @__PURE__ */ jsxs(
|
|
287
|
-
"div",
|
|
288
|
-
{
|
|
289
|
-
className: "absolute cursor-move select-none pointer-events-auto group",
|
|
290
|
-
style: {
|
|
291
|
-
left: watermarkPos.x,
|
|
292
|
-
top: watermarkPos.y,
|
|
293
|
-
width: `${cropSize.width * 0.15}px`
|
|
294
|
-
// 15% of crop width
|
|
295
|
-
},
|
|
296
|
-
onMouseDown: (e) => {
|
|
297
|
-
e.preventDefault();
|
|
298
|
-
setIsDraggingWatermark(true);
|
|
299
|
-
dragStart.current = { x: e.clientX, y: e.clientY };
|
|
300
|
-
},
|
|
301
|
-
children: [
|
|
302
|
-
/* @__PURE__ */ jsxs("div", { className: "absolute -top-8 left-1/2 -translate-x-1/2 flex items-center gap-1.5 px-2.5 py-1 bg-grey-900/90 text-white text-[10px] font-medium rounded-full transition-all duration-200 pointer-events-none whitespace-nowrap shadow-lg backdrop-blur-sm", children: [
|
|
303
|
-
/* @__PURE__ */ jsx(Move, { className: "w-3 h-3" }),
|
|
304
|
-
/* @__PURE__ */ jsx("span", { children: "Drag to move" })
|
|
305
|
-
] }),
|
|
306
|
-
/* @__PURE__ */ jsxs("div", { className: "relative rounded transition-all duration-200 group-hover:ring-2 group-hover:ring-primaryx-500/50 group-hover:scale-[1.02]", children: [
|
|
307
|
-
/* @__PURE__ */ jsx(
|
|
308
|
-
Image$1,
|
|
309
|
-
{
|
|
310
|
-
ref: watermarkRef,
|
|
311
|
-
src: watermarkUrl,
|
|
312
|
-
alt: "Watermark",
|
|
313
|
-
className: "w-full h-auto opacity-90 block",
|
|
314
|
-
width: 100,
|
|
315
|
-
height: 100
|
|
316
|
-
}
|
|
317
|
-
),
|
|
318
|
-
/* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-200", children: /* @__PURE__ */ jsx("div", { className: "bg-black/20 p-1 rounded-full backdrop-blur-[1px]", children: /* @__PURE__ */ jsx(Move, { className: "w-4 h-4 text-white drop-shadow-md" }) }) })
|
|
319
|
-
] })
|
|
320
|
-
]
|
|
321
|
-
}
|
|
322
|
-
)
|
|
323
|
-
}
|
|
324
|
-
)
|
|
325
|
-
]
|
|
326
|
-
}
|
|
327
|
-
) }),
|
|
328
|
-
/* @__PURE__ */ jsxs("div", { className: "bg-white px-6 py-5 border-t border-grey-100 flex flex-col md:flex-row md:items-center gap-6", children: [
|
|
329
|
-
/* @__PURE__ */ jsxs("div", { className: "flex-1 w-full space-y-2", children: [
|
|
330
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
331
|
-
/* @__PURE__ */ jsx(ZoomOut, { className: "w-4 h-4 text-grey-400" }),
|
|
332
|
-
/* @__PURE__ */ jsx(
|
|
333
|
-
"input",
|
|
334
|
-
{
|
|
335
|
-
type: "range",
|
|
336
|
-
min: 0.7,
|
|
337
|
-
max: 3,
|
|
338
|
-
step: 0.01,
|
|
339
|
-
value: zoom,
|
|
340
|
-
onChange: (e) => setZoom(Number(e.target.value)),
|
|
341
|
-
className: "flex-1 h-1.5 bg-grey-100 rounded-lg appearance-none cursor-pointer accent-primaryx-600 hover:accent-primaryx-700 focus:outline-none focus:ring-2 focus:ring-primaryx-500/20"
|
|
342
|
-
}
|
|
343
|
-
),
|
|
344
|
-
/* @__PURE__ */ jsx(ZoomIn, { className: "w-4 h-4 text-grey-400" })
|
|
345
|
-
] }),
|
|
346
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
347
|
-
/* @__PURE__ */ jsx("label", { className: "text-xs font-semibold text-grey-500 uppercase tracking-wider flex items-center gap-2", children: "Zoom" }),
|
|
348
|
-
/* @__PURE__ */ jsxs("span", { className: "text-xs font-mono text-grey-400 bg-grey-50 px-2 py-0.5 rounded", children: [
|
|
349
|
-
Math.round(zoom * 100),
|
|
350
|
-
"%"
|
|
351
|
-
] })
|
|
352
|
-
] })
|
|
353
|
-
] }),
|
|
354
|
-
showRotationControl && /* @__PURE__ */ jsxs("div", { className: "flex-1 w-full space-y-2", children: [
|
|
355
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
356
|
-
/* @__PURE__ */ jsxs("label", { className: "text-xs font-semibold text-grey-500 uppercase tracking-wider flex items-center gap-2", children: [
|
|
357
|
-
/* @__PURE__ */ jsx(RotateCw, { className: "w-3.5 h-3.5" }),
|
|
358
|
-
"Rotate"
|
|
359
|
-
] }),
|
|
360
|
-
/* @__PURE__ */ jsxs("span", { className: "text-xs font-mono text-grey-400 bg-grey-50 px-2 py-0.5 rounded", children: [
|
|
361
|
-
rotation,
|
|
362
|
-
"°"
|
|
363
|
-
] })
|
|
364
|
-
] }),
|
|
365
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
366
|
-
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-grey-400 font-medium", children: "0°" }),
|
|
367
|
-
/* @__PURE__ */ jsx(
|
|
368
|
-
"input",
|
|
369
|
-
{
|
|
370
|
-
type: "range",
|
|
371
|
-
min: 0,
|
|
372
|
-
max: 360,
|
|
373
|
-
step: 1,
|
|
374
|
-
value: rotation,
|
|
375
|
-
onChange: (e) => setRotation(Number(e.target.value)),
|
|
376
|
-
className: "flex-1 h-1.5 bg-grey-100 rounded-lg appearance-none cursor-pointer accent-primaryx-600 hover:accent-primaryx-700 focus:outline-none focus:ring-2 focus:ring-primaryx-500/20"
|
|
377
|
-
}
|
|
378
|
-
),
|
|
379
|
-
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-grey-400 font-medium", children: "360°" })
|
|
380
|
-
] })
|
|
381
|
-
] }),
|
|
382
|
-
/* @__PURE__ */ jsx("div", { className: "hidden md:block w-px h-10 bg-grey-200" }),
|
|
383
|
-
!hideWatermark && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5 min-w-[140px]", children: [
|
|
384
|
-
/* @__PURE__ */ jsxs("label", { className: "text-xs font-semibold text-grey-500 uppercase tracking-wider flex items-center gap-2", children: [
|
|
385
|
-
/* @__PURE__ */ jsx(Stamp, { className: "w-3.5 h-3.5" }),
|
|
386
|
-
"Watermark"
|
|
387
|
-
] }),
|
|
388
|
-
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1 bg-grey-50 p-1 rounded-lg border border-grey-200", children: ["auto", "light", "dark"].map((theme) => /* @__PURE__ */ jsx(
|
|
389
|
-
"button",
|
|
390
|
-
{
|
|
391
|
-
onClick: () => setWatermarkTheme(theme),
|
|
392
|
-
className: `
|
|
393
|
-
flex-1 px-2 py-1 text-[10px] font-medium rounded-md transition-all uppercase
|
|
394
|
-
${watermarkTheme === theme ? "bg-white text-grey-900 shadow-sm ring-1 ring-black/5" : "text-grey-500 hover:text-grey-700 hover:bg-grey-100"}
|
|
395
|
-
`,
|
|
396
|
-
children: theme
|
|
397
|
-
},
|
|
398
|
-
theme
|
|
399
|
-
)) })
|
|
400
|
-
] }),
|
|
401
|
-
allowBackgroundColor && /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
402
|
-
/* @__PURE__ */ jsx("div", { className: "hidden md:block w-px h-10 bg-grey-200" }),
|
|
403
|
-
/* @__PURE__ */ jsxs("label", { htmlFor: "cropper-background-color", className: "flex items-center gap-3 p-1.5 pr-4 rounded-xl border border-grey-200 bg-white shadow-sm hover:border-grey-300 transition-colors cursor-pointer group relative overflow-hidden", children: [
|
|
404
|
-
/* @__PURE__ */ jsx(
|
|
405
|
-
"div",
|
|
406
|
-
{
|
|
407
|
-
className: "w-8 h-8 rounded-lg border border-grey-200 shadow-inner flex items-center justify-center overflow-hidden relative",
|
|
408
|
-
style: { backgroundColor },
|
|
409
|
-
children: /* @__PURE__ */ jsx(
|
|
410
|
-
"input",
|
|
411
|
-
{
|
|
412
|
-
type: "color",
|
|
413
|
-
id: "cropper-background-color",
|
|
414
|
-
value: backgroundColor,
|
|
415
|
-
onChange: (e) => setBackgroundColor(e.target.value),
|
|
416
|
-
className: "absolute inset-0 opacity-0 w-full h-full cursor-pointer p-0 border-0"
|
|
417
|
-
}
|
|
418
|
-
)
|
|
419
|
-
}
|
|
420
|
-
),
|
|
421
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-col pointer-events-none", children: [
|
|
422
|
-
/* @__PURE__ */ jsx("span", { className: "text-xs font-semibold text-grey-700 group-hover:text-grey-900", children: "Background" }),
|
|
423
|
-
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-grey-400 font-mono uppercase", children: backgroundColor })
|
|
424
|
-
] }),
|
|
425
|
-
/* @__PURE__ */ jsx(Palette, { className: "w-4 h-4 text-grey-400 ml-2" })
|
|
426
|
-
] })
|
|
427
|
-
] }),
|
|
428
|
-
/* @__PURE__ */ jsx("div", { className: "hidden md:block w-px h-10 bg-grey-200" }),
|
|
429
|
-
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-3", children: [
|
|
430
|
-
/* @__PURE__ */ jsx(
|
|
431
|
-
"button",
|
|
432
|
-
{
|
|
433
|
-
type: "button",
|
|
434
|
-
onClick: onClose,
|
|
435
|
-
className: "rounded-lg border border-grey-300 bg-white px-4 py-2 text-sm font-medium text-grey-700 hover:bg-grey-50 focus:outline-none focus:ring-2 focus:ring-primaryx-500 focus:ring-offset-2 transition-all shadow-sm",
|
|
436
|
-
children: "Cancel"
|
|
437
|
-
}
|
|
438
|
-
),
|
|
439
|
-
/* @__PURE__ */ jsx(
|
|
440
|
-
Button,
|
|
441
|
-
{
|
|
442
|
-
type: "button",
|
|
443
|
-
onClick: handleSave,
|
|
444
|
-
disabled: loading,
|
|
445
|
-
className: "relative inline-flex items-center justify-center rounded-lg px-4 py-2 text-sm font-medium transition-all focus:outline-none focus:ring-2 focus:ring-primaryx-500 focus:ring-offset-2 disabled:opacity-70 disabled:cursor-not-allowed",
|
|
446
|
-
children: loading ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
447
|
-
/* @__PURE__ */ jsxs("svg", { className: "animate-spin -ml-1 mr-2 h-4 w-4 text-white", fill: "none", viewBox: "0 0 24 24", children: [
|
|
448
|
-
/* @__PURE__ */ jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }),
|
|
449
|
-
/* @__PURE__ */ jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })
|
|
450
|
-
] }),
|
|
451
|
-
"Processing..."
|
|
452
|
-
] }) : "Apply Crop"
|
|
453
|
-
}
|
|
454
|
-
)
|
|
455
|
-
] })
|
|
456
|
-
] })
|
|
457
|
-
] })
|
|
458
|
-
}
|
|
459
|
-
) }) }) });
|
|
460
|
-
}
|
|
461
|
-
export {
|
|
462
|
-
ImageCropModal as default
|
|
463
|
-
};
|
|
464
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/components/ImageCropModal/index.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\r\n\"use client\"\r\n\r\nimport Cropper from \"react-easy-crop\"\r\nimport { useState, Fragment, useRef, useEffect } from \"react\"\r\nimport getCroppedImage from \"@/lib/cropImage\"\r\nimport { getImageLuminance, calculateInitialZoom } from \"@/lib/imageAnalysis\"\r\nimport Modal from \"@/components/ui/Modal\"\r\nimport { Dialog, Transition } from \"@headlessui/react\"\r\nimport { X, ZoomIn, ZoomOut, Image as ImageIcon, RotateCw, Palette, Stamp, Move } from \"lucide-react\"\r\nimport Image from \"next/image\"\r\nimport { Button } from \"../Button\"\r\n\r\ninterface Props {\r\n open: boolean\r\n imageSrc: string\r\n onClose: () => void\r\n onConfirm: (blob: Blob) => void\r\n aspect?: number\r\n cropShape?: 'rect' | 'round'\r\n showRotationControl?: boolean\r\n allowBackgroundColor?: boolean\r\n allowBothFitting?: boolean\r\n hideWatermark?: boolean\r\n}\r\n\r\nexport default function ImageCropModal({\r\n open,\r\n imageSrc,\r\n onClose,\r\n onConfirm,\r\n aspect = 16 / 9,\r\n cropShape = 'rect',\r\n showRotationControl = false,\r\n allowBackgroundColor = false,\r\n allowBothFitting = false,\r\n hideWatermark = false,\r\n}: Props) {\r\n // Helper to calculate luminance\r\n const getLuminance = (hex: string) => {\r\n const c = hex.substring(1) // strip #\r\n const rgb = parseInt(c, 16) // convert rrggbb to decimal\r\n const r = (rgb >> 16) & 0xff // extract red\r\n const g = (rgb >> 8) & 0xff // extract green\r\n const b = (rgb >> 0) & 0xff // extract blue\r\n\r\n // sRGB luma\r\n return 0.2126 * r + 0.7152 * g + 0.0722 * b\r\n }\r\n const [crop, setCrop] = useState({ x: 0, y: 0 })\r\n const [rotation, setRotation] = useState(0)\r\n const [zoom, setZoom] = useState(1)\r\n const [croppedAreaPixels, setCroppedAreaPixels] = useState<any>(null)\r\n const [loading, setLoading] = useState(false)\r\n\r\n const [backgroundColor, setBackgroundColor] = useState('#ffffff')\r\n const [watermarkPos, setWatermarkPos] = useState({ x: 20, y: 20 })\r\n const [isDraggingWatermark, setIsDraggingWatermark] = useState(false)\r\n const [watermarkTheme, setWatermarkTheme] = useState<'auto' | 'dark' | 'light'>('auto')\r\n const dragStart = useRef({ x: 0, y: 0 })\r\n\r\n // State to force the crop box to fill the container\r\n const [cropSize, setCropSize] = useState<{ width: number; height: number } | undefined>(undefined)\r\n const [mediaSize, setMediaSize] = useState<{ width: number; height: number; naturalWidth: number; naturalHeight: number } | undefined>(undefined)\r\n const [isDarkImage, setIsDarkImage] = useState(false)\r\n const containerRef = useRef<HTMLDivElement>(null)\r\n const watermarkRef = useRef<HTMLImageElement>(null)\r\n const initializedRef = useRef(false)\r\n\r\n // Calculate luminance when image changes\r\n useEffect(() => {\r\n if (imageSrc) {\r\n getImageLuminance(imageSrc).then((brightness) => {\r\n setIsDarkImage(brightness < 128)\r\n })\r\n }\r\n }, [imageSrc])\r\n\r\n // Calculate crop size based on container dimensions to ensure it maximizes space relative to parent\r\n // Also calculate initial zoom to cover\r\n useEffect(() => {\r\n const calculateCropSize = () => {\r\n if (!containerRef.current) return\r\n const { clientWidth, clientHeight } = containerRef.current\r\n\r\n // Calculate dimensions that fit within the container while maintaining aspect ratio\r\n const fitRatio = aspect\r\n const containerRatio = clientWidth / clientHeight\r\n\r\n let width, height;\r\n\r\n if (containerRatio > fitRatio) {\r\n // Container is wider than the aspect ratio -> constrain by height\r\n height = clientHeight\r\n width = height * fitRatio\r\n } else {\r\n // Container is taller than the aspect ratio -> constrain by width\r\n width = clientWidth\r\n height = width / fitRatio\r\n }\r\n\r\n // Calculate new crop size\r\n const newCropSize = { width: width * 0.9, height: height * 0.9 }\r\n setCropSize(newCropSize)\r\n\r\n // Calculate Auto-Zoom to Cover if media is loaded\r\n if (mediaSize && !initializedRef.current) {\r\n\r\n // REWRITTEN ZOOM LOGIC\r\n // Goal: Calculate precise zoom to ensure image fills the crop box.\r\n\r\n // 1. Get exact container geometry\r\n const containerRect = containerRef.current.getBoundingClientRect()\r\n const containerW = containerRect.width\r\n const containerH = containerRect.height\r\n\r\n // 2. Get exact image geometry\r\n\r\n // 3. Determine how the image is displayed at Zoom=1 (fit to container)\r\n // react-easy-crop uses 'contain' logic: fits the largest dimension\r\n const targetZoom = calculateInitialZoom({\r\n containerSize: { width: containerW, height: containerH },\r\n mediaSize: { naturalWidth: mediaSize.naturalWidth, naturalHeight: mediaSize.naturalHeight },\r\n cropSize: newCropSize,\r\n allowBothFitting\r\n })\r\n\r\n setZoom(targetZoom)\r\n\r\n // Initial Watermark Position: Right Bottom\r\n // We need cropSize to determine offsets.\r\n const wmWidth = newCropSize.width * 0.15\r\n // Approx height? \r\n const wmHeight = wmWidth / 3 // roughly 3:1 aspect for logo\r\n\r\n setWatermarkPos({\r\n x: newCropSize.width - wmWidth - 20, // 20px padding\r\n y: newCropSize.height - wmHeight - 20\r\n })\r\n\r\n initializedRef.current = true\r\n }\r\n }\r\n\r\n // Use ResizeObserver to handle window resizes or modal transitions\r\n const observer = new ResizeObserver(() => {\r\n calculateCropSize()\r\n })\r\n\r\n if (containerRef.current) {\r\n observer.observe(containerRef.current)\r\n }\r\n\r\n return () => {\r\n observer.disconnect()\r\n }\r\n }, [aspect, open, mediaSize])\r\n\r\n useEffect(() => {\r\n const handleMouseMove = (e: MouseEvent) => {\r\n if (!isDraggingWatermark || !cropSize) return\r\n\r\n const dx = e.clientX - dragStart.current.x\r\n const dy = e.clientY - dragStart.current.y\r\n\r\n setWatermarkPos(prev => {\r\n const newX = prev.x + dx\r\n const newY = prev.y + dy\r\n\r\n // Constrain to crop box\r\n const watermarkWidth = cropSize.width * 0.15 // 15% of crop width\r\n // Maintain aspect ratio of watermark for height constraint\r\n // We don't have exact height here easily without loading image meta, but we can approximate or use ref\r\n const ratio = watermarkRef.current ? watermarkRef.current.naturalWidth / watermarkRef.current.naturalHeight : 1\r\n const watermarkHeight = watermarkWidth / ratio\r\n\r\n return {\r\n x: Math.min(Math.max(0, newX), cropSize.width - watermarkWidth),\r\n y: Math.min(Math.max(0, newY), cropSize.height - watermarkHeight)\r\n }\r\n })\r\n\r\n dragStart.current = { x: e.clientX, y: e.clientY }\r\n }\r\n\r\n const handleMouseUp = () => {\r\n setIsDraggingWatermark(false)\r\n }\r\n\r\n if (isDraggingWatermark) {\r\n window.addEventListener('mousemove', handleMouseMove)\r\n window.addEventListener('mouseup', handleMouseUp)\r\n }\r\n\r\n return () => {\r\n window.removeEventListener('mousemove', handleMouseMove)\r\n window.removeEventListener('mouseup', handleMouseUp)\r\n }\r\n }, [isDraggingWatermark, cropSize])\r\n\r\n // Calculate offset to position watermark over the centered crop area\r\n const cropOffset = containerRef.current && cropSize ? {\r\n x: (containerRef.current.clientWidth - cropSize.width) / 2,\r\n y: (containerRef.current.clientHeight - cropSize.height) / 2\r\n } : { x: 0, y: 0 }\r\n\r\n // Dynamic watermark based on background contrast\r\n const getWatermarkUrl = () => {\r\n if (watermarkTheme === 'dark') return '/images/logo/login.svg'\r\n if (watermarkTheme === 'light') return '/logos/ticketly-logo.svg'\r\n\r\n // Auto logic\r\n const shouldUseLightLogo = allowBackgroundColor\r\n ? getLuminance(backgroundColor) <= 128 // Dark BG -> Light Logo\r\n : isDarkImage // Dark Image -> Light Logo\r\n\r\n return shouldUseLightLogo\r\n ? '/logos/ticketly-logo.svg' // Light/White Logo\r\n : '/images/logo/login.svg' // Dark/Black Logo\r\n }\r\n\r\n const watermarkUrl = getWatermarkUrl()\r\n\r\n const handleSave = async () => {\r\n if (!croppedAreaPixels) return\r\n try {\r\n setLoading(true)\r\n\r\n let currentBlob: Blob | null = null;\r\n let currentMaxDim = 2500;\r\n let currentQuality = 0.85;\r\n let attempt = 0;\r\n const maxAttempts = 3;\r\n\r\n while (attempt < maxAttempts) {\r\n console.log(`[Crop Export] Attempt ${attempt + 1}: Dim=${currentMaxDim}, Qual=${currentQuality}`);\r\n\r\n currentBlob = await getCroppedImage(\r\n imageSrc,\r\n croppedAreaPixels,\r\n rotation,\r\n undefined,\r\n backgroundColor,\r\n hideWatermark ? undefined : {\r\n url: watermarkUrl,\r\n // Calculate relative position in the final cropped image\r\n x: (watermarkPos.x / (cropSize?.width || 1)) * croppedAreaPixels.width,\r\n y: (watermarkPos.y / (cropSize?.height || 1)) * croppedAreaPixels.height,\r\n // Width is 15% of the final cropped image width\r\n width: croppedAreaPixels.width * 0.15,\r\n // Calculate height based on aspect ratio\r\n height: (croppedAreaPixels.width * 0.15) / ((watermarkRef.current?.naturalWidth || 100) / (watermarkRef.current?.naturalHeight || 100))\r\n },\r\n allowBackgroundColor ? undefined : true,\r\n currentMaxDim,\r\n currentQuality\r\n )\r\n\r\n // If blob is under 4.5MB, we are good\r\n if (currentBlob.size <= 4.5 * 1024 * 1024) {\r\n break;\r\n }\r\n\r\n // If still too large, reduce settings for next attempt\r\n attempt++;\r\n if (attempt === 1) {\r\n currentMaxDim = 2000;\r\n currentQuality = 0.75;\r\n } else if (attempt === 2) {\r\n currentMaxDim = 1600;\r\n currentQuality = 0.65;\r\n }\r\n }\r\n\r\n if (currentBlob) {\r\n onConfirm(currentBlob)\r\n onClose()\r\n }\r\n } catch (e) {\r\n console.error(e)\r\n } finally {\r\n setLoading(false)\r\n }\r\n }\r\n\r\n return (\r\n <Modal open={open} handleClose={onClose}>\r\n <div className=\"fixed inset-0 overflow-y-auto\">\r\n <div className=\"flex min-h-full items-center justify-center px-4 py-2 text-center\">\r\n <Transition.Child\r\n as={Fragment}\r\n enter=\"ease-out duration-300\"\r\n enterFrom=\"opacity-0 scale-95\"\r\n enterTo=\"opacity-100 scale-100\"\r\n leave=\"ease-in duration-200\"\r\n leaveFrom=\"opacity-100 scale-100\"\r\n leaveTo=\"opacity-0 scale-95\"\r\n >\r\n <Dialog.Panel className=\"w-full max-w-5xl transform overflow-hidden rounded-2xl bg-white text-left align-middle shadow-xl transition-all\">\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between border-b border-grey-200 px-6 py-4\">\r\n <div className=\"flex items-center gap-2\">\r\n <div className=\"p-2 bg-primaryx-50 rounded-lg\">\r\n <ImageIcon className=\"w-5 h-5 text-primaryx-600\" />\r\n </div>\r\n <Dialog.Title className=\"text-lg font-semibold text-grey-900\">\r\n {cropShape === 'round' ? 'Crop profile picture' : 'Crop image'}\r\n </Dialog.Title>\r\n </div>\r\n <button\r\n onClick={onClose}\r\n className=\"rounded-lg p-2 text-grey-400 hover:bg-grey-100 hover:text-grey-500 transition-colors focus:outline-none\"\r\n >\r\n <X className=\"w-5 h-5\" />\r\n </button>\r\n </div>\r\n\r\n {/* Body */}\r\n <div className=\"p-0\">\r\n {/* Cropper Container */}\r\n <div\r\n ref={containerRef}\r\n className=\"relative h-[70vh] w-full bg-grey-900\"\r\n >\r\n {/* Blurred Background Layer - Render BEFORE Cropper to be behind it */}\r\n {!allowBackgroundColor && (\r\n <div className=\"absolute inset-0 overflow-hidden pointer-events-none\">\r\n <Image\r\n src={imageSrc}\r\n className=\"w-full h-full object-cover blur-[20px] scale-110 opacity-70\"\r\n alt=\"blur-bg\"\r\n width={1}\r\n height={1}\r\n />\r\n <div className=\"absolute inset-0 bg-black/30\" />\r\n </div>\r\n )}\r\n\r\n <Cropper\r\n image={imageSrc}\r\n crop={crop}\r\n rotation={rotation}\r\n zoom={zoom}\r\n aspect={aspect}\r\n cropShape={cropShape}\r\n onCropChange={setCrop}\r\n onRotationChange={setRotation}\r\n onZoomChange={setZoom}\r\n onMediaLoaded={(media) => {\r\n setMediaSize(media)\r\n // Reset init flag on new media\r\n initializedRef.current = false\r\n }}\r\n maxZoom={3}\r\n minZoom={0.1}\r\n zoomSpeed={0.01}\r\n onCropComplete={(_, areaPixels) =>\r\n setCroppedAreaPixels(areaPixels)\r\n }\r\n cropSize={cropSize} // Force crop box size relative to container\r\n restrictPosition={false} // Allows free drag of the image\r\n objectFit=\"contain\" // Ensures image is contained within the view, allowing crop box to be larger\r\n style={{\r\n containerStyle: {\r\n background: allowBackgroundColor ? backgroundColor : 'transparent',\r\n width: '100%'\r\n },\r\n cropAreaStyle: {\r\n border: '2px solid white',\r\n boxShadow: '0 0 0 9999em rgba(0, 0, 0, 0.5)',\r\n }\r\n }}\r\n />\r\n\r\n {/* Watermark Overlay */}\r\n {!hideWatermark && cropSize && (\r\n <div\r\n className=\"absolute pointer-events-none\"\r\n style={{\r\n left: cropOffset.x,\r\n top: cropOffset.y,\r\n width: cropSize.width,\r\n height: cropSize.height,\r\n border: '1px dashed rgba(255,255,255,0.3)',\r\n }}\r\n >\r\n {/* We use specific standard size for watermark on screen */}\r\n <div\r\n className=\"absolute cursor-move select-none pointer-events-auto group\"\r\n style={{\r\n left: watermarkPos.x,\r\n top: watermarkPos.y,\r\n width: `${cropSize.width * 0.15}px`, // 15% of crop width\r\n }}\r\n onMouseDown={(e) => {\r\n e.preventDefault()\r\n setIsDraggingWatermark(true)\r\n dragStart.current = { x: e.clientX, y: e.clientY }\r\n }}\r\n >\r\n {/* Drag Tooltip - Always Visible */}\r\n <div className=\"absolute -top-8 left-1/2 -translate-x-1/2 flex items-center gap-1.5 px-2.5 py-1 bg-grey-900/90 text-white text-[10px] font-medium rounded-full transition-all duration-200 pointer-events-none whitespace-nowrap shadow-lg backdrop-blur-sm\">\r\n <Move className=\"w-3 h-3\" />\r\n <span>Drag to move</span>\r\n </div>\r\n\r\n {/* Image Container with Hover Effect */}\r\n <div className=\"relative rounded transition-all duration-200 group-hover:ring-2 group-hover:ring-primaryx-500/50 group-hover:scale-[1.02]\">\r\n <Image\r\n ref={watermarkRef}\r\n src={watermarkUrl}\r\n alt=\"Watermark\"\r\n className=\"w-full h-auto opacity-90 block\"\r\n width={100}\r\n height={100}\r\n />\r\n\r\n {/* Center Move Icon Overlay */}\r\n <div className=\"absolute inset-0 flex items-center justify-center opacity-0 group-hover:opacity-100 transition-opacity duration-200\">\r\n <div className=\"bg-black/20 p-1 rounded-full backdrop-blur-[1px]\">\r\n <Move className=\"w-4 h-4 text-white drop-shadow-md\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n\r\n </div>\r\n\r\n <div className=\"bg-white px-6 py-5 border-t border-grey-100 flex flex-col md:flex-row md:items-center gap-6\">\r\n {/* Zoom Control */}\r\n <div className=\"flex-1 w-full space-y-2\">\r\n <div className=\"flex items-center gap-3\">\r\n <ZoomOut className=\"w-4 h-4 text-grey-400\" />\r\n <input\r\n type=\"range\"\r\n min={0.7}\r\n max={3}\r\n step={0.01}\r\n value={zoom}\r\n onChange={(e) => setZoom(Number(e.target.value))}\r\n className=\"flex-1 h-1.5 bg-grey-100 rounded-lg appearance-none cursor-pointer accent-primaryx-600 hover:accent-primaryx-700 focus:outline-none focus:ring-2 focus:ring-primaryx-500/20\"\r\n />\r\n <ZoomIn className=\"w-4 h-4 text-grey-400\" />\r\n </div>\r\n <div className=\"flex items-center justify-between\">\r\n <label className=\"text-xs font-semibold text-grey-500 uppercase tracking-wider flex items-center gap-2\">\r\n Zoom\r\n </label>\r\n <span className=\"text-xs font-mono text-grey-400 bg-grey-50 px-2 py-0.5 rounded\">\r\n {Math.round(zoom * 100)}%\r\n </span>\r\n </div>\r\n\r\n </div>\r\n\r\n {/* Rotation Control */}\r\n {showRotationControl && (\r\n <div className=\"flex-1 w-full space-y-2\">\r\n <div className=\"flex items-center justify-between\">\r\n <label className=\"text-xs font-semibold text-grey-500 uppercase tracking-wider flex items-center gap-2\">\r\n <RotateCw className=\"w-3.5 h-3.5\" />\r\n Rotate\r\n </label>\r\n <span className=\"text-xs font-mono text-grey-400 bg-grey-50 px-2 py-0.5 rounded\">\r\n {rotation}°\r\n </span>\r\n </div>\r\n <div className=\"flex items-center gap-3\">\r\n <span className=\"text-[10px] text-grey-400 font-medium\">0°</span>\r\n <input\r\n type=\"range\"\r\n min={0}\r\n max={360}\r\n step={1}\r\n value={rotation}\r\n onChange={(e) => setRotation(Number(e.target.value))}\r\n className=\"flex-1 h-1.5 bg-grey-100 rounded-lg appearance-none cursor-pointer accent-primaryx-600 hover:accent-primaryx-700 focus:outline-none focus:ring-2 focus:ring-primaryx-500/20\"\r\n />\r\n <span className=\"text-[10px] text-grey-400 font-medium\">360°</span>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Divider for desktop */}\r\n <div className=\"hidden md:block w-px h-10 bg-grey-200\" />\r\n\r\n {/* Watermark Theme Control */}\r\n {!hideWatermark && (\r\n <div className=\"flex flex-col gap-1.5 min-w-[140px]\">\r\n <label className=\"text-xs font-semibold text-grey-500 uppercase tracking-wider flex items-center gap-2\">\r\n <Stamp className=\"w-3.5 h-3.5\" />\r\n Watermark\r\n </label>\r\n <div className=\"flex items-center gap-1 bg-grey-50 p-1 rounded-lg border border-grey-200\">\r\n {(['auto', 'light', 'dark'] as const).map((theme) => (\r\n <button\r\n key={theme}\r\n onClick={() => setWatermarkTheme(theme)}\r\n className={`\r\n flex-1 px-2 py-1 text-[10px] font-medium rounded-md transition-all uppercase\r\n ${watermarkTheme === theme\r\n ? 'bg-white text-grey-900 shadow-sm ring-1 ring-black/5'\r\n : 'text-grey-500 hover:text-grey-700 hover:bg-grey-100'\r\n }\r\n `}\r\n >\r\n {theme}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Background Color - Conditional */}\r\n {allowBackgroundColor && (\r\n <>\r\n <div className=\"hidden md:block w-px h-10 bg-grey-200\" />\r\n <label htmlFor=\"cropper-background-color\" className=\"flex items-center gap-3 p-1.5 pr-4 rounded-xl border border-grey-200 bg-white shadow-sm hover:border-grey-300 transition-colors cursor-pointer group relative overflow-hidden\">\r\n <div\r\n className=\"w-8 h-8 rounded-lg border border-grey-200 shadow-inner flex items-center justify-center overflow-hidden relative\"\r\n style={{ backgroundColor: backgroundColor }}\r\n >\r\n {/* Invisible Color Input Overlay */}\r\n <input\r\n type=\"color\"\r\n id=\"cropper-background-color\"\r\n value={backgroundColor}\r\n onChange={(e) => setBackgroundColor(e.target.value)}\r\n className=\"absolute inset-0 opacity-0 w-full h-full cursor-pointer p-0 border-0\"\r\n />\r\n </div>\r\n <div className=\"flex flex-col pointer-events-none\">\r\n <span className=\"text-xs font-semibold text-grey-700 group-hover:text-grey-900\">Background</span>\r\n <span className=\"text-[10px] text-grey-400 font-mono uppercase\">{backgroundColor}</span>\r\n </div>\r\n <Palette className=\"w-4 h-4 text-grey-400 ml-2\" />\r\n </label>\r\n </>\r\n )}\r\n\r\n {/* Divider for desktop */}\r\n <div className=\"hidden md:block w-px h-10 bg-grey-200\" />\r\n\r\n <div className=\"flex items-center justify-end gap-3\">\r\n <button\r\n type=\"button\"\r\n onClick={onClose}\r\n className=\"rounded-lg border border-grey-300 bg-white px-4 py-2 text-sm font-medium text-grey-700 hover:bg-grey-50 focus:outline-none focus:ring-2 focus:ring-primaryx-500 focus:ring-offset-2 transition-all shadow-sm\"\r\n >\r\n Cancel\r\n </button>\r\n <Button\r\n type=\"button\"\r\n onClick={handleSave}\r\n disabled={loading}\r\n className=\"relative inline-flex items-center justify-center rounded-lg px-4 py-2 text-sm font-medium transition-all focus:outline-none focus:ring-2 focus:ring-primaryx-500 focus:ring-offset-2 disabled:opacity-70 disabled:cursor-not-allowed\"\r\n >\r\n {loading ? (\r\n <>\r\n <svg className=\"animate-spin -ml-1 mr-2 h-4 w-4 text-white\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\r\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\" />\r\n </svg>\r\n Processing...\r\n </>\r\n ) : (\r\n 'Apply Crop'\r\n )}\r\n </Button>\r\n </div>\r\n </div>\r\n </Dialog.Panel>\r\n </Transition.Child>\r\n </div>\r\n </div>\r\n </Modal>\r\n )\r\n}\r\n"],"names":["Fragment","ImageIcon","Image"],"mappings":";;;;;;;;;;AA0BA,SAAwB,eAAe;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS,KAAK;AAAA,EACd,YAAY;AAAA,EACZ,sBAAsB;AAAA,EACtB,uBAAuB;AAAA,EACvB,mBAAmB;AAAA,EACnB,gBAAgB;AACpB,GAAU;AAEN,QAAM,eAAe,CAAC,QAAgB;AAClC,UAAM,IAAI,IAAI,UAAU,CAAC;AACzB,UAAM,MAAM,SAAS,GAAG,EAAE;AAC1B,UAAM,IAAK,OAAO,KAAM;AACxB,UAAM,IAAK,OAAO,IAAK;AACvB,UAAM,IAAK,OAAO,IAAK;AAGvB,WAAO,SAAS,IAAI,SAAS,IAAI,SAAS;AAAA,EAC9C;AACA,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG;AAC/C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,CAAC;AAC1C,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS,CAAC;AAClC,QAAM,CAAC,mBAAmB,oBAAoB,IAAI,SAAc,IAAI;AACpE,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,QAAM,CAAC,iBAAiB,kBAAkB,IAAI,SAAS,SAAS;AAChE,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,EAAE,GAAG,IAAI,GAAG,IAAI;AACjE,QAAM,CAAC,qBAAqB,sBAAsB,IAAI,SAAS,KAAK;AACpE,QAAM,CAAC,gBAAgB,iBAAiB,IAAI,SAAoC,MAAM;AACtF,QAAM,YAAY,OAAO,EAAE,GAAG,GAAG,GAAG,GAAG;AAGvC,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwD,MAAS;AACjG,QAAM,CAAC,WAAW,YAAY,IAAI,SAAqG,MAAS;AAChJ,QAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,QAAM,eAAe,OAAuB,IAAI;AAChD,QAAM,eAAe,OAAyB,IAAI;AAClD,QAAM,iBAAiB,OAAO,KAAK;AAGnC,YAAU,MAAM;AACZ,QAAI,UAAU;AACV,wBAAkB,QAAQ,EAAE,KAAK,CAAC,eAAe;AAC7C,uBAAe,aAAa,GAAG;AAAA,MACnC,CAAC;AAAA,IACL;AAAA,EACJ,GAAG,CAAC,QAAQ,CAAC;AAIb,YAAU,MAAM;AACZ,UAAM,oBAAoB,MAAM;AAC5B,UAAI,CAAC,aAAa,QAAS;AAC3B,YAAM,EAAE,aAAa,aAAA,IAAiB,aAAa;AAGnD,YAAM,WAAW;AACjB,YAAM,iBAAiB,cAAc;AAErC,UAAI,OAAO;AAEX,UAAI,iBAAiB,UAAU;AAE3B,iBAAS;AACT,gBAAQ,SAAS;AAAA,MACrB,OAAO;AAEH,gBAAQ;AACR,iBAAS,QAAQ;AAAA,MACrB;AAGA,YAAM,cAAc,EAAE,OAAO,QAAQ,KAAK,QAAQ,SAAS,IAAA;AAC3D,kBAAY,WAAW;AAGvB,UAAI,aAAa,CAAC,eAAe,SAAS;AAMtC,cAAM,gBAAgB,aAAa,QAAQ,sBAAA;AAC3C,cAAM,aAAa,cAAc;AACjC,cAAM,aAAa,cAAc;AAMjC,cAAM,aAAa,qBAAqB;AAAA,UACpC,eAAe,EAAE,OAAO,YAAY,QAAQ,WAAA;AAAA,UAC5C,WAAW,EAAE,cAAc,UAAU,cAAc,eAAe,UAAU,cAAA;AAAA,UAC5E,UAAU;AAAA,UACV;AAAA,QAAA,CACH;AAED,gBAAQ,UAAU;AAIlB,cAAM,UAAU,YAAY,QAAQ;AAEpC,cAAM,WAAW,UAAU;AAE3B,wBAAgB;AAAA,UACZ,GAAG,YAAY,QAAQ,UAAU;AAAA;AAAA,UACjC,GAAG,YAAY,SAAS,WAAW;AAAA,QAAA,CACtC;AAED,uBAAe,UAAU;AAAA,MAC7B;AAAA,IACJ;AAGA,UAAM,WAAW,IAAI,eAAe,MAAM;AACtC,wBAAA;AAAA,IACJ,CAAC;AAED,QAAI,aAAa,SAAS;AACtB,eAAS,QAAQ,aAAa,OAAO;AAAA,IACzC;AAEA,WAAO,MAAM;AACT,eAAS,WAAA;AAAA,IACb;AAAA,EACJ,GAAG,CAAC,QAAQ,MAAM,SAAS,CAAC;AAE5B,YAAU,MAAM;AACZ,UAAM,kBAAkB,CAAC,MAAkB;AACvC,UAAI,CAAC,uBAAuB,CAAC,SAAU;AAEvC,YAAM,KAAK,EAAE,UAAU,UAAU,QAAQ;AACzC,YAAM,KAAK,EAAE,UAAU,UAAU,QAAQ;AAEzC,sBAAgB,CAAA,SAAQ;AACpB,cAAM,OAAO,KAAK,IAAI;AACtB,cAAM,OAAO,KAAK,IAAI;AAGtB,cAAM,iBAAiB,SAAS,QAAQ;AAGxC,cAAM,QAAQ,aAAa,UAAU,aAAa,QAAQ,eAAe,aAAa,QAAQ,gBAAgB;AAC9G,cAAM,kBAAkB,iBAAiB;AAEzC,eAAO;AAAA,UACH,GAAG,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,SAAS,QAAQ,cAAc;AAAA,UAC9D,GAAG,KAAK,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,SAAS,SAAS,eAAe;AAAA,QAAA;AAAA,MAExE,CAAC;AAED,gBAAU,UAAU,EAAE,GAAG,EAAE,SAAS,GAAG,EAAE,QAAA;AAAA,IAC7C;AAEA,UAAM,gBAAgB,MAAM;AACxB,6BAAuB,KAAK;AAAA,IAChC;AAEA,QAAI,qBAAqB;AACrB,aAAO,iBAAiB,aAAa,eAAe;AACpD,aAAO,iBAAiB,WAAW,aAAa;AAAA,IACpD;AAEA,WAAO,MAAM;AACT,aAAO,oBAAoB,aAAa,eAAe;AACvD,aAAO,oBAAoB,WAAW,aAAa;AAAA,IACvD;AAAA,EACJ,GAAG,CAAC,qBAAqB,QAAQ,CAAC;AAGlC,QAAM,aAAa,aAAa,WAAW,WAAW;AAAA,IAClD,IAAI,aAAa,QAAQ,cAAc,SAAS,SAAS;AAAA,IACzD,IAAI,aAAa,QAAQ,eAAe,SAAS,UAAU;AAAA,EAAA,IAC3D,EAAE,GAAG,GAAG,GAAG,EAAA;AAGf,QAAM,kBAAkB,MAAM;AAC1B,QAAI,mBAAmB,OAAQ,QAAO;AACtC,QAAI,mBAAmB,QAAS,QAAO;AAGvC,UAAM,qBAAqB,uBACrB,aAAa,eAAe,KAAK,MACjC;AAEN,WAAO,qBACD,6BACA;AAAA,EACV;AAEA,QAAM,eAAe,gBAAA;AAErB,QAAM,aAAa,YAAY;;AAC3B,QAAI,CAAC,kBAAmB;AACxB,QAAI;AACA,iBAAW,IAAI;AAEf,UAAI,cAA2B;AAC/B,UAAI,gBAAgB;AACpB,UAAI,iBAAiB;AACrB,UAAI,UAAU;AACd,YAAM,cAAc;AAEpB,aAAO,UAAU,aAAa;AAC1B,gBAAQ,IAAI,yBAAyB,UAAU,CAAC,SAAS,aAAa,UAAU,cAAc,EAAE;AAEhG,sBAAc,MAAM;AAAA,UAChB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,gBAAgB,SAAY;AAAA,YACxB,KAAK;AAAA;AAAA,YAEL,GAAI,aAAa,MAAK,qCAAU,UAAS,KAAM,kBAAkB;AAAA,YACjE,GAAI,aAAa,MAAK,qCAAU,WAAU,KAAM,kBAAkB;AAAA;AAAA,YAElE,OAAO,kBAAkB,QAAQ;AAAA;AAAA,YAEjC,QAAS,kBAAkB,QAAQ,WAAU,kBAAa,YAAb,mBAAsB,iBAAgB,UAAQ,kBAAa,YAAb,mBAAsB,kBAAiB;AAAA,UAAA;AAAA,UAEtI,uBAAuB,SAAY;AAAA,UACnC;AAAA,UACA;AAAA,QAAA;AAIJ,YAAI,YAAY,QAAQ,MAAM,OAAO,MAAM;AACvC;AAAA,QACJ;AAGA;AACA,YAAI,YAAY,GAAG;AACf,0BAAgB;AAChB,2BAAiB;AAAA,QACrB,WAAW,YAAY,GAAG;AACtB,0BAAgB;AAChB,2BAAiB;AAAA,QACrB;AAAA,MACJ;AAEA,UAAI,aAAa;AACb,kBAAU,WAAW;AACrB,gBAAA;AAAA,MACJ;AAAA,IACJ,SAAS,GAAG;AACR,cAAQ,MAAM,CAAC;AAAA,IACnB,UAAA;AACI,iBAAW,KAAK;AAAA,IACpB;AAAA,EACJ;AAEA,SACI,oBAAC,OAAA,EAAM,MAAY,aAAa,SAC5B,UAAA,oBAAC,OAAA,EAAI,WAAU,iCACX,UAAA,oBAAC,OAAA,EAAI,WAAU,qEACX,UAAA;AAAA,IAAC,WAAW;AAAA,IAAX;AAAA,MACG,IAAIA;AAAAA,MACJ,OAAM;AAAA,MACN,WAAU;AAAA,MACV,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,WAAU;AAAA,MACV,SAAQ;AAAA,MAER,UAAA,qBAAC,OAAO,OAAP,EAAa,WAAU,mHAEpB,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAU,wEACX,UAAA;AAAA,UAAA,qBAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAA,oBAAC,SAAI,WAAU,iCACX,8BAACC,OAAA,EAAU,WAAU,6BAA4B,EAAA,CACrD;AAAA,YACA,oBAAC,OAAO,OAAP,EAAa,WAAU,uCACnB,UAAA,cAAc,UAAU,yBAAyB,aAAA,CACtD;AAAA,UAAA,GACJ;AAAA,UACA;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,SAAS;AAAA,cACT,WAAU;AAAA,cAEV,UAAA,oBAAC,GAAA,EAAE,WAAU,UAAA,CAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QAC3B,GACJ;AAAA,QAGA,oBAAC,OAAA,EAAI,WAAU,OAEX,UAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,KAAK;AAAA,YACL,WAAU;AAAA,YAGT,UAAA;AAAA,cAAA,CAAC,wBACE,qBAAC,OAAA,EAAI,WAAU,wDACX,UAAA;AAAA,gBAAA;AAAA,kBAACC;AAAAA,kBAAA;AAAA,oBACG,KAAK;AAAA,oBACL,WAAU;AAAA,oBACV,KAAI;AAAA,oBACJ,OAAO;AAAA,oBACP,QAAQ;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBAEZ,oBAAC,OAAA,EAAI,WAAU,+BAAA,CAA+B;AAAA,cAAA,GAClD;AAAA,cAGJ;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG,OAAO;AAAA,kBACP;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA;AAAA,kBACA,cAAc;AAAA,kBACd,kBAAkB;AAAA,kBAClB,cAAc;AAAA,kBACd,eAAe,CAAC,UAAU;AACtB,iCAAa,KAAK;AAElB,mCAAe,UAAU;AAAA,kBAC7B;AAAA,kBACA,SAAS;AAAA,kBACT,SAAS;AAAA,kBACT,WAAW;AAAA,kBACX,gBAAgB,CAAC,GAAG,eAChB,qBAAqB,UAAU;AAAA,kBAEnC;AAAA,kBACA,kBAAkB;AAAA,kBAClB,WAAU;AAAA,kBACV,OAAO;AAAA,oBACH,gBAAgB;AAAA,sBACZ,YAAY,uBAAuB,kBAAkB;AAAA,sBACrD,OAAO;AAAA,oBAAA;AAAA,oBAEX,eAAe;AAAA,sBACX,QAAQ;AAAA,sBACR,WAAW;AAAA,oBAAA;AAAA,kBACf;AAAA,gBACJ;AAAA,cAAA;AAAA,cAIH,CAAC,iBAAiB,YACf;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG,WAAU;AAAA,kBACV,OAAO;AAAA,oBACH,MAAM,WAAW;AAAA,oBACjB,KAAK,WAAW;AAAA,oBAChB,OAAO,SAAS;AAAA,oBAChB,QAAQ,SAAS;AAAA,oBACjB,QAAQ;AAAA,kBAAA;AAAA,kBAIZ,UAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACG,WAAU;AAAA,sBACV,OAAO;AAAA,wBACH,MAAM,aAAa;AAAA,wBACnB,KAAK,aAAa;AAAA,wBAClB,OAAO,GAAG,SAAS,QAAQ,IAAI;AAAA;AAAA,sBAAA;AAAA,sBAEnC,aAAa,CAAC,MAAM;AAChB,0BAAE,eAAA;AACF,+CAAuB,IAAI;AAC3B,kCAAU,UAAU,EAAE,GAAG,EAAE,SAAS,GAAG,EAAE,QAAA;AAAA,sBAC7C;AAAA,sBAGA,UAAA;AAAA,wBAAA,qBAAC,OAAA,EAAI,WAAU,+OACX,UAAA;AAAA,0BAAA,oBAAC,MAAA,EAAK,WAAU,UAAA,CAAU;AAAA,0BAC1B,oBAAC,UAAK,UAAA,eAAA,CAAY;AAAA,wBAAA,GACtB;AAAA,wBAGA,qBAAC,OAAA,EAAI,WAAU,6HACX,UAAA;AAAA,0BAAA;AAAA,4BAACA;AAAAA,4BAAA;AAAA,8BACG,KAAK;AAAA,8BACL,KAAK;AAAA,8BACL,KAAI;AAAA,8BACJ,WAAU;AAAA,8BACV,OAAO;AAAA,8BACP,QAAQ;AAAA,4BAAA;AAAA,0BAAA;AAAA,0BAIZ,oBAAC,OAAA,EAAI,WAAU,uHACX,UAAA,oBAAC,OAAA,EAAI,WAAU,oDACX,UAAA,oBAAC,MAAA,EAAK,WAAU,oCAAA,CAAoC,GACxD,EAAA,CACJ;AAAA,wBAAA,EAAA,CACJ;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACJ;AAAA,cAAA;AAAA,YACJ;AAAA,UAAA;AAAA,QAAA,GAIZ;AAAA,QAEA,qBAAC,OAAA,EAAI,WAAU,+FAEX,UAAA;AAAA,UAAA,qBAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAA,qBAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,cAAA,oBAAC,SAAA,EAAQ,WAAU,wBAAA,CAAwB;AAAA,cAC3C;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG,MAAK;AAAA,kBACL,KAAK;AAAA,kBACL,KAAK;AAAA,kBACL,MAAM;AAAA,kBACN,OAAO;AAAA,kBACP,UAAU,CAAC,MAAM,QAAQ,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,kBAC/C,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEd,oBAAC,QAAA,EAAO,WAAU,wBAAA,CAAwB;AAAA,YAAA,GAC9C;AAAA,YACA,qBAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,cAAA,oBAAC,SAAA,EAAM,WAAU,wFAAuF,UAAA,QAExG;AAAA,cACA,qBAAC,QAAA,EAAK,WAAU,kEACX,UAAA;AAAA,gBAAA,KAAK,MAAM,OAAO,GAAG;AAAA,gBAAE;AAAA,cAAA,EAAA,CAC5B;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,GAEJ;AAAA,UAGC,uBACG,qBAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,YAAA,qBAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,cAAA,qBAAC,SAAA,EAAM,WAAU,wFACb,UAAA;AAAA,gBAAA,oBAAC,UAAA,EAAS,WAAU,cAAA,CAAc;AAAA,gBAAE;AAAA,cAAA,GAExC;AAAA,cACA,qBAAC,QAAA,EAAK,WAAU,kEACX,UAAA;AAAA,gBAAA;AAAA,gBAAS;AAAA,cAAA,EAAA,CACd;AAAA,YAAA,GACJ;AAAA,YACA,qBAAC,OAAA,EAAI,WAAU,2BACX,UAAA;AAAA,cAAA,oBAAC,QAAA,EAAK,WAAU,yCAAwC,UAAA,MAAE;AAAA,cAC1D;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG,MAAK;AAAA,kBACL,KAAK;AAAA,kBACL,KAAK;AAAA,kBACL,MAAM;AAAA,kBACN,OAAO;AAAA,kBACP,UAAU,CAAC,MAAM,YAAY,OAAO,EAAE,OAAO,KAAK,CAAC;AAAA,kBACnD,WAAU;AAAA,gBAAA;AAAA,cAAA;AAAA,cAEd,oBAAC,QAAA,EAAK,WAAU,yCAAwC,UAAA,OAAA,CAAI;AAAA,YAAA,EAAA,CAChE;AAAA,UAAA,GACJ;AAAA,UAIJ,oBAAC,OAAA,EAAI,WAAU,wCAAA,CAAwC;AAAA,UAGtD,CAAC,iBACE,qBAAC,OAAA,EAAI,WAAU,uCACX,UAAA;AAAA,YAAA,qBAAC,SAAA,EAAM,WAAU,wFACb,UAAA;AAAA,cAAA,oBAAC,OAAA,EAAM,WAAU,cAAA,CAAc;AAAA,cAAE;AAAA,YAAA,GAErC;AAAA,YACA,oBAAC,OAAA,EAAI,WAAU,4EACT,UAAA,CAAC,QAAQ,SAAS,MAAM,EAAY,IAAI,CAAC,UACvC;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEG,SAAS,MAAM,kBAAkB,KAAK;AAAA,gBACtC,WAAW;AAAA;AAAA,0DAEL,mBAAmB,QACf,yDACA,qDACN;AAAA;AAAA,gBAGH,UAAA;AAAA,cAAA;AAAA,cAVI;AAAA,YAAA,CAYZ,EAAA,CACL;AAAA,UAAA,GACJ;AAAA,UAIH,wBACG,qBAAAF,YAAA,EACI,UAAA;AAAA,YAAA,oBAAC,OAAA,EAAI,WAAU,wCAAA,CAAwC;AAAA,YACvD,qBAAC,SAAA,EAAM,SAAQ,4BAA2B,WAAU,iLAChD,UAAA;AAAA,cAAA;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACG,WAAU;AAAA,kBACV,OAAO,EAAE,gBAAA;AAAA,kBAGT,UAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACG,MAAK;AAAA,sBACL,IAAG;AAAA,sBACH,OAAO;AAAA,sBACP,UAAU,CAAC,MAAM,mBAAmB,EAAE,OAAO,KAAK;AAAA,sBAClD,WAAU;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACd;AAAA,cAAA;AAAA,cAEJ,qBAAC,OAAA,EAAI,WAAU,qCACX,UAAA;AAAA,gBAAA,oBAAC,QAAA,EAAK,WAAU,iEAAgE,UAAA,cAAU;AAAA,gBAC1F,oBAAC,QAAA,EAAK,WAAU,iDAAiD,UAAA,gBAAA,CAAgB;AAAA,cAAA,GACrF;AAAA,cACA,oBAAC,SAAA,EAAQ,WAAU,6BAAA,CAA6B;AAAA,YAAA,EAAA,CACpD;AAAA,UAAA,GACJ;AAAA,UAIJ,oBAAC,OAAA,EAAI,WAAU,wCAAA,CAAwC;AAAA,UAEvD,qBAAC,OAAA,EAAI,WAAU,uCACX,UAAA;AAAA,YAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,MAAK;AAAA,gBACL,SAAS;AAAA,gBACT,WAAU;AAAA,gBACb,UAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAGD;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,MAAK;AAAA,gBACL,SAAS;AAAA,gBACT,UAAU;AAAA,gBACV,WAAU;AAAA,gBAET,oBACG,qBAAAA,YAAA,EACI,UAAA;AAAA,kBAAA,qBAAC,SAAI,WAAU,8CAA6C,MAAK,QAAO,SAAQ,aAC5E,UAAA;AAAA,oBAAA,oBAAC,UAAA,EAAO,WAAU,cAAa,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK,QAAO,gBAAe,aAAY,KAAI;AAAA,wCAC3F,QAAA,EAAK,WAAU,cAAa,MAAK,gBAAe,GAAE,kHAAA,CAAkH;AAAA,kBAAA,GACzK;AAAA,kBAAM;AAAA,gBAAA,EAAA,CAEV,IAEA;AAAA,cAAA;AAAA,YAAA;AAAA,UAER,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA,EAAA,CACJ;AAAA,IAAA;AAAA,EAAA,EACJ,CACJ,GACJ,GACJ;AAER;"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
interface InformationPopoverProps {
|
|
2
|
-
text: string;
|
|
3
|
-
className?: string;
|
|
4
|
-
side?: "top" | "bottom" | "left" | "right";
|
|
5
|
-
}
|
|
6
|
-
export default function InformationPopover({ text, className, side, }: InformationPopoverProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
-
export {};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Info } from "lucide-react";
|
|
3
|
-
import { Tooltip } from "../Tooltip/Tooltip.js";
|
|
4
|
-
function InformationPopover({
|
|
5
|
-
text,
|
|
6
|
-
className = "",
|
|
7
|
-
side = "top"
|
|
8
|
-
}) {
|
|
9
|
-
return /* @__PURE__ */ jsx(Tooltip, { content: text, placement: side, children: /* @__PURE__ */ jsx(
|
|
10
|
-
Info,
|
|
11
|
-
{
|
|
12
|
-
className: `h-4 w-4 text-grey-700 hover:text-grey-800 cursor-default transition-colors ${className}`
|
|
13
|
-
}
|
|
14
|
-
) });
|
|
15
|
-
}
|
|
16
|
-
export {
|
|
17
|
-
InformationPopover as default
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=InformationPopover.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InformationPopover.js","sources":["../../../src/components/InformationPopover/InformationPopover.tsx"],"sourcesContent":["import { Info } from \"lucide-react\";\r\nimport { Tooltip } from \"../Tooltip/Tooltip\";\r\nimport React from \"react\";\r\n\r\ninterface InformationPopoverProps {\r\n text: string;\r\n className?: string;\r\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n}\r\n\r\nexport default function InformationPopover({\r\n text,\r\n className = \"\",\r\n side = \"top\",\r\n}: InformationPopoverProps) {\r\n return (\r\n <Tooltip content={text} placement={side}>\r\n <Info\r\n className={`h-4 w-4 text-grey-700 hover:text-grey-800 cursor-default transition-colors ${className}`}\r\n />\r\n </Tooltip>\r\n );\r\n}\r\n"],"names":[],"mappings":";;;AAUA,SAAwB,mBAAmB;AAAA,EACzC;AAAA,EACA,YAAY;AAAA,EACZ,OAAO;AACT,GAA4B;AAC1B,SACE,oBAAC,SAAA,EAAQ,SAAS,MAAM,WAAW,MACjC,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,8EAA8E,SAAS;AAAA,IAAA;AAAA,EAAA,GAEtG;AAEJ;"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { Info } from "lucide-react";
|
|
3
|
-
import Tooltip from "./ui/Tooltip.js";
|
|
4
|
-
function InformationPopover({
|
|
5
|
-
text,
|
|
6
|
-
className = "",
|
|
7
|
-
side = "top"
|
|
8
|
-
}) {
|
|
9
|
-
return /* @__PURE__ */ jsx(Tooltip, { content: text, placement: side, children: /* @__PURE__ */ jsx(
|
|
10
|
-
Info,
|
|
11
|
-
{
|
|
12
|
-
className: `h-4 w-4 text-grey-700 hover:text-grey-800 cursor-default transition-colors ${className}`
|
|
13
|
-
}
|
|
14
|
-
) });
|
|
15
|
-
}
|
|
16
|
-
export {
|
|
17
|
-
InformationPopover as default
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=InformationPopover.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InformationPopover.js","sources":["../../src/components/InformationPopover.tsx"],"sourcesContent":["import { Info } from \"lucide-react\";\r\nimport Tooltip from \"@/components/ui/Tooltip\";\r\n\r\ninterface InformationPopoverProps {\r\n text: string;\r\n className?: string;\r\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n}\r\n\r\nexport default function InformationPopover({\r\n text,\r\n className = \"\",\r\n side = \"top\",\r\n}: InformationPopoverProps) {\r\n return (\r\n <Tooltip content={text} placement={side}>\r\n <Info\r\n className={`h-4 w-4 text-grey-700 hover:text-grey-800 cursor-default transition-colors ${className}`}\r\n />\r\n </Tooltip>\r\n );\r\n}\r\n"],"names":[],"mappings":";;;AASA,SAAwB,mBAAmB;AAAA,EACzC;AAAA,EACA,YAAY;AAAA,EACZ,OAAO;AACT,GAA4B;AAC1B,SACE,oBAAC,SAAA,EAAQ,SAAS,MAAM,WAAW,MACjC,UAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,8EAA8E,SAAS;AAAA,IAAA;AAAA,EAAA,GAEtG;AAEJ;"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { cn } from "../../utils/cn.js";
|
|
3
|
-
import { AnimatePresence, motion } from "framer-motion";
|
|
4
|
-
import { memo } from "react";
|
|
5
|
-
const InputErrorMessage = ({ error, className }) => {
|
|
6
|
-
return /* @__PURE__ */ jsx("div", { className: "min-h-[1.25rem]", children: /* @__PURE__ */ jsx(AnimatePresence, { children: error && /* @__PURE__ */ jsx(
|
|
7
|
-
motion.div,
|
|
8
|
-
{
|
|
9
|
-
initial: { opacity: 0, y: -10, height: 0 },
|
|
10
|
-
animate: { opacity: 1, y: 0, height: "auto" },
|
|
11
|
-
exit: { opacity: 0, y: -10, height: 0 },
|
|
12
|
-
className: cn("overflow-hidden", className),
|
|
13
|
-
children: /* @__PURE__ */ jsx("p", { className: "text-xs font-medium text-red-600", children: error })
|
|
14
|
-
}
|
|
15
|
-
) }) });
|
|
16
|
-
};
|
|
17
|
-
const InputErrorMessage$1 = memo(InputErrorMessage);
|
|
18
|
-
export {
|
|
19
|
-
InputErrorMessage$1 as default
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=InputErrorMessage.js.map
|