@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
@@ -1,4 +1,4 @@
1
- import React, { useRef, useCallback } from 'react';
1
+ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { FormattedMessage } from 'react-intl';
4
4
  import styled from 'styled-components';
@@ -11,38 +11,25 @@ import CapSpin from '@capillarytech/cap-ui-library/CapSpin';
11
11
  import CapButton from '@capillarytech/cap-ui-library/CapButton';
12
12
  import CapError from '@capillarytech/cap-ui-library/CapError';
13
13
  import ComponentWithLabelHOC from '@capillarytech/cap-ui-library/assets/HOCs/ComponentWithLabelHOC';
14
- import { CAP_COLOR_06, CAP_WHITE } from '@capillarytech/cap-ui-library/styled/variables';
15
- import { EmailWithoutSaga } from '../../Email';
14
+ import Email from '../../Email';
16
15
  import CmsTemplatesComponent from '../../../v2Components/CmsTemplatesComponent';
17
- import EmailHTMLEditor from './EmailHTMLEditor';
18
- import TestAndPreviewSlidebox from '../../../v2Components/TestAndPreviewSlidebox';
19
- import { EMAIL } from '../../CreativesContainer/constants';
20
16
  import messages from '../messages';
21
17
  import { EMAIL_CREATE_MODES, STEPS } from '../constants';
22
- import { hasSupportCKEditor } from '../../../utils/common';
23
18
 
24
19
  const CapRadioCardWithLabel = ComponentWithLabelHOC(CapRadioCard);
25
20
 
26
21
  const CardContainer = styled.div`
27
22
  margin-top: 16px;
28
-
29
- .ant-radio-group.cap-radioCard-v2 {
30
- .ant-radio-button-wrapper {
31
- &.ant-radio-button-wrapper-checked {
32
- .icon-container {
33
- background-color: ${CAP_COLOR_06};
34
- .anticon,
35
- .cap-icon {
36
- color: ${CAP_WHITE};
37
- }
38
- }
23
+ .ant-radio-group{
24
+ .ant-radio-button-wrapper{
25
+ &:first-child{
26
+ margin-left: unset;
39
27
  }
40
28
  }
41
29
  }
42
30
  `;
43
31
 
