@capillarytech/creatives-library 8.0.255-alpha.4 → 8.0.255

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 (278) hide show
  1. package/assets/Android.png +0 -0
  2. package/assets/iOS.png +0 -0
  3. package/constants/unified.js +2 -2
  4. package/initialReducer.js +2 -0
  5. package/package.json +1 -1
  6. package/services/api.js +10 -5
  7. package/services/tests/api.test.js +34 -0
  8. package/translations/en.json +3 -4
  9. package/utils/common.js +5 -6
  10. package/utils/commonUtils.js +28 -5
  11. package/utils/tests/commonUtil.test.js +224 -0
  12. package/utils/tests/transformerUtils.test.js +0 -297
  13. package/utils/transformTemplateConfig.js +0 -10
  14. package/utils/transformerUtils.js +0 -40
  15. package/v2Components/CapDeviceContent/index.js +61 -56
  16. package/v2Components/CapImageUpload/constants.js +0 -2
  17. package/v2Components/CapImageUpload/index.js +16 -65
  18. package/v2Components/CapImageUpload/index.scss +1 -4
  19. package/v2Components/CapImageUpload/messages.js +1 -5
  20. package/v2Components/CapTagList/index.js +6 -1
  21. package/v2Components/CapTagListWithInput/index.js +5 -1
  22. package/v2Components/CapTagListWithInput/messages.js +1 -1
  23. package/v2Components/CapWhatsappCTA/tests/index.test.js +5 -0
  24. package/v2Components/ErrorInfoNote/constants.js +1 -0
  25. package/v2Components/ErrorInfoNote/index.js +457 -72
  26. package/v2Components/ErrorInfoNote/messages.js +36 -6
  27. package/v2Components/ErrorInfoNote/style.scss +282 -6
  28. package/v2Components/FormBuilder/tests/index.test.js +13 -4
  29. package/v2Components/HtmlEditor/HTMLEditor.js +547 -94
  30. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +874 -0
  31. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1441 -133
  32. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +27 -16
  33. package/v2Components/HtmlEditor/_htmlEditor.scss +108 -45
  34. package/v2Components/HtmlEditor/_index.lazy.scss +0 -1
  35. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +23 -102
  36. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +148 -140
  37. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +2 -1
  38. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  39. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +9 -0
  40. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +4 -4
  41. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +22 -0
  42. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +4 -7
  43. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +35 -45
  44. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +1 -3
  45. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  46. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +7 -6
  47. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +3 -6
  48. package/v2Components/HtmlEditor/components/PreviewPane/index.js +22 -43
  49. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  50. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +1 -0
  51. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +49 -31
  52. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +50 -34
  53. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +6 -0
  54. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +70 -41
  55. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +255 -0
  56. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +364 -0
  57. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +51 -0
  58. package/v2Components/HtmlEditor/constants.js +42 -20
  59. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +373 -16
  60. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +103 -0
  61. package/v2Components/HtmlEditor/hooks/useEditorContent.js +5 -2
  62. package/v2Components/HtmlEditor/hooks/useInAppContent.js +88 -146
  63. package/v2Components/HtmlEditor/hooks/useValidation.js +189 -53
  64. package/v2Components/HtmlEditor/index.js +1 -1
  65. package/v2Components/HtmlEditor/messages.js +92 -94
  66. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +94 -45
  67. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +134 -0
  68. package/v2Components/HtmlEditor/utils/contentSanitizer.js +40 -41
  69. package/v2Components/HtmlEditor/utils/htmlValidator.js +71 -72
  70. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +134 -102
  71. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +23 -25
  72. package/v2Components/HtmlEditor/utils/validationAdapter.js +66 -41
  73. package/v2Components/HtmlEditor/utils/validationConstants.js +40 -0
  74. package/v2Components/MobilePushPreviewV2/index.js +32 -7
  75. package/v2Components/TemplatePreview/_templatePreview.scss +55 -24
  76. package/v2Components/TemplatePreview/index.js +47 -32
  77. package/v2Components/TemplatePreview/messages.js +4 -0
  78. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +1 -0
  79. package/v2Containers/App/constants.js +0 -5
  80. package/v2Containers/BeeEditor/index.js +172 -90
  81. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +14 -0
  82. package/v2Containers/BeePopupEditor/constants.js +10 -0
  83. package/v2Containers/BeePopupEditor/index.js +194 -0
  84. package/v2Containers/BeePopupEditor/tests/index.test.js +627 -0
  85. package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +3 -4
  86. package/v2Containers/CreativesContainer/SlideBoxContent.js +129 -107
  87. package/v2Containers/CreativesContainer/SlideBoxFooter.js +163 -13
  88. package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
  89. package/v2Containers/CreativesContainer/constants.js +1 -3
  90. package/v2Containers/CreativesContainer/index.js +239 -214
  91. package/v2Containers/CreativesContainer/messages.js +8 -4
  92. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +0 -210
  93. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +11 -2
  94. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +38 -354
  95. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +106 -0
  96. package/v2Containers/Email/actions.js +7 -0
  97. package/v2Containers/Email/constants.js +5 -1
  98. package/v2Containers/Email/index.js +234 -29
  99. package/v2Containers/Email/messages.js +32 -0
  100. package/v2Containers/Email/reducer.js +12 -1
  101. package/v2Containers/Email/sagas.js +61 -7
  102. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -0
  103. package/v2Containers/Email/tests/reducer.test.js +46 -0
  104. package/v2Containers/Email/tests/sagas.test.js +320 -29
  105. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +1285 -0
  106. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +211 -21
  107. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +40 -74
  108. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +1880 -0
  109. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +520 -0
  110. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +2 -67
  111. package/v2Containers/EmailWrapper/constants.js +2 -0
  112. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +629 -77
  113. package/v2Containers/EmailWrapper/index.js +103 -23
  114. package/v2Containers/EmailWrapper/messages.js +65 -1
  115. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +643 -0
  116. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +594 -77
  117. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +376 -0
  118. package/v2Containers/InApp/__tests__/sagas.test.js +363 -0
  119. package/v2Containers/InApp/actions.js +7 -0
  120. package/v2Containers/InApp/constants.js +20 -4
  121. package/v2Containers/InApp/index.js +802 -359
  122. package/v2Containers/InApp/index.scss +4 -3
  123. package/v2Containers/InApp/messages.js +7 -3
  124. package/v2Containers/InApp/reducer.js +21 -3
  125. package/v2Containers/InApp/sagas.js +29 -9
  126. package/v2Containers/InApp/selectors.js +25 -5
  127. package/v2Containers/InApp/tests/index.test.js +154 -50
  128. package/v2Containers/InApp/tests/reducer.test.js +34 -0
  129. package/v2Containers/InApp/tests/sagas.test.js +61 -9
  130. package/v2Containers/InApp/tests/selectors.test.js +612 -0
  131. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +151 -0
  132. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +267 -0
  133. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +23 -0
  134. package/v2Containers/InAppWrapper/constants.js +16 -0
  135. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +473 -0
  136. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +198 -0
  137. package/v2Containers/InAppWrapper/index.js +148 -0
  138. package/v2Containers/InAppWrapper/messages.js +49 -0
  139. package/v2Containers/InappAdvance/index.js +1099 -0
  140. package/v2Containers/InappAdvance/index.scss +10 -0
  141. package/v2Containers/InappAdvance/tests/index.test.js +448 -0
  142. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +15 -36
  143. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +8 -8
  144. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +77 -100
  145. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +63 -72
  146. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +190 -250
  147. package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +12 -16
  148. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +40 -48
  149. package/v2Containers/TagList/index.js +62 -19
  150. package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
  151. package/v2Containers/Templates/_templates.scss +56 -202
  152. package/v2Containers/Templates/actions.js +1 -2
  153. package/v2Containers/Templates/constants.js +0 -1
  154. package/v2Containers/Templates/index.js +123 -278
  155. package/v2Containers/Templates/messages.js +4 -24
  156. package/v2Containers/Templates/reducer.js +0 -2
  157. package/v2Containers/Templates/tests/index.test.js +0 -10
  158. package/v2Containers/TemplatesV2/index.js +7 -15
  159. package/v2Containers/TemplatesV2/messages.js +0 -4
  160. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +768 -1272
  161. package/utils/imageUrlUpload.js +0 -141
  162. package/v2Components/CapImageUrlUpload/constants.js +0 -26
  163. package/v2Components/CapImageUrlUpload/index.js +0 -365
  164. package/v2Components/CapImageUrlUpload/index.scss +0 -35
  165. package/v2Components/CapImageUrlUpload/messages.js +0 -47
  166. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +0 -152
  167. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +0 -214
  168. package/v2Containers/WebPush/Create/components/BrandIconSection.js +0 -108
  169. package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -172
  170. package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
  171. package/v2Containers/WebPush/Create/components/ButtonList.js +0 -145
  172. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +0 -164
  173. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +0 -463
  174. package/v2Containers/WebPush/Create/components/FormActions.js +0 -54
  175. package/v2Containers/WebPush/Create/components/FormActions.test.js +0 -163
  176. package/v2Containers/WebPush/Create/components/MediaSection.js +0 -142
  177. package/v2Containers/WebPush/Create/components/MediaSection.test.js +0 -341
  178. package/v2Containers/WebPush/Create/components/MessageSection.js +0 -103
  179. package/v2Containers/WebPush/Create/components/MessageSection.test.js +0 -268
  180. package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +0 -87
  181. package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +0 -210
  182. package/v2Containers/WebPush/Create/components/TemplateNameSection.js +0 -54
  183. package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +0 -143
  184. package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +0 -86
  185. package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +0 -16
  186. package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +0 -41
  187. package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +0 -54
  188. package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +0 -37
  189. package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +0 -21
  190. package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
  191. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
  192. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
  193. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
  194. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
  195. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
  196. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -78
  197. package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +0 -138
  198. package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +0 -406
  199. package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +0 -30
  200. package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +0 -151
  201. package/v2Containers/WebPush/Create/hooks/useImageUpload.js +0 -104
  202. package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +0 -538
  203. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +0 -122
  204. package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +0 -633
  205. package/v2Containers/WebPush/Create/index.js +0 -1148
  206. package/v2Containers/WebPush/Create/index.scss +0 -134
  207. package/v2Containers/WebPush/Create/messages.js +0 -203
  208. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -228
  209. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -294
  210. package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -90
  211. package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -305
  212. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -23
  213. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -155
  214. package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
  215. package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
  216. package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +0 -9
  217. package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +0 -9
  218. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  219. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  220. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
  221. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
  222. package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +0 -9
  223. package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +0 -9
  224. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
  225. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
  226. package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +0 -9
  227. package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +0 -9
  228. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -47
  229. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -141
  230. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
  231. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -68
  232. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -61
  233. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -99
  234. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -733
  235. package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +0 -571
  236. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -81
  237. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +0 -81
  238. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -50
  239. package/v2Containers/WebPush/Create/preview/constants.js +0 -637
  240. package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -79
  241. package/v2Containers/WebPush/Create/preview/preview.scss +0 -351
  242. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -370
  243. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
  244. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
  245. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
  246. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -47
  247. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
  248. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
  249. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
  250. package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -207
  251. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -153
  252. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
  253. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -101
  254. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -229
  255. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
  256. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1081
  257. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
  258. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -1327
  259. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -131
  260. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -112
  261. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
  262. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -129
  263. package/v2Containers/WebPush/Create/utils/payloadBuilder.js +0 -96
  264. package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +0 -396
  265. package/v2Containers/WebPush/Create/utils/previewUtils.js +0 -89
  266. package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -115
  267. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
  268. package/v2Containers/WebPush/Create/utils/validation.js +0 -75
  269. package/v2Containers/WebPush/Create/utils/validation.test.js +0 -283
  270. package/v2Containers/WebPush/actions.js +0 -60
  271. package/v2Containers/WebPush/constants.js +0 -132
  272. package/v2Containers/WebPush/index.js +0 -2
  273. package/v2Containers/WebPush/reducer.js +0 -104
  274. package/v2Containers/WebPush/sagas.js +0 -119
  275. package/v2Containers/WebPush/selectors.js +0 -65
  276. package/v2Containers/WebPush/tests/reducer.test.js +0 -863
  277. package/v2Containers/WebPush/tests/sagas.test.js +0 -566
  278. package/v2Containers/WebPush/tests/selectors.test.js +0 -960
