@capillarytech/creatives-library 9.0.15-alpha.1 → 9.0.16

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 (132) hide show
  1. package/constants/unified.js +0 -29
  2. package/global-styles.js +1 -1
  3. package/package.json +1 -1
  4. package/services/tests/api.test.js +20 -35
  5. package/utils/commonUtils.js +1 -19
  6. package/v2Components/CapActionButton/constants.js +0 -7
  7. package/v2Components/CapActionButton/index.js +109 -168
  8. package/v2Components/CapActionButton/index.scss +5 -156
  9. package/v2Components/CapActionButton/messages.js +3 -19
  10. package/v2Components/CapActionButton/tests/index.test.js +18 -42
  11. package/v2Components/CapImageUpload/index.js +2 -2
  12. package/v2Components/CapTagList/index.js +0 -10
  13. package/v2Components/CommonTestAndPreview/CustomValuesEditor.js +48 -70
  14. package/v2Components/CommonTestAndPreview/DeliverySettings/DeliverySettings.scss +2 -8
  15. package/v2Components/CommonTestAndPreview/DeliverySettings/ModifyDeliverySettings.js +21 -214
  16. package/v2Components/CommonTestAndPreview/DeliverySettings/constants.js +0 -16
  17. package/v2Components/CommonTestAndPreview/DeliverySettings/index.js +9 -83
  18. package/v2Components/CommonTestAndPreview/DeliverySettings/messages.js +0 -30
  19. package/v2Components/CommonTestAndPreview/DeliverySettings/utils/parseSenderDetailsResponse.js +11 -60
  20. package/v2Components/CommonTestAndPreview/SendTestMessage.js +5 -10
  21. package/v2Components/CommonTestAndPreview/UnifiedPreview/RcsPreviewContent.js +23 -201
  22. package/v2Components/CommonTestAndPreview/UnifiedPreview/_unifiedPreview.scss +76 -355
  23. package/v2Components/CommonTestAndPreview/UnifiedPreview/index.js +8 -155
  24. package/v2Components/CommonTestAndPreview/_commonTestAndPreview.scss +0 -11
  25. package/v2Components/CommonTestAndPreview/constants.js +2 -38
  26. package/v2Components/CommonTestAndPreview/index.js +222 -761
  27. package/v2Components/CommonTestAndPreview/messages.js +3 -45
  28. package/v2Components/CommonTestAndPreview/sagas.js +6 -25
  29. package/v2Components/CommonTestAndPreview/tests/CommonTestAndPreview.addTestCustomer.test.js +0 -1
  30. package/v2Components/CommonTestAndPreview/tests/CustomValuesEditor.test.js +267 -284
  31. package/v2Components/CommonTestAndPreview/tests/DeliverySettings/ModifyDeliverySettings.test.js +65 -231
  32. package/v2Components/CommonTestAndPreview/tests/DeliverySettings/index.test.js +5 -118
  33. package/v2Components/CommonTestAndPreview/tests/DeliverySettings/utils/parseSenderDetailsResponse.test.js +0 -341
  34. package/v2Components/CommonTestAndPreview/tests/PreviewSection.test.js +1 -8
  35. package/v2Components/CommonTestAndPreview/tests/SendTestMessage.test.js +13 -34
  36. package/v2Components/CommonTestAndPreview/tests/UnifiedPreview/RcsPreviewContent.test.js +283 -281
  37. package/v2Components/CommonTestAndPreview/tests/UnifiedPreview/index.test.js +1 -199
  38. package/v2Components/CommonTestAndPreview/tests/index.test.js +4 -133
  39. package/v2Components/CommonTestAndPreview/tests/sagas.test.js +24 -31
  40. package/v2Components/TemplatePreview/_templatePreview.scss +22 -41
  41. package/v2Components/TemplatePreview/index.js +31 -143
  42. package/v2Components/TemplatePreview/tests/index.test.js +0 -142
  43. package/v2Components/TestAndPreviewSlidebox/CustomValuesEditor.js +6 -6
  44. package/v2Components/TestAndPreviewSlidebox/index.js +1 -13
  45. package/v2Components/TestAndPreviewSlidebox/sagas.js +4 -11
  46. package/v2Components/TestAndPreviewSlidebox/tests/saga.test.js +1 -3
  47. package/v2Containers/CommunicationFlow/Tests/CommunicationFlow.test.js +1 -4
  48. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/Tests/DeliverySettingsSection.test.js +0 -4
  49. package/v2Containers/CommunicationFlow/steps/DeliverySettingsStep/Tests/SenderDetails.test.js +20 -20
  50. package/v2Containers/CreativesContainer/SlideBoxContent.js +7 -36
  51. package/v2Containers/CreativesContainer/SlideBoxFooter.js +5 -14
  52. package/v2Containers/CreativesContainer/SlideBoxHeader.js +5 -36
  53. package/v2Containers/CreativesContainer/constants.js +0 -11
  54. package/v2Containers/CreativesContainer/index.js +104 -323
  55. package/v2Containers/CreativesContainer/index.scss +1 -83
  56. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +34 -79
  57. package/v2Containers/CreativesContainer/tests/SlideBoxHeader.test.js +16 -79
  58. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +0 -8
  59. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxHeader.test.js.snap +90 -333
  60. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +15 -20
  61. package/v2Containers/CreativesContainer/tests/index.test.js +9 -71
  62. package/v2Containers/Email/index.js +5 -2
  63. package/v2Containers/MobilePush/Create/test/saga.test.js +2 -2
  64. package/v2Containers/Rcs/constants.js +11 -131
  65. package/v2Containers/Rcs/index.js +810 -2605
  66. package/v2Containers/Rcs/index.scss +8 -289
  67. package/v2Containers/Rcs/messages.js +3 -34
  68. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +38537 -73535
  69. package/v2Containers/Rcs/tests/__snapshots__/utils.test.js.snap +8 -0
  70. package/v2Containers/Rcs/tests/index.test.js +36 -147
  71. package/v2Containers/Rcs/tests/mockData.js +0 -38
  72. package/v2Containers/Rcs/tests/utils.test.js +30 -646
  73. package/v2Containers/Rcs/utils.js +11 -478
  74. package/v2Containers/Sms/Create/index.js +48 -115
  75. package/v2Containers/SmsTrai/Create/index.js +4 -9
  76. package/v2Containers/SmsTrai/Edit/constants.js +0 -2
  77. package/v2Containers/SmsTrai/Edit/index.js +169 -678
  78. package/v2Containers/SmsTrai/Edit/messages.js +4 -14
  79. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +2854 -5455
  80. package/v2Containers/SmsWrapper/index.js +8 -37
  81. package/v2Containers/TagList/index.js +0 -6
  82. package/v2Containers/Templates/_templates.scss +12 -171
  83. package/v2Containers/Templates/actions.js +0 -11
  84. package/v2Containers/Templates/constants.js +0 -2
  85. package/v2Containers/Templates/index.js +55 -125
  86. package/v2Containers/Templates/sagas.js +13 -57
  87. package/v2Containers/Templates/tests/__snapshots__/index.test.js.snap +1015 -1060
  88. package/v2Containers/Templates/tests/sagas.test.js +16 -199
  89. package/v2Containers/TemplatesV2/TemplatesV2.style.js +1 -72
  90. package/v2Containers/TemplatesV2/index.js +23 -86
  91. package/v2Containers/WeChat/MapTemplates/test/saga.test.js +9 -9
  92. package/v2Containers/Whatsapp/index.js +20 -3
  93. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +34 -578
  94. package/utils/rcsPayloadUtils.js +0 -92
  95. package/utils/templateVarUtils.js +0 -201
  96. package/utils/tests/rcsPayloadUtils.test.js +0 -226
  97. package/utils/tests/templateVarUtils.test.js +0 -204
  98. package/v2Components/CommonTestAndPreview/previewApiUtils.js +0 -59
  99. package/v2Components/CommonTestAndPreview/tests/previewApiUtils.test.js +0 -67
  100. package/v2Components/CommonTestAndPreview/utils.js +0 -84
  101. package/v2Components/SmsFallback/SmsFallbackLocalSelector.js +0 -91
  102. package/v2Components/SmsFallback/constants.js +0 -94
  103. package/v2Components/SmsFallback/index.js +0 -958
  104. package/v2Components/SmsFallback/index.scss +0 -266
  105. package/v2Components/SmsFallback/messages.js +0 -78
  106. package/v2Components/SmsFallback/smsFallbackUtils.js +0 -120
  107. package/v2Components/SmsFallback/tests/SmsFallbackLocalSelector.test.js +0 -50
  108. package/v2Components/SmsFallback/tests/rcsSmsFallback.acceptance.test.js +0 -147
  109. package/v2Components/SmsFallback/tests/smsFallbackHandlers.test.js +0 -304
  110. package/v2Components/SmsFallback/tests/smsFallbackUi.test.js +0 -208
  111. package/v2Components/SmsFallback/tests/smsFallbackUtils.test.js +0 -309
  112. package/v2Components/SmsFallback/tests/useLocalTemplateList.test.js +0 -422
  113. package/v2Components/SmsFallback/useLocalTemplateList.js +0 -92
  114. package/v2Components/TemplatePreview/constants.js +0 -2
  115. package/v2Components/VarSegmentMessageEditor/constants.js +0 -2
  116. package/v2Components/VarSegmentMessageEditor/index.js +0 -125
  117. package/v2Components/VarSegmentMessageEditor/index.scss +0 -46
  118. package/v2Containers/CreativesContainer/CreativesSlideBoxWrapper.js +0 -17
  119. package/v2Containers/CreativesContainer/embeddedSlideboxUtils.js +0 -79
  120. package/v2Containers/CreativesContainer/tests/SlideBoxContent.localTemplates.test.js +0 -90
  121. package/v2Containers/CreativesContainer/tests/embeddedSlideboxUtils.test.js +0 -258
  122. package/v2Containers/CreativesContainer/tests/useLocalTemplatesProp.test.js +0 -125
  123. package/v2Containers/Rcs/rcsLibraryHydrationUtils.js +0 -227
  124. package/v2Containers/Rcs/tests/rcsLibraryHydrationUtils.test.js +0 -318
  125. package/v2Containers/Sms/smsFormDataHelpers.js +0 -67
  126. package/v2Containers/Sms/tests/smsFormDataHelpers.test.js +0 -253
  127. package/v2Containers/SmsTrai/Edit/index.scss +0 -126
  128. package/v2Containers/Templates/TemplatesActionBar.js +0 -101
  129. package/v2Containers/Templates/tests/TemplatesActionBar.test.js +0 -120
  130. package/v2Containers/Templates/tests/smsTemplatesListApi.test.js +0 -180
  131. package/v2Containers/Templates/utils/smsTemplatesListApi.js +0 -79
  132. package/v2Containers/TemplatesV2/tests/TemplatesV2.localTemplates.test.js +0 -131
