@capillarytech/creatives-library 8.0.266-alpha.1 → 8.0.266

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 (280) 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 +0 -2
  5. package/package.json +1 -1
  6. package/services/api.js +5 -10
  7. package/services/tests/api.test.js +0 -34
  8. package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +35 -17
  9. package/tests/integration/TemplateCreation/api-response.js +1 -31
  10. package/tests/integration/TemplateCreation/msw-handler.js +0 -2
  11. package/utils/common.js +6 -5
  12. package/utils/commonUtils.js +5 -28
  13. package/utils/imageUrlUpload.js +141 -0
  14. package/utils/tests/commonUtil.test.js +0 -224
  15. package/utils/tests/transformerUtils.test.js +297 -0
  16. package/utils/transformTemplateConfig.js +10 -0
  17. package/utils/transformerUtils.js +40 -0
  18. package/v2Components/CapDeviceContent/index.js +56 -61
  19. package/v2Components/CapImageUpload/constants.js +2 -0
  20. package/v2Components/CapImageUpload/index.js +65 -16
  21. package/v2Components/CapImageUpload/index.scss +4 -1
  22. package/v2Components/CapImageUpload/messages.js +5 -1
  23. package/v2Components/CapImageUrlUpload/constants.js +26 -0
  24. package/v2Components/CapImageUrlUpload/index.js +365 -0
  25. package/v2Components/CapImageUrlUpload/index.scss +35 -0
  26. package/v2Components/CapImageUrlUpload/messages.js +47 -0
  27. package/v2Components/CapTagList/index.js +1 -6
  28. package/v2Components/CapTagListWithInput/index.js +1 -5
  29. package/v2Components/CapTagListWithInput/messages.js +1 -1
  30. package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
  31. package/v2Components/ErrorInfoNote/index.js +72 -402
  32. package/v2Components/ErrorInfoNote/messages.js +6 -32
  33. package/v2Components/ErrorInfoNote/style.scss +6 -278
  34. package/v2Components/FormBuilder/tests/index.test.js +4 -13
  35. package/v2Components/HtmlEditor/HTMLEditor.js +99 -418
  36. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1882
  37. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
  38. package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
  39. package/v2Components/HtmlEditor/_index.lazy.scss +1 -0
  40. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +102 -23
  41. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +140 -148
  42. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
  43. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  44. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +1 -9
  45. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +6 -31
  46. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
  47. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
  48. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
  49. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
  50. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  51. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
  52. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +10 -7
  53. package/v2Components/HtmlEditor/components/PreviewPane/index.js +43 -22
  54. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  55. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
  56. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +0 -18
  57. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -36
  58. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +34 -46
  59. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +46 -52
  60. package/v2Components/HtmlEditor/constants.js +20 -45
  61. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
  62. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +16 -351
  63. package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
  64. package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
  65. package/v2Components/HtmlEditor/hooks/useValidation.js +56 -213
  66. package/v2Components/HtmlEditor/index.js +1 -1
  67. package/v2Components/HtmlEditor/messages.js +94 -102
  68. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +45 -214
  69. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +0 -134
  70. package/v2Components/HtmlEditor/utils/contentSanitizer.js +41 -40
  71. package/v2Components/HtmlEditor/utils/htmlValidator.js +72 -71
  72. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +124 -158
  73. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
  74. package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
  75. package/v2Components/MobilePushPreviewV2/index.js +7 -33
  76. package/v2Components/TemplatePreview/_templatePreview.scss +24 -55
  77. package/v2Components/TemplatePreview/index.js +32 -47
  78. package/v2Components/TemplatePreview/messages.js +0 -4
  79. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
  80. package/v2Containers/App/constants.js +5 -0
  81. package/v2Containers/BeeEditor/index.js +90 -172
  82. package/v2Containers/CreativesContainer/SlideBoxContent.js +108 -129
  83. package/v2Containers/CreativesContainer/SlideBoxFooter.js +13 -163
  84. package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
  85. package/v2Containers/CreativesContainer/constants.js +3 -1
  86. package/v2Containers/CreativesContainer/index.js +215 -243
  87. package/v2Containers/CreativesContainer/messages.js +4 -8
  88. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +210 -0
  89. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
  90. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +354 -38
  91. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -103
  92. package/v2Containers/Email/actions.js +0 -7
  93. package/v2Containers/Email/constants.js +1 -5
  94. package/v2Containers/Email/index.js +29 -234
  95. package/v2Containers/Email/messages.js +0 -32
  96. package/v2Containers/Email/reducer.js +1 -12
  97. package/v2Containers/Email/sagas.js +7 -61
  98. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
  99. package/v2Containers/Email/tests/reducer.test.js +0 -46
  100. package/v2Containers/Email/tests/sagas.test.js +29 -320
  101. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +21 -212
  102. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
  103. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
  104. package/v2Containers/EmailWrapper/constants.js +0 -2
  105. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +79 -629
  106. package/v2Containers/EmailWrapper/index.js +23 -103
  107. package/v2Containers/EmailWrapper/messages.js +1 -65
  108. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
  109. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +82 -596
  110. package/v2Containers/InApp/actions.js +0 -7
  111. package/v2Containers/InApp/constants.js +4 -20
  112. package/v2Containers/InApp/index.js +359 -802
  113. package/v2Containers/InApp/index.scss +3 -4
  114. package/v2Containers/InApp/messages.js +3 -7
  115. package/v2Containers/InApp/reducer.js +3 -21
  116. package/v2Containers/InApp/sagas.js +9 -29
  117. package/v2Containers/InApp/selectors.js +5 -25
  118. package/v2Containers/InApp/tests/index.test.js +50 -154
  119. package/v2Containers/InApp/tests/reducer.test.js +0 -34
  120. package/v2Containers/InApp/tests/sagas.test.js +9 -61
  121. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +0 -3
  122. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +0 -2
  123. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +0 -2
  124. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +0 -9
  125. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +0 -12
  126. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +0 -4
  127. package/v2Containers/TagList/index.js +19 -62
  128. package/v2Containers/Templates/ChannelTypeIllustration.js +13 -1
  129. package/v2Containers/Templates/_templates.scss +202 -56
  130. package/v2Containers/Templates/actions.js +2 -1
  131. package/v2Containers/Templates/constants.js +1 -0
  132. package/v2Containers/Templates/index.js +278 -123
  133. package/v2Containers/Templates/messages.js +24 -4
  134. package/v2Containers/Templates/reducer.js +2 -0
  135. package/v2Containers/Templates/tests/index.test.js +10 -0
  136. package/v2Containers/TemplatesV2/TemplatesV2.style.js +2 -4
  137. package/v2Containers/TemplatesV2/index.js +15 -7
  138. package/v2Containers/TemplatesV2/messages.js +4 -0
  139. package/v2Containers/WebPush/Create/components/BrandIconSection.js +108 -0
  140. package/v2Containers/WebPush/Create/components/ButtonForm.js +172 -0
  141. package/v2Containers/WebPush/Create/components/ButtonItem.js +101 -0
  142. package/v2Containers/WebPush/Create/components/ButtonList.js +145 -0
  143. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +164 -0
  144. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +463 -0
  145. package/v2Containers/WebPush/Create/components/FormActions.js +54 -0
  146. package/v2Containers/WebPush/Create/components/FormActions.test.js +163 -0
  147. package/v2Containers/WebPush/Create/components/MediaSection.js +142 -0
  148. package/v2Containers/WebPush/Create/components/MediaSection.test.js +341 -0
  149. package/v2Containers/WebPush/Create/components/MessageSection.js +103 -0
  150. package/v2Containers/WebPush/Create/components/MessageSection.test.js +268 -0
  151. package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +87 -0
  152. package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +210 -0
  153. package/v2Containers/WebPush/Create/components/TemplateNameSection.js +54 -0
  154. package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +143 -0
  155. package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +86 -0
  156. package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +16 -0
  157. package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +41 -0
  158. package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +54 -0
  159. package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +37 -0
  160. package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +21 -0
  161. package/v2Containers/WebPush/Create/components/_buttons.scss +246 -0
  162. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +554 -0
  163. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +607 -0
  164. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +633 -0
  165. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +666 -0
  166. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +74 -0
  167. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +78 -0
  168. package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +138 -0
  169. package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +406 -0
  170. package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +30 -0
  171. package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +151 -0
  172. package/v2Containers/WebPush/Create/hooks/useImageUpload.js +104 -0
  173. package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +538 -0
  174. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +122 -0
  175. package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +633 -0
  176. package/v2Containers/WebPush/Create/index.js +1148 -0
  177. package/v2Containers/WebPush/Create/index.scss +134 -0
  178. package/v2Containers/WebPush/Create/messages.js +211 -0
  179. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +228 -0
  180. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +294 -0
  181. package/v2Containers/WebPush/Create/preview/PreviewContent.js +90 -0
  182. package/v2Containers/WebPush/Create/preview/PreviewControls.js +305 -0
  183. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +25 -0
  184. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +156 -0
  185. package/v2Containers/WebPush/Create/preview/assets/Light.svg +53 -0
  186. package/v2Containers/WebPush/Create/preview/assets/Top.svg +5 -0
  187. package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +9 -0
  188. package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +9 -0
  189. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  190. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  191. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +106 -0
  192. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +26 -0
  193. package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +9 -0
  194. package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +9 -0
  195. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +18 -0
  196. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +29 -0
  197. package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +9 -0
  198. package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +9 -0
  199. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +51 -0
  200. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +145 -0
  201. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +45 -0
  202. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +68 -0
  203. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +61 -0
  204. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +99 -0
  205. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +733 -0
  206. package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +571 -0
  207. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +85 -0
  208. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +81 -0
  209. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +50 -0
  210. package/v2Containers/WebPush/Create/preview/constants.js +637 -0
  211. package/v2Containers/WebPush/Create/preview/notification-container.scss +79 -0
  212. package/v2Containers/WebPush/Create/preview/preview.scss +358 -0
  213. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +370 -0
  214. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +12 -0
  215. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +12 -0
  216. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +12 -0
  217. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +47 -0
  218. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +11 -0
  219. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +11 -0
  220. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +11 -0
  221. package/v2Containers/WebPush/Create/preview/styles/_base.scss +207 -0
  222. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +153 -0
  223. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +107 -0
  224. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +101 -0
  225. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +229 -0
  226. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +906 -0
  227. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +1081 -0
  228. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +723 -0
  229. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +1327 -0
  230. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +131 -0
  231. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +112 -0
  232. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +144 -0
  233. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +129 -0
  234. package/v2Containers/WebPush/Create/utils/payloadBuilder.js +96 -0
  235. package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +396 -0
  236. package/v2Containers/WebPush/Create/utils/previewUtils.js +89 -0
  237. package/v2Containers/WebPush/Create/utils/urlValidation.js +115 -0
  238. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +449 -0
  239. package/v2Containers/WebPush/Create/utils/validation.js +75 -0
  240. package/v2Containers/WebPush/Create/utils/validation.test.js +283 -0
  241. package/v2Containers/WebPush/actions.js +60 -0
  242. package/v2Containers/WebPush/constants.js +132 -0
  243. package/v2Containers/WebPush/index.js +2 -0
  244. package/v2Containers/WebPush/reducer.js +104 -0
  245. package/v2Containers/WebPush/sagas.js +119 -0
  246. package/v2Containers/WebPush/selectors.js +65 -0
  247. package/v2Containers/WebPush/tests/reducer.test.js +863 -0
  248. package/v2Containers/WebPush/tests/sagas.test.js +566 -0
  249. package/v2Containers/WebPush/tests/selectors.test.js +960 -0
  250. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -34
  251. package/v2Components/ErrorInfoNote/constants.js +0 -1
  252. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -870
  253. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +0 -6
  254. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -277
  255. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -295
  256. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
  257. package/v2Components/HtmlEditor/utils/validationConstants.js +0 -38
  258. package/v2Components/MobilePushPreviewV2/constants.js +0 -6
  259. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +0 -14
  260. package/v2Containers/BeePopupEditor/constants.js +0 -10
  261. package/v2Containers/BeePopupEditor/index.js +0 -194
  262. package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
  263. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1246
  264. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -2472
  265. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
  266. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -955
  267. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
  268. package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
  269. package/v2Containers/InApp/tests/selectors.test.js +0 -612
  270. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -151
  271. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
  272. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -23
  273. package/v2Containers/InAppWrapper/constants.js +0 -16
  274. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
  275. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
  276. package/v2Containers/InAppWrapper/index.js +0 -148
  277. package/v2Containers/InAppWrapper/messages.js +0 -49
  278. package/v2Containers/InappAdvance/index.js +0 -1099
  279. package/v2Containers/InappAdvance/index.scss +0 -10
  280. package/v2Containers/InappAdvance/tests/index.test.js +0 -448