@@ -16,7 +16,7 @@ const VALIDATION_SOURCES = {
16
16
  EMAIL_SPECIFIC: 'email-specific',
17
17
  INAPP_SPECIFIC: 'inapp-specific',
18
18
  EMAIL_COMPATIBILITY: 'email-compatibility',
19
- MOBILE_OPTIMIZATION: 'mobile-optimization'
19
+ MOBILE_OPTIMIZATION: 'mobile-optimization',
20
20
  };
21
21
 
22
22
  /**
@@ -30,42 +30,47 @@ export const transformValidationToErrorInfo = (validation, variant = 'email') =>
30
30
  return { errorMessages: { LIQUID_ERROR_MSG: [], STANDARD_ERROR_MSG: [] } };
31
31
  }
32
32
 
33
+ if (typeof validation.getAllIssues !== 'function') {
34
+ console.warn('[validationAdapter] validation.getAllIssues is not a function:', validation);
35
+ return { errorMessages: { LIQUID_ERROR_MSG: [], STANDARD_ERROR_MSG: [] } };
36
+ }
37
+
33
38
  const allIssues = validation.getAllIssues();
39
+ // Safety check: ensure allIssues is an array
40
+ if (!Array.isArray(allIssues)) {
41
+ console.warn('[validationAdapter] validation.getAllIssues() did not return an array:', allIssues);
42
+ return { errorMessages: { LIQUID_ERROR_MSG: [], STANDARD_ERROR_MSG: [] } };
43
+ }
34
44
 
35
45
  // Separate liquid and standard errors
36
- const liquidErrors = allIssues.filter(issue =>
37
- issue.source === VALIDATION_SOURCES.LIQUID ||
38
- issue.rule?.includes('liquid') ||
39
- issue.message?.toLowerCase().includes('liquid')
40
- );
41
-
42
- const standardErrors = allIssues.filter(issue =>
43
- issue.source !== VALIDATION_SOURCES.LIQUID &&
44
- !issue.rule?.includes('liquid') &&
45
- !issue.message?.toLowerCase().includes('liquid')
46
- );
46
+ const liquidErrors = allIssues.filter((issue) => issue.source === VALIDATION_SOURCES.LIQUID
47
+ || issue.rule?.includes('liquid')
48
+ || issue.message?.toLowerCase().includes('liquid'));
49
+
50
+ const standardErrors = allIssues.filter((issue) => issue.source !== VALIDATION_SOURCES.LIQUID
51
+ && !issue.rule?.includes('liquid')
52
+ && !issue.message?.toLowerCase().includes('liquid'));
47
53
 
48
54
  // Format errors for ErrorInfoNote
49
- const formatErrors = (errors) =>
50
- errors.map(error => {
51
- let message = error.message;
52
-
53
- // Add line/column info if available
54
- if (error.line) {
55
- message += ` Line ${error.line}`;
56
- if (error.column) {
57
- message += `, Char ${error.column}`;
58
- }
59
- message += '.';
55
+ const formatErrors = (errors) => errors.map((error) => {
56
+ let {message} = error;
57
+
58
+ // Add line/column info if available
59
+ if (error.line) {
60
+ message += ` Line ${error.line}`;
61
+ if (error.column) {
62
+ message += `, Char ${error.column}`;
60
63
  }
64
+ message += '.';
65
+ }
61
66
 
62
- // Add rule info if available
63
- if (error.rule) {
64
- message += ` • ${error.rule}`;
65
- }
67
+ // Add rule info if available
68
+ if (error.rule) {
69
+ message += ` • ${error.rule}`;
70
+ }
66
71
 
67
- return message;
68
- });
72
+ return message;
73
+ });
69
74
 
70
75
  // Handle InApp variant with platform-specific errors (if needed in future)
71
76
  if (variant === 'inapp') {
@@ -74,8 +79,8 @@ export const transformValidationToErrorInfo = (validation, variant = 'email') =>
74
79
  return {
75
80
  errorMessages: {
76
81
  LIQUID_ERROR_MSG: formatErrors(liquidErrors),
77
- STANDARD_ERROR_MSG: formatErrors(standardErrors)
78
- }
82
+ STANDARD_ERROR_MSG: formatErrors(standardErrors),
83
+ },
79
84
  };
80
85
  }
81
86
 
@@ -83,8 +88,8 @@ export const transformValidationToErrorInfo = (validation, variant = 'email') =>
83
88
  return {
84
89
  errorMessages: {
85
90
  LIQUID_ERROR_MSG: formatErrors(liquidErrors),
86
- STANDARD_ERROR_MSG: formatErrors(standardErrors)
87
- }
91
+ STANDARD_ERROR_MSG: formatErrors(standardErrors),
92
+ },
88
93
  };
89
94
  };
90
95
 
@@ -98,7 +103,18 @@ export const hasValidationErrors = (validation) => {
98
103
  return false;
99
104
  }
100
105
 
106
+ if (typeof validation.getAllIssues !== 'function') {
107
+ console.warn('[validationAdapter] validation.getAllIssues is not a function:', validation);
108
+ return false;
109
+ }
110
+
101
111
  const allIssues = validation.getAllIssues();
112
+ // Safety check: ensure allIssues is an array
113
+ if (!Array.isArray(allIssues)) {
114
+ console.warn('[validationAdapter] validation.getAllIssues() did not return an array:', allIssues);
115
+ return false;
116
+ }
117
+
102
118
  return allIssues.length > 0;
103
119
  };
104
120
 
@@ -112,19 +128,28 @@ export const getValidationSummary = (validation) => {
112
128
  return { totalErrors: 0, totalWarnings: 0, hasLiquidErrors: false };
113
129
  }
114
130
 
131
+ if (typeof validation.getAllIssues !== 'function') {
132
+ console.warn('[validationAdapter] validation.getAllIssues is not a function:', validation);
133
+ return { totalErrors: 0, totalWarnings: 0, hasLiquidErrors: false };
134
+ }
135
+
115
136
  const allIssues = validation.getAllIssues();
116
- const errors = allIssues.filter(issue => issue.severity === 'error');
117
- const warnings = allIssues.filter(issue => issue.severity === 'warning');
118
- const liquidErrors = allIssues.filter(issue =>
119
- issue.source === VALIDATION_SOURCES.LIQUID ||
120
- issue.rule?.includes('liquid') ||
121
- issue.message?.toLowerCase().includes('liquid')
122
- );
137
+ // Safety check: ensure allIssues is an array
138
+ if (!Array.isArray(allIssues)) {
139
+ console.warn('[validationAdapter] validation.getAllIssues() did not return an array:', allIssues);
140
+ return { totalErrors: 0, totalWarnings: 0, hasLiquidErrors: false };
141
+ }
142
+
143
+ const errors = allIssues.filter((issue) => issue.severity === 'error');
144
+ const warnings = allIssues.filter((issue) => issue.severity === 'warning');
145
+ const liquidErrors = allIssues.filter((issue) => issue.source === VALIDATION_SOURCES.LIQUID
146
+ || issue.rule?.includes('liquid')
147
+ || issue.message?.toLowerCase().includes('liquid'));
123
148
 
124
149
  return {
125
150
  totalErrors: errors.length,
126
151
  totalWarnings: warnings.length,
127
152
  hasLiquidErrors: liquidErrors.length > 0,
128
- totalIssues: allIssues.length
153
+ totalIssues: allIssues.length,
129
154
  };
130
155
  };
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Validation Constants
3
+ *
4
+ * Shared constants for validation issue categorization across HTML Editor components
5
+ */
6
+
7
+ // Issue sources for categorizing validation errors
8
+ export const ISSUE_SOURCES = {
9
+ HTMLHINT: 'htmlhint',
10
+ CSS_VALIDATOR: 'css-validator',
11
+ CUSTOM: 'custom',
12
+ SECURITY: 'security',
13
+ LIQUID: 'liquid-validator',
14
+ };
15
+
16
+ // Label issue patterns - syntax errors related to tags
17
+ // These patterns identify tag syntax errors (open/close tags, attributes, brackets)
18
+ export const LABEL_ISSUE_PATTERNS = [
19
+ 'tag must be paired',
20
+ 'open tag match failed',
21
+ 'closed tag match failed',
22
+ 'unclosed',
23
+ 'missing required',
24
+ 'tag-pair',
25
+ 'attr-value-not-empty',
26
+ 'attr-no-duplication',
27
+ 'tag-self-close',
28
+ 'spec-char-escape',
29
+ 'tagname-lowercase',
30
+ 'attr-lowercase',
31
+ 'src-not-empty',
32
+ 'alt-require',
33
+ ];
34
+
35
+ // Tab keys for error categorization
36
+ export const ERROR_TAB_KEYS = {
37
+ HTML: 'html',
38
+ LABEL: 'label',
39
+ LIQUID: 'liquid',
40
+ };
@@ -26,8 +26,17 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
26
26
  this.getPreview = this.getPreview.bind(this);