@@ -2,7 +2,7 @@
2
2
 
3
3
  /**
4
4
  * UnifiedPreview Styles
5
- *
5
+ *
6
6
  * Consistent styling for preview across all channels
7
7
  */
8
8
 
@@ -11,24 +11,25 @@
11
11
  height: 100%;
12
12
  display: flex;
13
13
  flex-direction: column;
14
+ background: $CAP_WHITE;
14
15
  overflow: hidden;
15
-
16
+
16
17
  // Preview Chrome wrapper (matches old TestAndPreviewSlidebox design)
17
18
  .preview-chrome {
18
19
  background: $CAP_WHITE;
19
20
  overflow: hidden;
20
-
21
+
21
22
  .preview-divider {
22
23
  margin: 0;
23
24
  }
24
-
25
+
25
26
  .preview-header {
26
27
  display: flex;
27
28
  justify-content: space-between;
28
29
  align-items: center;
29
30
  padding: $CAP_SPACE_08 $CAP_SPACE_16 $CAP_SPACE_06 $CAP_SPACE_16;
30
31
  background: $CAP_G09;
31
-
32
+
32
33
  .preview-for {
33
34
  font-size: $FONT_SIZE_M;
34
35
  color: #595959;
@@ -38,20 +39,20 @@
38
39
  margin-left: $CAP_SPACE_04;
39
40
  }
40
41
  }
41
-
42
+
42
43
  .device-toggle {
43
44
  display: flex;
44
45
  gap: $CAP_SPACE_08;
45
46
  background-color: #e0e0e0;
46
47
  padding: $CAP_SPACE_06 $CAP_SPACE_08;
47
48
  border-radius: $CAP_SPACE_08;
48
-
49
+
49
50
  .anticon {
50
51
  padding: $CAP_SPACE_04;
51
52
  border-radius: $CAP_SPACE_04;
52
53
  cursor: pointer;
53
54
  color: #595959;
54
-
55
+
55
56
  &.active {
56
57
  background-color: $CAP_WHITE;
57
58
  color: #262626;
@@ -61,27 +62,7 @@
61
62
  }
62
63
  }
63
64
  }
64
-
65
- &.unified-preview-rcs-tabs {
66
- .ant-tabs-nav {
67
- margin: 0;
68
- padding: 0 $CAP_SPACE_16;
69
- }
70
-
71
- // Prevent white hover/active backgrounds from default antd styles
72
- .ant-tabs-tab,
73
- .ant-tabs-tab:hover,
74
- .ant-tabs-tab-active {
75
- background: transparent;
76
- }
77
-
78
- .ant-tabs-tab-btn,
79
- .ant-tabs-tab-btn:hover,
80
- .ant-tabs-tab-btn:active {
81
- background: transparent;
82
- }
83
- }
84
-
65
+
85
66
  // Preview Content Container
86
67
  .preview-content-container {
87
68
  flex: 1;
@@ -94,25 +75,25 @@
94
75
  .preview-content-container-no-header {
95
76
  background-color: $CAP_WHITE;
96
77
  }
97
-
78
+
98
79
  // Device Frames
99
80
  .unified-preview-frame {
100
81
  width: 100%;
101
82
  display: flex;
102
83
  justify-content: center;
103
-
84
+
104
85
  .device-frame {
105
86
  background: $CAP_WHITE;
106
87
  border-radius: $CAP_SPACE_08;
107
88
  box-shadow: 0 $CAP_SPACE_04 $CAP_SPACE_12 rgba(0, 0, 0, 0.15);
108
89
  overflow: hidden;
109
90
  transition: all 0.3s ease;
110
-
91
+
111
92
  // Desktop Frame
112
93
  &.device-frame-desktop {
113
94
  width: 100%;
114
95
  min-height: 42.857rem;
115
-
96
+
116
97
  .desktop-chrome {
117
98
  height: $CAP_SPACE_40;
118
99
  background: $CAP_G12;
@@ -121,30 +102,30 @@
121
102
  align-items: center;
122
103
  padding: 0 $CAP_SPACE_12;
123
104
  gap: $CAP_SPACE_12;
124
-
105
+
125
106
  .chrome-dots {
126
107
  display: flex;
127
108
  gap: $CAP_SPACE_06;
128
-
109
+
129
110
  .dot {
130
111
  width: $CAP_SPACE_12;
131
112
  height: $CAP_SPACE_12;
132
113
  border-radius: 50%;
133
-
114
+
134
115
  &.dot-close {
135
116
  background: #ff5f56;
136
117
  }
137
-
118
+
138
119
  &.dot-minimize {
139
120
  background: #ffbd2e;
140
121
  }
141
-
122
+
142
123
  &.dot-maximize {
143
124
  background: #27c93f;
144
125
  }
145
126
  }
146
127
  }
147
-
128
+
148
129
  .chrome-address-bar {
149
130
  flex: 1;
150
131
  background: $CAP_WHITE;
@@ -154,25 +135,25 @@
154
135
  color: #8c8c8c;
155
136
  }
156
137
  }
157
-
138
+
158
139
  .device-content {
159
140
  min-height: 40rem;
160
141
  background: $CAP_WHITE;
161
142
  }
162
143
  }
163
-
144
+
164
145
  // Tablet Frame
165
146
  &.device-frame-tablet {
166
147
  width: 54.857rem;
167
148
  max-width: 90%;
168
-
149
+
169
150
  .tablet-chrome {
170
151
  height: $CAP_SPACE_24;
171
152
  background: #333333;
172
153
  display: flex;
173
154
  align-items: center;
174
155
  justify-content: center;
175
-
156
+
176
157
  .tablet-camera {
177
158
  width: $CAP_SPACE_08;
178
159
  height: $CAP_SPACE_08;
@@ -181,19 +162,19 @@
181
162
  border: $CAP_SPACE_01 solid #666666;
182
163
  }
183
164
  }
184
-
165
+
185
166
  .device-content {
186
167
  min-height: 73.143rem;
187
168
  background: $CAP_WHITE;
188
169
  }
189
-
170
+
190
171
  .tablet-footer {
191
172
  height: 3.571rem;
192
173
  background: #333333;
193
174
  display: flex;
194
175
  align-items: center;
195
176
  justify-content: center;
196
-
177
+
197
178
  .home-button {
198
179
  width: $CAP_SPACE_40;
199
180
  height: $CAP_SPACE_40;
@@ -203,19 +184,19 @@
203
184
  }
204
185
  }
205
186
  }
206
-
187
+
207
188
  // Mobile Frame
208
189
  &.device-frame-mobile {
209
190
  width: 26.786rem;
210
191
  max-width: 90%;
211
-
192
+
212
193
  .mobile-chrome {
213
194
  height: $CAP_SPACE_24;
214
195
  background: #000000;
215
196
  display: flex;
216
197
  align-items: center;
217
198
  justify-content: center;
218
-
199
+
219
200
  .mobile-notch {
220
201
  width: 10.714rem;
221
202
  height: 1.571rem;
@@ -223,19 +204,19 @@
223
204
  border-radius: 0 0 $CAP_SPACE_12 $CAP_SPACE_12;
224
205
  }
225
206
  }
226
-
207
+
227
208
  .device-content {
228
209
  min-height: 47.643rem;
229
210
  background: $CAP_WHITE;
230
211
  }
231
-
212
+
232
213
  .mobile-footer {
233
214
  height: $CAP_SPACE_24;
234
215
  background: #000000;
235
216
  display: flex;
236
217
  align-items: center;
237
218
  justify-content: center;
238
-
219
+
239
220
  .home-indicator {
240
221
  width: $CAP_SPACE_80;
241
222
  height: $CAP_SPACE_04;
@@ -247,7 +228,7 @@
247
228
  }
248
229
  }
249
230
  }
250
-
231
+
251
232
  // Channel Preview Placeholders (Phase 5)
252
233
  .channel-preview-placeholder {
253
234
  display: flex;
@@ -257,7 +238,7 @@
257
238
  padding: $CAP_SPACE_60 $CAP_SPACE_24;
258
239
  text-align: center;
259
240
  min-height: 28.571rem;
260
-
241
+
261
242
  .question-circle {
262
243
  font-size: $CAP_SPACE_48;
263
244
  color: $CAP_COLOR_16;
@@ -268,13 +249,13 @@
268
249
  font-weight: 600;
269
250
  color: #262626;
270
251
  }
271
-
252
+
272
253
  p {
273
254
  margin-top: $CAP_SPACE_08;
274
255
  font-size: $FONT_SIZE_M;
275
256
  color: #8c8c8c;
276
257
  }
277
-
258
+
278
259
  .preview-subject {
279
260
  margin-top: $CAP_SPACE_24;
280
261
  padding: $CAP_SPACE_12 $CAP_SPACE_16;
@@ -283,26 +264,26 @@
283
264
  text-align: left;
284
265
  width: 100%;
285
266
  max-width: 35.714rem;
286
-
267
+
287
268
  strong {
288
269
  color: #595959;
289
270
  margin-right: $CAP_SPACE_08;
290
271
  }
291
272
  }
292
-
273
+
293
274
  .preview-body-placeholder {
294
275
  margin-top: $CAP_SPACE_12;
295
276
  padding: $CAP_SPACE_08 $CAP_SPACE_12;
296
277
  background: #fafafa;
297
278
  border: $CAP_SPACE_01 dashed $CAP_COLOR_16;
298
279
  border-radius: $CAP_SPACE_04;
299
-
280
+
300
281
  small {
301
282
  color: #8c8c8c;
302
283
  }
303
284
  }
304
285
  }
305
-
286
+
306
287
  // Loading State
307
288
  &.unified-preview-loading {
308
289
  .preview-loading-container {
@@ -312,14 +293,14 @@
312
293
  justify-content: center;
313
294
  gap: $CAP_SPACE_16;
314
295
  min-height: 28.571rem;
315
-
296
+
316
297
  .loading-text {
317
298
  font-size: $FONT_SIZE_M;
318
299
  color: #8c8c8c;
319
300
  }
320
301
  }
321
302
  }
322
-
303
+
323
304
  // Error State
324
305
  &.unified-preview-error {
325
306
  .preview-error-container {
@@ -330,7 +311,7 @@
330
311
  justify-content: center;
331
312
  gap: $CAP_SPACE_16;
332
313
  min-height: 28.571rem;
333
-
314
+
334
315
  .exclamation-circle {
335
316
  font-size: $CAP_SPACE_48;
336
317
  color: #ff4d4f;
@@ -340,7 +321,7 @@
340
321
  font-weight: 600;
341
322
  color: #262626;
342
323
  }
343
-
324
+
344
325
  .error-message {
345
326
  font-size: $FONT_SIZE_M;
346
327
  color: #ff4d4f;
@@ -349,7 +330,7 @@
349
330
  }
350
331
  }
351
332
  }
352
-
333
+
353
334
  // Preview Metadata
354
335
  .preview-metadata {
355
336
  padding: $CAP_SPACE_12 $CAP_SPACE_24;
@@ -359,7 +340,7 @@
359
340
  color: #8c8c8c;
360
341
  display: flex;
361
342
  gap: $CAP_SPACE_16;
362
-
343
+
363
344
  .metadata-item {
364
345
  display: flex;
365
346
  gap: $CAP_SPACE_04;
@@ -551,7 +532,7 @@
551
532
  font-weight: 600;
552
533
  color: #262626;
553
534
  }
554
-
535
+
555
536
  .error-message {
556
537
  font-size: $FONT_SIZE_M;
557
538
  color: #ff4d4f;
@@ -590,12 +571,9 @@
590
571
  transform: translateX(-50%);
591
572
  width: 100%;
592
573
  max-width: 26.786rem;
593
- min-width: 0; // flex descendant overflow: allow shrink inside narrow screen
594
574
  height: calc(100% - 4.5rem);
595
575
  display: flex;
596
576
  flex-direction: column;
597
- overflow-x: hidden;
598
- box-sizing: border-box;
599
577
 
600
578
  &.sms-content-overlay-android {
601
579
  height: calc(100% - 3.8rem);
@@ -763,7 +741,7 @@
763
741
  font-weight: 600;
764
742
  color: #262626;
765
743
  }
766
-
744
+
767
745
  .sms-error-message {
768
746
  font-size: $FONT_SIZE_M;
769
747
  color: #ff4d4f;
@@ -785,270 +763,13 @@
785
763
  }
786
764
  }
787
765
 
788
- // RCS-only overrides for SMS-style preview frame (scoped; does not affect SMS channel preview)
789
- .rcs-device-container {
790
-
791
- // Carousel panel: sibling of .sms-content-overlay, positioned absolutely within
792
- // .sms-device-container (position:relative). Has NO overflow-x:hidden ancestor,
793
- // mirroring the WhatsApp carousel approach so horizontal scroll events reach the
794
- // inner .scroll-container directly.
795
- &.rcs-device-container-carousel {
796
- // Carousel panel: same geometry as .sms-content-overlay but NO overflow-x:hidden.
797
- // padding-top skips past the nav bar ($CAP_SPACE_48 = 3.428rem) and date separator
798
- // (~2.429rem), placing the carousel right where the original .sms-message-container
799
- // started (which had flex:1 and filled from below the date separator downward).
800
- .rcs-carousel-panel {
801
- position: absolute;
802
- left: 50%;
803
- transform: translateX(-50%);
804
- width: 100%;
805
- max-width: 26.786rem;
806
- box-sizing: border-box;
807
- top: 4.143rem;
808
- height: calc(100% - 4.5rem);
809
- display: flex;
810
- flex-direction: column;
811
- padding-top: 5.857rem; // nav (3.428rem) + date separator (~2.429rem)
812
- padding-bottom: $CAP_SPACE_16;
813
-
814
- &.rcs-carousel-panel-android {
815
- top: 3.1rem;
816
- height: calc(100% - 3.8rem);
817
- }
818
-
819
- &.rcs-carousel-panel-ios {
820
- height: calc(100% - 5rem);
821
- }
822
-
823
- .msg-container-carousel {
824
- display: flex;
825
- flex-direction: column;
826
- width: 100%;
827
- padding: 0 $CAP_SPACE_16;
828
- }
829
-
830
- .scroll-container {
831
- display: flex;
832
- flex-wrap: nowrap;
833
- gap: 0.75rem;
834
- overflow-x: auto;
835
- overflow-y: hidden;
836
- width: 100%;
837
- scrollbar-width: none;
838
-
839
- &::-webkit-scrollbar {
840
- display: none;
841
- }
842
- }
843
-
844
- .rcs-carousel-timestamp {
845
- font-size: $FONT_SIZE_S;
846
- color: #8c8c8c;
847
- align-self: flex-end;
848
- padding-right: $CAP_SPACE_04;
849
- padding-top: $CAP_SPACE_04;
850
- }
851
- }
852
- }
853
-
854
- .rcs-content-overlay {
855
- // no carousel-specific overlay overrides needed (carousel lives outside the overlay now)
856
- }
857
- }
858
-
859
- // RCS Carousel card styles — scoped to .rcs-carousel-panel (which lives outside the
860
- // overflow-x:hidden overlay so horizontal scroll events reach .scroll-container freely).
861
- .rcs-device-container {
862
- .rcs-carousel-panel {
863
-
864
- .message-pop-carousel {
865
- // Match TemplatePreview carousel card look (big card + subtle shadow)
866
- background-color: $CAP_WHITE;
867
- border-radius: $CAP_SPACE_08;
868
- // Ensure card width is stable and does not shrink to text width
869
- width: 15.375rem; // ~246px; fills container leaving ~50% of next card peeking
870
- min-width: 15.375rem;
871
- flex: 0 0 15.375rem;
872
- padding: 0;
873
- margin-right: 0; // spacing handled by scroll-container gap
874
- color: $CAP_G01;
875
- overflow: hidden;
876
- box-shadow: 0 0 0.625rem 0 rgba(0, 0, 0, 0.08);
877
- position: relative;
878
- }
879
-
880
- .whatsapp-content {
881
- font-family: Roboto, 'Open Sans', sans-serif;
882
- margin: 0;
883
- width: 100%;
884
- }
885
-
886
- // Height follows width × aspect-ratio; inline style from carouselPreviewDimensions overrides fallback.
887
- .whatsapp-image.rcs-carousel-media-wrap {
888
- width: 100%;
889
- height: auto;
890
- aspect-ratio: 1280 / 720; // MEDIUM_MEDIUM image fallback when dimensions not passed
891
- display: block;
892
- overflow: hidden;
893
- border-radius: 0.5rem 0.5rem 0 0; // 8px
894
- margin-bottom: 0;
895
-
896
- // CapImage (antd Image) applies className on wrapper; ensure inner img is constrained too.
897
- img,
898
- .ant-image-img {
899
- width: 100%;
900
- height: 100%;
901
- object-fit: cover;
902
- border-radius: inherit;
903
- display: block;
904
- }
905
-
906
- // Plain <img> in RCS carousel preview (not CapImage)
907
- .rcs-carousel-img {
908
- width: 100%;
909
- height: 100%;
910
- object-fit: cover;
911
- border-radius: inherit;
912
- display: block;
913
- }
914
- }
915
-
916
- .video-preview {
917
- position: relative;
918
- width: 100%;
919
- margin-bottom: 0;
920
-
921
- .whatsapp-image.rcs-carousel-media-wrap {
922
- width: 100%;
923
- height: auto;
924
- aspect-ratio: 796 / 448; // MEDIUM_MEDIUM video thumbnail fallback
925
- margin-bottom: 0;
926
-
927
- img,
928
- .ant-image-img,
929
- .rcs-carousel-img {
930
- width: 100%;
931
- height: 100%;
932
- object-fit: cover;
933
- border-radius: inherit;
934
- display: block;
935
- }
936
- }
937
-
938
- .icon-position {
939
- position: absolute;
940
- top: 50%;
941
- left: 50%;
942
- transform: translate(-50%, -50%);
943
- display: flex;
944
- align-items: center;
945
- justify-content: center;
946
-
947
- .video-icon {
948
- width: $CAP_SPACE_48;
949
- height: $CAP_SPACE_48;
950
- }
951
- }
952
- }
953
-
954
- // CapTooltip shrink-wraps its wrapper/trigger by default and forces `display: inline-block`
955
- // inline on the trigger span, so .video-preview's width:100% collapses to content width
956
- // unless these are stretched to fill the card (inline style needs !important to override).
957
- .rcs-carousel-video-tooltip-wrapper {
958
- display: block;
959
- width: 100%;
960
- }
961
-
962
- .rcs-carousel-video-tooltip-trigger {
963
- display: block !important;
964
- width: 100%;
965
- }
966
-
967
- .carousel-content {
968
- padding: 0.625rem 0.75rem; // 10px 12px
969
- width: 100%;
970
- background-color: $CAP_WHITE;
971
- white-space: normal; // override scroll-container's nowrap so text can wrap
972
- display: flex;
973
- flex-direction: column;
974
- border-bottom-left-radius: 0.25rem; // 4px — text panel tucks above CTA gap (Figma)
975
- border-bottom-right-radius: 0.25rem;
976
-
977
- // Title/body typography via CapLabel type (label1 / label2, etc.)
978
- .carousel-title {
979
- margin-bottom: 0.25rem; // 4px
980
- display: block;
981
- overflow: visible;
982
- white-space: normal;
983
- overflow-wrap: anywhere;
984
- }
985
-
986
- .carousel-message {
987
- display: block;
988
- overflow: visible;
989
- white-space: normal;
990
- overflow-wrap: anywhere;
991
- }
992
-
993
- .rcs-carousel-field-placeholder {
994
- color: $CAP_G05;
995
- font-weight: $FONT_WEIGHT_REGULAR;
996
- }
997
- }
998
-
999
- // Divider between message body and suggestions — subtle gray on the gray bubble
1000
- .whatsapp-divider {
1001
- margin: 0;
1002
- border-top: 1px solid $CAP_G07;
1003
- }
1004
-
1005
- // Inside a carousel card (white bg) dividers should stay white
1006
- .message-pop-carousel .whatsapp-divider {
1007
- border-top: 1px solid $CAP_WHITE;
1008
- }
1009
-
1010
- // Stacked full-width CTA bars below card copy, separated by white gap (Figma RCS carousel)
1011
- .rcs-carousel-cta-stack.cap-row-v2 {
1012
- display: flex;
1013
- flex-direction: column;
1014
- flex-wrap: nowrap;
1015
- width: 100%;
1016
- gap: 0.25rem;
1017
- box-sizing: border-box;
1018
- align-items: stretch;
1019
- }
1020
-
1021
- .rcs-cta-preview--carousel-bar {
1022
- display: flex;
1023
- align-items: center;
1024
- justify-content: center;
1025
- gap: 0.375rem;
1026
- width: 100%;
1027
- margin: 0;
1028
- padding: 0.625rem 0.75rem;
1029
- box-sizing: border-box;
1030
- background-color: $CAP_WHITE;
1031
- border-radius: 0.25rem;
1032
- font-size: $FONT_SIZE_M;
1033
- font-weight: $FONT_WEIGHT_MEDIUM;
1034
- color: $CAP_G01;
1035
- text-align: center;
1036
- }
1037
-
1038
- .rcs-cta-preview-phone-icon-end {
1039
- margin-left: 0.25rem;
1040
- flex-shrink: 0;
1041
- }
1042
- }
1043
- }
1044
-
1045
766
  // WhatsApp Preview Content Styles (Phase 8)
1046
767
  // All WhatsApp styles wrapped in parent class for increased specificity
1047
768
  // This prevents other CSS (like CapLabel) from overriding WhatsApp-specific styles
1048
769
  .whatsapp-preview-wrapper {
1049
770
  // Using same CSS classes as TemplatePreview for consistency
1050
771
  // Styles are copied from TemplatePreview/_templatePreview.scss to ensure they work
1051
-
772
+
1052
773
  .shell-v2-whatsapp {
1053
774
  position: relative;
1054
775
  -webkit-transform: translate(-50%);
@@ -1123,23 +844,23 @@
1123
844
  }
1124
845
 
1125
846
  // WhatsApp message pop styles (matching TemplatePreview)
1126
- &.whatsapp-message-pop,
1127
- &.whatsapp-message-pop-carousel {
847
+ &.whatsapp-message-pop {
1128
848
  padding: $CAP_SPACE_04 0 $CAP_SPACE_08;
1129
849
  border-radius: $CAP_SPACE_06;
1130
850
  background-color: $CAP_WHITE;
1131
- left: 0;
1132
- }
1133
-
1134
- &.whatsapp-message-pop {
1135
851
  width: 88%;
852
+ left: 0;
1136
853
  }
1137
854
 
1138
855
  // WhatsApp carousel message pop styles
1139
856
  &.whatsapp-message-pop-carousel {
857
+ padding: $CAP_SPACE_04 0 $CAP_SPACE_08;
858
+ border-radius: $CAP_SPACE_06;
859
+ background-color: $CAP_WHITE;
1140
860
  width: 10.4rem;
1141
861
  cursor: pointer;
1142
862
  flex-shrink: 0;
863
+ left: 0;
1143
864
  }
1144
865
  }
1145
866
  }
@@ -1204,7 +925,7 @@
1204
925
  line-height: 1rem;
1205
926
  font-family: Roboto, 'Open Sans', sans-serif;
1206
927
  }
1207
-
928
+
1208
929
  .whatsapp-template-footer-preview {
1209
930
  // From WhatsApp/index.scss: color: $CAP_G04, but use white for preview
1210
931
  color: $CAP_G01;
@@ -1286,19 +1007,19 @@
1286
1007
  color: #8c8c8c;
1287
1008
  font-size: $FONT_SIZE_M;
1288
1009
  }
1289
-
1010
+
1290
1011
  .whatsapp-error-text {
1291
1012
  font-size: $FONT_SIZE_L;
1292
1013
  font-weight: 600;
1293
1014
  color: #262626;
1294
1015
  }
1295
-
1016
+
1296
1017
  .whatsapp-error-message {
1297
1018
  font-size: $FONT_SIZE_M;
1298
1019
  color: #ff4d4f;
1299
1020
  text-align: center;
1300
1021
  }
1301
-
1022
+
1302
1023
  .whatsapp-no-content {
1303
1024
  color: #8c8c8c;
1304
1025
  font-size: $FONT_SIZE_M;
@@ -1350,14 +1071,14 @@
1350
1071
  color: #8c8c8c;
1351
1072
  margin-top: $CAP_SPACE_04;
1352
1073
  }
1353
-
1074
+
1354
1075
  .url-preview {
1355
1076
  font-size: $FONT_SIZE_S;
1356
1077
  color: #1890ff;
1357
1078
  word-break: break-all;
1358
1079
  }
1359
1080
  }
1360
-
1081
+
1361
1082
  // InApp Preview Content Styles (Phase 10)
1362
1083
  // Styles copied from TemplatePreview/_templatePreview.scss to ensure consistency
1363
1084
  // These styles work within the SMS device container structure
@@ -1418,11 +1139,11 @@
1418
1139
  .inapp-message-container-FULLSCREEN {
1419
1140
  position: relative;
1420
1141
  background-color: $CAP_WHITE;
1421
- width: 100%;
1142
+ width: 100%;
1422
1143
  height: 100%;
1423
1144
  align-items: center;
1424
1145
  padding: 0 $CAP_SPACE_16;
1425
- border-bottom-left-radius: 2.6rem;
1146
+ border-bottom-left-radius: 2.6rem;
1426
1147
  border-bottom-right-radius: 2.6rem;
1427
1148
  .inapp-title-FULLSCREEN {
1428
1149
  align-items: center;
@@ -2252,7 +1973,7 @@
2252
1973
  max-height: 7.5rem;
2253
1974
  margin-left: $CAP_SPACE_24;
2254
1975
  }
2255
-
1976
+
2256
1977
  .mpush-gif-preview {
2257
1978
  max-width: 100%;
2258
1979
  max-height: 7.5rem;
@@ -2510,7 +2231,6 @@
2510
2231
  font-weight: 500;
2511
2232
  display: -webkit-box;
2512
2233
  -webkit-line-clamp: 1;
2513
- line-clamp: 1;
2514
2234
  -webkit-box-orient: vertical;
2515
2235
  overflow: hidden;
2516
2236
  color: $CAP_WHITE;
@@ -2562,7 +2282,7 @@
2562
2282
  color: $FONT_COLOR_01;
2563
2283
  margin-bottom: $CAP_SPACE_12;
2564
2284
  }
2565
-
2285
+
2566
2286
  .preview-text {
2567
2287
  font-weight: 400;
2568
2288
  font-size: $FONT_SIZE_S;
@@ -2597,13 +2317,13 @@
2597
2317
  justify-content: center;
2598
2318
  padding: $CAP_SPACE_60 $CAP_SPACE_24;
2599
2319
  gap: $CAP_SPACE_16;
2600
-
2320
+
2601
2321
  .zalo-loading-text {
2602
2322
  color: #8c8c8c;
2603
2323
  font-size: $FONT_SIZE_M;
2604
2324
  }
2605
2325
  }
2606
-
2326
+
2607
2327
  // Error state
2608
2328
  .zalo-error-container {
2609
2329
  display: flex;
@@ -2612,13 +2332,13 @@
2612
2332
  justify-content: center;
2613
2333
  padding: $CAP_SPACE_60 $CAP_SPACE_24;
2614
2334
  gap: $CAP_SPACE_16;
2615
-
2335
+
2616
2336
  .zalo-error-text {
2617
2337
  font-size: $FONT_SIZE_L;
2618
2338
  font-weight: 600;
2619
2339
  color: #262626;
2620
2340
  }
2621
-
2341
+
2622
2342
  .zalo-error-message {
2623
2343
  font-size: $FONT_SIZE_M;
2624
2344
  color: #ff4d4f;
@@ -2690,31 +2410,31 @@
2690
2410
  }
2691
2411
  }
2692
2412
  }
2693
-
2413
+
2694
2414
  @media (max-width: 54.857rem) {
2695
2415
  .unified-preview {
2696
2416
  .preview-header {
2697
2417
  flex-direction: column;
2698
2418
  align-items: flex-start;
2699
2419
  gap: $CAP_SPACE_12;
2700
-
2420
+
2701
2421
  .preview-header-right {
2702
2422
  width: 100%;
2703
2423
  justify-content: flex-start;
2704
2424
  }
2705
2425
  }
2706
-
2426
+
2707
2427
  .preview-content-container {
2708
2428
  padding: $CAP_SPACE_16;
2709
2429
  }
2710
-
2430
+
2711
2431
  .device-frame {
2712
2432
  &.device-frame-desktop,
2713
2433
  &.device-frame-tablet {
2714
2434
  width: 100% !important;
2715
2435
  max-width: 100% !important;
2716
2436
  }
2717
-
2437
+
2718
2438
  &.device-frame-mobile {
2719
2439
  width: 100% !important;
2720
2440
  max-width: 100% !important;
@@ -2722,3 +2442,4 @@
2722
2442
  }
2723
2443
  }
2724
2444
  }
2445
+