@hhgtech/hhg-components 1.29.372 → 1.29.374-beta-1

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 (543) hide show
  1. package/build/{InputDate-084af3b7.js → InputDate-27f75a17.js} +20 -20
  2. package/build/{LastPeriod-7920d16e.js → LastPeriod-9df97187.js} +1 -1
  3. package/build/{Locale-a034e717.js → Locale-ab6a6ba4.js} +1 -0
  4. package/build/{MobileBottomNavigationIcon-ae480710.js → MobileBottomNavigationIcon-96a68780.js} +3 -3
  5. package/build/{Spinner-9bf08d65.js → Spinner-aa4dd99c.js} +1 -1
  6. package/build/{WhatsApp-73c563dc.js → WhatsApp-9903ef96.js} +1 -1
  7. package/build/adapters.js +19 -19
  8. package/build/atoms.js +48 -48
  9. package/build/babyGrowth.js +83 -83
  10. package/build/cache.js +2 -2
  11. package/build/care.js +17 -17
  12. package/build/careBookingSearchBar.js +14 -14
  13. package/build/careBookingSearchBarV2.js +15 -15
  14. package/build/components/atoms/logo/index.d.ts +1 -1
  15. package/build/components/mantine/phone/index.d.ts +2 -0
  16. package/build/components/mantine/phoneInput/PhoneInput.d.ts +17 -0
  17. package/build/components/mantine/phoneInput/index.d.ts +1 -0
  18. package/build/components.js +96 -96
  19. package/build/{constants-f0954264.js → constants-0bcb9891.js} +1 -0
  20. package/build/{constants-3c232ac7.js → constants-7f234d99.js} +1 -1
  21. package/build/constants.js +3 -3
  22. package/build/constantsDomainLocales.js +3 -1
  23. package/build/constantsRiskScreener.js +2 -2
  24. package/build/constantsSite.js +2 -2
  25. package/build/{core-35ae537b.js → core-c24db88c.js} +1 -1
  26. package/build/{dataTransform-90facc7b.js → dataTransform-049d8098.js} +1 -1
  27. package/build/ecom.js +4 -4
  28. package/build/{editor-b1b9b19c.js → editor-6fe7a5a0.js} +11 -11
  29. package/build/embeddedHeathToolCards_babyGrowth.js +23 -23
  30. package/build/embeddedHeathToolCards_babyPoop.js +19 -19
  31. package/build/embeddedHeathToolCards_babyVaccine.js +22 -22
  32. package/build/embeddedHeathToolCards_bmi_bmi.js +25 -25
  33. package/build/embeddedHeathToolCards_bmrBmr.js +25 -25
  34. package/build/embeddedHeathToolCards_dueDate_dueDate.js +22 -22
  35. package/build/embeddedHeathToolCards_ovulation_ovulation.js +22 -22
  36. package/build/embeddedHeathToolCards_pwg_pwg.js +26 -26
  37. package/build/embeddedHeathToolCards_targetHeartRate.js +27 -27
  38. package/build/esm/{InputDate-544d7517.js → InputDate-53408741.js} +20 -20
  39. package/build/esm/{LastPeriod-64debefd.js → LastPeriod-7572677e.js} +1 -1
  40. package/build/esm/{Locale-3e2786ee.js → Locale-2def755e.js} +1 -0
  41. package/build/esm/{MobileBottomNavigationIcon-57dcd2d5.js → MobileBottomNavigationIcon-3333d468.js} +3 -3
  42. package/build/esm/{Spinner-a2b03942.js → Spinner-2e9210e6.js} +1 -1
  43. package/build/esm/{WhatsApp-4bd22594.js → WhatsApp-be4e850b.js} +1 -1
  44. package/build/esm/adapters.js +19 -19
  45. package/build/esm/atoms.js +48 -48
  46. package/build/esm/babyGrowth.js +83 -83
  47. package/build/esm/cache.js +2 -2
  48. package/build/esm/care.js +17 -17
  49. package/build/esm/careBookingSearchBar.js +14 -14
  50. package/build/esm/careBookingSearchBarV2.js +15 -15
  51. package/build/esm/components/atoms/logo/index.d.ts +1 -1
  52. package/build/esm/components/mantine/phone/index.d.ts +2 -0
  53. package/build/esm/components/mantine/phoneInput/PhoneInput.d.ts +17 -0
  54. package/build/esm/components/mantine/phoneInput/index.d.ts +1 -0
  55. package/build/esm/components.js +96 -96
  56. package/build/esm/{constants-46a13b0b.js → constants-42ff2492.js} +1 -1
  57. package/build/esm/{constants-5e4d9287.js → constants-c405c24a.js} +1 -0
  58. package/build/esm/constants.js +3 -3
  59. package/build/esm/constantsDomainLocales.js +3 -1
  60. package/build/esm/constantsRiskScreener.js +2 -2
  61. package/build/esm/constantsSite.js +2 -2
  62. package/build/esm/{core-b8fa3e33.js → core-dc68adaf.js} +1 -1
  63. package/build/esm/{dataTransform-1ad95d27.js → dataTransform-183320e7.js} +1 -1
  64. package/build/esm/ecom.js +4 -4
  65. package/build/esm/{editor-8213370a.js → editor-d1af996e.js} +11 -11
  66. package/build/esm/embeddedHeathToolCards_babyGrowth.js +23 -23
  67. package/build/esm/embeddedHeathToolCards_babyPoop.js +19 -19
  68. package/build/esm/embeddedHeathToolCards_babyVaccine.js +22 -22
  69. package/build/esm/embeddedHeathToolCards_bmi_bmi.js +25 -25
  70. package/build/esm/embeddedHeathToolCards_bmrBmr.js +25 -25
  71. package/build/esm/embeddedHeathToolCards_dueDate_dueDate.js +22 -22
  72. package/build/esm/embeddedHeathToolCards_ovulation_ovulation.js +22 -22
  73. package/build/esm/embeddedHeathToolCards_pwg_pwg.js +26 -26
  74. package/build/esm/embeddedHeathToolCards_targetHeartRate.js +27 -27
  75. package/build/esm/footer.js +21 -21
  76. package/build/esm/gAssets.js +2 -2
  77. package/build/esm/{healthTools-84758186.js → healthTools-3d480046.js} +1 -1
  78. package/build/esm/healthToolsCardWrapper.js +18 -18
  79. package/build/esm/healthToolsForm.js +33 -33
  80. package/build/esm/hooks.js +13 -13
  81. package/build/esm/i18n-values/zh-CN.js +855 -0
  82. package/build/esm/i18n.js +14 -55
  83. package/build/esm/i18nV2.js +2 -2
  84. package/build/esm/{index-c07eed8e.js → index-060e9629.js} +24 -24
  85. package/build/esm/{index-7cdf73e7.js → index-0abc03cd.js} +6 -6
  86. package/build/esm/{index-02c659dd.js → index-0d9a1b8c.js} +1 -1
  87. package/build/esm/{index-f12cf95a.js → index-0e17355b.js} +6 -6
  88. package/build/esm/{index-260a6cef.js → index-0e386ca4.js} +16 -16
  89. package/build/esm/{index-49c4b81e.js → index-10620223.js} +2 -2
  90. package/build/esm/{index-3e33fe3d.js → index-15cbeea2.js} +10 -10
  91. package/build/esm/{index-371d0a77.js → index-1603823c.js} +2 -2
  92. package/build/esm/{index-773c6e02.js → index-16fae63d.js} +6 -6
  93. package/build/esm/{index-b0f6139c.js → index-17165c22.js} +31 -31
  94. package/build/esm/{index-eb34db89.js → index-1b46ae3f.js} +2 -2
  95. package/build/esm/{index-0ece29aa.js → index-1b7e37bd.js} +2 -2
  96. package/build/esm/{index-9792c9b6.js → index-1bd62005.js} +18 -18
  97. package/build/esm/{index-722df7e6.js → index-1f21ae1e.js} +4 -4
  98. package/build/esm/{index-0823f05f.js → index-202a8ced.js} +2 -2
  99. package/build/esm/{index-8a062d3b.js → index-224abae7.js} +3 -3
  100. package/build/esm/{index-b41d6d8a.js → index-27730dc3.js} +21 -21
  101. package/build/esm/{index-83afe17a.js → index-2794e74a.js} +17 -17
  102. package/build/esm/{index-15dc7ed3.js → index-2c1db9ad.js} +32 -32
  103. package/build/esm/{index-008fb6f5.js → index-3ed1535e.js} +13 -13
  104. package/build/esm/{index-e3abcd93.js → index-410551f4.js} +1 -1
  105. package/build/esm/{index-d303f24d.js → index-4665f512.js} +7 -7
  106. package/build/esm/{index-6223f41c.js → index-4d7b2bc3.js} +3 -3
  107. package/build/esm/{index-c229b5b7.js → index-4e2139dc.js} +1 -1
  108. package/build/esm/{index-2050b8fa.js → index-510b91b2.js} +17 -17
  109. package/build/esm/{index-d46d72e5.js → index-53e72c1e.js} +2 -2
  110. package/build/esm/{index-b1702546.js → index-54de0535.js} +39 -2
  111. package/build/esm/{index-84fabe77.js → index-5535a0d5.js} +16 -16
  112. package/build/esm/{index-799ebe61.js → index-55d4a57f.js} +13 -13
  113. package/build/esm/{index-e2f4897f.js → index-56d4c7d5.js} +3 -3
  114. package/build/esm/{index-b0a09330.js → index-56f8b83d.js} +2 -2
  115. package/build/esm/{index-d2bdab8c.js → index-5ab20a03.js} +6 -6
  116. package/build/esm/{index-59b7c65e.js → index-5afaa486.js} +2 -2
  117. package/build/esm/{index-f18301b6.js → index-67bb06d6.js} +3 -3
  118. package/build/esm/{index-34f81557.js → index-6c64fa7c.js} +2 -2
  119. package/build/esm/{index-cc5dd802.js → index-7f282951.js} +7 -7
  120. package/build/esm/{index-3283d034.js → index-8d30046e.js} +8 -8
  121. package/build/esm/{index-40542814.js → index-8fe7951c.js} +5 -5
  122. package/build/esm/{index-f1dfe73b.js → index-921553c7.js} +3 -3
  123. package/build/esm/{index-e3522239.js → index-94c7ee4b.js} +1 -1
  124. package/build/esm/{index-e00ea5ce.js → index-9ce105df.js} +1 -1
  125. package/build/esm/{index-3fe07695.js → index-a1ae0a50.js} +36 -27
  126. package/build/esm/{index-f20e08f2.js → index-a7b5b3da.js} +2 -2
  127. package/build/esm/{index-88a60434.js → index-ac1dc7b5.js} +13 -13
  128. package/build/esm/{index-8590aa43.js → index-adc4f674.js} +1 -1
  129. package/build/esm/{index-1992432a.js → index-adf2bd5f.js} +1 -1
  130. package/build/esm/{index-22e09b92.js → index-b01bed06.js} +16 -16
  131. package/build/esm/{index-b52e228a.js → index-b472c383.js} +16 -16
  132. package/build/esm/{index-4320a963.js → index-b78bcf84.js} +15 -15
  133. package/build/esm/{index-87283fad.js → index-bd6288c0.js} +13 -13
  134. package/build/esm/{index-6e796974.js → index-bedd68c7.js} +1 -1
  135. package/build/esm/{index-ddb8b5f9.js → index-ccd54316.js} +3 -3
  136. package/build/esm/{index-febe5b0b.js → index-d30ed987.js} +2 -2
  137. package/build/esm/{index-08134aa1.js → index-d5affca6.js} +18 -18
  138. package/build/esm/{index-3c7bade1.js → index-d5dfbc30.js} +2 -2
  139. package/build/esm/{index-6491bd17.js → index-d8aea1c6.js} +1 -1
  140. package/build/esm/{index-49767cf6.js → index-dbed3a12.js} +5 -5
  141. package/build/esm/{index-e5ebf355.js → index-de4012d5.js} +6 -6
  142. package/build/esm/{index-d6b1760f.js → index-e2520675.js} +25 -25
  143. package/build/esm/{index-5b5f2d0c.js → index-e274fd81.js} +22 -22
  144. package/build/esm/{index-b42c9f25.js → index-eb330fed.js} +32 -32
  145. package/build/esm/{index-c85f2927.js → index-eea13537.js} +2 -2
  146. package/build/esm/{index-0b7e5368.js → index-f0fbcf39.js} +17 -17
  147. package/build/esm/{index-37f46909.js → index-fbe17b79.js} +17 -17
  148. package/build/esm/index.js +117 -117
  149. package/build/esm/interfaces/constants/domainLocales.d.ts +2 -0
  150. package/build/esm/interfaces/constants/index.d.ts +1 -1
  151. package/build/esm/interfaces/types/Locale.d.ts +2 -1
  152. package/build/esm/interfaces/types/index.d.ts +2 -1
  153. package/build/esm/{labelSorting-4590af02.js → labelSorting-903c9ace.js} +4 -4
  154. package/build/esm/lead/LeadGen.type.d.ts +31 -0
  155. package/build/esm/lead/LeadGenForm/LeadGenForm.d.ts +41 -0
  156. package/build/esm/lead/LeadGenForm/LeadGenForm.helpers.d.ts +2 -0
  157. package/build/esm/lead/LeadGenForm/LeadGenForm.styled.d.ts +5 -0
  158. package/build/esm/lead/LeadGenForm/LeadGenFormPhone.d.ts +17 -0
  159. package/build/esm/lead/LeadGenForm/LeadGenThankYou.d.ts +20 -0
  160. package/build/esm/lead/LeadGenForm/index.d.ts +3 -0
  161. package/build/esm/lead/LeadGenForm/textField/index.d.ts +13 -0
  162. package/build/esm/lead/LeadGenForm/textField/index.styled.d.ts +11 -0
  163. package/build/esm/lead/LeadGenSubscriptionBox/LeadGenContext.d.ts +63 -0
  164. package/build/esm/lead/LeadGenSubscriptionBox/LeadGenSubscriptionBox.d.ts +4 -0
  165. package/build/esm/lead/LeadGenSubscriptionBox/LeadGenSubscriptionBox.styled.d.ts +21 -0
  166. package/build/esm/lead/LeadGenSubscriptionBox/LeadGenSubscriptionBoxA.d.ts +3 -0
  167. package/build/esm/lead/LeadGenSubscriptionBox/LeadGenSubscriptionBoxContainer.d.ts +23 -0
  168. package/build/esm/lead/LeadGenSubscriptionBox/index.d.ts +1 -0
  169. package/build/esm/lead/LeadGenTranslationContext.d.ts +6 -0
  170. package/build/esm/lead/helpers.d.ts +56 -1
  171. package/build/esm/lead/index.d.ts +2 -1
  172. package/build/esm/lead/layouts/lightbox/formContext.d.ts +2 -1
  173. package/build/esm/lead/services/index.d.ts +19 -0
  174. package/build/esm/lead/store/index.d.ts +1 -0
  175. package/build/esm/lead.css +1 -1
  176. package/build/esm/lead.js +2437 -1235
  177. package/build/esm/{logoIcon-8a63b46b.js → logoIcon-fdb7619c.js} +8 -2
  178. package/build/esm/mantine.js +25 -25
  179. package/build/esm/misc.js +17 -17
  180. package/build/esm/miscGetDynamicHealthTool.js +4 -4
  181. package/build/esm/miscGetSocialList.js +8 -8
  182. package/build/esm/miscScreenSizeContext.js +1 -1
  183. package/build/esm/mobileBottomNavigation.js +5 -5
  184. package/build/esm/mobileBottomNavigationIcon.js +5 -5
  185. package/build/esm/molecules.js +73 -73
  186. package/build/esm/moleculesArticleCard.js +6 -6
  187. package/build/esm/moleculesArticleCardV2.js +16 -16
  188. package/build/esm/navigation.js +45 -45
  189. package/build/esm/navigationLogoutPopup.js +9 -9
  190. package/build/esm/navigationProfileButton.js +23 -23
  191. package/build/esm/onboardingV2.js +29 -29
  192. package/build/esm/organisms.js +49 -49
  193. package/build/esm/{post-a4e3b00b.js → post-d812dde9.js} +2 -2
  194. package/build/esm/profileNavigation.js +19 -19
  195. package/build/esm/progressBar.js +1 -1
  196. package/build/esm/pwg.js +22 -22
  197. package/build/esm/ssoV2/api/featureFlag.d.ts +2 -1
  198. package/build/esm/ssoV2.js +51 -39
  199. package/build/esm/{store-a9c2a3c4.js → store-ffd867c4.js} +4 -4
  200. package/build/esm/subot.js +35 -35
  201. package/build/esm/surveyOrPremiumBanner.js +32 -32
  202. package/build/esm/surveyQuestionCard.js +10 -10
  203. package/build/esm/{surveyThankyouCard-f1e71ef9.js → surveyThankyouCard-6362dc3c.js} +5 -5
  204. package/build/esm/together.js +55 -55
  205. package/build/esm/togetherApiUtils.js +4 -4
  206. package/build/esm/togetherAtoms.js +30 -30
  207. package/build/esm/togetherComponentGlobalContext.js +4 -4
  208. package/build/esm/togetherMolecules.js +50 -50
  209. package/build/esm/togetherMoleculesCardAuthor.js +28 -28
  210. package/build/esm/togetherMoleculesPostImagePreview.js +11 -11
  211. package/build/esm/togetherMoleculesProfileDetail.js +38 -38
  212. package/build/esm/togetherOrganisms.js +49 -49
  213. package/build/esm/togetherRichTextEditor.js +17 -17
  214. package/build/esm/togetherShareBox.js +10 -10
  215. package/build/esm/translationsProvider-75b93b92.js +55 -0
  216. package/build/esm/{treePopoverMenu-2b4a0ce7.js → treePopoverMenu-03480736.js} +19 -19
  217. package/build/esm/{types-00647e82.js → types-4b072730.js} +2 -2
  218. package/build/esm/types.js +2 -2
  219. package/build/esm/{useCategory-b156220e.js → useCategory-1d58b7de.js} +18 -5
  220. package/build/esm/{useHealthToolCache-83bc2007.js → useHealthToolCache-8e65e4cc.js} +1 -1
  221. package/build/esm/{useMantineLocale-75d3a92b.js → useMantineLocale-2ddd0d66.js} +8 -6
  222. package/build/esm/{usePlacesAutocomplete-be5196d7.js → usePlacesAutocomplete-1451c491.js} +1 -1
  223. package/build/esm/{useScreenSize-9091e971.js → useScreenSize-b097bc99.js} +2 -2
  224. package/build/esm/useTogetherAuthRequiredAction.js +9 -9
  225. package/build/esm/{utils-654cc220.js → utils-3ff75edd.js} +2 -2
  226. package/build/esm/{utils-d3607ebf.js → utils-837a98c2.js} +2 -2
  227. package/build/esm/{utils-0d32cd95.js → utils-9d061cb4.js} +4 -4
  228. package/build/esm/{utils-c6d483d6.js → utils-a6705915.js} +3 -3
  229. package/build/esm/vaccination.js +21 -21
  230. package/build/footer.js +21 -21
  231. package/build/gAssets.js +2 -2
  232. package/build/{healthTools-5d43fdba.js → healthTools-5675769e.js} +1 -1
  233. package/build/healthToolsCardWrapper.js +18 -18
  234. package/build/healthToolsForm.js +33 -33
  235. package/build/hooks.js +13 -13
  236. package/build/i18n-values/zh-CN.js +866 -0
  237. package/build/i18n.js +16 -56
  238. package/build/i18nV2.js +1 -1
  239. package/build/{index-1e5869a0.js → index-01674c9d.js} +1 -1
  240. package/build/{index-015decac.js → index-01f31cb8.js} +13 -13
  241. package/build/{index-95d0866e.js → index-058de55a.js} +22 -22
  242. package/build/{index-f1240784.js → index-0a1ac489.js} +6 -6
  243. package/build/{index-153b215b.js → index-0b32faf6.js} +16 -16
  244. package/build/{index-e6d89d93.js → index-131cf2b6.js} +7 -7
  245. package/build/{index-b15cd09e.js → index-1cbd6748.js} +2 -2
  246. package/build/{index-3b559014.js → index-1d84b42c.js} +6 -6
  247. package/build/{index-90c3bd51.js → index-23e996bf.js} +2 -2
  248. package/build/{index-1dca06d3.js → index-23f5de35.js} +31 -31
  249. package/build/{index-fa0f1dec.js → index-2555df32.js} +1 -1
  250. package/build/{index-7d70d6d9.js → index-2644ecd5.js} +2 -2
  251. package/build/{index-3d49b533.js → index-2a3051c7.js} +17 -17
  252. package/build/{index-892e05e3.js → index-2fd62012.js} +13 -13
  253. package/build/{index-dc9d63cb.js → index-3278247e.js} +10 -10
  254. package/build/{index-a67e5b8c.js → index-3e668daf.js} +2 -2
  255. package/build/{index-964bebd5.js → index-3f648346.js} +2 -2
  256. package/build/{index-349d4ad5.js → index-424296a4.js} +3 -3
  257. package/build/{index-578b7adc.js → index-42af3733.js} +2 -2
  258. package/build/{index-f0871b13.js → index-4ba367d3.js} +2 -2
  259. package/build/{index-312f141b.js → index-4ca26ec6.js} +3 -3
  260. package/build/{index-04336ab9.js → index-4ec0821f.js} +1 -1
  261. package/build/{index-c4fdcb5d.js → index-517f6f16.js} +25 -25
  262. package/build/{index-7a0bbb05.js → index-523e7e4d.js} +39 -2
  263. package/build/{index-b7e2e5d7.js → index-56574883.js} +2 -2
  264. package/build/{index-86e1489b.js → index-5978843f.js} +3 -3
  265. package/build/{index-3c9b6c14.js → index-5c38e2bd.js} +1 -1
  266. package/build/{index-4f50c9a6.js → index-64618042.js} +4 -4
  267. package/build/{index-1e3ef673.js → index-67fb3969.js} +8 -8
  268. package/build/{index-6427efb3.js → index-68ca2ec6.js} +32 -32
  269. package/build/{index-109bc0ba.js → index-6d0d6307.js} +16 -16
  270. package/build/{index-0ccd6ab4.js → index-702577b3.js} +18 -18
  271. package/build/{index-9ed8f15e.js → index-706cdb42.js} +6 -6
  272. package/build/{index-1832c923.js → index-729572c2.js} +1 -1
  273. package/build/{index-9e545145.js → index-734405be.js} +17 -17
  274. package/build/{index-3d0f0804.js → index-737372f7.js} +2 -2
  275. package/build/{index-bcf83833.js → index-7523372e.js} +17 -17
  276. package/build/{index-669549a2.js → index-84b1400f.js} +2 -2
  277. package/build/{index-2aa39a80.js → index-8721dda0.js} +15 -15
  278. package/build/{index-73816dbf.js → index-8807a628.js} +16 -16
  279. package/build/{index-8a505064.js → index-8cc5aaf4.js} +17 -17
  280. package/build/{index-32d56013.js → index-8e3127cf.js} +2 -2
  281. package/build/{index-c6c79524.js → index-8e928040.js} +5 -5
  282. package/build/{index-5874eb30.js → index-90c35133.js} +7 -7
  283. package/build/{index-064c06f3.js → index-965b5561.js} +5 -5
  284. package/build/{index-b98ed131.js → index-9783335b.js} +13 -13
  285. package/build/{index-ff7f8fd0.js → index-9ab7ef60.js} +24 -24
  286. package/build/{index-0b1b3404.js → index-a10c0c62.js} +3 -3
  287. package/build/{index-3acf4291.js → index-a9122b6e.js} +1 -1
  288. package/build/{index-c349ac59.js → index-b5cf12ac.js} +18 -18
  289. package/build/{index-d93867ea.js → index-b755d36a.js} +1 -1
  290. package/build/{index-1ffd87e6.js → index-c0efb13b.js} +6 -6
  291. package/build/{index-d59daad9.js → index-c7b52682.js} +21 -21
  292. package/build/{index-ffa29b44.js → index-d0820aeb.js} +36 -27
  293. package/build/{index-7fc6a742.js → index-d4b12903.js} +3 -3
  294. package/build/{index-576a7b83.js → index-d68d726d.js} +32 -32
  295. package/build/{index-022360ea.js → index-d74b605a.js} +2 -2
  296. package/build/{index-04fded65.js → index-e1a7b1ce.js} +1 -1
  297. package/build/{index-6433425b.js → index-e7218beb.js} +6 -6
  298. package/build/{index-33c24fd1.js → index-ebe2c303.js} +13 -13
  299. package/build/{index-c234311f.js → index-ee1dd2b5.js} +16 -16
  300. package/build/{index-e7f91600.js → index-f425dec1.js} +1 -1
  301. package/build/{index-bcffdc4e.js → index-f68b6b94.js} +3 -3
  302. package/build/{index-6e1d6d78.js → index-fe818695.js} +2 -2
  303. package/build/index.js +117 -117
  304. package/build/interfaces/constants/domainLocales.d.ts +2 -0
  305. package/build/interfaces/constants/index.d.ts +1 -1
  306. package/build/interfaces/types/Locale.d.ts +2 -1
  307. package/build/interfaces/types/index.d.ts +2 -1
  308. package/build/{labelSorting-7570276e.js → labelSorting-1c7cee93.js} +4 -4
  309. package/build/lead/LeadGen.type.d.ts +31 -0
  310. package/build/lead/LeadGenForm/LeadGenForm.d.ts +41 -0
  311. package/build/lead/LeadGenForm/LeadGenForm.helpers.d.ts +2 -0
  312. package/build/lead/LeadGenForm/LeadGenForm.styled.d.ts +5 -0
  313. package/build/lead/LeadGenForm/LeadGenFormPhone.d.ts +17 -0
  314. package/build/lead/LeadGenForm/LeadGenThankYou.d.ts +20 -0
  315. package/build/lead/LeadGenForm/index.d.ts +3 -0
  316. package/build/lead/LeadGenForm/textField/index.d.ts +13 -0
  317. package/build/lead/LeadGenForm/textField/index.styled.d.ts +11 -0
  318. package/build/lead/LeadGenSubscriptionBox/LeadGenContext.d.ts +63 -0
  319. package/build/lead/LeadGenSubscriptionBox/LeadGenSubscriptionBox.d.ts +4 -0
  320. package/build/lead/LeadGenSubscriptionBox/LeadGenSubscriptionBox.styled.d.ts +21 -0
  321. package/build/lead/LeadGenSubscriptionBox/LeadGenSubscriptionBoxA.d.ts +3 -0
  322. package/build/lead/LeadGenSubscriptionBox/LeadGenSubscriptionBoxContainer.d.ts +23 -0
  323. package/build/lead/LeadGenSubscriptionBox/index.d.ts +1 -0
  324. package/build/lead/LeadGenTranslationContext.d.ts +6 -0
  325. package/build/lead/helpers.d.ts +56 -1
  326. package/build/lead/index.d.ts +2 -1
  327. package/build/lead/layouts/lightbox/formContext.d.ts +2 -1
  328. package/build/lead/services/index.d.ts +19 -0
  329. package/build/lead/store/index.d.ts +1 -0
  330. package/build/lead.css +1 -1
  331. package/build/lead.js +2308 -1105
  332. package/build/{logoIcon-a0093830.js → logoIcon-0adc172c.js} +8 -2
  333. package/build/mantine.js +22 -22
  334. package/build/misc.js +17 -17
  335. package/build/miscGetDynamicHealthTool.js +4 -4
  336. package/build/miscGetSocialList.js +8 -8
  337. package/build/miscScreenSizeContext.js +1 -1
  338. package/build/mobileBottomNavigation.js +5 -5
  339. package/build/mobileBottomNavigationIcon.js +5 -5
  340. package/build/molecules.js +73 -73
  341. package/build/moleculesArticleCard.js +6 -6
  342. package/build/moleculesArticleCardV2.js +16 -16
  343. package/build/navigation.js +45 -45
  344. package/build/navigationLogoutPopup.js +9 -9
  345. package/build/navigationProfileButton.js +23 -23
  346. package/build/onboardingV2.js +28 -28
  347. package/build/organisms.js +49 -49
  348. package/build/{post-8b3ec323.js → post-9e59e11b.js} +2 -2
  349. package/build/profileNavigation.js +19 -19
  350. package/build/progressBar.js +1 -1
  351. package/build/pwg.js +22 -22
  352. package/build/ssoV2/api/featureFlag.d.ts +2 -1
  353. package/build/ssoV2.js +49 -37
  354. package/build/{store-3bb34d08.js → store-f6379c86.js} +4 -4
  355. package/build/subot.js +34 -34
  356. package/build/surveyOrPremiumBanner.js +32 -32
  357. package/build/surveyQuestionCard.js +10 -10
  358. package/build/{surveyThankyouCard-40fde7aa.js → surveyThankyouCard-24135968.js} +5 -5
  359. package/build/together.js +55 -55
  360. package/build/togetherApiUtils.js +4 -4
  361. package/build/togetherAtoms.js +30 -30
  362. package/build/togetherComponentGlobalContext.js +4 -4
  363. package/build/togetherMolecules.js +50 -50
  364. package/build/togetherMoleculesCardAuthor.js +28 -28
  365. package/build/togetherMoleculesPostImagePreview.js +11 -11
  366. package/build/togetherMoleculesProfileDetail.js +38 -38
  367. package/build/togetherOrganisms.js +49 -49
  368. package/build/togetherRichTextEditor.js +17 -17
  369. package/build/togetherShareBox.js +10 -10
  370. package/build/translationsProvider-0f5d2303.js +62 -0
  371. package/build/{treePopoverMenu-9f4d0f7d.js → treePopoverMenu-d6e8372b.js} +19 -19
  372. package/build/{types-709ee706.js → types-26ce9ce5.js} +2 -2
  373. package/build/types.js +2 -2
  374. package/build/{useCategory-889d8b9e.js → useCategory-941ff45e.js} +18 -5
  375. package/build/{useHealthToolCache-dd27ba92.js → useHealthToolCache-068e5649.js} +1 -1
  376. package/build/{useMantineLocale-aa4e4cdc.js → useMantineLocale-d74729a8.js} +8 -6
  377. package/build/{usePlacesAutocomplete-60f0a6d0.js → usePlacesAutocomplete-c3a05472.js} +1 -1
  378. package/build/{useScreenSize-013494cb.js → useScreenSize-805ef787.js} +2 -2
  379. package/build/useTogetherAuthRequiredAction.js +9 -9
  380. package/build/{utils-c3214203.js → utils-22163cc9.js} +4 -4
  381. package/build/{utils-cfbfcd70.js → utils-2d4e6ea6.js} +2 -2
  382. package/build/{utils-bb4ffbb8.js → utils-914af569.js} +2 -2
  383. package/build/{utils-0a036093.js → utils-a70ced06.js} +3 -3
  384. package/build/vaccination.js +21 -21
  385. package/package.json +3 -3
  386. /package/build/{BMI_BOYS.percentile.monthly-f5295f7f.js → BMI_BOYS.percentile.monthly-f4daed0d.js} +0 -0
  387. /package/build/{BMI_BOYS.percentile.weekly-e89f6859.js → BMI_BOYS.percentile.weekly-1de7f0e1.js} +0 -0
  388. /package/build/{BMI_BOYS.percentile.yearly-206f392e.js → BMI_BOYS.percentile.yearly-0222daae.js} +0 -0
  389. /package/build/{BMI_BOYS.zscore.monthly-62cfeba2.js → BMI_BOYS.zscore.monthly-1bd85a5e.js} +0 -0
  390. /package/build/{BMI_BOYS.zscore.weekly-aa9c8d30.js → BMI_BOYS.zscore.weekly-65f9be2b.js} +0 -0
  391. /package/build/{BMI_BOYS.zscore.yearly-40a612b4.js → BMI_BOYS.zscore.yearly-c9a6b727.js} +0 -0
  392. /package/build/{BMI_GIRLS.percentile.monthly-81b1a5b7.js → BMI_GIRLS.percentile.monthly-220ef448.js} +0 -0
  393. /package/build/{BMI_GIRLS.percentile.weekly-b90e7d68.js → BMI_GIRLS.percentile.weekly-7a5096e3.js} +0 -0
  394. /package/build/{BMI_GIRLS.percentile.yearly-78565dff.js → BMI_GIRLS.percentile.yearly-53ed80a2.js} +0 -0
  395. /package/build/{BMI_GIRLS.zscore.monthly-bf3313da.js → BMI_GIRLS.zscore.monthly-5df375ff.js} +0 -0
  396. /package/build/{BMI_GIRLS.zscore.weekly-76c59850.js → BMI_GIRLS.zscore.weekly-9503c924.js} +0 -0
  397. /package/build/{BMI_GIRLS.zscore.yearly-b45db558.js → BMI_GIRLS.zscore.yearly-f8c55dfc.js} +0 -0
  398. /package/build/{ChevronDown-4d7e527c.js → ChevronDown-5813f17e.js} +0 -0
  399. /package/build/{Close-88109e78.js → Close-4893c3ca.js} +0 -0
  400. /package/build/{Google-18b395b8.js → Google-391b9a03.js} +0 -0
  401. /package/build/{HEAD CIRCUM_BOYS.percentile.monthly-c5365f78.js → HEAD CIRCUM_BOYS.percentile.monthly-4d8f3e60.js} +0 -0
  402. /package/build/{HEAD CIRCUM_BOYS.percentile.weekly-ba1be07f.js → HEAD CIRCUM_BOYS.percentile.weekly-1819f9c6.js} +0 -0
  403. /package/build/{HEAD CIRCUM_BOYS.percentile.yearly-0d9ff7de.js → HEAD CIRCUM_BOYS.percentile.yearly-020cb98a.js} +0 -0
  404. /package/build/{HEAD CIRCUM_BOYS.zscore.monthly-293579ed.js → HEAD CIRCUM_BOYS.zscore.monthly-feeff1b8.js} +0 -0
  405. /package/build/{HEAD CIRCUM_BOYS.zscore.weekly-d4476f55.js → HEAD CIRCUM_BOYS.zscore.weekly-e8427518.js} +0 -0
  406. /package/build/{HEAD CIRCUM_BOYS.zscore.yearly-b7f64416.js → HEAD CIRCUM_BOYS.zscore.yearly-0d9f4ede.js} +0 -0
  407. /package/build/{HEAD CIRCUM_GIRLS.percentile.monthly-30829c3b.js → HEAD CIRCUM_GIRLS.percentile.monthly-a058e780.js} +0 -0
  408. /package/build/{HEAD CIRCUM_GIRLS.percentile.weekly-2f227a0a.js → HEAD CIRCUM_GIRLS.percentile.weekly-121b74bc.js} +0 -0
  409. /package/build/{HEAD CIRCUM_GIRLS.percentile.yearly-ab05fba4.js → HEAD CIRCUM_GIRLS.percentile.yearly-7729a5ed.js} +0 -0
  410. /package/build/{HEAD CIRCUM_GIRLS.zscore.monthly-9e41bb48.js → HEAD CIRCUM_GIRLS.zscore.monthly-5a6747cd.js} +0 -0
  411. /package/build/{HEAD CIRCUM_GIRLS.zscore.weekly-07fdf8b4.js → HEAD CIRCUM_GIRLS.zscore.weekly-5f4cb404.js} +0 -0
  412. /package/build/{HEAD CIRCUM_GIRLS.zscore.yearly-3d09a791.js → HEAD CIRCUM_GIRLS.zscore.yearly-db75ac45.js} +0 -0
  413. /package/build/{HEIGHT_BOYS.percentile.monthly-58875bdd.js → HEIGHT_BOYS.percentile.monthly-9979a4bf.js} +0 -0
  414. /package/build/{HEIGHT_BOYS.percentile.weekly-0614ac80.js → HEIGHT_BOYS.percentile.weekly-ebcdeaa8.js} +0 -0
  415. /package/build/{HEIGHT_BOYS.percentile.yearly-b992897c.js → HEIGHT_BOYS.percentile.yearly-6f6fc978.js} +0 -0
  416. /package/build/{HEIGHT_BOYS.zscore.monthly-4b1bcf27.js → HEIGHT_BOYS.zscore.monthly-c4d5a63c.js} +0 -0
  417. /package/build/{HEIGHT_BOYS.zscore.weekly-77c0776c.js → HEIGHT_BOYS.zscore.weekly-ac833d64.js} +0 -0
  418. /package/build/{HEIGHT_BOYS.zscore.yearly-5dc8e6a1.js → HEIGHT_BOYS.zscore.yearly-ff3f71f9.js} +0 -0
  419. /package/build/{HEIGHT_GIRLS.percentile.monthly-cc99017e.js → HEIGHT_GIRLS.percentile.monthly-eb3712f6.js} +0 -0
  420. /package/build/{HEIGHT_GIRLS.percentile.weekly-fae4e9f9.js → HEIGHT_GIRLS.percentile.weekly-f9e21b4d.js} +0 -0
  421. /package/build/{HEIGHT_GIRLS.percentile.yearly-bc7c5e30.js → HEIGHT_GIRLS.percentile.yearly-3b69d6bd.js} +0 -0
  422. /package/build/{HEIGHT_GIRLS.zscore.monthly-2a6220ef.js → HEIGHT_GIRLS.zscore.monthly-812e3b24.js} +0 -0
  423. /package/build/{HEIGHT_GIRLS.zscore.weekly-c676eacf.js → HEIGHT_GIRLS.zscore.weekly-0450e9dd.js} +0 -0
  424. /package/build/{HEIGHT_GIRLS.zscore.yearly-eec4124e.js → HEIGHT_GIRLS.zscore.yearly-3e9be766.js} +0 -0
  425. /package/build/{Visible-49e0cc9d.js → Visible-6c80b7ef.js} +0 -0
  426. /package/build/{WEIGHT_BOYS.percentile.monthly-14105231.js → WEIGHT_BOYS.percentile.monthly-15304941.js} +0 -0
  427. /package/build/{WEIGHT_BOYS.percentile.weekly-7bb55772.js → WEIGHT_BOYS.percentile.weekly-7f6893d6.js} +0 -0
  428. /package/build/{WEIGHT_BOYS.percentile.yearly-d5d911a6.js → WEIGHT_BOYS.percentile.yearly-9de9bd0e.js} +0 -0
  429. /package/build/{WEIGHT_BOYS.zscore.monthly-67f28812.js → WEIGHT_BOYS.zscore.monthly-44b508be.js} +0 -0
  430. /package/build/{WEIGHT_BOYS.zscore.weekly-c5749492.js → WEIGHT_BOYS.zscore.weekly-fb670db8.js} +0 -0
  431. /package/build/{WEIGHT_BOYS.zscore.yearly-f9dfc214.js → WEIGHT_BOYS.zscore.yearly-d23350c0.js} +0 -0
  432. /package/build/{WEIGHT_GIRLS.percentile.monthly-863b5e58.js → WEIGHT_GIRLS.percentile.monthly-09784264.js} +0 -0
  433. /package/build/{WEIGHT_GIRLS.percentile.weekly-97e5da17.js → WEIGHT_GIRLS.percentile.weekly-ad7ef81e.js} +0 -0
  434. /package/build/{WEIGHT_GIRLS.percentile.yearly-540af1d1.js → WEIGHT_GIRLS.percentile.yearly-55c9d4e9.js} +0 -0
  435. /package/build/{WEIGHT_GIRLS.zscore.monthly-79fe6b74.js → WEIGHT_GIRLS.zscore.monthly-abd26afa.js} +0 -0
  436. /package/build/{WEIGHT_GIRLS.zscore.weekly-0ec74845.js → WEIGHT_GIRLS.zscore.weekly-370b7aa6.js} +0 -0
  437. /package/build/{WEIGHT_GIRLS.zscore.yearly-7e811cf4.js → WEIGHT_GIRLS.zscore.yearly-b07eecee.js} +0 -0
  438. /package/build/{animation-13c1efd7.js → animation-5ca47bb9.js} +0 -0
  439. /package/build/{constants-0dc7ef32.js → constants-57c5ae20.js} +0 -0
  440. /package/build/{constants-4b2fea40.js → constants-8c977f49.js} +0 -0
  441. /package/build/{dataTransform-ed106647.js → dataTransform-1061941e.js} +0 -0
  442. /package/build/{doctor-b018f684.js → doctor-479ad363.js} +0 -0
  443. /package/build/esm/{BMI_BOYS.percentile.monthly-eca08d1b.js → BMI_BOYS.percentile.monthly-f7827037.js} +0 -0
  444. /package/build/esm/{BMI_BOYS.percentile.weekly-0f36c0a5.js → BMI_BOYS.percentile.weekly-565ddccf.js} +0 -0
  445. /package/build/esm/{BMI_BOYS.percentile.yearly-de605740.js → BMI_BOYS.percentile.yearly-e5813395.js} +0 -0
  446. /package/build/esm/{BMI_BOYS.zscore.monthly-871240d7.js → BMI_BOYS.zscore.monthly-896b5548.js} +0 -0
  447. /package/build/esm/{BMI_BOYS.zscore.weekly-53e9361f.js → BMI_BOYS.zscore.weekly-72d8f1d4.js} +0 -0
  448. /package/build/esm/{BMI_BOYS.zscore.yearly-693c5ba7.js → BMI_BOYS.zscore.yearly-5cdbc608.js} +0 -0
  449. /package/build/esm/{BMI_GIRLS.percentile.monthly-af445923.js → BMI_GIRLS.percentile.monthly-4689d010.js} +0 -0
  450. /package/build/esm/{BMI_GIRLS.percentile.weekly-038c1d84.js → BMI_GIRLS.percentile.weekly-8095cdb1.js} +0 -0
  451. /package/build/esm/{BMI_GIRLS.percentile.yearly-ad96c33e.js → BMI_GIRLS.percentile.yearly-e420d4b6.js} +0 -0
  452. /package/build/esm/{BMI_GIRLS.zscore.monthly-d1463624.js → BMI_GIRLS.zscore.monthly-96744fcf.js} +0 -0
  453. /package/build/esm/{BMI_GIRLS.zscore.weekly-7d60db22.js → BMI_GIRLS.zscore.weekly-108cd0c1.js} +0 -0
  454. /package/build/esm/{BMI_GIRLS.zscore.yearly-df88448a.js → BMI_GIRLS.zscore.yearly-ddc29cbb.js} +0 -0
  455. /package/build/esm/{ChevronDown-47446788.js → ChevronDown-6c5ab56c.js} +0 -0
  456. /package/build/esm/{Close-c3a49880.js → Close-bed66153.js} +0 -0
  457. /package/build/esm/{Google-4613f559.js → Google-0d0deb6c.js} +0 -0
  458. /package/build/esm/{HEAD CIRCUM_BOYS.percentile.monthly-60e25ec5.js → HEAD CIRCUM_BOYS.percentile.monthly-3f49b594.js} +0 -0
  459. /package/build/esm/{HEAD CIRCUM_BOYS.percentile.weekly-3c3343ae.js → HEAD CIRCUM_BOYS.percentile.weekly-189d3b0d.js} +0 -0
  460. /package/build/esm/{HEAD CIRCUM_BOYS.percentile.yearly-be196089.js → HEAD CIRCUM_BOYS.percentile.yearly-a36b8cc0.js} +0 -0
  461. /package/build/esm/{HEAD CIRCUM_BOYS.zscore.monthly-29ff8370.js → HEAD CIRCUM_BOYS.zscore.monthly-adbdbe9b.js} +0 -0
  462. /package/build/esm/{HEAD CIRCUM_BOYS.zscore.weekly-92e4b27a.js → HEAD CIRCUM_BOYS.zscore.weekly-389bcd18.js} +0 -0
  463. /package/build/esm/{HEAD CIRCUM_BOYS.zscore.yearly-2e6a5016.js → HEAD CIRCUM_BOYS.zscore.yearly-93f5c48a.js} +0 -0
  464. /package/build/esm/{HEAD CIRCUM_GIRLS.percentile.monthly-b9290e16.js → HEAD CIRCUM_GIRLS.percentile.monthly-d6d60aa3.js} +0 -0
  465. /package/build/esm/{HEAD CIRCUM_GIRLS.percentile.weekly-8062ea4d.js → HEAD CIRCUM_GIRLS.percentile.weekly-fce1c0a4.js} +0 -0
  466. /package/build/esm/{HEAD CIRCUM_GIRLS.percentile.yearly-b164ccc6.js → HEAD CIRCUM_GIRLS.percentile.yearly-8b9b0963.js} +0 -0
  467. /package/build/esm/{HEAD CIRCUM_GIRLS.zscore.monthly-d9e6f3eb.js → HEAD CIRCUM_GIRLS.zscore.monthly-a384e6b8.js} +0 -0
  468. /package/build/esm/{HEAD CIRCUM_GIRLS.zscore.weekly-4fd80615.js → HEAD CIRCUM_GIRLS.zscore.weekly-2b323528.js} +0 -0
  469. /package/build/esm/{HEAD CIRCUM_GIRLS.zscore.yearly-f28609a2.js → HEAD CIRCUM_GIRLS.zscore.yearly-49dcd33e.js} +0 -0
  470. /package/build/esm/{HEIGHT_BOYS.percentile.monthly-15a0bc4d.js → HEIGHT_BOYS.percentile.monthly-f199288a.js} +0 -0
  471. /package/build/esm/{HEIGHT_BOYS.percentile.weekly-102b50e3.js → HEIGHT_BOYS.percentile.weekly-a343b1bb.js} +0 -0
  472. /package/build/esm/{HEIGHT_BOYS.percentile.yearly-cf42e15a.js → HEIGHT_BOYS.percentile.yearly-e4055e79.js} +0 -0
  473. /package/build/esm/{HEIGHT_BOYS.zscore.monthly-8f455cc9.js → HEIGHT_BOYS.zscore.monthly-f3b712b0.js} +0 -0
  474. /package/build/esm/{HEIGHT_BOYS.zscore.weekly-f2c852bd.js → HEIGHT_BOYS.zscore.weekly-bb857bea.js} +0 -0
  475. /package/build/esm/{HEIGHT_BOYS.zscore.yearly-0ebca637.js → HEIGHT_BOYS.zscore.yearly-711d5437.js} +0 -0
  476. /package/build/esm/{HEIGHT_GIRLS.percentile.monthly-790caf2c.js → HEIGHT_GIRLS.percentile.monthly-328501ed.js} +0 -0
  477. /package/build/esm/{HEIGHT_GIRLS.percentile.weekly-18f018dd.js → HEIGHT_GIRLS.percentile.weekly-0851701a.js} +0 -0
  478. /package/build/esm/{HEIGHT_GIRLS.percentile.yearly-5b3a5c7e.js → HEIGHT_GIRLS.percentile.yearly-ccc2206e.js} +0 -0
  479. /package/build/esm/{HEIGHT_GIRLS.zscore.monthly-5a259243.js → HEIGHT_GIRLS.zscore.monthly-eda10451.js} +0 -0
  480. /package/build/esm/{HEIGHT_GIRLS.zscore.weekly-7dcf65e7.js → HEIGHT_GIRLS.zscore.weekly-58d86605.js} +0 -0
  481. /package/build/esm/{HEIGHT_GIRLS.zscore.yearly-1f427d14.js → HEIGHT_GIRLS.zscore.yearly-ccb8497b.js} +0 -0
  482. /package/build/esm/{Visible-c0ca5ff5.js → Visible-c5e6e4e6.js} +0 -0
  483. /package/build/esm/{WEIGHT_BOYS.percentile.monthly-1cb736bc.js → WEIGHT_BOYS.percentile.monthly-33449fab.js} +0 -0
  484. /package/build/esm/{WEIGHT_BOYS.percentile.weekly-cd49dbad.js → WEIGHT_BOYS.percentile.weekly-48943538.js} +0 -0
  485. /package/build/esm/{WEIGHT_BOYS.percentile.yearly-73dbe0a9.js → WEIGHT_BOYS.percentile.yearly-4c2f88f2.js} +0 -0
  486. /package/build/esm/{WEIGHT_BOYS.zscore.monthly-cf13f60b.js → WEIGHT_BOYS.zscore.monthly-0f42bc26.js} +0 -0
  487. /package/build/esm/{WEIGHT_BOYS.zscore.weekly-5cb0f54e.js → WEIGHT_BOYS.zscore.weekly-677a0765.js} +0 -0
  488. /package/build/esm/{WEIGHT_BOYS.zscore.yearly-f8920ebb.js → WEIGHT_BOYS.zscore.yearly-580b0b33.js} +0 -0
  489. /package/build/esm/{WEIGHT_GIRLS.percentile.monthly-d05adf8a.js → WEIGHT_GIRLS.percentile.monthly-be676e3d.js} +0 -0
  490. /package/build/esm/{WEIGHT_GIRLS.percentile.weekly-8bfcc146.js → WEIGHT_GIRLS.percentile.weekly-c35d4786.js} +0 -0
  491. /package/build/esm/{WEIGHT_GIRLS.percentile.yearly-b8972989.js → WEIGHT_GIRLS.percentile.yearly-fbba1129.js} +0 -0
  492. /package/build/esm/{WEIGHT_GIRLS.zscore.monthly-fb98e36d.js → WEIGHT_GIRLS.zscore.monthly-8d62df68.js} +0 -0
  493. /package/build/esm/{WEIGHT_GIRLS.zscore.weekly-69079f9a.js → WEIGHT_GIRLS.zscore.weekly-d48fbc5a.js} +0 -0
  494. /package/build/esm/{WEIGHT_GIRLS.zscore.yearly-22e982d8.js → WEIGHT_GIRLS.zscore.yearly-5a9af915.js} +0 -0
  495. /package/build/esm/{animation-8f44fc6c.js → animation-d5589e8b.js} +0 -0
  496. /package/build/esm/{constants-6d3e6bd2.js → constants-341374a3.js} +0 -0
  497. /package/build/esm/{constants-dbb68f45.js → constants-86b4a845.js} +0 -0
  498. /package/build/esm/{dataTransform-0688712b.js → dataTransform-51f00ef8.js} +0 -0
  499. /package/build/esm/{doctor-23714c67.js → doctor-9dd59807.js} +0 -0
  500. /package/build/esm/{index-388c355e.js → index-094d7d78.js} +0 -0
  501. /package/build/esm/{index-72875897.js → index-4afb0581.js} +0 -0
  502. /package/build/esm/{index-658ef77b.js → index-758957ae.js} +0 -0
  503. /package/build/esm/{index-577a8f9b.js → index-a26c1eda.js} +0 -0
  504. /package/build/esm/{index-a96ad622.js → index-c23c9f7e.js} +0 -0
  505. /package/build/esm/{index-d1e7bea2.js → index-cd80d854.js} +0 -0
  506. /package/build/esm/{index-f6ae34df.js → index-f3b6ab45.js} +0 -0
  507. /package/build/esm/{index-530d9459.js → index-fd8e30de.js} +0 -0
  508. /package/build/esm/{index.styles-e7a84f91.js → index.styles-f8978237.js} +0 -0
  509. /package/build/esm/{localizeNumberFormat-e8ce7c0c.js → localizeNumberFormat-2199ec15.js} +0 -0
  510. /package/build/esm/{normalizeLink-a6fff3b6.js → normalizeLink-827f4e69.js} +0 -0
  511. /package/build/esm/{number-9db85954.js → number-0139958f.js} +0 -0
  512. /package/build/esm/{other-39c7ba92.js → other-a974982d.js} +0 -0
  513. /package/build/esm/{paths-73406cfb.js → paths-053bd382.js} +0 -0
  514. /package/build/esm/{translationsContext-db44a804.js → translationsContext-4ea92c46.js} +0 -0
  515. /package/build/esm/{tslib.es6-def645e9.js → tslib.es6-1073e423.js} +0 -0
  516. /package/build/esm/{types-d2b218e1.js → types-c83c742e.js} +0 -0
  517. /package/build/esm/{useIsInit-e1c4cbbb.js → useIsInit-a00426ab.js} +0 -0
  518. /package/build/esm/{useOutsideClick-c5c0416e.js → useOutsideClick-dd8680ce.js} +0 -0
  519. /package/build/esm/{useScrollbarSize-cdca65c3.js → useScrollbarSize-7bd945f2.js} +0 -0
  520. /package/build/esm/{useUniqueId-5ba39dd0.js → useUniqueId-fa696ba6.js} +0 -0
  521. /package/build/esm/{utils-ad366429.js → utils-f530e069.js} +0 -0
  522. /package/build/{index-439ed166.js → index-1f0ffa62.js} +0 -0
  523. /package/build/{index-71123b1e.js → index-54146416.js} +0 -0
  524. /package/build/{index-5ecc8dcf.js → index-62ecd981.js} +0 -0
  525. /package/build/{index-0630bc54.js → index-64f3f9cd.js} +0 -0
  526. /package/build/{index-6d25977a.js → index-66cbcf0b.js} +0 -0
  527. /package/build/{index-a18c5ff1.js → index-72924c47.js} +0 -0
  528. /package/build/{index-020412a7.js → index-75f7316f.js} +0 -0
  529. /package/build/{index-ec78675c.js → index-adfb7062.js} +0 -0
  530. /package/build/{index.styles-1c27538c.js → index.styles-65606527.js} +0 -0
  531. /package/build/{localizeNumberFormat-3fa00932.js → localizeNumberFormat-95af1367.js} +0 -0
  532. /package/build/{normalizeLink-cdde0b93.js → normalizeLink-325ec7cc.js} +0 -0
  533. /package/build/{number-d95061a1.js → number-04e9f091.js} +0 -0
  534. /package/build/{other-4710bd77.js → other-7cb22946.js} +0 -0
  535. /package/build/{paths-264a6504.js → paths-ad2e821c.js} +0 -0
  536. /package/build/{translationsContext-02291cc2.js → translationsContext-824f5c5d.js} +0 -0
  537. /package/build/{tslib.es6-0c296361.js → tslib.es6-751dcc64.js} +0 -0
  538. /package/build/{types-124cdc28.js → types-d9723642.js} +0 -0
  539. /package/build/{useIsInit-1962c185.js → useIsInit-c869bcde.js} +0 -0
  540. /package/build/{useOutsideClick-99f10750.js → useOutsideClick-57926422.js} +0 -0
  541. /package/build/{useScrollbarSize-3663cbc4.js → useScrollbarSize-972b58b9.js} +0 -0
  542. /package/build/{useUniqueId-5d17e7af.js → useUniqueId-1e0d5636.js} +0 -0
  543. /package/build/{utils-e42c732c.js → utils-0a56df4b.js} +0 -0
