@123usmanhaider321/ui 0.1.6 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (545) hide show
  1. package/README.md +416 -31
  2. package/dist/images/icon/1LINK.svg +50 -0
  3. package/dist/images/icon/CreditCard.svg +83 -0
  4. package/dist/images/icon/Easypaisa.png +0 -0
  5. package/dist/images/icon/MobileWallet.png +0 -0
  6. package/dist/images/icon/Raast-Logo.png +0 -0
  7. package/dist/images/icon/VISA.png +0 -0
  8. package/dist/images/icon/add-circle-1.svg +5 -0
  9. package/dist/images/icon/check-circle-broken.svg +3 -0
  10. package/dist/images/icon/close-circle.svg +5 -0
  11. package/dist/images/icon/jazzcash.png +0 -0
  12. package/dist/images/icon/loading_icon.json +3347 -0
  13. package/dist/images/icon/mastercard-logo.webp +0 -0
  14. package/dist/images/icon/paymo.jpeg +0 -0
  15. package/dist/images/icon/preview-svgrepo-com.svg +36 -0
  16. package/dist/images/icon/trash.svg +7 -0
  17. package/dist/images/icon/unionpay-logo.svg +9 -0
  18. package/dist/index-87FQZHOs.js +11119 -0
  19. package/dist/index-87FQZHOs.js.map +1 -0
  20. package/dist/index-Tl9g213f.js +60475 -0
  21. package/dist/index-Tl9g213f.js.map +1 -0
  22. package/dist/index.d.ts +1 -10
  23. package/dist/index.es-CpgTaa1Y.js +16734 -0
  24. package/dist/index.es-CpgTaa1Y.js.map +1 -0
  25. package/dist/index.js +40 -12
  26. package/dist/index.js.map +1 -1
  27. package/dist/loading_icon-n5H5dQBl.js +3375 -0
  28. package/dist/loading_icon-n5H5dQBl.js.map +1 -0
  29. package/dist/src/components/Alert/ErrorAlert.d.ts +6 -0
  30. package/dist/src/components/Alert/SuccessAlert.d.ts +6 -0
  31. package/dist/{components → src/components}/FormBuilder/DiscountInput.d.ts +3 -6
  32. package/dist/{components → src/components}/FormBuilder/FormBuilder.d.ts +2 -11
  33. package/dist/{components → src/components}/FormBuilder/QuestionCard.d.ts +0 -5
  34. package/dist/{components → src/components}/FormBuilder/QuestionEditor.d.ts +0 -5
  35. package/dist/{components → src/components}/FormBuilder/SortableQuestionList.d.ts +0 -5
  36. package/dist/src/components/FormBuilder/questionIcons.d.ts +5 -0
  37. package/dist/{components/EventAddForm → src/components/NewAddEvent}/AddEventLayout.d.ts +2 -1
  38. package/dist/{components/EventAddForm → src/components/NewAddEvent}/AddEventStepper.d.ts +2 -2
  39. package/dist/{components/EventAddForm → src/components/NewAddEvent}/common/ConfirmationModal.d.ts +1 -1
  40. package/dist/src/components/NewAddEvent/components/EventSubmissionConfirmationModal.d.ts +14 -0
  41. package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/StepTwo/TicketTierSection.d.ts +1 -1
  42. package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/TicketTierForm.d.ts +1 -1
  43. package/dist/{components/EventAddForm → src/components/NewAddEvent}/hooks/useStepperForm.d.ts +22 -22
  44. package/dist/{components/EventAddForm → src/components/NewAddEvent}/hooks/useTicketTierForm.d.ts +63 -15
  45. package/dist/src/components/NewAddEvent/schemas/step1.d.ts +211 -0
  46. package/dist/src/components/NewAddEvent/schemas/step2.d.ts +411 -0
  47. package/dist/{components/EventAddForm → src/components/NewAddEvent}/schemas/utils.d.ts +8 -2
  48. package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/IndividualFormStep.d.ts +1 -1
  49. package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/SocialProfilesStep.d.ts +1 -1
  50. package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/TeamFormStep.d.ts +1 -1
  51. package/dist/src/components/Spinner/spinner.d.ts +4 -0
  52. package/dist/src/components/TicketlyUIProvider.d.ts +35 -0
  53. package/dist/src/components/common/Loader/index.d.ts +8 -0
  54. package/dist/src/components/common/Modals/ConfirmationModal.d.ts +7 -0
  55. package/dist/{components/FormInput → src/components/ui}/FormInput.d.ts +1 -1
  56. package/dist/src/components/ui/Loader.d.ts +4 -0
  57. package/dist/{components/Button/Button.d.ts → src/components/ui/button.d.ts} +1 -1
  58. package/dist/src/index.d.ts +10 -0
  59. package/dist/{lib → src/lib}/actions.d.ts +0 -126
  60. package/dist/src/lib/dom-utils.d.ts +2 -0
  61. package/dist/src/lib/storage-utils.d.ts +5 -0
  62. package/dist/src/lib/types.d.ts +258 -0
  63. package/dist/src/redux/baseQuery.d.ts +16 -0
  64. package/dist/{services → src/redux/features}/eventApi.d.ts +1053 -1745
  65. package/dist/src/redux/features/globalSlice.d.ts +17 -0
  66. package/dist/{services → src/redux/features/single-event}/single-event-api.d.ts +856 -1190
  67. package/dist/src/redux/types.d.ts +2 -0
  68. package/dist/src/services/library-services.d.ts +15 -0
  69. package/dist/src/services/remote-config.d.ts +27 -0
  70. package/dist/{services → src/services}/utils.d.ts +1 -1
  71. package/dist/src/theme/colors.d.ts +127 -0
  72. package/dist/src/theme/typography.d.ts +13 -0
  73. package/dist/src/types/api.d.ts +18 -0
  74. package/dist/style.css +2984 -0
  75. package/dist/styles.css +3758 -3636
  76. package/package.json +78 -68
  77. package/dist/_virtual/_commonjsHelpers.js +0 -9
  78. package/dist/_virtual/_commonjsHelpers.js.map +0 -1
  79. package/dist/_virtual/customParseFormat.js +0 -5
  80. package/dist/_virtual/customParseFormat.js.map +0 -1
  81. package/dist/_virtual/dayjs.min.js +0 -5
  82. package/dist/_virtual/dayjs.min.js.map +0 -1
  83. package/dist/_virtual/duration.js +0 -5
  84. package/dist/_virtual/duration.js.map +0 -1
  85. package/dist/_virtual/index.js +0 -5
  86. package/dist/_virtual/index.js.map +0 -1
  87. package/dist/_virtual/isBetween.js +0 -5
  88. package/dist/_virtual/isBetween.js.map +0 -1
  89. package/dist/_virtual/relativeTime.js +0 -5
  90. package/dist/_virtual/relativeTime.js.map +0 -1
  91. package/dist/_virtual/use-sync-external-store-shim.development.js +0 -5
  92. package/dist/_virtual/use-sync-external-store-shim.development.js.map +0 -1
  93. package/dist/_virtual/use-sync-external-store-shim.production.js +0 -5
  94. package/dist/_virtual/use-sync-external-store-shim.production.js.map +0 -1
  95. package/dist/_virtual/with-selector.development.js +0 -5
  96. package/dist/_virtual/with-selector.development.js.map +0 -1
  97. package/dist/_virtual/with-selector.js +0 -5
  98. package/dist/_virtual/with-selector.js.map +0 -1
  99. package/dist/_virtual/with-selector.production.js +0 -5
  100. package/dist/_virtual/with-selector.production.js.map +0 -1
  101. package/dist/components/Alert/Alert.js +0 -51
  102. package/dist/components/Alert/Alert.js.map +0 -1
  103. package/dist/components/Button/Button.js +0 -52
  104. package/dist/components/Button/Button.js.map +0 -1
  105. package/dist/components/Button/Button.test.d.ts +0 -1
  106. package/dist/components/Button/index.d.ts +0 -1
  107. package/dist/components/Checkbox/Checkbox.js +0 -50
  108. package/dist/components/Checkbox/Checkbox.js.map +0 -1
  109. package/dist/components/Checkbox/Checkbox.test.d.ts +0 -1
  110. package/dist/components/Checkbox/index.d.ts +0 -1
  111. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +0 -25
  112. package/dist/components/CheckboxGroup/CheckboxGroup.js +0 -99
  113. package/dist/components/CheckboxGroup/CheckboxGroup.js.map +0 -1
  114. package/dist/components/ConfirmationModal/ConfirmationModal.d.ts +0 -15
  115. package/dist/components/ConfirmationModal/ConfirmationModal.js +0 -136
  116. package/dist/components/ConfirmationModal/ConfirmationModal.js.map +0 -1
  117. package/dist/components/ConfirmationModal/index.d.ts +0 -2
  118. package/dist/components/CustomSelect/CustomSelect.js +0 -259
  119. package/dist/components/CustomSelect/CustomSelect.js.map +0 -1
  120. package/dist/components/EventAddForm/AddEventLayout.js +0 -227
  121. package/dist/components/EventAddForm/AddEventLayout.js.map +0 -1
  122. package/dist/components/EventAddForm/AddEventStepper.js +0 -719
  123. package/dist/components/EventAddForm/AddEventStepper.js.map +0 -1
  124. package/dist/components/EventAddForm/common/ConfirmationModal.js +0 -136
  125. package/dist/components/EventAddForm/common/ConfirmationModal.js.map +0 -1
  126. package/dist/components/EventAddForm/common/DescriptionModal.js +0 -70
  127. package/dist/components/EventAddForm/common/DescriptionModal.js.map +0 -1
  128. package/dist/components/EventAddForm/components/AnimatedBackground.d.ts +0 -8
  129. package/dist/components/EventAddForm/components/ApprovalConfirmationModal.d.ts +0 -7
  130. package/dist/components/EventAddForm/components/CheckboxGroup.js +0 -92
  131. package/dist/components/EventAddForm/components/CheckboxGroup.js.map +0 -1
  132. package/dist/components/EventAddForm/components/CustomMeetingForm.js +0 -237
  133. package/dist/components/EventAddForm/components/CustomMeetingForm.js.map +0 -1
  134. package/dist/components/EventAddForm/components/DateTimeField.js +0 -173
  135. package/dist/components/EventAddForm/components/DateTimeField.js.map +0 -1
  136. package/dist/components/EventAddForm/components/EventSubmissionConfirmationModal.d.ts +0 -33
  137. package/dist/components/EventAddForm/components/EventSubmissionConfirmationModal.js +0 -366
  138. package/dist/components/EventAddForm/components/EventSubmissionConfirmationModal.js.map +0 -1
  139. package/dist/components/EventAddForm/components/FileUpload.js +0 -412
  140. package/dist/components/EventAddForm/components/FileUpload.js.map +0 -1
  141. package/dist/components/EventAddForm/components/FormBuilderProceedModal.js +0 -197
  142. package/dist/components/EventAddForm/components/FormBuilderProceedModal.js.map +0 -1
  143. package/dist/components/EventAddForm/components/GoogleMapsAutocompleteInput.js +0 -1179
  144. package/dist/components/EventAddForm/components/GoogleMapsAutocompleteInput.js.map +0 -1
  145. package/dist/components/EventAddForm/components/InputField.d.ts +0 -15
  146. package/dist/components/EventAddForm/components/RadioGroupButton.d.ts +0 -14
  147. package/dist/components/EventAddForm/components/SelectField.d.ts +0 -19
  148. package/dist/components/EventAddForm/components/SingleDateTimeInput.js +0 -102
  149. package/dist/components/EventAddForm/components/SingleDateTimeInput.js.map +0 -1
  150. package/dist/components/EventAddForm/components/StepTwo/CustomFormSection.js +0 -277
  151. package/dist/components/EventAddForm/components/StepTwo/CustomFormSection.js.map +0 -1
  152. package/dist/components/EventAddForm/components/StepTwo/TicketTierSection.js +0 -148
  153. package/dist/components/EventAddForm/components/StepTwo/TicketTierSection.js.map +0 -1
  154. package/dist/components/EventAddForm/components/TicketTierForm.js +0 -418
  155. package/dist/components/EventAddForm/components/TicketTierForm.js.map +0 -1
  156. package/dist/components/EventAddForm/components/TicketTypeSelection.js +0 -93
  157. package/dist/components/EventAddForm/components/TicketTypeSelection.js.map +0 -1
  158. package/dist/components/EventAddForm/hooks/useStepperForm.js +0 -371
  159. package/dist/components/EventAddForm/hooks/useStepperForm.js.map +0 -1
  160. package/dist/components/EventAddForm/hooks/useTicketTierForm.js +0 -237
  161. package/dist/components/EventAddForm/hooks/useTicketTierForm.js.map +0 -1
  162. package/dist/components/EventAddForm/index.d.ts +0 -3
  163. package/dist/components/EventAddForm/index.js +0 -41
  164. package/dist/components/EventAddForm/index.js.map +0 -1
  165. package/dist/components/EventAddForm/schemas/index.d.ts +0 -2
  166. package/dist/components/EventAddForm/schemas/step1.d.ts +0 -47
  167. package/dist/components/EventAddForm/schemas/step1.js +0 -135
  168. package/dist/components/EventAddForm/schemas/step1.js.map +0 -1
  169. package/dist/components/EventAddForm/schemas/step2.d.ts +0 -138
  170. package/dist/components/EventAddForm/schemas/step2.js +0 -94
  171. package/dist/components/EventAddForm/schemas/step2.js.map +0 -1
  172. package/dist/components/EventAddForm/schemas/utils.js +0 -28
  173. package/dist/components/EventAddForm/schemas/utils.js.map +0 -1
  174. package/dist/components/EventAddForm/steps/IndividualFormStep.js +0 -85
  175. package/dist/components/EventAddForm/steps/IndividualFormStep.js.map +0 -1
  176. package/dist/components/EventAddForm/steps/SocialProfilesStep.js +0 -123
  177. package/dist/components/EventAddForm/steps/SocialProfilesStep.js.map +0 -1
  178. package/dist/components/EventAddForm/steps/StepOne.js +0 -462
  179. package/dist/components/EventAddForm/steps/StepOne.js.map +0 -1
  180. package/dist/components/EventAddForm/steps/StepTwo.js +0 -173
  181. package/dist/components/EventAddForm/steps/StepTwo.js.map +0 -1
  182. package/dist/components/EventAddForm/steps/TeamFormStep.js +0 -13
  183. package/dist/components/EventAddForm/steps/TeamFormStep.js.map +0 -1
  184. package/dist/components/FormBuilder/CategoryList.js +0 -242
  185. package/dist/components/FormBuilder/CategoryList.js.map +0 -1
  186. package/dist/components/FormBuilder/DiscountInput.js +0 -366
  187. package/dist/components/FormBuilder/DiscountInput.js.map +0 -1
  188. package/dist/components/FormBuilder/FormBuilder.js +0 -918
  189. package/dist/components/FormBuilder/FormBuilder.js.map +0 -1
  190. package/dist/components/FormBuilder/OptionList.js +0 -120
  191. package/dist/components/FormBuilder/OptionList.js.map +0 -1
  192. package/dist/components/FormBuilder/PaymentPreview.d.ts +0 -12
  193. package/dist/components/FormBuilder/PaymentPreview.js +0 -70
  194. package/dist/components/FormBuilder/PaymentPreview.js.map +0 -1
  195. package/dist/components/FormBuilder/PreviewInput.d.ts +0 -10
  196. package/dist/components/FormBuilder/PreviewInput.js +0 -143
  197. package/dist/components/FormBuilder/PreviewInput.js.map +0 -1
  198. package/dist/components/FormBuilder/QuestionCard.js +0 -252
  199. package/dist/components/FormBuilder/QuestionCard.js.map +0 -1
  200. package/dist/components/FormBuilder/QuestionEditor.js +0 -166
  201. package/dist/components/FormBuilder/QuestionEditor.js.map +0 -1
  202. package/dist/components/FormBuilder/RequiredToggle.js +0 -43
  203. package/dist/components/FormBuilder/RequiredToggle.js.map +0 -1
  204. package/dist/components/FormBuilder/SortableQuestionList.js +0 -137
  205. package/dist/components/FormBuilder/SortableQuestionList.js.map +0 -1
  206. package/dist/components/FormBuilder/index.d.ts +0 -4
  207. package/dist/components/FormBuilder/utils.js +0 -229
  208. package/dist/components/FormBuilder/utils.js.map +0 -1
  209. package/dist/components/FormInput/FormInput.js +0 -126
  210. package/dist/components/FormInput/FormInput.js.map +0 -1
  211. package/dist/components/FormInput/FormInput.test.d.ts +0 -1
  212. package/dist/components/FormInput/index.d.ts +0 -2
  213. package/dist/components/ImageCropModal/index.js +0 -464
  214. package/dist/components/ImageCropModal/index.js.map +0 -1
  215. package/dist/components/InformationPopover/InformationPopover.d.ts +0 -7
  216. package/dist/components/InformationPopover/InformationPopover.js +0 -19
  217. package/dist/components/InformationPopover/InformationPopover.js.map +0 -1
  218. package/dist/components/InformationPopover.js +0 -19
  219. package/dist/components/InformationPopover.js.map +0 -1
  220. package/dist/components/InputErrorMessage/InputErrorMessage.js +0 -21
  221. package/dist/components/InputErrorMessage/InputErrorMessage.js.map +0 -1
  222. package/dist/components/Modal/Modal.d.ts +0 -15
  223. package/dist/components/Modal/Modal.js +0 -73
  224. package/dist/components/Modal/Modal.js.map +0 -1
  225. package/dist/components/Radio/Radio.js +0 -35
  226. package/dist/components/Radio/Radio.js.map +0 -1
  227. package/dist/components/Spinner/spinner.d.ts +0 -2
  228. package/dist/components/Spinner/spinner.js +0 -22
  229. package/dist/components/Spinner/spinner.js.map +0 -1
  230. package/dist/components/Toggle/Toggle.d.ts +0 -16
  231. package/dist/components/Toggle/index.d.ts +0 -2
  232. package/dist/components/Tooltip/Tooltip.d.ts +0 -12
  233. package/dist/components/Tooltip/Tooltip.js +0 -134
  234. package/dist/components/Tooltip/Tooltip.js.map +0 -1
  235. package/dist/components/common/FallbackImage.js +0 -47
  236. package/dist/components/common/FallbackImage.js.map +0 -1
  237. package/dist/components/ui/Calendar/calendar-utils.js +0 -51
  238. package/dist/components/ui/Calendar/calendar-utils.js.map +0 -1
  239. package/dist/components/ui/Calendar/index.js +0 -142
  240. package/dist/components/ui/Calendar/index.js.map +0 -1
  241. package/dist/components/ui/Checkbox.d.ts +0 -9
  242. package/dist/components/ui/Checkbox.js +0 -50
  243. package/dist/components/ui/Checkbox.js.map +0 -1
  244. package/dist/components/ui/DatePicker/index.js +0 -188
  245. package/dist/components/ui/DatePicker/index.js.map +0 -1
  246. package/dist/components/ui/FormInput.js +0 -129
  247. package/dist/components/ui/FormInput.js.map +0 -1
  248. package/dist/components/ui/InputErrorMessage.d.ts +0 -7
  249. package/dist/components/ui/InputErrorMessage.js +0 -21
  250. package/dist/components/ui/InputErrorMessage.js.map +0 -1
  251. package/dist/components/ui/Modal/index.js +0 -73
  252. package/dist/components/ui/Modal/index.js.map +0 -1
  253. package/dist/components/ui/Radio.d.ts +0 -6
  254. package/dist/components/ui/Radio.js +0 -35
  255. package/dist/components/ui/Radio.js.map +0 -1
  256. package/dist/components/ui/RichTextEditor.js +0 -242
  257. package/dist/components/ui/RichTextEditor.js.map +0 -1
  258. package/dist/components/ui/TimePicker/index.js +0 -215
  259. package/dist/components/ui/TimePicker/index.js.map +0 -1
  260. package/dist/components/ui/TimeSelector/index.js +0 -138
  261. package/dist/components/ui/TimeSelector/index.js.map +0 -1
  262. package/dist/components/ui/Tooltip.d.ts +0 -12
  263. package/dist/components/ui/Tooltip.js +0 -136
  264. package/dist/components/ui/Tooltip.js.map +0 -1
  265. package/dist/hooks/useDropdownPosition.d.ts +0 -11
  266. package/dist/hooks/useFirebaseAuthState.d.ts +0 -6
  267. package/dist/hooks/useFirebaseAuthState.js +0 -23
  268. package/dist/hooks/useFirebaseAuthState.js.map +0 -1
  269. package/dist/hooks/useTicketTierForm.d.ts +0 -61
  270. package/dist/lib/actions.js +0 -32
  271. package/dist/lib/actions.js.map +0 -1
  272. package/dist/lib/cropImage.js +0 -113
  273. package/dist/lib/cropImage.js.map +0 -1
  274. package/dist/lib/imageAnalysis.js +0 -58
  275. package/dist/lib/imageAnalysis.js.map +0 -1
  276. package/dist/lib/utils.js +0 -9
  277. package/dist/lib/utils.js.map +0 -1
  278. package/dist/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js +0 -60
  279. package/dist/node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js.map +0 -1
  280. package/dist/node_modules/@dnd-kit/core/dist/core.esm.js +0 -3458
  281. package/dist/node_modules/@dnd-kit/core/dist/core.esm.js.map +0 -1
  282. package/dist/node_modules/@dnd-kit/sortable/dist/sortable.esm.js +0 -593
  283. package/dist/node_modules/@dnd-kit/sortable/dist/sortable.esm.js.map +0 -1
  284. package/dist/node_modules/@dnd-kit/utilities/dist/utilities.esm.js +0 -302
  285. package/dist/node_modules/@dnd-kit/utilities/dist/utilities.esm.js.map +0 -1
  286. package/dist/node_modules/@firebase/app/dist/esm/index.esm.js +0 -768
  287. package/dist/node_modules/@firebase/app/dist/esm/index.esm.js.map +0 -1
  288. package/dist/node_modules/@firebase/component/dist/esm/index.esm.js +0 -340
  289. package/dist/node_modules/@firebase/component/dist/esm/index.esm.js.map +0 -1
  290. package/dist/node_modules/@firebase/logger/dist/esm/index.esm.js +0 -123
  291. package/dist/node_modules/@firebase/logger/dist/esm/index.esm.js.map +0 -1
  292. package/dist/node_modules/@firebase/storage/dist/index.esm.js +0 -2623
  293. package/dist/node_modules/@firebase/storage/dist/index.esm.js.map +0 -1
  294. package/dist/node_modules/@firebase/util/dist/index.esm.js +0 -658
  295. package/dist/node_modules/@firebase/util/dist/index.esm.js.map +0 -1
  296. package/dist/node_modules/@firebase/util/dist/postinstall.js +0 -5
  297. package/dist/node_modules/@firebase/util/dist/postinstall.js.map +0 -1
  298. package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.js +0 -3179
  299. package/dist/node_modules/@fortawesome/fontawesome-svg-core/index.js.map +0 -1
  300. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.js +0 -60
  301. package/dist/node_modules/@fortawesome/free-solid-svg-icons/index.js.map +0 -1
  302. package/dist/node_modules/@fortawesome/react-fontawesome/dist/index.js +0 -400
  303. package/dist/node_modules/@fortawesome/react-fontawesome/dist/index.js.map +0 -1
  304. package/dist/node_modules/@heroicons/react/20/solid/esm/CheckIcon.js +0 -27
  305. package/dist/node_modules/@heroicons/react/20/solid/esm/CheckIcon.js.map +0 -1
  306. package/dist/node_modules/@heroicons/react/20/solid/esm/ChevronDownIcon.js +0 -27
  307. package/dist/node_modules/@heroicons/react/20/solid/esm/ChevronDownIcon.js.map +0 -1
  308. package/dist/node_modules/@heroicons/react/24/outline/esm/ArrowRightIcon.js +0 -29
  309. package/dist/node_modules/@heroicons/react/24/outline/esm/ArrowRightIcon.js.map +0 -1
  310. package/dist/node_modules/@heroicons/react/24/outline/esm/ClockIcon.js +0 -29
  311. package/dist/node_modules/@heroicons/react/24/outline/esm/ClockIcon.js.map +0 -1
  312. package/dist/node_modules/@heroicons/react/24/outline/esm/DocumentDuplicateIcon.js +0 -29
  313. package/dist/node_modules/@heroicons/react/24/outline/esm/DocumentDuplicateIcon.js.map +0 -1
  314. package/dist/node_modules/@heroicons/react/24/outline/esm/InformationCircleIcon.js +0 -29
  315. package/dist/node_modules/@heroicons/react/24/outline/esm/InformationCircleIcon.js.map +0 -1
  316. package/dist/node_modules/@heroicons/react/24/outline/esm/LinkIcon.js +0 -29
  317. package/dist/node_modules/@heroicons/react/24/outline/esm/LinkIcon.js.map +0 -1
  318. package/dist/node_modules/@heroicons/react/24/outline/esm/MagnifyingGlassIcon.js +0 -29
  319. package/dist/node_modules/@heroicons/react/24/outline/esm/MagnifyingGlassIcon.js.map +0 -1
  320. package/dist/node_modules/@heroicons/react/24/outline/esm/MapPinIcon.js +0 -33
  321. package/dist/node_modules/@heroicons/react/24/outline/esm/MapPinIcon.js.map +0 -1
  322. package/dist/node_modules/@heroicons/react/24/outline/esm/VideoCameraIcon.js +0 -29
  323. package/dist/node_modules/@heroicons/react/24/outline/esm/VideoCameraIcon.js.map +0 -1
  324. package/dist/node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js +0 -29
  325. package/dist/node_modules/@heroicons/react/24/outline/esm/XMarkIcon.js.map +0 -1
  326. package/dist/node_modules/@tiptap/core/dist/index.js +0 -5446
  327. package/dist/node_modules/@tiptap/core/dist/index.js.map +0 -1
  328. package/dist/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js +0 -21
  329. package/dist/node_modules/@tiptap/core/dist/jsx-runtime/jsx-runtime.js.map +0 -1
  330. package/dist/node_modules/@tiptap/extension-blockquote/dist/index.js +0 -78
  331. package/dist/node_modules/@tiptap/extension-blockquote/dist/index.js.map +0 -1
  332. package/dist/node_modules/@tiptap/extension-bold/dist/index.js +0 -100
  333. package/dist/node_modules/@tiptap/extension-bold/dist/index.js.map +0 -1
  334. package/dist/node_modules/@tiptap/extension-code/dist/index.js +0 -70
  335. package/dist/node_modules/@tiptap/extension-code/dist/index.js.map +0 -1
  336. package/dist/node_modules/@tiptap/extension-code-block/dist/index.js +0 -317
  337. package/dist/node_modules/@tiptap/extension-code-block/dist/index.js.map +0 -1
  338. package/dist/node_modules/@tiptap/extension-document/dist/index.js +0 -16
  339. package/dist/node_modules/@tiptap/extension-document/dist/index.js.map +0 -1
  340. package/dist/node_modules/@tiptap/extension-hard-break/dist/index.js +0 -66
  341. package/dist/node_modules/@tiptap/extension-hard-break/dist/index.js.map +0 -1
  342. package/dist/node_modules/@tiptap/extension-heading/dist/index.js +0 -86
  343. package/dist/node_modules/@tiptap/extension-heading/dist/index.js.map +0 -1
  344. package/dist/node_modules/@tiptap/extension-horizontal-rule/dist/index.js +0 -80
  345. package/dist/node_modules/@tiptap/extension-horizontal-rule/dist/index.js.map +0 -1
  346. package/dist/node_modules/@tiptap/extension-italic/dist/index.js +0 -98
  347. package/dist/node_modules/@tiptap/extension-italic/dist/index.js.map +0 -1
  348. package/dist/node_modules/@tiptap/extension-link/dist/index.js +0 -423
  349. package/dist/node_modules/@tiptap/extension-link/dist/index.js.map +0 -1
  350. package/dist/node_modules/@tiptap/extension-list/dist/index.js +0 -1039
  351. package/dist/node_modules/@tiptap/extension-list/dist/index.js.map +0 -1
  352. package/dist/node_modules/@tiptap/extension-paragraph/dist/index.js +0 -61
  353. package/dist/node_modules/@tiptap/extension-paragraph/dist/index.js.map +0 -1
  354. package/dist/node_modules/@tiptap/extension-placeholder/dist/index.js +0 -7
  355. package/dist/node_modules/@tiptap/extension-placeholder/dist/index.js.map +0 -1
  356. package/dist/node_modules/@tiptap/extension-strike/dist/index.js +0 -79
  357. package/dist/node_modules/@tiptap/extension-strike/dist/index.js.map +0 -1
  358. package/dist/node_modules/@tiptap/extension-text/dist/index.js +0 -16
  359. package/dist/node_modules/@tiptap/extension-text/dist/index.js.map +0 -1
  360. package/dist/node_modules/@tiptap/extension-underline/dist/index.js +0 -76
  361. package/dist/node_modules/@tiptap/extension-underline/dist/index.js.map +0 -1
  362. package/dist/node_modules/@tiptap/extensions/dist/index.js +0 -376
  363. package/dist/node_modules/@tiptap/extensions/dist/index.js.map +0 -1
  364. package/dist/node_modules/@tiptap/react/dist/index.js +0 -650
  365. package/dist/node_modules/@tiptap/react/dist/index.js.map +0 -1
  366. package/dist/node_modules/@tiptap/starter-kit/dist/index.js +0 -97
  367. package/dist/node_modules/@tiptap/starter-kit/dist/index.js.map +0 -1
  368. package/dist/node_modules/dayjs/dayjs.min.js +0 -283
  369. package/dist/node_modules/dayjs/dayjs.min.js.map +0 -1
  370. package/dist/node_modules/dayjs/plugin/customParseFormat.js +0 -130
  371. package/dist/node_modules/dayjs/plugin/customParseFormat.js.map +0 -1
  372. package/dist/node_modules/dayjs/plugin/duration.js +0 -137
  373. package/dist/node_modules/dayjs/plugin/duration.js.map +0 -1
  374. package/dist/node_modules/dayjs/plugin/isBetween.js +0 -20
  375. package/dist/node_modules/dayjs/plugin/isBetween.js.map +0 -1
  376. package/dist/node_modules/dayjs/plugin/relativeTime.js +0 -49
  377. package/dist/node_modules/dayjs/plugin/relativeTime.js.map +0 -1
  378. package/dist/node_modules/fast-equals/dist/es/index.js +0 -442
  379. package/dist/node_modules/fast-equals/dist/es/index.js.map +0 -1
  380. package/dist/node_modules/idb/build/index.js +0 -70
  381. package/dist/node_modules/idb/build/index.js.map +0 -1
  382. package/dist/node_modules/idb/build/wrap-idb-value.js +0 -149
  383. package/dist/node_modules/idb/build/wrap-idb-value.js.map +0 -1
  384. package/dist/node_modules/linkifyjs/dist/linkify.js +0 -1159
  385. package/dist/node_modules/linkifyjs/dist/linkify.js.map +0 -1
  386. package/dist/node_modules/orderedmap/dist/index.js +0 -120
  387. package/dist/node_modules/orderedmap/dist/index.js.map +0 -1
  388. package/dist/node_modules/prosemirror-commands/dist/index.js +0 -527
  389. package/dist/node_modules/prosemirror-commands/dist/index.js.map +0 -1
  390. package/dist/node_modules/prosemirror-dropcursor/dist/index.js +0 -137
  391. package/dist/node_modules/prosemirror-dropcursor/dist/index.js.map +0 -1
  392. package/dist/node_modules/prosemirror-gapcursor/dist/index.js +0 -221
  393. package/dist/node_modules/prosemirror-gapcursor/dist/index.js.map +0 -1
  394. package/dist/node_modules/prosemirror-history/dist/index.js +0 -357
  395. package/dist/node_modules/prosemirror-history/dist/index.js.map +0 -1
  396. package/dist/node_modules/prosemirror-keymap/dist/index.js +0 -84
  397. package/dist/node_modules/prosemirror-keymap/dist/index.js.map +0 -1
  398. package/dist/node_modules/prosemirror-model/dist/index.js +0 -3209
  399. package/dist/node_modules/prosemirror-model/dist/index.js.map +0 -1
  400. package/dist/node_modules/prosemirror-schema-list/dist/index.js +0 -131
  401. package/dist/node_modules/prosemirror-schema-list/dist/index.js.map +0 -1
  402. package/dist/node_modules/prosemirror-state/dist/index.js +0 -936
  403. package/dist/node_modules/prosemirror-state/dist/index.js.map +0 -1
  404. package/dist/node_modules/prosemirror-transform/dist/index.js +0 -1881
  405. package/dist/node_modules/prosemirror-transform/dist/index.js.map +0 -1
  406. package/dist/node_modules/prosemirror-view/dist/index.js +0 -5232
  407. package/dist/node_modules/prosemirror-view/dist/index.js.map +0 -1
  408. package/dist/node_modules/rope-sequence/dist/index.js +0 -184
  409. package/dist/node_modules/rope-sequence/dist/index.js.map +0 -1
  410. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js +0 -82
  411. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js.map +0 -1
  412. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js +0 -78
  413. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.js.map +0 -1
  414. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js +0 -78
  415. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js.map +0 -1
  416. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js +0 -63
  417. package/dist/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.js.map +0 -1
  418. package/dist/node_modules/use-sync-external-store/shim/index.js +0 -13
  419. package/dist/node_modules/use-sync-external-store/shim/index.js.map +0 -1
  420. package/dist/node_modules/use-sync-external-store/shim/with-selector.js +0 -13
  421. package/dist/node_modules/use-sync-external-store/shim/with-selector.js.map +0 -1
  422. package/dist/node_modules/w3c-keyname/index.js +0 -106
  423. package/dist/node_modules/w3c-keyname/index.js.map +0 -1
  424. package/dist/node_modules/zod/v4/classic/coerce.js +0 -10
  425. package/dist/node_modules/zod/v4/classic/coerce.js.map +0 -1
  426. package/dist/node_modules/zod/v4/classic/compat.js +0 -8
  427. package/dist/node_modules/zod/v4/classic/compat.js.map +0 -1
  428. package/dist/node_modules/zod/v4/classic/errors.js +0 -45
  429. package/dist/node_modules/zod/v4/classic/errors.js.map +0 -1
  430. package/dist/node_modules/zod/v4/classic/iso.js +0 -44
  431. package/dist/node_modules/zod/v4/classic/iso.js.map +0 -1
  432. package/dist/node_modules/zod/v4/classic/parse.js +0 -30
  433. package/dist/node_modules/zod/v4/classic/parse.js.map +0 -1
  434. package/dist/node_modules/zod/v4/classic/schemas.js +0 -711
  435. package/dist/node_modules/zod/v4/classic/schemas.js.map +0 -1
  436. package/dist/node_modules/zod/v4/core/api.js +0 -588
  437. package/dist/node_modules/zod/v4/core/api.js.map +0 -1
  438. package/dist/node_modules/zod/v4/core/checks.js +0 -411
  439. package/dist/node_modules/zod/v4/core/checks.js.map +0 -1
  440. package/dist/node_modules/zod/v4/core/core.js +0 -75
  441. package/dist/node_modules/zod/v4/core/core.js.map +0 -1
  442. package/dist/node_modules/zod/v4/core/doc.js +0 -38
  443. package/dist/node_modules/zod/v4/core/doc.js.map +0 -1
  444. package/dist/node_modules/zod/v4/core/errors.js +0 -73
  445. package/dist/node_modules/zod/v4/core/errors.js.map +0 -1
  446. package/dist/node_modules/zod/v4/core/json-schema-processors.js +0 -359
  447. package/dist/node_modules/zod/v4/core/json-schema-processors.js.map +0 -1
  448. package/dist/node_modules/zod/v4/core/parse.js +0 -96
  449. package/dist/node_modules/zod/v4/core/parse.js.map +0 -1
  450. package/dist/node_modules/zod/v4/core/regexes.js +0 -84
  451. package/dist/node_modules/zod/v4/core/regexes.js.map +0 -1
  452. package/dist/node_modules/zod/v4/core/registries.js +0 -52
  453. package/dist/node_modules/zod/v4/core/registries.js.map +0 -1
  454. package/dist/node_modules/zod/v4/core/schemas.js +0 -1391
  455. package/dist/node_modules/zod/v4/core/schemas.js.map +0 -1
  456. package/dist/node_modules/zod/v4/core/to-json-schema.js +0 -363
  457. package/dist/node_modules/zod/v4/core/to-json-schema.js.map +0 -1
  458. package/dist/node_modules/zod/v4/core/util.js +0 -431
  459. package/dist/node_modules/zod/v4/core/util.js.map +0 -1
  460. package/dist/node_modules/zod/v4/core/versions.js +0 -9
  461. package/dist/node_modules/zod/v4/core/versions.js.map +0 -1
  462. package/dist/redux/baseQuery.d.ts +0 -1
  463. package/dist/redux/baseQuery.js +0 -24
  464. package/dist/redux/baseQuery.js.map +0 -1
  465. package/dist/services/eventApi.js +0 -411
  466. package/dist/services/eventApi.js.map +0 -1
  467. package/dist/services/helpers.js +0 -115
  468. package/dist/services/helpers.js.map +0 -1
  469. package/dist/services/initialize-firebase.d.ts +0 -2
  470. package/dist/services/initialize-firebase.js +0 -20
  471. package/dist/services/initialize-firebase.js.map +0 -1
  472. package/dist/services/process-image-on-server.js +0 -30
  473. package/dist/services/process-image-on-server.js.map +0 -1
  474. package/dist/services/remote-config.d.ts +0 -5
  475. package/dist/services/remote-config.js +0 -9
  476. package/dist/services/remote-config.js.map +0 -1
  477. package/dist/services/single-event-api.js +0 -301
  478. package/dist/services/single-event-api.js.map +0 -1
  479. package/dist/services/utils.js +0 -107
  480. package/dist/services/utils.js.map +0 -1
  481. package/dist/setupTests.d.ts +0 -1
  482. package/dist/stories/Alert.stories.d.ts +0 -10
  483. package/dist/stories/Button.stories.d.ts +0 -13
  484. package/dist/types/redux-types.d.ts +0 -15
  485. package/dist/types/types.d.ts +0 -60
  486. package/dist/types/types.js +0 -10
  487. package/dist/types/types.js.map +0 -1
  488. package/dist/utils/cn.d.ts +0 -6
  489. package/dist/utils/cn.js +0 -9
  490. package/dist/utils/cn.js.map +0 -1
  491. package/dist/utils/date-range.d.ts +0 -4
  492. package/dist/utils/date-range.js +0 -13
  493. package/dist/utils/date-range.js.map +0 -1
  494. package/dist/utils/single-event-helpers.d.ts +0 -50
  495. package/dist/utils/single-event-helpers.js +0 -18
  496. package/dist/utils/single-event-helpers.js.map +0 -1
  497. package/dist/utils/social-validation.js +0 -42
  498. package/dist/utils/social-validation.js.map +0 -1
  499. package/dist/utils/utils.js +0 -20
  500. package/dist/utils/utils.js.map +0 -1
  501. /package/dist/{components/Alert/Alert.d.ts → src/components/Alert/index.d.ts} +0 -0
  502. /package/dist/{components → src/components}/FormBuilder/CategoryList.d.ts +0 -0
  503. /package/dist/{components → src/components}/FormBuilder/OptionList.d.ts +0 -0
  504. /package/dist/{components → src/components}/FormBuilder/RequiredToggle.d.ts +0 -0
  505. /package/dist/{components → src/components}/FormBuilder/types.d.ts +0 -0
  506. /package/dist/{components → src/components}/FormBuilder/utils.d.ts +0 -0
  507. /package/dist/{components → src/components}/ImageCropModal/index.d.ts +0 -0
  508. /package/dist/{components → src/components}/InformationPopover.d.ts +0 -0
  509. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/common/DescriptionModal.d.ts +0 -0
  510. /package/dist/{components/ui/FormInput.d.ts → src/components/NewAddEvent/components/AddEventFormInput.d.ts} +0 -0
  511. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/CheckboxGroup.d.ts +0 -0
  512. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/CustomMeetingForm.d.ts +0 -0
  513. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/DateTimeField.d.ts +0 -0
  514. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/FileUpload.d.ts +0 -0
  515. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/FormBuilderProceedModal.d.ts +0 -0
  516. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/GoogleMapsAutocompleteInput.d.ts +0 -0
  517. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/SingleDateTimeInput.d.ts +0 -0
  518. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/StepTwo/CustomFormSection.d.ts +0 -0
  519. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/components/TicketTypeSelection.d.ts +0 -0
  520. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/StepOne.d.ts +0 -0
  521. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/steps/StepTwo.d.ts +0 -0
  522. /package/dist/{components/EventAddForm → src/components/NewAddEvent}/types.d.ts +0 -0
  523. /package/dist/{components → src/components}/common/FallbackImage.d.ts +0 -0
  524. /package/dist/{components → src/components}/ui/Calendar/calendar-utils.d.ts +0 -0
  525. /package/dist/{components → src/components}/ui/Calendar/index.d.ts +0 -0
  526. /package/dist/{components/Checkbox → src/components/ui}/Checkbox.d.ts +0 -0
  527. /package/dist/{components/CustomSelect → src/components/ui}/CustomSelect.d.ts +0 -0
  528. /package/dist/{components → src/components}/ui/DatePicker/index.d.ts +0 -0
  529. /package/dist/{components/InputErrorMessage → src/components/ui}/InputErrorMessage.d.ts +0 -0
  530. /package/dist/{components → src/components}/ui/Modal/index.d.ts +0 -0
  531. /package/dist/{components/Radio → src/components/ui}/Radio.d.ts +0 -0
  532. /package/dist/{components → src/components}/ui/RichTextEditor.d.ts +0 -0
  533. /package/dist/{components → src/components}/ui/TimePicker/index.d.ts +0 -0
  534. /package/dist/{components → src/components}/ui/TimeSelector/index.d.ts +0 -0
  535. /package/dist/{components → src/components}/ui/Tooltip/index.d.ts +0 -0
  536. /package/dist/{lib → src/lib}/constants.d.ts +0 -0
  537. /package/dist/{lib → src/lib}/cropImage.d.ts +0 -0
  538. /package/dist/{lib → src/lib}/imageAnalysis.d.ts +0 -0
  539. /package/dist/{utils → src/lib}/social-validation.d.ts +0 -0
  540. /package/dist/{lib/utils.d.ts → src/lib/tailwind-merge.d.ts} +0 -0
  541. /package/dist/{utils → src/lib}/utils.d.ts +0 -0
  542. /package/dist/{services → src/redux/features/single-event}/helpers.d.ts +0 -0
  543. /package/dist/{services → src/services}/process-image-on-server.d.ts +0 -0
  544. /package/dist/{types → src/types}/events.d.ts +0 -0
  545. /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}"],"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: `ui-h-4 ui-w-4 ui-text-grey-700 hover:ui-text-grey-800 ui-cursor-default ui-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={`ui-h-4 ui-w-4 ui-text-grey-700 hover:ui-text-grey-800 ui-cursor-default ui-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,gGAAgG,SAAS;AAAA,IAAA;AAAA,EAAA,GAExH;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: "ui-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("ui-overflow-hidden", className),
13
- children: /* @__PURE__ */ jsx("p", { className: "ui-text-xs ui-font-medium ui-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