@capillarytech/creatives-library 8.0.252 → 8.0.254

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 (142) hide show
  1. package/assets/Android.png +0 -0
  2. package/assets/iOS.png +0 -0
  3. package/constants/unified.js +1 -2
  4. package/initialReducer.js +0 -2
  5. package/package.json +1 -1
  6. package/services/api.js +0 -10
  7. package/services/tests/api.test.js +0 -34
  8. package/utils/common.js +0 -5
  9. package/utils/commonUtils.js +5 -28
  10. package/utils/tests/commonUtil.test.js +0 -224
  11. package/utils/transformTemplateConfig.js +10 -0
  12. package/v2Components/CapDeviceContent/index.js +56 -61
  13. package/v2Components/CapTagList/index.js +1 -6
  14. package/v2Components/CapTagListWithInput/index.js +1 -5
  15. package/v2Components/CapTagListWithInput/messages.js +1 -1
  16. package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
  17. package/v2Components/ErrorInfoNote/index.js +72 -455
  18. package/v2Components/ErrorInfoNote/messages.js +6 -36
  19. package/v2Components/ErrorInfoNote/style.scss +4 -280
  20. package/v2Components/FormBuilder/tests/index.test.js +4 -13
  21. package/v2Components/HtmlEditor/HTMLEditor.js +94 -547
  22. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1358
  23. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
  24. package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
  25. package/v2Components/HtmlEditor/_index.lazy.scss +1 -1
  26. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +101 -22
  27. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +140 -146
  28. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
  29. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  30. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +0 -9
  31. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
  32. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
  33. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
  34. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
  35. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
  36. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  37. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
  38. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +6 -3
  39. package/v2Components/HtmlEditor/components/PreviewPane/index.js +34 -24
  40. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  41. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
  42. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -49
  43. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +34 -50
  44. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +41 -70
  45. package/v2Components/HtmlEditor/constants.js +20 -42
  46. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
  47. package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
  48. package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
  49. package/v2Components/HtmlEditor/hooks/useValidation.js +53 -189
  50. package/v2Components/HtmlEditor/index.js +1 -1
  51. package/v2Components/HtmlEditor/messages.js +85 -95
  52. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +45 -94
  53. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +0 -134
  54. package/v2Components/HtmlEditor/utils/contentSanitizer.js +41 -40
  55. package/v2Components/HtmlEditor/utils/htmlValidator.js +72 -71
  56. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +102 -134
  57. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
  58. package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
  59. package/v2Components/MobilePushPreviewV2/index.js +7 -32
  60. package/v2Components/TemplatePreview/_templatePreview.scss +24 -55
  61. package/v2Components/TemplatePreview/index.js +32 -47
  62. package/v2Components/TemplatePreview/messages.js +0 -4
  63. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
  64. package/v2Containers/BeeEditor/index.js +90 -172
  65. package/v2Containers/CreativesContainer/SlideBoxContent.js +51 -128
  66. package/v2Containers/CreativesContainer/SlideBoxFooter.js +13 -163
  67. package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -2
  68. package/v2Containers/CreativesContainer/constants.js +0 -1
  69. package/v2Containers/CreativesContainer/index.js +46 -239
  70. package/v2Containers/CreativesContainer/messages.js +0 -8
  71. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
  72. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +50 -38
  73. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -106
  74. package/v2Containers/Email/actions.js +0 -7
  75. package/v2Containers/Email/constants.js +1 -5
  76. package/v2Containers/Email/index.js +32 -241
  77. package/v2Containers/Email/messages.js +0 -32
  78. package/v2Containers/Email/reducer.js +1 -12
  79. package/v2Containers/Email/sagas.js +7 -61
  80. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
  81. package/v2Containers/Email/tests/reducer.test.js +0 -46
  82. package/v2Containers/Email/tests/sagas.test.js +29 -320
  83. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +19 -207
  84. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
  85. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
  86. package/v2Containers/EmailWrapper/constants.js +0 -2
  87. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +77 -629
  88. package/v2Containers/EmailWrapper/index.js +23 -103
  89. package/v2Containers/EmailWrapper/messages.js +1 -61
  90. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
  91. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -594
  92. package/v2Containers/InApp/actions.js +0 -7
  93. package/v2Containers/InApp/constants.js +4 -20
  94. package/v2Containers/InApp/index.js +359 -802
  95. package/v2Containers/InApp/index.scss +3 -4
  96. package/v2Containers/InApp/messages.js +3 -7
  97. package/v2Containers/InApp/reducer.js +3 -21
  98. package/v2Containers/InApp/sagas.js +9 -29
  99. package/v2Containers/InApp/selectors.js +5 -25
  100. package/v2Containers/InApp/tests/index.test.js +50 -154
  101. package/v2Containers/InApp/tests/reducer.test.js +0 -34
  102. package/v2Containers/InApp/tests/sagas.test.js +9 -61
  103. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +0 -3
  104. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +0 -2
  105. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +0 -2
  106. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +0 -9
  107. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +0 -12
  108. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +0 -4
  109. package/v2Containers/TagList/index.js +19 -62
  110. package/v2Containers/Templates/_templates.scss +1 -60
  111. package/v2Containers/Templates/index.js +4 -89
  112. package/v2Containers/Templates/messages.js +0 -4
  113. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -34
  114. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -874
  115. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +0 -6
  116. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -254
  117. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -364
  118. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
  119. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.apiErrors.test.js +0 -795
  120. package/v2Components/HtmlEditor/utils/validationConstants.js +0 -40
  121. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +0 -14
  122. package/v2Containers/BeePopupEditor/constants.js +0 -10
  123. package/v2Containers/BeePopupEditor/index.js +0 -194
  124. package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
  125. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1285
  126. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -1870
  127. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
  128. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -643
  129. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
  130. package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
  131. package/v2Containers/InApp/tests/selectors.test.js +0 -612
  132. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -151
  133. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
  134. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -23
  135. package/v2Containers/InAppWrapper/constants.js +0 -16
  136. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
  137. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
  138. package/v2Containers/InAppWrapper/index.js +0 -148
  139. package/v2Containers/InAppWrapper/messages.js +0 -49
  140. package/v2Containers/InappAdvance/index.js +0 -1099
  141. package/v2Containers/InappAdvance/index.scss +0 -10
  142. package/v2Containers/InappAdvance/tests/index.test.js +0 -448
