@bikdotai/bik-widgets 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/.eslintrc +22 -0
  2. package/.eslintrc.js +19 -0
  3. package/.github/workflows/main.yml +293 -0
  4. package/.prettierignore +13 -0
  5. package/.prettierrc +10 -0
  6. package/README.md +128 -0
  7. package/cypress/apiHelper/endpoints.ts +21 -0
  8. package/cypress/apiHelper/executor.ts +42 -0
  9. package/cypress/e2e/bottomDrawer.cy.ts +49 -0
  10. package/cypress/e2e/directReward.cy.ts +67 -0
  11. package/cypress/e2e/scratchTheCard.cy.ts +68 -0
  12. package/cypress/e2e/stw.cy.ts +82 -0
  13. package/cypress/e2e/waRedirection.cy.ts +46 -0
  14. package/cypress/fixtures/payloads.ts +330 -0
  15. package/cypress/support/commands.ts +37 -0
  16. package/cypress/support/e2e.ts +20 -0
  17. package/cypress.staging.config.ts +23 -0
  18. package/jsconfig.json +6 -0
  19. package/localtest.sh +10 -0
  20. package/log-server.js +86 -0
  21. package/package.json +79 -0
  22. package/postcss.config.js +8 -0
  23. package/src/Globals.d.ts +2 -0
  24. package/src/assets/lottie/santa.json +11722 -0
  25. package/src/assets/svg/CalendarClockIcon.tsx +30 -0
  26. package/src/assets/svg/CalendarIcon.tsx +24 -0
  27. package/src/assets/svg/CheckIcon.tsx +17 -0
  28. package/src/assets/svg/ChevronIcon.tsx +21 -0
  29. package/src/assets/svg/Close.tsx +39 -0
  30. package/src/assets/svg/Confetti.tsx +140 -0
  31. package/src/assets/svg/Copy.tsx +26 -0
  32. package/src/assets/svg/DropdownCheckIcon.tsx +35 -0
  33. package/src/assets/svg/ErrorIcon.tsx +27 -0
  34. package/src/assets/svg/RadioIcon.tsx +25 -0
  35. package/src/assets/svg/UncheckedCheckboxIcon.tsx +28 -0
  36. package/src/assets/svg/UncheckedRadioIcon.tsx +26 -0
  37. package/src/assets/svg/info.tsx +30 -0
  38. package/src/assets/svg/qrcode.svg +14 -0
  39. package/src/bootstrap.tsx +8 -0
  40. package/src/components/CtaCard/index.tsx +37 -0
  41. package/src/components/CtaCard/preview.module.css +32 -0
  42. package/src/components/CtaCard/style.module.css +32 -0
  43. package/src/components/EmailInput/emailInputBox.tsx +95 -0
  44. package/src/components/Fab/index.tsx +224 -0
  45. package/src/components/Fab/preview.module.css +28 -0
  46. package/src/components/Fab/style.module.css +37 -0
  47. package/src/components/Icons/Call.tsx +26 -0
  48. package/src/components/Icons/Cross.tsx +24 -0
  49. package/src/components/Icons/Gmail.tsx +61 -0
  50. package/src/components/Icons/Instagram.tsx +60 -0
  51. package/src/components/Icons/LiveChat.tsx +43 -0
  52. package/src/components/Icons/Messenger.tsx +57 -0
  53. package/src/components/Icons/Send.tsx +22 -0
  54. package/src/components/Icons/Whatsapp.tsx +24 -0
  55. package/src/components/Shimmer/index.tsx +12 -0
  56. package/src/components/Shimmer/style.module.css +37 -0
  57. package/src/components/SmsInput/smsInputBox.tsx +135 -0
  58. package/src/components/UserDetailsV2/userDetailsV2.desktop.module.css +52 -0
  59. package/src/components/UserDetailsV2/userDetailsV2.mobile.module.css +52 -0
  60. package/src/components/UserDetailsV2/userDetailsV2.module.css +81 -0
  61. package/src/components/UserDetailsV2/userDetailsV2.tsx +527 -0
  62. package/src/components/WhatsappInput/Spinner.tsx +26 -0
  63. package/src/components/WhatsappInput/whatsappInput.module.css +106 -0
  64. package/src/components/WhatsappInput/whatsappInputBox.tsx +155 -0
  65. package/src/components/WhatsappInput/whatsappInputPreviewDesktop.module.css +71 -0
  66. package/src/components/WhatsappInput/whatsappInputPreviewMobile.module.css +65 -0
  67. package/src/components/checkbox/checkbox.module.css +19 -0
  68. package/src/components/checkbox/checkbox.tsx +88 -0
  69. package/src/components/countryCodePicker/countriesDropdown.module.css +77 -0
  70. package/src/components/countryCodePicker/countriesDropdown.tsx +81 -0
  71. package/src/components/couponDetails/coupon.module.css +208 -0
  72. package/src/components/couponDetails/coupon.tsx +210 -0
  73. package/src/components/couponDetails/couponPreviewDesktop.module.css +158 -0
  74. package/src/components/couponDetails/couponPreviewMobile.module.css +164 -0
  75. package/src/components/index.ts +3 -0
  76. package/src/components/inputComponents/Checkbox.module.css +197 -0
  77. package/src/components/inputComponents/Checkbox.tsx +85 -0
  78. package/src/components/inputComponents/DatePicker.module.css +565 -0
  79. package/src/components/inputComponents/DatePicker.tsx +278 -0
  80. package/src/components/inputComponents/Dropdown.module.css +796 -0
  81. package/src/components/inputComponents/Dropdown.tsx +630 -0
  82. package/src/components/inputComponents/InputBox.module.css +401 -0
  83. package/src/components/inputComponents/InputBox.tsx +209 -0
  84. package/src/components/selectedCountry/selectedCountry.module.css +76 -0
  85. package/src/components/selectedCountry/selectedCountry.tsx +76 -0
  86. package/src/components/selectedCountry/selectedCountryPreviewDesktop.module.css +56 -0
  87. package/src/components/selectedCountry/selectedCountryPreviewMobile.module.css +57 -0
  88. package/src/components/userDetailsForm/RenderCustomFields.tsx +333 -0
  89. package/src/components/userDetailsForm/userDetailsForm.tsx +675 -0
  90. package/src/hooks/index.ts +4 -0
  91. package/src/hooks/useExitIntent.ts +452 -0
  92. package/src/hooks/useIsMobile.tsx +21 -0
  93. package/src/hooks/useMessageEvent.ts +8 -0
  94. package/src/hooks/useTriggeredIntentDetails.ts +43 -0
  95. package/src/hooks/useUrlListerner.ts +30 -0
  96. package/src/hooks/useWebSocketLogger.ts +59 -0
  97. package/src/hooks/useWindowEvent.ts +8 -0
  98. package/src/icons/copyIcon.tsx +26 -0
  99. package/src/icons/crossIconDesktop.tsx +20 -0
  100. package/src/icons/crossIconMobile.tsx +20 -0
  101. package/src/index.html +30 -0
  102. package/src/index.ts +32 -0
  103. package/src/index.tsx +1 -0
  104. package/src/repo/widgetRepo.ts +21 -0
  105. package/src/types/customFields.ts +73 -0
  106. package/src/utilities/cookie.ts +70 -0
  107. package/src/utilities/customFieldTypeMapping.ts +67 -0
  108. package/src/utilities/customFieldValidation.ts +201 -0
  109. package/src/utilities/encryption.ts +21 -0
  110. package/src/utilities/exitIntentUtils.ts +31 -0
  111. package/src/utilities/global.css +11 -0
  112. package/src/utilities/languageUtilities.ts +235 -0
  113. package/src/utilities/localRunner.js +26 -0
  114. package/src/utilities/localRunner.ts +27 -0
  115. package/src/utilities/localStorage.ts +40 -0
  116. package/src/utilities/script.tsx +15 -0
  117. package/src/utilities/stringUtils.ts +5 -0
  118. package/src/utilities/styleUtils.ts +134 -0
  119. package/src/utilities/variables.ts +11 -0
  120. package/src/utilities/widgetUtils.js +342 -0
  121. package/src/utilities/widgetUtils.ts +313 -0
  122. package/src/widgets/BottomDrawer/config.ts +41 -0
  123. package/src/widgets/BottomDrawer/index.tsx +116 -0
  124. package/src/widgets/BottomDrawer/modal.tsx +286 -0
  125. package/src/widgets/BottomDrawer/preview.module.css +122 -0
  126. package/src/widgets/BottomDrawer/previewMobile.module.css +124 -0
  127. package/src/widgets/BottomDrawer/style.module.css +279 -0
  128. package/src/widgets/CaptivateBanner/captivateBanner.tsx +200 -0
  129. package/src/widgets/CaptivateBanner/config.ts +72 -0
  130. package/src/widgets/CaptivateBanner/index.tsx +204 -0
  131. package/src/widgets/CaptivateBanner/previewDesktop.module.css +51 -0
  132. package/src/widgets/CaptivateBanner/previewMobile.module.css +51 -0
  133. package/src/widgets/CaptivateBanner/style.module.css +77 -0
  134. package/src/widgets/CaptivateBanner/utils.ts +104 -0
  135. package/src/widgets/CentrallyAlignedPopup/config.ts +42 -0
  136. package/src/widgets/CentrallyAlignedPopup/index.tsx +109 -0
  137. package/src/widgets/CentrallyAlignedPopup/modal.tsx +269 -0
  138. package/src/widgets/CentrallyAlignedPopup/preview.module.css +153 -0
  139. package/src/widgets/CentrallyAlignedPopup/previewMobile.module.css +153 -0
  140. package/src/widgets/CentrallyAlignedPopup/style.module.css +283 -0
  141. package/src/widgets/DirectReward/components/couponDetails.tsx +265 -0
  142. package/src/widgets/DirectReward/components/userDetails.tsx +117 -0
  143. package/src/widgets/DirectReward/config.ts +186 -0
  144. package/src/widgets/DirectReward/directReward.tsx +350 -0
  145. package/src/widgets/DirectReward/index.tsx +579 -0
  146. package/src/widgets/DirectReward/previewStyles/thankYouPreviewDesktop.module.css +276 -0
  147. package/src/widgets/DirectReward/previewStyles/thankYouPreviewMobile.module.css +303 -0
  148. package/src/widgets/DirectReward/previewStyles/userDetailsPreviewDesktop.module.css +511 -0
  149. package/src/widgets/DirectReward/previewStyles/userDetailsPreviewMobile.module.css +462 -0
  150. package/src/widgets/DirectReward/style.module.css +836 -0
  151. package/src/widgets/ExitIntentHook.tsx +28 -0
  152. package/src/widgets/STW/api.ts +70 -0
  153. package/src/widgets/STW/components/svgFactory.tsx +44 -0
  154. package/src/widgets/STW/config.ts +193 -0
  155. package/src/widgets/STW/context.ts +7 -0
  156. package/src/widgets/STW/couponDetails.tsx +121 -0
  157. package/src/widgets/STW/index.tsx +733 -0
  158. package/src/widgets/STW/previewStyles/thankyouPreviewDesktop.module.css +215 -0
  159. package/src/widgets/STW/previewStyles/thankyouPreviewMobile.module.css +205 -0
  160. package/src/widgets/STW/previewStyles/userInputsPreviewDesktop.module.css +732 -0
  161. package/src/widgets/STW/previewStyles/userInputsPreviewMobile.module.css +661 -0
  162. package/src/widgets/STW/previewStyles/wheelPreviewDesktop.module.css +498 -0
  163. package/src/widgets/STW/previewStyles/wheelPreviewMobile.module.css +497 -0
  164. package/src/widgets/STW/stw1.tsx +119 -0
  165. package/src/widgets/STW/stw2Components/wheelDesign.tsx +183 -0
  166. package/src/widgets/STW/stw2Pages/couponDetails.tsx +72 -0
  167. package/src/widgets/STW/stw2Pages/stw2.tsx +212 -0
  168. package/src/widgets/STW/stw2Pages/style.module.css +1226 -0
  169. package/src/widgets/STW/stw2Pages/userDetails.tsx +86 -0
  170. package/src/widgets/STW/stw2Pages/wheel.tsx +117 -0
  171. package/src/widgets/STW/stw2PreviewStyles/thankyouPreviewDesktop.module.css +835 -0
  172. package/src/widgets/STW/stw2PreviewStyles/thankyouPreviewMobile.module.css +787 -0
  173. package/src/widgets/STW/stw2PreviewStyles/userInputsPreviewDesktop.module.css +867 -0
  174. package/src/widgets/STW/stw2PreviewStyles/userInputsPreviewMobile.module.css +798 -0
  175. package/src/widgets/STW/stw2PreviewStyles/wheelPreviewDesktop.module.css +572 -0
  176. package/src/widgets/STW/stw2PreviewStyles/wheelPreviewMobile.module.css +559 -0
  177. package/src/widgets/STW/style.module.css +901 -0
  178. package/src/widgets/STW/userDetails.tsx +150 -0
  179. package/src/widgets/STW/utility.ts +664 -0
  180. package/src/widgets/STW/wheel.tsx +304 -0
  181. package/src/widgets/ScratchCard/ScratchOff/scratchOff.tsx +157 -0
  182. package/src/widgets/ScratchCard/config.ts +152 -0
  183. package/src/widgets/ScratchCard/globalStyle.module.css +931 -0
  184. package/src/widgets/ScratchCard/index.tsx +546 -0
  185. package/src/widgets/ScratchCard/modal.tsx +225 -0
  186. package/src/widgets/ScratchCard/preview.module.css +250 -0
  187. package/src/widgets/ScratchCard/previewMobile.module.css +247 -0
  188. package/src/widgets/ScratchCard/previewStyles/userDetailsPreviewDesktop.module.css +537 -0
  189. package/src/widgets/ScratchCard/previewStyles/userDetailsPreviewMobile.module.css +463 -0
  190. package/src/widgets/ScratchCard/style.module.css +220 -0
  191. package/src/widgets/ShopifyForm/config.ts +168 -0
  192. package/src/widgets/ShopifyForm/index.tsx +214 -0
  193. package/src/widgets/ShopifyForm/previewDesktop.module.css +117 -0
  194. package/src/widgets/ShopifyForm/previewMobile.module.css +131 -0
  195. package/src/widgets/ShopifyForm/shopifyForm.tsx +445 -0
  196. package/src/widgets/ShopifyForm/style.module.css +161 -0
  197. package/src/widgets/SingleButtonRedirection/config.ts +47 -0
  198. package/src/widgets/SingleButtonRedirection/index.tsx +121 -0
  199. package/src/widgets/WebStories/config.ts +105 -0
  200. package/src/widgets/WebStories/index.css +3 -0
  201. package/src/widgets/WebStories/index.tsx +282 -0
  202. package/src/widgets/WebStories/style.module.css +26 -0
  203. package/src/widgets/index.tsx +3 -0
  204. package/src/widgets/utility.ts +31 -0
  205. package/tsconfig.json +12 -0
  206. package/webpack.config.js +239 -0
