@capillarytech/creatives-library 8.0.257 → 8.0.258

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/assets/Android.png +0 -0
  2. package/assets/iOS.png +0 -0
  3. package/constants/unified.js +2 -2
  4. package/initialReducer.js +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/translations/en.json +4 -3
  9. package/utils/common.js +6 -5
  10. package/utils/commonUtils.js +5 -28
  11. package/utils/imageUrlUpload.js +141 -0
  12. package/utils/tests/commonUtil.test.js +0 -224
  13. package/utils/tests/transformerUtils.test.js +297 -0
  14. package/utils/transformTemplateConfig.js +10 -0
  15. package/utils/transformerUtils.js +40 -0
  16. package/v2Components/CapDeviceContent/index.js +56 -61
  17. package/v2Components/CapImageUpload/constants.js +2 -0
  18. package/v2Components/CapImageUpload/index.js +65 -16
  19. package/v2Components/CapImageUpload/index.scss +4 -1
  20. package/v2Components/CapImageUpload/messages.js +5 -1
  21. package/v2Components/CapImageUrlUpload/constants.js +26 -0
  22. package/v2Components/CapImageUrlUpload/index.js +365 -0
  23. package/v2Components/CapImageUrlUpload/index.scss +35 -0
  24. package/v2Components/CapImageUrlUpload/messages.js +47 -0
  25. package/v2Components/CapTagList/index.js +1 -6
  26. package/v2Components/CapTagListWithInput/index.js +1 -5
  27. package/v2Components/CapTagListWithInput/messages.js +1 -1
  28. package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
  29. package/v2Components/ErrorInfoNote/index.js +72 -457
  30. package/v2Components/ErrorInfoNote/messages.js +6 -36
  31. package/v2Components/ErrorInfoNote/style.scss +6 -282
  32. package/v2Components/FormBuilder/tests/index.test.js +4 -13
  33. package/v2Components/HtmlEditor/HTMLEditor.js +94 -547
  34. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1441
  35. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
  36. package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
  37. package/v2Components/HtmlEditor/_index.lazy.scss +1 -0
  38. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +102 -23
  39. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +140 -148
  40. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
  41. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  42. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +0 -9
  43. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +4 -4
  44. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
  45. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
  46. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
  47. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
  48. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  49. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
  50. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +6 -3
  51. package/v2Components/HtmlEditor/components/PreviewPane/index.js +43 -22
  52. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  53. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
  54. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +0 -1
  55. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -49
  56. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +34 -50
  57. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +41 -70
  58. package/v2Components/HtmlEditor/constants.js +20 -42
  59. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
  60. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +0 -103
  61. package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
  62. package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
  63. package/v2Components/HtmlEditor/hooks/useValidation.js +53 -189
  64. package/v2Components/HtmlEditor/index.js +1 -1
  65. package/v2Components/HtmlEditor/messages.js +94 -92
  66. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +45 -94
  67. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +0 -134
  68. package/v2Components/HtmlEditor/utils/contentSanitizer.js +41 -40
  69. package/v2Components/HtmlEditor/utils/htmlValidator.js +72 -71
  70. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +102 -134
  71. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
  72. package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
  73. package/v2Components/MobilePushPreviewV2/index.js +7 -32
  74. package/v2Components/TemplatePreview/_templatePreview.scss +24 -55
  75. package/v2Components/TemplatePreview/index.js +32 -47
  76. package/v2Components/TemplatePreview/messages.js +0 -4
  77. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
  78. package/v2Containers/App/constants.js +5 -0
  79. package/v2Containers/BeeEditor/index.js +90 -172
  80. package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +4 -3
  81. package/v2Containers/CreativesContainer/SlideBoxContent.js +107 -129
  82. package/v2Containers/CreativesContainer/SlideBoxFooter.js +13 -163
  83. package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -2
  84. package/v2Containers/CreativesContainer/constants.js +3 -1
  85. package/v2Containers/CreativesContainer/index.js +214 -239
  86. package/v2Containers/CreativesContainer/messages.js +4 -8
  87. package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +210 -0
  88. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
  89. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +354 -38
  90. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -106
  91. package/v2Containers/Email/actions.js +0 -7
  92. package/v2Containers/Email/constants.js +1 -5
  93. package/v2Containers/Email/index.js +29 -234
  94. package/v2Containers/Email/messages.js +0 -32
  95. package/v2Containers/Email/reducer.js +1 -12
  96. package/v2Containers/Email/sagas.js +7 -61
  97. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
  98. package/v2Containers/Email/tests/reducer.test.js +0 -46
  99. package/v2Containers/Email/tests/sagas.test.js +29 -320
  100. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +21 -211
  101. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
  102. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
  103. package/v2Containers/EmailWrapper/constants.js +0 -2
  104. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +77 -629
  105. package/v2Containers/EmailWrapper/index.js +23 -103
  106. package/v2Containers/EmailWrapper/messages.js +1 -65
  107. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
  108. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -594
  109. package/v2Containers/InApp/actions.js +0 -7
  110. package/v2Containers/InApp/constants.js +4 -20
  111. package/v2Containers/InApp/index.js +359 -802
  112. package/v2Containers/InApp/index.scss +3 -4
  113. package/v2Containers/InApp/messages.js +3 -7
  114. package/v2Containers/InApp/reducer.js +3 -21
  115. package/v2Containers/InApp/sagas.js +9 -29
  116. package/v2Containers/InApp/selectors.js +5 -25
  117. package/v2Containers/InApp/tests/index.test.js +50 -154
  118. package/v2Containers/InApp/tests/reducer.test.js +0 -34
  119. package/v2Containers/InApp/tests/sagas.test.js +9 -61
  120. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +36 -15
  121. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +8 -8
  122. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +100 -77
  123. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +72 -63
  124. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +250 -190
  125. package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +16 -12
  126. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +48 -40
  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/index.js +15 -7
  137. package/v2Containers/TemplatesV2/messages.js +4 -0
  138. package/v2Containers/WebPush/Create/components/BrandIconSection.js +108 -0
  139. package/v2Containers/WebPush/Create/components/ButtonForm.js +172 -0
  140. package/v2Containers/WebPush/Create/components/ButtonItem.js +101 -0
  141. package/v2Containers/WebPush/Create/components/ButtonList.js +145 -0
  142. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +164 -0
  143. package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +463 -0
  144. package/v2Containers/WebPush/Create/components/FormActions.js +54 -0
  145. package/v2Containers/WebPush/Create/components/FormActions.test.js +163 -0
  146. package/v2Containers/WebPush/Create/components/MediaSection.js +142 -0
  147. package/v2Containers/WebPush/Create/components/MediaSection.test.js +341 -0
  148. package/v2Containers/WebPush/Create/components/MessageSection.js +103 -0
  149. package/v2Containers/WebPush/Create/components/MessageSection.test.js +268 -0
  150. package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +87 -0
  151. package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +210 -0
  152. package/v2Containers/WebPush/Create/components/TemplateNameSection.js +54 -0
  153. package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +143 -0
  154. package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +86 -0
  155. package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +16 -0
  156. package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +41 -0
  157. package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +54 -0
  158. package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +37 -0
  159. package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +21 -0
  160. package/v2Containers/WebPush/Create/components/_buttons.scss +246 -0
  161. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +554 -0
  162. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +607 -0
  163. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +633 -0
  164. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +666 -0
  165. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +74 -0
  166. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +78 -0
  167. package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +138 -0
  168. package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +406 -0
  169. package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +30 -0
  170. package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +151 -0
  171. package/v2Containers/WebPush/Create/hooks/useImageUpload.js +104 -0
  172. package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +538 -0
  173. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +122 -0
  174. package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +633 -0
  175. package/v2Containers/WebPush/Create/index.js +1148 -0
  176. package/v2Containers/WebPush/Create/index.scss +134 -0
  177. package/v2Containers/WebPush/Create/messages.js +203 -0
  178. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +228 -0
  179. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +294 -0
  180. package/v2Containers/WebPush/Create/preview/PreviewContent.js +90 -0
  181. package/v2Containers/WebPush/Create/preview/PreviewControls.js +305 -0
  182. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +23 -0
  183. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +155 -0
  184. package/v2Containers/WebPush/Create/preview/assets/Light.svg +53 -0
  185. package/v2Containers/WebPush/Create/preview/assets/Top.svg +5 -0
  186. package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +9 -0
  187. package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +9 -0
  188. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  189. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  190. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +106 -0
  191. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +26 -0
  192. package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +9 -0
  193. package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +9 -0
  194. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +18 -0
  195. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +29 -0
  196. package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +9 -0
  197. package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +9 -0
  198. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +47 -0
  199. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +141 -0
  200. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +45 -0
  201. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +68 -0
  202. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +61 -0
  203. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +99 -0
  204. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +733 -0
  205. package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +571 -0
  206. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +81 -0
  207. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +81 -0
  208. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +50 -0
  209. package/v2Containers/WebPush/Create/preview/constants.js +637 -0
  210. package/v2Containers/WebPush/Create/preview/notification-container.scss +79 -0
  211. package/v2Containers/WebPush/Create/preview/preview.scss +351 -0
  212. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +370 -0
  213. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +12 -0
  214. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +12 -0
  215. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +12 -0
  216. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +47 -0
  217. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +11 -0
  218. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +11 -0
  219. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +11 -0
  220. package/v2Containers/WebPush/Create/preview/styles/_base.scss +207 -0
  221. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +153 -0
  222. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +107 -0
  223. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +101 -0
  224. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +229 -0
  225. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +909 -0
  226. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +1081 -0
  227. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +723 -0
  228. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +1327 -0
  229. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +131 -0
  230. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +112 -0
  231. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +144 -0
  232. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +129 -0
  233. package/v2Containers/WebPush/Create/utils/payloadBuilder.js +96 -0
  234. package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +396 -0
  235. package/v2Containers/WebPush/Create/utils/previewUtils.js +89 -0
  236. package/v2Containers/WebPush/Create/utils/urlValidation.js +115 -0
  237. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +449 -0
  238. package/v2Containers/WebPush/Create/utils/validation.js +75 -0
  239. package/v2Containers/WebPush/Create/utils/validation.test.js +283 -0
  240. package/v2Containers/WebPush/actions.js +60 -0
  241. package/v2Containers/WebPush/constants.js +132 -0
  242. package/v2Containers/WebPush/index.js +2 -0
  243. package/v2Containers/WebPush/reducer.js +104 -0
  244. package/v2Containers/WebPush/sagas.js +119 -0
  245. package/v2Containers/WebPush/selectors.js +65 -0
  246. package/v2Containers/WebPush/tests/reducer.test.js +863 -0
  247. package/v2Containers/WebPush/tests/sagas.test.js +566 -0
  248. package/v2Containers/WebPush/tests/selectors.test.js +960 -0
  249. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +1272 -768
  250. package/v2Components/ErrorInfoNote/constants.js +0 -1
  251. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -874
  252. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +0 -6
  253. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -255
  254. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -364
  255. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
  256. package/v2Components/HtmlEditor/utils/validationConstants.js +0 -40
  257. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +0 -14
  258. package/v2Containers/BeePopupEditor/constants.js +0 -10
  259. package/v2Containers/BeePopupEditor/index.js +0 -194
  260. package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
  261. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1285
  262. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -1880
  263. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
  264. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -643
  265. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
  266. package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
  267. package/v2Containers/InApp/tests/selectors.test.js +0 -612
  268. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -151
  269. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
  270. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -23
  271. package/v2Containers/InAppWrapper/constants.js +0 -16
  272. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
  273. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
  274. package/v2Containers/InAppWrapper/index.js +0 -148
  275. package/v2Containers/InAppWrapper/messages.js +0 -49
  276. package/v2Containers/InappAdvance/index.js +0 -1099
  277. package/v2Containers/InappAdvance/index.scss +0 -10
  278. package/v2Containers/InappAdvance/tests/index.test.js +0 -448
@@ -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 - 50%);
92
- }
93
-
94
- iframe {
95
- height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
96
- max-height: calc(95vh - 50%);
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 - 50%);
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 - 50%);
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 - 50%);
303
- }
304
-
305
- iframe {
306
- height: calc(95vh - 5%); // Same as editor pane - maximize to full available height
307
- max-height: calc(95vh - 50%);
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.7; // 70% 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
  }