Binary file
package/assets/iOS.png CHANGED
Binary file
@@ -45,13 +45,13 @@ export const GIFT_CARDS = 'GIFT_CARDS';
45
45
  export const PROMO_ENGINE = 'PROMO_ENGINE';
46
46
  export const LIQUID_SUPPORT = 'ENABLE_LIQUID_SUPPORT';
47
47
  export const ENABLE_NEW_MPUSH = 'ENABLE_NEW_MPUSH';
48
- export const SUPPORT_CK_EDITOR = 'SUPPORT_CK_EDITOR';
49
48
  export const CUSTOM_TAG = 'CustomTagMessage';
50
49
  export const CUSTOMER_EXTENDED_FIELD = 'Customer extended fields';
51
50
  export const EXTENDED_TAG = 'ExtendedTagMessage';
52
51
  export const BADGES_UI_ENABLED = 'BADGES_UI_ENABLED';
53
52
  export const JP_LOCALE_HIDE_FEATURE = 'JP_LOCALE_HIDE_FEATURE';
54
53
  export const ENABLE_WECHAT = 'ENABLE_WECHAT';
54
+ export const ENABLE_WEBPUSH = 'ENABLE_WEBPUSH';
55
55
  export const ENABLE_CUSTOMER_BARCODE_TAG = 'ENABLE_CUSTOMER_BARCODE_TAG';
