@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
@@ -9,13 +9,13 @@ import { render, screen } from '@testing-library/react';
9
9
  import '@testing-library/jest-dom';
10
10
  import { DEVICE_TYPES } from '../../../constants';
11
11
 
12
- // Import after mocking
13
- import DeviceFrame from '../DeviceFrame';
14
-
15
12
  // Mock the entire DeviceFrame module to bypass image import issues
16
13
  jest.mock('../../../../assets/Android.png', () => 'mocked-android-frame.png');
17
14
  jest.mock('../../../../assets/iOS.png', () => 'mocked-ios-frame.png');
18
15
 
16
+ // Import after mocking
17
+ import DeviceFrame from '../DeviceFrame';
18
+
19
19
  describe('DeviceFrame', () => {
20
20
  describe('Basic Rendering', () => {
21
21
  it('renders without crashing', () => {
@@ -26,7 +26,7 @@ describe('DeviceFrame', () => {
26
26
  it('renders with default props', () => {
27
27
  const { container } = render(<DeviceFrame />);
28
28
  const frame = container.firstChild;
29
-
29
+
30
30
  expect(frame).toHaveClass('device-frame');
31
31
  expect(frame).toHaveClass('device-frame--android'); // Default device
32
32
  });
@@ -37,7 +37,7 @@ describe('DeviceFrame', () => {
37
37
  <div data-testid="child-content">Test Content</div>
38
38
  </DeviceFrame>
39
39
  );
40
-
40
+
41
41
  expect(screen.getByTestId('child-content')).toBeInTheDocument();
42
42
  expect(screen.getByTestId('child-content')).toHaveTextContent('Test Content');
43
43
  });
@@ -50,7 +50,7 @@ describe('DeviceFrame', () => {
50
50
  <div data-testid="child-3">Child 3</div>
51
51
  </DeviceFrame>
52
52
  );
53
-
53
+
54
54
  expect(screen.getByTestId('child-1')).toBeInTheDocument();
55
55
  expect(screen.getByTestId('child-2')).toBeInTheDocument();
56
56
  expect(screen.getByTestId('child-3')).toBeInTheDocument();
@@ -61,7 +61,7 @@ describe('DeviceFrame', () => {
61
61
  it('renders Android frame correctly', () => {
62
62
  const { container } = render(<DeviceFrame device={DEVICE_TYPES.ANDROID} />);
63
63
  const frame = container.firstChild;
64
-
64
+
65
65
  expect(frame).toHaveClass('device-frame--android');
66
66
  expect(frame.style.backgroundImage).toBeTruthy();
67
67
  expect(frame.style.backgroundImage).toMatch(/url\(/);
@@ -70,7 +70,7 @@ describe('DeviceFrame', () => {
70
70
  it('renders iOS frame correctly', () => {
71
71
  const { container } = render(<DeviceFrame device={DEVICE_TYPES.IOS} />);
72
72
  const frame = container.firstChild;
73
-
73
+
74
74
  expect(frame).toHaveClass('device-frame--ios');
75
75
  expect(frame.style.backgroundImage).toBeTruthy();
76
76
  expect(frame.style.backgroundImage).toMatch(/url\(/);
@@ -79,7 +79,7 @@ describe('DeviceFrame', () => {
79
79
  it('defaults to Android when no device specified', () => {
80
80
  const { container } = render(<DeviceFrame />);
81
81
  const frame = container.firstChild;
82
-
82
+
83
83
  expect(frame).toHaveClass('device-frame--android');
84
84
  expect(frame.style.backgroundImage).toBeTruthy();
85
85
  expect(frame.style.backgroundImage).toMatch(/url\(/);
@@ -102,7 +102,7 @@ describe('DeviceFrame', () => {
102
102
  it('applies correct dimensions', () => {
103
103
  const { container } = render(<DeviceFrame />);
104
104
  const frame = container.firstChild;
105
-
105
+
106
106
  expect(frame.style.width).toBe('450px');
107
107
  expect(frame.style.height).toBe('920px');
108
108
  });
@@ -117,7 +117,7 @@ describe('DeviceFrame', () => {
117
117
  <DeviceFrame device={DEVICE_TYPES.IOS} />
118
118
  );
119
119
  const iosFrame = iosContainer.firstChild;
120
-
120
+
121
121
  expect(androidFrame.style.width).toBe(iosFrame.style.width);
122
122
  expect(androidFrame.style.height).toBe(iosFrame.style.height);
123
123
  });
@@ -125,7 +125,7 @@ describe('DeviceFrame', () => {
125
125
  it('applies background styles correctly', () => {
126
126
  const { container } = render(<DeviceFrame />);
127
127
  const frame = container.firstChild;
128
-
128
+
129
129
  expect(frame.style.position).toBe('relative');
130
130
  expect(frame.style.display).toBe('inline-block');
131
131
  expect(frame.style.backgroundRepeat).toBe('no-repeat');
@@ -133,10 +133,19 @@ describe('DeviceFrame', () => {
133
133
  expect(frame.style.backgroundSize).toBe('contain');
134
134
  });
135
135
 
136
+ it('applies drop-shadow filter', () => {
137
+ const { container } = render(<DeviceFrame />);
138
+ const frame = container.firstChild;
139
+
140
+ expect(frame.style.filter).toContain('drop-shadow');
141
+ expect(frame.style.filter).toContain('brightness');
142
+ expect(frame.style.filter).toContain('contrast');
143
+ });
144
+
136
145
  it('sets correct background image for Android', () => {
137
146
  const { container } = render(<DeviceFrame device={DEVICE_TYPES.ANDROID} />);
138
147
  const frame = container.firstChild;
139
-
148
+
140
149
  // Verify background image is set (actual mock value may vary)
141
150
  expect(frame.style.backgroundImage).toBeTruthy();
142
151
  expect(frame.style.backgroundImage).toMatch(/^url\(.+\)$/);
@@ -145,7 +154,7 @@ describe('DeviceFrame', () => {
145
154
  it('sets correct background image for iOS', () => {
146
155
  const { container } = render(<DeviceFrame device={DEVICE_TYPES.IOS} />);
147
156
  const frame = container.firstChild;
148
-
157
+
149
158
  // Verify background image is set (actual mock value may vary)
150
159
  expect(frame.style.backgroundImage).toBeTruthy();
151
160
  expect(frame.style.backgroundImage).toMatch(/^url\(.+\)$/);
@@ -156,7 +165,7 @@ describe('DeviceFrame', () => {
156
165
  it('accepts and applies custom className', () => {
157
166
  const { container } = render(<DeviceFrame className="custom-frame" />);
158
167
  const frame = container.firstChild;
159
-
168
+
160
169
  expect(frame).toHaveClass('custom-frame');
161
170
  expect(frame).toHaveClass('device-frame'); // Base class still present
162
171
  });
@@ -166,7 +175,7 @@ describe('DeviceFrame', () => {
166
175
  <DeviceFrame className="custom-class another-class" />
167
176
  );
168
177
  const frame = container.firstChild;
169
-
178
+
170
179
  expect(frame).toHaveClass('custom-class');
171
180
  expect(frame).toHaveClass('another-class');
172
181
  expect(frame).toHaveClass('device-frame');
@@ -177,7 +186,7 @@ describe('DeviceFrame', () => {
177
186
  <DeviceFrame data-testid="custom-frame" aria-label="Device Preview" />
178
187
  );
179
188
  const frame = container.firstChild;
180
-
189
+
181
190
  expect(frame).toHaveAttribute('data-testid', 'custom-frame');
182
191
  expect(frame).toHaveAttribute('aria-label', 'Device Preview');
183
192
  });
@@ -186,7 +195,7 @@ describe('DeviceFrame', () => {
186
195
  const handleClick = jest.fn();
187
196
  const { container } = render(<DeviceFrame onClick={handleClick} />);
188
197
  const frame = container.firstChild;
189
-
198
+
190
199
  frame.click();
191
200
  expect(handleClick).toHaveBeenCalledTimes(1);
192
201
  });
@@ -195,7 +204,7 @@ describe('DeviceFrame', () => {
195
204
  const customStyle = { border: '2px solid red' };
196
205
  const { container } = render(<DeviceFrame style={customStyle} />);
197
206
  const frame = container.firstChild;
198
-
207
+
199
208
  // Note: inline styles from props override component styles
200
209
  expect(frame.style.border).toBe('2px solid red');
201
210
  });
@@ -261,7 +270,7 @@ describe('DeviceFrame', () => {
261
270
  it('renders with empty string className', () => {
262
271
  const { container } = render(<DeviceFrame className="" />);
263
272
  const frame = container.firstChild;
264
-
273
+
265
274
  expect(frame).toHaveClass('device-frame');
266
275
  });
267
276
 
@@ -274,7 +283,7 @@ describe('DeviceFrame', () => {
274
283
  </>
275
284
  </DeviceFrame>
276
285
  );
277
-
286
+
278
287
  expect(screen.getByTestId('fragment-child-1')).toBeInTheDocument();
279
288
  expect(screen.getByTestId('fragment-child-2')).toBeInTheDocument();
280
289
  });
@@ -289,7 +298,7 @@ describe('DeviceFrame', () => {
289
298
  </div>
290
299
  </DeviceFrame>
291
300
  );
292
-
301
+
293
302
  expect(screen.getByTestId('nested-child')).toBeInTheDocument();
294
303
  });
295
304
  });
@@ -297,7 +306,7 @@ describe('DeviceFrame', () => {
297
306
  describe('Component Structure', () => {
298
307
  it('renders a single root div element', () => {
299
308
  const { container } = render(<DeviceFrame />);
300
-
309
+
301
310
  expect(container.firstChild.tagName).toBe('DIV');
302
311
  expect(container.children).toHaveLength(1);
303
312
  });
@@ -307,8 +316,8 @@ describe('DeviceFrame', () => {
307
316
  <DeviceFrame device={DEVICE_TYPES.ANDROID} className="custom" />
308
317
  );
309
318
  const androidFrame = androidContainer.firstChild;
310
-
311
- const classes = androidFrame.className.split(' ').filter((c) => c);
319
+
320
+ const classes = androidFrame.className.split(' ').filter(c => c);
312
321
  expect(classes).toContain('device-frame');
313
322
  expect(classes).toContain('device-frame--android');
314
323
  expect(classes).toContain('custom');
@@ -317,7 +326,7 @@ describe('DeviceFrame', () => {
317
326
  it('applies styles as inline styles object', () => {
318
327
  const { container } = render(<DeviceFrame />);
319
328
  const frame = container.firstChild;
320
-
329
+
321
330
  // Verify style is an object
322
331
  expect(typeof frame.style).toBe('object');
323
332
  expect(frame.style).not.toBeNull();
@@ -334,7 +343,7 @@ describe('DeviceFrame', () => {
334
343
  />
335
344
  );
336
345
  const frame = container.firstChild;
337
-
346
+
338
347
  expect(frame).toHaveAttribute('role', 'img');
339
348
  expect(frame).toHaveAttribute('aria-label', 'Mobile Device Preview');
340
349
  expect(frame).toHaveAttribute('aria-describedby', 'device-description');
@@ -349,7 +358,7 @@ describe('DeviceFrame', () => {
349
358
  />
350
359
  );
351
360
  const frame = container.firstChild;
352
-
361
+
353
362
  expect(frame).toHaveAttribute('data-device', 'android');
354
363
  expect(frame).toHaveAttribute('data-testid', 'device-frame');
355
364
  expect(frame).toHaveAttribute('data-analytics', 'preview-frame');
@@ -369,7 +378,7 @@ describe('DeviceFrame', () => {
369
378
  </div>
370
379
  </DeviceFrame>
371
380
  );
372
-
381
+
373
382
  expect(screen.getByTestId('preview-iframe')).toBeInTheDocument();
374
383
  });
375
384
 
@@ -379,16 +388,16 @@ describe('DeviceFrame', () => {
379
388
  <div data-testid="content">Content</div>
380
389
  </DeviceFrame>
381
390
  );
382
-
391
+
383
392
  expect(container.firstChild).toHaveClass('device-frame--android');
384
393
  expect(screen.getByTestId('content')).toBeInTheDocument();
385
-
394
+
386
395
  rerender(
387
396
  <DeviceFrame device={DEVICE_TYPES.IOS}>
388
397
  <div data-testid="content">Content</div>
389
398
  </DeviceFrame>
390
399
  );
391
-
400
+
392
401
  expect(container.firstChild).toHaveClass('device-frame--ios');
393
402
  expect(screen.getByTestId('content')).toBeInTheDocument();
394
403
  });
@@ -399,16 +408,17 @@ describe('DeviceFrame', () => {
399
408
  <div data-testid="dynamic-content">Initial</div>
400
409
  </DeviceFrame>
401
410
  );
402
-
411
+
403
412
  expect(screen.getByTestId('dynamic-content')).toHaveTextContent('Initial');
404
-
413
+
405
414
  rerender(
406
415
  <DeviceFrame>
407
416
  <div data-testid="dynamic-content">Updated</div>
408
417
  </DeviceFrame>
409
418
  );
410
-
419
+
411
420
  expect(screen.getByTestId('dynamic-content')).toHaveTextContent('Updated');
412
421
  });
413
422
  });
414
423
  });
424
+
@@ -24,7 +24,7 @@ $empty-state-meta-opacity: 0.7;
24
24
  .inapp-preview-pane {
25
25
  height: 100%;
26
26
  position: relative;
27
- background-color: $CAP_G07;
27
+ background-color: $CAP_G08;
28
28
  background-image: radial-gradient(circle at 50% 50%, rgba($CAP_WHITE, 0.1) 0%, transparent 70%);
29
29
  display: flex;
30
30
  flex-direction: column;
@@ -123,9 +123,11 @@ $empty-state-meta-opacity: 0.7;
123
123
  .device-frame {
124
124
  position: relative;
125
125
  display: inline-block;
126
+ filter: drop-shadow(0 0.75rem 3rem rgba($CAP_G01, 0.25));
126
127
  transition: all 0.3s ease-in-out;
127
128
 
128
129
  &:hover {
130
+ filter: drop-shadow(0 1rem 3.5rem rgba($CAP_G01, 0.3));
129
131
  transform: translateY(-0.125rem);
130
132
  }
131
133
 
@@ -6,55 +6,55 @@ export const LAYOUT_TYPES = {
6
6
  MODAL: 'POPUP',
7
7
  HEADER: 'HEADER',
8
8
  FOOTER: 'FOOTER',
9
- FULLSCREEN: 'FULLSCREEN',
9
+ FULLSCREEN: 'FULLSCREEN'
10
10
  };
11
11
 
12
12
  export const LAYOUT_OPTIONS = [
13
13
  {
14
14
  value: LAYOUT_TYPES.MODAL,
15
15
  label: 'Modal',
16
- description: 'Content displayed in center like a modal dialog',
16
+ description: 'Content displayed in center like a modal dialog'
17
17
  },
18
18
  {
19
19
  value: LAYOUT_TYPES.HEADER,
20
20
  label: 'Top Banner',
21
- description: 'Content displayed at the top of the screen',
21
+ description: 'Content displayed at the top of the screen'
22
22
  },
23
23
  {
24
24
  value: LAYOUT_TYPES.FOOTER,
25
25
  label: 'Bottom Banner',
26
- description: 'Content displayed at the bottom of the screen',
26
+ description: 'Content displayed at the bottom of the screen'
27
27
  },
28
28
  {
29
29
  value: LAYOUT_TYPES.FULLSCREEN,
30
30
  label: 'Fullscreen',
31
- description: 'Content covers the entire screen',
32
- },
31
+ description: 'Content covers the entire screen'
32
+ }
33
33
  ];
34
34
 
35
35
  export const COMPONENT_SIZES = ['small', 'middle', 'large'];
36
36
 
37
37
  export const DEVICE_FRAMES = {
38
38
  ANDROID: 'android-frame.svg',
39
- IOS: 'ios-frame.svg',
39
+ IOS: 'ios-frame.svg'
40
40
  };
41
41
 
42
42
  // Screen area dimensions within device frames (accounting for PNG bezels)
43
43
  export const DEVICE_SCREEN_AREAS = {
44
44
  IOS: {
45
45
  // iOS screen area within 450x920 frame - accurate values for PNG asset
46
- top: '85px', // Top bezel including notch area
47
- left: '35px', // Side bezel width
48
- width: '380px', // Actual screen width within bezels
49
- height: '710px', // Actual screen height within bezels
46
+ top: '85px', // Top bezel including notch area
47
+ left: '35px', // Side bezel width
48
+ width: '380px', // Actual screen width within bezels
49
+ height: '710px' // Actual screen height within bezels
50
50
  },
51
51
  ANDROID: {
52
52
  // Android screen area within 450x920 frame - accurate values for PNG asset
53
- top: '85px', // Top bezel including status bar
54
- left: '35px', // Side bezel width (same as iOS for consistency)
55
- width: '380px', // Actual screen width within bezels
56
- height: '710px', // Actual screen height within bezels
57
- },
53
+ top: '85px', // Top bezel including status bar
54
+ left: '35px', // Side bezel width (same as iOS for consistency)
55
+ width: '380px', // Actual screen width within bezels
56
+ height: '710px' // Actual screen height within bezels
57
+ }
58
58
  };
59
59
 
60
60
  // Content positioning configurations within the screen area (not the full frame)
@@ -63,42 +63,42 @@ export const LAYOUT_POSITIONS = {
63
63
  top: '50%',
64
64
  left: '50%',
65
65
  transform: 'translate(-50%, -50%)',
66
- width: '85%', // Reduced to ensure content stays within screen
67
- height: '55%', // Reduced to ensure content stays within screen
66
+ width: '85%', // Reduced to ensure content stays within screen
67
+ height: '55%', // Reduced to ensure content stays within screen
68
68
  maxWidth: '320px', // Adjusted for screen area
69
69
  maxHeight: '380px',
70
- minHeight: '180px',
70
+ minHeight: '180px'
71
71
  },
72
72
  [LAYOUT_TYPES.HEADER]: {
73
- top: '2%', // More margin from top of screen
73
+ top: '2%', // More margin from top of screen
74
74
  left: '50%',
75
75
  transform: 'translateX(-50%)',
76
- width: '90%', // Reduced to stay within screen bounds
76
+ width: '90%', // Reduced to stay within screen bounds
77
77
  height: '22%',
78
78
  maxHeight: '160px',
79
- minHeight: '100px',
79
+ minHeight: '100px'
80
80
  },
81
81
  [LAYOUT_TYPES.FOOTER]: {
82
- bottom: '2%', // More margin from bottom of screen
82
+ bottom: '2%', // More margin from bottom of screen
83
83
  left: '50%',
84
84
  transform: 'translateX(-50%)',
85
- width: '90%', // Reduced to stay within screen bounds
85
+ width: '90%', // Reduced to stay within screen bounds
86
86
  height: '22%',
87
87
  maxHeight: '160px',
88
- minHeight: '100px',
88
+ minHeight: '100px'
89
89
  },
90
90
  [LAYOUT_TYPES.FULLSCREEN]: {
91
- top: '2%', // Small margin to account for screen bounds
91
+ top: '2%', // Small margin to account for screen bounds
92
92
  left: '2%',
93
- width: '96%', // Slightly smaller to ensure it stays within screen
94
- height: '96%',
95
- },
93
+ width: '96%', // Slightly smaller to ensure it stays within screen
94
+ height: '96%'
95
+ }
96
96
  };
97
97
 
98
98
  // Scroll position multipliers for adaptive scrolling in InAppPreviewPane
99
99
  export const SCROLL_POSITION_MULTIPLIERS = {
100
- [LAYOUT_TYPES.HEADER]: 0.0, // Top of screen
101
- [LAYOUT_TYPES.FOOTER]: 1.0, // Bottom of screen
102
- [LAYOUT_TYPES.MODAL]: 0.4, // Center-ish position
103
- [LAYOUT_TYPES.FULLSCREEN]: 0.3, // Slightly above center
100
+ [LAYOUT_TYPES.HEADER]: 0.0, // Top of screen
101
+ [LAYOUT_TYPES.FOOTER]: 1.0, // Bottom of screen
102
+ [LAYOUT_TYPES.MODAL]: 0.4, // Center-ish position
103
+ [LAYOUT_TYPES.FULLSCREEN]: 0.3 // Slightly above center
104
104
  };
@@ -2,9 +2,7 @@
2
2
  * InAppPreviewPane - Complete InApp preview with device frames and dynamic positioning
3
3
  */
4
4
 
5
- import React, {
6
- useMemo, useRef, useEffect, useCallback,
7
- } from 'react';
5
+ import React, { useMemo, useRef, useEffect, useCallback } from 'react';
8
6
  import PropTypes from 'prop-types';
9
7
  import { injectIntl, intlShape } from 'react-intl';
10
8
 
@@ -18,6 +16,7 @@ import ContentOverlay from './ContentOverlay';
18
16
  import { useEditorContext } from '../common/EditorContext';
19
17
 
20
18
  // Constants
19
+ import { DEVICE_TYPES } from '../../constants';
21
20
  import { LAYOUT_TYPES, SCROLL_POSITION_MULTIPLIERS } from './constants';
22
21
 
23
22
  // Styles
@@ -28,14 +27,14 @@ const InAppPreviewPane = ({
28
27
  className = '',
29
28
  isFullscreenMode = false,
30
29
  isModalContext = false,
31
- layoutType: propLayoutType = LAYOUT_TYPES.MODAL,
30
+ layoutType: propLayoutType = LAYOUT_TYPES.MODAL
32
31
  }) => {
33
32
  const {
34
33
  content,
35
34
  activeDevice,
36
35
  getDeviceContent,
37
36
  layoutType: contextLayoutType,
38
- isFullscreenMode: contextIsFullscreenMode,
37
+ isFullscreenMode: contextIsFullscreenMode
39
38
  } = useEditorContext();
40
39
 
41
40
  // Refs for adaptive scrolling
@@ -84,7 +83,7 @@ const InAppPreviewPane = ({
84
83
  requestAnimationFrame(() => {
85
84
  container.scrollTo({
86
85
  top: targetScrollTop,
87
- behavior: 'smooth',
86
+ behavior: 'smooth'
88
87
  });
89
88
  });
90
89
  } catch (error) {
@@ -174,7 +173,7 @@ InAppPreviewPane.propTypes = {
174
173
  className: PropTypes.string,
175
174
  isFullscreenMode: PropTypes.bool,
176
175
  isModalContext: PropTypes.bool,
177
- layoutType: PropTypes.oneOf(Object.values(LAYOUT_TYPES)),
176
+ layoutType: PropTypes.oneOf(Object.values(LAYOUT_TYPES))
178
177
  };
179
178
 
180
179
  export default injectIntl(InAppPreviewPane);
@@ -6,7 +6,7 @@
6
6
 
7
7
  .preview-pane {
8
8
  height: 100%;
9
- max-height: 33.25rem;
9
+ max-height: 31.25rem;
10
10
  position: relative;
11
11
  background-color: $CAP_G09;
12
12
  padding: 1rem;
@@ -14,8 +14,8 @@
14
14
 
15
15
  &__mode-controls {
16
16
  position: absolute;
17
- top: 1.5rem;
18
- right: 2rem;
17
+ top: 0.5rem;
18
+ right: 0.5rem;
19
19
  z-index: 10;
20
20
  background-color: $CAP_G07;
21
21
  border-radius: 0.5rem;
@@ -59,7 +59,7 @@
59
59
 
60
60
  &:hover,
61
61
  &.preview-mode-group__btn--active {
62
- background-color: $CAP_WHITE;
62
+ background-color: rgba($CAP_WHITE, 0.5);
63
63
  }
64
64
  }
65
65
  }
@@ -67,8 +67,8 @@
67
67
  }
68
68
 
69
69
  &__content {
70
- height: calc(100%);
71
- max-height: 34.25rem;
70
+ height: calc(100% - 2rem);
71
+ max-height: 28.125rem;
72
72
  display: flex;
73
73
  align-items: center;
74
74
  justify-content: center;
@@ -83,7 +83,7 @@
83
83
  background-color: $CAP_WHITE;
84
84
  width: 100%;
85
85
  height: 28.125rem;
86
- max-height: 34.25rem;
86
+ max-height: 31.25rem;
87
87
 
88
88
  &--mobile {
89
89
  // Width and height now controlled by React inline styles
@@ -191,6 +191,9 @@
191
191
  height: calc(100% - 2rem);
192
192
  color: $CAP_G10;
193
193
  text-align: center;
194
+ background-color: $CAP_WHITE;
195
+ border-radius: 0.25rem;
196
+ box-shadow: 0 0.0625rem 0.1875rem rgba($CAP_G01, 0.1);
194
197
  margin: 0;
195
198
  width: 100%;
196
199