package/build/lead.js CHANGED
@@ -2,47 +2,51 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var tslib_es6 = require('./tslib.es6-0c296361.js');
5
+ var tslib_es6 = require('./tslib.es6-751dcc64.js');
6
6
  var React = require('react');
7
7
  var core = require('@mantine/core');
8
8
  var dayjs = require('dayjs');
9
9
  var debounce = require('lodash/debounce');
10
10
  var form = require('@mantine/form');
11
- var index = require('./index-1832c923.js');
12
- var translationsContext = require('./translationsContext-02291cc2.js');
11
+ var index = require('./index-729572c2.js');
12
+ var translationsContext = require('./translationsContext-824f5c5d.js');
13
13
  var miscCookieHelper = require('./miscCookieHelper.js');
14
- var utils$1 = require('./utils-e42c732c.js');
15
- var index$1 = require('./index-6e1d6d78.js');
16
- var index$2 = require('./index-ffa29b44.js');
17
- var index$4 = require('./index-9ed8f15e.js');
18
- var index$3 = require('./index-04336ab9.js');
19
- require('./index.styles-1c27538c.js');
14
+ var utils$1 = require('./utils-0a56df4b.js');
15
+ var index$1 = require('./index-fe818695.js');
16
+ var index$2 = require('./index-d0820aeb.js');
17
+ var index$4 = require('./index-706cdb42.js');
18
+ var index$3 = require('./index-4ec0821f.js');
19
+ require('./index.styles-65606527.js');
20
20
  var hooks = require('@mantine/hooks');
21
- require('./useMantineLocale-aa4e4cdc.js');
22
- require('./index-3c9b6c14.js');
23
- require('./index-ec78675c.js');
24
- var index$7 = require('./index-7a0bbb05.js');
25
- require('./other-4710bd77.js');
26
- require('./index-0b1b3404.js');
27
- var utils = require('./utils-cfbfcd70.js');
28
- require('@mantine/dates');
29
- var usePlacesAutocomplete = require('./usePlacesAutocomplete-60f0a6d0.js');
30
- var index$5 = require('./index-3d0f0804.js');
21
+ require('./useMantineLocale-d74729a8.js');
22
+ var index$8 = require('./index-5c38e2bd.js');
23
+ require('./index-adfb7062.js');
24
+ var index$6 = require('./index-523e7e4d.js');
25
+ require('./other-7cb22946.js');
26
+ require('./index-a10c0c62.js');
27
+ var utils = require('./utils-2d4e6ea6.js');
28
+ var dates = require('@mantine/dates');
29
+ var usePlacesAutocomplete = require('./usePlacesAutocomplete-c3a05472.js');
30
+ var index$5 = require('./index-737372f7.js');
31
+ var translationsProvider = require('./translationsProvider-0f5d2303.js');
32
+ var Locale = require('./Locale-ab6a6ba4.js');
31
33
  var uuid = require('uuid');
32
- var index$6 = require('./index-71123b1e.js');
33
- var index$9 = require('./index-964bebd5.js');
34
- var useScreenSize = require('./useScreenSize-013494cb.js');
35
- var ReactDOM = require('react-dom');
36
- var react = require('@emotion/react');
34
+ var PhoneInputBase = require('react-phone-number-input');
37
35
  var styled = require('@emotion/styled');
38
36
  var miscTheme = require('./miscTheme.js');
39
- var index$8 = require('./index-7d70d6d9.js');
40
- var Close = require('./Close-88109e78.js');
37
+ var react = require('@emotion/react');
38
+ var togetherComponentGlobalContext = require('./utils-a70ced06.js');
39
+ var index$7 = require('./index-54146416.js');
40
+ var index$a = require('./index-3f648346.js');
41
+ var useScreenSize = require('./useScreenSize-805ef787.js');
42
+ var ReactDOM = require('react-dom');
43
+ var index$9 = require('./index-2644ecd5.js');
44
+ var InputDate = require('./InputDate-27f75a17.js');
45
+ var Close = require('./Close-4893c3ca.js');
41
46
  require('@hhgtech/icons/other');
42
47
  require('@mantine/carousel');
43
- require('./Locale-a034e717.js');
44
48
  require('classnames');
45
- require('./useUniqueId-5d17e7af.js');
49
+ require('./useUniqueId-1e0d5636.js');
46
50
  require('./constantsSite.js');
47
51
  require('@hhgtech/icons/core');
48
52
  require('@mantine/notifications');
@@ -50,6 +54,22 @@ require('./constantsDomainLocales.js');
50
54
  require('./constantsIsProduction.js');
51
55
  require('date-fns/locale');
52
56
  require('./constantsRiskScreener.js');
57
+ require('./i18n-values/en-PH.js');
58
+ require('./i18n-values/hi-IN.js');
59
+ require('./i18n-values/id-ID.js');
60
+ require('./i18n-values/km-KH.js');
61
+ require('./i18n-values/ms-MY.js');
62
+ require('./i18n-values/my-MM.js');
63
+ require('./i18n-values/th-TH.js');
64
+ require('./i18n-values/tl-PH.js');
65
+ require('./i18n-values/vi-VN.js');
66
+ require('./i18n-values/vi-VN_MB.js');
67
+ require('./i18n-values/zh-TW.js');
68
+ require('./index-62ecd981.js');
69
+ require('slugify');
70
+ require('string-format');
71
+ require('./togetherApiPaths.js');
72
+ require('./constants-8c977f49.js');
53
73
  require('vaul');
54
74
 
55
75
  function _interopDefault (e) { return e && e.__esModule ? e : { 'default': e }; }
@@ -101,7 +121,7 @@ if (sessionStorage.getItem('insider_object')) {
101
121
  }
102
122
  const docLang = document.documentElement.lang;
103
123
  // TODO: country code