56
56
  export const EMAIL_UNSUBSCRIBE_TAG_MANDATORY = 'EMAIL_UNSUBSCRIBE_TAG_MANDATORY';
57
57
  export const ENABLE_AI_SUGGESTIONS = 'ENABLE_AI_SUGGESTIONS';
@@ -169,7 +169,7 @@ export const JAPANESE_HIDE_DATE_TAGS = [
169
169
  "dd.mm.yy",
170
170
  "dd Mon",
171
171
  "dd/m/yyyy",
172
- ];
172
+ ];
173
173
 
174
174
  export const LIQUID_SUPPORTED_CHANNELS = [EMAIL, SMS, MOBILE_PUSH, INAPP];
175
175
 
package/initialReducer.js CHANGED
@@ -15,7 +15,6 @@ import galleryReducer from './v2Containers/Assets/Gallery/reducer';
15
15
  import CapCollapsibleLeftNavigationReducer from '@capillarytech/cap-ui-library/CapCollapsibleLeftNavigation/reducer';
16
16
  import { AIRA_REDUCER_DOMAIN, askAiraReducer } from '@capillarytech/cap-ui-library/CapAskAira';
17
17
  import previewAndTestReducer from './v2Components/TestAndPreviewSlidebox/reducer';
18
- import inAppReducer from './v2Containers/InApp/reducer';
19
18
 
