@capillarytech/creatives-library 8.0.263 → 8.0.265

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 +1 -3
  4. package/initialReducer.js +0 -2
  5. package/package.json +1 -1
  6. package/services/api.js +0 -15
  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 +0 -11
  12. package/utils/commonUtils.js +5 -28
  13. package/utils/tests/commonUtil.test.js +0 -224
  14. package/utils/tests/transformerUtils.test.js +0 -297
  15. package/utils/transformTemplateConfig.js +10 -0
  16. package/utils/transformerUtils.js +0 -40
  17. package/v2Components/CapDeviceContent/index.js +56 -61
  18. package/v2Components/CapImageUpload/constants.js +0 -2
  19. package/v2Components/CapImageUpload/index.js +16 -65
  20. package/v2Components/CapImageUpload/index.scss +1 -4
  21. package/v2Components/CapImageUpload/messages.js +1 -5
  22. package/v2Components/CapTagList/index.js +1 -6
  23. package/v2Components/CapTagListWithInput/index.js +1 -5
  24. package/v2Components/CapTagListWithInput/messages.js +1 -1
  25. package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
  26. package/v2Components/ErrorInfoNote/index.js +72 -402
  27. package/v2Components/ErrorInfoNote/messages.js +6 -32
  28. package/v2Components/ErrorInfoNote/style.scss +6 -278
  29. package/v2Components/FormBuilder/tests/index.test.js +4 -13
  30. package/v2Components/HtmlEditor/HTMLEditor.js +99 -418
  31. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1882
  32. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
  33. package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
  34. package/v2Components/HtmlEditor/_index.lazy.scss +1 -0
  35. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +102 -23
  36. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +140 -148
  37. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
  38. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  39. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +1 -9
  40. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +6 -31
  41. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
  42. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
  43. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
  44. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
  45. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  46. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
  47. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +10 -7
  48. package/v2Components/HtmlEditor/components/PreviewPane/index.js +43 -22
  49. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  50. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
  51. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +0 -18
  52. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -36
  53. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +34 -46
  54. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +46 -52
  55. package/v2Components/HtmlEditor/constants.js +20 -45
  56. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
  57. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +16 -351
  58. package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
  59. package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
  60. package/v2Components/HtmlEditor/hooks/useValidation.js +56 -213
  61. package/v2Components/HtmlEditor/index.js +1 -1
  62. package/v2Components/HtmlEditor/messages.js +94 -102
  63. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +45 -214
  64. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +0 -134
  65. package/v2Components/HtmlEditor/utils/contentSanitizer.js +41 -40
  66. package/v2Components/HtmlEditor/utils/htmlValidator.js +72 -71
  67. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +124 -158
  68. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
  69. package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
  70. package/v2Components/MobilePushPreviewV2/index.js +7 -33
  71. package/v2Components/TemplatePreview/_templatePreview.scss +24 -55
  72. package/v2Components/TemplatePreview/index.js +32 -47
  73. package/v2Components/TemplatePreview/messages.js +0 -4
  74. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
  75. package/v2Containers/App/constants.js +0 -5
  76. package/v2Containers/BeeEditor/index.js +90 -172
  77. package/v2Containers/CreativesContainer/SlideBoxContent.js +53 -184
  78. package/v2Containers/CreativesContainer/SlideBoxFooter.js +13 -163
  79. package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -3
  80. package/v2Containers/CreativesContainer/constants.js +0 -4
  81. package/v2Containers/CreativesContainer/index.js +46 -408
  82. package/v2Containers/CreativesContainer/messages.js +0 -12
  83. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +0 -210
  84. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
  85. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +50 -342
  86. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -103
  87. package/v2Containers/Email/actions.js +0 -7
  88. package/v2Containers/Email/constants.js +1 -5
  89. package/v2Containers/Email/index.js +36 -237
  90. package/v2Containers/Email/messages.js +0 -32
  91. package/v2Containers/Email/reducer.js +1 -12
  92. package/v2Containers/Email/sagas.js +7 -61
  93. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
  94. package/v2Containers/Email/tests/reducer.test.js +0 -46
  95. package/v2Containers/Email/tests/sagas.test.js +29 -320
  96. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +21 -211
  97. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
  98. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
  99. package/v2Containers/EmailWrapper/constants.js +0 -2
  100. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +77 -629
  101. package/v2Containers/EmailWrapper/index.js +23 -103
  102. package/v2Containers/EmailWrapper/messages.js +1 -65
  103. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
  104. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -594
  105. package/v2Containers/InApp/actions.js +0 -7
  106. package/v2Containers/InApp/constants.js +4 -20
  107. package/v2Containers/InApp/index.js +359 -802
  108. package/v2Containers/InApp/index.scss +3 -4
  109. package/v2Containers/InApp/messages.js +3 -7
  110. package/v2Containers/InApp/reducer.js +3 -21
  111. package/v2Containers/InApp/sagas.js +9 -29
  112. package/v2Containers/InApp/selectors.js +5 -25
  113. package/v2Containers/InApp/tests/index.test.js +50 -154
  114. package/v2Containers/InApp/tests/reducer.test.js +0 -34
  115. package/v2Containers/InApp/tests/sagas.test.js +9 -61
  116. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +0 -3
  117. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +0 -2
  118. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +0 -2
  119. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +0 -9
  120. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +0 -12
  121. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +0 -4
  122. package/v2Containers/TagList/index.js +19 -62
  123. package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
  124. package/v2Containers/Templates/_templates.scss +1 -265
  125. package/v2Containers/Templates/actions.js +1 -2
  126. package/v2Containers/Templates/constants.js +0 -1
  127. package/v2Containers/Templates/index.js +38 -363
  128. package/v2Containers/Templates/messages.js +0 -28
  129. package/v2Containers/Templates/reducer.js +0 -2
  130. package/v2Containers/Templates/tests/index.test.js +0 -10
  131. package/v2Containers/TemplatesV2/TemplatesV2.style.js +2 -4
  132. package/v2Containers/TemplatesV2/index.js +7 -15
  133. package/v2Containers/TemplatesV2/messages.js +0 -4
  134. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -34
  135. package/utils/imageUrlUpload.js +0 -141
  136. package/v2Components/CapImageUrlUpload/constants.js +0 -26
  137. package/v2Components/CapImageUrlUpload/index.js +0 -365
  138. package/v2Components/CapImageUrlUpload/index.scss +0 -35
  139. package/v2Components/CapImageUrlUpload/messages.js +0 -47
  140. package/v2Components/ErrorInfoNote/constants.js +0 -1
  141. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -870
  142. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +0 -6
  143. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -281
  144. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -295
  145. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
  146. package/v2Components/HtmlEditor/utils/validationConstants.js +0 -38
  147. package/v2Components/MobilePushPreviewV2/constants.js +0 -6
  148. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +0 -14
  149. package/v2Containers/BeePopupEditor/constants.js +0 -10
  150. package/v2Containers/BeePopupEditor/index.js +0 -194
  151. package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
  152. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1246
  153. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -2472
  154. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
  155. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -956
  156. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
  157. package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
  158. package/v2Containers/InApp/tests/selectors.test.js +0 -612
  159. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -151
  160. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
  161. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -23
  162. package/v2Containers/InAppWrapper/constants.js +0 -16
  163. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
  164. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
  165. package/v2Containers/InAppWrapper/index.js +0 -148
  166. package/v2Containers/InAppWrapper/messages.js +0 -49
  167. package/v2Containers/InappAdvance/index.js +0 -1099
  168. package/v2Containers/InappAdvance/index.scss +0 -10
  169. package/v2Containers/InappAdvance/tests/index.test.js +0 -448
  170. package/v2Containers/WebPush/Create/components/BrandIconSection.js +0 -108
  171. package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -172
  172. package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
  173. package/v2Containers/WebPush/Create/components/ButtonList.js +0 -145
  174. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +0 -164
  175. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +0 -463
  176. package/v2Containers/WebPush/Create/components/FormActions.js +0 -54
  177. package/v2Containers/WebPush/Create/components/FormActions.test.js +0 -163
  178. package/v2Containers/WebPush/Create/components/MediaSection.js +0 -142
  179. package/v2Containers/WebPush/Create/components/MediaSection.test.js +0 -341
  180. package/v2Containers/WebPush/Create/components/MessageSection.js +0 -103
  181. package/v2Containers/WebPush/Create/components/MessageSection.test.js +0 -268
  182. package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +0 -87
  183. package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +0 -210
  184. package/v2Containers/WebPush/Create/components/TemplateNameSection.js +0 -54
  185. package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +0 -143
  186. package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +0 -86
  187. package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +0 -16
  188. package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +0 -41
  189. package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +0 -54
  190. package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +0 -37
  191. package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +0 -21
  192. package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
  193. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
  194. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
  195. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
  196. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
  197. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
  198. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -78
  199. package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +0 -138
  200. package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +0 -406
  201. package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +0 -30
  202. package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +0 -151
  203. package/v2Containers/WebPush/Create/hooks/useImageUpload.js +0 -104
  204. package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +0 -538
  205. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +0 -122
  206. package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +0 -633
  207. package/v2Containers/WebPush/Create/index.js +0 -1148
  208. package/v2Containers/WebPush/Create/index.scss +0 -134
  209. package/v2Containers/WebPush/Create/messages.js +0 -211
  210. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -228
  211. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -294
  212. package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -90
  213. package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -305
  214. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -25
  215. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -155
  216. package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
  217. package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
  218. package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +0 -9
  219. package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +0 -9
  220. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  221. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  222. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
  223. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
  224. package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +0 -9
  225. package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +0 -9
  226. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
  227. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
  228. package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +0 -9
  229. package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +0 -9
  230. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -51
  231. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -145
  232. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
  233. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -68
  234. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -61
  235. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -99
  236. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -733
  237. package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +0 -571
  238. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -85
  239. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +0 -81
  240. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -50
  241. package/v2Containers/WebPush/Create/preview/constants.js +0 -637
  242. package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -79
  243. package/v2Containers/WebPush/Create/preview/preview.scss +0 -358
  244. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -370
  245. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
  246. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
  247. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
  248. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -47
  249. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
  250. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
  251. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
  252. package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -207
  253. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -153
  254. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
  255. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -101
  256. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -229
  257. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
  258. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1081
  259. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
  260. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -1327
  261. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -131
  262. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -112
  263. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
  264. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -129
  265. package/v2Containers/WebPush/Create/utils/payloadBuilder.js +0 -96
  266. package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +0 -396
  267. package/v2Containers/WebPush/Create/utils/previewUtils.js +0 -89
  268. package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -115
  269. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
  270. package/v2Containers/WebPush/Create/utils/validation.js +0 -75
  271. package/v2Containers/WebPush/Create/utils/validation.test.js +0 -283
  272. package/v2Containers/WebPush/actions.js +0 -60
  273. package/v2Containers/WebPush/constants.js +0 -132
  274. package/v2Containers/WebPush/index.js +0 -2
  275. package/v2Containers/WebPush/reducer.js +0 -104
  276. package/v2Containers/WebPush/sagas.js +0 -119
  277. package/v2Containers/WebPush/selectors.js +0 -65
  278. package/v2Containers/WebPush/tests/reducer.test.js +0 -863
  279. package/v2Containers/WebPush/tests/sagas.test.js +0 -566
  280. package/v2Containers/WebPush/tests/selectors.test.js +0 -960
