@capillarytech/creatives-library 8.0.330-alpha.0 → 8.0.330-alpha.1

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 (75) hide show
  1. package/package.json +1 -1
  2. package/utils/tests/tagValidations.test.js +20 -0
  3. package/v2Components/CapActionButton/constants.js +7 -0
  4. package/v2Components/CapActionButton/index.js +167 -109
  5. package/v2Components/CapActionButton/index.scss +157 -6
  6. package/v2Components/CapActionButton/messages.js +19 -3
  7. package/v2Components/CapActionButton/tests/index.test.js +41 -17
  8. package/v2Components/CapTagList/index.js +28 -23
  9. package/v2Components/CapTagList/style.scss +29 -0
  10. package/v2Components/CapTagListWithInput/__tests__/CapTagListWithInput.test.js +63 -0
  11. package/v2Components/CapTagListWithInput/index.js +4 -0
  12. package/v2Components/CapWhatsappCTA/index.js +2 -0
  13. package/v2Components/CommonTestAndPreview/ExistingCustomerModal.js +1 -0
  14. package/v2Components/CommonTestAndPreview/UnifiedPreview/RcsPreviewContent.js +160 -15
  15. package/v2Components/CommonTestAndPreview/UnifiedPreview/RcsPreviewContent.js.rej +18 -0
  16. package/v2Components/CommonTestAndPreview/UnifiedPreview/_unifiedPreview.scss +323 -77
  17. package/v2Components/CommonTestAndPreview/messages.js +8 -0
  18. package/v2Components/CommonTestAndPreview/reducer.js +3 -1
  19. package/v2Components/CommonTestAndPreview/sagas.js +2 -1
  20. package/v2Components/CommonTestAndPreview/tests/PreviewSection.test.js +8 -1
  21. package/v2Components/CommonTestAndPreview/tests/UnifiedPreview/RcsPreviewContent.test.js +281 -283
  22. package/v2Components/FormBuilder/index.js +1 -0
  23. package/v2Components/HtmlEditor/HTMLEditor.js +6 -1
  24. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +1 -0
  25. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +927 -2
  26. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +3 -0
  27. package/v2Components/TemplatePreview/_templatePreview.scss +33 -23
  28. package/v2Components/TemplatePreview/constants.js +2 -0
  29. package/v2Components/TemplatePreview/index.js +143 -28
  30. package/v2Components/TemplatePreview/tests/index.test.js +142 -0
  31. package/v2Components/mockdata.js +1 -0
  32. package/v2Containers/BeeEditor/index.js +19 -1
  33. package/v2Containers/CreativesContainer/SlideBoxContent.js +28 -1
  34. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +5 -0
  35. package/v2Containers/Email/index.js +78 -39
  36. package/v2Containers/Email/reducer.js +2 -2
  37. package/v2Containers/Email/sagas.js +3 -1
  38. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -2
  39. package/v2Containers/Email/tests/sagas.test.js +230 -0
  40. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +6 -1
  41. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +3 -0
  42. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +20 -2
  43. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +16 -1
  44. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +3 -1
  45. package/v2Containers/EmailWrapper/index.js +4 -0
  46. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +1 -0
  47. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +9 -0
  48. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +1 -0
  49. package/v2Containers/MobilePush/Create/index.js +2 -0
  50. package/v2Containers/MobilePush/Edit/index.js +2 -0
  51. package/v2Containers/MobilepushWrapper/index.js +3 -1
  52. package/v2Containers/Rcs/constants.js +79 -5
  53. package/v2Containers/Rcs/index.js +1374 -73
  54. package/v2Containers/Rcs/index.js.rej +1336 -0
  55. package/v2Containers/Rcs/index.scss +191 -0
  56. package/v2Containers/Rcs/index.scss.rej +74 -0
  57. package/v2Containers/Rcs/messages.js +26 -1
  58. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +69173 -118166
  59. package/v2Containers/Rcs/tests/__snapshots__/utils.test.js.snap.rej +128 -0
  60. package/v2Containers/Rcs/tests/index.test.js +132 -94
  61. package/v2Containers/Rcs/tests/utils.test.js +220 -38
  62. package/v2Containers/Rcs/utils.js +77 -1
  63. package/v2Containers/Sms/Edit/index.js +2 -0
  64. package/v2Containers/SmsWrapper/index.js +2 -0
  65. package/v2Containers/TagList/index.js +73 -20
  66. package/v2Containers/TagList/messages.js +4 -0
  67. package/v2Containers/TagList/tests/TagList.test.js +124 -20
  68. package/v2Containers/TagList/tests/mockdata.js +17 -0
  69. package/v2Containers/Templates/_templates.scss +99 -0
  70. package/v2Containers/Templates/index.js +29 -14
  71. package/v2Containers/Viber/index.js +3 -0
  72. package/v2Containers/WebPush/Create/hooks/useTagManagement.js +0 -2
  73. package/v2Containers/WebPush/Create/index.js +10 -2
  74. package/v2Containers/Whatsapp/index.js +5 -0
  75. package/v2Containers/Zalo/index.js +2 -0