44
-
45
- // Mode selection component
32
+ // Mode selection component that handles the creation mode selection UI
46
33
  const ModeSelectionUI = ({
47
34
  isFullMode,
48
35
  templateName,
@@ -64,21 +51,20 @@ const ModeSelectionUI = ({
64
51
  value={templateName}
65
52
  labelPosition="top"
66
53
  size="default"
67
- style={{ width: '68%' }}
54
+ style={{ width: '68%'}}
68
55
  />
69
56
  )}
70
57
  <CardContainer>
71
58
  <CapRadioCardWithLabel
72
- style={{ marginLeft: '-6px'}}
73
59
  panes={modes}
74
60
  onChange={onChange}
75
61
  selected={emailCreateMode}
76
- label={<FormattedMessage {...messages.editorType} />}
62
+ label={<FormattedMessage {...messages.createMode} />}
77
63
  />
78
64
  </CardContainer>
79
65
  <>
80
66
  {emailCreateMode === EMAIL_CREATE_MODES.UPLOAD && (
81
- <div>
67
+ <div style={{ marginLeft: '8px' }}>
82
68
  <CapUploader onChange={useFileUpload} accept=".zip, .html, .htm" showUploadList={false}>
83
69
  {(isFullMode && isTemplateNameEmpty) && (
84
70
  <CapError type="error">
@@ -112,36 +98,25 @@ ModeSelectionUI.propTypes = {
112
98
  uploadButtonLabel: PropTypes.node.isRequired,
113
99
  };
114
100
 
115
- // Content creation component
101
+ // Content creation component that handles the email or template selection UI
116
102
  const ContentCreationUI = ({
117
103
  isShowEmailCreate,
118
104
  emailProps,
119
105
  cmsTemplatesProps,
120
- isHTMLEditorMode,
121
- htmlEditorProps,
122
- }) => {
123
-
124
- return (
125
- <>
126
- {isShowEmailCreate ? (
127
- isHTMLEditorMode ? (
128
- <EmailHTMLEditor {...htmlEditorProps} />
129
- ) : (
130
- <EmailWithoutSaga {...emailProps} />
131
- )
132
- ) : (
133
- <CmsTemplatesComponent {...cmsTemplatesProps} />
134
- )}
135
- </>
136
- );
137
- };
106
+ }) => (
107
+ <>
108
+ {isShowEmailCreate ? (
109
+ <Email {...emailProps} />
110
+ ) : (
111
+ <CmsTemplatesComponent {...cmsTemplatesProps} />
112
+ )}
113
+ </>
114
+ );
138
115
 
139
116
  ContentCreationUI.propTypes = {
140
117
  isShowEmailCreate: PropTypes.bool.isRequired,
141
118
  emailProps: PropTypes.object.isRequired,
142
119
  cmsTemplatesProps: PropTypes.object.isRequired,
143
- isHTMLEditorMode: PropTypes.bool,
144
- htmlEditorProps: PropTypes.object,
145
120
  };
146
121
 
147
122
  // Main EmailWrapper presentational component
@@ -162,137 +137,9 @@ const EmailWrapperView = ({
162
137
  isShowEmailCreate,
163
138
  emailProps,
164
139
  cmsTemplatesProps,
165
- metaEntities,
166
- loadingTags,
167
- injectedTags,
168
- globalActions,
169
- supportedTags,
170
- getDefaultTags,
171
- location,
172
- currentOrgDetails,
173
- forwardedTags,
174
- selectedOfferDetails,
175
- eventContextTags,
176
- getFormdata,
177
- isGetFormData,
178
- getLiquidTags,
179
- showLiquidErrorInFooter,
180
- onValidationFail,
181
- emailActions,
182
- Email,
183
- templateData: templateDataProp,
184
- params,
185
- fetchingLiquidTags,
186
- createTemplateInProgress,
187
- fetchingCmsData,
188
- setIsLoadingContent,
189
- showTestAndPreviewSlidebox,
190
- handleCloseTestAndPreview,
191
- showTemplateName,
192
- onHtmlEditorValidationStateChange,
193
- moduleType,
194
140
  }) => {
195
- const htmlEditorRef = useRef(null);
196
- const supportCKEditor = hasSupportCKEditor();
197
- const hasParamsIdForEditor = params?.id || location?.query?.id || location?.params?.id || location?.pathname?.includes('/edit/');
198
- const isEditModeForEditor = hasParamsIdForEditor;
199
- const isBEEFromProps = emailProps?.editor === 'BEE' && emailProps?.selectedEditorMode === null;
200
- const isDragDropFromCreateMode = emailCreateMode === EMAIL_CREATE_MODES.DRAG_DROP;
201
- const isExplicitlyBEEEditor = isBEEFromProps || isDragDropFromCreateMode;
202
- let isHTMLEditorMode = false;
203
141
 
204
- if (supportCKEditor) {
205
- // Legacy flow: use HTML editor for UPLOAD so zip/HTML content (EmailLayout) is shown; use Email component for EDITOR
206
- isHTMLEditorMode = emailCreateMode === EMAIL_CREATE_MODES.UPLOAD;
207
- } else if (isEditModeForEditor) {
208
- isHTMLEditorMode = !isExplicitlyBEEEditor;
209
- } else {
210
- if (isExplicitlyBEEEditor || isBEEFromProps || isDragDropFromCreateMode) {
211
- isHTMLEditorMode = false;
212
- } else {
213
- isHTMLEditorMode = emailProps?.selectedEditorMode === EMAIL_CREATE_MODES.HTML_EDITOR ||
214
- emailCreateMode === EMAIL_CREATE_MODES.HTML_EDITOR;
215
- }
216
- }
217
-
218
- const isShowTemplateSelection = step === STEPS.MODE_SELECTION;
219
-
220
- // Create onFormDataChange callback for template name updates (similar to Email component)
221
- // This allows CreativesContainer to update the template name when user clicks "Edit name"
222
- // When user edits the name in CreativesContainer header, it calls this callback
223
- // which updates the template name in EmailWrapper, and then CreativesContainer
224
- // will call showTemplateName again with the updated formData
225
- const handleFormDataChange = useCallback((updatedFormData) => {
226
- const newTemplateName = updatedFormData?.['template-name'] || templateName;
227
- if (newTemplateName !== templateName && onTemplateNameChange) {
228
- // Update template name in parent (useEmailWrapper hook)
229
- onTemplateNameChange({ target: { value: newTemplateName } });
230
- }
231
- // Note: CreativesContainer will call showTemplateName again after this callback
232
- // (it stores the callback in templateContainerDetails and calls it after state updates)
233
- }, [templateName, onTemplateNameChange]);
234
-
235
- const htmlEditorProps = isHTMLEditorMode ? {
236
- // Location and params
237
- location,
238
- params,
239
- // Tag-related props
240
- getDefaultTags,
241
- supportedTags,
242
- metaEntities,
243
- injectedTags,
244
- globalActions,
245
- loadingTags,
246
- eventContextTags,
247
- forwardedTags,
248
- selectedOfferDetails,
249
- currentOrgDetails,
250
- // Email Redux state and actions
251
- Email,
252
- emailActions,
253
- // Full mode props
254
- isFullMode,
255
- templateName,
256
- isGetFormData,
257
- getFormdata,
258
- // Library mode props
259
- templateData: templateDataProp,
260
- // Uploaded content from zip file
261
- EmailLayout,
262
- // Liquid validation
263
- getLiquidTags,
264
- showLiquidErrorInFooter,
265
- // Validation state callback
266
- onHtmlEditorValidationStateChange,
267
- onValidationFail,
268
- // Template name
269
- showTemplateName,
270
- onFormDataChange: handleFormDataChange,
271
- // Module type for unsubscribe tag validation
272
- moduleType,
273
- // Loading states
274
- fetchingLiquidTags: fetchingLiquidTags || false,
275
- createTemplateInProgress: createTemplateInProgress || false,
276
- fetchingCmsData: fetchingCmsData || false,
277
- // Parent loading control
278
- setIsLoadingContent,
279
- ref: htmlEditorRef,
280
- } : {};
281
-
282
- // Get formData for TestAndPreviewSlidebox when needed
283
- const getFormDataForPreview = () => {
284
- if (htmlEditorRef.current && htmlEditorRef.current.getFormDataForPreview) {
285
- return htmlEditorRef.current.getFormDataForPreview();
286
- }
287
- return {};
288
- };
289
-
290
- const getContentForPreview = () => {
291
- if (htmlEditorRef.current && htmlEditorRef.current.getContentForPreview) {
292
- return htmlEditorRef.current.getContentForPreview();
293
- }
294
- return '';
295
- };
142
+ const isShowTemplateSelection = step === STEPS.MODE_SELECTION || (step === STEPS.TEMPLATE_SELECTION && emailCreateMode === EMAIL_CREATE_MODES.UPLOAD);
296
143
 
297
144
  return (
298
145
  <>
@@ -316,22 +163,9 @@ const EmailWrapperView = ({
316
163
  isShowEmailCreate={isShowEmailCreate}
317
164
  emailProps={emailProps}
318
165
  cmsTemplatesProps={cmsTemplatesProps}
319
- isHTMLEditorMode={isHTMLEditorMode}
320
- htmlEditorProps={htmlEditorProps}
321
166
  />
322
167
  )}
323
168
  </CapSpin>
324
- {/* Render TestAndPreviewSlidebox for HTML Editor (similar to legacy Email component) */}
325
- {isHTMLEditorMode && showTestAndPreviewSlidebox && (
326
- <TestAndPreviewSlidebox
327
- show={showTestAndPreviewSlidebox}
328
- onClose={handleCloseTestAndPreview}
329
- formData={getFormDataForPreview()}
330
- content={getContentForPreview()}
331
- currentChannel={EMAIL}
332
- currentTab={1}
333
- />
334
- )}
335
169
  </>
336
170
  );
337
171
  };
@@ -341,10 +175,6 @@ EmailWrapperView.propTypes = {
341
175
  emailCreateMode: PropTypes.string,
342
176
  step: PropTypes.string,
343
177
  isFullMode: PropTypes.bool,
344
- getFormdata: PropTypes.func,
345
- isGetFormData: PropTypes.bool,
346
- getLiquidTags: PropTypes.func,
347
- showLiquidErrorInFooter: PropTypes.func,
348
178
  templateName: PropTypes.string,
349
179
  onTemplateNameChange: PropTypes.func.isRequired,
350
180
  isTemplateNameEmpty: PropTypes.bool,
@@ -357,27 +187,6 @@ EmailWrapperView.propTypes = {
357
187
  isShowEmailCreate: PropTypes.bool.isRequired,
358
188
  emailProps: PropTypes.object.isRequired,
359
189
  cmsTemplatesProps: PropTypes.object.isRequired,
360
- metaEntities: PropTypes.object,
361
- loadingTags: PropTypes.bool,
362
- injectedTags: PropTypes.object,
363
- globalActions: PropTypes.object,
364
- supportedTags: PropTypes.array,
365
- getDefaultTags: PropTypes.string,
366
- location: PropTypes.object,
367
- currentOrgDetails: PropTypes.object,
368
- forwardedTags: PropTypes.object,
369
- selectedOfferDetails: PropTypes.array,
370
- eventContextTags: PropTypes.array,
371
- emailActions: PropTypes.object,
372
- Email: PropTypes.object,
373
- templateData: PropTypes.object,
374
- params: PropTypes.object,
375
- fetchingLiquidTags: PropTypes.bool,
376
- createTemplateInProgress: PropTypes.bool,
377
- fetchingCmsData: PropTypes.bool,
378
- setIsLoadingContent: PropTypes.func,
379
- showTestAndPreviewSlidebox: PropTypes.bool,
380
- handleCloseTestAndPreview: PropTypes.func,
381
190
  };
382
191
 
383
192
  export default EmailWrapperView;
@@ -24,20 +24,24 @@ const HTMLEditorTesting = () => {
24
24
  // Show/Hide editor
25
25
  show: () => {
26
26
  setIsVisible(true);
27
+ console.log('✅ HTMLEditor test mode activated');
27
28
  },
28
29
 
29
30
  hide: () => {
30
31
  setIsVisible(false);
32
+ console.log('✅ HTMLEditor test mode deactivated');
31
33
  },
32
34
 
33
35
  toggle: () => {
34
- setIsVisible((prev) => !prev);
36
+ setIsVisible(prev => !prev);
37
+ console.log(`✅ HTMLEditor test mode ${!isVisible ? 'activated' : 'deactivated'}`);
35
38
  },
36
39
 
37
40
  // Variant control
38
41
  setVariant: (newVariant) => {
39
42
  if (['email', 'inapp'].includes(newVariant)) {
40
43
  setVariant(newVariant);
44
+ console.log(`✅ Variant set to: ${newVariant}`);
41
45
  } else {
42
46
  console.error('❌ Invalid variant. Use: "email" or "inapp"');
43
47
  }
@@ -48,6 +52,7 @@ const HTMLEditorTesting = () => {
48
52
  const validLayouts = Object.values(LAYOUT_TYPES);
49
53
  if (validLayouts.includes(layout)) {
50
54
  setLayoutType(layout);
55
+ console.log(`✅ Layout set to: ${layout}`);
51
56
  } else {
52
57
  console.error(`❌ Invalid layout. Use: ${validLayouts.join(', ')}`);
53
58
  }
@@ -56,22 +61,58 @@ const HTMLEditorTesting = () => {
56
61
  // Content control
57
62
  setContent: (newContent) => {
58
63
  setContent(newContent);
64
+ console.log('✅ Content updated');
59
65
  },
60
66
 
61
67
  getContent: () => {
68
+ console.log('Current content:', content);
62
69
  return content;
63
70
  },
64
71
 
65
72
  // Status
66
73
  status: () => {
74
+ console.log('📊 HTMLEditor Test Status:');
75
+ console.log(` Visible: ${isVisible}`);
76
+ console.log(` Variant: ${variant}`);
77
+ console.log(` Layout: ${layoutType}`);
78
+ console.log(` Content size: ${content.length} chars`);
67
79
  },
68
80
 
69
81
  // Help
70
82
  help: () => {
71
- },
83
+ console.log(`
84
+ 🚀 HTMLEditor Testing Console Commands:
85
+
86
+ 📱 Basic Controls:
87
+ htmlEditorTest.show() - Show the editor
88
+ htmlEditorTest.hide() - Hide the editor
89
+ htmlEditorTest.toggle() - Toggle editor visibility
90
+
91
+ ⚙️ Configuration:
92
+ htmlEditorTest.setVariant('email') - Set to email variant
93
+ htmlEditorTest.setVariant('inapp') - Set to inapp variant
94
+ htmlEditorTest.setLayout('POPUP') - Set layout (inapp only)
95
+ - Valid: POPUP, HEADER, FOOTER, FULLSCREEN
96
+
97
+ 📝 Content:
98
+ htmlEditorTest.setContent('<h1>Test</h1>') - Set editor content
99
+ htmlEditorTest.getContent() - Get current content
100
+
101
+ 📊 Status:
102
+ htmlEditorTest.status() - Show current status
103
+ htmlEditorTest.help() - Show this help
104
+
105
+ 💡 Example Usage:
106
+ htmlEditorTest.show()
107
+ htmlEditorTest.setVariant('inapp')
108
+ htmlEditorTest.setLayout('HEADER') // Top banner
109
+ htmlEditorTest.setLayout('FOOTER') // Bottom banner
110
+ `);
111
+ }
72
112
  };
73
113
 
74
114
  // Show help on first load
115
+ console.log('🚀 HTMLEditor Testing Ready! Type htmlEditorTest.help() for commands');
75
116
 
76
117
  // Cleanup on unmount
77
118
  return () => {
@@ -87,40 +128,32 @@ const HTMLEditorTesting = () => {
87
128
  }
88
129
 
89
130
  return (
90
- <div
91
- style={{
92
- position: 'fixed',
93
- top: 0,
94
- left: 0,
95
- right: 0,
96
- bottom: 0,
97
- backgroundColor: 'rgba(0, 0, 0, 0.8)',
98
- zIndex: 9999,
131
+ <div style={{
132
+ position: 'fixed',
133
+ top: 0,
134
+ left: 0,
135
+ right: 0,
136
+ bottom: 0,
137
+ backgroundColor: 'rgba(0, 0, 0, 0.8)',
138
+ zIndex: 9999,
139
+ display: 'flex',
140
+ flexDirection: 'column',
141
+ padding: '20px'
142
+ }}>
143
+ {/* Header */}
144
+ <div style={{
145
+ backgroundColor: '#fff',
146
+ padding: '10px 20px',
147
+ borderRadius: '8px 8px 0 0',
99
148
  display: 'flex',
100
- flexDirection: 'column',
101
- padding: '20px',
149
+ justifyContent: 'space-between',
150
+ alignItems: 'center',
151
+ borderBottom: '1px solid #ddd'
102
152
  }}>
103
- {/* Header */}
104
- <div
105
- style={{
106
- backgroundColor: '#fff',
107
- padding: '10px 20px',
108
- borderRadius: '8px 8px 0 0',
109
- display: 'flex',
110
- justifyContent: 'space-between',
111
- alignItems: 'center',
112
- borderBottom: '1px solid #ddd',
113
- }}>
114
153
  <div>
115
154
  <strong>HTMLEditor Testing Mode</strong>
116
155
  <span style={{ marginLeft: '20px', color: '#666' }}>
117
- Variant:
118
- {' '}
119
- {variant}
120
- {' '}
121
- | Layout:
122
- {' '}
123
- {layoutType}
156
+ Variant: {variant} | Layout: {layoutType}
124
157
  </span>
125
158
  </div>
126
159
  <button
@@ -131,7 +164,7 @@ const HTMLEditorTesting = () => {
131
164
  border: 'none',
132
165
  padding: '5px 15px',
133
166
  borderRadius: '4px',
134
- cursor: 'pointer',
167
+ cursor: 'pointer'
135
168
  }}
136
169
  >
137
170
  Close
@@ -139,13 +172,12 @@ const HTMLEditorTesting = () => {
139
172
  </div>
140
173
 
141
174
  {/* Editor Container */}
142
- <div
143
- style={{
144
- flex: 1,
145
- backgroundColor: '#fff',
146
- borderRadius: '0 0 8px 8px',
147
- overflow: 'hidden',
148
- }}>
175
+ <div style={{
176
+ flex: 1,
177
+ backgroundColor: '#fff',
178
+ borderRadius: '0 0 8px 8px',
179
+ overflow: 'hidden'
180
+ }}>
149
181
  <IntlProvider locale="en" messages={{}}>
150
182
  <HTMLEditor
151
183
  variant={variant}
@@ -153,8 +185,10 @@ const HTMLEditorTesting = () => {
153
185
  initialContent={content}
154
186
  onContentChange={(newContent) => {
155
187
  setContent(newContent);
188
+ console.log('📝 Content changed:', newContent.substring(0, 100) + '...');
156
189
  }}
157
- onSave={() => {
190
+ onSave={(savedContent) => {
191
+ console.log('💾 Content saved:', savedContent);
158
192
  }}
159
193
  />
160
194
  </IntlProvider>
@@ -47,8 +47,8 @@ describe('HTMLEditorTesting', () => {
47
47
  beforeEach(() => {
48
48
  // Mock console methods
49
49
  consoleSpy = {
50
- log: jest.spyOn(console, 'log').mockImplementation(() => { }),
51
- error: jest.spyOn(console, 'error').mockImplementation(() => { })
50
+ log: jest.spyOn(console, 'log').mockImplementation(() => {}),
51
+ error: jest.spyOn(console, 'error').mockImplementation(() => {})
52
52
  };
53
53
 
54
54
  // Clear any existing window.htmlEditorTest
@@ -88,6 +88,14 @@ describe('HTMLEditorTesting', () => {
88
88
  expect(typeof window.htmlEditorTest.status).toBe('function');
89
89
  expect(typeof window.htmlEditorTest.help).toBe('function');
90
90
  });
91
+
92
+ it('logs help message on initial load', () => {
93
+ render(<HTMLEditorTesting />);
94
+
95
+ expect(consoleSpy.log).toHaveBeenCalledWith(
96
+ '🚀 HTMLEditor Testing Ready! Type htmlEditorTest.help() for commands'
97
+ );
98
+ });
91
99
  });
92
100
 
93
101
  describe('Visibility Control', () => {
@@ -99,6 +107,7 @@ describe('HTMLEditorTesting', () => {
99
107
  });
100
108
 
101
109
  expect(screen.getByTestId('mock-html-editor')).toBeInTheDocument();
110
+ expect(consoleSpy.log).toHaveBeenCalledWith('✅ HTMLEditor test mode activated');
102
111
  });
103
112
 
104
113
  it('hides editor when hide() is called', () => {
@@ -115,6 +124,7 @@ describe('HTMLEditorTesting', () => {
115
124
  window.htmlEditorTest.hide();
116
125
  });
117
126
  expect(screen.queryByTestId('mock-html-editor')).not.toBeInTheDocument();
127
+ expect(consoleSpy.log).toHaveBeenCalledWith('✅ HTMLEditor test mode deactivated');
118
128
  });
119
129
 
120
130
  it('toggles editor visibility with toggle()', () => {
@@ -125,11 +135,14 @@ describe('HTMLEditorTesting', () => {
125
135
  window.htmlEditorTest.toggle();
126
136
  });
127
137
  expect(screen.getByTestId('mock-html-editor')).toBeInTheDocument();
138
+ expect(consoleSpy.log).toHaveBeenCalledWith('✅ HTMLEditor test mode activated');
139
+
128
140
  // Toggle to hide
129
141
  act(() => {
130
142
  window.htmlEditorTest.toggle();
131
143
  });
132
144
  expect(screen.queryByTestId('mock-html-editor')).not.toBeInTheDocument();
145
+ expect(consoleSpy.log).toHaveBeenCalledWith('✅ HTMLEditor test mode deactivated');
133
146
  });
134
147
 
135
148
  it('closes editor when close button is clicked', () => {
@@ -156,6 +169,7 @@ describe('HTMLEditorTesting', () => {
156
169
  });
157
170
 
158
171
  expect(screen.getByTestId('editor-variant')).toHaveTextContent('email');
172
+ expect(consoleSpy.log).toHaveBeenCalledWith('✅ Variant set to: email');
159
173
  });
160
174
 
161
175
  it('sets variant to inapp', () => {
@@ -167,6 +181,7 @@ describe('HTMLEditorTesting', () => {
167
181
  });
168
182
 
169
183
  expect(screen.getByTestId('editor-variant')).toHaveTextContent('inapp');
184
+ expect(consoleSpy.log).toHaveBeenCalledWith('✅ Variant set to: inapp');
170
185
  });
171
186
 
172
187
  it('rejects invalid variant', () => {
@@ -200,6 +215,7 @@ describe('HTMLEditorTesting', () => {
200
215
  });
201
216
 
202
217
  expect(screen.getByTestId('editor-layout')).toHaveTextContent(LAYOUT_TYPES.MODAL);
218
+ expect(consoleSpy.log).toHaveBeenCalledWith(`✅ Layout set to: ${LAYOUT_TYPES.MODAL}`);
203
219
  });
204
220
 
205
221
  it('sets layout to HEADER', () => {
@@ -211,6 +227,7 @@ describe('HTMLEditorTesting', () => {
211
227
  });
212
228
 
213
229
  expect(screen.getByTestId('editor-layout')).toHaveTextContent(LAYOUT_TYPES.HEADER);
230
+ expect(consoleSpy.log).toHaveBeenCalledWith(`✅ Layout set to: ${LAYOUT_TYPES.HEADER}`);
214
231
  });
215
232
 
216
233
  it('sets layout to FOOTER', () => {
@@ -222,6 +239,7 @@ describe('HTMLEditorTesting', () => {
222
239
  });
223
240
 
224
241
  expect(screen.getByTestId('editor-layout')).toHaveTextContent(LAYOUT_TYPES.FOOTER);
242
+ expect(consoleSpy.log).toHaveBeenCalledWith(`✅ Layout set to: ${LAYOUT_TYPES.FOOTER}`);
225
243
  });
226
244
 
227
245
  it('sets layout to FULLSCREEN', () => {
@@ -233,6 +251,7 @@ describe('HTMLEditorTesting', () => {
233
251
  });
234
252
 
235
253
  expect(screen.getByTestId('editor-layout')).toHaveTextContent(LAYOUT_TYPES.FULLSCREEN);
254
+ expect(consoleSpy.log).toHaveBeenCalledWith(`✅ Layout set to: ${LAYOUT_TYPES.FULLSCREEN}`);
236
255
  });
237
256
 
238
257
  it('rejects invalid layout', () => {
@@ -270,6 +289,7 @@ describe('HTMLEditorTesting', () => {
270
289
  });
271
290
 
272
291
  expect(screen.getByTestId('editor-content')).toHaveTextContent(newContent);
292
+ expect(consoleSpy.log).toHaveBeenCalledWith('✅ Content updated');
273
293
  });
274
294
 
275
295
  it('gets current content', () => {
@@ -278,6 +298,7 @@ describe('HTMLEditorTesting', () => {
278
298
  const result = window.htmlEditorTest.getContent();
279
299
 
280
300
  expect(result).toBe('<h1>Test HTML Editor</h1><p>This is a test integration.</p>');
301
+ expect(consoleSpy.log).toHaveBeenCalledWith('Current content:', result);
281
302
  });
282
303
 
283
304
  it('starts with default content', () => {
@@ -301,6 +322,8 @@ describe('HTMLEditorTesting', () => {
301
322
 
302
323
  const changeButton = screen.getByTestId('trigger-content-change');
303
324
  fireEvent.click(changeButton);
325
+
326
+ expect(consoleSpy.log).toHaveBeenCalledWith('📝 Content changed:', '<p>Changed content</p>...');
304
327
  });
305
328
 
306
329
  it('handles save callback', () => {
@@ -312,6 +335,46 @@ describe('HTMLEditorTesting', () => {
312
335
 
313
336
  const saveButton = screen.getByTestId('trigger-save');
314
337
  fireEvent.click(saveButton);
338
+
339
+ expect(consoleSpy.log).toHaveBeenCalledWith('💾 Content saved:', '<p>Saved content</p>');
340
+ });
341
+ });
342
+
343
+ describe('Status and Help', () => {
344
+ it('shows status information', () => {
345
+ render(<HTMLEditorTesting />);
346
+
347
+ act(() => {
348
+ window.htmlEditorTest.show();
349
+ window.htmlEditorTest.setVariant('inapp');
350
+ window.htmlEditorTest.setLayout(LAYOUT_TYPES.HEADER);
351
+ });
352
+
353
+ // Clear previous console calls
354
+ consoleSpy.log.mockClear();
355
+
356
+ act(() => {
357
+ window.htmlEditorTest.status();
358
+ });
359
+
360
+ expect(consoleSpy.log).toHaveBeenCalledWith('📊 HTMLEditor Test Status:');
361
+ expect(consoleSpy.log).toHaveBeenCalledWith(' Visible: true');
362
+ expect(consoleSpy.log).toHaveBeenCalledWith(' Variant: inapp');
363
+ expect(consoleSpy.log).toHaveBeenCalledWith(' Layout: HEADER');
364
+ expect(consoleSpy.log).toHaveBeenCalledWith(' Content size: 59 chars');
365
+ });
366
+
367
+ it('shows help information', () => {
368
+ render(<HTMLEditorTesting />);
369
+
370
+ act(() => {
371
+ window.htmlEditorTest.help();
372
+ });
373
+
374
+ expect(consoleSpy.log).toHaveBeenCalledWith(expect.stringContaining('🚀 HTMLEditor Testing Console Commands:'));
375
+ expect(consoleSpy.log).toHaveBeenCalledWith(expect.stringContaining('htmlEditorTest.show()'));
376
+ expect(consoleSpy.log).toHaveBeenCalledWith(expect.stringContaining('htmlEditorTest.setVariant(\'email\')'));
377
+ expect(consoleSpy.log).toHaveBeenCalledWith(expect.stringContaining('htmlEditorTest.setLayout(\'POPUP\')'));
315
378
  });
316
379
  });
317
380
 
@@ -407,6 +470,8 @@ describe('HTMLEditorTesting', () => {
407
470
  act(() => {
408
471
  window.htmlEditorTest.status();
409
472
  });
473
+
474
+ expect(consoleSpy.log).toHaveBeenCalledWith(` Content size: ${customContent.length} chars`);
410
475
  });
411
476
 
412
477
  it('handles multiple rapid operations', () => {