@@ -0,0 +1,235 @@
1
+ import { ISO_CODES_VALUES, LANGUAGE_VALUES } from '@bikdotai/bik-models/dm';
2
+
3
+ export class LanguageUtils {
4
+ getStoreLanguage(isoCode: ISO_CODES_VALUES) {
5
+ return Object.values(LANGUAGE_VALUES).includes(ISO_CODES_VALUES[isoCode])
6
+ ? ISO_CODES_VALUES[isoCode]
7
+ : ISO_CODES_VALUES.en;
8
+ }
9
+
10
+ getLanguageDirection(language: LANGUAGE_VALUES) {
11
+ return language === LANGUAGE_VALUES.ARABIC ? 'rtl' : 'ltr';
12
+ }
13
+
14
+ private getValidationMessage(
15
+ language: LANGUAGE_VALUES,
16
+ messages: { [key in LANGUAGE_VALUES]?: string },
17
+ defaultMessage: string,
18
+ ) {
19
+ return messages[language] || defaultMessage;
20
+ }
21
+
22
+ getEmailValidationMessage(language: LANGUAGE_VALUES) {
23
+ return this.getValidationMessage(
24
+ language,
25
+ {
26
+ [LANGUAGE_VALUES.ARABIC]: 'يرجى إدخال عنوان بريد إلكتروني صالح',
27
+ [LANGUAGE_VALUES.FRENCH]: 'Veuillez entrer une adresse e-mail valide',
28
+ [LANGUAGE_VALUES.SPANISH]:
29
+ 'Por favor, introduce una dirección de correo electrónico válida',
30
+ [LANGUAGE_VALUES.MALAY]: 'Sila masukkan alamat emel yang sah',
31
+ },
32
+ 'Please enter a valid email address',
33
+ );
34
+ }
35
+
36
+ getPhoneNumberValidationMessage(language: LANGUAGE_VALUES) {
37
+ return this.getValidationMessage(
38
+ language,
39
+ {
40
+ [LANGUAGE_VALUES.ARABIC]: 'يرجى إدخال رقم هاتف صالح',
41
+ [LANGUAGE_VALUES.FRENCH]:
42
+ 'Veuillez entrer un numéro de téléphone valide',
43
+ [LANGUAGE_VALUES.SPANISH]:
44
+ 'Por favor, introduce un número de teléfono válido',
45
+ [LANGUAGE_VALUES.MALAY]: 'Sila masukkan nombor telefon yang sah',
46
+ },
47
+ 'Please enter a valid phone number',
48
+ );
49
+ }
50
+
51
+ getRequiredFieldMessage(language: LANGUAGE_VALUES) {
52
+ return this.getValidationMessage(
53
+ language,
54
+ {
55
+ [LANGUAGE_VALUES.ARABIC]: 'هذه الخانة مطلوبه',
56
+ [LANGUAGE_VALUES.FRENCH]: 'Ce champ est requis',
57
+ [LANGUAGE_VALUES.SPANISH]: 'Este campo es obligatorio',
58
+ [LANGUAGE_VALUES.MALAY]: 'Ruangan ini diperlukan',
59
+ },
60
+ 'This field is required',
61
+ );
62
+ }
63
+
64
+ getPrivacyPolicyAcceptanceMessage(language: LANGUAGE_VALUES) {
65
+ return this.getValidationMessage(
66
+ language,
67
+ {
68
+ [LANGUAGE_VALUES.ARABIC]: 'يرجى قبول سياسة الخصوصية للمتابعة',
69
+ [LANGUAGE_VALUES.FRENCH]:
70
+ 'Veuillez accepter la politique de confidentialité pour continuer',
71
+ [LANGUAGE_VALUES.SPANISH]:
72
+ 'Por favor, acepte la política de privacidad para continuar',
73
+ [LANGUAGE_VALUES.MALAY]: 'Sila terima dasar privasi untuk meneruskan',
74
+ },
75
+ 'Please accept the privacy policy to proceed',
76
+ );
77
+ }
78
+
79
+ getOptionalEmailTitle(language: LANGUAGE_VALUES) {
80
+ return this.getValidationMessage(
81
+ language,
82
+ {
83
+ [LANGUAGE_VALUES.ARABIC]: 'البريد الإلكتروني (اختياري)',
84
+ [LANGUAGE_VALUES.FRENCH]: 'E-mail (facultatif)',
85
+ [LANGUAGE_VALUES.SPANISH]: 'Correo electrónico (opcional)',
86
+ [LANGUAGE_VALUES.MALAY]: 'E-mel (Pilihan)',
87
+ },
88
+ 'Email (Optional)',
89
+ );
90
+ }
91
+
92
+ getOptionalPhoneNumberTitle(language: LANGUAGE_VALUES) {
93
+ return this.getValidationMessage(
94
+ language,
95
+ {
96
+ [LANGUAGE_VALUES.ARABIC]: 'رقم الهاتف (اختياري)',
97
+ [LANGUAGE_VALUES.FRENCH]: 'Numéro de téléphone (facultatif)',
98
+ [LANGUAGE_VALUES.SPANISH]: 'Número de teléfono (opcional)',
99
+ [LANGUAGE_VALUES.MALAY]: 'Nombor telefon (Pilihan)',
100
+ },
101
+ 'Phone Number (Optional)',
102
+ );
103
+ }
104
+
105
+ getOptionalWhatsappNumberTitle(language: LANGUAGE_VALUES) {
106
+ return this.getValidationMessage(
107
+ language,
108
+ {
109
+ [LANGUAGE_VALUES.ARABIC]: 'رقم الواتساب (اختياري)',
110
+ [LANGUAGE_VALUES.FRENCH]: 'Numéro WhatsApp (facultatif)',
111
+ [LANGUAGE_VALUES.SPANISH]: 'Número de WhatsApp (opcional)',
112
+ [LANGUAGE_VALUES.MALAY]: 'Nombor WhatsApp (Pilihan)',
113
+ },
114
+ 'Whatsapp Number (Optional)',
115
+ );
116
+ }
117
+
118
+ getPoweredByMessage(language: LANGUAGE_VALUES) {
119
+ return this.getValidationMessage(
120
+ language,
121
+ {
122
+ [LANGUAGE_VALUES.ARABIC]: 'مشغل بواسطة',
123
+ [LANGUAGE_VALUES.FRENCH]: 'Propulsé par',
124
+ [LANGUAGE_VALUES.SPANISH]: 'Desarrollado por',
125
+ [LANGUAGE_VALUES.MALAY]: 'Dikuasakan oleh',
126
+ },
127
+ 'Powered by',
128
+ );
129
+ }
130
+
131
+ getEmailPlaceholder(language: LANGUAGE_VALUES, skipLabel: boolean) {
132
+ const placeholders = {
133
+ [LANGUAGE_VALUES.ARABIC]: skipLabel
134
+ ? 'أدخل بريدك الإلكتروني'
135
+ : 'مثل: abc@gmail.com',
136
+ [LANGUAGE_VALUES.FRENCH]: skipLabel
137
+ ? 'Entrez votre email'
138
+ : 'ex: abc@gmail.com',
139
+ [LANGUAGE_VALUES.SPANISH]: skipLabel
140
+ ? 'Introduce tu correo electrónico'
141
+ : 'ej: abc@gmail.com',
142
+ [LANGUAGE_VALUES.MALAY]: skipLabel
143
+ ? 'Masukkan e-mel anda'
144
+ : 'cth: abc@gmail.com',
145
+ };
146
+ return (
147
+ placeholders[language] ||
148
+ (skipLabel ? 'Enter your email' : 'eg: abc@gmail.com')
149
+ );
150
+ }
151
+
152
+ getPhoneNumberPlaceholder(language: LANGUAGE_VALUES) {
153
+ const placeholders = {
154
+ [LANGUAGE_VALUES.ARABIC]: 'مثل: 9876543210',
155
+ [LANGUAGE_VALUES.FRENCH]: 'ex: 9876543210',
156
+ [LANGUAGE_VALUES.SPANISH]: 'ej: 9876543210',
157
+ [LANGUAGE_VALUES.MALAY]: 'cth: 9876543210',
158
+ };
159
+ return placeholders[language] || 'eg: 9876543210';
160
+ }
161
+
162
+ getCountryPlaceholder(language: LANGUAGE_VALUES) {
163
+ const placeholders = {
164
+ [LANGUAGE_VALUES.ARABIC]: 'البلد',
165
+ [LANGUAGE_VALUES.FRENCH]: 'Pays',
166
+ [LANGUAGE_VALUES.SPANISH]: 'País',
167
+ [LANGUAGE_VALUES.MALAY]: 'Negara',
168
+ };
169
+ return placeholders[language] || 'Country';
170
+ }
171
+
172
+ getWhatsappNumberPlaceholder(language: LANGUAGE_VALUES, skipLabel: boolean) {
173
+ const placeholders = {
174
+ [LANGUAGE_VALUES.ARABIC]: skipLabel
175
+ ? 'أدخل رقم الواتساب'
176
+ : 'مثل: 9876543210',
177
+ [LANGUAGE_VALUES.FRENCH]: skipLabel
178
+ ? 'Entrez votre numéro WhatsApp'
179
+ : 'ex: 9876543210',
180
+ [LANGUAGE_VALUES.SPANISH]: skipLabel
181
+ ? 'Introduce tu número de WhatsApp'
182
+ : 'ej: 9876543210',
183
+ [LANGUAGE_VALUES.MALAY]: skipLabel
184
+ ? 'Masukkan nombor WhatsApp anda'
185
+ : 'cth: 9876543210',
186
+ };
187
+ return (
188
+ placeholders[language] ||
189
+ (skipLabel ? 'Enter whatsapp number' : 'eg: 9876543210')
190
+ );
191
+ }
192
+
193
+ getWhatsappNumberTitle(language: LANGUAGE_VALUES) {
194
+ const titles = {
195
+ [LANGUAGE_VALUES.ARABIC]: 'رقم الواتساب',
196
+ [LANGUAGE_VALUES.FRENCH]: 'Numéro WhatsApp',
197
+ [LANGUAGE_VALUES.SPANISH]: 'Número de WhatsApp',
198
+ [LANGUAGE_VALUES.MALAY]: 'Nombor WhatsApp',
199
+ };
200
+ return titles[language] || 'Whatsapp Number';
201
+ }
202
+
203
+ getCopiedMessage(language: LANGUAGE_VALUES) {
204
+ return this.getValidationMessage(
205
+ language,
206
+ {
207
+ [LANGUAGE_VALUES.ARABIC]: 'تم النسخ',
208
+ [LANGUAGE_VALUES.FRENCH]: 'Copié',
209
+ [LANGUAGE_VALUES.SPANISH]: 'Copiado',
210
+ [LANGUAGE_VALUES.MALAY]: 'Disalin',
211
+ },
212
+ 'Copied!',
213
+ );
214
+ }
215
+
216
+ getPrivacyPolicyText(language: LANGUAGE_VALUES) {
217
+ const translations = {
218
+ [LANGUAGE_VALUES.ARABIC]: 'لقد قرأت ووافقت على',
219
+ [LANGUAGE_VALUES.FRENCH]: "J'ai lu et accepté la",
220
+ [LANGUAGE_VALUES.SPANISH]: 'He leído y acepto la',
221
+ [LANGUAGE_VALUES.MALAY]: 'Saya telah membaca dan bersetuju dengan',
222
+ };
223
+ return translations[language] || 'I have read and agree to the';
224
+ }
225
+
226
+ getPrivacyPolicyLabel(language: LANGUAGE_VALUES) {
227
+ const labels = {
228
+ [LANGUAGE_VALUES.ARABIC]: 'سياسة الخصوصية',
229
+ [LANGUAGE_VALUES.FRENCH]: 'politique de confidentialité',
230
+ [LANGUAGE_VALUES.SPANISH]: 'política de privacidad',
231
+ [LANGUAGE_VALUES.MALAY]: 'dasar privasi',
232
+ };
233
+ return labels[language] || 'Privacy Policy';
234
+ }
235
+ }
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+ exports.__esModule = true;
3
+ var widgetUtils_1 = require('./widgetUtils');
4
+ var widgetUtils = new widgetUtils_1.WidgetUtils();
5
+ var shouldShow = widgetUtils.showWidget(
6
+ {
7
+ currentUrl: '/products/leather-anchor',
8
+ customUrls: {
9
+ '/*': [
10
+ {
11
+ widgetId: 'DRfXWegtNnHMvHK8axl2',
12
+ fabPosition: widgetUtils_1.FAB_POSITION.POP_UP,
13
+ },
14
+ ],
15
+ '/': [
16
+ {
17
+ widgetId: 'R8RBWPdVtjHbOdAnF7pa',
18
+ fabPosition: widgetUtils_1.FAB_POSITION.POP_UP,
19
+ },
20
+ ],
21
+ },
22
+ currentWidgetId: 'DRfXWegtNnHMvHK8axl2',
23
+ },
24
+ false,
25
+ );
26
+ console.log('res:', shouldShow);
@@ -0,0 +1,27 @@
1
+ import { FAB_POSITION, WidgetUtils } from './widgetUtils';
2
+
3
+ const widgetUtils = new WidgetUtils();
4
+
5
+ const shouldShow = widgetUtils.showWidget(
6
+ {
7
+ currentUrl: '/products/leather-anchor',
8
+ customUrls: {
9
+ '/*': [
10
+ {
11
+ widgetId: 'DRfXWegtNnHMvHK8axl2',
12
+ fabPosition: FAB_POSITION.POP_UP,
13
+ },
14
+ ],
15
+ '/': [
16
+ {
17
+ widgetId: 'R8RBWPdVtjHbOdAnF7pa',
18
+ fabPosition: FAB_POSITION.POP_UP,
19
+ },
20
+ ],
21
+ },
22
+ currentWidgetId: 'DRfXWegtNnHMvHK8axl2',
23
+ },
24
+ false,
25
+ );
26
+
27
+ console.log('res:', shouldShow);
@@ -0,0 +1,40 @@
1
+ import { encryptBikData } from './encryption';
2
+
3
+ export enum LOCAL_STORAGE_KEYS {
4
+ BIK_CHAT_WIDGET = 'bik-chat-widget',
5
+ BIK_PHONE_NUMBER = 'bik-phone-number',
6
+ BIK_EMAIL = 'bik-email',
7
+ BIK_COUPON_DISBURSED = 'bik-coupon-disbursed',
8
+ BIK_TRIGGERED_INTENT_DETAILS = 'bik-triggered-intent-details',
9
+ }
10
+
11
+ export function storeObjectInLocalStorage(
12
+ key: string,
13
+ data: any,
14
+ override = false,
15
+ ) {
16
+ try {
17
+ if (override || !localStorage.getItem(key)) {
18
+ const jsonData = JSON.stringify(data);
19
+ localStorage.setItem(key, encryptBikData(jsonData));
20
+ }
21
+ return;
22
+ } catch (error) {
23
+ return;
24
+ }
25
+ }
26
+
27
+ export function storeDataInLocalStorage(
28
+ key: string,
29
+ data: any,
30
+ override = false,
31
+ ) {
32
+ try {
33
+ if ((override || !localStorage.getItem(key)) && data) {
34
+ localStorage.setItem(key, encryptBikData(data));
35
+ }
36
+ return;
37
+ } catch (error) {
38
+ return;
39
+ }
40
+ }
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import 'utilities/global.css';
3
+ import ReactDOM from 'react-dom';
4
+
5
+ function includeMe(Component) {
6
+ let wrapper = document.createElement('div');
7
+ const config = JSON.parse('{{{bikConfig}}}');
8
+ wrapper.id = `bik-widget-wrapper-${config.id}`;
9
+ wrapper.className = 'bik-widget__outer-wrapper';
10
+ document.body.appendChild(wrapper);
11
+ const widget = document.getElementById(`bik-widget-wrapper-${config.id}`);
12
+ ReactDOM.render(<Component {...config} />, widget);
13
+ }
14
+
15
+ export default includeMe;
@@ -0,0 +1,5 @@
1
+ export function toSnakeCase(words) {
2
+ let snakeCase = words.replace(/\s+/g, '_');
3
+ snakeCase = snakeCase.toLowerCase();
4
+ return snakeCase;
5
+ }
@@ -0,0 +1,134 @@
1
+ import { getStyles } from '../widgets/utility';
2
+ import CaptivateBanner from '../widgets/CaptivateBanner';
3
+
4
+ export const injectFontLink = fontLinks => {
5
+ fontLinks?.map(fontLink => {
6
+ const preConnectGoogleAPi = document.createElement('link');
7
+ preConnectGoogleAPi.rel = 'preconnect';
8
+ const preConnectFontsStatic = document.createElement('link');
9
+ preConnectFontsStatic.rel = 'preconnect';
10
+ preConnectFontsStatic.type = 'crossorigin';
11
+ const link = document.createElement('link');
12
+ link.rel = 'stylesheet';
13
+ link.href = fontLink;
14
+ document.head.appendChild(link);
15
+ document.head.appendChild(preConnectGoogleAPi);
16
+ document.head.appendChild(preConnectFontsStatic);
17
+ });
18
+ };
19
+
20
+ export const getStylesWrapper = url => {
21
+ return new Promise(function (resolve, reject) {
22
+ const fn = getStyles.bind(this, url);
23
+ resolve(fn);
24
+ });
25
+ };
26
+
27
+ export const ComponentStyleMap = {
28
+ 'Spin the wheel popup': {
29
+ globalStyle: getStylesWrapper('./STW/style.module.css'),
30
+ userInputPreviewMobile: getStylesWrapper(
31
+ './STW/previewStyles/userInputsPreviewMobile.module.css',
32
+ ),
33
+ userInputPreviewDesktop: getStylesWrapper(
34
+ './STW/previewStyles/userInputsPreviewDesktop.module.css',
35
+ ),
36
+ wheelPreviewDesktop: getStylesWrapper(
37
+ './STW/previewStyles/wheelPreviewDesktop.module.css',
38
+ ),
39
+ wheelPreviewMobile: getStylesWrapper(
40
+ './STW/previewStyles/wheelPreviewMobile.module.css',
41
+ ),
42
+ thankyouPreviewMobile: getStylesWrapper(
43
+ './STW/previewStyles/thankyouPreviewMobile.module.css',
44
+ ),
45
+ thankyouPreviewDesktop: getStylesWrapper(
46
+ './STW/previewStyles/thankyouPreviewDesktop.module.css',
47
+ ),
48
+ },
49
+ 'Spin the wheel popup 2': {
50
+ globalStyle: getStylesWrapper('./STW/stw2Pages/style.module.css'),
51
+ userInputPreviewMobile: getStylesWrapper(
52
+ './STW/stw2PreviewStyles/userInputsPreviewMobile.module.css',
53
+ ),
54
+ userInputPreviewDesktop: getStylesWrapper(
55
+ './STW/stw2PreviewStyles/userInputsPreviewDesktop.module.css',
56
+ ),
57
+ wheelPreviewDesktop: getStylesWrapper(
58
+ './STW/stw2PreviewStyles/wheelPreviewDesktop.module.css',
59
+ ),
60
+ wheelPreviewMobile: getStylesWrapper(
61
+ './STW/stw2PreviewStyles/wheelPreviewMobile.module.css',
62
+ ),
63
+ thankyouPreviewDesktop: getStylesWrapper(
64
+ './STW/stw2PreviewStyles/thankyouPreviewDesktop.module.css',
65
+ ),
66
+ thankyouPreviewMobile: getStylesWrapper(
67
+ './STW/stw2PreviewStyles/thankyouPreviewMobile.module.css',
68
+ ),
69
+ },
70
+ 'Direct reward widget': {
71
+ globalStyle: getStylesWrapper('./DirectReward/style.module.css'),
72
+ userInputPreviewDesktop: getStylesWrapper(
73
+ './DirectReward/previewStyles/userDetailsPreviewDesktop.module.css',
74
+ ),
75
+ userInputPreviewMobile: getStylesWrapper(
76
+ './DirectReward/previewStyles/userDetailsPreviewMobile.module.css',
77
+ ),
78
+ thankyouPreviewDesktop: getStylesWrapper(
79
+ './DirectReward/previewStyles/thankYouPreviewDesktop.module.css',
80
+ ),
81
+ thankyouPreviewMobile: getStylesWrapper(
82
+ './DirectReward/previewStyles/thankYouPreviewMobile.module.css',
83
+ ),
84
+ },
85
+ 'Lead Generator': {
86
+ globalStyle: getStylesWrapper('./DirectReward/style.module.css'),
87
+ userInputPreviewDesktop: getStylesWrapper(
88
+ './DirectReward/previewStyles/userDetailsPreviewDesktop.module.css',
89
+ ),
90
+ userInputPreviewMobile: getStylesWrapper(
91
+ './DirectReward/previewStyles/userDetailsPreviewMobile.module.css',
92
+ ),
93
+ thankyouPreviewDesktop: getStylesWrapper(
94
+ './DirectReward/previewStyles/thankYouPreviewDesktop.module.css',
95
+ ),
96
+ thankyouPreviewMobile: getStylesWrapper(
97
+ './DirectReward/previewStyles/thankYouPreviewMobile.module.css',
98
+ ),
99
+ },
100
+ 'Scratch the card': {
101
+ globalStyle: getStylesWrapper('./ScratchCard/globalStyle.module.css'),
102
+ userInputPreviewDesktop: getStylesWrapper(
103
+ './ScratchCard/previewStyles/userDetailsPreviewDesktop.module.css',
104
+ ),
105
+ userInputPreviewMobile: getStylesWrapper(
106
+ './ScratchCard/previewStyles/userDetailsPreviewMobile.module.css',
107
+ ),
108
+ thankyouPreviewMobile: getStylesWrapper(
109
+ './STW/previewStyles/thankyouPreviewMobile.module.css',
110
+ ),
111
+ thankyouPreviewDesktop: getStylesWrapper(
112
+ './STW/previewStyles/thankyouPreviewDesktop.module.css',
113
+ ),
114
+ },
115
+ 'Marketing popup': {
116
+ globalStyle: getStylesWrapper('./CaptivateBanner/style.module.css'),
117
+ previewMobile: getStylesWrapper(
118
+ './CaptivateBanner/previewMobile.module.css',
119
+ ),
120
+ previewDesktop: getStylesWrapper(
121
+ './CaptivateBanner/previewDesktop.module.css',
122
+ ),
123
+ },
124
+ 'Back in stock notifier': {
125
+ globalStyle: getStylesWrapper('./ShopifyForm/style.module.css'),
126
+ previewMobile: getStylesWrapper('./ShopifyForm/previewMobile.module.css'),
127
+ previewDesktop: getStylesWrapper('./ShopifyForm/previewDesktop.module.css'),
128
+ },
129
+ 'Price drop notifier': {
130
+ globalStyle: getStylesWrapper('./ShopifyForm/style.module.css'),
131
+ previewMobile: getStylesWrapper('./ShopifyForm/previewMobile.module.css'),
132
+ previewDesktop: getStylesWrapper('./ShopifyForm/previewDesktop.module.css'),
133
+ },
134
+ };
@@ -0,0 +1,11 @@
1
+ export enum COOKIE_VALUES {
2
+ BIK_VISITOR = 'bikvisitor',
3
+ STORY_VIEWED = 'storeviewed',
4
+ COLLECTION_VIEWED = 'collectionviewed',
5
+ }
6
+
7
+ export enum EVENT_NAME {
8
+ WIDGET_VISITED = 'WIDGET_VISITED',
9
+ COLLECTION_VIEWED = 'COLLECTION_VIEWED',
10
+ STORY_VIEWED = 'STORY_VIEWED',
11
+ }