@@ -141,9 +141,11 @@
141
141
  overflow: hidden;
142
142
  &.title{
143
143
  -webkit-line-clamp: 1;
144
+ line-clamp: 1;
144
145
  }
145
146
  &.desc{
146
147
  -webkit-line-clamp: 5;
148
+ line-clamp: 5;
147
149
  }
148
150
  &.rcs-button-text{
149
151
  padding-top: 13px;
@@ -155,11 +157,66 @@
155
157
  width: 220px;
156
158
  height: 103px;
157
159
  }
160
+
161
+ // Templates listing preview (RCS): carousel should show a "peek" of next card like WhatsApp listing.
162
+ &.rcs-template-listing-preview {
163
+ &.is-carousel {
164
+ .rcs-listing-carousel-scroll {
165
+ overflow-x: auto;
166
+ display: flex;
167
+ padding-top: $CAP_SPACE_06;
168
+ padding-right: $CAP_SPACE_06;
169
+ white-space: nowrap;
170
+ scrollbar-width: none;
171
+ &::-webkit-scrollbar {
172
+ display: none;
173
+ }
174
+ // Listing should show a peek (no horizontal scroll interaction needed)
175
+ overflow: hidden;
176
+ }
177
+
178
+ .rcs-listing-carousel-card {
179
+ padding: $CAP_SPACE_04 0 $CAP_SPACE_08;
180
+ border-radius: $CAP_SPACE_06;
181
+ background-color: $CAP_WHITE;
182
+ width: 80%;
183
+ flex-shrink: 0;
184
+ margin-right: $CAP_SPACE_04;
185
+ white-space: normal;
186
+ text-align: left;
187
+ }
188
+
189
+ .rcs-listing-carousel-img {
190
+ width: 100%;
191
+ height: 6.4375rem; // match rcs-listing-image height (103px)
192
+ object-fit: cover;
193
+ display: block;
194
+ margin-bottom: $CAP_SPACE_08;
195
+ }
196
+
197
+ .rcs-listing-carousel-title,
198
+ .rcs-listing-carousel-desc {
199
+ display: block;
200
+ padding: 0 $CAP_SPACE_12;
201
+ }
202
+ .rcs-listing-carousel-desc {
203
+ margin-top: $CAP_SPACE_04;
204
+ }
205
+ }
206
+ }
158
207
  .fallback-sms-length {
159
208
  margin-top: 13px;
160
209
  float: right;
161
210
  }
211
+ .rcs-character-count {
212
+ color: $FONT_COLOR_03;
213
+ }
162
214
 
215
+ .rcs-carousel-character-count-row {
216
+ display: flex;
217
+ justify-content: flex-end;
218
+ margin-top: $CAP_SPACE_08;
219
+ }
163
220
  .rcs-fallback-len-error{
164
221
  margin-top: 8px;
165
222
  }
@@ -193,6 +250,140 @@
193
250
  #rcs-dimension-select{
194
251
  width: 100%;
195
252
  }
