@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 +0,0 @@
1
- {"version":3,"file":"GoogleMapsAutocompleteInput.js","sources":["../../../../src/components/EventAddForm/components/GoogleMapsAutocompleteInput.tsx"],"sourcesContent":["import { useEffect, useRef, useCallback, useState, useLayoutEffect } from \"react\";\r\nimport { Combobox, ComboboxInput, ComboboxOptions } from '@headlessui/react'\r\nimport { CheckIcon, ChevronDownIcon } from '@heroicons/react/20/solid'\r\nimport {\r\n MapPinIcon,\r\n XMarkIcon,\r\n VideoCameraIcon,\r\n LinkIcon,\r\n ArrowRightIcon,\r\n MagnifyingGlassIcon,\r\n ClockIcon,\r\n DocumentDuplicateIcon\r\n} from '@heroicons/react/24/outline'\r\nimport clsx from 'clsx'\r\nimport { FaCircleNotch, FaGoogle } from \"react-icons/fa\";\r\nimport { AnimatePresence, motion } from \"framer-motion\";\r\n// import { selectVendor } from \"@/redux/features/vendorSlice\";\r\nimport { BASE_URL } from \"@/services/remote-config\";\r\nimport CustomMeetingForm from \"./CustomMeetingForm\";\r\nimport { Search } from \"lucide-react\";\r\nimport InputErrorMessage from \"@/components/ui/InputErrorMessage\";\r\nimport FormInput from \"@/components/ui/FormInput\";\r\nimport Alert from \"@/components/Alert/Alert\";\r\n\r\n/**\r\n * Lazy-load the Google Maps JS API (places library).\r\n */\r\nfunction loadGooglePlaces(apiKey: string): Promise<void> {\r\n // Check if we're in a browser environment\r\n if (typeof window === 'undefined' || typeof document === 'undefined') {\r\n return Promise.reject(new Error(\"Google Maps can only be loaded in browser environment\"));\r\n }\r\n\r\n if ((window as any).google?.maps?.places) return Promise.resolve();\r\n\r\n return new Promise((resolve, reject) => {\r\n const existingScript = document.querySelector(\r\n `script[src*=\"maps.googleapis.com/maps/api/js\"]`\r\n );\r\n if (existingScript) {\r\n existingScript.addEventListener(\"load\", () => resolve());\r\n return;\r\n }\r\n\r\n const script = document.createElement(\"script\");\r\n script.src = `https://maps.googleapis.com/maps/api/js?key=${apiKey}&libraries=places,geocoding`;\r\n script.async = true;\r\n script.defer = true;\r\n script.onload = () => resolve();\r\n script.onerror = () => reject(new Error(\"Failed to load Google Maps SDK\"));\r\n document.head.appendChild(script);\r\n });\r\n}\r\n\r\nexport interface LocationData {\r\n type: 'online' | 'in-person' | 'hybrid';\r\n displayName: string;\r\n\r\n // For physical locations\r\n address?: string;\r\n placeId?: string;\r\n coordinates?: {\r\n lat: number;\r\n lng: number;\r\n };\r\n\r\n // For virtual locations\r\n platform?: \"google-meet\" | \"zoom\" | \"teams\" | \"custom\";\r\n meetingUrl?: string;\r\n meetingId?: string;\r\n passcode?: string;\r\n\r\n // Additional metadata\r\n metadata?: Record<string, any>;\r\n}\r\n\r\ninterface RecentSearch {\r\n id: string;\r\n displayName: string;\r\n address: string;\r\n placeId?: string;\r\n searchedAt: string;\r\n}\r\n\r\ninterface GenericLocationInputProps {\r\n googleApiKey?: string;\r\n defaultValue?: LocationData;\r\n field?: string;\r\n error?: string;\r\n label?: string;\r\n placeholder?: string;\r\n required?: boolean;\r\n disabled?: boolean;\r\n helperText?: string;\r\n size?: \"sm\" | \"md\" | \"lg\";\r\n variant?: \"default\" | \"filled\" | \"outlined\";\r\n\r\n // Feature toggles\r\n enableGoogleMeet?: boolean;\r\n enableCustomLinks?: boolean;\r\n enablePhysicalLocation?: boolean;\r\n\r\n // Google Meet specific\r\n googleMeetAuthEndpoint?: string;\r\n\r\n formData: any;\r\n\r\n // Callbacks\r\n onLocationSelected: (location: LocationData | null) => void;\r\n onFocus?: () => void;\r\n onBlur?: () => void;\r\n}\r\n\r\ntype Suggestion = { placeId: string; description: string };\r\ntype ViewMode = 'main' | 'custom-meeting';\r\n\r\nconst RECENT_SEARCHES_KEY = 'location-recent-searches';\r\nconst MAX_RECENT_SEARCHES = 8;\r\n\r\nexport function GenericLocationInput({\r\n googleApiKey,\r\n defaultValue,\r\n error: parentError,\r\n field,\r\n label,\r\n placeholder = \"Choose location or meeting type...\",\r\n required = false,\r\n disabled = false,\r\n formData,\r\n helperText,\r\n size = \"sm\",\r\n variant = \"default\",\r\n enableGoogleMeet = false,\r\n enableCustomLinks = true,\r\n enablePhysicalLocation = true,\r\n googleMeetAuthEndpoint = BASE_URL + \"/api/v1/google-auth/authorize\",\r\n onLocationSelected,\r\n onFocus,\r\n onBlur,\r\n}: GenericLocationInputProps) {\r\n // Core state\r\n const [currentLocation, setCurrentLocation] = useState<LocationData | null>(null);\r\n const [isOpen, setIsOpen] = useState(false);\r\n const [dropdownPosition, setDropdownPosition] = useState<'bottom' | 'top'>('bottom');\r\n const inputWrapperRef = useRef<HTMLDivElement>(null);\r\n\r\n // Calculate available space to flip dropdown if needed\r\n useLayoutEffect(() => {\r\n if (!isOpen || !inputWrapperRef.current) return;\r\n\r\n const updatePosition = () => {\r\n if (!inputWrapperRef.current) return;\r\n const rect = inputWrapperRef.current.getBoundingClientRect();\r\n const spaceBelow = window.innerHeight - rect.bottom;\r\n const spaceAbove = rect.top;\r\n const minHeightNeeded = 300; // estimated max height of dropdown\r\n\r\n if (spaceBelow < minHeightNeeded && spaceAbove > spaceBelow) {\r\n setDropdownPosition('top');\r\n } else {\r\n setDropdownPosition('bottom');\r\n }\r\n };\r\n\r\n updatePosition();\r\n window.addEventListener('resize', updatePosition);\r\n window.addEventListener('scroll', updatePosition, true); // Capture scroll to update on parent scroll\r\n\r\n return () => {\r\n window.removeEventListener('resize', updatePosition);\r\n window.removeEventListener('scroll', updatePosition, true);\r\n };\r\n }, [isOpen]);\r\n const [error, setError] = useState(\"\");\r\n const [viewMode, setViewMode] = useState<ViewMode>('main');\r\n const [showCopySuccess, setShowCopySuccess] = useState(false);\r\n\r\n // Search state\r\n const [searchQuery, setSearchQuery] = useState(\"\");\r\n const [suggestions, setSuggestions] = useState<Suggestion[] | null>(null);\r\n const [loadingSearch, setLoadingSearch] = useState(false);\r\n const [hasSearched, setHasSearched] = useState(false);\r\n const [recentSearches, setRecentSearches] = useState<RecentSearch[]>([]);\r\n\r\n // Google Meet connection\r\n const [isConnectingMeet, setIsConnectingMeet] = useState(false);\r\n const popupRef = useRef<Window | null>(null);\r\n const cleanupRef = useRef<(() => void) | null>(null);\r\n const messageListenerRef = useRef<((event: MessageEvent) => void) | null>(null);\r\n const checkClosedIntervalRef = useRef<NodeJS.Timeout | null>(null);\r\n\r\n // Custom meeting link\r\n const [customMeetingData, setCustomMeetingData] = useState({\r\n meetingUrl: \"\",\r\n meetingId: \"\",\r\n passcode: \"\",\r\n });\r\n\r\n // Utilities\r\n // const vendor = useSelector(selectVendor);\r\n const timeRef = useRef<NodeJS.Timeout | null>(null);\r\n const reqId = useRef(0);\r\n const isLibraryLoaded = useRef(false);\r\n\r\n // Refs for preventing dropdown close\r\n const dropdownRef = useRef<HTMLDivElement>(null);\r\n const searchInputRef = useRef<HTMLInputElement>(null);\r\n const blurTimeoutRef = useRef<NodeJS.Timeout | null>(null);\r\n\r\n // Load recent searches from localStorage\r\n useEffect(() => {\r\n try {\r\n const stored = localStorage.getItem(RECENT_SEARCHES_KEY);\r\n if (stored) {\r\n const parsed = JSON.parse(stored);\r\n setRecentSearches(Array.isArray(parsed) ? parsed : []);\r\n }\r\n } catch {\r\n // Ignore localStorage errors\r\n setRecentSearches([]);\r\n }\r\n }, []);\r\n\r\n // Save recent search\r\n const saveRecentSearch = useCallback((location: LocationData) => {\r\n if (location.type !== 'in-person' || !location.address) return;\r\n\r\n const newSearch: RecentSearch = {\r\n id: Date.now().toString(),\r\n displayName: location.displayName,\r\n address: location.address,\r\n placeId: location.placeId,\r\n searchedAt: new Date().toISOString(),\r\n };\r\n\r\n setRecentSearches(prev => {\r\n // Remove if already exists\r\n const filtered = prev.filter(item =>\r\n item.address !== newSearch.address && item.placeId !== newSearch.placeId\r\n );\r\n\r\n // Add to beginning and limit to MAX_RECENT_SEARCHES\r\n const updated = [newSearch, ...filtered].slice(0, MAX_RECENT_SEARCHES);\r\n\r\n // Save to localStorage\r\n try {\r\n localStorage.setItem(RECENT_SEARCHES_KEY, JSON.stringify(updated));\r\n } catch {\r\n // Ignore localStorage errors\r\n }\r\n\r\n return updated;\r\n });\r\n }, []);\r\n\r\n // Clear recent searches\r\n const clearRecentSearches = useCallback(() => {\r\n setRecentSearches([]);\r\n try {\r\n localStorage.removeItem(RECENT_SEARCHES_KEY);\r\n } catch {\r\n // Ignore localStorage errors\r\n }\r\n }, []);\r\n\r\n // Initialize from defaultValue or formData.location_data\r\n useEffect(() => {\r\n let locationToSet: LocationData | null = null;\r\n\r\n // Priority: defaultValue > formData.location_data\r\n if (defaultValue) {\r\n locationToSet = defaultValue;\r\n } else if (formData?.location_data) {\r\n // Convert formData.location_data to LocationData format if needed\r\n const locationData = formData.location_data;\r\n\r\n // Handle different possible formats of location data\r\n if (typeof locationData === 'object' && locationData !== null) {\r\n // Check if we have meaningful location data (not just empty object or placeholder)\r\n const hasRealLocationData =\r\n locationData.displayName ||\r\n locationData.display_name ||\r\n locationData.name ||\r\n locationData.address ||\r\n locationData.meetingUrl ||\r\n locationData.meeting_url ||\r\n locationData.url ||\r\n locationData.placeId ||\r\n locationData.place_id;\r\n\r\n // Only create location object if we have real data, not just empty object\r\n if (hasRealLocationData) {\r\n locationToSet = {\r\n type: locationData.type || 'in-person',\r\n displayName: locationData.displayName || locationData.display_name || locationData.name || locationData.address || 'Please select a location for event',\r\n address: locationData.address,\r\n placeId: locationData.placeId || locationData.place_id,\r\n coordinates: locationData.coordinates || (locationData.lat && locationData.lng ? {\r\n lat: locationData.lat,\r\n lng: locationData.lng\r\n } : undefined),\r\n platform: locationData.platform,\r\n meetingUrl: locationData.meetingUrl || locationData.meeting_url || locationData.url,\r\n meetingId: locationData.meetingId || locationData.meeting_id,\r\n passcode: locationData.passcode,\r\n metadata: locationData.metadata || {}\r\n };\r\n }\r\n }\r\n }\r\n\r\n if (locationToSet) {\r\n setCurrentLocation(locationToSet);\r\n // Also populate custom meeting data if it's an online meeting\r\n if (locationToSet.type === 'online') {\r\n setCustomMeetingData({\r\n meetingUrl: locationToSet.meetingUrl || \"\",\r\n meetingId: locationToSet.meetingId || \"\",\r\n passcode: locationToSet.passcode || \"\",\r\n });\r\n }\r\n }\r\n }, [defaultValue, formData?.location_data]);\r\n\r\n // Cleanup popup and event listeners\r\n const cleanupPopup = useCallback(() => {\r\n if (messageListenerRef.current) {\r\n window.removeEventListener(\"message\", messageListenerRef.current);\r\n messageListenerRef.current = null;\r\n }\r\n\r\n if (checkClosedIntervalRef.current) {\r\n clearInterval(checkClosedIntervalRef.current);\r\n checkClosedIntervalRef.current = null;\r\n }\r\n\r\n if (cleanupRef.current) {\r\n cleanupRef.current();\r\n cleanupRef.current = null;\r\n }\r\n\r\n if (popupRef.current && !popupRef.current.closed) {\r\n try {\r\n popupRef.current.close();\r\n } catch {\r\n // ignore\r\n }\r\n popupRef.current = null;\r\n }\r\n\r\n setIsConnectingMeet(false);\r\n }, []);\r\n\r\n useEffect(() => {\r\n return () => {\r\n cleanupPopup();\r\n if (timeRef.current) clearTimeout(timeRef.current);\r\n if (blurTimeoutRef.current) clearTimeout(blurTimeoutRef.current);\r\n };\r\n }, [cleanupPopup]);\r\n\r\n // Load Google libraries on demand\r\n const ensureGoogleLibraries = useCallback(async () => {\r\n if (!googleApiKey) return;\r\n if (!isLibraryLoaded.current) {\r\n isLibraryLoaded.current = true;\r\n try {\r\n await loadGooglePlaces(googleApiKey);\r\n await (window as any)?.google.maps.importLibrary(\"places\");\r\n await (window as any)?.google.maps.importLibrary(\"geocoding\");\r\n } catch (e) {\r\n isLibraryLoaded.current = false;\r\n setError(\r\n (e as any)?.message ||\r\n \"Unable to load location services. Please refresh and try again.\"\r\n );\r\n }\r\n }\r\n }, [googleApiKey]);\r\n\r\n // Copy to clipboard function\r\n const copyToClipboard = useCallback(async (e: React.SyntheticEvent, text: string) => {\r\n e.preventDefault()\r\n try {\r\n await navigator.clipboard.writeText(text);\r\n setShowCopySuccess(true);\r\n setTimeout(() => setShowCopySuccess(false), 3000); // Hide after 3 seconds\r\n } catch (err) {\r\n // Fallback for older browsers - only if we're in browser environment\r\n if (typeof document !== 'undefined') {\r\n const textArea = document.createElement('textarea');\r\n textArea.value = text;\r\n document.body.appendChild(textArea);\r\n textArea.select();\r\n document.execCommand('copy');\r\n document.body.removeChild(textArea);\r\n }\r\n }\r\n }, []);\r\n\r\n // Size variants\r\n const sizeClasses = {\r\n sm: \"pl-10 pr-12 py-2.5 text-sm\",\r\n md: \"pl-11 pr-12 py-3.5 text-base\",\r\n lg: \"pl-12 pr-14 py-4 text-lg\",\r\n } as const;\r\n\r\n const iconSizes = {\r\n sm: \"h-4 w-4\",\r\n md: \"h-5 w-5\",\r\n lg: \"h-6 w-6\",\r\n } as const;\r\n\r\n const iconPositions = {\r\n sm: \"left-3\",\r\n md: \"left-3.5\",\r\n lg: \"left-4\",\r\n } as const;\r\n\r\n // Variant styles with improved design\r\n const getVariantClasses = () => {\r\n const baseClasses = \"w-full rounded-lg transition-all duration-300 outline-none font-medium\";\r\n\r\n switch (variant) {\r\n case \"filled\":\r\n return clsx(\r\n baseClasses,\r\n \"bg-grey-50 input-border\",\r\n \"focus:bg-white focus:border-blue-500 focus:ring-4 focus:ring-blue-500/10 focus:shadow-lg\",\r\n \"hover:bg-grey-100 hover:shadow-md\",\r\n (parentError || error) ? \"bg-error-50 border-error-200 focus:border-error-500 focus:ring-error-500/10\" : \"input-border\",\r\n disabled ? \"bg-grey-100 text-grey-500 cursor-not-allowed\" : \"text-grey-900\"\r\n );\r\n case \"outlined\":\r\n return clsx(\r\n baseClasses,\r\n \"bg-white input-border\",\r\n \"focus:border-blue-500 focus:ring-4 focus:ring-blue-500/10 focus:shadow-lg\",\r\n \"hover:border-grey-400 hover:shadow-md\",\r\n (parentError || error) ? \"border-error-300 focus:border-error-500 focus:ring-error-500/10\" : \"input-border\",\r\n disabled ? \"bg-grey-50 text-grey-500 cursor-not-allowed border-grey-200\" : \"text-grey-900\"\r\n );\r\n default:\r\n return clsx(\r\n baseClasses,\r\n \"bg-white input-border\",\r\n \"focus:ring-2 focus:ring-primaryx-500/20 focus:border-primaryx-500 focus:shadow-lg\",\r\n \"hover:border-grey-300 hover:shadow-md\",\r\n (parentError || error) ? \"border-error-300 focus:border-error-500 focus:ring-error-500/10\" : \"input-border\",\r\n disabled ? \"bg-grey-50 text-grey-500 cursor-not-allowed\" : \"text-grey-900\"\r\n );\r\n }\r\n };\r\n\r\n const displayValue = currentLocation?.displayName ?? \"\";\r\n\r\n const handleGoogleMeetConnect = useCallback(async () => {\r\n if (!enableGoogleMeet) return;\r\n\r\n if (popupRef.current && !popupRef.current.closed) {\r\n try {\r\n popupRef.current.close();\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n setIsConnectingMeet(true);\r\n setError(\"\");\r\n\r\n try {\r\n const width = 500;\r\n const height = 600;\r\n const left = Math.max(0, (window.screen.width - width) / 2);\r\n const top = Math.max(0, (window.screen.height - height) / 2);\r\n const popup = window.open(\r\n googleMeetAuthEndpoint, // + `?id=${vendor?.id}`,\r\n \"google-auth\",\r\n `width=${width},height=${height},left=${left},top=${top - 50},scrollbars=yes,resizable=yes,status=yes`\r\n );\r\n if (!popup) {\r\n throw new Error(\"Popup blocked. Please allow popups and try again.\");\r\n }\r\n popupRef.current = popup;\r\n\r\n let isPopupClosed = false;\r\n let messageReceived = false;\r\n\r\n const checkClosed = setInterval(() => {\r\n if (popup.closed && !messageReceived) {\r\n clearInterval(checkClosed);\r\n isPopupClosed = true;\r\n setIsConnectingMeet(false);\r\n setError(\"Google authorization was cancelled\");\r\n cleanupPopup();\r\n }\r\n }, 1000);\r\n checkClosedIntervalRef.current = checkClosed;\r\n\r\n const messageListener = (event: MessageEvent) => {\r\n const allowedOrigins = [\r\n window.location.origin,\r\n \"http://localhost:5000\",\r\n \"https://localhost:5000\",\r\n \"https://dev-dot-cardpay-1.el.r.appspot.com\"\r\n\r\n ];\r\n\r\n const isValidOrigin = allowedOrigins.some(\r\n (origin) => event.origin === origin || event.origin.startsWith(origin)\r\n );\r\n\r\n if (!isValidOrigin || isPopupClosed) return;\r\n\r\n let messageData = event.data;\r\n if (typeof messageData === \"string\") {\r\n try {\r\n messageData = JSON.parse(messageData);\r\n } catch {\r\n // ignore\r\n }\r\n }\r\n\r\n messageReceived = true;\r\n if (checkClosedIntervalRef.current) {\r\n clearInterval(checkClosedIntervalRef.current);\r\n checkClosedIntervalRef.current = null;\r\n }\r\n\r\n if (messageData.type === \"GOOGLE_AUTH_SUCCESS\" || messageData.success) {\r\n const meetLink = messageData.meetLink || messageData.link || messageData.url;\r\n const newLocation: LocationData = {\r\n type: \"online\",\r\n displayName: \"Google Meet (Online)\",\r\n platform: \"google-meet\",\r\n meetingUrl: meetLink,\r\n metadata: { autoGenerated: true, connectedAt: new Date().toISOString() },\r\n };\r\n\r\n setCurrentLocation(newLocation);\r\n onLocationSelected(newLocation);\r\n setIsOpen(false);\r\n setViewMode('main');\r\n\r\n setTimeout(() => {\r\n if (!popup.closed) popup.close();\r\n cleanupPopup();\r\n }, 100);\r\n } else if (messageData.type === \"GOOGLE_AUTH_ERROR\" || messageData.error) {\r\n setError(messageData.error || messageData.message || \"Failed to connect Google Meet\");\r\n setTimeout(() => {\r\n if (!popup.closed) popup.close();\r\n cleanupPopup();\r\n }, 100);\r\n }\r\n };\r\n\r\n messageListenerRef.current = messageListener;\r\n window.addEventListener(\"message\", messageListener);\r\n\r\n const timeoutId = setTimeout(() => {\r\n if (!messageReceived && !popup.closed) {\r\n setError(\"Google authorization timed out. Please try again.\");\r\n cleanupPopup();\r\n }\r\n }, 300000);\r\n\r\n cleanupRef.current = () => {\r\n clearTimeout(timeoutId);\r\n if (checkClosedIntervalRef.current) {\r\n clearInterval(checkClosedIntervalRef.current);\r\n checkClosedIntervalRef.current = null;\r\n }\r\n };\r\n } catch (e) {\r\n setError(e instanceof Error ? e.message : \"Failed to open Google authorization\");\r\n setIsConnectingMeet(false);\r\n }\r\n }, [enableGoogleMeet, googleMeetAuthEndpoint, /*vendor?.id,*/ cleanupPopup, onLocationSelected]);\r\n\r\n const handleCustomMeetingSubmit = useCallback(() => {\r\n setError(\"\");\r\n if (!customMeetingData.meetingUrl.trim()) {\r\n setError(\"Meeting URL is required\");\r\n return;\r\n }\r\n\r\n try {\r\n const u = new URL(customMeetingData.meetingUrl);\r\n if (![\"http:\", \"https:\"].includes(u.protocol)) {\r\n setError(\"Please enter a valid meeting URL\");\r\n return;\r\n }\r\n } catch {\r\n setError(\"Please enter a valid meeting URL\");\r\n return;\r\n }\r\n\r\n // Always treat manually added links as \"custom\" platform\r\n // regardless of the URL domain (Google Meet, Zoom, etc.)\r\n const displayName = \"Virtual Meeting (Custom Link)\";\r\n\r\n const newLocation: LocationData = {\r\n type: \"online\",\r\n displayName,\r\n platform: \"custom\", // Always set as custom for manually added links\r\n meetingUrl: customMeetingData.meetingUrl,\r\n meetingId: customMeetingData.meetingId || undefined,\r\n passcode: customMeetingData.passcode || undefined,\r\n metadata: {\r\n manuallyAdded: true,\r\n addedAt: new Date().toISOString(),\r\n originalUrl: customMeetingData.meetingUrl // Store original URL for reference\r\n },\r\n };\r\n\r\n setCurrentLocation(newLocation);\r\n onLocationSelected(newLocation);\r\n setViewMode('main');\r\n setIsOpen(false);\r\n }, [customMeetingData, onLocationSelected]);\r\n\r\n const handleClear = useCallback(() => {\r\n setCurrentLocation(null);\r\n setSearchQuery(\"\");\r\n setSuggestions(null);\r\n setViewMode('main');\r\n setError(\"\");\r\n setCustomMeetingData({\r\n meetingUrl: \"\",\r\n meetingId: \"\",\r\n passcode: \"\",\r\n });\r\n onLocationSelected(null);\r\n }, [onLocationSelected]);\r\n\r\n // Search functionality\r\n const runSearch = useCallback(\r\n async (inputValue: string) => {\r\n if (!enablePhysicalLocation || !googleApiKey) return;\r\n if (!inputValue.trim()) {\r\n setSuggestions(null);\r\n setLoadingSearch(false);\r\n return;\r\n }\r\n\r\n setLoadingSearch(true);\r\n if (timeRef.current) clearTimeout(timeRef.current);\r\n const currentRequestId = (reqId.current + 1) % 100;\r\n reqId.current = currentRequestId;\r\n\r\n timeRef.current = setTimeout(async () => {\r\n try {\r\n await ensureGoogleLibraries();\r\n const { suggestions: suggs } = await (window as any)?.google.maps.places.AutocompleteSuggestion.fetchAutocompleteSuggestions({\r\n input: inputValue,\r\n region: \"PK\",\r\n });\r\n\r\n if (currentRequestId === reqId.current) {\r\n setSuggestions(\r\n (suggs || [])\r\n .map((s: any) => (\r\n {\r\n placeId: s.placePrediction?.placeId as string,\r\n description: s.placePrediction?.text?.text as string,\r\n }))\r\n .filter((s: Suggestion) => s.placeId && s.description)\r\n );\r\n setLoadingSearch(false);\r\n }\r\n } catch (e) {\r\n if (currentRequestId === reqId.current) {\r\n setError(\"Unable to search locations. Please try again.\");\r\n setLoadingSearch(false);\r\n }\r\n }\r\n }, 300);\r\n },\r\n [enablePhysicalLocation, googleApiKey, ensureGoogleLibraries]\r\n );\r\n\r\n const handleSelectSuggestion = useCallback(\r\n (s: Suggestion) => {\r\n const newLocation: LocationData = {\r\n type: \"in-person\",\r\n displayName: s.description,\r\n address: s.description,\r\n placeId: s.placeId,\r\n metadata: { selectedAt: new Date().toISOString() },\r\n };\r\n setCurrentLocation(newLocation);\r\n onLocationSelected(newLocation);\r\n saveRecentSearch(newLocation);\r\n setIsOpen(false);\r\n setViewMode('main');\r\n },\r\n [onLocationSelected, saveRecentSearch]\r\n );\r\n\r\n const handleSelectRecentSearch = useCallback(\r\n (recent: RecentSearch) => {\r\n const newLocation: LocationData = {\r\n type: \"in-person\",\r\n displayName: recent.displayName,\r\n address: recent.address,\r\n placeId: recent.placeId,\r\n metadata: { selectedAt: new Date().toISOString(), fromRecent: true },\r\n };\r\n setCurrentLocation(newLocation);\r\n onLocationSelected(newLocation);\r\n setIsOpen(false);\r\n setViewMode('main');\r\n },\r\n [onLocationSelected]\r\n );\r\n\r\n const handleUseCustomSearch = useCallback(() => {\r\n if (!searchQuery.trim()) return;\r\n\r\n const newLocation: LocationData = {\r\n type: \"in-person\",\r\n displayName: searchQuery,\r\n address: searchQuery,\r\n metadata: { selectedAt: new Date().toISOString(), isCustomText: true },\r\n };\r\n setCurrentLocation(newLocation);\r\n onLocationSelected(newLocation);\r\n saveRecentSearch(newLocation);\r\n setIsOpen(false);\r\n setViewMode('main');\r\n }, [searchQuery, onLocationSelected, saveRecentSearch]);\r\n\r\n\r\n // Simplified blur handling for main input\r\n const handleMainInputBlur = useCallback(() => {\r\n blurTimeoutRef.current = setTimeout(() => {\r\n setIsOpen(false);\r\n setViewMode('main');\r\n }, 150);\r\n\r\n onBlur?.();\r\n }, [onBlur]);\r\n\r\n // Cancel blur timeout when interacting with dropdown\r\n const cancelBlurTimeout = useCallback(() => {\r\n if (blurTimeoutRef.current) {\r\n clearTimeout(blurTimeoutRef.current);\r\n blurTimeoutRef.current = null;\r\n }\r\n }, []);\r\n\r\n // Prevent dropdown close for specific interactive elements\r\n const handleInteractiveMouseDown = useCallback((e: React.MouseEvent) => {\r\n e.preventDefault();\r\n cancelBlurTimeout();\r\n }, [cancelBlurTimeout]);\r\n\r\n // Handle click outside to close dropdown\r\n useEffect(() => {\r\n const handleClickOutside = (event: MouseEvent) => {\r\n const target = event.target as Node;\r\n // Check if click is outside BOTH the dropdown content AND the input wrapper\r\n // This prevents the \"close then re-open\" glitch when clicking the input/trigger while open\r\n if (\r\n dropdownRef.current && !dropdownRef.current.contains(target) &&\r\n inputWrapperRef.current && !inputWrapperRef.current.contains(target)\r\n ) {\r\n setIsOpen(false);\r\n setViewMode('main');\r\n }\r\n };\r\n\r\n if (isOpen) {\r\n document.addEventListener('mousedown', handleClickOutside);\r\n }\r\n\r\n return () => {\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n };\r\n }, [isOpen]);\r\n\r\n // Search input specific event handlers\r\n const handleSearchInputChange = useCallback((e: any) => {\r\n e.stopPropagation(); // Prevent event bubbling\r\n const value = e.target.value;\r\n setSearchQuery(value);\r\n setHasSearched(true);\r\n setError(\"\");\r\n runSearch(value);\r\n }, [runSearch]);\r\n\r\n const handleSearchInputFocus = useCallback((e: React.FocusEvent<HTMLInputElement>) => {\r\n e.stopPropagation(); // Prevent event bubbling\r\n cancelBlurTimeout();\r\n }, [cancelBlurTimeout]);\r\n\r\n const handleSearchInputBlur = useCallback((e: React.FocusEvent<HTMLInputElement>) => {\r\n e.stopPropagation(); // Prevent event bubbling\r\n // Don't close dropdown immediately on search input blur\r\n // Let other interactions complete first\r\n }, []);\r\n\r\n const handleSearchInputMouseDown = useCallback((e: React.MouseEvent<HTMLInputElement>) => {\r\n e.stopPropagation(); // Prevent event bubbling\r\n cancelBlurTimeout();\r\n }, [cancelBlurTimeout]);\r\n\r\n const handleSearchInputClick = useCallback((e: React.MouseEvent<HTMLInputElement>) => {\r\n e.stopPropagation(); // Prevent event bubbling\r\n cancelBlurTimeout();\r\n // Focus the input if it's not already focused - only if we're in browser environment\r\n if (searchInputRef.current && typeof document !== 'undefined' && document.activeElement !== searchInputRef.current) {\r\n searchInputRef.current.focus();\r\n }\r\n }, [cancelBlurTimeout]);\r\n\r\n const showClearButton = (displayValue || currentLocation) && !disabled;\r\n\r\n // Get appropriate icon for current selection\r\n const getLeadingIcon = () => {\r\n if (currentLocation?.type === \"online\") {\r\n if (currentLocation.platform === \"google-meet\") {\r\n return <FaGoogle className={clsx(iconSizes[size], \"text-blue-600\")} />;\r\n }\r\n return <VideoCameraIcon className={clsx(iconSizes[size], \"text-purple-600\")} />;\r\n }\r\n return <MapPinIcon className={clsx(iconSizes[size], \"text-grey-500\")} />;\r\n };\r\n\r\n // Animation variants\r\n const dropdownVariants = {\r\n hidden: { opacity: 0, y: -10, scale: 0.95 },\r\n visible: { opacity: 1, y: 0, scale: 1 },\r\n exit: { opacity: 0, y: -10, scale: 0.95 }\r\n };\r\n\r\n const contentVariants = {\r\n hidden: { opacity: 0, x: -20 },\r\n visible: { opacity: 1, x: 0 },\r\n exit: { opacity: 0, x: 20 }\r\n };\r\n\r\n // Determine if we should show recent searches\r\n const shouldShowRecentSearches = recentSearches.length > 0 && searchQuery.trim() === \"\";\r\n const shouldShowSearchResults = searchQuery.trim() !== \"\" && (loadingSearch || suggestions?.length || hasSearched);\r\n\r\n // Render detailed location information\r\n const renderLocationDetails = () => {\r\n if (!currentLocation) return null;\r\n\r\n if (currentLocation.type === 'online') {\r\n return (\r\n <motion.div\r\n initial={{ opacity: 0, height: 0 }}\r\n animate={{ opacity: 1, height: \"auto\" }}\r\n exit={{ opacity: 0, height: 0 }}\r\n className=\"mt-3 space-y-3\"\r\n >\r\n {/* Main Online Meeting Info */}\r\n {currentLocation.platform !== \"google-meet\" && (\r\n <div className=\"p-4 bg-blue-50 border border-blue-200 rounded-xl\">\r\n <div className=\"flex items-start justify-between\">\r\n <div className=\"flex-1\">\r\n\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <VideoCameraIcon className=\"h-4 w-4 text-purple-600\" />\r\n <span className=\"text-sm font-semibold text-grey-900\">\r\n {\r\n currentLocation.platform === \"zoom\" ? \"Zoom Meeting\" :\r\n currentLocation.platform === \"teams\" ? \"Microsoft Teams\" : \"Virtual Meeting\"}\r\n </span>\r\n <span className=\"px-2 py-1 bg-green-100 text-green-700 text-xs font-medium rounded-full\">\r\n Online\r\n </span>\r\n </div>\r\n\r\n\r\n\r\n {currentLocation.meetingUrl && (\r\n <div className=\"space-y-2\">\r\n <div className=\"flex items-center gap-2\">\r\n <LinkIcon className=\"h-4 w-4 text-grey-500 flex-shrink-0\" />\r\n <span className=\"text-xs font-medium text-grey-600\">Meeting Link:</span>\r\n </div>\r\n <div className=\"grid grid-cols-[1fr_auto] gap-2 bg-white p-2 rounded-lg border border-gray-300 items-center min-w-0\">\r\n <div className=\"min-w-0 overflow-hidden\">\r\n <code className=\"block text-xs text-blue-600 break-all line-clamp-2 leading-relaxed\">\r\n {currentLocation.meetingUrl}\r\n </code>\r\n </div>\r\n <button\r\n type=\"button\"\r\n onClick={(e) => copyToClipboard(e, currentLocation.meetingUrl!)}\r\n className=\"p-1 hover:bg-grey-100 rounded transition-colors flex-shrink-0\"\r\n title=\"Copy link\"\r\n >\r\n <DocumentDuplicateIcon className=\"h-3 w-3 text-grey-500 hover:text-grey-600\" />\r\n </button>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {currentLocation.meetingId && (\r\n <div className=\"mt-2\">\r\n <div className=\"flex items-center gap-2 mb-1\">\r\n <span className=\"text-xs font-medium text-grey-600\">Meeting ID:</span>\r\n <code className=\"text-xs text-grey-800 bg-white px-2 py-1 rounded border\">\r\n {currentLocation.meetingId}\r\n </code>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {currentLocation.passcode && (\r\n <div className=\"mt-2\">\r\n <div className=\"flex items-center gap-2 mb-1\">\r\n <span className=\"text-xs font-medium text-grey-600\">Passcode:</span>\r\n <code className=\"text-xs text-grey-800 bg-white px-2 py-1 rounded border\">\r\n {currentLocation.passcode}\r\n </code>\r\n </div>\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Smart Meeting Creation Info for Google Meet */}\r\n {currentLocation.platform === \"google-meet\" && currentLocation.metadata?.autoGenerated && (\r\n <motion.div\r\n initial={{ opacity: 0, height: 0 }}\r\n animate={{ opacity: 1, height: \"auto\" }}\r\n transition={{ duration: 0.3, ease: \"easeOut\" }}\r\n className=\"bg-gradient-to-r from-blue-50 to-indigo-50 border border-blue-200 rounded-xl p-4\"\r\n >\r\n <div className=\"flex items-start gap-3\">\r\n <div className=\"p-2 rounded-lg bg-blue-100\">\r\n <FaGoogle className=\"h-4 w-4 text-blue-600\" />\r\n </div>\r\n <div className=\"flex-1 space-y-2\">\r\n <div className=\"flex items-center gap-2\">\r\n <h4 className=\"text-sm font-semibold text-blue-900\">\r\n Smart Meeting Creation\r\n </h4>\r\n <span className=\"px-2 py-0.5 bg-blue-200 text-blue-800 text-xs font-medium rounded-full\">\r\n Auto Generated\r\n </span>\r\n </div>\r\n <p className=\"text-xs text-blue-700 leading-relaxed\">\r\n Your Google Meet will be automatically created when you publish the event,\r\n scheduled according to your event timing.\r\n </p>\r\n\r\n {/* Event Time Display */}\r\n {formData?.event_start_timestamp?.date && formData?.event_end_timestamp?.date && (\r\n <div className=\"mt-3 p-3 bg-white/70 rounded-lg border border-blue-200\">\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <ClockIcon className=\"h-3.5 w-3.5 text-blue-600\" />\r\n <span className=\"text-xs font-medium text-blue-800\">Meeting Schedule</span>\r\n </div>\r\n <div className=\"space-y-1\">\r\n <div className=\"flex items-center justify-between text-xs\">\r\n <span className=\"text-blue-600 font-medium\">Start:</span>\r\n <span className=\"text-blue-800\">\r\n {new Date(`${formData.event_start_timestamp.date}T${formData.event_start_timestamp.time || '00:00'}`).toLocaleString('en-US', {\r\n weekday: 'short',\r\n month: 'short',\r\n day: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n })}\r\n </span>\r\n </div>\r\n <div className=\"flex items-center justify-between text-xs\">\r\n <span className=\"text-blue-600 font-medium\">End:</span>\r\n <span className=\"text-blue-800\">\r\n {new Date(`${formData.event_end_timestamp.date}T${formData.event_end_timestamp.time || '23:59'}`).toLocaleString('en-US', {\r\n weekday: 'short',\r\n month: 'short',\r\n day: 'numeric',\r\n hour: '2-digit',\r\n minute: '2-digit'\r\n })}\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Features List */}\r\n <div className=\"mt-3 space-y-1\">\r\n <div className=\"flex items-center gap-2 text-xs text-blue-700\">\r\n <CheckIcon className=\"h-3 w-3 text-blue-600\" />\r\n <span>Automatic calendar invites</span>\r\n </div>\r\n <div className=\"flex items-center gap-2 text-xs text-blue-700\">\r\n <CheckIcon className=\"h-3 w-3 text-blue-600\" />\r\n <span>Meeting link shared with attendees</span>\r\n </div>\r\n <div className=\"flex items-center gap-2 text-xs text-blue-700\">\r\n <CheckIcon className=\"h-3 w-3 text-blue-600\" />\r\n <span>Synchronized with event schedule</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </motion.div>\r\n )}\r\n </motion.div>\r\n );\r\n } else if (currentLocation.type === 'in-person') {\r\n return (\r\n <motion.div\r\n initial={{ opacity: 0, height: 0 }}\r\n animate={{ opacity: 1, height: \"auto\" }}\r\n exit={{ opacity: 0, height: 0 }}\r\n className=\"mt-3 p-4 bg-green-50 border border-green-200 rounded-xl\"\r\n >\r\n <div className=\"flex items-start gap-3\">\r\n <MapPinIcon className=\"h-5 w-5 text-green-600 flex-shrink-0 mt-0.5\" />\r\n <div className=\"flex-1\">\r\n <div className=\"flex items-center gap-2 mb-2\">\r\n <span className=\"text-sm font-semibold text-grey-900\">Physical location</span>\r\n <span className=\"px-2 py-1 bg-green-100 text-green-700 text-xs font-medium rounded-full\">\r\n In-Person\r\n </span>\r\n </div>\r\n <div className=\"text-sm text-grey-700 leading-relaxed\">\r\n {currentLocation.address || currentLocation.displayName}\r\n </div>\r\n {currentLocation.coordinates && (\r\n <div className=\"mt-2 text-xs text-grey-500\">\r\n Coordinates: {currentLocation.coordinates.lat.toFixed(6)}, {currentLocation.coordinates.lng.toFixed(6)}\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n </motion.div>\r\n );\r\n }\r\n\r\n return null;\r\n };\r\n\r\n return (\r\n <div className=\"w-full\">\r\n {/* Label with improved typography */}\r\n {label && (\r\n <motion.label\r\n className=\"block text-sm font-semibold text-grey-800 mb-3\"\r\n initial={{ opacity: 0, y: -10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n transition={{ duration: 0.2 }}\r\n >\r\n {label}\r\n {required && <span className=\"text-error-500 ml-1\">*</span>}\r\n </motion.label>\r\n )}\r\n\r\n <Combobox value={displayValue} onChange={() => { }} disabled={disabled}>\r\n <div className=\"relative\">\r\n {/* Main Input Field - AnimatePresence dropdown anchored here */}\r\n <motion.div\r\n className=\"relative\"\r\n ref={inputWrapperRef}\r\n transition={{ duration: 0.2, ease: \"easeOut\" }}\r\n >\r\n {/* Leading icon */}\r\n <div className={clsx(\r\n \"absolute inset-y-0 flex items-center pointer-events-none\",\r\n iconPositions[size]\r\n )}>\r\n {getLeadingIcon()}\r\n </div>\r\n\r\n <ComboboxInput\r\n className={clsx(\r\n getVariantClasses(),\r\n sizeClasses[size],\r\n \"cursor-pointer font-normal placeholder:font-normal hover:shadow-none border-gray-300 hover:border-gray-400 truncate\",\r\n isOpen && \"transform\",\r\n currentLocation?.type === \"online\" ? \"!pr-36\" : showClearButton ? \"!pr-20\" : \"!pr-12\"\r\n )}\r\n name={field}\r\n value={displayValue}\r\n onChange={() => { }}\r\n readOnly\r\n placeholder={placeholder}\r\n onFocus={async () => {\r\n cancelBlurTimeout();\r\n setIsOpen(true);\r\n await ensureGoogleLibraries();\r\n onFocus?.();\r\n }}\r\n onClick={async () => {\r\n cancelBlurTimeout();\r\n setIsOpen(true);\r\n await ensureGoogleLibraries();\r\n }}\r\n onBlur={handleMainInputBlur}\r\n />\r\n\r\n {/* Right side icons */}\r\n <div className=\"absolute inset-y-0 right-0 flex items-center pr-4 space-x-2\">\r\n <AnimatePresence mode=\"wait\">\r\n {currentLocation?.type === \"online\" && (\r\n <motion.div\r\n key=\"connected\"\r\n initial={{ opacity: 0, scale: 0.8 }}\r\n animate={{ opacity: 1, scale: 1 }}\r\n exit={{ opacity: 0, scale: 0.8 }}\r\n className=\"flex items-center space-x-1.5 bg-green-50 px-2 py-1 rounded-full\"\r\n >\r\n <CheckIcon className=\"h-3.5 w-3.5 text-green-600\" />\r\n <span className=\"text-xs text-green-700 font-medium\">Connected</span>\r\n </motion.div>\r\n )}\r\n {showClearButton && (\r\n <motion.button\r\n key=\"clear\"\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n handleClear();\r\n }}\r\n onMouseDown={handleInteractiveMouseDown}\r\n className=\"text-grey-400 hover:text-grey-600 transition-all duration-200 p-1.5 rounded-full hover:bg-grey-100 focus:outline-none focus:ring-2 focus:ring-primaryx-500/20 focus:border-primaryx-500\"\r\n aria-label=\"Clear selection\"\r\n initial={{ opacity: 0, scale: 0.8 }}\r\n animate={{ opacity: 1, scale: 1 }}\r\n exit={{ opacity: 0, scale: 0.8 }}\r\n whileHover={{ scale: 1.1 }}\r\n whileTap={{ scale: 0.95 }}\r\n disabled={disabled}\r\n >\r\n <XMarkIcon className=\"h-4 w-4\" />\r\n </motion.button>\r\n )}\r\n </AnimatePresence>\r\n\r\n {/* Dropdown indicator */}\r\n <motion.div\r\n animate={{ rotate: isOpen ? 180 : 0 }}\r\n transition={{ duration: 0.2 }}\r\n className=\"text-grey-400\"\r\n >\r\n <ChevronDownIcon className=\"h-5 w-5\" />\r\n </motion.div>\r\n </div>\r\n\r\n {/* Enhanced Dropdown - Nested here to anchor relative to input */}\r\n <AnimatePresence>\r\n {isOpen && (\r\n <motion.div\r\n variants={dropdownVariants}\r\n initial=\"hidden\"\r\n animate=\"visible\"\r\n exit=\"exit\"\r\n style={{ transformOrigin: dropdownPosition === 'top' ? 'bottom' : 'top' }}\r\n transition={{ duration: 0.3, ease: \"easeOut\" }}\r\n className={clsx(\r\n \"absolute left-0 w-full z-50\",\r\n dropdownPosition === 'top' ? \"bottom-full mb-1\" : \"top-full -mt-1\"\r\n )}\r\n >\r\n <ComboboxOptions\r\n ref={dropdownRef}\r\n className={clsx(\r\n \"w-full mt-3 rounded-lg border border-grey-200 bg-white shadow-2xl p-1 overflow-hidden\",\r\n \"focus:outline-none backdrop-blur-sm\"\r\n )}\r\n static\r\n >\r\n <AnimatePresence mode=\"wait\">\r\n {/* Main View */}\r\n {viewMode === 'main' && (\r\n <motion.div\r\n key=\"main\"\r\n variants={contentVariants}\r\n initial=\"hidden\"\r\n animate=\"visible\"\r\n exit=\"exit\"\r\n transition={{ duration: 0.2 }}\r\n className=\"p-3\"\r\n >\r\n <div className=\"space-y-2\">\r\n {/* Physical location Options */}\r\n {enablePhysicalLocation && (\r\n <>\r\n <div className=\"px-3 py-2\">\r\n <h3 className=\"text-xs font-semibold text-grey-500 uppercase tracking-wider mb-3\">\r\n Physical location\r\n </h3>\r\n <div className=\"space-y-3\">\r\n <div className=\"relative\">\r\n <div\r\n onKeyDown={(e) => e.stopPropagation()}\r\n onClick={(e) => { e.stopPropagation(); cancelBlurTimeout(); }}\r\n onMouseDown={(e) => { e.stopPropagation(); cancelBlurTimeout(); }}\r\n onFocus={(e) => { e.stopPropagation(); cancelBlurTimeout(); }}\r\n >\r\n <FormInput\r\n type=\"text\"\r\n value={searchQuery}\r\n placeholder=\"Search for venues, addresses, or landmarks...\"\r\n icon={Search}\r\n inputClassName=\"w-full pl-10 pr-4 h-10\"\r\n onChange={handleSearchInputChange}\r\n // onFocus={() => {\r\n // if (searchInputRef.current) {\r\n // const event = new Event('focus') as any;\r\n // handleSearchInputFocus(event);\r\n // }\r\n // }}\r\n onBlur={() => {\r\n if (searchInputRef.current) {\r\n const event = new Event('blur') as any;\r\n handleSearchInputBlur(event);\r\n }\r\n }}\r\n />\r\n </div>\r\n </div>\r\n\r\n {/* Search Results - Show when user is actively searching */}\r\n {shouldShowSearchResults && (\r\n <div className=\"overflow-auto rounded-xl border border-grey-100\">\r\n {loadingSearch && (\r\n <div className=\"px-4 py-6 text-center\">\r\n <div className=\"flex flex-col items-center space-y-2\">\r\n <FaCircleNotch className=\"h-5 w-5 animate-spin text-blue-500\" />\r\n <p className=\"text-xs text-grey-600\">\r\n Searching locations...\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!loadingSearch && hasSearched && searchQuery.trim() !== \"\" && (!suggestions || suggestions.length === 0) && (\r\n <div className=\"px-4 py-6 text-center\">\r\n <div className=\"flex flex-col items-center space-y-2\">\r\n <MagnifyingGlassIcon className=\"h-6 w-6 text-grey-300\" />\r\n <p className=\"text-xs text-grey-500\">\r\n No locations found for {searchQuery}\r\n </p>\r\n <p className=\"text-xs text-grey-400\">\r\n Try different keywords or check spelling\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!loadingSearch && suggestions?.map((s, idx) => (\r\n <button\r\n type=\"button\"\r\n key={s.placeId}\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n handleSelectSuggestion(s);\r\n }}\r\n onMouseDown={handleInteractiveMouseDown}\r\n className={clsx(\r\n \"w-full text-left px-4 py-3 hover:bg-grey-50 transition-colors flex items-center gap-3\",\r\n idx !== 0 && \"border-t border-grey-100\"\r\n )}\r\n >\r\n <MapPinIcon className=\"h-4 w-4 text-grey-400 flex-shrink-0\" />\r\n <span className=\"text-sm text-grey-900\">{s.description}</span>\r\n </button>\r\n ))}\r\n </div>\r\n )}\r\n\r\n {/* Recent Searches - Show when search input is empty */}\r\n {shouldShowRecentSearches && (\r\n <div className=\"space-y-2\">\r\n <div className=\"flex items-center justify-between\">\r\n <h4 className=\"text-xs font-medium text-grey-600 flex items-center gap-1\">\r\n <ClockIcon className=\"h-3 w-3\" />\r\n Recent searches\r\n </h4>\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n clearRecentSearches();\r\n }}\r\n onMouseDown={handleInteractiveMouseDown}\r\n className=\"text-xs text-grey-400 hover:text-grey-600 transition-colors\"\r\n >\r\n Clear all\r\n </button>\r\n </div>\r\n <div className=\"grid grid-cols-1 gap-1 overflow-auto\">\r\n {recentSearches.map((recent) => (\r\n <button\r\n key={recent.id}\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n handleSelectRecentSearch(recent);\r\n }}\r\n onMouseDown={handleInteractiveMouseDown}\r\n className=\"w-full text-left px-3 py-2.5 hover:bg-grey-50 rounded-lg transition-colors flex items-center gap-3 group\"\r\n >\r\n <div className=\"p-1.5 rounded-md bg-grey-100 group-hover:bg-grey-200 transition-colors\">\r\n <ClockIcon className=\"h-3.5 w-3.5 text-grey-500\" />\r\n </div>\r\n <div className=\"flex-1 min-w-0\">\r\n <span className=\"text-sm text-grey-700 truncate block\">{recent.displayName}</span>\r\n <span className=\"text-xs text-grey-400\">\r\n {new Date(recent.searchedAt).toLocaleDateString()}\r\n </span>\r\n </div>\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* Empty state when no recent searches and no search query */}\r\n {!shouldShowRecentSearches && !shouldShowSearchResults && (\r\n <div className=\"text-center py-6\">\r\n <ClockIcon className=\"h-8 w-8 text-grey-300 mx-auto mb-2\" />\r\n <p className=\"text-sm text-grey-500\">No recent searches</p>\r\n <p className=\"text-xs text-grey-400 mt-1\">Your recent location searches will appear here</p>\r\n </div>\r\n )}\r\n\r\n {/* Custom Search Option */}\r\n {searchQuery.trim() !== \"\" && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n handleUseCustomSearch();\r\n }}\r\n onMouseDown={handleInteractiveMouseDown}\r\n className=\"w-full text-left px-4 py-3 bg-grey-100 hover:bg-grey-200 transition-colors flex items-center gap-3 border-t border-grey-100\"\r\n >\r\n <MapPinIcon className=\"h-4 w-4 text-grey-500 flex-shrink-0\" />\r\n <span className=\"text-sm text-grey-900\">Use {`\"${searchQuery}\"`}</span>\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n\r\n <div className=\"mx-3 h-px bg-grey-100\" />\r\n </>\r\n )}\r\n\r\n {/* Virtual Meeting Options */}\r\n <div className=\"px-3 py-2\">\r\n <h3 className=\"text-xs font-semibold text-grey-500 uppercase tracking-wider mb-3\">\r\n Virtual Meeting\r\n </h3>\r\n <div className=\"space-y-1\">\r\n {/* Google Meet */}\r\n {enableGoogleMeet && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n handleGoogleMeetConnect();\r\n }}\r\n onMouseDown={handleInteractiveMouseDown}\r\n disabled={isConnectingMeet}\r\n className=\"w-full flex items-center gap-3 px-3 py-3 rounded-xl hover:bg-blue-50 transition-all duration-200 text-left group disabled:opacity-50\"\r\n >\r\n <div className=\"p-2 rounded-lg bg-blue-100 group-hover:bg-blue-200 transition-colors\">\r\n {isConnectingMeet ? (\r\n <FaCircleNotch className=\"h-5 w-5 animate-spin text-blue-600\" />\r\n ) : (\r\n <FaGoogle className=\"h-5 w-5 text-blue-600\" />\r\n )}\r\n </div>\r\n <div className=\"flex-1\">\r\n <div className=\"text-sm font-medium text-grey-900\">\r\n {isConnectingMeet ? \"Connecting...\" : \"Google Meet\"}\r\n </div>\r\n <div className=\"text-xs text-grey-500\">\r\n {isConnectingMeet ? \"Authorizing with Google\" : \"Auto-generate meeting link\"}\r\n </div>\r\n </div>\r\n </button>\r\n )}\r\n\r\n {/* Custom meeting link */}\r\n {enableCustomLinks && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n setViewMode('custom-meeting');\r\n }}\r\n onMouseDown={handleInteractiveMouseDown}\r\n className=\"w-full flex items-center gap-3 px-3 py-3 rounded-xl hover:bg-purple-50 transition-all duration-200 text-left group\"\r\n >\r\n <div className=\"p-2 rounded-lg bg-purple-100 group-hover:bg-purple-200 transition-colors\">\r\n <VideoCameraIcon className=\"h-5 w-5 text-purple-600\" />\r\n </div>\r\n <div className=\"flex-1\">\r\n <div className=\"text-sm font-medium text-grey-900\">\r\n Custom meeting link\r\n </div>\r\n <div className=\"text-xs text-grey-500\">\r\n Add Zoom, Teams, or any meeting URL\r\n </div>\r\n </div>\r\n <ArrowRightIcon className=\"h-4 w-4 text-grey-400 group-hover:text-purple-500 transition-colors\" />\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </motion.div>\r\n )}\r\n\r\n {/* Custom Meeting View */}\r\n {viewMode === 'custom-meeting' && enableCustomLinks && (\r\n <motion.div\r\n key=\"custom-meeting\"\r\n variants={contentVariants}\r\n initial=\"hidden\"\r\n animate=\"visible\"\r\n exit=\"exit\"\r\n transition={{ duration: 0.2 }}\r\n className=\"p-3\"\r\n >\r\n <CustomMeetingForm\r\n initialData={customMeetingData}\r\n onSubmit={(data) => {\r\n setCustomMeetingData(data);\r\n handleCustomMeetingSubmit();\r\n }}\r\n onCancel={() => setViewMode('main')}\r\n cancelBlurTimeout={cancelBlurTimeout}\r\n handleInteractiveMouseDown={handleInteractiveMouseDown}\r\n contentVariants={contentVariants}\r\n />\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </ComboboxOptions>\r\n </motion.div>\r\n )}\r\n </AnimatePresence>\r\n </motion.div>\r\n\r\n {helperText && currentLocation && (\r\n <motion.p\r\n initial={{ opacity: 0 }}\r\n animate={{ opacity: 1 }}\r\n className=\"mt-2 text-sm text-grey-500\"\r\n >\r\n {helperText}\r\n </motion.p>\r\n )}\r\n\r\n {/* Enhanced Error Display */}\r\n {!currentLocation && <div className=\"mt-2\">\r\n <InputErrorMessage error={(parentError || error) as string} />\r\n {error && error.includes(\"Popup\") && (\r\n <button\r\n onClick={handleGoogleMeetConnect}\r\n className=\"mt-2 text-sm text-error-600 underline hover:text-error-800 font-medium\"\r\n >\r\n Try again\r\n </button>\r\n )}\r\n </div>\r\n }\r\n\r\n\r\n {/* Detailed Location Information - Always shown when location exists */}\r\n {(!parentError && !error) &&\r\n <AnimatePresence>\r\n {currentLocation && renderLocationDetails()}\r\n </AnimatePresence>\r\n }\r\n\r\n </div >\r\n </Combobox>\r\n <Alert\r\n type=\"success\"\r\n isVisible={showCopySuccess}\r\n message=\"Meeting link copied to clipboard!\"\r\n />\r\n </div >\r\n );\r\n}\r\n"],"names":["VideoCameraIcon","MapPinIcon","LinkIcon","DocumentDuplicateIcon","ClockIcon","CheckIcon","XMarkIcon","ChevronDownIcon","MagnifyingGlassIcon","ArrowRightIcon"],"mappings":"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"}
@@ -1,15 +0,0 @@
1
- import { default as React } from 'react';
2
-
3
- interface InputProps {
4
- question: string;
5
- placeholder: string;
6
- type: 'number' | 'text' | 'phone' | 'email' | 'cnic' | 'date' | 'discount' | 'time';
7
- value: string;
8
- error?: string | null;
9
- required?: boolean;
10
- isPreview?: boolean;
11
- onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
12
- isTeamSizeQuestion?: boolean;
13
- }
14
- declare const InputComponent: React.FC<InputProps>;
15
- export default InputComponent;
@@ -1,14 +0,0 @@
1
- interface RadioButtonGroupProps {
2
- label: string;
3
- options: string[];
4
- formData: any;
5
- setFormData: any;
6
- field: string;
7
- classname?: string;
8
- description?: string;
9
- formErrors?: any;
10
- validation?: any;
11
- values?: any;
12
- }
13
- export default function RadioButtonGroup({ label, options, formData, setFormData, field, classname, description, formErrors, validation, values, }: RadioButtonGroupProps): import("react/jsx-runtime").JSX.Element;
14
- export {};
@@ -1,19 +0,0 @@
1
- interface SelectFieldProps {
2
- label: string;
3
- options: string[];
4
- formData: any;
5
- setFormData: any;
6
- field: string;
7
- classname?: string;
8
- description?: string;
9
- formErrors?: any;
10
- validation?: any;
11
- values?: any;
12
- optionDescriptions?: string[];
13
- disabled?: boolean;
14
- dropdownClassName?: string;
15
- itemClassName?: string;
16
- searchable?: boolean;
17
- }
18
- export default function SelectField({ label, options, formData, setFormData, field, classname, description, formErrors, validation, values, optionDescriptions, disabled, dropdownClassName, itemClassName, searchable }: SelectFieldProps): import("react/jsx-runtime").JSX.Element;
19
- export {};
@@ -1,102 +0,0 @@
1
- import { jsxs, jsx } from "react/jsx-runtime";
2
- import { memo, useRef } from "react";
3
- import dayjs from "../../../node_modules/dayjs/dayjs.min.js";
4
- import customParseFormat from "../../../node_modules/dayjs/plugin/customParseFormat.js";
5
- import duration from "../../../node_modules/dayjs/plugin/duration.js";
6
- import relativeTime from "../../../node_modules/dayjs/plugin/relativeTime.js";
7
- import DatePicker from "../../ui/DatePicker/index.js";
8
- import TimePicker from "../../ui/TimePicker/index.js";
9
- import { cn } from "../../../utils/utils.js";
10
- import InputErrorMessage from "../../ui/InputErrorMessage.js";
11
- dayjs.extend(customParseFormat);
12
- dayjs.extend(duration);
13
- dayjs.extend(relativeTime);
14
- function SingleDateTimeInput({
15
- label,
16
- name,
17
- labelClassName,
18
- layoutClassName,
19
- dateTimeLayoutClassName,
20
- dateValue,
21
- timeValue,
22
- onChange,
23
- onBlur,
24
- error,
25
- className,
26
- minDate,
27
- maxDate,
28
- minTime,
29
- maxTime,
30
- renderTimeExtra,
31
- defaultMonth,
32
- step = 30
33
- }) {
34
- const containerRef = useRef(null);
35
- const handleDateSelect = (date) => {
36
- if (!date) {
37
- onChange == null ? void 0 : onChange({ date: "" });
38
- onBlur();
39
- return;
40
- }
41
- const year = date.getFullYear();
42
- const month = String(date.getMonth() + 1).padStart(2, "0");
43
- const day = String(date.getDate()).padStart(2, "0");
44
- const dateStr = `${year}-${month}-${day}`;
45
- onChange == null ? void 0 : onChange({ date: dateStr });
46
- onBlur();
47
- };
48
- const handleContainerBlur = (e) => {
49
- var _a;
50
- if (!((_a = containerRef.current) == null ? void 0 : _a.contains(e.relatedTarget))) {
51
- onBlur();
52
- }
53
- };
54
- return /* @__PURE__ */ jsxs(
55
- "div",
56
- {
57
- ref: containerRef,
58
- "data-name": name,
59
- className: `group ${className} ${error ? "" : ""}`,
60
- onBlur: handleContainerBlur,
61
- children: [
62
- /* @__PURE__ */ jsxs("div", { className: cn("flex flex-col sm:flex-row sm:items-center gap-1.5", layoutClassName), children: [
63
- /* @__PURE__ */ jsx("div", { className: cn("text-xs font-medium w-8 shrink-0", labelClassName), children: /* @__PURE__ */ jsx("span", { className: "text-grey-700", children: label }) }),
64
- /* @__PURE__ */ jsxs("div", { id: "date-time-picker", className: cn("flex flex-col sm:flex-row sm:items-center gap-1.5 flex-1", dateTimeLayoutClassName), children: [
65
- /* @__PURE__ */ jsx("div", { className: "relative w-full sm:flex-1", children: /* @__PURE__ */ jsx(
66
- DatePicker,
67
- {
68
- value: dateValue ? new Date(dateValue) : null,
69
- onChange: handleDateSelect,
70
- minDate: minDate ? new Date(minDate) : void 0,
71
- maxDate: maxDate ? new Date(maxDate) : void 0,
72
- defaultMonth,
73
- error,
74
- className: "rounded-lg h-10"
75
- }
76
- ) }),
77
- /* @__PURE__ */ jsx("div", { className: "relative flex-1 w-full", children: /* @__PURE__ */ jsx(
78
- TimePicker,
79
- {
80
- value: timeValue,
81
- onChange: (time) => onChange == null ? void 0 : onChange({ time }),
82
- minTime,
83
- maxTime,
84
- error,
85
- onBlur: () => onBlur(),
86
- renderExtra: renderTimeExtra,
87
- className: "w-full h-10",
88
- step
89
- }
90
- ) })
91
- ] })
92
- ] }),
93
- /* @__PURE__ */ jsx(InputErrorMessage, { error: error || "", className: "mt-2" })
94
- ]
95
- }
96
- );
97
- }
98
- const SingleDateTimeInput$1 = memo(SingleDateTimeInput);
99
- export {
100
- SingleDateTimeInput$1 as default
101
- };
102
- //# sourceMappingURL=SingleDateTimeInput.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SingleDateTimeInput.js","sources":["../../../../src/components/EventAddForm/components/SingleDateTimeInput.tsx"],"sourcesContent":["import { useRef, memo } from 'react';\r\nimport dayjs from 'dayjs';\r\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\r\nimport duration from 'dayjs/plugin/duration';\r\nimport relativeTime from 'dayjs/plugin/relativeTime';\r\nimport DatePicker from '@/components/ui/DatePicker';\r\nimport TimePicker from \"@/components/ui/TimePicker\";\r\nimport { cn } from '@/utils/utils';\r\nimport InputErrorMessage from \"@/components/ui/InputErrorMessage\";\r\n\r\ndayjs.extend(customParseFormat);\r\ndayjs.extend(duration);\r\ndayjs.extend(relativeTime);\r\n\r\n\r\ninterface SingleDateTimeInputProps {\r\n label: string;\r\n name: string;\r\n labelClassName?: string;\r\n layoutClassName?: string;\r\n dateTimeLayoutClassName?: string;\r\n dateValue: string;\r\n timeValue: string;\r\n onChange?: (values: { date?: string; time?: string }) => void;\r\n onBlur: () => void;\r\n error?: string;\r\n className?: string;\r\n minDate?: string;\r\n maxDate?: string;\r\n minTime?: string;\r\n maxTime?: string;\r\n description?: string;\r\n renderTimeExtra?: (time: string) => React.ReactNode;\r\n defaultMonth?: Date;\r\n step?: number;\r\n}\r\n\r\n\r\nfunction SingleDateTimeInput({\r\n label,\r\n name,\r\n labelClassName,\r\n layoutClassName,\r\n dateTimeLayoutClassName,\r\n dateValue,\r\n timeValue,\r\n onChange,\r\n onBlur,\r\n error,\r\n className,\r\n minDate,\r\n maxDate,\r\n minTime,\r\n maxTime,\r\n renderTimeExtra,\r\n defaultMonth,\r\n step = 30\r\n}: SingleDateTimeInputProps) {\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n\r\n const handleDateSelect = (date: Date | null) => {\r\n if (!date) {\r\n onChange?.({ date: \"\" });\r\n onBlur();\r\n return;\r\n }\r\n const year = date.getFullYear();\r\n const month = String(date.getMonth() + 1).padStart(2, '0');\r\n const day = String(date.getDate()).padStart(2, '0');\r\n const dateStr = `${year}-${month}-${day}`;\r\n\r\n onChange?.({ date: dateStr });\r\n onBlur();\r\n };\r\n\r\n const handleContainerBlur = (e: React.FocusEvent) => {\r\n if (!containerRef.current?.contains(e.relatedTarget as Node)) {\r\n onBlur();\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={containerRef}\r\n data-name={name}\r\n className={`group ${className} ${error ? '' : ''}`}\r\n onBlur={handleContainerBlur}\r\n >\r\n <div className={cn(\"flex flex-col sm:flex-row sm:items-center gap-1.5\", layoutClassName)}>\r\n <div className={cn(\"text-xs font-medium w-8 shrink-0\", labelClassName)}>\r\n <span className='text-grey-700'>{label}</span>\r\n </div>\r\n <div id=\"date-time-picker\" className={cn(\"flex flex-col sm:flex-row sm:items-center gap-1.5 flex-1\", dateTimeLayoutClassName)}>\r\n {/* Date Picker */}\r\n <div className=\"relative w-full sm:flex-1\">\r\n <DatePicker\r\n value={dateValue ? new Date(dateValue) : null}\r\n onChange={handleDateSelect}\r\n minDate={minDate ? new Date(minDate) : undefined}\r\n maxDate={maxDate ? new Date(maxDate) : undefined}\r\n defaultMonth={defaultMonth}\r\n error={error}\r\n className=\"rounded-lg h-10\"\r\n />\r\n </div>\r\n\r\n {/* Time Picker */}\r\n <div className=\"relative flex-1 w-full\">\r\n <TimePicker\r\n value={timeValue}\r\n onChange={(time) => onChange?.({ time })}\r\n minTime={minTime}\r\n maxTime={maxTime}\r\n error={error}\r\n onBlur={() => onBlur()}\r\n renderExtra={renderTimeExtra}\r\n className=\"w-full h-10\"\r\n step={step}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n <InputErrorMessage error={error || \"\"} className='mt-2' />\r\n </div>\r\n );\r\n}\r\n\r\n\r\nexport default memo(SingleDateTimeInput);\r\n"],"names":[],"mappings":";;;;;;;;;;AAUA,MAAM,OAAO,iBAAiB;AAC9B,MAAM,OAAO,QAAQ;AACrB,MAAM,OAAO,YAAY;AA0BzB,SAAS,oBAAoB;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AACX,GAA6B;AACzB,QAAM,eAAe,OAAuB,IAAI;AAEhD,QAAM,mBAAmB,CAAC,SAAsB;AAC5C,QAAI,CAAC,MAAM;AACP,2CAAW,EAAE,MAAM;AACnB,aAAA;AACA;AAAA,IACJ;AACA,UAAM,OAAO,KAAK,YAAA;AAClB,UAAM,QAAQ,OAAO,KAAK,SAAA,IAAa,CAAC,EAAE,SAAS,GAAG,GAAG;AACzD,UAAM,MAAM,OAAO,KAAK,QAAA,CAAS,EAAE,SAAS,GAAG,GAAG;AAClD,UAAM,UAAU,GAAG,IAAI,IAAI,KAAK,IAAI,GAAG;AAEvC,yCAAW,EAAE,MAAM;AACnB,WAAA;AAAA,EACJ;AAEA,QAAM,sBAAsB,CAAC,MAAwB;;AACjD,QAAI,GAAC,kBAAa,YAAb,mBAAsB,SAAS,EAAE,iBAAwB;AAC1D,aAAA;AAAA,IACJ;AAAA,EACJ;AAEA,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,KAAK;AAAA,MACL,aAAW;AAAA,MACX,WAAW,SAAS,SAAS,IAAI,QAAQ,KAAK,EAAE;AAAA,MAChD,QAAQ;AAAA,MAER,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAW,GAAG,qDAAqD,eAAe,GACnF,UAAA;AAAA,UAAA,oBAAC,OAAA,EAAI,WAAW,GAAG,oCAAoC,cAAc,GACjE,UAAA,oBAAC,QAAA,EAAK,WAAU,iBAAiB,UAAA,MAAA,CAAM,GAC3C;AAAA,UACA,qBAAC,SAAI,IAAG,oBAAmB,WAAW,GAAG,4DAA4D,uBAAuB,GAExH,UAAA;AAAA,YAAA,oBAAC,OAAA,EAAI,WAAU,6BACX,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,OAAO,YAAY,IAAI,KAAK,SAAS,IAAI;AAAA,gBACzC,UAAU;AAAA,gBACV,SAAS,UAAU,IAAI,KAAK,OAAO,IAAI;AAAA,gBACvC,SAAS,UAAU,IAAI,KAAK,OAAO,IAAI;AAAA,gBACvC;AAAA,gBACA;AAAA,gBACA,WAAU;AAAA,cAAA;AAAA,YAAA,GAElB;AAAA,YAGA,oBAAC,OAAA,EAAI,WAAU,0BACX,UAAA;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,OAAO;AAAA,gBACP,UAAU,CAAC,SAAS,qCAAW,EAAE;gBACjC;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA,QAAQ,MAAM,OAAA;AAAA,gBACd,aAAa;AAAA,gBACb,WAAU;AAAA,gBACV;AAAA,cAAA;AAAA,YAAA,EACJ,CACJ;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,GACJ;AAAA,4BACC,mBAAA,EAAkB,OAAO,SAAS,IAAI,WAAU,OAAA,CAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGpE;AAGA,MAAA,wBAAe,KAAK,mBAAmB;"}