27
27
  this.setContent = this.setContent.bind(this);
28
28
  this.goToDuplicate = this.goToDuplicate.bind(this);
29
- const hasAndroid = get(props, 'templateData.versions.base.ANDROID') || get(props, 'templateData.androidContent.title');
30
- const hasIos = get(props, 'templateData.versions.base.IOS') || get(props, 'templateData.iosContent.title');
29
+ // Check for INAPP channel structure (versions.base.content.ANDROID/IOS) or MOBILE_PUSH structure (versions.base.ANDROID/IOS)
30
+ const { channel, templateData } = props;
31
+ let hasAndroid;
32
+ let hasIos;
33
+ if (channel === INAPP.toUpperCase()) {
34
+ hasAndroid = get(templateData, 'versions.base.content.ANDROID') || get(templateData, 'androidContent');
35
+ hasIos = get(templateData, 'versions.base.content.IOS') || get(templateData, 'iosContent');
36
+ } else {
37
+ hasAndroid = get(templateData, 'versions.base.ANDROID') || get(templateData, 'androidContent.title');
38
+ hasIos = get(templateData, 'versions.base.IOS') || get(templateData, 'iosContent.title');
39
+ }
31
40
  let device = "android";
32
41
  if (hasAndroid) {
33
42
  device = 'android';
@@ -45,6 +54,17 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
45
54
  if (channel === INAPP.toUpperCase()) {
46
55
  const androidContent = get(templateData, 'versions.base.content.ANDROID') || get(templateData, 'androidContent');
47
56
  const iosContent = get(templateData, 'versions.base.content.IOS') || get(templateData, 'iosContent');
57
+ const isBeeFreeTemplate = get(androidContent, 'isBEEeditor') || get(iosContent, 'isBEEeditor');
58
+ if (isBeeFreeTemplate) {
59
+ // Normalize device to 'android' or 'ios' for comparison
60
+ const normalizedDevice = device === 'iphone' ? 'ios' : device?.toLowerCase();
61
+ const isAndroid = normalizedDevice === ANDROID.toLowerCase();
62
+ content = {
63
+ inAppPreviewContent: isAndroid ? androidContent?.beeHtml : iosContent?.beeHtml,
64
+ isBeeFreeTemplate: true,
65
+ };
66
+ return content;
67
+ }
48
68
  const androidPreviewContent = {
49
69
  templateTitle: androidContent?.title,
50
70
  templateMsg: androidContent?.message,
@@ -57,9 +77,12 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
57
77
  mediaPreview: { inAppImageSrcIos: iosContent?.expandableDetails?.image },
58
78
  ctaData: getCtaObject(iosContent?.expandableDetails?.ctas),
59
79
  };
80
+ // Normalize device to 'android' or 'ios' for comparison
81
+ const normalizedDevice = device === 'iphone' ? 'ios' : device?.toLowerCase();
82
+ const isAndroid = normalizedDevice === ANDROID.toLowerCase();
60
83
  content = {
61
- inAppPreviewContent: device === ANDROID.toLowerCase() ? androidPreviewContent : iosPreviewContent,
62
- templateLayoutType: device === ANDROID.toLowerCase() ? androidContent?.bodyType : iosContent?.bodyType,
84
+ inAppPreviewContent: isAndroid ? androidPreviewContent : iosPreviewContent,
85
+ templateLayoutType: isAndroid ? androidContent?.bodyType : iosContent?.bodyType,
63
86
  };
64
87
  } else if (channel === MOBILE_PUSH) {
65
88
  const androidContent = get(templateData, 'versions.base.ANDROID') || get(templateData, 'androidContent');
@@ -125,7 +148,9 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
125
148
  }
126
149
 
127
150
  getPreview(device) {
128
- const deviceParam = device === ANDROID.toLowerCase() ? ANDROID : IOS;
151
+ // Normalize device to 'android' or 'ios' for comparison
152
+ const normalizedDevice = device === 'iphone' ? 'ios' : device?.toLowerCase();
153
+ const deviceParam = normalizedDevice === ANDROID.toLowerCase() ? ANDROID : IOS;
129
154
  return (
130
155
  <TemplatePreview
131
156
  device={this.props.channel === INAPP.toUpperCase() ? deviceParam : device}
@@ -159,8 +184,8 @@ class MobilePushPreviewV2 extends React.Component { // eslint-disable-line react
159
184
  hasAndroid = get(templateData, 'versions.base.ANDROID') || get(templateData, 'androidContent.title');
160
185
  hasIos = get(templateData, 'versions.base.IOS') || get(templateData, 'iosContent.title');
161
186
  } else if (this.props.channel === INAPP.toUpperCase()) {
162
- hasAndroid = get(templateData, 'versions.base.content.ANDROID') || get(templateData, 'androidContent.title');
163
- hasIos = get(templateData, 'versions.base.content.IOS') || get(templateData, 'iosContent.title');
187
+ hasAndroid = get(templateData, 'versions.base.content.ANDROID') || get(templateData, 'androidContent');
188
+ hasIos = get(templateData, 'versions.base.content.IOS') || get(templateData, 'iosContent');
164
189
  }
165
190
  const hasBothAndroidAndIos = hasAndroid && hasIos;
166
191
  return (
@@ -1,5 +1,16 @@
1
1
  @import '~@capillarytech/cap-ui-library/styles/_variables.scss';
2
2
 
3
+ .shell-v2 {
4
+ &.align-center {
5
+ .preview-image-container {
6
+ position: relative;
7
+ display: inline-block;
8
+ width: 100%;
9
+ height: 100%;
10
+ }
11
+ }
12
+ }
13
+
3
14
  .shell-v2 {
4
15
  position: relative;
5
16
  -webkit-transform: translate(-50%);
@@ -16,10 +27,11 @@
16
27
  &.mobilepush
17
28
 
18
29
  .inapp-message-container-POPUP-ANDROID {
30
+ background-color: $CAP_WHITE;
19
31
  position: absolute;
20
- top: 20%;
32
+ top: 30%;
21
33
  display: flex;
22
- width: 200px;
34
+ width: 14.286rem;
23
35
  left: 28%;
24
36
 
25
37
  .inapp-title-POPUP-ANDROID {
@@ -59,10 +71,10 @@
59
71
  .inapp-message-container-HEADER-ANDROID {
60
72
  position: absolute;
61
73
  display: flex;
62
- // bottom: 19.4rem;
63
- width: 200px;
64
- left: 28%;
65
- top: 20px;
74
+ width: 17.571rem;
75
+ left: 18%;
76
+ top: 4.071rem;
77
+ background-color: $CAP_WHITE;
66
78
 
67
79
  .inapp-title-HEADER-ANDROID {
68
80
  left: 34%;
@@ -129,22 +141,24 @@
129
141
 
130
142
 
131
143
  .inapp-message-container-FOOTER-ANDROID {
144
+ background-color: $CAP_WHITE;
132
145
  position: absolute;
133
146
  display: flex;
134
147
  justify-content: center;
135
- bottom: 1.5%;
136
- width: 200px;
137
- left: 28%;
148
+ bottom: 2.5%;
149
+ width: 16.571rem;
150
+ left: 21%;
151
+ background-color: $CAP_WHITE;
138
152
 
139
153
  .inapp-title-FOOTER-ANDROID {
140
- width: 90px;
154
+ width: 6.429rem;
141
155
  height: 12px;
142
156
  text-align: left;
143
157
  left: 34%;
144
158
  justify-content: center;
145
159
  position: relative;
146
160
  right: 33%;
147
- bottom: -22px;
161
+ bottom: -1.429rem;
148
162
  font-size: 10px;
149
163
  text-overflow: ellipsis;
150
164
  overflow: hidden;
@@ -201,10 +215,12 @@
201
215
  }
202
216
 
203
217
  .inapp-message-container-FULLSCREEN-ANDROID {
218
+ background-color: $CAP_WHITE;
204
219
  position: absolute;
205
220
  top: 10%;
206
221
  display: flex;
207
- left: 29%;
222
+ left: 20%;
223
+ width: 16.643rem;
208
224
  .inapp-title-FULLSCREEN-ANDROID {
209
225
  text-overflow: ellipsis;
210
226
  overflow: hidden;
@@ -238,10 +254,11 @@
238
254
  }
239
255
 
240
256
  .inapp-message-container-POPUP-iOS {
257
+ background-color: $CAP_WHITE;
241
258
  position: absolute;
242
- top: 20%;
259
+ top: 30%;
243
260
  display: flex;
244
- width: 200px;
261
+ width: 14.286rem;
245
262
  left: 28%;
246
263
 
247
264
  .inapp-title-POPUP-iOS {
@@ -278,18 +295,19 @@
278
295
  }
279
296
 
280
297
  .inapp-message-container-HEADER-iOS {
298
+ background-color: $CAP_WHITE;
281
299
  position: absolute;
282
300
  display: flex;
283
- width: 200px;
284
- left: 28%;
285
- top: 3%;
301
+ width: 16.571rem;
302
+ left: 20%;
303
+ top: 10%;
286
304
 
287
305
  .inapp-title-HEADER-iOS {
288
306
  left: 34%;
289
307
  top: 15%;
290
308
  position: relative;
291
309
  font-size: 10px;
292
- width: 90px;
310
+ width: 6.429rem;
293
311
  height: 12px;
294
312
  text-overflow: ellipsis;
295
313
  overflow: hidden;
@@ -300,7 +318,7 @@
300
318
 
301
319
  .without-image-title-HEADER-ios {
302
320
  left: 26%;
303
- top: 18px;
321
+ top: 1.286rem;
304
322
  text-align: center;
305
323
  }
306
324
 
@@ -330,7 +348,7 @@
330
348
  .without-image-content-HEADER-ios {
331
349
  width: 92%;
332
350
  left: 6%;
333
- top: 21px;
351
+ top: 1.5rem;
334
352
  }
335
353
 
336
354
  .inapp-button-HEADER-iOS {
@@ -347,12 +365,14 @@
347
365
  }
348
366
 
349
367
  .inapp-message-container-FOOTER-iOS {
368
+ background-color: $CAP_WHITE;
350
369
  position: absolute;
351
370
  display: flex;
352
371
  justify-content: center;
353
- width: 200px;
354
- left: 28%;
355
- top: 75%;
372
+ width: 16.571rem;
373
+ left: 20%;
374
+ top: 42%;
375
+ bottom: 3.5%;
356
376
 
357
377
  .inapp-title-FOOTER-iOS {
358
378
  width: 90px;
@@ -420,10 +440,12 @@
420
440
  }
421
441
 
422
442
  .inapp-message-container-FULLSCREEN-iOS {
443
+ background-color: $CAP_WHITE;
423
444
  position: absolute;
424
445
  top: 10%;
425
446
  display: flex;
426
- left: 29%;
447
+ left: 20%;
448
+ width: 16.643rem;
427
449
  .inapp-title-FULLSCREEN-iOS {
428
450
  text-overflow: ellipsis;
429
451
  overflow: hidden;
@@ -455,6 +477,15 @@
455
477
  bottom: -1%;
456
478
  }
457
479
  }
480
+
481
+ .inapp-message-container-MODAL-ANDROID, .inapp-message-container-MODAL-iOS {
482
+ background-color: $CAP_WHITE;
483
+ position: absolute;
484
+ top: 30%;
485
+ display: flex;
486
+ width: 14.286rem;
487
+ left: 28%;
488
+ }
458
489
  }
459
490
 
460
491
 
@@ -37,14 +37,8 @@ import {
37
37
  import { VIBER, FACEBOOK } from '../../v2Containers/App/constants';
38
38
  import Carousel from '../Carousel';
39
39
  import whatsappMobileAndroid from './assets/images/whatsapp_mobile_android.svg';
40
- import inAppMobileAndroidModal from './assets/images/inapp_mobile_android_modal.svg';
41
- import inAppMobileAndroidTop from './assets/images/inapp_mobile_android_top.svg';
42
- import inAppMobileAndroidBottom from './assets/images/inapp_mobile_android_bottom.svg';
43
- import inAppMobileAndroidFull from './assets/images/inapp_mobile_android_full.svg';
44
- import inAppMobileIOSModal from './assets/images/inapp_mobile_ios_modal.svg';
45
- import inAppMobileIOSTop from './assets/images/inapp_mobile_ios_top.svg';
46
- import inAppMobileIOSBottom from './assets/images/inapp_mobile_ios_bottom.svg';
47
- import inAppMobileIOSFull from './assets/images/inapp_mobile_ios_full.svg';
40
+ import inAppMobileDeviceAndroid from '../../assets/Android.png';
41
+ import inAppMobileDeviceIos from '../../assets/iOS.png';
48
42
  import whatsappImageEmptyPreview from './assets/images/empty_image_preview.svg';
49
43
  import whatsappVideoEmptyPreview from './assets/images/empty_video_preview.svg';
50
44
  import videoPlay from '../../assets/videoPlay.svg';
@@ -239,7 +233,7 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
239
233
  } = this.props;
240
234
  let content = channel && channel.toLowerCase() === 'sms' ? [this.props.content] : this.props.content;
241
235
  const { formatMessage } = intl;
242
- const { rcsPreviewContent, inAppPreviewContent, viberPreviewContent } = content || {};
236
+ const { rcsPreviewContent, inAppPreviewContent, viberPreviewContent, isBeeFreeTemplate } = content || {};
243
237
  const { rcsImageSrc, rcsVideoSrc, rcsTitle, rcsDesc, rcsSuggestions } = rcsPreviewContent || {};
244
238
  const {
245
239
  videoParams,
@@ -247,7 +241,11 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
247
241
  buttonText: viberButtonText,
248
242
  messageContent: viberMessageContent,
249
243
  } = viberPreviewContent || {};
244
+ let isHTMLContent = true;
250
245
  const {mediaPreview = {}, templateTitle = "", templateMsg = "", ctaData} = inAppPreviewContent || {};
246
+ if(templateTitle !== undefined && ctaData !== undefined && templateMsg !== undefined) {
247
+ isHTMLContent = false;
248
+ }
251
249
  let smsDetails = {};
252
250
  // let smsText = '';
253
251
  if (this.props.content && this.props.charCounterEnabled) {
@@ -464,27 +462,9 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
464
462
 
465
463
  const getPreviewImage = () => {
466
464
  if (this.props.device === ANDROID) {
467
- switch (templateLayoutType) {
468
- case INAPP_MESSAGE_LAYOUT_TYPES.MODAL:
469
- return inAppMobileAndroidModal;
470
- case INAPP_MESSAGE_LAYOUT_TYPES.TOPBANNER:
471
- return inAppMobileAndroidTop;
472
- case INAPP_MESSAGE_LAYOUT_TYPES.BOTTOMBANNER:
473
- return inAppMobileAndroidBottom;
474
- default:
475
- return inAppMobileAndroidFull;
476
- }
465
+ return inAppMobileDeviceAndroid;
477
466
  } else {
478
- switch (templateLayoutType) {
479
- case INAPP_MESSAGE_LAYOUT_TYPES.MODAL:
480
- return inAppMobileIOSModal;
481
- case INAPP_MESSAGE_LAYOUT_TYPES.TOPBANNER:
482
- return inAppMobileIOSTop;
483
- case INAPP_MESSAGE_LAYOUT_TYPES.BOTTOMBANNER:
484
- return inAppMobileIOSBottom;
485
- default:
486
- return inAppMobileIOSFull;
487
- }
467
+ return inAppMobileDeviceIos;
488
468
  }
489
469
  };
490
470
 
@@ -1374,7 +1354,34 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
1374
1354
  </div>
1375
1355
  )}
1376
1356
  {channel?.toUpperCase() === INAPP && (
1377
- <div className="shell-v2 align-center">
1357
+ isBeeFreeTemplate ? (
1358
+ <div className="shell-v2 align-center">
1359
+ <CapRow className="preview-image-container">
1360
+ <CapImage
1361
+ className="preview-image"
1362
+ src={this.props.device === ANDROID ? inAppMobileDeviceAndroid : inAppMobileDeviceIos}
1363
+ alt={formatMessage(messages.previewGenerated)}
1364
+ />
1365
+ <iframe
1366
+ srcDoc={inAppPreviewContent?.value}
1367
+ title={formatMessage(messages.inappPreview)}
1368
+ style={{
1369
+ position: 'absolute',
1370
+ top: '3rem',
1371
+ left: '5rem',
1372
+ width: '60%',
1373
+ height: '89%',
1374
+ zIndex: 1,
1375
+ pointerEvents: 'none',
1376
+ backgroundColor: 'white',
1377
+ borderRadius: `${CAP_SPACE_08}`,
1378
+ }}
1379
+ frameBorder="0"
1380
+ />
1381
+ </CapRow>
1382
+ </div>
1383
+ ): (
1384
+ <div className="shell-v2 align-center">
1378
1385
  <CapImage
1379
1386
  className="preview-image"
1380
1387
  src={getPreviewImage()}
@@ -1382,9 +1389,15 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
1382
1389
  />
1383
1390
  <div className="preview-image">
1384
1391
  <div
1385
- className={`inapp-message-container-${templateLayoutType}-${device} sms`}
1392
+ className={`inapp-message-container-${templateLayoutType}-${device} inapp`}
1386
1393
  >
1387
- <div className="preview-inapp-screen">
1394
+ {isHTMLContent ? (
1395
+ <div
1396
+ className="inapp-html-content"
1397
+ dangerouslySetInnerHTML={{ __html: templateMsg }}
1398
+ />
1399
+ ) : (
1400
+ <div className="preview-inapp-screen">
1388
1401
  {
1389
1402
  <CapLabel
1390
1403
  type="label15"
@@ -1449,9 +1462,11 @@ export class TemplatePreview extends React.Component { // eslint-disable-line re
1449
1462
  </CapButton>
1450
1463
  )}
1451
1464
  </div>
1465
+ )}
1452
1466
  </div>
1453
1467
  </div>
1454
1468
  </div>
1469
+ )
1455
1470
  )}
1456
1471
  </CapRow>
1457
1472
  </CapColumn>
@@ -94,4 +94,8 @@ export default defineMessages({
94
94
  id: 'creatives.componentsV2.TemplatePreview.videoNotSupported',
95
95
  defaultMessage: 'Your browser does not support the video tag.',
96
96
  },
97
+ inappPreview: {
98
+ id: 'creatives.componentsV2.TemplatePreview.inappPreview',
99
+ defaultMessage: 'Inapp Preview',
100
+ },
97
101
  });
@@ -67,6 +67,7 @@
67
67
  flex: 1;
68
68
  background-color: #f0f2f5;
69
69
  padding: $CAP_SPACE_08 $CAP_SPACE_24;
70
+ overflow-y: auto;
70
71
  }
71
72
 
72
73
  .panel-section {
@@ -40,7 +40,6 @@ export const TRACK_CREATE_IMAGE = 'createImage';
40
40
  export const TRACK_CREATE_LINE = 'createLine';
41
41
  export const TRACK_CREATE_VIBER = 'createViber';
42
42
  export const TRACK_CREATE_FACEBOOK = 'createFacebook';
43
- export const TRACK_CREATE_WEBPUSH = 'createWebPush';
44
43
 
45
44
  export const CREATE = 'create';
46
45
  export const EDIT = 'edit';
@@ -55,7 +54,6 @@ export const EMAIL = 'email';
55
54
  export const ASSETS = 'assets';
56
55
  export const ZALO = 'zalo';
57
56
  export const INAPP = 'inapp';
58
- export const WEBPUSH = 'webpush';
59
57
 
60
58
  export const JP_LOCALE_HIDE_FEATURE = 'JP_LOCALE_HIDE_FEATURE';
61
59
 
@@ -67,7 +65,6 @@ export const TRACK_EDIT_IMAGE = 'editImage';
67
65
  export const TRACK_EDIT_LINE = 'editLine';
68
66
  export const TRACK_EDIT_VIBER = 'editViber';
69
67
  export const TRACK_EDIT_FACEBOOK = 'editFacebook';
70
- export const TRACK_EDIT_WEBPUSH = 'editWebPush';
71
68
 
72
69
  export const CHANNEL_CREATE_TRACK_MAPPING = {
73
70
  sms: TRACK_CREATE_SMS,
@@ -78,7 +75,6 @@ export const CHANNEL_CREATE_TRACK_MAPPING = {
78
75
  line: TRACK_CREATE_LINE,
79
76
  viber: TRACK_CREATE_VIBER,
80
77
  facebook: TRACK_CREATE_FACEBOOK,
81
- webpush: TRACK_CREATE_WEBPUSH,
82
78
  };
83
79
 
84
80
  export const CHANNEL_EDIT_TRACK_MAPPING = {
@@ -90,7 +86,6 @@ export const CHANNEL_EDIT_TRACK_MAPPING = {
90
86
  line: TRACK_EDIT_LINE,
91
87
  viber: TRACK_EDIT_VIBER,
92
88
  facebook: TRACK_EDIT_FACEBOOK,
93
- webpush: TRACK_EDIT_WEBPUSH,
94
89
  };
95
90
  export const GTM_TRACKING_ID = 'UA-110024621-2';
96
91
  export const BEE_PLUGIN = 'BEE_PLUGIN';