253
+
254
+ .rcs-carousel-section {
255
+ margin-top: $CAP_SPACE_12;
256
+ }
257
+
258
+ .rcs-carousel-dimension-section {
259
+ margin-top: 1.25rem;
260
+ }
261
+
262
+ .rcs-carousel-selected-dimension {
263
+ display: block;
264
+ margin-top: 8px;
265
+ color: $FONT_COLOR_03;
266
+ }
267
+
268
+ .rcs-carousel-dimension-label {
269
+ display: inline-block;
270
+ margin-bottom: 6px;
271
+ }
272
+
273
+ #rcs-carousel-height-select,
274
+ #rcs-carousel-width-select {
275
+ width: 100%;
276
+ }
277
+
278
+ .rcs-carousel-tab {
279
+ margin-top: 12px;
280
+ }
281
+
282
+ .rcs-carousel-card {
283
+ margin-top: 12px;
284
+
285
+ // Match carousel card header: title left, icon-only delete right (Figma / product reference).
286
+ &.cap-card-v2.ant-card {
287
+ .ant-card-head {
288
+ min-height: 48px;
289
+ padding: 0 $CAP_SPACE_16;
290
+ border-bottom: 1px solid #e8e8e8;
291
+ }
292
+
293
+ .ant-card-head-title {
294
+ padding: $CAP_SPACE_12 0;
295
+ font-weight: 600;
296
+ color: $CAP_G01;
297
+ }
298
+
299
+ .ant-card-extra {
300
+ padding: $CAP_SPACE_08 0;
301
+ }
302
+ }
303
+
304
+ .rcs-carousel-card-delete.ant-btn.cap-button-v2 {
305
+ display: inline-flex;
306
+ align-items: center;
307
+ justify-content: center;
308
+ min-width: auto;
309
+ width: 2rem;
310
+ height: 2rem;
311
+ padding: 0;
312
+ border: none;
313
+ box-shadow: none;
314
+ color: $CAP_G01;
315
+
316
+ &:not(:disabled):hover {
317
+ // Match $CAP_SECONDARY base from cap-ui-library (avoid map-get — node-sass can mis-resolve imported maps).
318
+ color: #2466ea;
319
+ background-color: rgba(0, 0, 0, 0.04);
320
+ }
321
+
322
+ &:disabled {
323
+ color: rgba(0, 0, 0, 0.25);
324
+ background: transparent;
325
+ }
326
+ }
327
+
328
+ .rcs-carousel-delete-tooltip-wrap.button-disabled-tooltip-wrapper {
329
+ display: inline-flex;
330
+ align-items: center;
331
+ cursor: not-allowed;
332
+ }
333
+ }
334
+
335
+ .rcs-carousel-card-row {
336
+ margin-bottom: 12px;
337
+ }
338
+
339
+ .rcs-carousel-media-selection {
340
+ margin-top: 0.75rem;
341
+ margin-bottom: 0.75rem;
342
+ align-items: center;
343
+ }
344
+
345
+ // Carousel upload previews: keep media preview compact (CapImageUpload uses height=400 by default)
346
+ .rcs-carousel-media-upload {
347
+ padding-top: $CAP_SPACE_20;
348
+ .image-container {
349
+ background-image: none;
350
+ border: 0;
351
+ width: 100%;
352
+ max-width: 560px;
353
+ }
354
+
355
+ .image-container img {
356
+ width: 100%;
357
+ height: auto !important;
358
+ max-height: 240px;
359
+ object-fit: contain;
360
+ display: block;
361
+ }
362
+ }
363
+
364
+ .rcs-carousel-card-divider {
365
+ margin: $CAP_SPACE_24 0;
366
+ }
367
+
368
+ .rcs-content-section-divider {
369
+ margin: $CAP_SPACE_28 0;
370
+ }
371
+
372
+ .rcs-edit-template-message-static-textarea {
373
+ background: #fafafa;
374
+ color: #888;
375
+
376
+ // Ensure styles apply to underlying textarea/input for CapInput TextArea.
377
+ textarea,
378
+ .ant-input {
379
+ background: #fafafa;
380
+ color: #888;
381
+ }
382
+ }
383
+
384
+ .add-carousel-content-button {
385
+ padding: 0 $CAP_SPACE_08;
386
+ }
196
387
  }
