@capillarytech/creatives-library 8.0.271 → 8.0.273

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 (153) hide show
  1. package/assets/Android.png +0 -0
  2. package/assets/iOS.png +0 -0
  3. package/constants/unified.js +2 -1
  4. package/initialReducer.js +2 -0
  5. package/package.json +1 -1
  6. package/services/api.js +10 -0
  7. package/services/tests/api.test.js +34 -0
  8. package/tests/integration/TemplateCreation/TemplateCreation.integration.test.js +17 -35
  9. package/tests/integration/TemplateCreation/api-response.js +31 -1
  10. package/tests/integration/TemplateCreation/msw-handler.js +2 -0
  11. package/utils/common.js +5 -0
  12. package/utils/commonUtils.js +28 -5
  13. package/utils/imageUrlUpload.js +13 -14
  14. package/utils/tests/commonUtil.test.js +224 -0
  15. package/utils/tests/imageUrlUpload.test.js +298 -0
  16. package/utils/transformTemplateConfig.js +0 -10
  17. package/v2Components/CapDeviceContent/index.js +61 -56
  18. package/v2Components/CapTagList/index.js +6 -1
  19. package/v2Components/CapTagListWithInput/index.js +5 -1
  20. package/v2Components/CapTagListWithInput/messages.js +1 -1
  21. package/v2Components/CapWhatsappCTA/tests/index.test.js +5 -0
  22. package/v2Components/ErrorInfoNote/constants.js +1 -0
  23. package/v2Components/ErrorInfoNote/index.js +402 -72
  24. package/v2Components/ErrorInfoNote/messages.js +32 -6
  25. package/v2Components/ErrorInfoNote/style.scss +278 -6
  26. package/v2Components/FormBuilder/tests/index.test.js +13 -4
  27. package/v2Components/HtmlEditor/HTMLEditor.js +418 -99
  28. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +870 -0
  29. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1882 -133
  30. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +27 -16
  31. package/v2Components/HtmlEditor/_htmlEditor.scss +108 -45
  32. package/v2Components/HtmlEditor/_index.lazy.scss +0 -1
  33. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +23 -102
  34. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +148 -140
  35. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +2 -1
  36. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  37. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +9 -1
  38. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +31 -6
  39. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +22 -0
  40. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +4 -7
  41. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +35 -45
  42. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +1 -3
  43. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  44. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +7 -6
  45. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +7 -10
  46. package/v2Components/HtmlEditor/components/PreviewPane/index.js +22 -43
  47. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  48. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/_validationErrorDisplay.scss +18 -0
  49. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +36 -31
  50. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +46 -34
  51. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +6 -0
  52. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +52 -46
  53. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +277 -0
  54. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +295 -0
  55. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +51 -0
  56. package/v2Components/HtmlEditor/constants.js +45 -20
  57. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +373 -16
  58. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.test.js +351 -16
  59. package/v2Components/HtmlEditor/hooks/useEditorContent.js +5 -2
  60. package/v2Components/HtmlEditor/hooks/useInAppContent.js +88 -146
  61. package/v2Components/HtmlEditor/hooks/useValidation.js +213 -56
  62. package/v2Components/HtmlEditor/index.js +1 -1
  63. package/v2Components/HtmlEditor/messages.js +102 -94
  64. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +214 -45
  65. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +134 -0
  66. package/v2Components/HtmlEditor/utils/contentSanitizer.js +40 -41
  67. package/v2Components/HtmlEditor/utils/htmlValidator.js +71 -72
  68. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +158 -124
  69. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +23 -25
  70. package/v2Components/HtmlEditor/utils/validationAdapter.js +66 -41
  71. package/v2Components/HtmlEditor/utils/validationConstants.js +38 -0
  72. package/v2Components/MobilePushPreviewV2/constants.js +6 -0
  73. package/v2Components/MobilePushPreviewV2/index.js +33 -7
  74. package/v2Components/TemplatePreview/_templatePreview.scss +55 -24
  75. package/v2Components/TemplatePreview/index.js +47 -32
  76. package/v2Components/TemplatePreview/messages.js +4 -0
  77. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +1 -0
  78. package/v2Containers/BeeEditor/index.js +172 -90
  79. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +14 -0
  80. package/v2Containers/BeePopupEditor/constants.js +10 -0
  81. package/v2Containers/BeePopupEditor/index.js +194 -0
  82. package/v2Containers/BeePopupEditor/tests/index.test.js +627 -0
  83. package/v2Containers/CreativesContainer/SlideBoxContent.js +127 -51
  84. package/v2Containers/CreativesContainer/SlideBoxFooter.js +156 -13
  85. package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -1
  86. package/v2Containers/CreativesContainer/constants.js +1 -0
  87. package/v2Containers/CreativesContainer/index.js +251 -47
  88. package/v2Containers/CreativesContainer/messages.js +8 -0
  89. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +11 -2
  90. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +38 -50
  91. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +103 -0
  92. package/v2Containers/Email/actions.js +7 -0
  93. package/v2Containers/Email/constants.js +5 -1
  94. package/v2Containers/Email/index.js +234 -29
  95. package/v2Containers/Email/messages.js +32 -0
  96. package/v2Containers/Email/reducer.js +12 -1
  97. package/v2Containers/Email/sagas.js +61 -7
  98. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -0
  99. package/v2Containers/Email/tests/reducer.test.js +46 -0
  100. package/v2Containers/Email/tests/sagas.test.js +320 -29
  101. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +1246 -0
  102. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +212 -21
  103. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +40 -74
  104. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +2614 -0
  105. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +520 -0
  106. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +2 -67
  107. package/v2Containers/EmailWrapper/constants.js +2 -0
  108. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +627 -79
  109. package/v2Containers/EmailWrapper/index.js +103 -23
  110. package/v2Containers/EmailWrapper/messages.js +65 -1
  111. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +955 -0
  112. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +596 -82
  113. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +376 -0
  114. package/v2Containers/InApp/__tests__/sagas.test.js +363 -0
  115. package/v2Containers/InApp/actions.js +7 -0
  116. package/v2Containers/InApp/constants.js +20 -4
  117. package/v2Containers/InApp/index.js +802 -360
  118. package/v2Containers/InApp/index.scss +4 -3
  119. package/v2Containers/InApp/messages.js +7 -3
  120. package/v2Containers/InApp/reducer.js +21 -3
  121. package/v2Containers/InApp/sagas.js +29 -9
  122. package/v2Containers/InApp/selectors.js +25 -5
  123. package/v2Containers/InApp/tests/index.test.js +154 -50
  124. package/v2Containers/InApp/tests/reducer.test.js +34 -0
  125. package/v2Containers/InApp/tests/sagas.test.js +61 -9
  126. package/v2Containers/InApp/tests/selectors.test.js +612 -0
  127. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +151 -0
  128. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +267 -0
  129. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +23 -0
  130. package/v2Containers/InAppWrapper/constants.js +16 -0
  131. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +473 -0
  132. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +198 -0
  133. package/v2Containers/InAppWrapper/index.js +148 -0
  134. package/v2Containers/InAppWrapper/messages.js +49 -0
  135. package/v2Containers/InappAdvance/index.js +1099 -0
  136. package/v2Containers/InappAdvance/index.scss +10 -0
  137. package/v2Containers/InappAdvance/tests/index.test.js +448 -0
  138. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -0
  139. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -0
  140. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -0
  141. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -0
  142. package/v2Containers/MobilePush/Create/index.js +1 -1
  143. package/v2Containers/MobilePush/Edit/index.js +10 -6
  144. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +12 -0
  145. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -0
  146. package/v2Containers/TagList/index.js +62 -19
  147. package/v2Containers/Templates/_templates.scss +60 -1
  148. package/v2Containers/Templates/index.js +89 -4
  149. package/v2Containers/Templates/messages.js +4 -0
  150. package/v2Containers/TemplatesV2/TemplatesV2.style.js +4 -2
  151. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +34 -0
  152. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +0 -152
  153. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +0 -214