20
19
  export const initialReducer = {
21
20
  language: languageProviderReducer,
@@ -34,5 +33,4 @@ export const initialReducer = {
34
33
  gallery: galleryReducer,
35
34
  navigationConfig: CapCollapsibleLeftNavigationReducer,
36
35
  previewAndTest: previewAndTestReducer,
37
- inApp: inAppReducer,
38
36
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@capillarytech/creatives-library",
3
3
  "author": "meharaj",
4
- "version": "8.0.266-alpha.1",
4
+ "version": "8.0.266",
5
5
  "description": "Capillary creatives ui",
6
6
  "main": "./index.js",
7
7
  "module": "./index.es.js",
package/services/api.js CHANGED
@@ -287,6 +287,11 @@ export const createMobilePushTemplateV2 = (template) => {
287
287
  return request(url, getAPICallObject('POST', template));
288
288
  };
289
289
 
290
+ export const createWebPushTemplate = (template) => {
291
+ const url = `${API_ENDPOINT}/templates/WEBPUSH`;
292
+ return request(url, getAPICallObject('POST', template));
293
+ };
294
+
290
295
  export const duplicateTemplate = ({id, channel}) => {
291
296
  const url = `${API_ENDPOINT}/templates/duplicate/${id}/${channel}`;
292
297
  return request(url, getAPICallObject('GET'));
@@ -465,11 +470,6 @@ export const getCmsTemplateSettingsV2 = (cmsType, projectId, cmsMode, langId, is
465
470
  return API.get(url);
466
471
  };
467
472
 
468
- export const getCmsAccounts = (cmsType) => {
469
- const url = `${API_ENDPOINT}/cms/accounts?type=${cmsType}`;
470
- return API.get(url);
471
- };
472
-
473
473
  export const getCmsTemplateData = (cmsType, projectId, langId) => {
474
474
  const url = `${API_ENDPOINT}/cms/getContent?type=${cmsType}&projectId=${projectId}&langId=${langId}`;
475
475
  return API.get(url);
@@ -725,9 +725,4 @@ export const getAssetStatus = (type, assetId) => {
725
725
  return request(url, getAPICallObject('GET'));
726
726
  };
727
727
 
728
- export const getBeePopupBuilderToken = () => {
729
- const url = `${API_ENDPOINT}/common/getInappTokenData`;
730
- return request(url, getAPICallObject('GET'));
731
- };
732
-
733
728
  export {request, getAPICallObject};
@@ -26,8 +26,6 @@ import {
26
26
  updateMetaConfig,
27
27
  getMediaDetails,
28
28
  getAssetStatus,
29
- getBeePopupBuilderToken,
30
- getCmsAccounts,
31
29
  } from '../api';
32
30
  import { mockData } from './mockData';
33
31
  import getSchema from '../getSchema';
@@ -975,35 +973,3 @@ describe('getAssetStatus', () => {
975
973
  expect(callArgs[0]).toContain('/assets/video/asset-456/status');
976
974
  });
977
975
  });
978
-
979
- describe('getBeePopupBuilderToken', () => {
980
- it('should return correct response', async () => {
981
- global.fetch.mockReturnValue(Promise.resolve({
982
- status: 200,
983
- json: () => Promise.resolve({
984
- status: 200,
985
- response: 'test',
986
- }),
987
- }));
988
- const result = await getBeePopupBuilderToken();
989
- expect(result).toEqual({
990
- status: 200,
991
- response: 'test',
992
- });
993
- });
994
- });
995
-
996
- describe('getCmsAccounts', () => {
997
- it('should return a promise (line 473-476)', () => {
998
- // Similar to other API tests, just verify it returns a Promise
999
- const result = getCmsAccounts('bee');
1000
- expect(result).toBeInstanceOf(Promise);
1001
- });
1002
-
1003
- it('should be callable with cmsType parameter', () => {
1004
- // Verify function exists and can be called
1005
- expect(typeof getCmsAccounts).toBe('function');
1006
- const result = getCmsAccounts('bee');
1007
- expect(result).toBeInstanceOf(Promise);
1008
- });
1009
- });
@@ -17,7 +17,6 @@ import { initialReducer } from '../../../initialReducer';
17
17
  import { mockInitialState } from './mocks/initialState';
18
18
  import TemplatesV2 from '../../../v2Containers/TemplatesV2';
19
19
  import globalMessages from '../../../v2Containers/Cap/messages';
20
- import rcsMessages from '../../../v2Containers/Rcs/messages';
21
20
  import * as helper from './helper';
22
21
 
23
22
  jest.mock('@capillarytech/cap-ui-utils', () => ({
@@ -148,16 +147,13 @@ describe("Creatives testing template creation", () => {
148
147
  fireEvent.change(templateNameInput, {
149
148
  target: { value: 'rcs_test_template' },
150
149
  });
151
- const richCardOption = await creativesScreen.findByText(/rich card/i);
152
- fireEvent.click(richCardOption);
153
- const imageRadioBtn = await creativesScreen.findByRole('radio', {
154
- name: /image/i,
155
- });
150
+ const imageRadioBtn = creativesScreen.getByText(/image/i);
156
151
  fireEvent.click(imageRadioBtn);
157
- const imageUploader = await creativesScreen.findByText(
158
- /drag and drop image here/i,
159
- );
152
+ const imageUploader = await creativesScreen.findByText(/drag and drop image here/i);
160
153
  expect(imageUploader).toBeInTheDocument();
154
+ const noneRadioBtn = await creativesScreen.findByText(/none/i);
155
+ fireEvent.click(noneRadioBtn);
156
+ expect(imageUploader).not.toBeInTheDocument();
161
157
 
162
158
  // Enter the template title
163
159
  const templateTitleInput = await creativesScreen.findByTestId(
@@ -179,7 +175,7 @@ describe("Creatives testing template creation", () => {
179
175
 
180
176
  // click on Done button
181
177
  const doneButton = creativesScreen.getByRole('button', {
182
- name: rcsMessages.sendForApprovalButtonLabel.defaultMessage,
178
+ name: globalMessages.done.defaultMessage,
183
179
  });
184
180
  await userEvent.click(doneButton);
185
181
  expect(createButton).toBeInTheDocument();
@@ -192,13 +188,11 @@ describe("Creatives testing template creation", () => {
192
188
  name: /rcs/i,
193
189
  });
194
190
  await userEvent.click(rcs);
195
- const createButton = await creativesScreen.findByRole('button', {
191
+ const createButton = creativesScreen.getByRole('button', {
196
192
  name: /create new/i,
197
193
  });
198
194
  await waitFor(() => expect(createButton).toBeEnabled(),{ timeout: 5000, interval: 100 });
199
195
  await userEvent.click(createButton);
200
- const richCardOption = await creativesScreen.findByText(/rich card/i);
201
- fireEvent.click(richCardOption);
202
196
  const templateNameInput = await creativesScreen.findByTestId(
203
197
  /template_name/,
204
198
  {},
@@ -223,14 +217,38 @@ describe("Creatives testing template creation", () => {
223
217
  fireEvent.change(templateTextInput, {
224
218
  target: { value: 'rcs_template_text' },
225
219
  });
226
- const addButton = creativesScreen.getByRole('button', {
227
- name: /add button/i,
220
+ const ctaCheckBox = creativesScreen.getByText(/call to action/i);
221
+ fireEvent.click(ctaCheckBox);
222
+ const doneButton = creativesScreen.getByRole('button', {
223
+ name: globalMessages.done.defaultMessage,
228
224
  });
229
- fireEvent.click(addButton);
230
- const ctaBtnText = creativesScreen.getByPlaceholderText(/enter button text/i);
225
+ //done button will be disabled cta button is not configured
226
+ expect(doneButton).toBeDisabled();
227
+
228
+ //configuring cta button
229
+ //accessing cta button textBox by char limit
230
+ const textLimit = creativesScreen.getByText(/0 \/ 20/i);
231
+ const ctaBtnText = textLimit.parentElement.previousSibling;
232
+
233
+ //configuring CTA button text and URL
231
234
  fireEvent.change(ctaBtnText, {
232
235
  target: { value: 'cta_button' },
233
236
  });
237
+ const ctaLink = await creativesScreen.findByTestId(
238
+ /cta_btn_link/,
239
+ {},
240
+ );
241
+ fireEvent.change(ctaLink, {
242
+ target: { value: 'invalid url' },
243
+ });
244
+ const urlError = creativesScreen.getByText(/button url is not valid/i);
245
+ expect(urlError).toBeInTheDocument();
246
+ fireEvent.change(ctaLink, {
247
+ target: { value: 'https://capillarytech.com/' },
248
+ });
249
+ expect(urlError).not.toBeInTheDocument();
250
+ //saving the template
251
+ fireEvent.click(doneButton);
234
252
  expect(createButton).toBeInTheDocument();
235
253
  });
236
254
 
@@ -1558,25 +1558,6 @@ export const whatsappAccount = {
1558
1558
  response: []
1559
1559
  };
1560
1560
 
1561
- export const rcsAccount = {
1562
- success: true,
1563
- status: {
1564
- isError: false,
1565
- code: 200,
1566
- message: "success",
1567
- },
1568
- message: "WeCRM Account details fetched",
1569
- response: [
1570
- {
1571
- name: "RCS Account",
1572
- sourceAccountIdentifier: "rcs_account",
1573
- configs: {
1574
- accessToken: "rcs_access_token",
1575
- },
1576
- },
1577
- ],
1578
- };
1579
-
1580
1561
  export const mpushAccount = {
1581
1562
  success: true,
1582
1563
  status: {
@@ -1735,18 +1716,7 @@ export const emailTemplates = {
1735
1716
 
1736
1717
  export const domainProperties = {
1737
1718
  entity:{
1738
- WHATSAPP:[],
1739
- RCS: [
1740
- {
1741
- domainProperties: {
1742
- hostName: "rcs-host",
1743
- connectionProperties: {
1744
- sourceAccountIdentifier: "rcs_account",
1745
- account_sid: "rcs_account",
1746
- },
1747
- },
1748
- },
1749
- ],
1719
+ WHATSAPP:[]
1750
1720
  },
1751
1721
  warnings:[]
1752
1722
  };
@@ -36,8 +36,6 @@ export const server = setupServer(
36
36
  rest.get(`${API_ENDPOINT}/meta/wecrm`, (req, res, ctx) => {
37
37
  const sourceName = req.url.searchParams.get('source_name');
38
38
  switch (sourceName) {
39
- case 'RCS':
40
- return res(ctx.status(200), ctx.json(apiResponse.rcsAccount));
41
39
  case 'WHATSAPP':
42
40
  return res(ctx.status(200), ctx.json(apiResponse.whatsappAccount));
43
41
  case 'VIBER':
package/utils/common.js CHANGED
@@ -21,8 +21,8 @@ import {
21
21
  EMAIL_UNSUBSCRIBE_TAG_MANDATORY,
22
22
  BADGES_ISSUE,
23
23
  ENABLE_WECHAT,
24
+ ENABLE_WEBPUSH,
24
25
  LIQUID_SUPPORT,
25
- SUPPORT_CK_EDITOR,
26
26
  ENABLE_NEW_MPUSH
27
27
  } from '../constants/unified';
28
28
  import { apiMessageFormatHandler } from './commonUtils';
@@ -96,10 +96,6 @@ export const hasLiquidSupportFeature = Auth.hasFeatureAccess.bind(
96
96
  LIQUID_SUPPORT,
97
97
  );
98
98
 
99
- export const hasSupportCKEditor = Auth.hasFeatureAccess.bind(
100
- null,
101
- SUPPORT_CK_EDITOR,
102
- );
103
99
 
104
100
  export const hasGiftVoucherFeature = Auth.hasFeatureAccess.bind(
105
101
  null,
@@ -121,6 +117,11 @@ export const hasWechatFeatureEnabled = Auth.hasFeatureAccess.bind(
121
117
  ENABLE_WECHAT,
122
118
  );
123
119
 
120
+ export const hasWebPushFeatureEnabled = Auth.hasFeatureAccess.bind(
121
+ null,
122
+ ENABLE_WEBPUSH,
123
+ );
124
+
124
125
  export const hasCustomerBarcodeFeatureEnabled = Auth.hasFeatureAccess.bind(
125
126
  null,
126
127
  ENABLE_CUSTOMER_BARCODE_TAG,
@@ -173,30 +173,20 @@ export const validateLiquidTemplateContent = async (
173
173
  // Handle API errors or empty content
174
174
  if (result?.errors?.length > 0 || !validString || isError) {
175
175
  let standardErrors = [];
176
- let liquidErrors = [];
177
-
178
- // Empty content errors are NOT from liquid endpoints, so they go to standardErrors
179
176
  if (!validString) {
180
177
  standardErrors = [emptyBodyError];
181
178
  }
182
-
183
- // IMPORTANT: Errors from extractTags and liquidValidation endpoints should ALWAYS be categorized as liquidErrors
184
- // These endpoints are: /extractTags and /ask-aira-service/creatives_ai/liquidValidation
185
- // Only errors from these endpoints should appear in Liquid Issues tab
186
- if (result && Array.isArray(result?.errors) && result.errors.length > 0) {
187
- // Errors from extractTags or liquidValidation endpoints
188
- liquidErrors = result.errors.map((error) => {
179
+ let liquidErrors;
180
+ if (result && Array.isArray(result?.errors)) {
181
+ liquidErrors = result?.errors?.map((error) => {
189
182
  const message = typeof error?.message === "string"
190
183
  ? error.message
191
184
  : somethingWrongMsg;
192
185
  return message;
193
186
  });
194
- } else if (isError) {
195
- // If isError is true, it means the API call to extractTags/liquidValidation failed
196
- // This is also a liquid endpoint error, so categorize as liquidErrors
187
+ } else {
197
188
  liquidErrors = [somethingWrongMsg];
198
189
  }
199
-
200
190
  onError({
201
191
  standardErrors,
202
192
  liquidErrors,
@@ -408,20 +398,7 @@ export const validateMobilePushContent = async (formData, options) => {
408
398
  // Helper function to extract content for a platform
409
399
  export const extractContent = (platformData) => {
410
400
  if (!platformData) return '';
411
- const { title, message, ctas, isBEEeditor, beeHtml } = platformData;
412
-
413
- // For BEE editor, extract content from beeHtml
414
- if (isBEEeditor && beeHtml) {
415
- // beeHtml can be an object with value property or a string
416
- const beeHtmlContent = typeof beeHtml === 'string' ? beeHtml : (beeHtml?.value || '');
417
- return [
418
- title,
419
- beeHtmlContent,
420
- ...((ctas?.map((cta) => cta?.text || cta?.actionLink)) || []),
421
- ].filter(Boolean).join(' ');
422
- }
423
-
424
- // For regular content
401
+ const { title, message, ctas } = platformData;
425
402
  return [
426
403
  title,
427
404
  message,
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Utility functions for uploading images from URLs
3
+ *
4
+ * NOTE: CORS-limited; will be replaced with backend implementation.
5
+ * Flow currently hidden (not removed) from frontend.
6
+ */
7
+
8
+ import {
9
+ DEFAULT_ALLOWED_CONTENT_TYPES,
10
+ MIME_TYPE_TO_EXTENSION,
11
+ DEFAULT_IMAGE_EXTENSION,
12
+ } from '../v2Components/CapImageUrlUpload/constants';
13
+
14
+ /**
15
+ * Fetches an image from a URL
16
+ *
17
+ * @param {string} url - The image URL to fetch
18
+ * @returns {Promise<Response>} - The fetch response object
19
+ * @throws {Error} - If the fetch fails (network/CORS error)
20
+ */
21
+ export const fetchImageFromUrl = async (url) => {
22
+ const trimmedUrl = url?.trim() || '';
23
+
24
+ if (!trimmedUrl) {
25
+ throw new Error('URL is required');
26
+ }
27
+
28
+ // CORS-limited: fails for images without proper CORS headers
29
+ const response = await fetch(trimmedUrl, {
30
+ method: 'GET',
31
+ redirect: 'follow',
32
+ mode: 'cors',
33
+ });
34
+
35
+ if (!response.ok) {
36
+ throw new Error(`Failed to fetch image: ${response.status} ${response.statusText}`);
37
+ }
38
+
39
+ return response;
40
+ };
41
+
42
+ /**
43
+ * Helper function to upload image from URL
44
+ * Fetches image, validates content type and size, converts to File, and uploads via uploadAsset
45
+ *
46
+ * @param {string} url - The image URL to upload
47
+ * @param {Function} formatMessage - React Intl formatMessage function
48
+ * @param {Object} messages - React Intl messages object
49
+ * @param {Function} uploadAssetFn - Function to upload the asset (file, type, fileParams)
50
+ * @param {string} fileNamePrefix - Prefix for the generated file name
51
+ * @param {number} maxSize - Maximum file size in bytes
52
+ * @param {string[]} allowedContentTypes - Array of allowed MIME types (defaults to DEFAULT_ALLOWED_CONTENT_TYPES)
53
+ * @returns {Promise<{success: boolean, error: string}>} - Result object with success status and error message
54
+ *
55
+ * @example
56
+ * const result = await uploadImageFromUrlHelper(
57
+ * 'https://example.com/image.jpg',
58
+ * formatMessage,
59
+ * messages,
60
+ * uploadAsset,
61
+ * 'my-image',
62
+ * 5000000,
63
+ * ['image/jpeg', 'image/png']
64
+ * );
65
+ */
66
+ export const uploadImageFromUrlHelper = async (
67
+ url,
68
+ formatMessage,
69
+ messages,
70
+ uploadAssetFn,
71
+ fileNamePrefix,
72
+ maxSize,
73
+ allowedContentTypes = DEFAULT_ALLOWED_CONTENT_TYPES,
74
+ ) => {
75
+ const trimmedUrl = url?.trim() || '';
76
+
77
+ try {
78
+ const response = await fetchImageFromUrl(trimmedUrl);
79
+
80
+ // Validate Content-Type
81
+ const contentType = response.headers?.get('Content-Type') || '';
82
+ const normalizedContentType = contentType.split(';')[0].toLowerCase().trim();
83
+
84
+ if (!allowedContentTypes.includes(normalizedContentType)) {
85
+ return {
86
+ success: false,
87
+ error: formatMessage(messages.imageTypeInvalid),
88
+ };
89
+ }
90
+
91
+ const blob = await response.blob();
92
+
93
+ if (blob.size > maxSize) {
94
+ return {
95
+ success: false,
96
+ error: formatMessage(messages.imageSizeInvalid),
97
+ };
98
+ }
99
+
100
+ // Load image to get dimensions and verify validity
101
+ return new Promise((resolve) => {
102
+ const img = new Image();
103
+ const objectUrl = URL.createObjectURL(blob);
104
+
105
+ img.onload = () => {
106
+ const extension = MIME_TYPE_TO_EXTENSION[normalizedContentType] || DEFAULT_IMAGE_EXTENSION;
107
+ const fileName = `${fileNamePrefix}.${extension}`;
108
+ const file = new File([blob], fileName, { type: blob.type });
109
+ const fileParams = {
110
+ width: img.width,
111
+ height: img.height,
112
+ error: false,
113
+ };
114
+
115
+ uploadAssetFn(file, 'image', fileParams);
116
+ URL.revokeObjectURL(objectUrl);
117
+
118
+ resolve({
119
+ success: true,
120
+ error: '',
121
+ });
122
+ };
123
+
124
+ img.onerror = () => {
125
+ URL.revokeObjectURL(objectUrl);
126
+ resolve({
127
+ success: false,
128
+ error: formatMessage(messages.imageLoadError),
129
+ });
130
+ };
131
+
132
+ img.src = objectUrl;
133
+ });
134
+ } catch (error) {
135
+ return {
136
+ success: false,
137
+ error: formatMessage(messages.imageLoadError),
138
+ };
139
+ }
140
+ };
141
+