197
388
  .rcs-fallback-preview > .cap-slide-box-v2-container.size-r{
198
389
  min-width: 430px;
@@ -0,0 +1,74 @@
1
+ diff a/app/v2Containers/Rcs/index.scss b/app/v2Containers/Rcs/index.scss (rejected hunks)
2
+ @@ -5,109 +5,54 @@
3
+ position: fixed;
4
+ bottom: 0;
5
+ width: 100%;
6
+ + margin-left: -32px;
7
+ padding: $CAP_SPACE_32 $CAP_SPACE_24;
8
+ + margin-top: 40px;
9
+ z-index: 1;
10
+ .ant-btn {
11
+ margin-right: $CAP_SPACE_16;
12
+ }
13
+ -
14
+ .rcs-test-preview-btn {
15
+ margin-left: $CAP_SPACE_08;
16
+ }
17
+ }
18
+
19
+ .cap-rcs-creatives {
20
+ -
21
+ -
22
+ -
23
+ -
24
+ + .template-status-container {
25
+ + width: 100%;
26
+ + display: flex;
27
+ + flex-direction: column;
28
+ + align-items: flex-start;
29
+ + margin-bottom: 1.25rem; // match spacing used across label sections (eg title/message labels)
30
+
31
+ + .ant-alert {
32
+ + width: 100%;
33
+ + margin-top: $CAP_SPACE_08; // match label -> field spacing like other sections
34
+ }
35
+ }
36
+
37
+ + .rcs-scroll-div {
38
+ + margin-bottom: 150px;
39
+ }
40
+ + // Match WhatsApp visual spacing between editor column and preview column
41
+ .rcs-preview-container {
42
+ + padding-left: $CAP_SPACE_24;
43
+ + display: flex;
44
+ + justify-content: center;
45
+ }
46
+ .rcs-optional-label {
47
+ + margin-left: 8px;
48
+ color: $FONT_COLOR_03;
49
+ font-weight: normal;
50
+ }
51
+ .rcs_text_area_wrapper {
52
+ position: relative;
53
+ }
54
+ .rcs-button{
55
+ display: inline-grid;
56
+ }
57
+ -
58
+ -
59
+ -
60
+ -
61
+ + .rcs-button-label{
62
+ + margin-bottom: 17px;
63
+ }
64
+ .disabled-button{
65
+ opacity: 0.5;
66
+ @@ -202,12 +288,6 @@
67
+ width: 430px;
68
+ }
69
+
70
+ -
71
+ -
72
+ .rcs-fallback-preview {
73
+ &__header {
74
+ color: $CAP_G01;
@@ -6,6 +6,14 @@ export default defineMessages({
6
6
  id: `${prefix}.mediaLabel`,
7
7
  defaultMessage: 'Media',
8
8
  },
9
+ mediaTypeLabel: {
10
+ id: `${prefix}.mediaTypeLabel`,
11
+ defaultMessage: 'Media type',
12
+ },
13
+ carouselMediaVideoOption: {
14
+ id: `${prefix}.carouselMediaVideoOption`,
15
+ defaultMessage: 'Video',
16
+ },
9
17
  approvedStatusMsg: {
10
18
  id: `${prefix}.approvedStatusMsg`,
11
19
  defaultMessage: 'This template has been approved',
@@ -39,6 +47,10 @@ export default defineMessages({
39
47
  id: `${prefix}.btnLabel`,
40
48
  defaultMessage: 'Buttons',
41
49
  },
50
+ carouselMediaVideoOption:{
51
+ id: `${prefix}.carouselMediaVideoOption`,
52
+ defaultMessage: 'Video',
53
+ },
42
54
  btnTypeNone: {
43
55
  id: `${prefix}.btnTypeNone`,
44
56
  defaultMessage: 'None',
@@ -194,6 +206,10 @@ export default defineMessages({
194
206
  id: `${prefix}.disabledCarouselTooltip`,
195
207
  defaultMessage: 'Not yet enabled. Coming soon!',
196
208
  },
209
+ rcsCarouselMinCardDeleteTooltip: {
210
+ id: `${prefix}.rcsCarouselMinCardDeleteTooltip`,
211
+ defaultMessage: 'At least 1 card needs to be added in the carousel template',
212
+ },
197
213
  templateNamePlaceholder: {
198
214
  id: `${prefix}.templateNamePlaceholder`,
199
215
  defaultMessage: 'Enter template name',
@@ -497,4 +513,13 @@ export default defineMessages({
497
513
  id: `${prefix}.rcsTestPreviewDisabledTooltip`,
498
514
  defaultMessage: 'Preview and test is only available after the template is approved.',
499
515
  },
500
- });
516
+ reUpload: {
517
+ id: `${prefix}.reUpload`,
518
+ defaultMessage: 'Reupload',
519
+ },
520
+ /** Carousel video card thumbnail size label (see RCS_CAROUSEL_VIDEO_THUMBNAIL_DIMENSIONS). */
521
+ rcsCarouselVideoThumbnailLabel: {
522
+ id: `${prefix}.rcsCarouselVideoThumbnailLabel`,
523
+ defaultMessage: 'Thumbnail ({width} × {height})',
524
+ },
525
+ });