@@ -1,40 +0,0 @@
1
- /**
2
- * Validation Constants
3
- *
4
- * Shared constants for validation issue categorization across HTML Editor components
5
- */
6
-
7
- // Issue sources for categorizing validation errors
8
- export const ISSUE_SOURCES = {
9
- HTMLHINT: 'htmlhint',
10
- CSS_VALIDATOR: 'css-validator',
11
- CUSTOM: 'custom',
12
- SECURITY: 'security',
13
- LIQUID: 'liquid-validator',
14
- };
15
-
16
- // Label issue patterns - syntax errors related to tags
17
- // These patterns identify tag syntax errors (open/close tags, attributes, brackets)
18
- export const LABEL_ISSUE_PATTERNS = [
19
- 'tag must be paired',
20
- 'open tag match failed',
21
- 'closed tag match failed',
22
- 'unclosed',
23
- 'missing required',
24
- 'tag-pair',
25
- 'attr-value-not-empty',
26
- 'attr-no-duplication',
27
- 'tag-self-close',
28
- 'spec-char-escape',
29
- 'tagname-lowercase',
30
- 'attr-lowercase',
31
- 'src-not-empty',
32
- 'alt-require',
33
- ];
34
-
35
- // Tab keys for error categorization
36
- export const ERROR_TAB_KEYS = {
37
- HTML: 'html',
38
- LABEL: 'label',
39
- LIQUID: 'liquid',
40
- };
@@ -1,14 +0,0 @@
1
- @import '~@capillarytech/cap-ui-library/styles/_variables.scss';
2
-
3
- .bee-popup-editor {
4
- &__container {
5
- height: 46.5rem;
6
- }
7
- }
8
-
9
- .bee-editor-tag-list {
10
- &--positioned {
11
- left: 9.643rem;
12
- top: 17.857rem;
13
- }
14
- }
@@ -1,10 +0,0 @@
1
- export const BEE_LAYOUT_OPTIONS = {
2
- POPUP: "classic-center",
3
- HEADER: "bar-top",
4
- FOOTER: "bar-bottom",
5
- FULLSCREEN: "classic-center",
6
- };
7
- export const MOBILE = "mobile";
8
- export const UNSUBSCRIBE = 'unsubscribe';
9
- export const ANDROID = 'ANDROID';
10
- export const IOS = 'IOS';
@@ -1,194 +0,0 @@
1
- import React, { useEffect, useRef, useState } from 'react';
2
- import PropTypes from 'prop-types';
3
- import { injectIntl } from 'react-intl';
4
- import { connect } from 'react-redux';
5
- // import { bindActionCreators } from 'redux';
6
- import { createStructuredSelector } from 'reselect';
7
- import CapRow from '@capillarytech/cap-ui-library/CapRow';
8
- import { UserIsAuthenticated } from '../../utils/authWrapper';
9
- import TagList from '../TagList';
10
- import {
11
- ANDROID, BEE_LAYOUT_OPTIONS, MOBILE, UNSUBSCRIBE,
12
- } from './constants';
13
- import emptyAndroidSvg from '../../assets/Android.png';
14
- import emptyIosSvg from '../../assets/iOS.png';
15
- import './_beePopupEditor.scss';
16
- function BeePopupEditor(props) {
17
- const {
18
- uid,
19
- id,
20
- tokenData,
21
- saveBeeInstance,
22
- saveBeeData,
23
- saveBeeHtmlValue,
24
- beeJson,
25
- templateLayoutType,
26
- moduleFilterEnabled,
27
- label,
28
- location,
29
- injectedTags,
30
- className,
31
- userLocale,
32
- selectedOfferDetails,
33
- tags,
34
- onContextChange,
35
- device,
36
- } = props;
37
-
38
- let beePluginInstance = null;
39
- let intervalTimer;
40
- const savedCallback = useRef();
41
- const beeInstanceRef = useRef(null);
42
- const isInitializedRef = useRef(false);
43
-
44
- const [visibleTaglist, setVisibleTaglist] = useState(false);
45
- const [selectedTag, setSelectedTag] = useState({});
46
- const filteredTags = (tags || []).filter((obj) => obj.definition.value !== UNSUBSCRIBE);
47
-
48
- useEffect(() => {
49
- // Only recreate BEE editor when layout type changes, not when content (beeJson) changes
50
- // If beeJson is in dependencies, editor reloads on every keystroke!
51
- const beeConfig = {
52
- uid,
53
- trackChanges: true,
54
- container: 'bee-plugin-container',
55
- workspace: {
56
- popup: {
57
- backgroundImageMobile: device === ANDROID ? emptyAndroidSvg : emptyIosSvg,
58
- layout: BEE_LAYOUT_OPTIONS[templateLayoutType],
59
- customStyles: {
60
- container: {
61
- width: "90%",
62
- margin: "1.5rem",
63
- },
64
- },
65
- },
66
- stage: MOBILE,
67
- hideStageToggle: true,
68
- },
69
- contentDialog: {
70
- mergeTags: {
71
- label: 'Add Label',
72
- handler: async (resolve, reject) => {
73
- // this will open tag modal
74
- await setVisibleTaglist(true);
75
- // until tag modal will not open promise will not execute
76
- // once tag modal is opened it will start 2 sec interval to wait use has selected any tag or cancel the tag selection
77
- const promise = new Promise((resolveP) => {
78
- intervalTimer = setInterval(() => {
79
- // this will execute, if user cancel the tag selection
80
- if ((savedCallback.current || {}).close === true) {
81
- reject();
82
- clearInterval(intervalTimer);
83
- return;
84
- }
85
- // this block is checking use has selected any tag or not
86
- if (Object.keys(savedCallback.current || {}).length > 0) {
87
- resolveP(savedCallback.current);
88
- setSelectedTag({});
89
- clearInterval(intervalTimer);
90
- }
91
- }, 2000);
92
- });
93
- // once prmise will resolve , pass the resolve data to handler to show tags in bee edior
94
- const result = await promise;
95
- resolve(result);
96
- },
97
- },
98
- },
99
- onChange: (jsonFile, htmlFile) => {
100
- saveBeeData(jsonFile, htmlFile, device);
101
- },
102
- onSave: (jsonFile, htmlFile) => {
103
- // onSave provides the actual HTML value, use it to update beeHtml.value
104
- if (saveBeeHtmlValue && htmlFile) {
105
- saveBeeHtmlValue(htmlFile, device);
106
- }
107
- // Also call saveBeeData to update JSON
108
- saveBeeData(jsonFile, htmlFile, device);
109
- },
110
- };
111
- window.BeePlugin.create(tokenData, beeConfig, (instance) => {
112
- beePluginInstance = instance;
113
- beeInstanceRef.current = instance;
114
- // Check if beeJson is already an object (happens when layout type changes)
115
- const parseJson = typeof beeJson === 'string' ? JSON.parse(beeJson) : beeJson;
116
- beePluginInstance.start(parseJson);
117
- saveBeeInstance(beePluginInstance, device);
118
- isInitializedRef.current = true;
119
- });
120
- return () => {
121
- clearInterval(intervalTimer);
122
- // Reset initialization flag when component unmounts or layout changes
123
- isInitializedRef.current = false;
124
- };
125
- // IMPORTANT: Only include templateLayoutType, NOT beeJson
126
- // beeJson changes on every keystroke and would cause editor to reload constantly
127
- }, [templateLayoutType]);
128
-
129
- useEffect(() => {
130
- savedCallback.current = Object?.keys(selectedTag)?.length > 0 && selectedTag;
131
- }, [selectedTag]);
132
-
133
- const onTagSelect = (result) => {
134
- const msg = {
135
- name: result,
136
- value: `{{${result}}}`,
137
- };
138
- setSelectedTag(msg);
139
- setVisibleTaglist(false);
140
- };
141
-
142
- const onCancelTagList = () => {
143
- setVisibleTaglist(false);
144
- setSelectedTag({ close: true });
145
- };
146
-
147
- return (
148
- <CapRow>
149
- <div id="bee-plugin-container" className="bee-popup-editor__container"></div>
150
- <TagList
151
- moduleFilterEnabled={moduleFilterEnabled}
152
- label={label}
153
- onTagSelect={onTagSelect}
154
- location={location}
155
- tags={filteredTags}
156
- injectedTags={injectedTags}
157
- className={className}
158
- id={id}
159
- userLocale={userLocale}
160
- selectedOfferDetails={selectedOfferDetails}
161
- visibleTaglist={visibleTaglist}
162
- hidePopover
163
- modalProps={{
164
- onCancel: onCancelTagList,
165
- className: "bee-editor-tag-list bee-editor-tag-list--positioned",
166
- }}
167
- onContextChange={onContextChange}
168
- />
169
- </CapRow>
170
- );
171
- }
172
- BeePopupEditor.propTypes = {
173
- saveBeeData: PropTypes.func.isRequired,
174
- saveBeeInstance: PropTypes.func.isRequired,
175
- beeJson: PropTypes.object.isRequired,
176
- tokenData: PropTypes.object.isRequired,
177
- uid: PropTypes.string.isRequired,
178
- templateLayoutType: PropTypes.string.isRequired,
179
- id: PropTypes.string.isRequired,
180
- moduleFilterEnabled: PropTypes.bool.isRequired,
181
- label: PropTypes.string.isRequired,
182
- location: PropTypes.object.isRequired,
183
- injectedTags: PropTypes.array.isRequired,
184
- className: PropTypes.string.isRequired,
185
- userLocale: PropTypes.string.isRequired,
186
- selectedOfferDetails: PropTypes.object.isRequired,
187
- tags: PropTypes.array.isRequired,
188
- onContextChange: PropTypes.func.isRequired,
189
- device: PropTypes.string.isRequired,
190
- };
191
- const mapStateToProps = () => createStructuredSelector({});
192
-
193
- function mapDispatchToProps() { }
194
- export default UserIsAuthenticated(connect(mapStateToProps, mapDispatchToProps)(injectIntl(BeePopupEditor)));