104
- const LEAD_LOCALE_DATA = {
124
+ const LEAD_LOCALE_DATA$1 = {
105
125
  'vi-VN': {
106
126
  popupLang: 'vi',
107
127
  countryCode: 'vn',
@@ -143,7 +163,7 @@ const LEAD_LOCALE_DATA = {
143
163
  countryCodeNumber: 91,
144
164
  },
145
165
  };
146
- const LEAD_LOCALE = LEAD_LOCALE_DATA[docLang] || LEAD_LOCALE_DATA['vi-VN'];
166
+ const LEAD_LOCALE = LEAD_LOCALE_DATA$1[docLang] || LEAD_LOCALE_DATA$1['vi-VN'];
147
167
  function LEAD_RESET_VAR() {
148
168
  // LEAD_CURRENT_URL = location.href.toLowerCase();
149
169
  LEAD_CURRENT_URL =
@@ -164,6 +184,11 @@ const LEAD_TIMEZONE_DATA = {
164
184
  9: 'Asia/Manila', // Philippines / Filipinos Site
165
185
  };
166
186
 
187
+ const LEADGEN_ACTIONS = {
188
+ SHOW: 'SHOW',
189
+ SCROLL: 'SCROLL',
190
+ TIME: 'TIME',
191
+ };
167
192
  const LEADGEN_LAYOUT = {
168
193
  LightBoxA: 'LightBoxA',
169
194
  LightBoxB: 'LightBoxB',
@@ -193,8 +218,10 @@ const LEADGEN_BLOCK = {
193
218
  DropdownBlock: 'DropdownBlock',
194
219
  CheckboxBlock: 'CheckboxBlock',
195
220
  TncBlock: 'TncBlock',
221
+ TitleBlock: 'TitleBlock',
222
+ SubtitleBlock: 'SubtitleBlock',
196
223
  };
197
- const LEADGEN_BLOCK_IN_FORM = [
224
+ const LEADGEN_BLOCK_INPUT = [
198
225
  LEADGEN_BLOCK.TextBlock,
199
226
  LEADGEN_BLOCK.NumberBlock,
200
227
  LEADGEN_BLOCK.DateBlock,
@@ -209,7 +236,59 @@ const LEADGEN_BLOCK_IN_FORM = [
209
236
  LEADGEN_BLOCK.CheckboxBlock,
210
237
  LEADGEN_BLOCK.TncBlock,
211
238
  ];
239
+ const leadGenFieldNamePhone = (listBlockAdded) => {
240
+ return listBlockAdded
241
+ .filter(({ name }) => [
242
+ LEADGEN_BLOCK.PhoneBlock,
243
+ LEADGEN_BLOCK.PhoneOtpBlock,
244
+ LEADGEN_BLOCK.WhatsappOtpBlock,
245
+ LEADGEN_BLOCK.ZaloOtpBlock,
246
+ ].includes(name))
247
+ .map(({ data }) => data.value);
248
+ };
212
249
  const SSO_MAP_LEAD = ['name', 'email', 'birthday', 'phone', 'gender'];
250
+ const LEAD_LOCALE_DATA = {
251
+ 'vi-VN': {
252
+ popupLang: 'vi',
253
+ countryCode: 'vn',
254
+ countryCodeNumber: 84,
255
+ },
256
+ 'id-ID': {
257
+ popupLang: 'id',
258
+ countryCode: 'id',
259
+ countryCodeNumber: 62,
260
+ },
261
+ 'th-TH': {
262
+ popupLang: 'th',
263
+ countryCode: 'th',
264
+ countryCodeNumber: 66,
265
+ },
266
+ 'ms-MY': {
267
+ popupLang: 'ms',
268
+ countryCode: 'my',
269
+ countryCodeNumber: 60,
270
+ },
271
+ 'zh-TW': {
272
+ popupLang: 'zh',
273
+ countryCode: 'tw',
274
+ countryCodeNumber: 886,
275
+ },
276
+ 'km-KH': {
277
+ popupLang: 'km',
278
+ countryCode: 'kh',
279
+ countryCodeNumber: 855,
280
+ },
281
+ 'my-MM': {
282
+ popupLang: 'my',
283
+ countryCode: 'mm',
284
+ countryCodeNumber: 95,
285
+ },
286
+ 'hi-IN': {
287
+ popupLang: 'hi',
288
+ countryCode: 'in',
289
+ countryCodeNumber: 91,
290
+ },
291
+ };
213
292
  const mappingSSOToLead = (userInfoProps) => {
214
293
  var _a, _b;
215
294
  try {
@@ -225,7 +304,7 @@ const mappingSSOToLead = (userInfoProps) => {
225
304
  if (ssoKey === 'birthday') {
226
305
  const dob = dayjs__default["default"](initValue, 'YYYY-MM-DD', true);
227
306
  if (dob.isValid()) {
228
- user.birthday = dob;
307
+ user.birthday = dob.toDate();
229
308
  }
230
309
  }
231
310
  else if (ssoKey === 'gender') {
@@ -248,16 +327,66 @@ const mappingSSOToLead = (userInfoProps) => {
248
327
  catch (error) {
249
328
  return;
250
329
  }
330
+ };
331
+ const formatCampaignDetail = (campaign) => {
332
+ if (!campaign) {
333
+ return {};
334
+ }
335
+ try {
336
+ const { extra_fields, thank_you_image } = campaign || {};
337
+ const { textBlocks: exTextBlocks, imageBlocks: exImageBlocks, listBlockAdded: exListBlockAdded, listBlockThankyou: exListBlockThankyou, actionBlocks: exActionBlocks, } = extra_fields;
338
+ const textBlocks = JSON.parse(exTextBlocks);
339
+ const imageBlocks = JSON.parse(exImageBlocks);
340
+ const listBlockAdded = JSON.parse(exListBlockAdded);
341
+ const listBlockThankyou = JSON.parse(exListBlockThankyou);
342
+ const actionBlocks = JSON.parse(exActionBlocks);
343
+ const ThankYouBlock = {
344
+ image: { src: thank_you_image },
345
+ };
346
+ listBlockThankyou.forEach((block) => {
347
+ const { name, data } = block || {};
348
+ const { value: htmlText, align, newtab, url } = data || {};
349
+ switch (name) {
350
+ case LEADGEN_BLOCK.TitleBlock: {
351
+ ThankYouBlock.title = { htmlText, align };
352
+ }
353
+ case LEADGEN_BLOCK.SubtitleBlock: {
354
+ ThankYouBlock.description = { htmlText, align };
355
+ }
356
+ case LEADGEN_BLOCK.LinkButtonBlock: {
357
+ ThankYouBlock.button = { htmlText, newtab, url };
358
+ }
359
+ }
360
+ });
361
+ return Object.assign(Object.assign({}, campaign), { extra_fields: Object.assign(Object.assign({}, extra_fields), { textBlocks,
362
+ imageBlocks,
363
+ listBlockAdded,
364
+ listBlockThankyou,
365
+ actionBlocks }), ThankYouBlock });
366
+ }
367
+ catch (error) {
368
+ return {};
369
+ }
251
370
  };
252
371
 
253
372
  class Store {
254
373
  constructor() {
374
+ this.apiSsoUrl = 'https://staging-id.hellobacsi.com/';
255
375
  this.apiLeadUrl = 'https://dev.leadgen.hellobacsi.com/';
256
376
  this.apiSubotUrl = 'https://staging-service-subot.hellohealthgroup.com/';
257
377
  }
258
378
  }
259
379
  const leadStore = new Store();
260
380
 
381
+ const LEADGEN_API_METHOD = {
382
+ GET: 'get',
383
+ POST: 'POST',
384
+ };
385
+ const LEADGEN_API_PATH = {
386
+ V2_CAMPAIGN: 'api/v2/campaign',
387
+ V2_SUBSCRIPTION_LEAD: 'api/v2/subscription-box',
388
+ V2_SUBSCRIPTION_INFO: 'api/campaign/get-title',
389
+ };
261
390
  const leadApi = {
262
391
  call(_a) {
263
392
  var { url, data = undefined } = _a, config = tslib_es6.__rest(_a, ["url", "data"]);
@@ -361,8 +490,50 @@ const verifyOtpLead = ({ phone, otp, type, }) => {
361
490
  },
362
491
  });
363
492
  };
493
+ const getCampaignByCode = (campaign_code) => {
494
+ return leadApi.call({
495
+ url: `${LEADGEN_API_PATH.V2_CAMPAIGN}/${campaign_code}`,
496
+ method: LEADGEN_API_METHOD.GET,
497
+ });
498
+ };
499
+ const getSubscriptionBoxInfo = ({ category, site, }) => {
500
+ return leadApi.call({
501
+ url: `${LEADGEN_API_PATH.V2_SUBSCRIPTION_INFO}?category=${category}&site=${site}`,
502
+ method: LEADGEN_API_METHOD.GET,
503
+ });
504
+ };
505
+ const postSubscriptionBoxLead = ({ data }) => {
506
+ return leadApi.call({
507
+ url: LEADGEN_API_PATH.V2_SUBSCRIPTION_LEAD,
508
+ method: LEADGEN_API_METHOD.POST,
509
+ data,
510
+ });
511
+ };
512
+ const postUserInfoFromLeadGen = ({}) => {
513
+ return;
514
+ };
515
+ const campaignPostImpression = ({ code, action, title_article, ga_client_id, cookie_id, extra, url, referrer, }) => {
516
+ return leadApi.call({
517
+ url: `api/campaign/${code}/impression`,
518
+ method: LEADGEN_API_METHOD.POST,
519
+ data: {
520
+ action,
521
+ title_article,
522
+ cookie_id,
523
+ ga_client_id,
524
+ url,
525
+ extra,
526
+ referrer,
527
+ },
528
+ });
529
+ };
364
530
  const Service = {
365
531
  campaignGetById,
532
+ getCampaignByCode,
533
+ getSubscriptionBoxInfo,
534
+ postSubscriptionBoxLead,
535
+ postUserInfoFromLeadGen,
536
+ campaignPostImpression,
366
537
  validateEmailOrPhoneOnSubot,
367
538
  validateEmailOrPhoneOnLeadGen,
368
539
  validatePhoneNumberOnLeadGen,
@@ -702,7 +873,7 @@ const Description = (_a) => {
702
873
  return description ? (React__default["default"].createElement(index$1.Text, Object.assign({ size: "p3" }, rest), description)) : null;
703
874
  };
704
875
 
705
- const LeadGenContext = React.createContext({});
876
+ const LeadGenContext$1 = React.createContext({});
706
877
 
707
878
  var useStyles$2 = core.createStyles(() => {
708
879
  return {
@@ -766,7 +937,7 @@ const SubtitleBlock$1 = ({ children, align, }) => (React__default["default"].cre
766
937
  const TitleBlock$1 = ({ children, align, }) => (React__default["default"].createElement("h2", { className: `lead-modal__title ${'le-text-align-' + (align || '')} ${LEAD_CLASS}` }, children));
767
938
 
768
939
  const Fields = ({ listBlockAdded, popupId, locale, onClose, onOtherSubmit, styles, classNames, popoverProps, }) => {
769
- const { primaryColor } = React.useContext(LeadGenContext);
940
+ const { primaryColor } = React.useContext(LeadGenContext$1);
770
941
  const { classes, cx } = useStyles$2(undefined, {
771
942
  name: 'LeadGen__Field',
772
943
  styles,
@@ -881,7 +1052,7 @@ const Heading = (_a) => {
881
1052
 
882
1053
  const FormComponent = ({ styles, className, classNames, fillInfo, popoverProps, submitProps, }) => {
883
1054
  var _a;
884
- const { primaryColor } = React.useContext(LeadGenContext);
1055
+ const { primaryColor } = React.useContext(LeadGenContext$1);
885
1056
  const { listBlockAdded, leadFormConfig: { form, validateObj }, validatingEmailRef, validatingPhoneRef, formRef, setFormRef, onClose, onOtherSubmit, actionBlocks, locale, setShowOtpPhone, onSubmit, } = React.useContext(LeadGenComponentContext);
886
1057
  const { classes, cx } = useStyles$1(undefined, {
887
1058
  name: 'LeadGen__FormComponent',
@@ -1158,6 +1329,7 @@ var enPH = {
1158
1329
  "validator.min": "jQuery.validator.format('Please enter a value greater than or equal to {0}.",
1159
1330
  "validator.emailUsed": "Email already in use for this campaign.",
1160
1331
  "validator.phoneUsed": "Your phone number already in use for this campaign.",
1332
+ "validator.dateInvalid": "This date is not valid, please update.",
1161
1333
  "lead.otp.title": "Enter OTP",
1162
1334
  "lead.otp.desc": "We have sent an OTP to your mobile number {phone}",
1163
1335
  "lead.otp.verify": "Verify",
@@ -1166,7 +1338,10 @@ var enPH = {
1166
1338
  "lead.otp.phonePlaceholder": "Enter OTP",
1167
1339
  "lead.empty.title": "Oops, seem your information is empty, do you want to submit the information again?",
1168
1340
  "lead.empty.cancel": "Cancel",
1169
- "lead.empty.submitAgain": "Submit again"
1341
+ "lead.empty.submitAgain": "Submit again",
1342
+ "common.day": "Day",
1343
+ "common.month": "Month",
1344
+ "common.year": "Year"
1170
1345
  };
1171
1346
 
1172
1347
  var hiIN = {
@@ -1177,6 +1352,7 @@ var hiIN = {
1177
1352
  "validator.maxlength": "कृपया {0} अक्षर से अधिक दर्ज न करें",
1178
1353
  "validator.minlength": "कृपया कम से कम {0} अक्षर दर्ज करें",
1179
1354
  "validator.phone": "कृपया एक वैध संख्या दर्ज करें",
1355
+ "validator.dateInvalid": "यह तिथि मान्य नहीं है, कृपया अपडेट करें।",
1180
1356
  "validator.emailUsed": "Email already in use for this campaign.",
1181
1357
  "validator.phoneUsed": "Your phone number already in use for this campaign.",
1182
1358
  "lead.otp.title": "Enter OTP",
@@ -1185,7 +1361,10 @@ var hiIN = {
1185
1361
  "lead.otp.resend": "Resend OTP{timer}",
1186
1362
  "lead.empty.title": "ऊप्स! लगता है आपकी जानकारी खाली है। क्या आप जानकारी फिर से सबमिट करना चाहते हैं?",
1187
1363
  "lead.empty.cancel": "रद्द करें",
1188
- "lead.empty.submitAgain": "फिर से सबमिट करें"
1364
+ "lead.empty.submitAgain": "फिर से सबमिट करें",
1365
+ "common.day": "साल",
1366
+ "common.month": "महीना",
1367
+ "common.year": ""
1189
1368
  };
1190
1369
 
1191
1370
  var idID = {
@@ -1198,6 +1377,7 @@ var idID = {
1198
1377
  "validator.phone": "Tolong daftarkan nomor telepon yang valid",
1199
1378
  "validator.emailUsed": "Email sudah digunakan untuk kampanye ini.",
1200
1379
  "validator.phoneUsed": "Nomor telepon Anda sudah digunakan untuk kampanye ini.",
1380
+ "validator.dateInvalid": "Tanggal ini tidak valid, silakan perbarui",
1201
1381
  "lead.otp.title": "Masukkan OTP",
1202
1382
  "lead.otp.desc": "Kami telah mengirimkan OTP ke nomor ponsel Anda {phone}",
1203
1383
  "lead.otp.verify": "Verifikasi",
@@ -1206,7 +1386,10 @@ var idID = {
1206
1386
  "lead.otp.phonePlaceholder": "Masukkan OTP",
1207
1387
  "lead.empty.title": "Oops, sepertinya informasi Anda kosong. Apakah Anda ingin mengirimkan informasi lagi?",
1208
1388
  "lead.empty.cancel": "Batal",
1209
- "lead.empty.submitAgain": "Kirim lagi"
1389
+ "lead.empty.submitAgain": "Kirim lagi",
1390
+ "common.day": "Hari",
1391
+ "common.month": "Bulan",
1392
+ "common.year": "Tahun"
1210
1393
  };
1211
1394
 
1212
1395
  var kmKH = {
@@ -1219,6 +1402,7 @@ var kmKH = {
1219
1402
  "validator.phone": "សូម​វាយបញ្ចូល​លេខ​ឲ្យ​បាន​ត្រឹមត្រូវ",
1220
1403
  "validator.emailUsed": "អ៊ីមែលត្រូវបានប្រើប្រាស់សម្រាប់យុទ្ធនាការនេះរួចហើយ។",
1221
1404
  "validator.phoneUsed": "លេខទូរស័ព្ទរបស់អ្នកត្រូវបានប្រើប្រាស់សម្រាប់យុទ្ធនាការនេះរួចហើយ។",
1405
+ "validator.dateInvalid": "កាលបរិច្ឆេទនេះមិនត្រឹមត្រូវទេ សូមធ្វើបច្ចុប្បន្នភាព។",
1222
1406
  "lead.otp.title": "បញ្ចូល OTP",
1223
1407
  "lead.otp.desc": "យើងបានផ្ញើ OTP ទៅកាន់លេខទូរសព្ទរបស់អ្នក {phone}",
1224
1408
  "lead.otp.verify": "ផ្ទៀងផ្ទាត់",
@@ -1227,7 +1411,10 @@ var kmKH = {
1227
1411
  "lead.otp.phonePlaceholder": "បញ្ចូល OTP",
1228
1412
  "lead.empty.title": "អូុបស! ហាក់ដូចជាព័ត៌មានរបស់អ្នកទទេ។ តើអ្នកចង់ដាក់ស្នើព័ត៌មានម្តងទៀតទេ?",
1229
1413
  "lead.empty.cancel": "លុប​ចោល",
1230
- "lead.empty.submitAgain": "ដាក់ស្នើម្ដងទៀត"
1414
+ "lead.empty.submitAgain": "ដាក់ស្នើម្ដងទៀត",
1415
+ "common.day": "ឆ្នាំ",
1416
+ "common.month": "ខែ",
1417
+ "common.year": "ថ្ងៃ"
1231
1418
  };
1232
1419
 
1233
1420
  var msMY = {
@@ -1240,6 +1427,7 @@ var msMY = {
1240
1427
  "validator.phone": "Sila masukkan no telefon yang sah.",
1241
1428
  "validator.emailUsed": "Emel sudah digunakan untuk kempen ini.",
1242
1429
  "validator.phoneUsed": "Nombor telefon anda sudah digunakan untuk kempen ini.",
1430
+ "validator.dateInvalid": "Tarikh ini tidak sah, sila kemas kini",
1243
1431
  "lead.otp.title": "Masukkan OTP",
1244
1432
  "lead.otp.desc": "Kami telah menghantar OTP ke nombor telefon bimbit anda {phone}",
1245
1433
  "lead.otp.verify": "Sahkan",
@@ -1248,7 +1436,10 @@ var msMY = {
1248
1436
  "lead.otp.phonePlaceholder": "Masukkan OTP",
1249
1437
  "lead.empty.title": "Oops, nampaknya maklumat anda kosong. Adakah anda ingin menghantar maklumat semula?",
1250
1438
  "lead.empty.cancel": "Batal",
1251
- "lead.empty.submitAgain": "Hantar semula"
1439
+ "lead.empty.submitAgain": "Hantar semula",
1440
+ "common.day": "Hari",
1441
+ "common.month": "Bulan",
1442
+ "common.year": "Tahun"
1252
1443
  };
1253
1444
 
1254
1445
  var myMM = {
@@ -1261,6 +1452,7 @@ var myMM = {
1261
1452
  "validator.phone": "မှန်ကန်သော ဖုန်းနံပါတ်ထည့်သွင်းပါ",
1262
1453
  "validator.emailUsed": "ဤအေကာင့်အတွက် အီးမေးလ်ကို အသုံးပြုပြီးဖြစ်ပါသည်။",
1263
1454
  "validator.phoneUsed": "ဤအေကာင့်အတွက် သင့်ဖုန်းနံပါတ်ကို အသုံးပြုပြီးဖြစ်ပါသည်။",
1455
+ "validator.dateInvalid": "ယနေ့စွဲမှားနေသည်၊ ကျေးဇူးပြု၍ ပြင်ဆင်ပါ။",
1264
1456
  "lead.otp.title": "OTP ကိုထည့်ပါ",
1265
1457
  "lead.otp.desc": "ကျွန်ုပ်တို့သည် OTP ကိုသင့်ဖုန်းနံပါတ် {phone} သို့ပို့ခဲ့သည်",
1266
1458
  "lead.otp.verify": "အတည်ပြုပါ",
@@ -1269,7 +1461,10 @@ var myMM = {
1269
1461
  "lead.otp.phonePlaceholder": "OTP ကိုထည့်ပါ",
1270
1462
  "lead.empty.title": "အုပ်စ်! သင့်အချက်အလက်သည် ဗလာဖြစ်နေသလိုဖြစ်သည်။ ထပ်မံတင်သွင်းလိုပါသလား?",
1271
1463
  "lead.empty.cancel": "မလုပ်ဆောင်ပါ",
1272
- "lead.empty.submitAgain": "ထပ်မံတင်သွင်းပါ"
1464
+ "lead.empty.submitAgain": "ထပ်မံတင်သွင်းပါ",
1465
+ "common.day": "ရက်",
1466
+ "common.month": "လ",
1467
+ "common.year": "နှစ်"
1273
1468
  };
1274
1469
 
1275
1470
  var thTH = {
@@ -1282,6 +1477,7 @@ var thTH = {
1282
1477
  "validator.phone": "กรุณาใส่ตัวเลขที่ถูกต้อง",
1283
1478
  "validator.emailUsed": "อีเมลนี้ถูกใช้สำหรับแคมเปญนี้แล้ว",
1284
1479
  "validator.phoneUsed": "หมายเลขโทรศัพท์ของคุณถูกใช้สำหรับแคมเปญนี้แล้ว",
1480
+ "validator.dateInvalid": "วันที่นี้ไม่ถูกต้อง โปรดอัปเดต",
1285
1481
  "lead.otp.title": "ป้อน OTP",
1286
1482
  "lead.otp.desc": "เราได้ส่ง OTP ไปยังหมายเลขโทรศัพท์มือถือของคุณ {phone}",
1287
1483
  "lead.otp.verify": "ยืนยัน",
@@ -1290,7 +1486,10 @@ var thTH = {
1290
1486
  "lead.otp.phonePlaceholder": "ป้อน OTP",
1291
1487
  "lead.empty.title": "อุ๊ปส์! ดูเหมือนว่าข้อมูลของคุณว่างเปล่า คุณต้องการส่งข้อมูลอีกครั้งหรือไม่?",
1292
1488
  "lead.empty.cancel": "ยกเลิก",
1293
- "lead.empty.submitAgain": "ส่งอีกครั้ง"
1489
+ "lead.empty.submitAgain": "ส่งอีกครั้ง",
1490
+ "common.day": "วัน",
1491
+ "common.month": "เดือน",
1492
+ "common.year": "ปี"
1294
1493
  };
1295
1494
 
1296
1495
  var viVN = {
@@ -1314,6 +1513,7 @@ var viVN = {
1314
1513
  "validator.phone": "Nhập đúng định dạng số điện thoại",
1315
1514
  "validator.emailUsed": "Email này đã được sử dụng.",
1316
1515
  "validator.phoneUsed": "Số điện thoại này đã được sử dụng.",
1516
+ "validator.dateInvalid": "Ngày này không hợp lệ, vui lòng cập nhật.",
1317
1517
  "lead.otp.title": "Nhập OTP",
1318
1518
  "lead.otp.desc": "Chúng tôi đã gửi OTP đến số điện thoại của bạn {phone}",
1319
1519
  "lead.otp.verify": "Xác minh",
@@ -1322,7 +1522,10 @@ var viVN = {
1322
1522
  "lead.otp.phonePlaceholder": "Nhập OTP",
1323
1523
  "lead.empty.title": "Oops, có vẻ như thông tin của bạn đang trống. Bạn có muốn gửi lại thông tin không?",
1324
1524
  "lead.empty.cancel": "Hủy",
1325
- "lead.empty.submitAgain": "Gửi lại"
1525
+ "lead.empty.submitAgain": "Gửi lại",
1526
+ "common.day": "Ngày",
1527
+ "common.month": "Tháng",
1528
+ "common.year": "Năm"
1326
1529
  };
1327
1530
 
1328
1531
  var zhTW = {
@@ -1335,6 +1538,7 @@ var zhTW = {
1335
1538
  "validator.phone": "請填入有效的電話號碼",
1336
1539
  "validator.emailUsed": "此電子郵件已被使用於此活動。",
1337
1540
  "validator.phoneUsed": "您的手機號碼已被使用於此活動。",
1541
+ "validator.dateInvalid": "此日期無效,請更新.",
1338
1542
  "lead.otp.title": "輸入 OTP",
1339
1543
  "lead.otp.desc": "我們已將 OTP 發送到您的手機號碼 {phone}",
1340
1544
  "lead.otp.verify": "驗證",
@@ -1343,7 +1547,10 @@ var zhTW = {
1343
1547
  "lead.otp.phonePlaceholder": "輸入 OTP",
1344
1548
  "lead.empty.title": "哎呀,您的資訊似乎是空的,您想要重新提交資訊嗎?",
1345
1549
  "lead.empty.cancel": "取消",
1346
- "lead.empty.submitAgain": "重新提交"
1550
+ "lead.empty.submitAgain": "重新提交",
1551
+ "common.day": "日",
1552
+ "common.month": "月",
1553
+ "common.year": "年"
1347
1554
  };
1348
1555
 
1349
1556
  const translationsMap = {
@@ -1355,167 +1562,1691 @@ const translationsMap = {
1355
1562
  'my-MM': myMM,
1356
1563
  'km-KH': kmKH,
1357
1564
  'zh-TW': zhTW,
1565
+ 'zh-CN': zhTW,
1358
1566
  'th-TH': thTH,
1359
1567
  'tl-PH': enPH,
1360
1568
  };
1361
1569
  const getTranslations = (locale) => {
1362
- const translations = translationsMap[locale];
1570
+ const translations = Object.assign(Object.assign({}, translationsProvider.translationsMap[locale]), translationsMap[locale]);
1363
1571
  if (translations) {
1364
1572
  return translations;
1365
1573
  }
1366
1574
  return translationsMap['en-PH'];
1367
1575
  };
1368
1576
 
1369
- const useImageSize = (src) => {
1370
- const [width, setWidth] = React.useState(16);
1371
- const [height, setHeight] = React.useState(9);
1372
- const [loaded, setLoaded] = React.useState(false);
1373
- // load src image to get its width and height
1374
- React.useEffect(() => {
1375
- setLoaded(false);
1376
- if (src) {
1377
- const img = new Image();
1378
- img.addEventListener('load', () => {
1379
- setWidth(img.naturalWidth);
1380
- setHeight(img.naturalHeight);
1381
- setLoaded(true);
1382
- });
1383
- img.addEventListener('error', () => {
1384
- setWidth(16);
1385
- setHeight(9);
1386
- setLoaded(true);
1387
- });
1388
- img.src = src;
1389
- }
1390
- else {
1391
- setWidth(16);
1392
- setHeight(9);
1393
- setLoaded(true);
1394
- }
1395
- }, [src]);
1396
- return {
1397
- loaded,
1398
- width,
1399
- height,
1400
- };
1401
- };
1402
-
1403
- const CloseButton = ({ onClose, containerClassName, svgClassName, }) => (React__default["default"].createElement("button", { onClick: onClose, className: `le-newbuilder-close-button js-modal__close ${containerClassName || ''}` },
1404
- React__default["default"].createElement("svg", { width: "1em", height: "1em", viewBox: "0 0 20 20", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", className: svgClassName },
1405
- React__default["default"].createElement("path", { d: "M9.99981 10.8432L14.0583 14.9017C14.1691 15.0125 14.3083 15.0691 14.476 15.0717C14.6437 15.0743 14.7854 15.0176 14.9013 14.9017C15.0172 14.7858 15.0752 14.6453 15.0752 14.4802C15.0752 14.3151 15.0172 14.1746 14.9013 14.0587L10.8429 10.0002L14.9013 5.9417C15.0121 5.83094 15.0688 5.69172 15.0713 5.52402C15.0739 5.35634 15.0172 5.21456 14.9013 5.09866C14.7854 4.98276 14.6449 4.9248 14.4798 4.9248C14.3147 4.9248 14.1742 4.98276 14.0583 5.09866L9.99981 9.15712L5.94133 5.09866C5.83057 4.98789 5.69135 4.93122 5.52365 4.92866C5.35598 4.92609 5.21419 4.98276 5.09829 5.09866C4.98239 5.21456 4.92444 5.35506 4.92444 5.52018C4.92444 5.6853 4.98239 5.82581 5.09829 5.9417L9.15675 10.0002L5.09829 14.0587C4.98752 14.1694 4.93085 14.3087 4.9283 14.4763C4.92572 14.644 4.98239 14.7858 5.09829 14.9017C5.21419 15.0176 5.3547 15.0756 5.51982 15.0756C5.68493 15.0756 5.82544 15.0176 5.94133 14.9017L9.99981 10.8432Z" }))));
1406
-
1407
- // url: imageBlocks.imageMobile.data.url
1408
- // newTab: imageBlocks.imageMobile.data.newtab
1409
- // imageMobile: campaignShow.image
1410
- // imageDestkop: campaignShow.image_desktop
1411
- const CenterTabLayout = ({ popupId, url, newTab, imageDestkop, imageMobile, onClose, onOtherSubmit, }) => {
1412
- const { width: imageMobileWidth, height: imageMobileHeight, loaded: imageMobileLoaded, } = useImageSize(imageMobile);
1413
- const { width: imageDestkopWidth, height: imageDestkopHeight, loaded: imageDestkopLoaded, } = useImageSize(imageDestkop);
1414
- if (!imageMobileLoaded || !imageDestkopLoaded)
1415
- return null;
1416
- return (React__default["default"].createElement("div", { id: popupId, className: "lead-modal-wrapper", "data-popup-url": location.pathname, "data-popup-type": "center_tab" },
1417
- React__default["default"].createElement("div", { className: "le-center-tab-popup" },
1418
- React__default["default"].createElement("div", { style: { position: 'relative' } },
1419
- React__default["default"].createElement("a", { className: "js-popup-other-submit", href: url, target: newTab ? 'blank' : '_parent', onClick: onOtherSubmit },
1420
- index$6.isVideo(imageMobile) ? (React__default["default"].createElement("video", { loop: true, muted: true, autoPlay: true, className: "le-only-mobile" },
1421
- React__default["default"].createElement("source", { src: imageMobile }))) : (React__default["default"].createElement("img", { className: "le-only-mobile", src: imageMobile, style: {
1422
- aspectRatio: `${imageMobileWidth}/${imageMobileHeight}`,
1423
- } })),
1424
- index$6.isVideo(imageDestkop) ? (React__default["default"].createElement("video", { loop: true, muted: true, autoPlay: true, className: "le-only-desktop" },
1425
- React__default["default"].createElement("source", { src: imageDestkop }))) : (React__default["default"].createElement("img", { className: "le-only-desktop", src: imageDestkop, style: {
1426
- aspectRatio: `${imageDestkopWidth}/${imageDestkopHeight}`,
1427
- } }))),
1428
- React__default["default"].createElement(CloseButton, { onClose: onClose, containerClassName: "close-button-top-right" })))));
1429
- };
1430
-
1431
- // title: titleText
1432
- // titleAlign: textBlocks.titleBlock.data.align
1433
- // subtitle: textBlocks.subtitleBlock.data.value
1434
- // subtitleAlign: textBlocks.subtitleBlock.data.align
1435
- // url: actionBlocks.linkButtonBlock.data.url
1436
- // urlText: actionBlocks.linkButtonBlock.data.value
1437
- // newTab: actionBlocks.linkButtonBlock.data.newtab
1438
- // imageMobile: campaignShow.image
1439
- // imageDesktop: campaignShow.image_desktop
1440
- const FloatingLayout = ({ popupId, url, title, urlText, titleAlign, subtitle, subtitleAlign, newTab, imageDesktop, imageMobile, onClose, onOtherSubmit, }) => {
1441
- const { width: imageMobileWidth, height: imageMobileHeight, loaded: imageMobileLoaded, } = useImageSize(imageMobile);
1442
- const { width: imageDesktopWidth, height: imageDesktopHeight, loaded: imageDesktopLoaded, } = useImageSize(imageDesktop);
1443
- if (!imageMobileLoaded || !imageDesktopLoaded)
1444
- return null;
1445
- return (React__default["default"].createElement("div", { id: popupId, className: "lead-modal-wrapper lead-floating-wrapper", "data-popup-url": location.pathname, "data-popup-type": "floating" },
1446
- React__default["default"].createElement("aside", { className: "le-only-desktop" },
1447
- React__default["default"].createElement("div", { className: "le-floating-desktop" },
1448
- React__default["default"].createElement("div", { className: "le-floating-desktop-wrap", style: { position: 'relative', background: '#fff' } },
1449
- imageDesktop ? (React__default["default"].createElement("div", null,
1450
- React__default["default"].createElement("img", { style: {
1451
- maxWidth: 120,
1452
- borderTopLeftRadius: 5,
1453
- borderBottomLeftRadius: 5,
1454
- aspectRatio: `${imageDesktopWidth}/${imageDesktopHeight}`,
1455
- }, src: imageDesktop }))) : null,
1456
- React__default["default"].createElement("div", { style: { padding: 20 } },
1457
- React__default["default"].createElement("div", { className: `le-floating-desktop-title le-text-align-${titleAlign}` }, title),
1458
- React__default["default"].createElement("div", { className: `le-floating-desktop-desc le-text-align-${subtitleAlign}` }, subtitle)),
1459
- React__default["default"].createElement("a", { target: newTab ? 'blank' : '_parent', style: { marginLeft: 35, textDecoration: 'none' }, href: url },
1460
- React__default["default"].createElement("button", { className: "le-joinbow-floating-btn js-popup-other-submit", onClick: onOtherSubmit }, urlText)),
1461
- React__default["default"].createElement(CloseButton, { onClose: onClose, containerClassName: "close-button-top-right" })))),
1462
- React__default["default"].createElement("aside", { className: "le-only-mobile" },
1463
- React__default["default"].createElement("div", { className: "le-floating-mobile" },
1464
- React__default["default"].createElement("div", { className: "le-floating-mobile-wrap", style: { position: 'relative', background: '#fff' } },
1465
- React__default["default"].createElement("aside", { style: { display: 'flex', justifyContent: 'space-between' } },
1466
- React__default["default"].createElement("div", null,
1467
- React__default["default"].createElement("div", { className: `le-floating-mobile-title le-text-align-${titleAlign}` }, title),
1468
- React__default["default"].createElement("div", { className: `le-floating-mobile-desc le-text-align-${subtitleAlign}` }, subtitle)),
1469
- imageMobile ? (React__default["default"].createElement("div", null,
1470
- React__default["default"].createElement("img", { style: {
1471
- marginLeft: 15,
1472
- marginTop: 4,
1473
- maxWidth: 100,
1474
- aspectRatio: `${imageMobileWidth}/${imageMobileHeight}`,
1475
- }, src: imageMobile }))) : null),
1476
- React__default["default"].createElement("div", { style: { textAlign: 'center', marginTop: 10 } },
1477
- React__default["default"].createElement("a", { target: newTab ? 'blank' : '_parent', href: url, style: { textDecoration: 'none' } },
1478
- React__default["default"].createElement("button", { className: "le-joinbow-floating-btn js-popup-other-submit", onClick: onOtherSubmit }, urlText))),
1479
- React__default["default"].createElement(CloseButton, { onClose: onClose, containerClassName: "close-button-top-right" }))))));
1577
+ const LeadGenTranslationProvider = (props) => {
1578
+ const { locale, children } = props;
1579
+ const translationContextValue = React.useMemo(() => ({ locale, values: getTranslations(locale) }), [locale]);
1580
+ return (React__default["default"].createElement(translationsContext.TranslationsContext.Provider, { value: translationContextValue }, children));
1480
1581
  };
1481
1582
 
1482
- const ThankyouPopup = ({ title, titleAlign, subtitle, subtitleAlign, link, linkNewTab, linkText, image, }) => {
1483
- const { primaryColor } = React.useContext(LeadGenContext);
1484
- const { width: imageWidth, height: imageHeight, loaded: imageLoaded, } = useImageSize(image);
1485
- if (!imageLoaded)
1583
+ // import mockLeadData from './mockLeadData'
1584
+ const listCampaignScheduled = [];
1585
+ const listCampaignScheduledToActivated = [];
1586
+ const listCampaignActiveButExpired = [];
1587
+ const listCampaignExcludeSonsored = [];
1588
+ const listCampaignDifferentSponsor = [];
1589
+ const listCampaignNotDisplayInRangeOfTime = [];
1590
+ function isMobile() {
1591
+ return /Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test(navigator.userAgent);
1592
+ }
1593
+ const getShuffleArray = (array) => {
1594
+ const newArray = [...array];
1595
+ for (let i = newArray.length - 1; i > 0; i--) {
1596
+ const j = Math.floor(Math.random() * (i + 1));
1597
+ const temp = newArray[i];
1598
+ newArray[i] = newArray[j];
1599
+ newArray[j] = temp;
1600
+ }
1601
+ return newArray;
1602
+ };
1603
+ const getTimeByTimezone = (timeZone = 'UTC') => {
1604
+ const date = new Date();
1605
+ return new Date(date.toLocaleString('en-US', { timeZone }));
1606
+ };
1607
+ const parseDateByCampaignTime = (dateStr) => {
1608
+ // Format like this: 2023-04-04 00:00:00
1609
+ try {
1610
+ const [datePart, timePart] = dateStr.split(' ');
1611
+ const [year, month, day] = datePart.split('-').map(Number);
1612
+ const [hours, minutes, seconds] = timePart.split(':').map(Number);
1613
+ /** JavaScript counts months from 0 to 11 */
1614
+ return new Date(year, month - 1, day, hours, minutes, seconds);
1615
+ }
1616
+ catch (err) {
1486
1617
  return null;
1487
- return (React__default["default"].createElement("div", { className: "lead-modal__thank-you leadgen-inner_thankyou" },
1488
- React__default["default"].createElement("div", { style: { width: '100%' } },
1489
- React__default["default"].createElement("img", { src: image, style: {
1490
- maxHeight: 162,
1491
- objectFit: 'cover',
1492
- aspectRatio: `${imageWidth}/${imageHeight}`,
1493
- }, loading: "lazy" }),
1494
- title && (React__default["default"].createElement("h1", { className: `le-thankyou-title le-text-align-${titleAlign}` }, title)),
1495
- subtitle && (React__default["default"].createElement("p", { className: `le-thankyou-subtitle le-text-align-${subtitleAlign}` }, subtitle.split('\n').map((text, idx, list) => {
1496
- const isShowBr = idx < list.length - 1;
1497
- return (React__default["default"].createElement(React__default["default"].Fragment, null,
1498
- text,
1499
- isShowBr && React__default["default"].createElement("br", null)));
1500
- }))),
1501
- linkText && (React__default["default"].createElement("div", null,
1502
- React__default["default"].createElement("a", { href: link, target: linkNewTab ? '_blank' : 'parrent', rel: "noreferrer" },
1503
- React__default["default"].createElement(index$3.Button, { className: `lead-modal__btn ${LEAD_CLASS}`, color: primaryColor }, linkText)))))));
1504
- };
1505
-
1506
- const InlineLayout = ({ content, inlinePosition, }) => {
1507
- const target = React.useMemo(() => {
1508
- if (!inlinePosition)
1509
- return null;
1510
- const parents = document.querySelectorAll(`[data-url="${location.pathname}"] .body-content`);
1511
- const allChildren = Array.from(parents).reduce((r, p) => {
1512
- return [...r, ...Array.from(p.children)];
1513
- }, []);
1514
- if (allChildren === null || allChildren === void 0 ? void 0 : allChildren.length) {
1515
- // find the third p tag in the body content, some other tags might mix in between
1516
- const allPTags = allChildren.filter((c) => c.nodeName === 'P');
1517
- const allH2Tags = allChildren.filter((c) => c.nodeName === 'H2');
1518
- let target = null;
1618
+ }
1619
+ };
1620
+ const checkCampaignNowInTimeframe = (c) => {
1621
+ var _a;
1622
+ const siteId = ((_a = c.site) === null || _a === void 0 ? void 0 : _a.id) || 1;
1623
+ const startedAtStr = c.started_at;
1624
+ const endedAtStr = c.ended_at;
1625
+ const startedDate = parseDateByCampaignTime(startedAtStr);
1626
+ const endedDate = parseDateByCampaignTime(endedAtStr);
1627
+ if (!startedDate || !endedDate) {
1628
+ return false;
1629
+ }
1630
+ const timeZone = LEAD_TIMEZONE_DATA[siteId];
1631
+ const nowWithTimezoneMs = getTimeByTimezone(timeZone).getTime();
1632
+ if (nowWithTimezoneMs <= endedDate.getTime() &&
1633
+ nowWithTimezoneMs >= startedDate.getTime()) {
1634
+ listCampaignScheduledToActivated.push(c);
1635
+ return true;
1636
+ }
1637
+ return false;
1638
+ };
1639
+ function checkCampaignActiveButExpireAlready(c) {
1640
+ var _a;
1641
+ /** Do not setup timeframe for this campaign. No need to check */
1642
+ if (c.forever === 1) {
1643
+ return true;
1644
+ }
1645
+ const startedAtStr = c.started_at;
1646
+ const endedAtStr = c.ended_at;
1647
+ const startedDate = parseDateByCampaignTime(startedAtStr);
1648
+ const endedDate = parseDateByCampaignTime(endedAtStr);
1649
+ /** Do not setup timeframe for this campaign. No need to check */
1650
+ if (!startedDate || !endedDate) {
1651
+ return true;
1652
+ }
1653
+ const siteId = ((_a = c.site) === null || _a === void 0 ? void 0 : _a.id) || 1;
1654
+ const timeZone = LEAD_TIMEZONE_DATA[siteId];
1655
+ const nowWithTimezoneMs = getTimeByTimezone(timeZone).getTime();
1656
+ /** Check if this expire already, do not show */
1657
+ if (nowWithTimezoneMs > endedDate.getTime()) {
1658
+ listCampaignActiveButExpired.push(c);
1659
+ return false;
1660
+ }
1661
+ return true;
1662
+ }
1663
+ function shouldNotDisplayIfExcludeAllSponsors(c) {
1664
+ var _a;
1665
+ const excludeSponsored = Number((_a = c.rules.find((i) => i.rule == 'exclude_sponsored')) === null || _a === void 0 ? void 0 : _a.value);
1666
+ const isSponsored = Boolean(document.querySelector('.hhg-disclaimer-text'));
1667
+ if (isSponsored && excludeSponsored) {
1668
+ listCampaignExcludeSonsored.push(c);
1669
+ return true;
1670
+ }
1671
+ return false;
1672
+ }
1673
+ function shouldDisplayWithCurrentSponsor(c) {
1674
+ var _a, _b;
1675
+ try {
1676
+ // TODO: BE will rename `exclude_sponsored_list` later
1677
+ const stringOrArray = (_a = c.rules.find((i) => i.rule == 'exclude_sponsored_list')) === null || _a === void 0 ? void 0 : _a.value;
1678
+ const whiteListSponsors = stringOrArray instanceof Array ? stringOrArray : JSON.parse(stringOrArray);
1679
+ const dataSponsoredId = Number((_b = document
1680
+ .querySelector('[data-sponsored-id]')) === null || _b === void 0 ? void 0 : _b.getAttribute('data-sponsored-id'));
1681
+ // There is no config for sponsor id and white list, should show as default
1682
+ if (!dataSponsoredId ||
1683
+ dataSponsoredId <= 0 ||
1684
+ whiteListSponsors.length === 0) {
1685
+ return true;
1686
+ }
1687
+ // Check the dataSponsoredId exists in the white list or not.
1688
+ const isExist = whiteListSponsors.find((s) => s.id == dataSponsoredId);
1689
+ if (isExist) {
1690
+ return true;
1691
+ }
1692
+ listCampaignDifferentSponsor.push({ id: c.id, rules: c.rules });
1693
+ return false;
1694
+ }
1695
+ catch (err) {
1696
+ // Default is show
1697
+ return true;
1698
+ }
1699
+ }
1700
+ const filterFnCampaign = (c) => {
1701
+ if (shouldNotDisplayIfExcludeAllSponsors(c)) {
1702
+ return false;
1703
+ }
1704
+ else if (!shouldDisplayWithCurrentSponsor(c)) {
1705
+ return false;
1706
+ }
1707
+ /** Active */
1708
+ if (c.formatted_status === 1) {
1709
+ return checkCampaignActiveButExpireAlready(c);
1710
+ }
1711
+ /** Schedule */
1712
+ if (c.formatted_status === 0) {
1713
+ listCampaignScheduled.push(c);
1714
+ return checkCampaignNowInTimeframe(c);
1715
+ }
1716
+ return false;
1717
+ };
1718
+ const fillterApprearanceTimeCampaign = (c) => {
1719
+ var _a;
1720
+ try {
1721
+ const isTimeInRange = (currentTime, startTime, endTime) => {
1722
+ const startParts = startTime.split(':');
1723
+ const endParts = endTime.split(':');
1724
+ const startDate = new Date();
1725
+ startDate.setHours(Number(startParts[0]), Number(startParts[1]), 0, 0);
1726
+ const endDate = new Date();
1727
+ endDate.setHours(Number(endParts[0]), Number(endParts[1]), 0, 0);
1728
+ return currentTime >= startDate && currentTime <= endDate;
1729
+ };
1730
+ const rulesApprValue = (_a = c.rules.find((i) => i.rule == 'appearance_time')) === null || _a === void 0 ? void 0 : _a.value;
1731
+ const startTime = rulesApprValue.startTime;
1732
+ const endTime = rulesApprValue.endTime || '23:59';
1733
+ if (!startTime) {
1734
+ return true;
1735
+ }
1736
+ if (isTimeInRange(new Date(), startTime, endTime)) {
1737
+ return true;
1738
+ }
1739
+ listCampaignNotDisplayInRangeOfTime.push(c);
1740
+ return false;
1741
+ }
1742
+ catch (err) {
1743
+ return true;
1744
+ }
1745
+ };
1746
+ let timeoutRef = null;
1747
+ let LEAD_SCROLL_EVENT = null;
1748
+ function clearPassiveEvent() {
1749
+ if (timeoutRef) {
1750
+ clearTimeout(timeoutRef);
1751
+ timeoutRef = null;
1752
+ }
1753
+ if (LEAD_SCROLL_EVENT) {
1754
+ window.removeEventListener('scroll', LEAD_SCROLL_EVENT);
1755
+ LEAD_SCROLL_EVENT = null;
1756
+ }
1757
+ }
1758
+ function checkShowPopup({ leadApi, leadSiteId, leadDomain, onShowPopup, DEBUG_URL, }) {
1759
+ // clear previous passive event, check for new condition
1760
+ clearPassiveEvent();
1761
+ const leadCurrentUrl = DEBUG_URL ||
1762
+ ('https://' +
1763
+ location.hostname +
1764
+ location.pathname +
1765
+ location.search).toLowerCase();
1766
+ fetch(leadApi + 'api/campaign/' + leadSiteId, {
1767
+ method: 'POST',
1768
+ headers: {
1769
+ 'Content-Type': 'application/json',
1770
+ },
1771
+ body: JSON.stringify({
1772
+ url: leadCurrentUrl,
1773
+ ga_client_id: miscCookieHelper.getCookie('_ga') || null,
1774
+ }),
1775
+ })
1776
+ .then((response) => {
1777
+ return response.json();
1778
+ // return mockLeadData || response.json()
1779
+ })
1780
+ .then((data) => {
1781
+ var _a, _b, _c, _d;
1782
+ LeadLog('List campagin: ', data);
1783
+ LEAD_RESET_VAR();
1784
+ if (data._status == 1) {
1785
+ const campaigns = (((_b = (_a = data._data) === null || _a === void 0 ? void 0 : _a.campaigns) === null || _b === void 0 ? void 0 : _b.filter(filterFnCampaign)) || []).filter(fillterApprearanceTimeCampaign);
1786
+ if (!miscCookieHelper.getCookie('hhg-id')) {
1787
+ miscCookieHelper.setCookie('hhg-id', uuid.v1(), {
1788
+ domain: '.' + leadDomain,
1789
+ path: '/',
1790
+ });
1791
+ LeadLog('😍 Set HHG ID cookie');
1792
+ }
1793
+ // getCookie('hhg-id')
1794
+ // TODO: HP-534 Filter desktop
1795
+ let campaignsDevice = [];
1796
+ if (isMobile()) {
1797
+ campaignsDevice = campaigns.filter((c) => c.device_types.some((d) => d.id == LEAD_DEVICE_TYPE.MOBILE));
1798
+ }
1799
+ else {
1800
+ campaignsDevice = campaigns.filter((c) => c.device_types.some((d) => d.id == LEAD_DEVICE_TYPE.DESKTOP));
1801
+ }
1802
+ LeadLog(`👓 campaignsDevice`, campaignsDevice);
1803
+ LeadLog('--listCampaignScheduled', listCampaignScheduled);
1804
+ LeadLog('--listCampaignScheduledToActivated', listCampaignScheduledToActivated);
1805
+ LeadLog('--listCampaignActiveButExpired', listCampaignActiveButExpired);
1806
+ LeadLog('--listCampaignExcludeSonsored', listCampaignExcludeSonsored);
1807
+ LeadLog('--listCampaignDifferentSponsor', listCampaignDifferentSponsor);
1808
+ LeadLog('--listCampaignNotDisplayInRangeOfTime', listCampaignNotDisplayInRangeOfTime);
1809
+ // Check links
1810
+ let listLinksObj = campaignsDevice
1811
+ .map((i, index) => i.targets
1812
+ .filter((i) => i.type == CAMPAIGN_TARGET_TYPE.LINKS)
1813
+ .map((i) => (Object.assign(Object.assign({}, i), { campaignIndex: index }))))
1814
+ .flat(1);
1815
+ // Check list link match current href
1816
+ listLinksObj = listLinksObj.filter((i) => {
1817
+ var _a;
1818
+ const target = new URL(String(i.target).toLowerCase());
1819
+ if (i.option == 'exact_match')
1820
+ // FOR TEST LOCAL:
1821
+ // return Boolean(location.pathname === target.pathname)
1822
+ return Boolean(leadCurrentUrl === ((_a = target.href) === null || _a === void 0 ? void 0 : _a.toLowerCase()));
1823
+ if (i.option == 'start_with') {
1824
+ // FOR TEST LOCAL:
1825
+ // if (location.pathname.includes(target.pathname)) {
1826
+ if (leadCurrentUrl.includes(String(i.target).toLowerCase())) {
1827
+ const listExcluding = i.sub_target
1828
+ .filter((i) => i.option == 'excluding')
1829
+ .map((i) => { var _a; return (_a = i.value) === null || _a === void 0 ? void 0 : _a.toLowerCase(); });
1830
+ return !listExcluding.includes(leadCurrentUrl.split('?')[0]);
1831
+ }
1832
+ else {
1833
+ return false;
1834
+ }
1835
+ }
1836
+ });
1837
+ // Check tags
1838
+ const listMetaTag = Array.from(document.getElementsByTagName('META')).filter((i) => i.getAttribute('property') == 'article:tag');
1839
+ const listTags = listMetaTag.map((i) => i.content);
1840
+ let listCampaignHasTag = [];
1841
+ let listTagsObj = [];
1842
+ if (listTags && listTags.length) {
1843
+ listCampaignHasTag = campaignsDevice
1844
+ .map((i, index) => i.targets
1845
+ .filter((i) => i.type == CAMPAIGN_TARGET_TYPE.TAGS)
1846
+ .map((i) => (Object.assign(Object.assign({}, i), { campaignIndex: index }))))
1847
+ .flat(1);
1848
+ listTagsObj = listCampaignHasTag.filter((i) => listTags.includes(i.target));
1849
+ }
1850
+ const listCampaginsMatch = [...listLinksObj, ...listTagsObj];
1851
+ const cookieKeys = document.cookie
1852
+ .split('; ')
1853
+ .map((i) => i.split('=')[0]);
1854
+ const listCampaignCodeSubmited = cookieKeys.filter((i) => i.includes('lead_submited'));
1855
+ LeadLog(`--listCampaignCodeSubmited`, listCampaignCodeSubmited);
1856
+ const listCampaignCodeClosed = cookieKeys.filter((i) => i.includes('lead_closed'));
1857
+ LeadLog(`--listCampaignCodeClosed`, listCampaignCodeClosed);
1858
+ const listCampaignSubmitedClosed = [
1859
+ ...listCampaignCodeSubmited,
1860
+ ...listCampaignCodeClosed,
1861
+ ];
1862
+ const listCampaignNoSubmitedClosed = listCampaginsMatch.filter((i) => {
1863
+ const hasSubmited = listCampaignSubmitedClosed.some((k) => k.includes(campaignsDevice[i.campaignIndex].code));
1864
+ return !hasSubmited;
1865
+ });
1866
+ const listCampaignValid = getShuffleArray(listCampaignNoSubmitedClosed);
1867
+ // .sort(
1868
+ // (a, b) =>
1869
+ // (listCampaignValid[a.campaignIndex]?.score || 0) -
1870
+ // (listCampaignValid[b.campaignIndex]?.score || 0),
1871
+ // )
1872
+ LeadLog('--listCampaignValid : ', listCampaignValid);
1873
+ if (listCampaignValid && listCampaignValid.length) {
1874
+ const CAMPAIGN_SHOW = campaignsDevice[listCampaignValid[0].campaignIndex];
1875
+ LeadLog(`CAMPAIGN_SHOW`, CAMPAIGN_SHOW);
1876
+ const { rules } = CAMPAIGN_SHOW;
1877
+ // CHECK RULE TRIGGER POPUP
1878
+ const timeoutRule = Number((_c = rules.find((i) => i.rule == 'time')) === null || _c === void 0 ? void 0 : _c.value);
1879
+ LeadLog(`timeoutRule`, timeoutRule);
1880
+ const scrollRule = Number((_d = rules.find((i) => i.rule == 'scroll')) === null || _d === void 0 ? void 0 : _d.value);
1881
+ LeadLog(`scrollRule`, scrollRule);
1882
+ let impressionAction = 'TIME';
1883
+ if (Number.isInteger(timeoutRule)) {
1884
+ impressionAction = 'TIME';
1885
+ LeadLog('✨ SHOW AWESOME POPUP AFTER: ', timeoutRule, ' seconds');
1886
+ timeoutRef = setTimeout(() => {
1887
+ onShowPopup === null || onShowPopup === void 0 ? void 0 : onShowPopup(CAMPAIGN_SHOW, impressionAction);
1888
+ }, timeoutRule * 1000);
1889
+ }
1890
+ if (Number.isInteger(scrollRule)) {
1891
+ impressionAction = 'SCROLL';
1892
+ LeadLog('✨ SHOW AWESOME AFTER: SCROLL', scrollRule, ' %');
1893
+ const $p = document.querySelector(`[data-url="${location.pathname}"]`) ||
1894
+ document.querySelector('body');
1895
+ const pct = $p.getBoundingClientRect().top;
1896
+ const pb = $p.offsetHeight;
1897
+ LeadLog(`👓 Element check scroll: `, $p);
1898
+ LEAD_SCROLL_EVENT = function leadScollCheckHandler() {
1899
+ const wt = window.pageYOffset || document.documentElement.scrollTop;
1900
+ let percent = 0;
1901
+ if (wt >= pct) {
1902
+ percent = Math.round(((wt - pct) / (pb - innerHeight)) * 100);
1903
+ }
1904
+ LeadLog('---Scroll', percent, scrollRule);
1905
+ // TODO: CHECK FOOTER HEIGHT
1906
+ if (percent >= scrollRule) {
1907
+ window.removeEventListener('scroll', LEAD_SCROLL_EVENT);
1908
+ onShowPopup === null || onShowPopup === void 0 ? void 0 : onShowPopup(CAMPAIGN_SHOW, impressionAction);
1909
+ }
1910
+ };
1911
+ window.addEventListener('scroll', LEAD_SCROLL_EVENT, {
1912
+ passive: true,
1913
+ });
1914
+ }
1915
+ }
1916
+ else {
1917
+ LeadLog('🚧 No lead campaigns on current URL, tags');
1918
+ }
1919
+ }
1920
+ })
1921
+ .catch((err) => {
1922
+ LeadLog(`Lead error: `, err);
1923
+ });
1924
+ }
1925
+ const LeadLog = (...params) => {
1926
+ if (process.env.NODE_ENV !== 'production' ||
1927
+ (process.env.NEXT_PUBLIC_DEPLOY_ENV &&
1928
+ process.env.NEXT_PUBLIC_DEPLOY_ENV !== 'production') ||
1929
+ (typeof localStorage !== 'undefined' &&
1930
+ localStorage.getItem('hhg_debug') === 'true')) {
1931
+ console.log(...params);
1932
+ }
1933
+ };
1934
+
1935
+ const LeadGenContext = React.createContext({
1936
+ submit(value) {
1937
+ /** Init for FAKING function */
1938
+ LeadLog('** LeadGen Submit : ', value);
1939
+ return Promise.reject(value);
1940
+ },
1941
+ submitSubscriptionBox(value) {
1942
+ /** Init for FAKING function */
1943
+ LeadLog('** LeadGen SubmitSubscriptionBox : ', value);
1944
+ return Promise.reject(value);
1945
+ },
1946
+ impression(value) {
1947
+ /** Init for FAKING function */
1948
+ LeadLog('** LeadGen Impression : ', value);
1949
+ return Promise.reject(value);
1950
+ },
1951
+ /** For Subscription Box */
1952
+ subscriptionIcon: '',
1953
+ subscriptionTitle: '',
1954
+ });
1955
+ const LeadGenContextProvider = (props) => {
1956
+ const { campaign_code: campaignCodeProps, apiSsoUrl, apiLeadUrl, apiSubotUrl, locale: localeProps, forceCampaign: forceCampaignProps, extraValues, articleId = 1, categoryId = 1, siteDomain: site_domain, children, } = props;
1957
+ const [forceCampaign, setForceCampaign] = React.useState(forceCampaignProps);
1958
+ const [subscriptionInfo, setSubscriptionInfo] = React.useState({
1959
+ subscriptionIcon: '',
1960
+ subscriptionTitle: '',
1961
+ });
1962
+ const locale = React.useMemo(() => {
1963
+ return localeProps || Locale.LOCALE['PhilippinesEnglish'];
1964
+ }, [localeProps]);
1965
+ const leadGenContextValue = React.useMemo(() => (Object.assign(Object.assign({}, props), { forceCampaign })), [...Object.values(props), forceCampaign]);
1966
+ const { url, campaign_id, campaign_code, cookie_id, ga_client_id, category_id, article_id, article_title, } = React.useMemo(() => ({
1967
+ url: location.href.toLowerCase() || '',
1968
+ cookie_id: miscCookieHelper.getCookie('hhg-id') || null,
1969
+ ga_client_id: miscCookieHelper.getCookie('_ga'),
1970
+ campaign_id: forceCampaign === null || forceCampaign === void 0 ? void 0 : forceCampaign.id,
1971
+ campaign_code: campaignCodeProps || (forceCampaign === null || forceCampaign === void 0 ? void 0 : forceCampaign.code),
1972
+ category_id: categoryId,
1973
+ article_id: articleId,
1974
+ article_title: document.title || '',
1975
+ }), [campaignCodeProps, articleId, categoryId, forceCampaign === null || forceCampaign === void 0 ? void 0 : forceCampaign.id]);
1976
+ const fetchCampaign = React.useCallback((campaign_code) => {
1977
+ Service.getCampaignByCode(campaign_code).then((res) => {
1978
+ const { _data } = res || {};
1979
+ const { campaigns } = _data || {};
1980
+ LeadLog('** LeadGen Campaign : ', campaigns);
1981
+ setForceCampaign(formatCampaignDetail(campaigns));
1982
+ });
1983
+ }, [campaignCodeProps]);
1984
+ // TODO : Update form for LeadGen
1985
+ const submit = React.useCallback((data) => {
1986
+ return Service.postSubscriptionBoxLead({ data });
1987
+ }, []);
1988
+ const submitSubscriptionBox = React.useCallback((value) => {
1989
+ const data = Object.assign(Object.assign(Object.assign(Object.assign({}, value), { campaign_id,
1990
+ site_domain, url: (value === null || value === void 0 ? void 0 : value.url) || url, ga_client_id: (value === null || value === void 0 ? void 0 : value.ga_client_id) || ga_client_id }), extraValues), { article_id,
1991
+ category_id, article_title: (extraValues === null || extraValues === void 0 ? void 0 : extraValues.article_title) || article_title });
1992
+ return Service.postSubscriptionBoxLead({ data });
1993
+ }, [
1994
+ extraValues,
1995
+ site_domain,
1996
+ campaign_id,
1997
+ article_id,
1998
+ article_title,
1999
+ category_id,
2000
+ url,
2001
+ ga_client_id,
2002
+ ]);
2003
+ const impression = React.useCallback((value) => {
2004
+ return Service.campaignPostImpression({
2005
+ url: (value === null || value === void 0 ? void 0 : value.url) || url,
2006
+ action: (value === null || value === void 0 ? void 0 : value.action) || LEADGEN_ACTIONS.SCROLL,
2007
+ code: (value === null || value === void 0 ? void 0 : value.code) || campaign_code,
2008
+ title_article: (value === null || value === void 0 ? void 0 : value.title_article) || article_title,
2009
+ cookie_id: (value === null || value === void 0 ? void 0 : value.cookie_id) || cookie_id,
2010
+ ga_client_id: (value === null || value === void 0 ? void 0 : value.ga_client_id) || ga_client_id,
2011
+ extra: (value === null || value === void 0 ? void 0 : value.extra) || Object.assign({ cookie_id,
2012
+ article_id, subscription_title: subscriptionInfo.subscriptionTitle }, extraValues),
2013
+ referrer: value === null || value === void 0 ? void 0 : value.referrer,
2014
+ });
2015
+ }, [
2016
+ extraValues,
2017
+ campaign_id,
2018
+ url,
2019
+ campaign_code,
2020
+ article_title,
2021
+ cookie_id,
2022
+ ga_client_id,
2023
+ article_id,
2024
+ subscriptionInfo.subscriptionTitle,
2025
+ ]);
2026
+ React.useEffect(() => {
2027
+ if (forceCampaignProps) {
2028
+ setForceCampaign(forceCampaignProps);
2029
+ return;
2030
+ }
2031
+ /** For Subscription Box */
2032
+ if (categoryId) {
2033
+ Service.getSubscriptionBoxInfo({
2034
+ category: categoryId,
2035
+ site: site_domain,
2036
+ }).then((res) => {
2037
+ const { _data } = res || {};
2038
+ const { item, campaign_code } = _data || {};
2039
+ const { icon, content } = item || {};
2040
+ LeadLog('** LeadGen SubscriptionBox campaign_code : ', campaign_code);
2041
+ LeadLog('** LeadGen SubscriptionBox subscription_icon : ', icon);
2042
+ LeadLog('** LeadGen SubscriptionBox subscription_title : ', content);
2043
+ setSubscriptionInfo({
2044
+ subscriptionIcon: icon,
2045
+ subscriptionTitle: content,
2046
+ });
2047
+ if (campaign_code) {
2048
+ fetchCampaign(campaign_code);
2049
+ }
2050
+ });
2051
+ return;
2052
+ }
2053
+ if (campaignCodeProps) {
2054
+ fetchCampaign(campaignCodeProps);
2055
+ }
2056
+ }, [campaignCodeProps, categoryId]);
2057
+ React.useEffect(() => {
2058
+ leadStore.apiSsoUrl = apiSsoUrl;
2059
+ leadStore.apiLeadUrl = apiLeadUrl;
2060
+ leadStore.apiSubotUrl = apiSubotUrl;
2061
+ }, [apiLeadUrl, apiSubotUrl, apiSsoUrl]);
2062
+ if (!forceCampaign || !(forceCampaign === null || forceCampaign === void 0 ? void 0 : forceCampaign.id)) {
2063
+ return null;
2064
+ }
2065
+ return (React__default["default"].createElement(LeadGenContext.Provider, { value: Object.assign(Object.assign(Object.assign({}, leadGenContextValue), subscriptionInfo), { submit,
2066
+ submitSubscriptionBox,
2067
+ impression }) },
2068
+ React__default["default"].createElement(LeadGenTranslationProvider, { locale: locale }, children)));
2069
+ };
2070
+ const useLeadGenContext = () => {
2071
+ const context = React.useContext(LeadGenContext);
2072
+ return Object.assign(Object.assign({}, context), { apiLeadUrl: context.apiLeadUrl || leadStore.apiLeadUrl, apiSubotUrl: context.apiSubotUrl || leadStore.apiSubotUrl });
2073
+ };
2074
+
2075
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
2076
+ const customParseFormat = require('dayjs/plugin/customParseFormat');
2077
+ dayjs__default["default"].extend(customParseFormat);
2078
+ // You can give context variables any name
2079
+ const [LeadFormProvider, useLeadFormContext, useLeadForm] = form.createFormContext();
2080
+ const useLeadFormConfig = ({ listBlockAdded = [], validatingPhoneRef, validatingEmailRef, campaignId, campaign_subot_id = [], userInfo, format, }) => {
2081
+ var _a;
2082
+ const { t } = index.useTranslations();
2083
+ const initialValues = React.useMemo(() => mappingSSOToLead(userInfo), [userInfo === null || userInfo === void 0 ? void 0 : userInfo.id]);
2084
+ const LEAD_LOCALE = LEAD_LOCALE_DATA[(_a = document === null || document === void 0 ? void 0 : document.documentElement) === null || _a === void 0 ? void 0 : _a.lang] ||
2085
+ LEAD_LOCALE_DATA['vi-VN'];
2086
+ const validateObj = React.useMemo(() => {
2087
+ const InputBlocks = [
2088
+ 'TextBlock',
2089
+ 'NumberBlock',
2090
+ 'EmailBlock',
2091
+ 'PhoneBlock',
2092
+ 'DateBlock',
2093
+ 'CheckboxBlock',
2094
+ 'RadioBlock',
2095
+ 'DropdownBlock',
2096
+ 'PhoneOtpBlock',
2097
+ 'WhatsappOtpBlock',
2098
+ 'ZaloOtpBlock',
2099
+ 'LocationBlock',
2100
+ 'TncBlock',
2101
+ ];
2102
+ // ALL are required and can skip if not touched yet
2103
+ const withSharedCheck = (name, cb,
2104
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
2105
+ block) => {
2106
+ return (value) => {
2107
+ var _a;
2108
+ const isBLockRequired = (_a = block === null || block === void 0 ? void 0 : block.data) === null || _a === void 0 ? void 0 : _a.required;
2109
+ if (!formRef.current.isTouched(name))
2110
+ return;
2111
+ if ((typeof value === 'string' && value.trim() === '') ||
2112
+ typeof value === 'undefined' ||
2113
+ (Array.isArray(value) && value.length === 0)) {
2114
+ return isBLockRequired
2115
+ ? t('validator.required')
2116
+ : cb === null || cb === void 0 ? void 0 : cb(value);
2117
+ }
2118
+ return cb === null || cb === void 0 ? void 0 : cb(value);
2119
+ };
2120
+ };
2121
+ return listBlockAdded
2122
+ .filter((b) => InputBlocks.includes(b.name))
2123
+ .reduce((r, b) => {
2124
+ const { name: fieldType, data } = b || {};
2125
+ const { value: fieldName, required } = data || {};
2126
+ const isRequired = required !== null && required !== void 0 ? required : true;
2127
+ if (fieldType === 'NumberBlock') {
2128
+ return Object.assign(Object.assign({}, r), { [fieldName]: withSharedCheck(fieldName, (value) => {
2129
+ if (value && isNaN(Number(value))) {
2130
+ return t('validator.number');
2131
+ }
2132
+ }, b) });
2133
+ }
2134
+ else if (fieldType === 'EmailBlock') {
2135
+ return Object.assign(Object.assign({}, r), { [fieldName]: withSharedCheck(fieldName, (value) => {
2136
+ if (value && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
2137
+ return t('validator.email');
2138
+ }
2139
+ if (!value)
2140
+ return;
2141
+ validatingEmailRef.current = true;
2142
+ setTimeout(() => {
2143
+ formRef.current.setFieldError(fieldName, 'Validating...');
2144
+ checkUsedEmailOrPhoneWithCache(campaignId, campaign_subot_id, {
2145
+ email: value,
2146
+ })
2147
+ .then((tKey) => {
2148
+ if (tKey) {
2149
+ formRef.current.setFieldError(fieldName, t(tKey));
2150
+ }
2151
+ else {
2152
+ formRef.current.clearFieldError(fieldName);
2153
+ }
2154
+ validatingEmailRef.current = false;
2155
+ })
2156
+ .catch((e) => {
2157
+ console.error(e);
2158
+ formRef.current.setFieldError(fieldName, e.message || 'Something went wrong');
2159
+ validatingEmailRef.current = false;
2160
+ });
2161
+ }, 200);
2162
+ }, b) });
2163
+ }
2164
+ else if (fieldType === 'PhoneBlock' ||
2165
+ fieldType === 'PhoneOtpBlock' ||
2166
+ fieldType === 'ZaloOtpBlock' ||
2167
+ fieldType === 'WhatsappOtpBlock') {
2168
+ return Object.assign(Object.assign({}, r), { [fieldName]: withSharedCheck(fieldName, (value) => {
2169
+ if (value &&
2170
+ window.intlTelInputUtils &&
2171
+ !window.intlTelInputUtils.isValidNumber(String(value), LEAD_LOCALE.countryCode)) {
2172
+ return t('validator.phone');
2173
+ }
2174
+ if (!value)
2175
+ return;
2176
+ validatingPhoneRef.current = true;
2177
+ setTimeout(() => {
2178
+ formRef.current.setFieldError(fieldName, 'Validating...');
2179
+ if (b.data.singleSubmission) {
2180
+ checkUsedPhoneOnlyWithCache(campaignId, value)
2181
+ .then((tKey) => {
2182
+ if (tKey) {
2183
+ formRef.current.setFieldError(fieldName, t(tKey));
2184
+ }
2185
+ else {
2186
+ formRef.current.clearFieldError(fieldName);
2187
+ }
2188
+ validatingPhoneRef.current = false;
2189
+ })
2190
+ .catch((err) => {
2191
+ console.error(err);
2192
+ formRef.current.setFieldError(fieldName, err.message || 'Something went wrong');
2193
+ validatingPhoneRef.current = false;
2194
+ });
2195
+ }
2196
+ else {
2197
+ checkUsedEmailOrPhoneWithCache(campaignId, campaign_subot_id, {
2198
+ phone: value,
2199
+ })
2200
+ .then((tKey) => {
2201
+ if (tKey) {
2202
+ formRef.current.setFieldError(fieldName, t(tKey));
2203
+ }
2204
+ else {
2205
+ formRef.current.clearFieldError(fieldName);
2206
+ }
2207
+ validatingPhoneRef.current = false;
2208
+ })
2209
+ .catch((e) => {
2210
+ console.error(e);
2211
+ formRef.current.setFieldError(fieldName, e.message || 'Something went wrong');
2212
+ validatingPhoneRef.current = false;
2213
+ });
2214
+ }
2215
+ }, 200);
2216
+ }, b) });
2217
+ }
2218
+ else if (fieldType === 'DateBlock') {
2219
+ return Object.assign(Object.assign({}, r), { [fieldName]: withSharedCheck(fieldName, (value) => {
2220
+ if (!isRequired && !value) {
2221
+ return;
2222
+ }
2223
+ const errMsg = t('validator.dateInvalid');
2224
+ const dayInJS = typeof value === 'string'
2225
+ ? dayjs__default["default"](value, format, true)
2226
+ : dayjs__default["default"](value);
2227
+ if (!dayInJS.isValid()) {
2228
+ return errMsg;
2229
+ }
2230
+ }, b) });
2231
+ }
2232
+ else if (fieldType === 'TncBlock') {
2233
+ return Object.assign(Object.assign({}, r), { [`TNC-` + b.id]: withSharedCheck('TNC-' + b.id, (value) => {
2234
+ if (isRequired && !value) {
2235
+ return t('validator.required');
2236
+ }
2237
+ }, b) });
2238
+ }
2239
+ else {
2240
+ return Object.assign(Object.assign({}, r), { [fieldName]: withSharedCheck(fieldName, undefined, b) });
2241
+ }
2242
+ }, {});
2243
+ }, [listBlockAdded.map((b) => b.name).join(','), format]);
2244
+ const form = useLeadForm({
2245
+ validateInputOnChange: true,
2246
+ validateInputOnBlur: true,
2247
+ clearInputErrorOnChange: true,
2248
+ validate: validateObj,
2249
+ initialValues,
2250
+ });
2251
+ const formRef = React.useRef(form);
2252
+ formRef.current = form;
2253
+ return { form, validateObj };
2254
+ };
2255
+
2256
+ const StyledLeadGenThankYou = styled__default["default"].div `
2257
+ display: flex;
2258
+ gap: 8px;
2259
+ flex-direction: column;
2260
+ padding-block: 24px;
2261
+
2262
+ .leadgen-image {
2263
+ width: 120px;
2264
+ height: 120px;
2265
+ margin-inline: auto;
2266
+ object-fit: contain;
2267
+ object-position: center;
2268
+ text-align: center;
2269
+ }
2270
+
2271
+ .leadgen-title {
2272
+ margin-block: 0;
2273
+ color: ${miscTheme.theme.colors.gray900};
2274
+ font-weight: 700;
2275
+ font-size: 18px;
2276
+ line-height: 28px;
2277
+ letter-spacing: -0.2px;
2278
+ }
2279
+
2280
+ .leadgen-description {
2281
+ margin-block: 0;
2282
+ color: ${miscTheme.theme.colors.gray600};
2283
+ font-weight: 400;
2284
+ font-size: 14px;
2285
+ line-height: 22px;
2286
+ letter-spacing: -0.2px;
2287
+ text-align: center;
2288
+ }
2289
+
2290
+ > [data-align] {
2291
+ &[data-align='right'] {
2292
+ text-align: right;
2293
+ }
2294
+ &[data-align='center'] {
2295
+ text-align: center;
2296
+ }
2297
+ }
2298
+ `;
2299
+ const LeadGenThankYou = ({ image, title, description, showButton = false, button, className, style, }) => {
2300
+ const { src } = image;
2301
+ const { htmlText: titleText, align: titleAlign } = title;
2302
+ const { htmlText: descriptionText, align: descriptionAlign } = description;
2303
+ const { htmlText: buttonText, newtab, url, onClick } = button;
2304
+ return (React__default["default"].createElement(StyledLeadGenThankYou, { className: className, style: style },
2305
+ React__default["default"].createElement("img", { src: src, alt: "", className: "leadgen-thankyou_image leadgen-image" }),
2306
+ React__default["default"].createElement("p", { className: "leadgen-thankyou_title leadgen-title", "data-align": titleAlign }, titleText),
2307
+ React__default["default"].createElement("p", { className: "leadgen-thankyou_description leadgen-description", "data-align": descriptionAlign }, descriptionText),
2308
+ !!buttonText && showButton && (React__default["default"].createElement(core.Button, { component: url ? 'a' : 'button', target: newtab ? '_blank' : undefined, href: url, size: "lg", variant: "filled", className: "leadgen-thankyoue_btn leadgen-btn", onClick: onClick }, buttonText))));
2309
+ };
2310
+
2311
+ const StyledLeadGenSubscriptionBoxBody = styled__default["default"].div `
2312
+ margin-top: 16px;
2313
+ .leadgen-btn {
2314
+ margin-top: 16px;
2315
+ }
2316
+ `;
2317
+ const StyledLeadGenSubscriptionBoxHeaderImage = styled__default["default"].div `
2318
+ margin-top: 3px;
2319
+ margin-right: 20px;
2320
+ width: 44px;
2321
+ height: 44px;
2322
+
2323
+ img {
2324
+ width: 100%;
2325
+ height: 100%;
2326
+ object-fix: contain;
2327
+ onject-position: center;
2328
+ }
2329
+
2330
+ :has(img[src='']) {
2331
+ display: none;
2332
+ }
2333
+ `;
2334
+ const StyledLeadGenSubscriptionBoxHeader = styled__default["default"].div `
2335
+ display: flex;
2336
+ align-items: center;
2337
+ margin-bottom: 16px;
2338
+ .leadgen-title {
2339
+ margin-bottom: 0;
2340
+ flex: 1;
2341
+ min-width: 0;
2342
+ color: ${miscTheme.theme.colors.gray900};
2343
+ font-size: 18px;
2344
+ font-weight: 400;
2345
+ line-height: 1.4;
2346
+ letter-spacing: -0.8px;
2347
+ }
2348
+ `;
2349
+ const StyledLeadGenSubscriptionBox = styled__default["default"].div `
2350
+ padding: 16px;
2351
+ border: 1px solid ${miscTheme.theme.colors.neutral100};
2352
+ border-radius: 12px;
2353
+ margin-inline: auto;
2354
+ .leadgen-form_inputs {
2355
+ .leadgen-form_input {
2356
+ width: 100%;
2357
+ }
2358
+ }
2359
+
2360
+ .leadgen-form_input {
2361
+ .mantine-Input-wrapper {
2362
+ max-height: 56px;
2363
+ }
2364
+ }
2365
+
2366
+ @media screen and (min-width: 768px) {
2367
+ .leadgen-subscription_box_body {
2368
+ display: flex;
2369
+ > form {
2370
+ flex: 1;
2371
+ min-width: 0;
2372
+
2373
+ .leadgen-form_inputs {
2374
+ .leadgen-form_input {
2375
+ width: calc(50% - 4px);
2376
+ }
2377
+ }
2378
+ }
2379
+
2380
+ .leadgen-btn {
2381
+ margin-top: 0;
2382
+ margin-left: 8px;
2383
+ width: auto;
2384
+ min-height: 56px;
2385
+ }
2386
+ }
2387
+ }
2388
+ `;
2389
+ const StyledLeadGenSubscriptionBoxA = styled__default["default"].div `
2390
+ .leadgen-form_input {
2391
+ --phone-select: 45px;
2392
+ .PhoneInput {
2393
+ --phone-select: 45px;
2394
+ .PhoneInputCountry {
2395
+ margin-top: 1px;
2396
+ pointer-events: none;
2397
+ .PhoneInputCountryIconImg,
2398
+ .PhoneInputArrowContainer {
2399
+ display: none;
2400
+ }
2401
+ }
2402
+ }
2403
+ }
2404
+ `;
2405
+
2406
+ const PhoneInput = React.forwardRef((props, ref) => {
2407
+ const { defaultCountry, id: idProps, name, placeholder, label, labelElement, labelProps, description, descriptionProps, withAsterisk, inputMode, inputContainer, inputWrapperOrder, error, className, classNames, style, styles } = props, restProps = tslib_es6.__rest(props, ["defaultCountry", "id", "name", "placeholder", "label", "labelElement", "labelProps", "description", "descriptionProps", "withAsterisk", "inputMode", "inputContainer", "inputWrapperOrder", "error", "className", "classNames", "style", "styles"]);
2408
+ const id = idProps || uuid.v1() + name;
2409
+ return (React__default["default"].createElement(core.Input.Wrapper, { size: "md", label: label, labelElement: labelElement, labelProps: Object.assign({ htmlFor: id }, labelProps), description: description, descriptionProps: descriptionProps, withAsterisk: withAsterisk, inputMode: inputMode, inputContainer: inputContainer, inputWrapperOrder: inputWrapperOrder, error: error, "data-invalid": !!error, className: className, classNames: classNames, style: style, styles: styles },
2410
+ React__default["default"].createElement("div", { className: "mantine-Input-wrapper" },
2411
+ React__default["default"].createElement(index$2.Phone, Object.assign({}, restProps, { id: id, ref: ref, name: name, spellCheck: false, placeholder: placeholder, defaultCountry: defaultCountry, className: "mantine-Input-input", type: "tel", "data-control": "tel" })))));
2412
+ });
2413
+
2414
+ const formatLeadGenFormValue = (values, blocks) => {
2415
+ const newValues = {};
2416
+ for (const block of blocks) {
2417
+ const { data } = block || {};
2418
+ const { value: fieldName } = data || {};
2419
+ if (fieldName in values) {
2420
+ newValues[fieldName] = values[fieldName];
2421
+ }
2422
+ }
2423
+ return newValues;
2424
+ };
2425
+
2426
+ const StyledLeadGenFormInner = styled__default["default"].div `
2427
+ display: flex;
2428
+ flex-wrap: wrap;
2429
+ gap: 8px;
2430
+ .leadgen-form_input {
2431
+ width: calc(50% - 4px);
2432
+ }
2433
+
2434
+ .leadgen-form_input_checkbox {
2435
+ width: 100%;
2436
+ }
2437
+ `;
2438
+
2439
+ const cssInputNotShrink$1 = react.css `
2440
+ height: 100% !important;
2441
+ min-height: calc(var(--container-height, 56px) * 22 / 56);
2442
+ color: ${miscTheme.theme.colors.gray800};
2443
+ font-size: var(--input, 16px);
2444
+ line-height: calc(var(--container-height, 56px) * 22 / 56);
2445
+ border: none !important;
2446
+ border-radius: 0 !important;
2447
+ outline: none !important;
2448
+ box-shadow: none !important;
2449
+ padding: 0;
2450
+ cursor: pointer;
2451
+ opacity: 0;
2452
+
2453
+ ::placeholder {
2454
+ color: ${miscTheme.theme.colors.gray400};
2455
+ }
2456
+ `;
2457
+ const cssInputShrink$1 = react.css `
2458
+ height: auto !important;
2459
+ cursor: text;
2460
+ opacity: 1;
2461
+ transition: 0.1s ease-in-out all;
2462
+ `;
2463
+ const cssLabelNotShrink$1 = react.css `
2464
+ position: absolute;
2465
+ top: calc(var(--container-height) / 2);
2466
+ left: var(--space-x, 16px);
2467
+ color: ${miscTheme.theme.colors.gray400};
2468
+ font-size: var(--label-not-shrink, 16px);
2469
+ font-weight: 400;
2470
+ line-height: calc(var(--container-height, 56px) * 18 / 56);
2471
+ margin: 0;
2472
+ z-index: 1;
2473
+ cursor: pointer;
2474
+ transform: translateY(-50%);
2475
+ transition: 0.125s ease-in all;
2476
+ `;
2477
+ const cssLabelShrink$1 = react.css `
2478
+ color: ${miscTheme.theme.colors.gray600};
2479
+ font-weight: 600;
2480
+ font-size: var(--label-shrink, 12px);
2481
+ top: calc(var(--container-height) * 7 / 56);
2482
+ transform: none;
2483
+ transition: 0.125s ease-out all;
2484
+ `;
2485
+ const cssWrapperInputNotShrink$1 = react.css `
2486
+ min-height: var(--container-height, 56px);
2487
+ display: flex;
2488
+ align-items: flex-end;
2489
+ border: 1px solid ${miscTheme.theme.colors.gray200};
2490
+ border-radius: 8px;
2491
+ background-color: #fff;
2492
+ padding-inline: var(--space-x, 16px);
2493
+ padding-block: var(--space-y-not-shrink, 16px);
2494
+ cursor: pointer;
2495
+ pointer-events: none;
2496
+
2497
+ &:has(.mantine-Input-rightSection) {
2498
+ padding-right: var(--container-height, 56px);
2499
+ }
2500
+
2501
+ .mantine-Input-icon {
2502
+ display: none;
2503
+ }
2504
+
2505
+ .mantine-NumberInput-control {
2506
+ border-color: ${miscTheme.theme.colors.gray200};
2507
+ }
2508
+ `;
2509
+ const cssWrapperInputShrink$1 = react.css `
2510
+ height: auto;
2511
+ min-height: var(--container-height, 56px);
2512
+ padding-block: var(--space-y-shrink, 7px);
2513
+ cursor: text;
2514
+ pointer-events: auto;
2515
+ `;
2516
+ const cssInputWrapperError$1 = react.css `
2517
+ color: ${miscTheme.theme.colors.red800};
2518
+ font-size: 12px;
2519
+ line-height: 1.5;
2520
+ `;
2521
+ const StyledTextFieldContainer$1 = styled__default["default"].div `
2522
+ --space-x: 16px;
2523
+ --space-y-not-shrink: 16px;
2524
+ --space-y-shrink: 7px;
2525
+ --container-height: 56px;
2526
+ --label-not-shrink: 16px;
2527
+ --label-shrink: 12px;
2528
+ --input: 16px;
2529
+
2530
+ position: relative;
2531
+ min-width: 100px;
2532
+ max-width: 100%;
2533
+ display: inline-block;
2534
+
2535
+ .textField_wrapper {
2536
+ display: inline-block;
2537
+ width: 100%;
2538
+ cursor: pointer;
2539
+ }
2540
+
2541
+ .mantine-InputWrapper-root {
2542
+ &[data-invalid='true'] {
2543
+ .mantine-Input-wrapper {
2544
+ border-color: ${miscTheme.theme.colors.red400};
2545
+ }
2546
+ }
2547
+
2548
+ .mantine-Input-wrapper {
2549
+ &:has([data-invalid]) {
2550
+ border-color: ${miscTheme.theme.colors.red400};
2551
+ }
2552
+ }
2553
+
2554
+ .mantine-InputWrapper-error {
2555
+ font-size: 12px !important;
2556
+ }
2557
+ }
2558
+
2559
+ .mantine-InputWrapper-label {
2560
+ ${cssLabelNotShrink$1}
2561
+ }
2562
+
2563
+ .mantine-Input-wrapper {
2564
+ ${cssWrapperInputNotShrink$1}
2565
+
2566
+ + .mantine-Popover-dropdown[data-position="bottom-start"] {
2567
+ left: 0 !important;
2568
+ }
2569
+ + .mantine-Popover-dropdown[data-position='top-start'] {
2570
+ top: unset !important;
2571
+ left: 0 !important;
2572
+ bottom: 100% !important;
2573
+ }
2574
+ }
2575
+
2576
+ .mantine-Input-input {
2577
+ ${cssInputNotShrink$1}
2578
+ }
2579
+
2580
+ &.textField_shrink,
2581
+ &:focus-within {
2582
+ .mantine-InputWrapper-label {
2583
+ ${cssLabelShrink$1}
2584
+ }
2585
+
2586
+ .mantine-Input-wrapper {
2587
+ ${cssWrapperInputShrink$1}
2588
+ &.mantine-Select-wrapper {
2589
+ .mantine-Select-rightSection {
2590
+ pointer-events: auto !important;
2591
+ }
2592
+ }
2593
+ }
2594
+
2595
+ .mantine-Input-input {
2596
+ ${cssInputShrink$1}
2597
+ }
2598
+
2599
+ &:has(.PhoneInput) {
2600
+ .mantine-InputWrapper-label {
2601
+ left: var(--space-x, 16px);
2602
+ }
2603
+ .PhoneInput {
2604
+ .PhoneInputInput {
2605
+ opacity: 1;
2606
+ }
2607
+ }
2608
+ }
2609
+ }
2610
+
2611
+ .PhoneInput {
2612
+ --phone-select: 75px;
2613
+ --phone-input-space-x: 8px;
2614
+ width: 100%;
2615
+ opacity: 1;
2616
+ border: none;
2617
+ .PhoneInputCountry {
2618
+ background-color: transparent;
2619
+ border: none;
2620
+ padding: 0;
2621
+ width: var(--phone-select, 75px);
2622
+ }
2623
+ .PhoneInputInput {
2624
+ flex: 1;
2625
+ min-width: 0;
2626
+ line-height: 1.5;
2627
+ outline: none !important;
2628
+ border: none;
2629
+ box-shadow: none;
2630
+ padding: 0 var(--phone-input-space-x, 8px);
2631
+ opacity: 0;
2632
+ color: ${miscTheme.theme.colors.gray800} !important;
2633
+ :focus {
2634
+ color: ${miscTheme.theme.colors.gray800} !important;
2635
+ }
2636
+ }
2637
+ }
2638
+
2639
+ &:has(.PhoneInput) {
2640
+ .mantine-InputWrapper-label {
2641
+ left: calc(
2642
+ var(--space-x, 16px) + var(--phone-select, 75px) +
2643
+ var(--phone-input-space-x, 8px)
2644
+ );
2645
+ }
2646
+ }
2647
+ `;
2648
+ const StyledChoiceFieldContainer$1 = styled__default["default"].div `
2649
+ &.leadgen-form_checkbox,
2650
+ &.leadgen-form_radio {
2651
+ width: 100%;
2652
+ }
2653
+
2654
+ &.leadgen-form_dropdown {
2655
+ width: calc(50% - 12px);
2656
+ }
2657
+
2658
+ .mantine-InputWrapper-root {
2659
+ display: block;
2660
+ .mantine-InputWrapper-error {
2661
+ font-size: 12px !important;
2662
+ }
2663
+ }
2664
+
2665
+ .mantine-InputWrapper-label {
2666
+ margin-bottom: 0.5rem;
2667
+ color: ${miscTheme.theme.colors.gray800};
2668
+ font-size: 16px;
2669
+ font-weight: 400;
2670
+ line-height: 1.5;
2671
+ }
2672
+
2673
+ .mantine-Radio-root,
2674
+ .mantine-Checkbox-root {
2675
+ gap: 8px;
2676
+ min-width: calc(50% - 4px);
2677
+
2678
+ input[type='radio'],
2679
+ input[type='checkbox'] {
2680
+ border-color: ${miscTheme.theme.colors.gray600};
2681
+ width: 18px;
2682
+ height: 18px;
2683
+ }
2684
+ input[type='checkbox'] {
2685
+ border-radius: 4px;
2686
+ }
2687
+
2688
+ &[data-checked='true'] {
2689
+ input[type='radio'],
2690
+ input[type='checkbox'] {
2691
+ border-color: ${miscTheme.theme.colors.primary600};
2692
+ + svg {
2693
+ color: ${miscTheme.theme.colors.primary600};
2694
+ }
2695
+ }
2696
+
2697
+ input[type='radio'] {
2698
+ background-color: white;
2699
+ }
2700
+ }
2701
+
2702
+ .mantine-Checkbox-input {
2703
+ &:checked {
2704
+ border-color: ${miscTheme.theme.colors.primary600};
2705
+ }
2706
+ }
2707
+ }
2708
+
2709
+ .mantine-Radio-inner,
2710
+ .mantine-Checkbox-inner {
2711
+ width: 24px;
2712
+ height: 24px;
2713
+ display: flex;
2714
+ align-items: center;
2715
+ justify-content: center;
2716
+ }
2717
+
2718
+ .mantine-Radio-body,
2719
+ .mantine-Checkbox-body {
2720
+ display: flex;
2721
+ align-items: center;
2722
+ }
2723
+
2724
+ .mantine-Radio-label,
2725
+ .mantine-Checkbox-label {
2726
+ padding-left: 8px;
2727
+ color: ${miscTheme.theme.colors.gray800};
2728
+ font-size: 14px;
2729
+ line-height: 1.4;
2730
+ letter-spacing: -0.2px;
2731
+ }
2732
+
2733
+ .leadgen-choiceContainer {
2734
+ display: flex;
2735
+ flex-wrap: wrap;
2736
+ align-items: flex-start;
2737
+ gap: 8px;
2738
+ }
2739
+
2740
+ .mantine-InputWrapper-error {
2741
+ ${cssInputWrapperError$1}
2742
+ }
2743
+ `;
2744
+
2745
+ const TextField$1 = (props) => {
2746
+ const { shrink: shrinkProps, onChangeShrink, className, children } = props, restProps = tslib_es6.__rest(props, ["shrink", "onChangeShrink", "className", "children"]);
2747
+ const containerRef = hooks.useClickOutside(() => {
2748
+ if (shrinkProps) {
2749
+ return;
2750
+ }
2751
+ setShrink(false);
2752
+ onChangeShrink === null || onChangeShrink === void 0 ? void 0 : onChangeShrink(false);
2753
+ });
2754
+ const [shrink, setShrink] = React.useState(shrinkProps);
2755
+ const onClick = React.useCallback((e) => {
2756
+ setShrink(true);
2757
+ onChangeShrink === null || onChangeShrink === void 0 ? void 0 : onChangeShrink(true);
2758
+ if (shrink) {
2759
+ return;
2760
+ }
2761
+ const $textEl = e.currentTarget.querySelectorAll('input:not([disabled]):not([type="submit"]),select:not([disabled]),textarea:not([disabled])');
2762
+ const $focusEl = $textEl.item($textEl.length - 1);
2763
+ if ($focusEl) {
2764
+ $focusEl.focus();
2765
+ setTimeout(() => {
2766
+ $focusEl.scrollIntoView({
2767
+ behavior: 'auto',
2768
+ block: 'center',
2769
+ inline: 'start',
2770
+ });
2771
+ }, 100);
2772
+ }
2773
+ }, [shrink]);
2774
+ React.useEffect(() => {
2775
+ setShrink(shrinkProps);
2776
+ }, [shrinkProps]);
2777
+ return (React__default["default"].createElement(StyledTextFieldContainer$1, Object.assign({ shrink: shrink, className: core.clsx(className, 'textField', { textField_shrink: !!shrink }) }, restProps),
2778
+ React__default["default"].createElement("div", { ref: containerRef, onClick: onClick, className: "textField_wrapper" }, children)));
2779
+ };
2780
+ const ChoiceField$1 = (props) => {
2781
+ const { children, className } = props, restProps = tslib_es6.__rest(props, ["children", "className"]);
2782
+ return (React__default["default"].createElement(StyledChoiceFieldContainer$1, Object.assign({ className: core.clsx(className, 'choiceField') }, restProps), children));
2783
+ };
2784
+
2785
+ const libraries = ['places'];
2786
+ const GoogleLocationBlock = (props) => {
2787
+ var _a;
2788
+ const { inputWrapperOrder = ['label', 'input', 'description', 'error'], defaultValue, value: valueProps, onChange: onChangeProps, locale } = props, restProps = tslib_es6.__rest(props, ["inputWrapperOrder", "defaultValue", "value", "onChange", "locale"]);
2789
+ const [LoadScript, setLoadScript] = React.useState(null);
2790
+ const [value, setValue] = React.useState(defaultValue || valueProps);
2791
+ const { predictions } = usePlacesAutocomplete.usePlacesAutocomplete(value, '', locale === 'tl-PH' ? 'en' : (_a = locale === null || locale === void 0 ? void 0 : locale.split('-')) === null || _a === void 0 ? void 0 : _a[0]);
2792
+ const onChangeAutocomplete = React.useCallback((s) => {
2793
+ setValue(s);
2794
+ onChangeProps === null || onChangeProps === void 0 ? void 0 : onChangeProps(s);
2795
+ }, []);
2796
+ const onClickItem = React.useCallback((item) => {
2797
+ /** For sure get value */
2798
+ setValue(item.value);
2799
+ const predCur = predictions === null || predictions === void 0 ? void 0 : predictions.find(({ description }) => description === item.value);
2800
+ onChangeProps === null || onChangeProps === void 0 ? void 0 : onChangeProps(item.value, predCur === null || predCur === void 0 ? void 0 : predCur.rawData);
2801
+ }, [onChangeProps, predictions]);
2802
+ React.useEffect(() => {
2803
+ setValue(valueProps);
2804
+ }, [valueProps]);
2805
+ React.useEffect(() => {
2806
+ var _a, _b, _c;
2807
+ // only load extra google script when not yet loaded
2808
+ if (!((_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.maps) === null || _b === void 0 ? void 0 : _b.places) === null || _c === void 0 ? void 0 : _c.AutocompleteService) && !LoadScript) {
2809
+ Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@react-google-maps/api')); }).then((m) => {
2810
+ setLoadScript(() => m.LoadScript);
2811
+ });
2812
+ }
2813
+ }, []);
2814
+ return (React__default["default"].createElement(core.Autocomplete, Object.assign({ defaultValue: defaultValue, value: value, onChange: onChangeAutocomplete, data: predictions.map((pred) => {
2815
+ return { value: pred.description, label: pred.description };
2816
+ }), filter: () => true, onItemSubmit: onClickItem, inputWrapperOrder: inputWrapperOrder, zIndex: index$6.ZINDEX_SSO - 9e6 + 2, withinPortal: true, styles: { dropdown: { pointerEvents: 'auto' } }, inputContainer: (children) => {
2817
+ return (React__default["default"].createElement(React__default["default"].Fragment, null,
2818
+ LoadScript && (React__default["default"].createElement(LoadScript, { googleMapsApiKey: usePlacesAutocomplete.GOOGLE_API_KEY, libraries: libraries, loadingElement: React__default["default"].createElement(React__default["default"].Fragment, null), style: { width: '100%' } })),
2819
+ children));
2820
+ } }, restProps)));
2821
+ };
2822
+
2823
+ const LeadGenForm = React.forwardRef((props, ref) => {
2824
+ const { locale, blocks, scrollToErrorField = true, form: formProps, rules: validate, initialValues, onFinish, onFinishFailed, className, style, } = props;
2825
+ const formRef = React.useRef(null);
2826
+ const form$1 = formProps || form.useForm({ initialValues, validate });
2827
+ const middlewareFinish = React.useCallback((values, event) => {
2828
+ /** Set `touched` all values for validation when submiting */
2829
+ form$1.setTouched(blocks.reduce((touched, { data }) => {
2830
+ touched[data.value] = true;
2831
+ return touched;
2832
+ }, {}));
2833
+ /** Wait for `touched` state and then submit */
2834
+ setTimeout(() => {
2835
+ const { hasErrors } = form$1.validate();
2836
+ if (hasErrors) {
2837
+ return;
2838
+ }
2839
+ onFinish === null || onFinish === void 0 ? void 0 : onFinish(formatLeadGenFormValue(values, blocks), event);
2840
+ }, 100);
2841
+ }, [form$1, blocks]);
2842
+ const middlewareFinishFailed = React.useCallback((errors, values, events) => {
2843
+ if (scrollToErrorField && errors) {
2844
+ const firstErrorKey = Object.keys(errors)[0];
2845
+ const firstErrorElement = document.querySelector(`[name="${firstErrorKey}"]`);
2846
+ if (firstErrorElement && (firstErrorElement === null || firstErrorElement === void 0 ? void 0 : firstErrorElement.focus)) {
2847
+ setTimeout(() => {
2848
+ firstErrorElement === null || firstErrorElement === void 0 ? void 0 : firstErrorElement.focus();
2849
+ firstErrorElement.scrollIntoView({
2850
+ behavior: 'auto',
2851
+ block: 'center',
2852
+ inline: 'center',
2853
+ });
2854
+ }, 100);
2855
+ }
2856
+ }
2857
+ onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed(errors, values, events);
2858
+ }, [scrollToErrorField]);
2859
+ React.useEffect(() => {
2860
+ (() => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
2861
+ if (!window.intlTelInputUtils) {
2862
+ yield require('intl-tel-input/build/js/utils');
2863
+ }
2864
+ }))();
2865
+ }, []);
2866
+ React.useImperativeHandle(ref, () => (Object.assign(Object.assign({}, form$1), { submit: () => {
2867
+ formRef.current.requestSubmit();
2868
+ } })), [form$1, formRef]);
2869
+ if (!blocks || !blocks.length) {
2870
+ return null;
2871
+ }
2872
+ return (React__default["default"].createElement("form", { ref: formRef, onSubmit: form$1.onSubmit(middlewareFinish, middlewareFinishFailed), className: className, style: style },
2873
+ React__default["default"].createElement(StyledLeadGenFormInner, { className: "leadgen-form_inputs" }, blocks.map((block, idx) => {
2874
+ const { id, name: blockName, data } = block;
2875
+ const { placeholder, value: name, required, listQuestion, valueHTML, isSendMailChimp = false, } = data;
2876
+ const formInputProps = form$1.getInputProps(name);
2877
+ const { value, error } = formInputProps;
2878
+ const reactKey = `${id}-${idx}`;
2879
+ switch (blockName) {
2880
+ case LEADGEN_BLOCK.TextBlock: {
2881
+ return (React__default["default"].createElement(TextField$1, { key: reactKey, shrink: !!value, className: "leadgen-form_input" },
2882
+ React__default["default"].createElement(core.TextInput, Object.assign({ name: name, spellCheck: false, withAsterisk: required, label: placeholder, placeholder: placeholder, inputWrapperOrder: LEADGEN_ORDER_INPUT_WRAPPER, type: "text", "data-control": "text" }, formInputProps))));
2883
+ }
2884
+ case LEADGEN_BLOCK.NumberBlock: {
2885
+ return (React__default["default"].createElement(TextField$1, { key: reactKey, shrink: !!value, className: "leadgen-form_input" },
2886
+ React__default["default"].createElement(core.NumberInput, Object.assign({ name: value, spellCheck: false, withAsterisk: required, label: placeholder, placeholder: placeholder, inputWrapperOrder: LEADGEN_ORDER_INPUT_WRAPPER, type: "number", "data-control": "number" }, formInputProps))));
2887
+ }
2888
+ case LEADGEN_BLOCK.EmailBlock: {
2889
+ return (React__default["default"].createElement(TextField$1, { key: reactKey, shrink: !!value, className: "leadgen-form_input" },
2890
+ React__default["default"].createElement(core.TextInput, Object.assign({ name: name, spellCheck: false, withAsterisk: required, label: placeholder, placeholder: placeholder, inputWrapperOrder: LEADGEN_ORDER_INPUT_WRAPPER, "data-control": "email" }, formInputProps))));
2891
+ }
2892
+ case LEADGEN_BLOCK.PhoneOtpBlock:
2893
+ case LEADGEN_BLOCK.WhatsappOtpBlock:
2894
+ case LEADGEN_BLOCK.ZaloOtpBlock:
2895
+ case LEADGEN_BLOCK.PhoneBlock: {
2896
+ return (React__default["default"].createElement(TextField$1, { key: reactKey, shrink: !!value, className: "leadgen-form_input" },
2897
+ React__default["default"].createElement(PhoneInput, Object.assign({ name: name, spellCheck: false, withAsterisk: required, label: placeholder, placeholder: placeholder, inputWrapperOrder: LEADGEN_ORDER_INPUT_WRAPPER, defaultCountry: (locale ? utils.MAPPED_LOCALE[locale] || 'VN' : 'VN'), type: "text", "data-control": "text" }, formInputProps))));
2898
+ }
2899
+ case LEADGEN_BLOCK.LocationBlock: {
2900
+ return (React__default["default"].createElement(TextField$1, { key: reactKey, shrink: !!value, className: "leadgen-form_input" },
2901
+ React__default["default"].createElement(GoogleLocationBlock, Object.assign({ name: name, withAsterisk: required, label: placeholder, placeholder: placeholder, inputWrapperOrder: LEADGEN_ORDER_INPUT_WRAPPER, locale: locale, "data-control": "text" }, formInputProps))));
2902
+ }
2903
+ case LEADGEN_BLOCK.DateBlock: {
2904
+ return (React__default["default"].createElement(TextField$1, { key: reactKey, shrink: !!value, className: "leadgen-form_input" },
2905
+ React__default["default"].createElement(dates.DateInput, Object.assign({ locale: (utils.MAPPED_LOCALE === null || utils.MAPPED_LOCALE === void 0 ? void 0 : utils.MAPPED_LOCALE[locale]) || utils.MAPPED_LOCALE['vi-VN'], valueFormat: "DD/MM/YYYY", name: name, withAsterisk: required, label: placeholder, placeholder: placeholder, inputWrapperOrder: LEADGEN_ORDER_INPUT_WRAPPER, type: "default", "data-control": "date" }, formInputProps))));
2906
+ }
2907
+ case LEADGEN_BLOCK.DropdownBlock:
2908
+ return (React__default["default"].createElement(TextField$1, { key: reactKey, shrink: !!value, className: "leadgen-form_input" },
2909
+ React__default["default"].createElement("div", { style: { display: 'none' }, "data-extra": true, "data-name": value, "data-control": 'dropdown' }),
2910
+ React__default["default"].createElement(core.Select, Object.assign({ name: name, withAsterisk: required, label: placeholder, placeholder: placeholder, data: listQuestion.map((l) => ({
2911
+ value: l.value,
2912
+ label: l.placeholder,
2913
+ })) }, formInputProps))));
2914
+ case LEADGEN_BLOCK.CheckboxBlock: {
2915
+ const formInputCheckboxProps = form$1.getInputProps(name, {
2916
+ type: 'checkbox',
2917
+ });
2918
+ return (React__default["default"].createElement(ChoiceField$1, { className: "leadgen-form_input leadgen-form_input_checkbox", key: reactKey },
2919
+ isSendMailChimp && (React__default["default"].createElement("div", { style: { display: 'none' }, "data-name": name + '-mailchimp' })),
2920
+ React__default["default"].createElement(core.Checkbox.Group, Object.assign({ size: "md", withAsterisk: required, label: placeholder, value: value, sx: {
2921
+ display: 'flex',
2922
+ flexDirection: 'column',
2923
+ flexWrap: 'wrap',
2924
+ gap: 8,
2925
+ }, inputWrapperOrder: LEADGEN_ORDER_INPUT_WRAPPER, inputContainer: (children) => {
2926
+ return (React__default["default"].createElement("div", { className: "leadgen-choiceContainer" }, children));
2927
+ } }, formInputCheckboxProps), listQuestion.map((l, _idx) => (React__default["default"].createElement(core.Checkbox, { name: name, key: _idx, value: l.value, label: l.placeholder, "data-control": "checkbox" }))))));
2928
+ }
2929
+ case LEADGEN_BLOCK.RadioBlock: {
2930
+ return (React__default["default"].createElement(ChoiceField$1, { className: "leadgen-form_input leadgen-form_input_checkbox", key: reactKey },
2931
+ isSendMailChimp && (React__default["default"].createElement("div", { style: { display: 'none' }, "data-name": name + '-mailchimp' })),
2932
+ React__default["default"].createElement(core.Radio.Group, Object.assign({ size: "md", withAsterisk: required, label: placeholder, value: value, spellCheck: true, inputWrapperOrder: LEADGEN_ORDER_INPUT_WRAPPER, inputContainer: (children) => {
2933
+ return (React__default["default"].createElement("div", { className: "leadgen-choiceContainer" }, children));
2934
+ } }, formInputProps), listQuestion.map((l, _index) => (React__default["default"].createElement(core.Radio, { name: name, key: _index, value: l.value, label: l.placeholder, "data-control": "radio" }))))));
2935
+ }
2936
+ case LEADGEN_BLOCK.TncBlock:
2937
+ return (React__default["default"].createElement(ChoiceField$1, { className: "leadgen-form_input leadgen-form_input_checkbox", key: reactKey },
2938
+ React__default["default"].createElement(core.Input.Wrapper, { error: error },
2939
+ React__default["default"].createElement(core.Checkbox, Object.assign({ value: value, name: 'TNC-' + id, label: React__default["default"].createElement("p", { className: "lead-modal__tnc-link", dangerouslySetInnerHTML: { __html: valueHTML } }), className: "tnc-block", "data-control": "checkbox" }, formInputProps)))));
2940
+ default: {
2941
+ return null;
2942
+ }
2943
+ }
2944
+ }))));
2945
+ });
2946
+
2947
+ const LEADGEN_ORDER_INPUT_WRAPPER = ['label', 'input', 'description', 'error'];
2948
+
2949
+ const LeadGenSubscriptionBoxA = (props) => {
2950
+ const { loading, image, title, submitText, locale, blocks, form, rules, onFinish, } = props;
2951
+ const formRef = React.useRef();
2952
+ const imageComp = React.useMemo(() => {
2953
+ if (!image) {
2954
+ return null;
2955
+ }
2956
+ return (React__default["default"].createElement(StyledLeadGenSubscriptionBoxHeaderImage, null,
2957
+ React__default["default"].createElement("img", { src: image, alt: "" })));
2958
+ }, [image]);
2959
+ const titleComp = React.useMemo(() => {
2960
+ if (typeof title === 'string') {
2961
+ return (React__default["default"].createElement("p", { className: "leadgen-title", dangerouslySetInnerHTML: { __html: title } }));
2962
+ }
2963
+ return React__default["default"].createElement("p", { className: "leadgen-title" }, title);
2964
+ }, [title]);
2965
+ return (React__default["default"].createElement(StyledLeadGenSubscriptionBoxA, { className: "subcription_box_A" },
2966
+ React__default["default"].createElement(StyledLeadGenSubscriptionBoxHeader, { className: "leadgen-subscription_box_header" },
2967
+ imageComp,
2968
+ titleComp),
2969
+ React__default["default"].createElement(StyledLeadGenSubscriptionBoxBody, { className: "leadgen-subscription_box_body" },
2970
+ React__default["default"].createElement(LeadGenForm, { ref: formRef, form: form, rules: rules, blocks: blocks, locale: locale, onFinish: onFinish, className: "leadgen-subscription_box_form" }),
2971
+ React__default["default"].createElement(core.Button, { disabled: loading, loading: loading, variant: "filled", size: "lg", onClick: () => {
2972
+ formRef.current.submit();
2973
+ }, className: "leadgen-btn leadgen-btn_action", fullWidth: true }, submitText))));
2974
+ };
2975
+
2976
+ const LeadGenSubscriptionBoxWithoutMemo = ({ locale, userInfo, forceCampaign, categoryId, }) => {
2977
+ var _a, _b, _c;
2978
+ const { image, extra_fields, id: campaign_id, bot_id: campaign_subot_id = [], ThankYouBlock, } = forceCampaign || {};
2979
+ const { textBlocks, listBlockAdded, actionBlocks } = extra_fields || {};
2980
+ const { submitBlock } = actionBlocks || {};
2981
+ const { apiLeadUrl, subscriptionIcon, subscriptionTitle, submitSubscriptionBox, impression, onFinish, } = useLeadGenContext();
2982
+ const { t } = index.useTranslations();
2983
+ const { action: { pushNotifications }, } = React.useContext(togetherComponentGlobalContext.TogetherComponentGlobalContext);
2984
+ const refContainer = React.useRef(null);
2985
+ const [loading, setLoading] = React.useState(false);
2986
+ const [showThankyou, setShowThankyou] = React.useState(false);
2987
+ const validatingEmailRef = React.useRef(false);
2988
+ const validatingPhoneRef = React.useRef(false);
2989
+ const { form, validateObj } = useLeadFormConfig({
2990
+ listBlockAdded,
2991
+ campaignId: campaign_id,
2992
+ campaign_subot_id,
2993
+ validatingEmailRef,
2994
+ validatingPhoneRef,
2995
+ userInfo,
2996
+ });
2997
+ const subscription_title = React.useMemo(() => {
2998
+ var _a, _b;
2999
+ return subscriptionTitle ||
3000
+ ((_b = (_a = textBlocks === null || textBlocks === void 0 ? void 0 : textBlocks.titleBlock) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.value) ||
3001
+ t('leadgen.message.title.default');
3002
+ }, [subscriptionTitle, (_b = (_a = textBlocks === null || textBlocks === void 0 ? void 0 : textBlocks.titleBlock) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.value]);
3003
+ const { image: thankyouImage, title: thankyouTitle, description: thankyouDescription, button: thankyouButton, } = ThankYouBlock || {};
3004
+ const intersectionObserverCallback = React.useCallback((entries) => {
3005
+ entries.forEach((entry) => {
3006
+ const { isIntersecting, target } = entry;
3007
+ if (!showThankyou &&
3008
+ isIntersecting &&
3009
+ target === refContainer.current) {
3010
+ impression();
3011
+ }
3012
+ });
3013
+ }, [impression, showThankyou]);
3014
+ const IObserver = new IntersectionObserver(intersectionObserverCallback);
3015
+ const middlewareOnSubmit = React.useCallback((values) => tslib_es6.__awaiter(void 0, void 0, void 0, function* () {
3016
+ const newValues = {
3017
+ subscription_title,
3018
+ };
3019
+ const ssoValues = {
3020
+ sso_user_id: undefined,
3021
+ sso_uuid: undefined,
3022
+ sso_verified_profile: undefined,
3023
+ };
3024
+ const valueKeys = Object.keys(values);
3025
+ for (const key of valueKeys) {
3026
+ const isPhoneField = leadGenFieldNamePhone(listBlockAdded).some((k) => k === key);
3027
+ if (isPhoneField) {
3028
+ const phone = PhoneInputBase.parsePhoneNumber(values[key]);
3029
+ if (phone.isValid()) {
3030
+ /** Seperate `area_code` and `phone_number` for BE */
3031
+ newValues['area_code'] = `+${phone.countryCallingCode}`;
3032
+ newValues['phone_number'] = phone.nationalNumber;
3033
+ /** Only case login has this update */
3034
+ if ((userInfo === null || userInfo === void 0 ? void 0 : userInfo.id) && (userInfo === null || userInfo === void 0 ? void 0 : userInfo.uid)) {
3035
+ ssoValues['sso_verified_profile'] =
3036
+ phone.number === (userInfo === null || userInfo === void 0 ? void 0 : userInfo.phone) ? 1 : 0;
3037
+ ssoValues['sso_user_id'] = userInfo === null || userInfo === void 0 ? void 0 : userInfo.id;
3038
+ ssoValues['sso_uuid'] = userInfo === null || userInfo === void 0 ? void 0 : userInfo.uid;
3039
+ }
3040
+ }
3041
+ continue;
3042
+ }
3043
+ newValues[key] = values[key];
3044
+ }
3045
+ setLoading(true);
3046
+ try {
3047
+ const { _data } = (yield submitSubscriptionBox(Object.assign(Object.assign({}, newValues), ssoValues))) || {};
3048
+ const { model } = _data || {};
3049
+ if (model && (model === null || model === void 0 ? void 0 : model.id)) {
3050
+ setShowThankyou(true);
3051
+ onFinish === null || onFinish === void 0 ? void 0 : onFinish(Object.assign(Object.assign({}, newValues), ssoValues), listBlockAdded || []);
3052
+ }
3053
+ }
3054
+ catch (error) {
3055
+ LeadLog('** LeadGen SubscriptionBox error : ', error);
3056
+ pushNotifications({
3057
+ message: t('leadgen.message.error.default'),
3058
+ type: 'danger',
3059
+ });
3060
+ }
3061
+ setLoading(false);
3062
+ }), [
3063
+ subscription_title,
3064
+ listBlockAdded,
3065
+ userInfo === null || userInfo === void 0 ? void 0 : userInfo.id,
3066
+ userInfo === null || userInfo === void 0 ? void 0 : userInfo.uid,
3067
+ userInfo === null || userInfo === void 0 ? void 0 : userInfo.phone,
3068
+ ]);
3069
+ React.useEffect(() => {
3070
+ if (refContainer.current) {
3071
+ IObserver.observe(refContainer.current);
3072
+ }
3073
+ return () => {
3074
+ IObserver.disconnect();
3075
+ };
3076
+ }, [categoryId]);
3077
+ return (React__default["default"].createElement("div", { ref: refContainer },
3078
+ React__default["default"].createElement(StyledLeadGenSubscriptionBox, null,
3079
+ showThankyou && (React__default["default"].createElement(LeadGenThankYou, { image: Object.assign(Object.assign({}, thankyouImage), { src: thankyouImage.src || `${apiLeadUrl}admin/img/thanksyou.png` }), title: thankyouTitle, description: thankyouDescription, button: thankyouButton })),
3080
+ !showThankyou && (React__default["default"].createElement(LeadGenSubscriptionBoxA, { loading: loading, image: subscriptionIcon || image, title: subscription_title, submitText: (_c = submitBlock === null || submitBlock === void 0 ? void 0 : submitBlock.data) === null || _c === void 0 ? void 0 : _c.value, blocks: listBlockAdded, locale: locale, form: form, rules: validateObj, onFinish: middlewareOnSubmit })))));
3081
+ };
3082
+ const LeadGenSubscriptionBox$1 = React.memo(LeadGenSubscriptionBoxWithoutMemo);
3083
+
3084
+ const Container = () => {
3085
+ const context = React.useContext(LeadGenContext);
3086
+ const { campaign_code, locale, siteId, siteDomain, userInfo, forceCampaign } = context;
3087
+ if (!forceCampaign || !(forceCampaign === null || forceCampaign === void 0 ? void 0 : forceCampaign.id)) {
3088
+ return null;
3089
+ }
3090
+ return (React__default["default"].createElement(LeadGenSubscriptionBox$1, { locale: locale, siteId: siteId, siteDomain: siteDomain, userInfo: userInfo, forceCampaign: forceCampaign, campaign_code: campaign_code }));
3091
+ };
3092
+ Container.displayName = 'LeadGenSubscriptionBox';
3093
+ const LeadGenSubscriptionBoxContainer = (props) => {
3094
+ const { apiUrl, apiSubotUrl } = props;
3095
+ return (React__default["default"].createElement(LeadGenContextProvider, Object.assign({}, props, { apiLeadUrl: apiUrl, apiSubotUrl: apiSubotUrl }),
3096
+ React__default["default"].createElement(Container, null)));
3097
+ };
3098
+ const LeadGenSubscriptionBox = LeadGenSubscriptionBoxContainer;
3099
+
3100
+ const useImageSize = (src) => {
3101
+ const [width, setWidth] = React.useState(16);
3102
+ const [height, setHeight] = React.useState(9);
3103
+ const [loaded, setLoaded] = React.useState(false);
3104
+ // load src image to get its width and height
3105
+ React.useEffect(() => {
3106
+ setLoaded(false);
3107
+ if (src) {
3108
+ const img = new Image();
3109
+ img.addEventListener('load', () => {
3110
+ setWidth(img.naturalWidth);
3111
+ setHeight(img.naturalHeight);
3112
+ setLoaded(true);
3113
+ });
3114
+ img.addEventListener('error', () => {
3115
+ setWidth(16);
3116
+ setHeight(9);
3117
+ setLoaded(true);
3118
+ });
3119
+ img.src = src;
3120
+ }
3121
+ else {
3122
+ setWidth(16);
3123
+ setHeight(9);
3124
+ setLoaded(true);
3125
+ }
3126
+ }, [src]);
3127
+ return {
3128
+ loaded,
3129
+ width,
3130
+ height,
3131
+ };
3132
+ };
3133
+
3134
+ const CloseButton = ({ onClose, containerClassName, svgClassName, }) => (React__default["default"].createElement("button", { onClick: onClose, className: `le-newbuilder-close-button js-modal__close ${containerClassName || ''}` },
3135
+ React__default["default"].createElement("svg", { width: "1em", height: "1em", viewBox: "0 0 20 20", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", className: svgClassName },
3136
+ React__default["default"].createElement("path", { d: "M9.99981 10.8432L14.0583 14.9017C14.1691 15.0125 14.3083 15.0691 14.476 15.0717C14.6437 15.0743 14.7854 15.0176 14.9013 14.9017C15.0172 14.7858 15.0752 14.6453 15.0752 14.4802C15.0752 14.3151 15.0172 14.1746 14.9013 14.0587L10.8429 10.0002L14.9013 5.9417C15.0121 5.83094 15.0688 5.69172 15.0713 5.52402C15.0739 5.35634 15.0172 5.21456 14.9013 5.09866C14.7854 4.98276 14.6449 4.9248 14.4798 4.9248C14.3147 4.9248 14.1742 4.98276 14.0583 5.09866L9.99981 9.15712L5.94133 5.09866C5.83057 4.98789 5.69135 4.93122 5.52365 4.92866C5.35598 4.92609 5.21419 4.98276 5.09829 5.09866C4.98239 5.21456 4.92444 5.35506 4.92444 5.52018C4.92444 5.6853 4.98239 5.82581 5.09829 5.9417L9.15675 10.0002L5.09829 14.0587C4.98752 14.1694 4.93085 14.3087 4.9283 14.4763C4.92572 14.644 4.98239 14.7858 5.09829 14.9017C5.21419 15.0176 5.3547 15.0756 5.51982 15.0756C5.68493 15.0756 5.82544 15.0176 5.94133 14.9017L9.99981 10.8432Z" }))));
3137
+
3138
+ // url: imageBlocks.imageMobile.data.url
3139
+ // newTab: imageBlocks.imageMobile.data.newtab
3140
+ // imageMobile: campaignShow.image
3141
+ // imageDestkop: campaignShow.image_desktop
3142
+ const CenterTabLayout = ({ popupId, url, newTab, imageDestkop, imageMobile, onClose, onOtherSubmit, }) => {
3143
+ const { width: imageMobileWidth, height: imageMobileHeight, loaded: imageMobileLoaded, } = useImageSize(imageMobile);
3144
+ const { width: imageDestkopWidth, height: imageDestkopHeight, loaded: imageDestkopLoaded, } = useImageSize(imageDestkop);
3145
+ if (!imageMobileLoaded || !imageDestkopLoaded)
3146
+ return null;
3147
+ return (React__default["default"].createElement("div", { id: popupId, className: "lead-modal-wrapper", "data-popup-url": location.pathname, "data-popup-type": "center_tab" },
3148
+ React__default["default"].createElement("div", { className: "le-center-tab-popup" },
3149
+ React__default["default"].createElement("div", { style: { position: 'relative' } },
3150
+ React__default["default"].createElement("a", { className: "js-popup-other-submit", href: url, target: newTab ? 'blank' : '_parent', onClick: onOtherSubmit },
3151
+ index$7.isVideo(imageMobile) ? (React__default["default"].createElement("video", { loop: true, muted: true, autoPlay: true, className: "le-only-mobile" },
3152
+ React__default["default"].createElement("source", { src: imageMobile }))) : (React__default["default"].createElement("img", { className: "le-only-mobile", src: imageMobile, style: {
3153
+ aspectRatio: `${imageMobileWidth}/${imageMobileHeight}`,
3154
+ } })),
3155
+ index$7.isVideo(imageDestkop) ? (React__default["default"].createElement("video", { loop: true, muted: true, autoPlay: true, className: "le-only-desktop" },
3156
+ React__default["default"].createElement("source", { src: imageDestkop }))) : (React__default["default"].createElement("img", { className: "le-only-desktop", src: imageDestkop, style: {
3157
+ aspectRatio: `${imageDestkopWidth}/${imageDestkopHeight}`,
3158
+ } }))),
3159
+ React__default["default"].createElement(CloseButton, { onClose: onClose, containerClassName: "close-button-top-right" })))));
3160
+ };
3161
+
3162
+ // title: titleText
3163
+ // titleAlign: textBlocks.titleBlock.data.align
3164
+ // subtitle: textBlocks.subtitleBlock.data.value
3165
+ // subtitleAlign: textBlocks.subtitleBlock.data.align
3166
+ // url: actionBlocks.linkButtonBlock.data.url
3167
+ // urlText: actionBlocks.linkButtonBlock.data.value
3168
+ // newTab: actionBlocks.linkButtonBlock.data.newtab
3169
+ // imageMobile: campaignShow.image
3170
+ // imageDesktop: campaignShow.image_desktop
3171
+ const FloatingLayout = ({ popupId, url, title, urlText, titleAlign, subtitle, subtitleAlign, newTab, imageDesktop, imageMobile, onClose, onOtherSubmit, }) => {
3172
+ const { width: imageMobileWidth, height: imageMobileHeight, loaded: imageMobileLoaded, } = useImageSize(imageMobile);
3173
+ const { width: imageDesktopWidth, height: imageDesktopHeight, loaded: imageDesktopLoaded, } = useImageSize(imageDesktop);
3174
+ if (!imageMobileLoaded || !imageDesktopLoaded)
3175
+ return null;
3176
+ return (React__default["default"].createElement("div", { id: popupId, className: "lead-modal-wrapper lead-floating-wrapper", "data-popup-url": location.pathname, "data-popup-type": "floating" },
3177
+ React__default["default"].createElement("aside", { className: "le-only-desktop" },
3178
+ React__default["default"].createElement("div", { className: "le-floating-desktop" },
3179
+ React__default["default"].createElement("div", { className: "le-floating-desktop-wrap", style: { position: 'relative', background: '#fff' } },
3180
+ imageDesktop ? (React__default["default"].createElement("div", null,
3181
+ React__default["default"].createElement("img", { style: {
3182
+ maxWidth: 120,
3183
+ borderTopLeftRadius: 5,
3184
+ borderBottomLeftRadius: 5,
3185
+ aspectRatio: `${imageDesktopWidth}/${imageDesktopHeight}`,
3186
+ }, src: imageDesktop }))) : null,
3187
+ React__default["default"].createElement("div", { style: { padding: 20 } },
3188
+ React__default["default"].createElement("div", { className: `le-floating-desktop-title le-text-align-${titleAlign}` }, title),
3189
+ React__default["default"].createElement("div", { className: `le-floating-desktop-desc le-text-align-${subtitleAlign}` }, subtitle)),
3190
+ React__default["default"].createElement("a", { target: newTab ? 'blank' : '_parent', style: { marginLeft: 35, textDecoration: 'none' }, href: url },
3191
+ React__default["default"].createElement("button", { className: "le-joinbow-floating-btn js-popup-other-submit", onClick: onOtherSubmit }, urlText)),
3192
+ React__default["default"].createElement(CloseButton, { onClose: onClose, containerClassName: "close-button-top-right" })))),
3193
+ React__default["default"].createElement("aside", { className: "le-only-mobile" },
3194
+ React__default["default"].createElement("div", { className: "le-floating-mobile" },
3195
+ React__default["default"].createElement("div", { className: "le-floating-mobile-wrap", style: { position: 'relative', background: '#fff' } },
3196
+ React__default["default"].createElement("aside", { style: { display: 'flex', justifyContent: 'space-between' } },
3197
+ React__default["default"].createElement("div", null,
3198
+ React__default["default"].createElement("div", { className: `le-floating-mobile-title le-text-align-${titleAlign}` }, title),
3199
+ React__default["default"].createElement("div", { className: `le-floating-mobile-desc le-text-align-${subtitleAlign}` }, subtitle)),
3200
+ imageMobile ? (React__default["default"].createElement("div", null,
3201
+ React__default["default"].createElement("img", { style: {
3202
+ marginLeft: 15,
3203
+ marginTop: 4,
3204
+ maxWidth: 100,
3205
+ aspectRatio: `${imageMobileWidth}/${imageMobileHeight}`,
3206
+ }, src: imageMobile }))) : null),
3207
+ React__default["default"].createElement("div", { style: { textAlign: 'center', marginTop: 10 } },
3208
+ React__default["default"].createElement("a", { target: newTab ? 'blank' : '_parent', href: url, style: { textDecoration: 'none' } },
3209
+ React__default["default"].createElement("button", { className: "le-joinbow-floating-btn js-popup-other-submit", onClick: onOtherSubmit }, urlText))),
3210
+ React__default["default"].createElement(CloseButton, { onClose: onClose, containerClassName: "close-button-top-right" }))))));
3211
+ };
3212
+
3213
+ const ThankyouPopup = ({ title, titleAlign, subtitle, subtitleAlign, link, linkNewTab, linkText, image, }) => {
3214
+ const { primaryColor } = React.useContext(LeadGenContext$1);
3215
+ const { width: imageWidth, height: imageHeight, loaded: imageLoaded, } = useImageSize(image);
3216
+ if (!imageLoaded)
3217
+ return null;
3218
+ return (React__default["default"].createElement("div", { className: "lead-modal__thank-you leadgen-inner_thankyou" },
3219
+ React__default["default"].createElement("div", { style: { width: '100%' } },
3220
+ React__default["default"].createElement("img", { src: image, style: {
3221
+ maxHeight: 162,
3222
+ objectFit: 'cover',
3223
+ aspectRatio: `${imageWidth}/${imageHeight}`,
3224
+ }, loading: "lazy" }),
3225
+ title && (React__default["default"].createElement("h1", { className: `le-thankyou-title le-text-align-${titleAlign}` }, title)),
3226
+ subtitle && (React__default["default"].createElement("p", { className: `le-thankyou-subtitle le-text-align-${subtitleAlign}` }, subtitle.split('\n').map((text, idx, list) => {
3227
+ const isShowBr = idx < list.length - 1;
3228
+ return (React__default["default"].createElement(React__default["default"].Fragment, null,
3229
+ text,
3230
+ isShowBr && React__default["default"].createElement("br", null)));
3231
+ }))),
3232
+ linkText && (React__default["default"].createElement("div", null,
3233
+ React__default["default"].createElement("a", { href: link, target: linkNewTab ? '_blank' : 'parrent', rel: "noreferrer" },
3234
+ React__default["default"].createElement(index$3.Button, { className: `lead-modal__btn ${LEAD_CLASS}`, color: primaryColor }, linkText)))))));
3235
+ };
3236
+
3237
+ const InlineLayout = ({ content, inlinePosition, }) => {
3238
+ const target = React.useMemo(() => {
3239
+ if (!inlinePosition)
3240
+ return null;
3241
+ const parents = document.querySelectorAll(`[data-url="${location.pathname}"] .body-content`);
3242
+ const allChildren = Array.from(parents).reduce((r, p) => {
3243
+ return [...r, ...Array.from(p.children)];
3244
+ }, []);
3245
+ if (allChildren === null || allChildren === void 0 ? void 0 : allChildren.length) {
3246
+ // find the third p tag in the body content, some other tags might mix in between
3247
+ const allPTags = allChildren.filter((c) => c.nodeName === 'P');
3248
+ const allH2Tags = allChildren.filter((c) => c.nodeName === 'H2');
3249
+ let target = null;
1519
3250
  switch (inlinePosition) {
1520
3251
  case '1th':
1521
3252
  target = allPTags[0];
@@ -1641,216 +3372,11 @@ const EmptyComponent = ({ onClose, onContinue, }) => {
1641
3372
  return (React__default["default"].createElement("div", { className: "leadgen-empty" },
1642
3373
  React__default["default"].createElement("div", { className: "leadgen-empty_body" },
1643
3374
  React__default["default"].createElement("div", { className: "leadgen-empty_wrapper" },
1644
- React__default["default"].createElement(EmptyIcon, { className: "leadgen-empty_image" }),
1645
- React__default["default"].createElement("h5", { className: "leadgen-empty_title" }, t('lead.empty.title')))),
1646
- React__default["default"].createElement("div", { className: "leadgen-empty_footer" },
1647
- React__default["default"].createElement(core.Button, { onClick: onClose, size: "lg", variant: "default", fullWidth: false, className: "leadgen-btn leadgen-btn_empty_cancel" }, t('lead.empty.cancel')),
1648
- React__default["default"].createElement(core.Button, { onClick: onContinue, size: "lg", variant: "filled", fullWidth: false, className: "leadgen-btn leadgen-btn_empty_again" }, t('lead.empty.submitAgain')))));
1649
- };
1650
-
1651
- const libraries = ['places'];
1652
- const GoogleLocationBlock = (props) => {
1653
- var _a;
1654
- const { inputWrapperOrder = ['label', 'input', 'description', 'error'], defaultValue, value: valueProps, onChange: onChangeProps, locale } = props, restProps = tslib_es6.__rest(props, ["inputWrapperOrder", "defaultValue", "value", "onChange", "locale"]);
1655
- const [LoadScript, setLoadScript] = React.useState(null);
1656
- const [value, setValue] = React.useState(defaultValue || valueProps);
1657
- const { predictions } = usePlacesAutocomplete.usePlacesAutocomplete(value, '', locale === 'tl-PH' ? 'en' : (_a = locale === null || locale === void 0 ? void 0 : locale.split('-')) === null || _a === void 0 ? void 0 : _a[0]);
1658
- const onChangeAutocomplete = React.useCallback((s) => {
1659
- setValue(s);
1660
- onChangeProps === null || onChangeProps === void 0 ? void 0 : onChangeProps(s);
1661
- }, []);
1662
- const onClickItem = React.useCallback((item) => {
1663
- /** For sure get value */
1664
- setValue(item.value);
1665
- const predCur = predictions === null || predictions === void 0 ? void 0 : predictions.find(({ description }) => description === item.value);
1666
- onChangeProps === null || onChangeProps === void 0 ? void 0 : onChangeProps(item.value, predCur === null || predCur === void 0 ? void 0 : predCur.rawData);
1667
- }, [onChangeProps, predictions]);
1668
- React.useEffect(() => {
1669
- setValue(valueProps);
1670
- }, [valueProps]);
1671
- React.useEffect(() => {
1672
- var _a, _b, _c;
1673
- // only load extra google script when not yet loaded
1674
- if (!((_c = (_b = (_a = window === null || window === void 0 ? void 0 : window.google) === null || _a === void 0 ? void 0 : _a.maps) === null || _b === void 0 ? void 0 : _b.places) === null || _c === void 0 ? void 0 : _c.AutocompleteService) && !LoadScript) {
1675
- Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('@react-google-maps/api')); }).then((m) => {
1676
- setLoadScript(() => m.LoadScript);
1677
- });
1678
- }
1679
- }, []);
1680
- return (React__default["default"].createElement(core.Autocomplete, Object.assign({ defaultValue: defaultValue, value: value, onChange: onChangeAutocomplete, data: predictions.map((pred) => {
1681
- return { value: pred.description, label: pred.description };
1682
- }), filter: () => true, onItemSubmit: onClickItem, inputWrapperOrder: inputWrapperOrder, zIndex: index$7.ZINDEX_SSO - 9e6 + 2, withinPortal: true, styles: { dropdown: { pointerEvents: 'auto' } }, inputContainer: (children) => {
1683
- return (React__default["default"].createElement(React__default["default"].Fragment, null,
1684
- LoadScript && (React__default["default"].createElement(LoadScript, { googleMapsApiKey: usePlacesAutocomplete.GOOGLE_API_KEY, libraries: libraries, loadingElement: React__default["default"].createElement(React__default["default"].Fragment, null), style: { width: '100%' } })),
1685
- children));
1686
- } }, restProps)));
1687
- };
1688
-
1689
- // You can give context variables any name
1690
- const [LeadFormProvider, useLeadFormContext, useLeadForm] = form.createFormContext();
1691
- const useLeadFormConfig = ({ listBlockAdded = [], validatingPhoneRef, validatingEmailRef, campaignId, campaign_subot_id = [], userInfo, }) => {
1692
- const { t } = index.useTranslations();
1693
- const initialValues = React.useMemo(() => mappingSSOToLead(userInfo), [userInfo === null || userInfo === void 0 ? void 0 : userInfo.id]);
1694
- const validateObj = React.useMemo(() => {
1695
- const InputBlocks = [
1696
- 'TextBlock',
1697
- 'NumberBlock',
1698
- 'EmailBlock',
1699
- 'PhoneBlock',
1700
- 'DateBlock',
1701
- 'CheckboxBlock',
1702
- 'RadioBlock',
1703
- 'DropdownBlock',
1704
- 'PhoneOtpBlock',
1705
- 'WhatsappOtpBlock',
1706
- 'ZaloOtpBlock',
1707
- 'LocationBlock',
1708
- 'TncBlock',
1709
- ];
1710
- // ALL are required and can skip if not touched yet
1711
- const withSharedCheck = (name, cb,
1712
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
1713
- block) => {
1714
- return (value) => {
1715
- var _a;
1716
- const isBLockRequired = (_a = block === null || block === void 0 ? void 0 : block.data) === null || _a === void 0 ? void 0 : _a.required;
1717
- if (!formRef.current.isTouched(name))
1718
- return;
1719
- if ((typeof value === 'string' && value.replace(' ', '') === '') ||
1720
- typeof value === 'undefined' ||
1721
- value === '' ||
1722
- (Array.isArray(value) && value.length === 0)) {
1723
- return isBLockRequired
1724
- ? t('validator.required')
1725
- : cb === null || cb === void 0 ? void 0 : cb(value);
1726
- }
1727
- return cb === null || cb === void 0 ? void 0 : cb(value);
1728
- };
1729
- };
1730
- return listBlockAdded
1731
- .filter((b) => InputBlocks.includes(b.name))
1732
- .reduce((r, b) => {
1733
- var _a;
1734
- const isRequired = (_a = b.data.required) !== null && _a !== void 0 ? _a : true;
1735
- if (b.name === 'NumberBlock') {
1736
- return Object.assign(Object.assign({}, r), { [b.data.value]: withSharedCheck(b.data.value, (value) => {
1737
- if (value && isNaN(Number(value))) {
1738
- return t('validator.number');
1739
- }
1740
- }, b) });
1741
- }
1742
- else if (b.name === 'EmailBlock') {
1743
- return Object.assign(Object.assign({}, r), { [b.data.value]: withSharedCheck(b.data.value, (value) => {
1744
- if (value && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
1745
- return t('validator.email');
1746
- }
1747
- if (!value)
1748
- return;
1749
- validatingEmailRef.current = true;
1750
- setTimeout(() => {
1751
- formRef.current.setFieldError(b.data.value, 'Validating...');
1752
- checkUsedEmailOrPhoneWithCache(campaignId, campaign_subot_id, {
1753
- email: value,
1754
- })
1755
- .then((tKey) => {
1756
- if (tKey) {
1757
- formRef.current.setFieldError(b.data.value, t(tKey));
1758
- }
1759
- else {
1760
- formRef.current.clearFieldError(b.data.value);
1761
- }
1762
- validatingEmailRef.current = false;
1763
- })
1764
- .catch((e) => {
1765
- console.error(e);
1766
- formRef.current.setFieldError(b.data.value, e.message || 'Something went wrong');
1767
- validatingEmailRef.current = false;
1768
- });
1769
- }, 200);
1770
- }, b) });
1771
- }
1772
- else if (b.name === 'PhoneBlock' ||
1773
- b.name === 'PhoneOtpBlock' ||
1774
- b.name === 'ZaloOtpBlock' ||
1775
- b.name === 'WhatsappOtpBlock') {
1776
- return Object.assign(Object.assign({}, r), { [b.data.value]: withSharedCheck(b.data.value, (value) => {
1777
- if (value &&
1778
- window.intlTelInputUtils &&
1779
- !window.intlTelInputUtils.isValidNumber(String(value), LEAD_LOCALE.countryCode)) {
1780
- return t('validator.phone');
1781
- }
1782
- if (!value)
1783
- return;
1784
- validatingPhoneRef.current = true;
1785
- setTimeout(() => {
1786
- formRef.current.setFieldError(b.data.value, 'Validating...');
1787
- if (b.data.singleSubmission) {
1788
- checkUsedPhoneOnlyWithCache(campaignId, value)
1789
- .then((tKey) => {
1790
- if (tKey) {
1791
- formRef.current.setFieldError(b.data.value, t(tKey));
1792
- }
1793
- else {
1794
- formRef.current.clearFieldError(b.data.value);
1795
- }
1796
- validatingPhoneRef.current = false;
1797
- })
1798
- .catch((err) => {
1799
- console.error(err);
1800
- formRef.current.setFieldError(b.data.value, err.message || 'Something went wrong');
1801
- validatingPhoneRef.current = false;
1802
- });
1803
- }
1804
- else {
1805
- checkUsedEmailOrPhoneWithCache(campaignId, campaign_subot_id, {
1806
- phone: value,
1807
- })
1808
- .then((tKey) => {
1809
- if (tKey) {
1810
- formRef.current.setFieldError(b.data.value, t(tKey));
1811
- }
1812
- else {
1813
- formRef.current.clearFieldError(b.data.value);
1814
- }
1815
- validatingPhoneRef.current = false;
1816
- })
1817
- .catch((e) => {
1818
- console.error(e);
1819
- formRef.current.setFieldError(b.data.value, e.message || 'Something went wrong');
1820
- validatingPhoneRef.current = false;
1821
- });
1822
- }
1823
- }, 200);
1824
- }, b) });
1825
- }
1826
- else if (b.name === 'DateBlock') {
1827
- return Object.assign(Object.assign({}, r), { [b.data.value]: withSharedCheck(b.data.value, (value) => {
1828
- if (value && isNaN(Date.parse(value))) {
1829
- return t('validator.date');
1830
- }
1831
- }, b) });
1832
- }
1833
- else if (b.name === 'TncBlock') {
1834
- return Object.assign(Object.assign({}, r), { [`TNC-` + b.id]: withSharedCheck('TNC-' + b.id, (value) => {
1835
- if (isRequired && !value) {
1836
- return t('validator.required');
1837
- }
1838
- }, b) });
1839
- }
1840
- else {
1841
- return Object.assign(Object.assign({}, r), { [b.data.value]: withSharedCheck(b.data.value, undefined, b) });
1842
- }
1843
- }, {});
1844
- }, [listBlockAdded.map((b) => b.name).join(',')]);
1845
- const form = useLeadForm({
1846
- validateInputOnChange: true,
1847
- clearInputErrorOnChange: true,
1848
- validate: validateObj,
1849
- initialValues,
1850
- });
1851
- const formRef = React.useRef(form);
1852
- formRef.current = form;
1853
- return { form, validateObj };
3375
+ React__default["default"].createElement(EmptyIcon, { className: "leadgen-empty_image" }),
3376
+ React__default["default"].createElement("h5", { className: "leadgen-empty_title" }, t('lead.empty.title')))),
3377
+ React__default["default"].createElement("div", { className: "leadgen-empty_footer" },
3378
+ React__default["default"].createElement(core.Button, { onClick: onClose, size: "lg", variant: "default", fullWidth: false, className: "leadgen-btn leadgen-btn_empty_cancel" }, t('lead.empty.cancel')),
3379
+ React__default["default"].createElement(core.Button, { onClick: onContinue, size: "lg", variant: "filled", fullWidth: false, className: "leadgen-btn leadgen-btn_empty_again" }, t('lead.empty.submitAgain')))));
1854
3380
  };
1855
3381
 
1856
3382
  const SubtitleBlock = ({ children, align, }) => (React__default["default"].createElement("p", { className: `lead-modal__description ${'le-text-align-' + (align || '')} ${LEAD_CLASS}` }, children));
@@ -2023,6 +3549,14 @@ const StyledTextFieldContainer = styled__default["default"].div `
2023
3549
  }
2024
3550
  }
2025
3551
 
3552
+ &:focus-within {
3553
+ .mantine-Input-wrapper {
3554
+ transition: 0.25s linear border;
3555
+ border-color: ${miscTheme.theme.colors.primary600};
3556
+ box-shadow: 0 0 4px ${miscTheme.theme.colors.primary200};
3557
+ }
3558
+ }
3559
+
2026
3560
  .PhoneInput {
2027
3561
  --phone-select: 75px;
2028
3562
  --phone-input-space-x: 8px;
@@ -2171,11 +3705,13 @@ const TextField = (props) => {
2171
3705
  const $focusEl = $textEl.item($textEl.length - 1);
2172
3706
  if ($focusEl) {
2173
3707
  $focusEl.focus();
2174
- $focusEl.scrollIntoView({
2175
- behavior: 'auto',
2176
- block: 'center',
2177
- inline: 'start',
2178
- });
3708
+ setTimeout(() => {
3709
+ $focusEl.scrollIntoView({
3710
+ behavior: 'auto',
3711
+ block: 'center',
3712
+ inline: 'start',
3713
+ });
3714
+ }, 100);
2179
3715
  }
2180
3716
  }, [shrink]);
2181
3717
  React.useEffect(() => {
@@ -2192,8 +3728,14 @@ const ChoiceField = (props) => {
2192
3728
  const TitleBlock = ({ children, align, }) => (React__default["default"].createElement("h2", { className: `lead-modal__title ${'le-text-align-' + (align || '')} ${LEAD_CLASS}` }, children));
2193
3729
 
2194
3730
  const LightboxFields = ({ listBlockAdded, popupId, locale, onClose, onOtherSubmit, }) => {
3731
+ const { t } = index.useTranslations();
2195
3732
  const form = useLeadFormContext();
2196
3733
  const formValues = form.values;
3734
+ const labelTuples = React.useMemo(() => {
3735
+ return ((index$6.ISO_FORMAT === null || index$6.ISO_FORMAT === void 0 ? void 0 : index$6.ISO_FORMAT[locale]) || index$6.ISO_FORMAT['vi-VN']).dateFormat
3736
+ .split('/')
3737
+ .map((key) => { var _a; return t((_a = index$8.COMMON_DATE_TRANSLATE_KEY === null || index$8.COMMON_DATE_TRANSLATE_KEY === void 0 ? void 0 : index$8.COMMON_DATE_TRANSLATE_KEY[key]) === null || _a === void 0 ? void 0 : _a.id); });
3738
+ }, [locale]);
2197
3739
  return (React__default["default"].createElement(React__default["default"].Fragment, null, listBlockAdded.map((b, index) => {
2198
3740
  var _a;
2199
3741
  const { name = '', data = {}, id } = b || {};
@@ -2243,17 +3785,15 @@ const LightboxFields = ({ listBlockAdded, popupId, locale, onClose, onOtherSubmi
2243
3785
  return (React__default["default"].createElement(TextField, { key: index, shrink: !!formValue, className: "lead-modal__form-control leadgen-form_field" },
2244
3786
  React__default["default"].createElement(GoogleLocationBlock, Object.assign({ withAsterisk: required, name: value, placeholder: placeholder, label: placeholder, "data-control": "text", locale: locale, inputWrapperOrder: ['label', 'input', 'description', 'error'] }, form.getInputProps(value)))));
2245
3787
  }
2246
- case 'DateBlock':
2247
- return (React__default["default"].createElement(TextField, { key: index, shrink: !!formValue, className: "lead-modal__form-control leadgen-form_field" },
2248
- React__default["default"].createElement(index$4.DatePicker, Object.assign({ clearable: true, withAsterisk: required, type: "default", name: value, placeholder: placeholder, label: placeholder, inputWrapperOrder: ['label', 'input', 'description', 'error'], inputContainer: (children) => {
2249
- return (React__default["default"].createElement(React__default["default"].Fragment, null,
2250
- children,
2251
- React__default["default"].createElement("input", { type: "hidden", "data-control": "date", name: value, value: formValue })));
2252
- } }, form.getInputProps(value)))));
3788
+ case 'DateBlock': {
3789
+ const _c = form.getInputProps(value), { error } = _c, formInputProps = tslib_es6.__rest(_c, ["error"]);
3790
+ return (React__default["default"].createElement(core.Input.Wrapper, { key: index, size: "md", withAsterisk: required, label: placeholder, "data-invalid": !!error, inputWrapperOrder: ['label', 'input', 'description', 'error'], error: error, className: "lead-modal__form-control leadgen-form_field" },
3791
+ React__default["default"].createElement(InputDate.InputDate, Object.assign({ name: value, error: Boolean(error), locale: locale, "data-extra": true, "data-name": value, "data-control": "date", className: "leadgen-form_field_date", labelTuples: labelTuples }, formInputProps))));
3792
+ }
2253
3793
  case 'LinkButtonBlock':
2254
3794
  return (React__default["default"].createElement("div", { key: index },
2255
3795
  React__default["default"].createElement("a", { target: newtab ? 'blank' : 'parrent', href: url, style: { textDecoration: 'none' } },
2256
- React__default["default"].createElement(index$8.Button, { type: "button", size: "md", className: `lead-modal__btn ${LEAD_CLASS}`, onClick: () => {
3796
+ React__default["default"].createElement(index$9.Button, { type: "button", size: "md", className: `lead-modal__btn ${LEAD_CLASS}`, onClick: () => {
2257
3797
  onClose === null || onClose === void 0 ? void 0 : onClose();
2258
3798
  onOtherSubmit === null || onOtherSubmit === void 0 ? void 0 : onOtherSubmit();
2259
3799
  } }, value))));
@@ -2292,7 +3832,7 @@ const LightboxFields = ({ listBlockAdded, popupId, locale, onClose, onOtherSubmi
2292
3832
  label: l.placeholder,
2293
3833
  })) }, form.getInputProps(value)))));
2294
3834
  case 'TncBlock':
2295
- const _c = form.getInputProps(`TNC-${id}`), { error } = _c, tncInputProps = tslib_es6.__rest(_c, ["error"]);
3835
+ const _d = form.getInputProps(`TNC-${id}`), { error } = _d, tncInputProps = tslib_es6.__rest(_d, ["error"]);
2296
3836
  return (React__default["default"].createElement(ChoiceField, { className: "leadgen-form_checkbox", key: id },
2297
3837
  React__default["default"].createElement(core.Input.Wrapper, { error: error },
2298
3838
  React__default["default"].createElement(index$2.Checkbox, Object.assign({ name: 'TNC-' + id, label: React__default["default"].createElement("p", { className: "lead-modal__tnc-link", dangerouslySetInnerHTML: { __html: data.valueHTML } }), className: "tnc-block", "data-control": "checkbox" }, tncInputProps)))));
@@ -2398,11 +3938,11 @@ const HeaderImage = ({ src, ratio = 3 / 2, className, style, }) => {
2398
3938
  if (!src) {
2399
3939
  return null;
2400
3940
  }
2401
- return (React__default["default"].createElement(StyleHeaderImage, { paddingTop: (1 / ratio) * 100, className: core.clsx(className, 'leadgen-header_image'), style: style }, index$6.isVideo(src) ? (React__default["default"].createElement("video", { muted: true, autoPlay: true, loop: true, className: "leadgen-header_image_feature leadgen-header_image_video", src: src })) : (React__default["default"].createElement("img", { src: src, draggable: "false", alt: "", className: "leadgen-header_image_feature leadgen-header_image_image" }))));
3941
+ return (React__default["default"].createElement(StyleHeaderImage, { paddingTop: (1 / ratio) * 100, className: core.clsx(className, 'leadgen-header_image'), style: style }, index$7.isVideo(src) ? (React__default["default"].createElement("video", { muted: true, autoPlay: true, loop: true, className: "leadgen-header_image_feature leadgen-header_image_video", src: src })) : (React__default["default"].createElement("img", { src: src, draggable: "false", alt: "", className: "leadgen-header_image_feature leadgen-header_image_image" }))));
2402
3942
  };
2403
3943
 
2404
3944
  const OtpBlock = ({ otpData, onSuccess, autoSendWhenOpen, }) => {
2405
- const { primaryColor } = React.useContext(LeadGenContext);
3945
+ const { primaryColor } = React.useContext(LeadGenContext$1);
2406
3946
  const { t } = index.useTranslations();
2407
3947
  const phone = otpData.phone;
2408
3948
  const otpType = otpData.type;
@@ -2486,711 +4026,373 @@ const OtpBlock = ({ otpData, onSuccess, autoSendWhenOpen, }) => {
2486
4026
  // title: res?._messages[0] || defaultError,
2487
4027
  // message: '',
2488
4028
  // type: 'danger',
2489
- // })
2490
- }
2491
- setIsSubmitLoading(false);
2492
- });
2493
- React.useEffect(() => {
2494
- setTimeout(() => {
2495
- if (resendTimer > 0) {
2496
- setResendTimer((r) => r - 1);
2497
- }
2498
- }, 1000);
2499
- }, [resendTimer]);
2500
- React.useEffect(() => {
2501
- if (autoSendWhenOpen && !resendTimer) {
2502
- sendOtp();
2503
- }
2504
- }, []);
2505
- return (React__default["default"].createElement("form", { onSubmit: (e) => {
2506
- e.preventDefault();
2507
- submitOtp();
2508
- }, className: "lead-phone-otp-form leadgen-form leadgen-form_otp" },
2509
- React__default["default"].createElement(FormContainer, { title: t('lead.otp.title'), description: t('lead.otp.desc', {
2510
- phone: `<strong>${displayPhone}</strong>`,
2511
- }), footer: React__default["default"].createElement(React__default["default"].Fragment, null,
2512
- React__default["default"].createElement(core.Button, { type: "submit", size: "lg", variant: "filled", className: `lead-modal__btn leadgen-btn_action ${LEAD_CLASS}`, color: primaryColor, disabled: !otp, loading: isSubmitLoading }, t('lead.otp.verify')),
2513
- React__default["default"].createElement(core.Button, { type: "button", size: "lg", variant: "light", className: `lead-modal__btn lead-phone-otp-button leadgen-btn_action ${LEAD_CLASS}`, color: primaryColor, onClick: () => {
2514
- sendOtp();
2515
- }, disabled: !!resendTimer }, t('lead.otp.resend', {
2516
- timer: resendTimer ? ` (${resendTimer}s)` : '',
2517
- }))) },
2518
- React__default["default"].createElement("div", { className: "leadgen-form_inner" },
2519
- React__default["default"].createElement(index$2.Input.Wrapper, { error: isDirty ? errorMsg : undefined, className: "leadgen-form_field" },
2520
- React__default["default"].createElement(index$2.OTP, { ref: inputRef, name: '_' + name + '-otp', value: otp, onChange: (v) => {
2521
- setIsDirty(true);
2522
- setOtp(v.toString());
2523
- if (isDirty && !v)
2524
- setErrorMsg('OTP is required');
2525
- else
2526
- setErrorMsg(undefined);
2527
- } }))))));
2528
- };
2529
-
2530
- // url: imageBlocks.imageMobile.data.url
2531
- // newTab: imageBlocks.imageMobile.data.newtab
2532
- // image: campaignShow.image
2533
- // imageDestkop: campaignShow.image_desktop
2534
- const LEADGEN_LAYOUT_NOT_SHOW_IN_MOBILE = [
2535
- LEADGEN_LAYOUT.Fullscreen,
2536
- LEADGEN_LAYOUT.Slider,
2537
- ];
2538
- const LEADGEN_LIMIT_LIGHTBOXB = 6;
2539
- const LEADGEN_SHOW_HEADER = [
2540
- 'LightBoxA',
2541
- 'InlineA',
2542
- LEADGEN_LAYOUT.Sidebar,
2543
- LEADGEN_LAYOUT.Slider,
2544
- ];
2545
- const LightboxLayout = ({ popupId, extraFields, onClose: onCloseProp, onOtherSubmit, imageMobile, imageDesktop, imageOverlayMobile, imageOverlayDesktop, imageBackground, currentLayout, title, onSubmit, showThankyou, campaignId, campaign_subot_id, locale, showEmpty, setShowEmpty, userInfo, }) => {
2546
- var _a;
2547
- const { primaryColor } = React.useContext(LeadGenContext);
2548
- const { isMobile } = useScreenSize.useScreenSize();
2549
- const [open, setOpen] = React.useState(!!campaignId);
2550
- const [showOtpPhone, setShowOtpPhone] = React.useState(null);
2551
- const [isSubmitLoading, setIsSubmitLoading] = React.useState(false);
2552
- const [snap, setSnap] = React.useState(0.8);
2553
- const formRef = React.useRef();
2554
- const onClose = () => {
2555
- if (showOtpPhone) {
2556
- setShowOtpPhone(null);
2557
- }
2558
- else {
2559
- onCloseProp === null || onCloseProp === void 0 ? void 0 : onCloseProp();
2560
- }
2561
- };
2562
- const textBlocks = JSON.parse(extraFields.textBlocks);
2563
- const listBlockAdded = JSON.parse(extraFields.listBlockAdded);
2564
- const actionBlocks = JSON.parse(extraFields.actionBlocks);
2565
- const popUpSubmitText = actionBlocks.submitBlock.data.value;
2566
- const currentPath = location.pathname;
2567
- const { align: descriptionAlign, value: description } = textBlocks.subtitleBlock.data || {};
2568
- const { align: titleAlign } = textBlocks.titleBlock.data || {};
2569
- const isSlider = currentLayout === LEADGEN_LAYOUT.Slider;
2570
- const isSidebar = currentLayout === LEADGEN_LAYOUT.Sidebar;
2571
- const isLightBox = currentLayout.includes('LightBox');
2572
- const isLightBoxA = currentLayout === LEADGEN_LAYOUT.LightBoxA;
2573
- const isLightBoxB = currentLayout === LEADGEN_LAYOUT.LightBoxB;
2574
- const isInline = currentLayout.includes('Inline');
2575
- const isFullscreen = currentLayout === LEADGEN_LAYOUT.Fullscreen;
2576
- const isInPage = isInline || isSidebar;
2577
- const isDrawer = isLightBoxB && isMobile;
2578
- const limitFieldsLightBoxB = isLightBoxB && listBlockAdded.length <= LEADGEN_LIMIT_LIGHTBOXB;
2579
- const hasForm = isLightBoxA
2580
- ? listBlockAdded.some((item) => LEADGEN_BLOCK_IN_FORM.some((k) => k === (item === null || item === void 0 ? void 0 : item.name)))
2581
- : true;
2582
- const headerInsideFormContainer = isSlider || isLightBoxA || isFullscreen;
2583
- const showHeader = !!imageMobile || !!imageDesktop;
2584
- const onlyHeader = !title && !description;
2585
- const showButtonClose = !isInline;
2586
- if (window.innerWidth < 769 &&
2587
- LEADGEN_LAYOUT_NOT_SHOW_IN_MOBILE.includes(currentLayout)) {
2588
- console.log('😎 Not show fullscreen, slider on mobile ');
2589
- return null;
2590
- }
2591
- React.useEffect(() => {
2592
- if (isLightBox || isFullscreen) {
2593
- document.body.classList.add('noscroll');
2594
- }
2595
- if (!window.intlTelInputUtils) {
2596
- require('intl-tel-input/build/js/utils');
2597
- }
2598
- clearCacheUsedEmailOrPhone();
2599
- }, []);
2600
- const validatingPhoneRef = React.useRef(false);
2601
- const validatingEmailRef = React.useRef(false);
2602
- const { form, validateObj } = useLeadFormConfig({
2603
- listBlockAdded,
2604
- validatingPhoneRef,
2605
- validatingEmailRef,
2606
- campaignId,
2607
- campaign_subot_id,
2608
- userInfo,
2609
- });
2610
- const middlewareOnSubmit = (e) => {
2611
- e.preventDefault();
2612
- // mark all as touched to allow validation
2613
- form.setTouched(Object.keys(validateObj).reduce((acc, cur) => {
2614
- acc[cur] = true;
2615
- return acc;
2616
- }, {}));
2617
- if (validatingEmailRef.current || validatingPhoneRef.current) {
2618
- return;
2619
- }
2620
- setTimeout(() => {
2621
- form.onSubmit((v) => {
2622
- var _a, _b, _c, _d, _e, _f, _g, _h, _j;
2623
- if (Object.keys(form.errors).length)
2624
- return;
2625
- let newShowOtpPhone = null;
2626
- if (listBlockAdded.findIndex((x) => x.name === LEADGEN_BLOCK.PhoneOtpBlock) > -1) {
2627
- // not submit yet, open otp
2628
- const fieldName = (_b = (_a = listBlockAdded.find((x) => x.name === LEADGEN_BLOCK.PhoneOtpBlock)) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.value;
2629
- if ((_c = v[fieldName]) === null || _c === void 0 ? void 0 : _c.startsWith('+')) {
2630
- newShowOtpPhone = {
2631
- phone: v[fieldName],
2632
- type: 'phone',
2633
- };
2634
- }
2635
- }
2636
- if (listBlockAdded.findIndex((x) => x.name === LEADGEN_BLOCK.WhatsappOtpBlock) > -1) {
2637
- // not submit yet, open otp
2638
- const fieldName = (_e = (_d = listBlockAdded.find((x) => x.name === LEADGEN_BLOCK.WhatsappOtpBlock)) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.value;
2639
- if ((_f = v[fieldName]) === null || _f === void 0 ? void 0 : _f.startsWith('+')) {
2640
- newShowOtpPhone = {
2641
- phone: v[fieldName],
2642
- type: 'whatsapp',
2643
- };
2644
- }
2645
- }
2646
- if (listBlockAdded.findIndex((x) => x.name === LEADGEN_BLOCK.ZaloOtpBlock) > -1) {
2647
- // not submit yet, open otp
2648
- const fieldName = (_h = (_g = listBlockAdded.find((x) => x.name === LEADGEN_BLOCK.ZaloOtpBlock)) === null || _g === void 0 ? void 0 : _g.data) === null || _h === void 0 ? void 0 : _h.value;
2649
- if ((_j = v[fieldName]) === null || _j === void 0 ? void 0 : _j.startsWith('+')) {
2650
- newShowOtpPhone = {
2651
- phone: v[fieldName],
2652
- type: 'zalo',
2653
- };
2654
- }
2655
- }
2656
- if (newShowOtpPhone) {
2657
- setIsSubmitLoading(true);
2658
- Service.sendSMSOtpLead(newShowOtpPhone)
2659
- .then((res) => {
2660
- var _a;
2661
- const respMessage = (_a = res === null || res === void 0 ? void 0 : res._messages) === null || _a === void 0 ? void 0 : _a[0];
2662
- if (respMessage === 'This phone number was verified') {
2663
- onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(formRef.current, v);
2664
- return;
2665
- }
2666
- setShowOtpPhone(newShowOtpPhone);
2667
- })
2668
- .finally(() => {
2669
- setIsSubmitLoading(false);
2670
- });
2671
- return;
2672
- }
2673
- onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(formRef.current, v);
2674
- })(e);
2675
- }, 100);
2676
- };
2677
- const onOpenChange = (_open) => {
2678
- setOpen(_open);
2679
- if (!_open) {
2680
- setTimeout(() => {
2681
- onClose();
2682
- }, 250);
2683
- }
2684
- };
2685
- const { width: imageBackgroundWidth, height: imageBackgroundHeight, loaded: imageBackgroundLoaded, } = useImageSize(imageBackground);
2686
- const { loaded: imageMobileLoaded } = useImageSize(imageMobile);
2687
- const { loaded: imageDesktopLoaded } = useImageSize(imageDesktop);
2688
- const renderAfterImageSizes = imageMobileLoaded &&
2689
- imageDesktopLoaded &&
2690
- (isFullscreen ? imageBackgroundLoaded : true);
2691
- const ButtonSubmit = !((_a = actionBlocks === null || actionBlocks === void 0 ? void 0 : actionBlocks.submitBlock) === null || _a === void 0 ? void 0 : _a.isHide) && (React__default["default"].createElement(core.Button, { size: "lg", id: "lead-submit", type: "submit", variant: "filled", className: "leadgen-btn leadgen-btn_action", color: primaryColor, loading: isSubmitLoading }, popUpSubmitText));
2692
- const LinkButtonBlock = listBlockAdded.filter(({ name }) => name == LEADGEN_BLOCK.LinkButtonBlock);
2693
- const ButtonLink = !!(LinkButtonBlock === null || LinkButtonBlock === void 0 ? void 0 : LinkButtonBlock.length) && (React__default["default"].createElement(React__default["default"].Fragment, null, LinkButtonBlock.map((item, index) => {
2694
- var _a, _b, _c;
2695
- return (React__default["default"].createElement(core.Button, { key: `${item.name}-${index}`, component: "a", href: (_a = item === null || item === void 0 ? void 0 : item.data) === null || _a === void 0 ? void 0 : _a.url, target: ((_b = item === null || item === void 0 ? void 0 : item.data) === null || _b === void 0 ? void 0 : _b.newtab) ? '_blank' : undefined, size: "lg", variant: "filled", className: "leadgen-btn leadgen-btn_action", color: primaryColor, onClick: () => {
2696
- onClose === null || onClose === void 0 ? void 0 : onClose();
2697
- onOtherSubmit === null || onOtherSubmit === void 0 ? void 0 : onOtherSubmit();
2698
- } }, (_c = item === null || item === void 0 ? void 0 : item.data) === null || _c === void 0 ? void 0 : _c.value));
2699
- })));
2700
- const PopupHeader = showHeader && (React__default["default"].createElement("header", { className: core.clsx('leadgen-header', { 'leadgen-header_only': onlyHeader }) }, LEADGEN_SHOW_HEADER.includes(currentLayout) ? (React__default["default"].createElement(HeaderImage, { src: imageMobile, className: "lead-modal__image" })) : (React__default["default"].createElement(React__default["default"].Fragment, null,
2701
- React__default["default"].createElement(HeaderImage, { src: imageDesktop, className: "le-only-desktop lead-modal__image" }),
2702
- React__default["default"].createElement(HeaderImage, { src: imageMobile, className: "le-only-mobile lead-modal__image" })))));
2703
- const PopupEmpty = showEmpty && (React__default["default"].createElement(EmptyComponent, { onClose: onClose, onContinue: () => setShowEmpty(false) }));
2704
- const PopupForm = (React__default["default"].createElement(LeadFormProvider, { form: form },
2705
- React__default["default"].createElement("form", { ref: formRef, className: "leadgen-form", onSubmit: middlewareOnSubmit },
2706
- React__default["default"].createElement(FormContainer, { title: title, titleAlign: titleAlign, description: description, descriptionAlign: descriptionAlign, header: headerInsideFormContainer && PopupHeader, footer: hasForm ? ButtonSubmit : ButtonLink, "data-hidden-form": !hasForm },
2707
- React__default["default"].createElement("div", { className: "leadgen-form_inner" },
2708
- React__default["default"].createElement(LightboxFields, { listBlockAdded: listBlockAdded, popupId: popupId, locale: locale, onClose: onClose, onOtherSubmit: onOtherSubmit }))))));
2709
- const PopupOtp = showOtpPhone && (React__default["default"].createElement(OtpBlock, { otpData: showOtpPhone, autoSendWhenOpen: false, onSuccess: () => {
2710
- setShowOtpPhone(null);
2711
- onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(formRef.current, form.values);
2712
- } }));
2713
- const PopupThankYou = showThankyou && (React__default["default"].createElement(ThankyouPopup, { title: showThankyou.title, titleAlign: showThankyou.titleAlign, subtitle: showThankyou.subtitle, subtitleAlign: showThankyou.subtitleAlign, link: showThankyou.link, linkNewTab: showThankyou.linkNewTab, linkText: showThankyou.linkText, image: showThankyou.image }));
2714
- const PopupContent = (React__default["default"].createElement("div", { className: core.clsx('leadgen-content', {
2715
- 'leadgen-content_small': limitFieldsLightBoxB,
2716
- }) },
2717
- !headerInsideFormContainer && PopupHeader,
2718
- !onlyHeader && (React__default["default"].createElement("div", { className: "leadgen-inner" },
2719
- PopupThankYou,
2720
- !showThankyou && (React__default["default"].createElement(React__default["default"].Fragment, null,
2721
- PopupOtp,
2722
- PopupEmpty,
2723
- !(showOtpPhone || showEmpty) && PopupForm))))));
2724
- const styleOverlay = React.useMemo(() => {
2725
- let styleContent = `.leadgen-inner {background-repeat: no-repeat;background-size: cover;background-position:center;}`;
2726
- if (isMobile && imageOverlayMobile) {
2727
- styleContent += `.leadgen-inner {background-image: url(${imageOverlayMobile});}`;
2728
- }
2729
- if (!isMobile && imageOverlayDesktop) {
2730
- styleContent += `@media screen and (min-width:768px) {.leadgen-inner {background-image: url(${imageOverlayDesktop});}}`;
4029
+ // })
2731
4030
  }
2732
- return styleContent;
2733
- }, [isMobile, imageOverlayDesktop, imageOverlayMobile]);
2734
- const PopupWrapper = (React__default["default"].createElement(React__default["default"].Fragment, null,
2735
- React__default["default"].createElement("style", { dangerouslySetInnerHTML: { __html: styleOverlay } }),
2736
- React__default["default"].createElement("div", { className: core.clsx('leadgen-wrapper', {
2737
- 'leadgen-wrapper_small': limitFieldsLightBoxB,
2738
- }) },
2739
- showButtonClose && (React__default["default"].createElement(CloseButton, { onClose: () => onOpenChange(false), containerClassName: "leadgen-close_btn" })),
2740
- PopupContent)));
2741
- const popupContainerClassName = core.clsx('leadgen', `leadgen-${currentLayout}`, {
2742
- 'leadgen-lightbox': isLightBox,
2743
- 'leadgen-inline': isInPage,
2744
- 'leadgen-slider': isSlider,
4031
+ setIsSubmitLoading(false);
2745
4032
  });
2746
- const PopupContainer = isDrawer ? (React__default["default"].createElement(index$9.DrawerComponent, { fadeFromIndex: index$7.ZINDEX_SSO - 9e6, open: open, snapPoints: [0.8, 1], activeSnapPoint: snap, setActiveSnapPoint: setSnap, onOpenChange: onOpenChange, overlayClassName: popupContainerClassName, className: "leadgen-drawer" },
2747
- PopupWrapper,
2748
- React__default["default"].createElement("div", { style: { position: 'absolute', inset: 0, zIndex: snap === 1 ? -1 : 1 }, onClick: () => setSnap(1) }))) : (React__default["default"].createElement("div", { id: popupId, "data-popup-url": currentPath, "data-popup-type": "lightbox-inline", className: popupContainerClassName },
2749
- isFullscreen ? (React__default["default"].createElement("img", { className: "le-only-desktop le-fullscreen-img", draggable: false, src: imageBackground || '', style: {
2750
- aspectRatio: `${imageBackgroundWidth}/${imageBackgroundHeight}`,
2751
- } })) : null,
2752
- PopupWrapper));
2753
- if (!renderAfterImageSizes)
2754
- return null;
2755
- if (isLightBox || isFullscreen || isSlider) {
2756
- return PopupContainer;
2757
- }
2758
- else if (isSidebar) {
2759
- return React__default["default"].createElement(SideBarLayout, { content: PopupContainer });
2760
- }
2761
- else if (isInline) {
2762
- return (React__default["default"].createElement(InlineLayout, { content: PopupContainer, inlinePosition: extraFields.popupInlinePosition }));
2763
- }
2764
- return null;
2765
- };
2766
-
2767
- const SkinLayout = ({ popupId, link, linkText, linkNewTab, onClose, imageMobile, imageDesktop, currentLayout, onOtherSubmit, }) => {
2768
- const currentPath = location.pathname;
2769
- const { width: imageMobileWidth, height: imageMobileHeight, loaded: imageMobileLoaded, } = useImageSize(imageMobile);
2770
- const { width: imageDesktopWidth, height: imageDesktopHeight, loaded: imageDesktopLoaded, } = useImageSize(imageDesktop);
2771
- if (!imageMobileLoaded || !imageDesktopLoaded)
2772
- return null;
2773
- return (React__default["default"].createElement("div", { id: popupId, className: "lead-modal-wrapper", "data-popup-url": currentPath, "data-popup-type": "skin_ab" },
2774
- currentLayout == 'SkinA' ? (React__default["default"].createElement("aside", { className: "le-only-desktop" },
2775
- React__default["default"].createElement("div", { className: "le-skin-a-desktop" },
2776
- React__default["default"].createElement("div", { style: { position: 'relative' } },
2777
- React__default["default"].createElement("img", { src: imageDesktop, style: {
2778
- aspectRatio: `${imageDesktopWidth}/${imageDesktopHeight}`,
2779
- } }),
2780
- React__default["default"].createElement("a", { style: {
2781
- position: 'absolute',
2782
- top: '75%',
2783
- left: '50%',
2784
- transform: 'translate(-50%, -50%)',
2785
- textAlign: 'center',
2786
- width: 'calc(100% - 15px)',
2787
- }, href: link, target: linkNewTab ? 'blank' : '_parent' },
2788
- React__default["default"].createElement("button", { onClick: onOtherSubmit, className: "le-joinbow-btn js-popup-other-submit" }, linkText)),
2789
- React__default["default"].createElement(CloseButton, { onClose: onClose, containerClassName: "close-button-top-right" }))))) : currentLayout == 'SkinB' ? (React__default["default"].createElement("aside", { className: "le-only-desktop" },
2790
- React__default["default"].createElement("div", { className: "" },
2791
- React__default["default"].createElement("div", { style: { position: 'relative', zIndex: 10000 } },
2792
- React__default["default"].createElement("img", { src: imageDesktop, style: {
2793
- width: '100%',
2794
- aspectRatio: `${imageDesktopWidth}/${imageDesktopHeight}`,
2795
- } }),
2796
- React__default["default"].createElement("a", { style: {
2797
- position: 'absolute',
2798
- top: '75%',
2799
- left: '50%',
2800
- transform: 'translate(-50%, -50%)',
2801
- textAlign: 'center',
2802
- width: '100%',
2803
- }, href: link, target: linkNewTab ? 'blank' : '_parent' },
2804
- React__default["default"].createElement("button", { onClick: onOtherSubmit, className: "le-joinbow-btn-mobile js-popup-other-submit" }, linkText)),
2805
- React__default["default"].createElement(CloseButton, { containerClassName: "close-button-top-right", onClose: onClose }))))) : null,
2806
- React__default["default"].createElement("aside", { className: "le-only-mobile" },
2807
- React__default["default"].createElement("div", { className: "le-skin-mobile" },
2808
- React__default["default"].createElement("div", { style: { position: 'relative' } },
2809
- index$6.isVideo(imageMobile) ? (React__default["default"].createElement("video", { muted: true, autoPlay: true, loop: true },
2810
- React__default["default"].createElement("source", { src: imageMobile, type: "video/mp4" }))) : (React__default["default"].createElement("img", { src: imageMobile, style: {
2811
- width: '100%',
2812
- aspectRatio: `${imageMobileWidth}/${imageMobileHeight}`,
2813
- } })),
2814
- React__default["default"].createElement("a", { style: {
2815
- position: 'absolute',
2816
- top: '82%',
2817
- left: '50%',
2818
- transform: 'translate(-50%, -50%)',
2819
- textAlign: 'center',
2820
- maxWidth: 'calc(100% - 15px)',
2821
- }, href: link, target: linkNewTab ? 'blank' : '_parent' },
2822
- React__default["default"].createElement("button", { onClick: onOtherSubmit, className: "le-joinbow-btn-mobile js-popup-other-submit" }, linkText)),
2823
- React__default["default"].createElement(CloseButton, { containerClassName: "close-button-top-right", svgClassName: "le-mobile-btn", onClose: onClose }))))));
4033
+ React.useEffect(() => {
4034
+ setTimeout(() => {
4035
+ if (resendTimer > 0) {
4036
+ setResendTimer((r) => r - 1);
4037
+ }
4038
+ }, 1000);
4039
+ }, [resendTimer]);
4040
+ React.useEffect(() => {
4041
+ if (autoSendWhenOpen && !resendTimer) {
4042
+ sendOtp();
4043
+ }
4044
+ }, []);
4045
+ return (React__default["default"].createElement("form", { onSubmit: (e) => {
4046
+ e.preventDefault();
4047
+ submitOtp();
4048
+ }, className: "lead-phone-otp-form leadgen-form leadgen-form_otp" },
4049
+ React__default["default"].createElement(FormContainer, { title: t('lead.otp.title'), description: t('lead.otp.desc', {
4050
+ phone: `<strong>${displayPhone}</strong>`,
4051
+ }), footer: React__default["default"].createElement(React__default["default"].Fragment, null,
4052
+ React__default["default"].createElement(core.Button, { type: "submit", size: "lg", variant: "filled", className: `lead-modal__btn leadgen-btn_action ${LEAD_CLASS}`, color: primaryColor, disabled: !otp, loading: isSubmitLoading }, t('lead.otp.verify')),
4053
+ React__default["default"].createElement(core.Button, { type: "button", size: "lg", variant: "light", className: `lead-modal__btn lead-phone-otp-button leadgen-btn_action ${LEAD_CLASS}`, color: primaryColor, onClick: () => {
4054
+ sendOtp();
4055
+ }, disabled: !!resendTimer }, t('lead.otp.resend', {
4056
+ timer: resendTimer ? ` (${resendTimer}s)` : '',
4057
+ }))) },
4058
+ React__default["default"].createElement("div", { className: "leadgen-form_inner" },
4059
+ React__default["default"].createElement(index$2.Input.Wrapper, { error: isDirty ? errorMsg : undefined, className: "leadgen-form_field" },
4060
+ React__default["default"].createElement(index$2.OTP, { ref: inputRef, name: '_' + name + '-otp', value: otp, onChange: (v) => {
4061
+ setIsDirty(true);
4062
+ setOtp(v.toString());
4063
+ if (isDirty && !v)
4064
+ setErrorMsg('OTP is required');
4065
+ else
4066
+ setErrorMsg(undefined);
4067
+ } }))))));
2824
4068
  };
2825
4069
 
2826
4070
  // url: imageBlocks.imageMobile.data.url
2827
4071
  // newTab: imageBlocks.imageMobile.data.newtab
2828
4072
  // image: campaignShow.image
2829
4073
  // imageDestkop: campaignShow.image_desktop
2830
- const TabLayout = ({ popupId, url, newTab, image, onClose, onOtherSubmit, }) => {
2831
- const { width: imageWidth, height: imageHeight, loaded: imageLoaded, } = useImageSize(image);
2832
- if (!imageLoaded)
2833
- return null;
2834
- return (React__default["default"].createElement("div", { id: popupId, className: "lead-modal-wrapper", "data-popup-url": location.pathname, "data-popup-type": "tab" },
2835
- React__default["default"].createElement("div", { className: "le-tab-popup" },
2836
- React__default["default"].createElement("div", { style: { position: 'relative' } },
2837
- React__default["default"].createElement("a", { href: url, target: newTab ? 'blank' : '_parent', onClick: onOtherSubmit },
2838
- React__default["default"].createElement("img", { className: "js-popup-other-submit", src: image, style: {
2839
- aspectRatio: `${imageWidth}/${imageHeight}`,
2840
- } })),
2841
- React__default["default"].createElement(CloseButton, { onClose: onClose, containerClassName: "close-button-top-right" })))));
2842
- };
2843
-
2844
- // import mockLeadData from './mockLeadData'
2845
- const listCampaignScheduled = [];
2846
- const listCampaignScheduledToActivated = [];
2847
- const listCampaignActiveButExpired = [];
2848
- const listCampaignExcludeSonsored = [];
2849
- const listCampaignDifferentSponsor = [];
2850
- const listCampaignNotDisplayInRangeOfTime = [];
2851
- function isMobile() {
2852
- return /Android|webOS|iPhone|iPad|iPod|BlackBerry|BB|PlayBook|IEMobile|Windows Phone|Kindle|Silk|Opera Mini/i.test(navigator.userAgent);
2853
- }
2854
- const getShuffleArray = (array) => {
2855
- const newArray = [...array];
2856
- for (let i = newArray.length - 1; i > 0; i--) {
2857
- const j = Math.floor(Math.random() * (i + 1));
2858
- const temp = newArray[i];
2859
- newArray[i] = newArray[j];
2860
- newArray[j] = temp;
2861
- }
2862
- return newArray;
2863
- };
2864
- const getTimeByTimezone = (timeZone = 'UTC') => {
2865
- const date = new Date();
2866
- return new Date(date.toLocaleString('en-US', { timeZone }));
2867
- };
2868
- const parseDateByCampaignTime = (dateStr) => {
2869
- // Format like this: 2023-04-04 00:00:00
2870
- try {
2871
- const [datePart, timePart] = dateStr.split(' ');
2872
- const [year, month, day] = datePart.split('-').map(Number);
2873
- const [hours, minutes, seconds] = timePart.split(':').map(Number);
2874
- /** JavaScript counts months from 0 to 11 */
2875
- return new Date(year, month - 1, day, hours, minutes, seconds);
2876
- }
2877
- catch (err) {
2878
- return null;
2879
- }
2880
- };
2881
- const checkCampaignNowInTimeframe = (c) => {
2882
- var _a;
2883
- const siteId = ((_a = c.site) === null || _a === void 0 ? void 0 : _a.id) || 1;
2884
- const startedAtStr = c.started_at;
2885
- const endedAtStr = c.ended_at;
2886
- const startedDate = parseDateByCampaignTime(startedAtStr);
2887
- const endedDate = parseDateByCampaignTime(endedAtStr);
2888
- if (!startedDate || !endedDate) {
2889
- return false;
2890
- }
2891
- const timeZone = LEAD_TIMEZONE_DATA[siteId];
2892
- const nowWithTimezoneMs = getTimeByTimezone(timeZone).getTime();
2893
- if (nowWithTimezoneMs <= endedDate.getTime() &&
2894
- nowWithTimezoneMs >= startedDate.getTime()) {
2895
- listCampaignScheduledToActivated.push(c);
2896
- return true;
2897
- }
2898
- return false;
2899
- };
2900
- function checkCampaignActiveButExpireAlready(c) {
2901
- var _a;
2902
- /** Do not setup timeframe for this campaign. No need to check */
2903
- if (c.forever === 1) {
2904
- return true;
2905
- }
2906
- const startedAtStr = c.started_at;
2907
- const endedAtStr = c.ended_at;
2908
- const startedDate = parseDateByCampaignTime(startedAtStr);
2909
- const endedDate = parseDateByCampaignTime(endedAtStr);
2910
- /** Do not setup timeframe for this campaign. No need to check */
2911
- if (!startedDate || !endedDate) {
2912
- return true;
2913
- }
2914
- const siteId = ((_a = c.site) === null || _a === void 0 ? void 0 : _a.id) || 1;
2915
- const timeZone = LEAD_TIMEZONE_DATA[siteId];
2916
- const nowWithTimezoneMs = getTimeByTimezone(timeZone).getTime();
2917
- /** Check if this expire already, do not show */
2918
- if (nowWithTimezoneMs > endedDate.getTime()) {
2919
- listCampaignActiveButExpired.push(c);
2920
- return false;
2921
- }
2922
- return true;
2923
- }
2924
- function shouldNotDisplayIfExcludeAllSponsors(c) {
2925
- var _a;
2926
- const excludeSponsored = Number((_a = c.rules.find((i) => i.rule == 'exclude_sponsored')) === null || _a === void 0 ? void 0 : _a.value);
2927
- const isSponsored = Boolean(document.querySelector('.hhg-disclaimer-text'));
2928
- if (isSponsored && excludeSponsored) {
2929
- listCampaignExcludeSonsored.push(c);
2930
- return true;
2931
- }
2932
- return false;
2933
- }
2934
- function shouldDisplayWithCurrentSponsor(c) {
4074
+ const LEADGEN_LAYOUT_NOT_SHOW_IN_MOBILE = [
4075
+ LEADGEN_LAYOUT.Fullscreen,
4076
+ LEADGEN_LAYOUT.Slider,
4077
+ ];
4078
+ const LEADGEN_LIMIT_LIGHTBOXB = 6;
4079
+ const LEADGEN_SHOW_HEADER = [
4080
+ 'LightBoxA',
4081
+ 'InlineA',
4082
+ LEADGEN_LAYOUT.Sidebar,
4083
+ LEADGEN_LAYOUT.Slider,
4084
+ ];
4085
+ const LightboxLayout = ({ popupId, extraFields, onClose: onCloseProp, onOtherSubmit, imageMobile, imageDesktop, imageOverlayMobile, imageOverlayDesktop, imageBackground, currentLayout, title, onSubmit, showThankyou, campaignId, campaign_subot_id, locale, showEmpty, setShowEmpty, userInfo, }) => {
2935
4086
  var _a, _b;
2936
- try {
2937
- // TODO: BE will rename `exclude_sponsored_list` later
2938
- const stringOrArray = (_a = c.rules.find((i) => i.rule == 'exclude_sponsored_list')) === null || _a === void 0 ? void 0 : _a.value;
2939
- const whiteListSponsors = stringOrArray instanceof Array ? stringOrArray : JSON.parse(stringOrArray);
2940
- const dataSponsoredId = Number((_b = document
2941
- .querySelector('[data-sponsored-id]')) === null || _b === void 0 ? void 0 : _b.getAttribute('data-sponsored-id'));
2942
- // There is no config for sponsor id and white list, should show as default
2943
- if (!dataSponsoredId ||
2944
- dataSponsoredId <= 0 ||
2945
- whiteListSponsors.length === 0) {
2946
- return true;
4087
+ const { primaryColor } = React.useContext(LeadGenContext$1);
4088
+ const { isMobile } = useScreenSize.useScreenSize();
4089
+ const [open, setOpen] = React.useState(!!campaignId);
4090
+ const [showOtpPhone, setShowOtpPhone] = React.useState(null);
4091
+ const [isSubmitLoading, setIsSubmitLoading] = React.useState(false);
4092
+ const [snap, setSnap] = React.useState(0.8);
4093
+ const formRef = React.useRef();
4094
+ const onClose = () => {
4095
+ if (showOtpPhone) {
4096
+ setShowOtpPhone(null);
2947
4097
  }
2948
- // Check the dataSponsoredId exists in the white list or not.
2949
- const isExist = whiteListSponsors.find((s) => s.id == dataSponsoredId);
2950
- if (isExist) {
2951
- return true;
4098
+ else {
4099
+ onCloseProp === null || onCloseProp === void 0 ? void 0 : onCloseProp();
2952
4100
  }
2953
- listCampaignDifferentSponsor.push({ id: c.id, rules: c.rules });
2954
- return false;
2955
- }
2956
- catch (err) {
2957
- // Default is show
2958
- return true;
2959
- }
2960
- }
2961
- const filterFnCampaign = (c) => {
2962
- if (shouldNotDisplayIfExcludeAllSponsors(c)) {
2963
- return false;
2964
- }
2965
- else if (!shouldDisplayWithCurrentSponsor(c)) {
2966
- return false;
2967
- }
2968
- /** Active */
2969
- if (c.formatted_status === 1) {
2970
- return checkCampaignActiveButExpireAlready(c);
2971
- }
2972
- /** Schedule */
2973
- if (c.formatted_status === 0) {
2974
- listCampaignScheduled.push(c);
2975
- return checkCampaignNowInTimeframe(c);
4101
+ };
4102
+ const textBlocks = JSON.parse(extraFields.textBlocks);
4103
+ const listBlockAdded = JSON.parse(extraFields.listBlockAdded);
4104
+ const actionBlocks = JSON.parse(extraFields.actionBlocks);
4105
+ const popUpSubmitText = actionBlocks.submitBlock.data.value;
4106
+ const currentPath = location.pathname;
4107
+ const { align: descriptionAlign, value: description } = textBlocks.subtitleBlock.data || {};
4108
+ const { align: titleAlign } = textBlocks.titleBlock.data || {};
4109
+ const isSlider = currentLayout === LEADGEN_LAYOUT.Slider;
4110
+ const isSidebar = currentLayout === LEADGEN_LAYOUT.Sidebar;
4111
+ const isLightBox = currentLayout.includes('LightBox');
4112
+ const isLightBoxA = currentLayout === LEADGEN_LAYOUT.LightBoxA;
4113
+ const isLightBoxB = currentLayout === LEADGEN_LAYOUT.LightBoxB;
4114
+ const isInline = currentLayout.includes('Inline');
4115
+ const isFullscreen = currentLayout === LEADGEN_LAYOUT.Fullscreen;
4116
+ const isInPage = isInline || isSidebar;
4117
+ const isDrawer = isLightBoxB && isMobile;
4118
+ const limitFieldsLightBoxB = isLightBoxB && listBlockAdded.length <= LEADGEN_LIMIT_LIGHTBOXB;
4119
+ const hasForm = isLightBoxA
4120
+ ? listBlockAdded.some((item) => LEADGEN_BLOCK_INPUT.some((k) => k === (item === null || item === void 0 ? void 0 : item.name)))
4121
+ : true;
4122
+ const headerInsideFormContainer = isSlider || isLightBoxA || isFullscreen;
4123
+ const showHeader = !!imageMobile || !!imageDesktop;
4124
+ const onlyHeader = !title && !description;
4125
+ const showButtonClose = !isInline;
4126
+ if (window.innerWidth < 769 &&
4127
+ LEADGEN_LAYOUT_NOT_SHOW_IN_MOBILE.includes(currentLayout)) {
4128
+ console.log('😎 Not show fullscreen, slider on mobile ');
4129
+ return null;
2976
4130
  }
2977
- return false;
2978
- };
2979
- const fillterApprearanceTimeCampaign = (c) => {
2980
- var _a;
2981
- try {
2982
- const isTimeInRange = (currentTime, startTime, endTime) => {
2983
- const startParts = startTime.split(':');
2984
- const endParts = endTime.split(':');
2985
- const startDate = new Date();
2986
- startDate.setHours(Number(startParts[0]), Number(startParts[1]), 0, 0);
2987
- const endDate = new Date();
2988
- endDate.setHours(Number(endParts[0]), Number(endParts[1]), 0, 0);
2989
- return currentTime >= startDate && currentTime <= endDate;
2990
- };
2991
- const rulesApprValue = (_a = c.rules.find((i) => i.rule == 'appearance_time')) === null || _a === void 0 ? void 0 : _a.value;
2992
- const startTime = rulesApprValue.startTime;
2993
- const endTime = rulesApprValue.endTime || '23:59';
2994
- if (!startTime) {
2995
- return true;
4131
+ React.useEffect(() => {
4132
+ if (isLightBox || isFullscreen) {
4133
+ document.body.classList.add('noscroll');
2996
4134
  }
2997
- if (isTimeInRange(new Date(), startTime, endTime)) {
2998
- return true;
4135
+ if (!window.intlTelInputUtils) {
4136
+ require('intl-tel-input/build/js/utils');
2999
4137
  }
3000
- listCampaignNotDisplayInRangeOfTime.push(c);
3001
- return false;
3002
- }
3003
- catch (err) {
3004
- return true;
3005
- }
3006
- };
3007
- let timeoutRef = null;
3008
- let LEAD_SCROLL_EVENT = null;
3009
- function clearPassiveEvent() {
3010
- if (timeoutRef) {
3011
- clearTimeout(timeoutRef);
3012
- timeoutRef = null;
3013
- }
3014
- if (LEAD_SCROLL_EVENT) {
3015
- window.removeEventListener('scroll', LEAD_SCROLL_EVENT);
3016
- LEAD_SCROLL_EVENT = null;
3017
- }
3018
- }
3019
- function checkShowPopup({ leadApi, leadSiteId, leadDomain, onShowPopup, DEBUG_URL, }) {
3020
- // clear previous passive event, check for new condition
3021
- clearPassiveEvent();
3022
- const leadCurrentUrl = DEBUG_URL ||
3023
- ('https://' +
3024
- location.hostname +
3025
- location.pathname +
3026
- location.search).toLowerCase();
3027
- fetch(leadApi + 'api/campaign/' + leadSiteId, {
3028
- method: 'POST',
3029
- headers: {
3030
- 'Content-Type': 'application/json',
3031
- },
3032
- body: JSON.stringify({
3033
- url: leadCurrentUrl,
3034
- ga_client_id: miscCookieHelper.getCookie('_ga') || null,
3035
- }),
3036
- })
3037
- .then((response) => {
3038
- return response.json();
3039
- // return mockLeadData || response.json()
3040
- })
3041
- .then((data) => {
3042
- var _a, _b, _c, _d;
3043
- LeadLog('List campagin: ', data);
3044
- LEAD_RESET_VAR();
3045
- if (data._status == 1) {
3046
- const campaigns = (((_b = (_a = data._data) === null || _a === void 0 ? void 0 : _a.campaigns) === null || _b === void 0 ? void 0 : _b.filter(filterFnCampaign)) || []).filter(fillterApprearanceTimeCampaign);
3047
- if (!miscCookieHelper.getCookie('hhg-id')) {
3048
- miscCookieHelper.setCookie('hhg-id', uuid.v1(), {
3049
- domain: '.' + leadDomain,
3050
- path: '/',
3051
- });
3052
- LeadLog('😍 Set HHG ID cookie');
3053
- }
3054
- // getCookie('hhg-id')
3055
- // TODO: HP-534 Filter desktop
3056
- let campaignsDevice = [];
3057
- if (isMobile()) {
3058
- campaignsDevice = campaigns.filter((c) => c.device_types.some((d) => d.id == LEAD_DEVICE_TYPE.MOBILE));
3059
- }
3060
- else {
3061
- campaignsDevice = campaigns.filter((c) => c.device_types.some((d) => d.id == LEAD_DEVICE_TYPE.DESKTOP));
3062
- }
3063
- LeadLog(`👓 campaignsDevice`, campaignsDevice);
3064
- LeadLog('--listCampaignScheduled', listCampaignScheduled);
3065
- LeadLog('--listCampaignScheduledToActivated', listCampaignScheduledToActivated);
3066
- LeadLog('--listCampaignActiveButExpired', listCampaignActiveButExpired);
3067
- LeadLog('--listCampaignExcludeSonsored', listCampaignExcludeSonsored);
3068
- LeadLog('--listCampaignDifferentSponsor', listCampaignDifferentSponsor);
3069
- LeadLog('--listCampaignNotDisplayInRangeOfTime', listCampaignNotDisplayInRangeOfTime);
3070
- // Check links
3071
- let listLinksObj = campaignsDevice
3072
- .map((i, index) => i.targets
3073
- .filter((i) => i.type == CAMPAIGN_TARGET_TYPE.LINKS)
3074
- .map((i) => (Object.assign(Object.assign({}, i), { campaignIndex: index }))))
3075
- .flat(1);
3076
- // Check list link match current href
3077
- listLinksObj = listLinksObj.filter((i) => {
3078
- var _a;
3079
- const target = new URL(String(i.target).toLowerCase());
3080
- if (i.option == 'exact_match')
3081
- // FOR TEST LOCAL:
3082
- // return Boolean(location.pathname === target.pathname)
3083
- return Boolean(leadCurrentUrl === ((_a = target.href) === null || _a === void 0 ? void 0 : _a.toLowerCase()));
3084
- if (i.option == 'start_with') {
3085
- // FOR TEST LOCAL:
3086
- // if (location.pathname.includes(target.pathname)) {
3087
- if (leadCurrentUrl.includes(String(i.target).toLowerCase())) {
3088
- const listExcluding = i.sub_target
3089
- .filter((i) => i.option == 'excluding')
3090
- .map((i) => { var _a; return (_a = i.value) === null || _a === void 0 ? void 0 : _a.toLowerCase(); });
3091
- return !listExcluding.includes(leadCurrentUrl.split('?')[0]);
3092
- }
3093
- else {
3094
- return false;
3095
- }
3096
- }
3097
- });
3098
- // Check tags
3099
- const listMetaTag = Array.from(document.getElementsByTagName('META')).filter((i) => i.getAttribute('property') == 'article:tag');
3100
- const listTags = listMetaTag.map((i) => i.content);
3101
- let listCampaignHasTag = [];
3102
- let listTagsObj = [];
3103
- if (listTags && listTags.length) {
3104
- listCampaignHasTag = campaignsDevice
3105
- .map((i, index) => i.targets
3106
- .filter((i) => i.type == CAMPAIGN_TARGET_TYPE.TAGS)
3107
- .map((i) => (Object.assign(Object.assign({}, i), { campaignIndex: index }))))
3108
- .flat(1);
3109
- listTagsObj = listCampaignHasTag.filter((i) => listTags.includes(i.target));
3110
- }
3111
- const listCampaginsMatch = [...listLinksObj, ...listTagsObj];
3112
- const cookieKeys = document.cookie
3113
- .split('; ')
3114
- .map((i) => i.split('=')[0]);
3115
- const listCampaignCodeSubmited = cookieKeys.filter((i) => i.includes('lead_submited'));
3116
- LeadLog(`--listCampaignCodeSubmited`, listCampaignCodeSubmited);
3117
- const listCampaignCodeClosed = cookieKeys.filter((i) => i.includes('lead_closed'));
3118
- LeadLog(`--listCampaignCodeClosed`, listCampaignCodeClosed);
3119
- const listCampaignSubmitedClosed = [
3120
- ...listCampaignCodeSubmited,
3121
- ...listCampaignCodeClosed,
3122
- ];
3123
- const listCampaignNoSubmitedClosed = listCampaginsMatch.filter((i) => {
3124
- const hasSubmited = listCampaignSubmitedClosed.some((k) => k.includes(campaignsDevice[i.campaignIndex].code));
3125
- return !hasSubmited;
3126
- });
3127
- const listCampaignValid = getShuffleArray(listCampaignNoSubmitedClosed);
3128
- // .sort(
3129
- // (a, b) =>
3130
- // (listCampaignValid[a.campaignIndex]?.score || 0) -
3131
- // (listCampaignValid[b.campaignIndex]?.score || 0),
3132
- // )
3133
- LeadLog('--listCampaignValid : ', listCampaignValid);
3134
- if (listCampaignValid && listCampaignValid.length) {
3135
- const CAMPAIGN_SHOW = campaignsDevice[listCampaignValid[0].campaignIndex];
3136
- LeadLog(`CAMPAIGN_SHOW`, CAMPAIGN_SHOW);
3137
- const { rules } = CAMPAIGN_SHOW;
3138
- // CHECK RULE TRIGGER POPUP
3139
- const timeoutRule = Number((_c = rules.find((i) => i.rule == 'time')) === null || _c === void 0 ? void 0 : _c.value);
3140
- LeadLog(`timeoutRule`, timeoutRule);
3141
- const scrollRule = Number((_d = rules.find((i) => i.rule == 'scroll')) === null || _d === void 0 ? void 0 : _d.value);
3142
- LeadLog(`scrollRule`, scrollRule);
3143
- let impressionAction = 'TIME';
3144
- if (Number.isInteger(timeoutRule)) {
3145
- impressionAction = 'TIME';
3146
- LeadLog('✨ SHOW AWESOME POPUP AFTER: ', timeoutRule, ' seconds');
3147
- timeoutRef = setTimeout(() => {
3148
- onShowPopup === null || onShowPopup === void 0 ? void 0 : onShowPopup(CAMPAIGN_SHOW, impressionAction);
3149
- }, timeoutRule * 1000);
4138
+ clearCacheUsedEmailOrPhone();
4139
+ }, []);
4140
+ const validatingPhoneRef = React.useRef(false);
4141
+ const validatingEmailRef = React.useRef(false);
4142
+ const { form, validateObj } = useLeadFormConfig({
4143
+ listBlockAdded,
4144
+ validatingPhoneRef,
4145
+ validatingEmailRef,
4146
+ campaignId,
4147
+ campaign_subot_id,
4148
+ userInfo,
4149
+ format: (_a = (index$6.ISO_FORMAT[locale] || index$6.ISO_FORMAT['vi-VN'])) === null || _a === void 0 ? void 0 : _a.dateFormat,
4150
+ });
4151
+ const onFocus = (e) => {
4152
+ const target = e.target;
4153
+ target.scrollIntoView({
4154
+ block: 'center',
4155
+ inline: 'nearest',
4156
+ behavior: 'auto',
4157
+ });
4158
+ };
4159
+ const middlewareOnSubmit = (e) => {
4160
+ e.preventDefault();
4161
+ // mark all as touched to allow validation
4162
+ const fields = Object.keys(validateObj);
4163
+ const fieldStatus = fields.reduce((acc, cur) => {
4164
+ acc[cur] = true;
4165
+ return acc;
4166
+ }, {});
4167
+ form.setTouched(fieldStatus);
4168
+ if (validatingEmailRef.current || validatingPhoneRef.current) {
4169
+ return;
4170
+ }
4171
+ setTimeout(() => {
4172
+ form.onSubmit((v) => {
4173
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
4174
+ if (Object.keys(form.errors).length)
4175
+ return;
4176
+ let newShowOtpPhone = null;
4177
+ if (listBlockAdded.findIndex((x) => x.name === LEADGEN_BLOCK.PhoneOtpBlock) > -1) {
4178
+ // not submit yet, open otp
4179
+ const fieldName = (_b = (_a = listBlockAdded.find((x) => x.name === LEADGEN_BLOCK.PhoneOtpBlock)) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.value;
4180
+ if ((_c = v[fieldName]) === null || _c === void 0 ? void 0 : _c.startsWith('+')) {
4181
+ newShowOtpPhone = {
4182
+ phone: v[fieldName],
4183
+ type: 'phone',
4184
+ };
4185
+ }
3150
4186
  }
3151
- if (Number.isInteger(scrollRule)) {
3152
- impressionAction = 'SCROLL';
3153
- LeadLog('✨ SHOW AWESOME AFTER: SCROLL', scrollRule, ' %');
3154
- const $p = document.querySelector(`[data-url="${location.pathname}"]`) ||
3155
- document.querySelector('body');
3156
- const pct = $p.getBoundingClientRect().top;
3157
- const pb = $p.offsetHeight;
3158
- LeadLog(`👓 Element check scroll: `, $p);
3159
- LEAD_SCROLL_EVENT = function leadScollCheckHandler() {
3160
- const wt = window.pageYOffset || document.documentElement.scrollTop;
3161
- let percent = 0;
3162
- if (wt >= pct) {
3163
- percent = Math.round(((wt - pct) / (pb - innerHeight)) * 100);
3164
- }
3165
- LeadLog('---Scroll', percent, scrollRule);
3166
- // TODO: CHECK FOOTER HEIGHT
3167
- if (percent >= scrollRule) {
3168
- window.removeEventListener('scroll', LEAD_SCROLL_EVENT);
3169
- onShowPopup === null || onShowPopup === void 0 ? void 0 : onShowPopup(CAMPAIGN_SHOW, impressionAction);
4187
+ if (listBlockAdded.findIndex((x) => x.name === LEADGEN_BLOCK.WhatsappOtpBlock) > -1) {
4188
+ // not submit yet, open otp
4189
+ const fieldName = (_e = (_d = listBlockAdded.find((x) => x.name === LEADGEN_BLOCK.WhatsappOtpBlock)) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.value;
4190
+ if ((_f = v[fieldName]) === null || _f === void 0 ? void 0 : _f.startsWith('+')) {
4191
+ newShowOtpPhone = {
4192
+ phone: v[fieldName],
4193
+ type: 'whatsapp',
4194
+ };
4195
+ }
4196
+ }
4197
+ if (listBlockAdded.findIndex((x) => x.name === LEADGEN_BLOCK.ZaloOtpBlock) > -1) {
4198
+ // not submit yet, open otp
4199
+ const fieldName = (_h = (_g = listBlockAdded.find((x) => x.name === LEADGEN_BLOCK.ZaloOtpBlock)) === null || _g === void 0 ? void 0 : _g.data) === null || _h === void 0 ? void 0 : _h.value;
4200
+ if ((_j = v[fieldName]) === null || _j === void 0 ? void 0 : _j.startsWith('+')) {
4201
+ newShowOtpPhone = {
4202
+ phone: v[fieldName],
4203
+ type: 'zalo',
4204
+ };
4205
+ }
4206
+ }
4207
+ if (newShowOtpPhone) {
4208
+ setIsSubmitLoading(true);
4209
+ Service.sendSMSOtpLead(newShowOtpPhone)
4210
+ .then((res) => {
4211
+ var _a;
4212
+ const respMessage = (_a = res === null || res === void 0 ? void 0 : res._messages) === null || _a === void 0 ? void 0 : _a[0];
4213
+ if (respMessage === 'This phone number was verified') {
4214
+ onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(formRef.current, v);
4215
+ return;
3170
4216
  }
3171
- };
3172
- window.addEventListener('scroll', LEAD_SCROLL_EVENT, {
3173
- passive: true,
4217
+ setShowOtpPhone(newShowOtpPhone);
4218
+ })
4219
+ .finally(() => {
4220
+ setIsSubmitLoading(false);
3174
4221
  });
4222
+ return;
3175
4223
  }
3176
- }
3177
- else {
3178
- LeadLog('🚧 No lead campaigns on current URL, tags');
3179
- }
4224
+ onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(formRef.current, v);
4225
+ })(e);
4226
+ }, 100);
4227
+ };
4228
+ const onOpenChange = (_open) => {
4229
+ setOpen(_open);
4230
+ if (!_open) {
4231
+ setTimeout(() => {
4232
+ onClose();
4233
+ }, 250);
3180
4234
  }
3181
- })
3182
- .catch((err) => {
3183
- LeadLog(`Lead error: `, err);
4235
+ };
4236
+ const { width: imageBackgroundWidth, height: imageBackgroundHeight, loaded: imageBackgroundLoaded, } = useImageSize(imageBackground);
4237
+ const { loaded: imageMobileLoaded } = useImageSize(imageMobile);
4238
+ const { loaded: imageDesktopLoaded } = useImageSize(imageDesktop);
4239
+ const renderAfterImageSizes = imageMobileLoaded &&
4240
+ imageDesktopLoaded &&
4241
+ (isFullscreen ? imageBackgroundLoaded : true);
4242
+ const ButtonSubmit = React.useMemo(() => {
4243
+ var _a;
4244
+ return !((_a = actionBlocks === null || actionBlocks === void 0 ? void 0 : actionBlocks.submitBlock) === null || _a === void 0 ? void 0 : _a.isHide) && (React__default["default"].createElement(core.Button, { size: "lg", id: "lead-submit", type: "submit", variant: "filled", className: "leadgen-btn leadgen-btn_action", loading: isSubmitLoading }, popUpSubmitText));
4245
+ }, [popUpSubmitText, isSubmitLoading, (_b = actionBlocks === null || actionBlocks === void 0 ? void 0 : actionBlocks.submitBlock) === null || _b === void 0 ? void 0 : _b.isHide]);
4246
+ const LinkButtonBlock = listBlockAdded.filter(({ name }) => name == LEADGEN_BLOCK.LinkButtonBlock);
4247
+ const ButtonLink = !!(LinkButtonBlock === null || LinkButtonBlock === void 0 ? void 0 : LinkButtonBlock.length) && (React__default["default"].createElement(React__default["default"].Fragment, null, LinkButtonBlock.map((item, index) => {
4248
+ var _a, _b, _c;
4249
+ return (React__default["default"].createElement(core.Button, { key: `${item.name}-${index}`, component: "a", href: (_a = item === null || item === void 0 ? void 0 : item.data) === null || _a === void 0 ? void 0 : _a.url, target: ((_b = item === null || item === void 0 ? void 0 : item.data) === null || _b === void 0 ? void 0 : _b.newtab) ? '_blank' : undefined, size: "lg", variant: "filled", className: "leadgen-btn leadgen-btn_action", color: primaryColor, onClick: () => {
4250
+ onClose === null || onClose === void 0 ? void 0 : onClose();
4251
+ onOtherSubmit === null || onOtherSubmit === void 0 ? void 0 : onOtherSubmit();
4252
+ } }, (_c = item === null || item === void 0 ? void 0 : item.data) === null || _c === void 0 ? void 0 : _c.value));
4253
+ })));
4254
+ const PopupHeader = showHeader && (React__default["default"].createElement("header", { className: core.clsx('leadgen-header', { 'leadgen-header_only': onlyHeader }) }, LEADGEN_SHOW_HEADER.includes(currentLayout) ? (React__default["default"].createElement(HeaderImage, { src: imageMobile, className: "lead-modal__image" })) : (React__default["default"].createElement(React__default["default"].Fragment, null,
4255
+ React__default["default"].createElement(HeaderImage, { src: imageDesktop, className: "le-only-desktop lead-modal__image" }),
4256
+ React__default["default"].createElement(HeaderImage, { src: imageMobile, className: "le-only-mobile lead-modal__image" })))));
4257
+ const PopupEmpty = showEmpty && (React__default["default"].createElement(EmptyComponent, { onClose: onClose, onContinue: () => setShowEmpty(false) }));
4258
+ const PopupForm = (React__default["default"].createElement(LeadFormProvider, { form: form },
4259
+ React__default["default"].createElement("form", { ref: formRef, className: "leadgen-form", onFocus: onFocus, onSubmit: middlewareOnSubmit },
4260
+ React__default["default"].createElement(FormContainer, { title: title, titleAlign: titleAlign, description: description, descriptionAlign: descriptionAlign, header: headerInsideFormContainer && PopupHeader, footer: hasForm ? ButtonSubmit : ButtonLink, "data-hidden-form": !hasForm },
4261
+ React__default["default"].createElement("div", { className: "leadgen-form_inner" },
4262
+ React__default["default"].createElement(LightboxFields, { listBlockAdded: listBlockAdded, popupId: popupId, locale: locale, onClose: onClose, onOtherSubmit: onOtherSubmit }))))));
4263
+ const PopupOtp = showOtpPhone && (React__default["default"].createElement(OtpBlock, { otpData: showOtpPhone, autoSendWhenOpen: false, onSuccess: () => {
4264
+ setShowOtpPhone(null);
4265
+ onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit(formRef.current, form.values);
4266
+ } }));
4267
+ const PopupThankYou = showThankyou && (React__default["default"].createElement(ThankyouPopup, { title: showThankyou.title, titleAlign: showThankyou.titleAlign, subtitle: showThankyou.subtitle, subtitleAlign: showThankyou.subtitleAlign, link: showThankyou.link, linkNewTab: showThankyou.linkNewTab, linkText: showThankyou.linkText, image: showThankyou.image }));
4268
+ const PopupContent = (React__default["default"].createElement("div", { className: core.clsx('leadgen-content', {
4269
+ 'leadgen-content_small': limitFieldsLightBoxB,
4270
+ }) },
4271
+ !headerInsideFormContainer && PopupHeader,
4272
+ !onlyHeader && (React__default["default"].createElement("div", { className: "leadgen-inner" },
4273
+ PopupThankYou,
4274
+ !showThankyou && (React__default["default"].createElement(React__default["default"].Fragment, null,
4275
+ PopupOtp,
4276
+ PopupEmpty,
4277
+ !(showOtpPhone || showEmpty) && PopupForm))))));
4278
+ const styleOverlay = React.useMemo(() => {
4279
+ let styleContent = `.leadgen-inner {background-repeat: no-repeat;background-size: cover;background-position:center;}`;
4280
+ if (isMobile && imageOverlayMobile) {
4281
+ styleContent += `.leadgen-inner {background-image: url(${imageOverlayMobile});}`;
4282
+ }
4283
+ if (!isMobile && imageOverlayDesktop) {
4284
+ styleContent += `@media screen and (min-width:768px) {.leadgen-inner {background-image: url(${imageOverlayDesktop});}}`;
4285
+ }
4286
+ return styleContent;
4287
+ }, [isMobile, imageOverlayDesktop, imageOverlayMobile]);
4288
+ const PopupWrapper = (React__default["default"].createElement(React__default["default"].Fragment, null,
4289
+ React__default["default"].createElement("style", { dangerouslySetInnerHTML: { __html: styleOverlay } }),
4290
+ React__default["default"].createElement("div", { className: core.clsx('leadgen-wrapper', {
4291
+ 'leadgen-wrapper_small': limitFieldsLightBoxB,
4292
+ }) },
4293
+ showButtonClose && (React__default["default"].createElement(CloseButton, { onClose: () => onOpenChange(false), containerClassName: "leadgen-close_btn" })),
4294
+ PopupContent)));
4295
+ const popupContainerClassName = core.clsx('leadgen', `leadgen-${currentLayout}`, {
4296
+ 'leadgen-lightbox': isLightBox,
4297
+ 'leadgen-inline': isInPage,
4298
+ 'leadgen-slider': isSlider,
3184
4299
  });
3185
- }
3186
- const LeadLog = (...params) => {
3187
- if (process.env.NODE_ENV !== 'production' ||
3188
- (process.env.NEXT_PUBLIC_DEPLOY_ENV &&
3189
- process.env.NEXT_PUBLIC_DEPLOY_ENV !== 'production') ||
3190
- (typeof localStorage !== 'undefined' &&
3191
- localStorage.getItem('hhg_debug') === 'true')) {
3192
- console.log(...params);
4300
+ const PopupContainer = isDrawer ? (React__default["default"].createElement(index$a.DrawerComponent, { fadeFromIndex: index$6.ZINDEX_SSO - 9e6, open: open, snapPoints: [0.8, 1], activeSnapPoint: snap, setActiveSnapPoint: setSnap, onOpenChange: onOpenChange, overlayClassName: popupContainerClassName, className: "leadgen-drawer" },
4301
+ PopupWrapper,
4302
+ React__default["default"].createElement("div", { style: { position: 'absolute', inset: 0, zIndex: snap === 1 ? -1 : 1 }, onClick: () => setSnap(1) }))) : (React__default["default"].createElement("div", { id: popupId, "data-popup-url": currentPath, "data-popup-type": "lightbox-inline", className: popupContainerClassName },
4303
+ isFullscreen ? (React__default["default"].createElement("img", { className: "le-only-desktop le-fullscreen-img", draggable: false, src: imageBackground || '', style: {
4304
+ aspectRatio: `${imageBackgroundWidth}/${imageBackgroundHeight}`,
4305
+ } })) : null,
4306
+ PopupWrapper));
4307
+ if (!renderAfterImageSizes)
4308
+ return null;
4309
+ if (isLightBox || isFullscreen || isSlider) {
4310
+ return PopupContainer;
4311
+ }
4312
+ else if (isSidebar) {
4313
+ return React__default["default"].createElement(SideBarLayout, { content: PopupContainer });
3193
4314
  }
4315
+ else if (isInline) {
4316
+ return (React__default["default"].createElement(InlineLayout, { content: PopupContainer, inlinePosition: extraFields.popupInlinePosition }));
4317
+ }
4318
+ return null;
4319
+ };
4320
+
4321
+ const SkinLayout = ({ popupId, link, linkText, linkNewTab, onClose, imageMobile, imageDesktop, currentLayout, onOtherSubmit, }) => {
4322
+ const currentPath = location.pathname;
4323
+ const { width: imageMobileWidth, height: imageMobileHeight, loaded: imageMobileLoaded, } = useImageSize(imageMobile);
4324
+ const { width: imageDesktopWidth, height: imageDesktopHeight, loaded: imageDesktopLoaded, } = useImageSize(imageDesktop);
4325
+ if (!imageMobileLoaded || !imageDesktopLoaded)
4326
+ return null;
4327
+ return (React__default["default"].createElement("div", { id: popupId, className: "lead-modal-wrapper", "data-popup-url": currentPath, "data-popup-type": "skin_ab" },
4328
+ currentLayout == 'SkinA' ? (React__default["default"].createElement("aside", { className: "le-only-desktop" },
4329
+ React__default["default"].createElement("div", { className: "le-skin-a-desktop" },
4330
+ React__default["default"].createElement("div", { style: { position: 'relative' } },
4331
+ React__default["default"].createElement("img", { src: imageDesktop, style: {
4332
+ aspectRatio: `${imageDesktopWidth}/${imageDesktopHeight}`,
4333
+ } }),
4334
+ React__default["default"].createElement("a", { style: {
4335
+ position: 'absolute',
4336
+ top: '75%',
4337
+ left: '50%',
4338
+ transform: 'translate(-50%, -50%)',
4339
+ textAlign: 'center',
4340
+ width: 'calc(100% - 15px)',
4341
+ }, href: link, target: linkNewTab ? 'blank' : '_parent' },
4342
+ React__default["default"].createElement("button", { onClick: onOtherSubmit, className: "le-joinbow-btn js-popup-other-submit" }, linkText)),
4343
+ React__default["default"].createElement(CloseButton, { onClose: onClose, containerClassName: "close-button-top-right" }))))) : currentLayout == 'SkinB' ? (React__default["default"].createElement("aside", { className: "le-only-desktop" },
4344
+ React__default["default"].createElement("div", { className: "" },
4345
+ React__default["default"].createElement("div", { style: { position: 'relative', zIndex: 10000 } },
4346
+ React__default["default"].createElement("img", { src: imageDesktop, style: {
4347
+ width: '100%',
4348
+ aspectRatio: `${imageDesktopWidth}/${imageDesktopHeight}`,
4349
+ } }),
4350
+ React__default["default"].createElement("a", { style: {
4351
+ position: 'absolute',
4352
+ top: '75%',
4353
+ left: '50%',
4354
+ transform: 'translate(-50%, -50%)',
4355
+ textAlign: 'center',
4356
+ width: '100%',
4357
+ }, href: link, target: linkNewTab ? 'blank' : '_parent' },
4358
+ React__default["default"].createElement("button", { onClick: onOtherSubmit, className: "le-joinbow-btn-mobile js-popup-other-submit" }, linkText)),
4359
+ React__default["default"].createElement(CloseButton, { containerClassName: "close-button-top-right", onClose: onClose }))))) : null,
4360
+ React__default["default"].createElement("aside", { className: "le-only-mobile" },
4361
+ React__default["default"].createElement("div", { className: "le-skin-mobile" },
4362
+ React__default["default"].createElement("div", { style: { position: 'relative' } },
4363
+ index$7.isVideo(imageMobile) ? (React__default["default"].createElement("video", { muted: true, autoPlay: true, loop: true },
4364
+ React__default["default"].createElement("source", { src: imageMobile, type: "video/mp4" }))) : (React__default["default"].createElement("img", { src: imageMobile, style: {
4365
+ width: '100%',
4366
+ aspectRatio: `${imageMobileWidth}/${imageMobileHeight}`,
4367
+ } })),
4368
+ React__default["default"].createElement("a", { style: {
4369
+ position: 'absolute',
4370
+ top: '82%',
4371
+ left: '50%',
4372
+ transform: 'translate(-50%, -50%)',
4373
+ textAlign: 'center',
4374
+ maxWidth: 'calc(100% - 15px)',
4375
+ }, href: link, target: linkNewTab ? 'blank' : '_parent' },
4376
+ React__default["default"].createElement("button", { onClick: onOtherSubmit, className: "le-joinbow-btn-mobile js-popup-other-submit" }, linkText)),
4377
+ React__default["default"].createElement(CloseButton, { containerClassName: "close-button-top-right", svgClassName: "le-mobile-btn", onClose: onClose }))))));
4378
+ };
4379
+
4380
+ // url: imageBlocks.imageMobile.data.url
4381
+ // newTab: imageBlocks.imageMobile.data.newtab
4382
+ // image: campaignShow.image
4383
+ // imageDestkop: campaignShow.image_desktop
4384
+ const TabLayout = ({ popupId, url, newTab, image, onClose, onOtherSubmit, }) => {
4385
+ const { width: imageWidth, height: imageHeight, loaded: imageLoaded, } = useImageSize(image);
4386
+ if (!imageLoaded)
4387
+ return null;
4388
+ return (React__default["default"].createElement("div", { id: popupId, className: "lead-modal-wrapper", "data-popup-url": location.pathname, "data-popup-type": "tab" },
4389
+ React__default["default"].createElement("div", { className: "le-tab-popup" },
4390
+ React__default["default"].createElement("div", { style: { position: 'relative' } },
4391
+ React__default["default"].createElement("a", { href: url, target: newTab ? 'blank' : '_parent', onClick: onOtherSubmit },
4392
+ React__default["default"].createElement("img", { className: "js-popup-other-submit", src: image, style: {
4393
+ aspectRatio: `${imageWidth}/${imageHeight}`,
4394
+ } })),
4395
+ React__default["default"].createElement(CloseButton, { onClose: onClose, containerClassName: "close-button-top-right" })))));
3194
4396
  };
3195
4397
 
3196
4398
  function getCategoryLevel(t = 'Xin chao {{category_2}} extra') {
@@ -3206,7 +4408,7 @@ function getCategoryLevel(t = 'Xin chao {{category_2}} extra') {
3206
4408
  }
3207
4409
  const NewLeadPopup = ({ campaign, action, onSubmit, onClose, showThankyou, locale, showEmpty, setShowEmpty, userInfo, }) => {
3208
4410
  var _a, _b;
3209
- const { apiUrl, siteDomain } = React.useContext(LeadGenContext);
4411
+ const { apiUrl, siteDomain } = React.useContext(LeadGenContext$1);
3210
4412
  React.useEffect(() => {
3211
4413
  const gaCookie = miscCookieHelper.getCookie('_ga') || null;
3212
4414
  fetch(`${apiUrl}api/campaign/${code}/impression`, {
@@ -3601,9 +4803,9 @@ const _LeadGen = ({ apiUrl: apiUrlProp, siteDomain, siteId, locale, primaryColor
3601
4803
  leadStartTimeRef.current = Date.now();
3602
4804
  }
3603
4805
  }, [showCampaign]);
3604
- return (React__default["default"].createElement(LeadGenContext.Provider, { value: { primaryColor, apiUrl, siteDomain, siteId, locale } },
4806
+ return (React__default["default"].createElement(LeadGenContext$1.Provider, { value: { primaryColor, apiUrl, siteDomain, siteId, locale } },
3605
4807
  React__default["default"].createElement(translationsContext.TranslationsContext.Provider, { value: { locale, values: getTranslations(locale) } }, children ? (React__default["default"].createElement(Component, { campaign: showCampaign, onSubmit: onSubmit, onClose: onClose, showThankyou: showThankyou, setShowThankyou: setShowThankyou, locale: locale, showEmpty: showEmpty, setShowEmpty: setShowEmpty, userInfo: userInfo }, children)) : (React__default["default"].createElement(core.Portal, { target: utils$1.getPopupWrapperDom() },
3606
- React__default["default"].createElement(core.Box, { sx: { position: 'fixed', zIndex: index$7.ZINDEX_SSO - 9e6 } },
4808
+ React__default["default"].createElement(core.Box, { sx: { position: 'fixed', zIndex: index$6.ZINDEX_SSO - 9e6 } },
3607
4809
  React__default["default"].createElement(core.Transition, { mounted: Boolean(((_a = showCampaign === null || showCampaign === void 0 ? void 0 : showCampaign.extra_fields) === null || _a === void 0 ? void 0 : _a.popupVersion) === '2.1'), transition: "fade", duration: 600, timingFunction: "ease" }, (styles) => {
3608
4810
  var _a;
3609
4811
  return (React__default["default"].createElement(core.Box, { style: styles }, ((_a = showCampaign === null || showCampaign === void 0 ? void 0 : showCampaign.extra_fields) === null || _a === void 0 ? void 0 : _a.popupVersion) === '2.1' && (React__default["default"].createElement(React__default["default"].Fragment, null,
@@ -3622,3 +4824,4 @@ LeadGen.OtpForm = OtpBlock$1;
3622
4824
  LeadGen.Close = Close.Close;
3623
4825
 
3624
4826
  exports.LeadGen = LeadGen;
4827
+ exports.LeadGenSubscriptionBox = LeadGenSubscriptionBox;