@@ -5,31 +5,23 @@
5
5
  */
6
6
 
7
7
  import React from 'react';
8
- import {
9
- render, screen, waitFor, act,
10
- } from '@testing-library/react';
8
+ import { render, screen, waitFor } from '@testing-library/react';
11
9
  import '@testing-library/jest-dom';
12
10
 
13
11
  // Mock CapSpin before importing the component
14
- jest.mock('@capillarytech/cap-ui-library/CapSpin', () => function MockCapSpin({ size }) {
15
- return <div data-testid="cap-spin" data-size={size}>Loading...</div>;
12
+ jest.mock('@capillarytech/cap-ui-library/CapSpin', () => {
13
+ return function MockCapSpin({ size }) {
14
+ return <div data-testid="cap-spin" data-size={size}>Loading...</div>;
15
+ };
16
16
  });
17
17
 
18
18
  // Mock the HTMLEditor component
19
- // Note: React.lazy() expects a function that returns a promise
20
- // The mock needs to be set up before the lazy import happens
21
19
  jest.mock('../HTMLEditor', () => {
22
- const MockHTMLEditor = function MockHTMLEditor(props) {
23
- return (
24
- <div data-testid="html-editor">
25
- Mock HTML Editor -
26
- {props.variant}
27
- </div>
28
- );
29
- };
30
20
  return {
31
21
  __esModule: true,
32
- default: MockHTMLEditor,
22
+ default: function MockHTMLEditor(props) {
23
+ return <div data-testid="html-editor">Mock HTML Editor - {props.variant}</div>;
24
+ }
33
25
  };
34
26
  });
35
27
 
@@ -114,17 +106,14 @@ describe('index.lazy.js', () => {
114
106
  it('renders the lazy loaded component', async () => {
115
107
  const HTMLEditorLazy = (await import('../index.lazy')).default;
116
108
 
117
- await act(async () => {
118
- render(<HTMLEditorLazy variant="email" />);
119
- });
109
+ render(<HTMLEditorLazy variant="email" />);
120
110
 
121
- // Wait for lazy component to load - increase timeout and wait for Suspense to resolve
111
+ // Wait for lazy component to load
122
112
  await waitFor(() => {
123
113
  expect(screen.getByTestId('html-editor')).toBeInTheDocument();
124
- }, { timeout: 3000 });
114
+ });
125
115
 
126
- const editor = screen.getByTestId('html-editor');
127
- expect(editor.textContent).toBe('Mock HTML Editor -email');
116
+ expect(screen.getByText(/Mock HTML Editor - email/)).toBeInTheDocument();
128
117
  });
129
118
 
130
119
  it('shows fallback while loading', async () => {
@@ -145,7 +134,7 @@ describe('index.lazy.js', () => {
145
134
  <HTMLEditorLazy
146
135
  variant="inapp"
147
136
  onSave={mockOnSave}
148
- readOnly
137
+ readOnly={true}
149
138
  className="custom-class"
150
139
  />
151
140
  );
@@ -154,8 +143,7 @@ describe('index.lazy.js', () => {
154
143
  expect(screen.getByTestId('html-editor')).toBeInTheDocument();
155
144
  });
156
145
 
157
- const editor = screen.getByTestId('html-editor');
158
- expect(editor.textContent).toBe('Mock HTML Editor -inapp');
146
+ expect(screen.getByText(/Mock HTML Editor - inapp/)).toBeInTheDocument();
159
147
  });
160
148
 
161
149
  it('has correct display name', async () => {
@@ -227,7 +215,7 @@ describe('index.lazy.js', () => {
227
215
  render(
228
216
  <HTMLEditorLazy
229
217
  className="custom-editor"
230
- readOnly
218
+ readOnly={true}
231
219
  showFullscreenButton={false}
232
220
  autoSave={false}
233
221
  autoSaveInterval={60000}
@@ -541,3 +529,4 @@ describe('index.lazy.js', () => {
541
529
  });
542
530
  });
543
531
  });
532
+
@@ -5,71 +5,38 @@
5
5
  */
6
6
 
7
7
  // Import Cap UI variables (correct path)
8
- @import "~@capillarytech/cap-ui-library/styles/_variables.scss";
8
+ @import '~@capillarytech/cap-ui-library/styles/_variables.scss';
9
9
 
10
10
  // Fullscreen modal header styling - using proper CSS specificity instead of !important
11
11
  .html-editor-fullscreen {
12
- // INAPP variant only: Fullscreen header styling
13
- &--inapp {
14
- .html-editor__header--fullscreen {
15
- display: flex;
16
- align-items: center;
17
- background-color: $CAP_G10;
18
- border-bottom: 0.0625rem solid $CAP_G08;
19
- padding-right: 1rem;
20
-
21
- // Device toggle takes available space
22
- .device-toggle {
23
- flex: 1;
24
- }
25
-
26
- // Toolbar styling in fullscreen mode - INAPP variant only
27
- .editor-toolbar {
28
- background-color: transparent;
29
- border-bottom: none;
30
- padding: 0;
31
- min-height: 3.25rem;
32
- height: 3.25rem;
33
- position: relative;
12
+ .html-editor__header--fullscreen {
13
+ display: flex;
14
+ align-items: center;
15
+ background-color: $CAP_G10;
16
+ border-bottom: 0.0625rem solid $CAP_G08;
17
+ padding-right: 1rem;
34
18
 
35
- // Right-align toolbar actions
36
- &__right {
37
- margin-left: auto;
38
- }
39
- }
19
+ // Device toggle takes available space
20
+ .device-toggle {
21
+ flex: 1;
40
22
  }
41
23
 
42
- // Library mode: Position absolute for toolbar in fullscreen (INAPP variant only)
43
- // Using higher specificity to override _fullscreenModal.scss styles
44
- &.html-editor-fullscreen--library-mode {
45
- .html-editor__header--fullscreen {
46
- .editor-toolbar,
47
- .editor-toolbar.editor-toolbar,
48
- .ant-layout-header.editor-toolbar {
49
- position: absolute;
50
- }
24
+ // Toolbar styling in fullscreen mode
25
+ .editor-toolbar {
26
+ background-color: transparent;
27
+ border-bottom: none;
28
+ padding: 0;
29
+ min-height: 3.25rem;
30
+ height: 3.25rem;
31
+
32
+ // Right-align toolbar actions
33
+ &__right {
34
+ margin-left: auto;
51
35
  }
52
36
  }
53
37
  }
54
38
  }
55
39
 
56
- // Additional library mode overrides for fullscreen with maximum specificity
57
- // These match the high-specificity selectors in _fullscreenModal.scss
58
- .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar,
59
- .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar.editor-toolbar,
60
- .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .ant-layout-header.editor-toolbar,
61
- .html-editor.html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar,
62
- .html-editor.html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar.editor-toolbar,
63
- .html-editor.html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .ant-layout-header.editor-toolbar,
64
- .ant-modal .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar,
65
- .ant-modal .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar.editor-toolbar,
66
- .ant-modal .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .ant-layout-header.editor-toolbar,
67
- .ant-modal-content .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar,
68
- .ant-modal-content .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .editor-toolbar.editor-toolbar,
69
- .ant-modal-content .html-editor-fullscreen--inapp.html-editor-fullscreen--library-mode .html-editor__header--fullscreen .ant-layout-header.editor-toolbar {
70
- position: absolute;
71
- }
72
-
73
40
  .html-editor {
74
41
  height: 37.5rem; // Fixed height instead of 100vh (600px = 37.5rem)
75
42
  max-height: 80vh; // Responsive maximum height
@@ -81,23 +48,6 @@
81
48
  border-radius: 0.25rem;
82
49
  overflow: hidden;
83
50
 
84
- // Library mode: Apply specific styles when isFullMode is false
85
- &.html-editor--library-mode {
86
- .preview-pane {
87
- max-height: calc(95vh - 5%);
88
-
89
- &__content {
90
- height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
91
- max-height: calc(95vh - 30%);
92
- }
93
-
94
- iframe {
95
- height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
96
- max-height: calc(95vh - 30%);
97
- }
98
- }
99
- }
100
-
101
51
  &.fullscreen {
102
52
  position: fixed;
103
53
  top: 0;
@@ -133,6 +83,19 @@
133
83
  flex-direction: column;
134
84
  }
135
85
 
86
+ // Validation Error Display - Full Width Below Split Container
87
+ &-validation {
88
+ margin-top: 1rem; // 16px = 1rem
89
+
90
+ // Ensure ErrorInfoNote fits well in the editor layout
91
+ .error-container {
92
+ width: 100%; // Full width instead of max-content
93
+ margin-top: 0;
94
+ margin-bottom: 0;
95
+ border-radius: 0.25rem;
96
+ }
97
+ }
98
+
136
99
  // Split container - integrated design
137
100
  &-split-container {
138
101
  flex: 1;
@@ -165,7 +128,6 @@
165
128
  padding: 0;
166
129
  min-height: 3.25rem; // 52px = 3.25rem
167
130
  height: 3.25rem;
168
- position: relative;
169
131
 
170
132
  // Right-align toolbar actions
171
133
  &__right {
@@ -173,20 +135,9 @@
173
135
  }
174
136
  }
175
137
  }
176
-
177
- // Library mode: Position absolute for toolbar in InApp variant
178
- // Using higher specificity to override default position: relative
179
- &.html-editor--library-mode {
180
- .html-editor__header {
181
- .editor-toolbar,
182
- .editor-toolbar.editor-toolbar,
183
- .ant-layout-header.editor-toolbar {
184
- position: absolute;
185
- }
186
- }
187
- }
188
138
  }
189
139
 
140
+
190
141
  // Responsive design
191
142
  @media (max-width: 768px) {
192
143
  height: 31.25rem; // 500px = 31.25rem - Smaller height on tablets
@@ -268,47 +219,29 @@
268
219
  .code-editor-pane {
269
220
  .codemirror-wrapper {
270
221
  height: 100%;
271
- max-height: calc(95vh - 5%); // 95% of viewport height with 5% gap
222
+ max-height: 70vh; // Larger height in fullscreen
272
223
  }
273
224
 
274
225
  &__content {
275
- max-height: calc(95vh - 5%); // 95% of viewport height with 5% gap
226
+ max-height: 70vh; // Larger height in fullscreen
276
227
  }
277
228
  }
278
229
 
279
230
  .preview-pane {
280
- max-height: calc(95vh - 5%); // Same as editor pane - 95% of viewport height with 5% gap
231
+ max-height: 70vh; // Larger height in fullscreen
281
232
 
282
233
  &__content {
283
- height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
284
- max-height: calc(95vh - 30%);
234
+ max-height: 65vh; // Account for modal header
285
235
  }
286
236
 
287
237
  iframe {
288
- height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
289
- max-height: calc(95vh - 30%);
238
+ height: 60vh; // Larger iframe in fullscreen
239
+ max-height: 60vh;
290
240
  }
291
241
  }
292
242
  }
293
243
  }
294
244
 
295
- // Fullscreen modal library mode styles (outside .html-editor block since fullscreen is a separate element)
296
- .html-editor-fullscreen--library-mode {
297
- .preview-pane {
298
- max-height: calc(95vh - 5%);
299
-
300
- &__content {
301
- height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
302
- max-height: calc(95vh - 30%);
303
- }
304
-
305
- iframe {
306
- height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
307
- max-height: calc(95vh - 30%);
308
- }
309
- }
310
- }
311
-
312
245
  // Animation classes for smooth transitions
313
246
  .html-editor-transition {
314
247
  transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
@@ -334,6 +267,10 @@
334
267
 
335
268
  // Focus states and accessibility
336
269
  .html-editor {
270
+ &:focus-within {
271
+ outline: 0.125rem solid map-get($CAP_PRIMARY, base); // 2px = 0.125rem
272
+ outline-offset: -0.125rem; // -2px = -0.125rem
273
+ }
337
274
 
338
275
  // High contrast mode support
339
276
  @media (prefers-contrast: high) {
@@ -13,6 +13,7 @@
13
13
  align-items: center;
14
14
  min-height: 25rem; // 400px = 25rem
15
15
  background: $CAP_G11; // Light background similar to #fafbfc
16
+ border: 0.0625rem solid $CAP_G07; // 1px border similar to #dfe2e7
16
17
  border-radius: 0.5rem; // 8px = 0.5rem
17
18
  flex-direction: column;
18
19
  gap: 1rem; // 16px = 1rem
@@ -31,6 +31,79 @@
31
31
  display: flex;
32
32
  align-items: center;
33
33
  gap: 0.5rem;
34
+
35
+ .cap-button,
36
+ .ant-btn,
37
+ button {
38
+ color: map-get($CAP_PRIMARY, base);
39
+ border: none;
40
+ background: $CAP_WHITE;
41
+ border-radius: 0.25rem;
42
+ padding: 0.375rem 0.5rem;
43
+ font-size: 0.875rem;
44
+ font-family: $FONT_FAMILY;
45
+ font-weight: 500;
46
+ height: auto;
47
+ min-width: 5.9375rem;
48
+ display: flex;
49
+ align-items: center;
50
+ gap: 0.25rem;
51
+ box-shadow: 0 0 0.0625rem 0 rgba(9, 30, 66, 0.31), 0 0.25rem 0.5rem -0.125rem rgba(9, 30, 66, 0.25);
52
+ line-height: 1.25rem;
53
+ text-align: left;
54
+
55
+ &:hover {
56
+ background: $CAP_G09;
57
+ box-shadow: 0 0 0.0625rem 0 rgba(9, 30, 66, 0.31), 0 0.375rem 0.75rem -0.125rem rgba(9, 30, 66, 0.25);
58
+ color: map-get($CAP_PRIMARY, base);
59
+ border: none;
60
+ }
61
+
62
+ &:active,
63
+ &:focus {
64
+ background: $CAP_G08;
65
+ box-shadow: 0 0 0.0625rem 0 rgba(9, 30, 66, 0.31), 0 0.125rem 0.25rem -0.125rem rgba(9, 30, 66, 0.25);
66
+ color: map-get($CAP_PRIMARY, base);
67
+ border: none;
68
+ }
69
+
70
+ .anticon,
71
+ .cap-icon {
72
+ font-size: 1rem;
73
+ color: map-get($CAP_PRIMARY, base);
74
+ }
75
+
76
+ span {
77
+ font-size: 0.875rem;
78
+ font-weight: 500;
79
+ line-height: 1.25rem;
80
+ color: map-get($CAP_PRIMARY, base);
81
+ white-space: nowrap;
82
+ }
83
+
84
+ &:before,
85
+ &:after {
86
+ display: none;
87
+ }
88
+ }
89
+
90
+ .tooltip-add-label-container {
91
+
92
+ .cap-button,
93
+ .ant-btn {
94
+ color: map-get($CAP_PRIMARY, base);
95
+ background: $CAP_WHITE;
96
+ border: none;
97
+ box-shadow: 0 0 0.0625rem 0 rgba(9, 30, 66, 0.31), 0 0.25rem 0.5rem -0.125rem rgba(9, 30, 66, 0.25);
98
+ }
99
+ }
100
+
101
+ .cap-button-flat,
102
+ .cap-button-add {
103
+ background: $CAP_WHITE;
104
+ color: map-get($CAP_PRIMARY, base);
105
+ border: none;
106
+ }
34
107
  }
35
108
 
36
109
  &__content {
@@ -40,20 +113,13 @@
40
113
  overflow: auto;
41
114
  position: relative;
42
115
  height: 100%;
43
- max-height: 34.25rem;
116
+ max-height: 31.25rem;
44
117
  background-color: $CAP_G01;
45
118
  }
46
119
 
47
- &__wrapper {
48
- display: flex;
49
- flex-direction: column;
50
- height: 100%;
51
- width: 100%;
52
- }
53
-
54
120
  &__validation {
55
121
  border-top: 0.0625rem solid $CAP_G04;
56
- background: $CAP_WHITE;
122
+ background: $CAP_G03;
57
123
  max-height: 12.5rem;
58
124
  overflow-y: auto;
59
125
 
@@ -64,17 +130,6 @@
64
130
  }
65
131
  }
66
132
 
67
- // Add Label button visibility: 50% opacity while typing, 100% on hover
68
- .code-editor-pane__actions {
69
- opacity: 0.8; // 80% transparent while typing
70
- pointer-events: auto; // Always clickable
71
- transition: opacity 0.2s ease;
72
-
73
- &:hover {
74
- opacity: 1; // Fully visible on hover
75
- }
76
- }
77
-
78
133
  .cm-foldGutter {
79
134
  width: 1rem;
80
135
 
@@ -168,19 +223,42 @@
168
223
  .codemirror-wrapper {
169
224
  position: relative;
170
225
  height: 100%;
171
- max-height: 34.25rem;
226
+ max-height: 31.25rem;
172
227
  background-color: $CAP_G01;
173
228
  border-radius: 0;
174
229
  overflow: hidden;
175
230
  display: flex;
176
- flex: 1 1 auto;
177
- min-height: 0;
178
231
 
179
232
  .code-editor-pane__actions {
180
233
  position: absolute;
181
234
  top: 0.5rem;
182
235
  right: 0.5rem;
183
236
  z-index: 20;
237
+
238
+ .cap-button,
239
+ .ant-btn,
240
+ button {
241
+ background: $CAP_WHITE;
242
+ color: map-get($CAP_PRIMARY, base);
243
+ border: none;
244
+ border-radius: 0.25rem;
245
+ padding: 0.375rem 0.5rem;
246
+ font-size: 0.875rem;
247
+ font-family: $FONT_FAMILY;
248
+ font-weight: 500;
249
+ min-width: 5.9375rem;
250
+ box-shadow: 0 0 0.0625rem 0 rgba(9, 30, 66, 0.31), 0 0.25rem 0.5rem -0.125rem rgba(9, 30, 66, 0.25);
251
+
252
+ &:hover {
253
+ background: $CAP_G09;
254
+ color: map-get($CAP_PRIMARY, base);
255
+ }
256
+
257
+ &:active {
258
+ background: $CAP_G08;
259
+ color: map-get($CAP_PRIMARY, base);
260
+ }
261
+ }
184
262
  }
185
263
 
186
264
  .codemirror-editor {
@@ -218,6 +296,7 @@
218
296
  }
219
297
 
220
298
  .cm-gutters {
299
+ background-color: var(--editor-gutter-bg, $CAP_G02);
221
300
  border-right: 0.0625rem solid var(--editor-border, $CAP_G04);
222
301
  color: var(--editor-gutter-foreground, $FONT_COLOR_02);
223
302
  }