@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.
- package/assets/Android.png +0 -0
- package/assets/iOS.png +0 -0
- package/constants/unified.js +1 -3
- package/initialReducer.js +0 -2
- package/package.json +1 -1
- package/services/api.js +0 -15
- package/services/tests/api.test.js +0 -34
- package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +35 -17
- package/tests/integration/TemplateCreation/api-response.js +1 -31
- package/tests/integration/TemplateCreation/msw-handler.js +0 -2
- package/utils/common.js +0 -11
- package/utils/commonUtils.js +5 -28
- package/utils/tests/commonUtil.test.js +0 -224
- package/utils/tests/transformerUtils.test.js +0 -297
- package/utils/transformTemplateConfig.js +10 -0
- package/utils/transformerUtils.js +0 -40
- package/v2Components/CapDeviceContent/index.js +56 -61
- package/v2Components/CapImageUpload/constants.js +0 -2
- package/v2Components/CapImageUpload/index.js +16 -65
- package/v2Components/CapImageUpload/index.scss +1 -4
- package/v2Components/CapImageUpload/messages.js +1 -5
- package/v2Components/CapTagList/index.js +1 -6
- package/v2Components/CapTagListWithInput/index.js +1 -5
- package/v2Components/CapTagListWithInput/messages.js +1 -1
- package/v2Components/CapWhatsappCTA/tests/index.test.js +0 -5
- package/v2Components/ErrorInfoNote/index.js +72 -402
- package/v2Components/ErrorInfoNote/messages.js +6 -32
- package/v2Components/ErrorInfoNote/style.scss +6 -278
- package/v2Components/FormBuilder/tests/index.test.js +4 -13
- package/v2Components/HtmlEditor/HTMLEditor.js +99 -418
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +133 -1882
- package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +16 -27
- package/v2Components/HtmlEditor/_htmlEditor.scss +45 -108
- package/v2Components/HtmlEditor/_index.lazy.scss +1 -0
- package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +102 -23
- package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +140 -148
- package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +1 -2
- package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
- package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +1 -9
- package/v2Components/HtmlEditor/components/EditorToolbar/index.js +6 -31
- package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +0 -22
- package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +7 -4
- package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +45 -35
- package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +3 -1
- package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
- package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +6 -7
- package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +10 -7
- package/v2Components/HtmlEditor/components/PreviewPane/index.js +43 -22
- package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +152 -0
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +0 -18
- package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +31 -36
- package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +34 -46
- package/v2Components/HtmlEditor/components/ValidationPanel/index.js +46 -52
- package/v2Components/HtmlEditor/constants.js +20 -45
- package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +16 -373
- package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +16 -351
- package/v2Components/HtmlEditor/hooks/useEditorContent.js +2 -5
- package/v2Components/HtmlEditor/hooks/useInAppContent.js +146 -88
- package/v2Components/HtmlEditor/hooks/useValidation.js +56 -213
- package/v2Components/HtmlEditor/index.js +1 -1
- package/v2Components/HtmlEditor/messages.js +94 -102
- package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +45 -214
- package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +0 -134
- package/v2Components/HtmlEditor/utils/contentSanitizer.js +41 -40
- package/v2Components/HtmlEditor/utils/htmlValidator.js +72 -71
- package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +124 -158
- package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +25 -23
- package/v2Components/HtmlEditor/utils/validationAdapter.js +41 -66
- package/v2Components/MobilePushPreviewV2/index.js +7 -33
- package/v2Components/TemplatePreview/_templatePreview.scss +24 -55
- package/v2Components/TemplatePreview/index.js +32 -47
- package/v2Components/TemplatePreview/messages.js +0 -4
- package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +0 -1
- package/v2Containers/App/constants.js +0 -5
- package/v2Containers/BeeEditor/index.js +90 -172
- package/v2Containers/CreativesContainer/SlideBoxContent.js +53 -184
- package/v2Containers/CreativesContainer/SlideBoxFooter.js +13 -163
- package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -3
- package/v2Containers/CreativesContainer/constants.js +0 -4
- package/v2Containers/CreativesContainer/index.js +46 -408
- package/v2Containers/CreativesContainer/messages.js +0 -12
- package/v2Containers/CreativesContainer/tests/SlideBoxContent.test.js +0 -210
- package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +2 -11
- package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +50 -342
- package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +0 -103
- package/v2Containers/Email/actions.js +0 -7
- package/v2Containers/Email/constants.js +1 -5
- package/v2Containers/Email/index.js +36 -237
- package/v2Containers/Email/messages.js +0 -32
- package/v2Containers/Email/reducer.js +1 -12
- package/v2Containers/Email/sagas.js +7 -61
- package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +0 -2
- package/v2Containers/Email/tests/reducer.test.js +0 -46
- package/v2Containers/Email/tests/sagas.test.js +29 -320
- package/v2Containers/EmailWrapper/components/EmailWrapperView.js +21 -211
- package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +74 -40
- package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +67 -2
- package/v2Containers/EmailWrapper/constants.js +0 -2
- package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +77 -629
- package/v2Containers/EmailWrapper/index.js +23 -103
- package/v2Containers/EmailWrapper/messages.js +1 -65
- package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +214 -0
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +77 -594
- package/v2Containers/InApp/actions.js +0 -7
- package/v2Containers/InApp/constants.js +4 -20
- package/v2Containers/InApp/index.js +359 -802
- package/v2Containers/InApp/index.scss +3 -4
- package/v2Containers/InApp/messages.js +3 -7
- package/v2Containers/InApp/reducer.js +3 -21
- package/v2Containers/InApp/sagas.js +9 -29
- package/v2Containers/InApp/selectors.js +5 -25
- package/v2Containers/InApp/tests/index.test.js +50 -154
- package/v2Containers/InApp/tests/reducer.test.js +0 -34
- package/v2Containers/InApp/tests/sagas.test.js +9 -61
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +0 -3
- package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +0 -2
- package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +0 -2
- package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +0 -9
- package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +0 -12
- package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +0 -4
- package/v2Containers/TagList/index.js +19 -62
- package/v2Containers/Templates/ChannelTypeIllustration.js +1 -13
- package/v2Containers/Templates/_templates.scss +1 -265
- package/v2Containers/Templates/actions.js +1 -2
- package/v2Containers/Templates/constants.js +0 -1
- package/v2Containers/Templates/index.js +38 -363
- package/v2Containers/Templates/messages.js +0 -28
- package/v2Containers/Templates/reducer.js +0 -2
- package/v2Containers/Templates/tests/index.test.js +0 -10
- package/v2Containers/TemplatesV2/TemplatesV2.style.js +2 -4
- package/v2Containers/TemplatesV2/index.js +7 -15
- package/v2Containers/TemplatesV2/messages.js +0 -4
- package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +0 -34
- package/utils/imageUrlUpload.js +0 -141
- package/v2Components/CapImageUrlUpload/constants.js +0 -26
- package/v2Components/CapImageUrlUpload/index.js +0 -365
- package/v2Components/CapImageUrlUpload/index.scss +0 -35
- package/v2Components/CapImageUrlUpload/messages.js +0 -47
- package/v2Components/ErrorInfoNote/constants.js +0 -1
- package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +0 -870
- package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +0 -6
- package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +0 -281
- package/v2Components/HtmlEditor/components/ValidationTabs/index.js +0 -295
- package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +0 -51
- package/v2Components/HtmlEditor/utils/validationConstants.js +0 -38
- package/v2Components/MobilePushPreviewV2/constants.js +0 -6
- package/v2Containers/BeePopupEditor/_beePopupEditor.scss +0 -14
- package/v2Containers/BeePopupEditor/constants.js +0 -10
- package/v2Containers/BeePopupEditor/index.js +0 -194
- package/v2Containers/BeePopupEditor/tests/index.test.js +0 -627
- package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +0 -1246
- package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +0 -2472
- package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +0 -520
- package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +0 -956
- package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +0 -376
- package/v2Containers/InApp/__tests__/sagas.test.js +0 -363
- package/v2Containers/InApp/tests/selectors.test.js +0 -612
- package/v2Containers/InAppWrapper/components/InAppWrapperView.js +0 -151
- package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +0 -267
- package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +0 -23
- package/v2Containers/InAppWrapper/constants.js +0 -16
- package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +0 -473
- package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +0 -198
- package/v2Containers/InAppWrapper/index.js +0 -148
- package/v2Containers/InAppWrapper/messages.js +0 -49
- package/v2Containers/InappAdvance/index.js +0 -1099
- package/v2Containers/InappAdvance/index.scss +0 -10
- package/v2Containers/InappAdvance/tests/index.test.js +0 -448
- package/v2Containers/WebPush/Create/components/BrandIconSection.js +0 -108
- package/v2Containers/WebPush/Create/components/ButtonForm.js +0 -172
- package/v2Containers/WebPush/Create/components/ButtonItem.js +0 -101
- package/v2Containers/WebPush/Create/components/ButtonList.js +0 -145
- package/v2Containers/WebPush/Create/components/ButtonsLinksSection.js +0 -164
- package/v2Containers/WebPush/Create/components/ButtonsLinksSection.test.js +0 -463
- package/v2Containers/WebPush/Create/components/FormActions.js +0 -54
- package/v2Containers/WebPush/Create/components/FormActions.test.js +0 -163
- package/v2Containers/WebPush/Create/components/MediaSection.js +0 -142
- package/v2Containers/WebPush/Create/components/MediaSection.test.js +0 -341
- package/v2Containers/WebPush/Create/components/MessageSection.js +0 -103
- package/v2Containers/WebPush/Create/components/MessageSection.test.js +0 -268
- package/v2Containers/WebPush/Create/components/NotificationTitleSection.js +0 -87
- package/v2Containers/WebPush/Create/components/NotificationTitleSection.test.js +0 -210
- package/v2Containers/WebPush/Create/components/TemplateNameSection.js +0 -54
- package/v2Containers/WebPush/Create/components/TemplateNameSection.test.js +0 -143
- package/v2Containers/WebPush/Create/components/__snapshots__/ButtonsLinksSection.test.js.snap +0 -86
- package/v2Containers/WebPush/Create/components/__snapshots__/FormActions.test.js.snap +0 -16
- package/v2Containers/WebPush/Create/components/__snapshots__/MediaSection.test.js.snap +0 -41
- package/v2Containers/WebPush/Create/components/__snapshots__/MessageSection.test.js.snap +0 -54
- package/v2Containers/WebPush/Create/components/__snapshots__/NotificationTitleSection.test.js.snap +0 -37
- package/v2Containers/WebPush/Create/components/__snapshots__/TemplateNameSection.test.js.snap +0 -21
- package/v2Containers/WebPush/Create/components/_buttons.scss +0 -246
- package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +0 -554
- package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +0 -607
- package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +0 -633
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +0 -666
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +0 -74
- package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +0 -78
- package/v2Containers/WebPush/Create/hooks/useButtonManagement.js +0 -138
- package/v2Containers/WebPush/Create/hooks/useButtonManagement.test.js +0 -406
- package/v2Containers/WebPush/Create/hooks/useCharacterCount.js +0 -30
- package/v2Containers/WebPush/Create/hooks/useCharacterCount.test.js +0 -151
- package/v2Containers/WebPush/Create/hooks/useImageUpload.js +0 -104
- package/v2Containers/WebPush/Create/hooks/useImageUpload.test.js +0 -538
- package/v2Containers/WebPush/Create/hooks/useTagManagement.js +0 -122
- package/v2Containers/WebPush/Create/hooks/useTagManagement.test.js +0 -633
- package/v2Containers/WebPush/Create/index.js +0 -1148
- package/v2Containers/WebPush/Create/index.scss +0 -134
- package/v2Containers/WebPush/Create/messages.js +0 -211
- package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +0 -228
- package/v2Containers/WebPush/Create/preview/NotificationContainer.js +0 -294
- package/v2Containers/WebPush/Create/preview/PreviewContent.js +0 -90
- package/v2Containers/WebPush/Create/preview/PreviewControls.js +0 -305
- package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +0 -25
- package/v2Containers/WebPush/Create/preview/WebPushPreview.js +0 -155
- package/v2Containers/WebPush/Create/preview/assets/Light.svg +0 -53
- package/v2Containers/WebPush/Create/preview/assets/Top.svg +0 -5
- package/v2Containers/WebPush/Create/preview/assets/android-arrow-down.svg +0 -9
- package/v2Containers/WebPush/Create/preview/assets/android-arrow-up.svg +0 -9
- package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
- package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
- package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +0 -106
- package/v2Containers/WebPush/Create/preview/assets/iOS.svg +0 -26
- package/v2Containers/WebPush/Create/preview/assets/macos-arrow-down-icon.svg +0 -9
- package/v2Containers/WebPush/Create/preview/assets/macos-triple-dot-icon.svg +0 -9
- package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +0 -18
- package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +0 -29
- package/v2Containers/WebPush/Create/preview/assets/windows-close-icon.svg +0 -9
- package/v2Containers/WebPush/Create/preview/assets/windows-triple-dot-icon.svg +0 -9
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +0 -51
- package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +0 -145
- package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +0 -45
- package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +0 -68
- package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +0 -61
- package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +0 -99
- package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +0 -733
- package/v2Containers/WebPush/Create/preview/components/tests/WindowsChromeExpanded.test.js +0 -571
- package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +0 -85
- package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/WindowsChromeExpanded.test.js.snap +0 -81
- package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +0 -50
- package/v2Containers/WebPush/Create/preview/constants.js +0 -637
- package/v2Containers/WebPush/Create/preview/notification-container.scss +0 -79
- package/v2Containers/WebPush/Create/preview/preview.scss +0 -358
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +0 -370
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +0 -12
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +0 -47
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +0 -11
- package/v2Containers/WebPush/Create/preview/styles/_base.scss +0 -207
- package/v2Containers/WebPush/Create/preview/styles/_ios.scss +0 -153
- package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +0 -107
- package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +0 -101
- package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +0 -229
- package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +0 -909
- package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +0 -1081
- package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +0 -723
- package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +0 -1327
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +0 -131
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +0 -112
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +0 -144
- package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +0 -129
- package/v2Containers/WebPush/Create/utils/payloadBuilder.js +0 -96
- package/v2Containers/WebPush/Create/utils/payloadBuilder.test.js +0 -396
- package/v2Containers/WebPush/Create/utils/previewUtils.js +0 -89
- package/v2Containers/WebPush/Create/utils/urlValidation.js +0 -115
- package/v2Containers/WebPush/Create/utils/urlValidation.test.js +0 -449
- package/v2Containers/WebPush/Create/utils/validation.js +0 -75
- package/v2Containers/WebPush/Create/utils/validation.test.js +0 -283
- package/v2Containers/WebPush/actions.js +0 -60
- package/v2Containers/WebPush/constants.js +0 -132
- package/v2Containers/WebPush/index.js +0 -2
- package/v2Containers/WebPush/reducer.js +0 -104
- package/v2Containers/WebPush/sagas.js +0 -119
- package/v2Containers/WebPush/selectors.js +0 -65
- package/v2Containers/WebPush/tests/reducer.test.js +0 -863
- package/v2Containers/WebPush/tests/sagas.test.js +0 -566
- package/v2Containers/WebPush/tests/selectors.test.js +0 -960
|
@@ -21,15 +21,13 @@ import ShieldOutlined from '@ant-design/icons/ShieldOutlined';
|
|
|
21
21
|
import BugOutlined from '@ant-design/icons/BugOutlined';
|
|
22
22
|
import CodeOutlined from '@ant-design/icons/CodeOutlined';
|
|
23
23
|
import EyeInvisibleOutlined from '@ant-design/icons/EyeInvisibleOutlined';
|
|
24
|
-
import
|
|
24
|
+
import CheckCircleOutlined from '@ant-design/icons/CheckCircleOutlined';
|
|
25
25
|
|
|
26
26
|
import messages from './messages';
|
|
27
|
-
import { BLOCKING_ERROR_RULE_IDS } from '../../constants';
|
|
28
27
|
import './_validationPanel.scss';
|
|
29
|
-
import { SEVERITY } from './constants';
|
|
30
|
-
import { ISSUE_SOURCES } from '../../utils/validationConstants';
|
|
31
28
|
|
|
32
29
|
const { Panel } = Collapse;
|
|
30
|
+
|
|
33
31
|
/**
|
|
34
32
|
* ValidationPanel Component
|
|
35
33
|
*/
|
|
@@ -39,6 +37,7 @@ const ValidationPanel = ({
|
|
|
39
37
|
onErrorClick,
|
|
40
38
|
showLineNumbers = true,
|
|
41
39
|
groupBySource = false,
|
|
40
|
+
variant = 'email'
|
|
42
41
|
}) => {
|
|
43
42
|
const [activeKeys, setActiveKeys] = useState(['errors', 'warnings']);
|
|
44
43
|
|
|
@@ -57,35 +56,33 @@ const ValidationPanel = ({
|
|
|
57
56
|
groups[source].push(issue);
|
|
58
57
|
return groups;
|
|
59
58
|
}, {});
|
|
59
|
+
} else {
|
|
60
|
+
return {
|
|
61
|
+
errors: allIssues.filter(issue => issue.severity === 'error'),
|
|
62
|
+
warnings: allIssues.filter(issue => issue.severity === 'warning'),
|
|
63
|
+
info: allIssues.filter(issue => issue.severity === 'info')
|
|
64
|
+
};
|
|
60
65
|
}
|
|
61
|
-
return {
|
|
62
|
-
errors: allIssues.filter((issue) => issue.severity === SEVERITY.ERROR),
|
|
63
|
-
warnings: allIssues.filter((issue) => issue.severity === SEVERITY.WARNING),
|
|
64
|
-
info: allIssues.filter((issue) => issue.severity === SEVERITY.INFO),
|
|
65
|
-
};
|
|
66
66
|
}, [validation, groupBySource]);
|
|
67
67
|
|
|
68
|
-
//
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (rule === 'liquid-api-validation' || rule === 'standard-api-validation') {
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
// Client-side Liquid validation errors are blocking (genuine syntax errors)
|
|
76
|
-
if (source === ISSUE_SOURCES.LIQUID && severity === SEVERITY.ERROR) {
|
|
77
|
-
return true;
|
|
68
|
+
// Get icon for issue type
|
|
69
|
+
const getIssueIcon = (severity, source) => {
|
|
70
|
+
if (source === 'security') {
|
|
71
|
+
return <ShieldOutlined style={{ color: '#ff4d4f' }} />;
|
|
78
72
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
73
|
+
|
|
74
|
+
switch (severity) {
|
|
75
|
+
case 'error':
|
|
76
|
+
return <ExclamationCircleOutlined style={{ color: '#ff4d4f' }} />;
|
|
77
|
+
case 'warning':
|
|
78
|
+
return <WarningOutlined style={{ color: '#faad14' }} />;
|
|
79
|
+
case 'info':
|
|
80
|
+
return <InfoCircleOutlined style={{ color: '#1890ff' }} />;
|
|
81
|
+
default:
|
|
82
|
+
return <BugOutlined style={{ color: '#666' }} />;
|
|
82
83
|
}
|
|
83
|
-
return false;
|
|
84
84
|
};
|
|
85
85
|
|
|
86
|
-
// Get icon for issue type
|
|
87
|
-
// Blocking errors use error-icon, warnings use warning
|
|
88
|
-
|
|
89
86
|
// Get source icon
|
|
90
87
|
const getSourceIcon = (source) => {
|
|
91
88
|
switch (source) {
|
|
@@ -109,7 +106,7 @@ const ValidationPanel = ({
|
|
|
109
106
|
line: issue.line,
|
|
110
107
|
column: issue.column || 1,
|
|
111
108
|
message: issue.message,
|
|
112
|
-
severity: issue.severity
|
|
109
|
+
severity: issue.severity
|
|
113
110
|
});
|
|
114
111
|
}
|
|
115
112
|
};
|
|
@@ -128,6 +125,9 @@ const ValidationPanel = ({
|
|
|
128
125
|
}
|
|
129
126
|
}}
|
|
130
127
|
>
|
|
128
|
+
<div className="validation-issue__icon">
|
|
129
|
+
{getIssueIcon(issue.severity, issue.source)}
|
|
130
|
+
</div>
|
|
131
131
|
|
|
132
132
|
<div className="validation-issue__content">
|
|
133
133
|
<div className="validation-issue__message">
|
|
@@ -137,12 +137,10 @@ const ValidationPanel = ({
|
|
|
137
137
|
<div className="validation-issue__meta">
|
|
138
138
|
{showLineNumbers && issue.line && (
|
|
139
139
|
<span className="validation-issue__location">
|
|
140
|
-
<FormattedMessage
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
column: issue.column || 1,
|
|
145
|
-
}} />
|
|
140
|
+
<FormattedMessage {...messages.lineColumn} values={{
|
|
141
|
+
line: issue.line,
|
|
142
|
+
column: issue.column || 1
|
|
143
|
+
}} />
|
|
146
144
|
</span>
|
|
147
145
|
)}
|
|
148
146
|
|
|
@@ -164,21 +162,17 @@ const ValidationPanel = ({
|
|
|
164
162
|
);
|
|
165
163
|
|
|
166
164
|
// Render panel header with count
|
|
167
|
-
const renderPanelHeader = (title, count, severity
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
)}
|
|
179
|
-
</div>
|
|
180
|
-
)
|
|
181
|
-
;
|
|
165
|
+
const renderPanelHeader = (title, count, severity) => (
|
|
166
|
+
<div className="validation-panel__header">
|
|
167
|
+
<span className="validation-panel__title">
|
|
168
|
+
{getIssueIcon(severity)}
|
|
169
|
+
<FormattedMessage {...title} />
|
|
170
|
+
</span>
|
|
171
|
+
{count > 0 && (
|
|
172
|
+
<Badge count={count} style={{ backgroundColor: getSeverityColor(severity) }} />
|
|
173
|
+
)}
|
|
174
|
+
</div>
|
|
175
|
+
);
|
|
182
176
|
|
|
183
177
|
// Get severity color
|
|
184
178
|
const getSeverityColor = (severity) => {
|
|
@@ -247,14 +241,14 @@ const ValidationPanel = ({
|
|
|
247
241
|
: messages[key] || { id: `htmlEditor.validation.${key}`, defaultMessage: key };
|
|
248
242
|
|
|
249
243
|
const severity = isSourceGroup
|
|
250
|
-
? (issues.find(
|
|
251
|
-
|
|
244
|
+
? (issues.find(i => i.severity === 'error') ? 'error' :
|
|
245
|
+
issues.find(i => i.severity === 'warning') ? 'warning' : 'info')
|
|
252
246
|
: key;
|
|
253
247
|
|
|
254
248
|
return (
|
|
255
249
|
<Panel
|
|
256
250
|
key={key}
|
|
257
|
-
header={renderPanelHeader(title, issues.length, severity
|
|
251
|
+
header={renderPanelHeader(title, issues.length, severity)}
|
|
258
252
|
className={`validation-panel__panel validation-panel__panel--${severity}`}
|
|
259
253
|
>
|
|
260
254
|
<div className="validation-panel__issues">
|
|
@@ -297,7 +291,7 @@ ValidationPanel.propTypes = {
|
|
|
297
291
|
onErrorClick: PropTypes.func,
|
|
298
292
|
showLineNumbers: PropTypes.bool,
|
|
299
293
|
groupBySource: PropTypes.bool,
|
|
300
|
-
variant: PropTypes.oneOf(['email', 'inapp'])
|
|
294
|
+
variant: PropTypes.oneOf(['email', 'inapp'])
|
|
301
295
|
};
|
|
302
296
|
|
|
303
297
|
export default ValidationPanel;
|
|
@@ -4,32 +4,29 @@
|
|
|
4
4
|
* Centralized constants for the HTML Editor component
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
// Documentation URL for Liquid / HTML editor
|
|
8
|
-
export const LIQUID_DOC_URL = 'https://docs.capillarytech.com/docs/liquid-language-in-messages';
|
|
9
|
-
|
|
10
7
|
// HTML Editor Variants
|
|
11
8
|
export const HTML_EDITOR_VARIANTS = {
|
|
12
9
|
EMAIL: 'email',
|
|
13
|
-
INAPP: 'inapp'
|
|
10
|
+
INAPP: 'inapp'
|
|
14
11
|
};
|
|
15
12
|
|
|
16
13
|
// Device Types (for InApp variant)
|
|
17
14
|
export const DEVICE_TYPES = {
|
|
18
15
|
ANDROID: 'android',
|
|
19
|
-
IOS: 'ios'
|
|
16
|
+
IOS: 'ios'
|
|
20
17
|
};
|
|
21
18
|
|
|
22
19
|
// Editor languages
|
|
23
20
|
export const EDITOR_LANGUAGES = {
|
|
24
21
|
HTML: 'html',
|
|
25
22
|
CSS: 'css',
|
|
26
|
-
JAVASCRIPT: 'javascript'
|
|
23
|
+
JAVASCRIPT: 'javascript'
|
|
27
24
|
};
|
|
28
25
|
|
|
29
26
|
// Preview modes
|
|
30
27
|
export const PREVIEW_MODES = {
|
|
31
28
|
DESKTOP: 'desktop',
|
|
32
|
-
MOBILE: 'mobile'
|
|
29
|
+
MOBILE: 'mobile'
|
|
33
30
|
};
|
|
34
31
|
|
|
35
32
|
// Device specifications for mobile preview
|
|
@@ -41,7 +38,7 @@ export const DEVICE_PRESETS = {
|
|
|
41
38
|
devicePixelRatio: 2.75,
|
|
42
39
|
userAgent: 'Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36',
|
|
43
40
|
platform: 'android',
|
|
44
|
-
model: 'Pixel 7'
|
|
41
|
+
model: 'Pixel 7'
|
|
45
42
|
},
|
|
46
43
|
IPHONE: {
|
|
47
44
|
key: 'iphone',
|
|
@@ -50,43 +47,30 @@ export const DEVICE_PRESETS = {
|
|
|
50
47
|
devicePixelRatio: 3,
|
|
51
48
|
userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)',
|
|
52
49
|
platform: 'ios',
|
|
53
|
-
model: 'iPhone 15'
|
|
54
|
-
}
|
|
50
|
+
model: 'iPhone 15'
|
|
51
|
+
}
|
|
55
52
|
};
|
|
56
53
|
|
|
57
54
|
// Validation severity levels
|
|
58
55
|
export const VALIDATION_SEVERITY = {
|
|
59
56
|
ERROR: 'error',
|
|
60
57
|
WARNING: 'warning',
|
|
61
|
-
INFO: 'info'
|
|
58
|
+
INFO: 'info'
|
|
62
59
|
};
|
|
63
60
|
|
|
64
|
-
/**
|
|
65
|
-
* Rule Group #1: Input & Sanitization Errors.
|
|
66
|
-
* ONLY these rules are treated as BLOCKING ERROR for Save/Update/Preview/Test.
|
|
67
|
-
* All other rule groups (HTML/CSS/Liquid, compatibility, security, etc.) are WARNING only.
|
|
68
|
-
* Backward compatibility: CKEditor legacy templates (unclosed CSS, indentation, etc.) must never block.
|
|
69
|
-
*/
|
|
70
|
-
export const BLOCKING_ERROR_RULE_IDS = [
|
|
71
|
-
'sanitizer.invalidInput',
|
|
72
|
-
'sanitizer.invalidInputNonEmpty',
|
|
73
|
-
'sanitizer.sanitizationFailed',
|
|
74
|
-
'sanitizer.dangerousProtocolDetected',
|
|
75
|
-
];
|
|
76
|
-
|
|
77
61
|
// Validation types
|
|
78
62
|
export const VALIDATION_TYPES = {
|
|
79
63
|
HTML: 'html',
|
|
80
64
|
CSS: 'css',
|
|
81
65
|
JAVASCRIPT: 'javascript',
|
|
82
|
-
SECURITY: 'security'
|
|
66
|
+
SECURITY: 'security'
|
|
83
67
|
};
|
|
84
68
|
|
|
85
69
|
// Error types for preview
|
|
86
70
|
export const PREVIEW_ERROR_TYPES = {
|
|
87
71
|
RUNTIME: 'runtime',
|
|
88
72
|
RENDER: 'render',
|
|
89
|
-
SECURITY: 'security'
|
|
73
|
+
SECURITY: 'security'
|
|
90
74
|
};
|
|
91
75
|
|
|
92
76
|
// Performance thresholds
|
|
@@ -95,7 +79,7 @@ export const PERFORMANCE = {
|
|
|
95
79
|
VALIDATION_DEBOUNCE: 500, // ms
|
|
96
80
|
AUTO_SAVE_INTERVAL: 30000, // ms
|
|
97
81
|
MAX_CONTENT_LENGTH: 100000, // characters
|
|
98
|
-
PERFORMANCE_WARNING_THRESHOLD: 50000
|
|
82
|
+
PERFORMANCE_WARNING_THRESHOLD: 50000 // characters
|
|
99
83
|
};
|
|
100
84
|
|
|
101
85
|
// Layout constraints
|
|
@@ -105,7 +89,7 @@ export const LAYOUT = {
|
|
|
105
89
|
DEFAULT_SPLIT_SIZES: [50, 50], // [left, right] percentages
|
|
106
90
|
GUTTER_SIZE: 8, // pixels
|
|
107
91
|
MOBILE_BREAKPOINT: 768, // pixels
|
|
108
|
-
MOBILE_WIDTH_DEFAULT: 375
|
|
92
|
+
MOBILE_WIDTH_DEFAULT: 375 // pixels
|
|
109
93
|
};
|
|
110
94
|
|
|
111
95
|
|
|
@@ -121,7 +105,7 @@ export const CODEMIRROR_CONFIG = {
|
|
|
121
105
|
FOLD_GUTTER: true,
|
|
122
106
|
SEARCH_ENABLED: true,
|
|
123
107
|
AUTOCOMPLETE_ENABLED: true,
|
|
124
|
-
LINT_ENABLED: true
|
|
108
|
+
LINT_ENABLED: true
|
|
125
109
|
};
|
|
126
110
|
|
|
127
111
|
// HTML validation rules (HTMLHint)
|
|
@@ -142,7 +126,7 @@ export const HTML_VALIDATION_RULES = {
|
|
|
142
126
|
'inline-style-disabled': false,
|
|
143
127
|
'inline-script-disabled': false,
|
|
144
128
|
'space-tab-mixed-disabled': 'space',
|
|
145
|
-
'spec-char-escape': true
|
|
129
|
+
'spec-char-escape': true
|
|
146
130
|
};
|
|
147
131
|
|
|
148
132
|
// CSS validation rules
|
|
@@ -153,7 +137,7 @@ export const CSS_VALIDATION_RULES = {
|
|
|
153
137
|
'declaration-colon-space-after': 'always',
|
|
154
138
|
'declaration-colon-space-before': 'never',
|
|
155
139
|
'block-closing-brace-newline-after': 'always',
|
|
156
|
-
'block-opening-brace-space-before': 'always'
|
|
140
|
+
'block-opening-brace-space-before': 'always'
|
|
157
141
|
};
|
|
158
142
|
|
|
159
143
|
// JavaScript validation rules (ESLint-style)
|
|
@@ -164,7 +148,7 @@ export const JS_VALIDATION_RULES = {
|
|
|
164
148
|
'no-console': 'warn',
|
|
165
149
|
'semi': ['error', 'always'],
|
|
166
150
|
'quotes': ['error', 'single'],
|
|
167
|
-
'indent': ['error', 2]
|
|
151
|
+
'indent': ['error', 2]
|
|
168
152
|
};
|
|
169
153
|
|
|
170
154
|
// Keyboard shortcuts
|
|
@@ -179,7 +163,7 @@ export const KEYBOARD_SHORTCUTS = {
|
|
|
179
163
|
FIND: 'Ctrl+F',
|
|
180
164
|
FIND_MAC: 'Cmd+F',
|
|
181
165
|
REPLACE: 'Ctrl+H',
|
|
182
|
-
REPLACE_MAC: 'Cmd+Option+F'
|
|
166
|
+
REPLACE_MAC: 'Cmd+Option+F'
|
|
183
167
|
};
|
|
184
168
|
|
|
185
169
|
// Feature flags
|
|
@@ -192,7 +176,7 @@ export const FEATURES = {
|
|
|
192
176
|
KEYBOARD_SHORTCUTS: true,
|
|
193
177
|
ERROR_RECOVERY: true,
|
|
194
178
|
PERFORMANCE_MONITORING: true,
|
|
195
|
-
ACCESSIBILITY_FEATURES: true
|
|
179
|
+
ACCESSIBILITY_FEATURES: true
|
|
196
180
|
};
|
|
197
181
|
|
|
198
182
|
// Animation durations (ms)
|
|
@@ -202,7 +186,7 @@ export const ANIMATIONS = {
|
|
|
202
186
|
SLOW: 500,
|
|
203
187
|
PANEL_RESIZE: 200,
|
|
204
188
|
FADE_IN: 300,
|
|
205
|
-
SLIDE_IN: 250
|
|
189
|
+
SLIDE_IN: 250
|
|
206
190
|
};
|
|
207
191
|
|
|
208
192
|
// Z-index layers
|
|
@@ -211,7 +195,7 @@ export const Z_INDEX = {
|
|
|
211
195
|
OVERLAY: 1000,
|
|
212
196
|
MODAL: 1050,
|
|
213
197
|
FULLSCREEN: 9999,
|
|
214
|
-
TOOLTIP: 10000
|
|
198
|
+
TOOLTIP: 10000
|
|
215
199
|
};
|
|
216
200
|
|
|
217
201
|
// Default HTML content template
|
|
@@ -255,12 +239,3 @@ export const DEFAULT_HTML_CONTENT = `<!DOCTYPE html>
|
|
|
255
239
|
</script>
|
|
256
240
|
</body>
|
|
257
241
|
</html>`;
|
|
258
|
-
|
|
259
|
-
// Constants for tag API calls
|
|
260
|
-
export const TAG = 'TAG';
|
|
261
|
-
export const EMBEDDED = 'embedded';
|
|
262
|
-
export const DEFAULT = 'default';
|
|
263
|
-
export const FULL = 'full';
|
|
264
|
-
export const ALL = 'all';
|
|
265
|
-
export const SMS = 'SMS';
|
|
266
|
-
export const EMAIL = 'EMAIL';
|