@@ -13,321 +13,329 @@ export default defineMessages({
13
13
  // Main component messages
14
14
  initializing: {
15
15
  id: `${scope}.initializing`,
16
- defaultMessage: 'Initializing HTML Editor...'
16
+ defaultMessage: 'Initializing HTML Editor...',
17
17
  },
18
18
 
19
19
  // Label insertion messages
20
20
  addLabel: {
21
21
  id: `${scope}.addLabel`,
22
- defaultMessage: 'Add label'
22
+ defaultMessage: 'Add label',
23
23
  },
24
24
  labelInserted: {
25
25
  id: `${scope}.labelInserted`,
26
- defaultMessage: 'Label inserted successfully'
26
+ defaultMessage: 'Label inserted successfully',
27
27
  },
28
28
  labelInsertedDescription: {
29
29
  id: `${scope}.labelInsertedDescription`,
30
- defaultMessage: 'The label "{label}" has been inserted at the cursor position'
30
+ defaultMessage: 'The label "{label}" has been inserted at the cursor position',
31
31
  },
32
32
  labelInsertError: {
33
33
  id: `${scope}.labelInsertError`,
34
- defaultMessage: 'Failed to insert label'
34
+ defaultMessage: 'Failed to insert label',
35
35
  },
36
36
  editorNotReady: {
37
37
  id: `${scope}.editorNotReady`,
38
- defaultMessage: 'Editor is not ready. Please try again.'
38
+ defaultMessage: 'Editor is not ready. Please try again.',
39
39
  },
40
40
  editorMethodNotAvailable: {
41
41
  id: `${scope}.editorMethodNotAvailable`,
42
- defaultMessage: 'Editor method not available. Please refresh and try again.'
42
+ defaultMessage: 'Editor method not available. Please refresh and try again.',
43
43
  },
44
44
 
45
45
  // Save messages
46
46
  contentSaved: {
47
47
  id: `${scope}.contentSaved`,
48
- defaultMessage: 'Content saved successfully'
48
+ defaultMessage: 'Content saved successfully',
49
49
  },
50
50
  saveError: {
51
51
  id: `${scope}.saveError`,
52
- defaultMessage: 'Failed to save content'
52
+ defaultMessage: 'Failed to save content',
53
53
  },
54
54
  autoSaveEnabled: {
55
55
  id: `${scope}.autoSaveEnabled`,
56
- defaultMessage: 'Auto-save is enabled'
56
+ defaultMessage: 'Auto-save is enabled',
57
57
  },
58
58
  autoSaveDisabled: {
59
59
  id: `${scope}.autoSaveDisabled`,
60
- defaultMessage: 'Auto-save is disabled'
60
+ defaultMessage: 'Auto-save is disabled',
61
61
  },
62
62
 
63
63
  // Editor toolbar messages
64
64
  htmlEditor: {
65
65
  id: `${scope}.htmlEditor`,
66
- defaultMessage: 'Email content'
66
+ defaultMessage: 'Email content',
67
67
  },
68
68
  desktop: {
69
69
  id: `${scope}.desktop`,
70
- defaultMessage: 'Desktop'
70
+ defaultMessage: 'Desktop',
71
71
  },
72
72
  mobile: {
73
73
  id: `${scope}.mobile`,
74
- defaultMessage: 'Mobile'
74
+ defaultMessage: 'Mobile',
75
75
  },
76
76
  mobileDevice: {
77
77
  id: `${scope}.mobileDevice`,
78
- defaultMessage: 'Mobile Device'
78
+ defaultMessage: 'Mobile Device',
79
79
  },
80
80
  htmlPreview: {
81
81
  id: `${scope}.htmlPreview`,
82
- defaultMessage: 'HTML Preview'
83
- },
84
- startTypingHtml: {
85
- id: `${scope}.startTypingHtml`,
86
- defaultMessage: 'Start typing HTML to see the preview'
87
- },
88
- previewMode: {
89
- id: `${scope}.previewMode`,
90
- defaultMessage: 'Preview Mode'
82
+ defaultMessage: 'HTML Preview',
91
83
  },
92
84
  fullscreen: {
93
85
  id: `${scope}.fullscreen`,
94
- defaultMessage: 'Fullscreen'
86
+ defaultMessage: 'Fullscreen',
95
87
  },
96
88
  enterFullscreen: {
97
89
  id: `${scope}.enterFullscreen`,
98
- defaultMessage: 'Enter Fullscreen'
90
+ defaultMessage: 'Enter Fullscreen',
99
91
  },
100
92
  exitFullscreen: {
101
93
  id: `${scope}.exitFullscreen`,
102
- defaultMessage: 'Exit Fullscreen'
94
+ defaultMessage: 'Exit Fullscreen',
103
95
  },
104
96
  save: {
105
97
  id: `${scope}.save`,
106
- defaultMessage: 'Save'
98
+ defaultMessage: 'Save',
107
99
  },
108
100
 
109
101
  // Editor tabs messages
110
102
  htmlTab: {
111
103
  id: `${scope}.htmlTab`,
112
- defaultMessage: 'HTML'
104
+ defaultMessage: 'HTML',
113
105
  },
114
106
  cssTab: {
115
107
  id: `${scope}.cssTab`,
116
- defaultMessage: 'CSS'
108
+ defaultMessage: 'CSS',
117
109
  },
118
110
  javascriptTab: {
119
111
  id: `${scope}.javascriptTab`,
120
- defaultMessage: 'JavaScript'
112
+ defaultMessage: 'JavaScript',
121
113
  },
122
114
 
123
115
  // Preview messages
124
116
  previewTitle: {
125
117
  id: `${scope}.previewTitle`,
126
- defaultMessage: 'Preview'
118
+ defaultMessage: 'Preview',
127
119
  },
128
120
  previewLoading: {
129
121
  id: `${scope}.previewLoading`,
130
- defaultMessage: 'Loading preview...'
122
+ defaultMessage: 'Loading preview...',
131
123
  },
132
124
  previewError: {
133
125
  id: `${scope}.previewError`,
134
- defaultMessage: 'Preview error'
135
- },
136
- previewEmpty: {
137
- id: `${scope}.previewEmpty`,
138
- defaultMessage: 'Start typing HTML to see the preview'
126
+ defaultMessage: 'Preview error',
139
127
  },
140
128
  refreshPreview: {
141
129
  id: `${scope}.refreshPreview`,
142
- defaultMessage: 'Refresh Preview'
130
+ defaultMessage: 'Refresh Preview',
143
131
  },
144
132
 
145
133
  // Mobile device preview messages
146
134
  android: {
147
135
  id: `${scope}.android`,
148
- defaultMessage: 'Android'
136
+ defaultMessage: 'Android',
149
137
  },
150
138
  ios: {
151
139
  id: `${scope}.ios`,
152
- defaultMessage: 'iOS'
140
+ defaultMessage: 'iOS',
153
141
  },
154
142
  devicePreview: {
155
143
  id: `${scope}.devicePreview`,
156
- defaultMessage: 'Device Preview'
144
+ defaultMessage: 'Device Preview',
157
145
  },
158
146
 
159
147
  // InApp variant messages
160
148
  inAppEditor: {
161
149
  id: `${scope}.inAppEditor`,
162
- defaultMessage: 'In-app content'
150
+ defaultMessage: 'In-app content',
163
151
  },
164
152
  keepContentSameForBoth: {
165
153
  id: `${scope}.keepContentSameForBoth`,
166
- defaultMessage: 'Keep content same for both'
154
+ defaultMessage: 'Keep content same for both',
167
155
  },
168
156
 
169
157
  // Validation messages
170
158
  validationErrors: {
171
159
  id: `${scope}.validationErrors`,
172
- defaultMessage: '{count} validation {count, plural, one {error} other {errors}}'
160
+ defaultMessage: '{count} validation {count, plural, one {error} other {errors}}',
173
161
  },
174
162
  validationWarnings: {
175
163
  id: `${scope}.validationWarnings`,
176
- defaultMessage: '{count} validation {count, plural, one {warning} other {warnings}}'
164
+ defaultMessage: '{count} validation {count, plural, one {warning} other {warnings}}',
177
165
  },
178
166
  noValidationIssues: {
179
167
  id: `${scope}.noValidationIssues`,
180
- defaultMessage: 'No validation issues'
168
+ defaultMessage: 'No validation issues',
181
169
  },
182
170
  showProblems: {
183
171
  id: `${scope}.showProblems`,
184
- defaultMessage: 'Show Problems'
172
+ defaultMessage: 'Show Problems',
185
173
  },
186
174
  hideProblems: {
187
175
  id: `${scope}.hideProblems`,
188
- defaultMessage: 'Hide Problems'
176
+ defaultMessage: 'Hide Problems',
189
177
  },
190
178
 
191
179
  // Error messages
192
180
  securityError: {
193
181
  id: `${scope}.securityError`,
194
- defaultMessage: 'Security Error'
182
+ defaultMessage: 'Security Error',
195
183
  },
196
184
  runtimeError: {
197
185
  id: `${scope}.runtimeError`,
198
- defaultMessage: 'Runtime Error'
186
+ defaultMessage: 'Runtime Error',
199
187
  },
200
188
  renderError: {
201
189
  id: `${scope}.renderError`,
202
- defaultMessage: 'Render Error'
190
+ defaultMessage: 'Render Error',
203
191
  },
204
192
  clearErrors: {
205
193
  id: `${scope}.clearErrors`,
206
- defaultMessage: 'Clear Errors'
194
+ defaultMessage: 'Clear Errors',
207
195
  },
208
196
  copyError: {
209
197
  id: `${scope}.copyError`,
210
- defaultMessage: 'Copy Error Details'
198
+ defaultMessage: 'Copy Error Details',
211
199
  },
212
200
  errorCopied: {
213
201
  id: `${scope}.errorCopied`,
214
- defaultMessage: 'Error details copied to clipboard'
202
+ defaultMessage: 'Error details copied to clipboard',
203
+ },
204
+
205
+ // Placeholder messages
206
+ editorPlaceholderEmail: {
207
+ id: `${scope}.editorPlaceholderEmail`,
208
+ defaultMessage: 'Write your HTML email code here...',
209
+ },
210
+ editorPlaceholderInapp: {
211
+ id: `${scope}.editorPlaceholderInapp`,
212
+ defaultMessage: 'Write your HTML inapp code here...',
215
213
  },
216
214
 
217
215
  // Accessibility messages
218
216
  codeEditor: {
219
217
  id: `${scope}.codeEditor`,
220
- defaultMessage: 'Email Editor'
218
+ defaultMessage: 'Email Editor',
221
219
  },
222
220
  previewPanel: {
223
221
  id: `${scope}.previewPanel`,
224
- defaultMessage: 'Preview Panel'
222
+ defaultMessage: 'Preview Panel',
225
223
  },
226
224
  resizeHandle: {
227
225
  id: `${scope}.resizeHandle`,
228
- defaultMessage: 'Drag to resize panels'
226
+ defaultMessage: 'Drag to resize panels',
229
227
  },
230
228
  splitPanels: {
231
229
  id: `${scope}.splitPanels`,
232
- defaultMessage: 'Split panels - code editor and preview'
230
+ defaultMessage: 'Split panels - code editor and preview',
233
231
  },
234
232
 
235
233
  // Performance messages
236
234
  optimizing: {
237
235
  id: `${scope}.optimizing`,
238
- defaultMessage: 'Optimizing performance...'
236
+ defaultMessage: 'Optimizing performance...',
239
237
  },
240
238
  performanceWarning: {
241
239
  id: `${scope}.performanceWarning`,
242
- defaultMessage: 'Large content detected. Performance may be affected.'
240
+ defaultMessage: 'Large content detected. Performance may be affected.',
243
241
  },
244
242
 
245
243
  // Feature messages
246
244
  autoSave: {
247
245
  id: `${scope}.autoSave`,
248
- defaultMessage: 'Auto-save'
246
+ defaultMessage: 'Auto-save',
249
247
  },
250
248
  lastSaved: {
251
249
  id: `${scope}.lastSaved`,
252
- defaultMessage: 'Last saved: {time}'
250
+ defaultMessage: 'Last saved: {time}',
253
251
  },
254
252
  unsavedChanges: {
255
253
  id: `${scope}.unsavedChanges`,
256
- defaultMessage: 'You have unsaved changes'
254
+ defaultMessage: 'You have unsaved changes',
257
255
  },
258
256
 
259
257
  // Content Sanitizer messages
260
258
  sanitizer: {
261
259
  invalidInput: {
262
260
  id: `${scope}.sanitizer.invalidInput`,
263
- defaultMessage: 'Invalid input: HTML content must be a string'
261
+ defaultMessage: 'Invalid input: HTML content must be a string',
264
262
  },
265
263
  invalidInputNonEmpty: {
266
264
  id: `${scope}.sanitizer.invalidInputNonEmpty`,
267
- defaultMessage: 'Invalid input: HTML content must be a non-empty string'
265
+ defaultMessage: 'Invalid input: HTML content must be a non-empty string',
268
266
  },
269
267
  sanitizationFailed: {
270
268
  id: `${scope}.sanitizer.sanitizationFailed`,
271
- defaultMessage: 'Sanitization failed: {error}'
269
+ defaultMessage: 'Sanitization failed: {error}',
272
270
  },
273
271
  dangerousProtocolDetected: {
274
272
  id: `${scope}.sanitizer.dangerousProtocolDetected`,
275
- defaultMessage: 'Dangerous protocol detected'
273
+ defaultMessage: 'Dangerous protocol detected',
276
274
  },
277
275
 
278
276
  // Email compatibility warnings
279
277
  emailMultimediaNotSupported: {
280
278
  id: `${scope}.sanitizer.emailMultimediaNotSupported`,
281
- defaultMessage: 'Video/audio/canvas elements may not be supported in email clients'
279
+ defaultMessage: 'Video/audio/canvas elements may not be supported in email clients',
282
280
  },
283
281
  emailPositioningNotSupported: {
284
282
  id: `${scope}.sanitizer.emailPositioningNotSupported`,
285
- defaultMessage: 'Fixed/sticky positioning may not work in email clients'
283
+ defaultMessage: 'Fixed/sticky positioning may not work in email clients',
286
284
  },
287
285
  emailModernCssLimited: {
288
286
  id: `${scope}.sanitizer.emailModernCssLimited`,
289
- defaultMessage: 'CSS Grid and Flexbox have limited support in email clients'
287
+ defaultMessage: 'CSS Grid and Flexbox have limited support in email clients',
290
288
  },
291
289
  emailViewportUnitsNotSupported: {
292
290
  id: `${scope}.sanitizer.emailViewportUnitsNotSupported`,
293
- defaultMessage: 'Viewport units and rem may not be supported in all email clients'
291
+ defaultMessage: 'Viewport units and rem may not be supported in all email clients',
294
292
  },
295
293
 
296
294
  // Mobile optimization warnings
297
295
  mobileTablesNotFriendly: {
298
296
  id: `${scope}.sanitizer.mobileTablesNotFriendly`,
299
- defaultMessage: 'Tables may not be mobile-friendly - consider using flexbox or grid'
297
+ defaultMessage: 'Tables may not be mobile-friendly - consider using flexbox or grid',
300
298
  },
301
299
  mobileRelativeFontSizes: {
302
300
  id: `${scope}.sanitizer.mobileRelativeFontSizes`,
303
- defaultMessage: 'Consider using relative font sizes (em, rem, %) for better mobile scaling'
301
+ defaultMessage: 'Consider using relative font sizes (em, rem, %) for better mobile scaling',
304
302
  },
305
303
  mobileFixedWidthsProblematic: {
306
304
  id: `${scope}.sanitizer.mobileFixedWidthsProblematic`,
307
- defaultMessage: 'Large fixed widths may not work well on mobile devices'
305
+ defaultMessage: 'Large fixed widths may not work well on mobile devices',
308
306
  },
309
307
  mobileRelativeUnits: {
310
308
  id: `${scope}.sanitizer.mobileRelativeUnits`,
311
- defaultMessage: 'Consider using relative units (rem, em, %) for better mobile responsiveness'
309
+ defaultMessage: 'Consider using relative units (rem, em, %) for better mobile responsiveness',
312
310
  },
313
311
 
314
312
  // Production recommendations
315
313
  productionValidHtml: {
316
314
  id: `${scope}.sanitizer.productionValidHtml`,
317
- defaultMessage: 'Provide valid HTML content before deploying to production'
315
+ defaultMessage: 'Provide valid HTML content before deploying to production',
318
316
  },
319
317
  productionSanitized: {
320
318
  id: `${scope}.sanitizer.productionSanitized`,
321
- defaultMessage: 'Content has been sanitized for security - review changes before deploying'
319
+ defaultMessage: 'Content has been sanitized for security - review changes before deploying',
322
320
  },
323
321
  productionInlineCss: {
324
322
  id: `${scope}.sanitizer.productionInlineCss`,
325
- defaultMessage: 'Consider inlining CSS for better email client compatibility'
323
+ defaultMessage: 'Consider inlining CSS for better email client compatibility',
326
324
  },
327
325
  productionLargeContent: {
328
326
  id: `${scope}.sanitizer.productionLargeContent`,
329
- defaultMessage: 'Content is large ({size} characters) - consider optimizing for mobile performance'
330
- }
327
+ defaultMessage: 'Content is large ({size} characters) - consider optimizing for mobile performance',
328
+ },
329
+ },
330
+
331
+ htmlEditorTooltip: {
332
+ id: `${scope}.htmlEditorTooltip`,
333
+ defaultMessage: 'This editor supports standard HTML for emails. Avoid CSS frameworks, external stylesheets, and scripts. {docLink}',
334
+ },
335
+
336
+ viewDocumentation: {
337
+ id: `${scope}.viewDocumentation`,
338
+ defaultMessage: 'View documentation',
331
339
  },
332
340
 
333
341
  // HTML Validator messages
@@ -335,55 +343,55 @@ export default defineMessages({
335
343
  // General validation messages
336
344
  validationFailed: {
337
345
  id: `${scope}.validator.validationFailed`,
338
- defaultMessage: 'Validation failed: {error}'
346
+ defaultMessage: 'Validation failed: {error}',
339
347
  },
340
348
  liquidValidationFailed: {
341
349
  id: `${scope}.validator.liquidValidationFailed`,
342
- defaultMessage: 'Liquid validation failed'
350
+ defaultMessage: 'Liquid validation failed',
343
351
  },
344
352
 
345
353
  // Security validation messages
346
354
  unsafeProtocolDetected: {
347
355
  id: `${scope}.validator.unsafeProtocolDetected`,
348
- defaultMessage: 'Potentially unsafe protocol detected: {protocol}'
356
+ defaultMessage: 'Potentially unsafe protocol detected: {protocol}',
349
357
  },
350
358
  scriptTagsDetected: {
351
359
  id: `${scope}.validator.scriptTagsDetected`,
352
- defaultMessage: 'Script tags detected - may be filtered in production'
360
+ defaultMessage: 'Script tags detected - may be filtered in production',
353
361
  },
354
362
 
355
363
  // Email-specific validation messages
356
364
  outlookIncompatible: {
357
365
  id: `${scope}.validator.outlookIncompatible`,
358
- defaultMessage: 'Element may not be supported in Outlook: {element}'
366
+ defaultMessage: 'Element may not be supported in Outlook: {element}',
359
367
  },
360
368
  emailCssUnsupported: {
361
369
  id: `${scope}.validator.emailCssUnsupported`,
362
- defaultMessage: 'CSS feature may not be supported in email clients'
370
+ defaultMessage: 'CSS feature may not be supported in email clients',
363
371
  },
364
372
 
365
373
  // Mobile/InApp validation messages
366
374
  mobileIncompatible: {
367
375
  id: `${scope}.validator.mobileIncompatible`,
368
- defaultMessage: 'Element may not be supported on mobile: {element}'
376
+ defaultMessage: 'Element may not be supported on mobile: {element}',
369
377
  },
370
378
  largeImageDetected: {
371
379
  id: `${scope}.validator.largeImageDetected`,
372
- defaultMessage: 'Large image dimensions detected - consider mobile optimization'
380
+ defaultMessage: 'Large image dimensions detected - consider mobile optimization',
373
381
  },
374
382
 
375
383
  // CSS validation messages
376
384
  unclosedCssRule: {
377
385
  id: `${scope}.validator.unclosedCssRule`,
378
- defaultMessage: 'Unclosed CSS rule detected'
386
+ defaultMessage: 'Unclosed CSS rule detected',
379
387
  },
380
388
  emptyCssRule: {
381
389
  id: `${scope}.validator.emptyCssRule`,
382
- defaultMessage: 'Empty CSS rule detected'
390
+ defaultMessage: 'Empty CSS rule detected',
383
391
  },
384
392
  cssValidationFailed: {
385
393
  id: `${scope}.validator.cssValidationFailed`,
386
- defaultMessage: 'CSS validation failed: {error}'
387
- }
388
- }
394
+ defaultMessage: 'CSS validation failed: {error}',
395
+ },
396
+ },
389
397
  });