@capillarytech/creatives-library 8.0.241 → 8.0.242-alpha.0

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 (119) hide show
  1. package/package.json +1 -1
  2. package/sagas/__tests__/assetPolling.test.js +607 -0
  3. package/sagas/assetPolling.js +156 -0
  4. package/services/api.js +16 -0
  5. package/services/tests/api.test.js +124 -0
  6. package/translations/en.json +1 -0
  7. package/utils/assetStatusConstants.js +12 -0
  8. package/utils/asyncAssetUpload.js +161 -0
  9. package/utils/tests/asyncAssetUpload.test.js +292 -0
  10. package/utils/transformerUtils.js +42 -0
  11. package/v2Components/CapImageUpload/constants.js +2 -0
  12. package/v2Components/CapImageUpload/index.js +54 -14
  13. package/v2Components/CapImageUpload/index.scss +4 -1
  14. package/v2Components/CapImageUpload/messages.js +4 -0
  15. package/v2Components/CapImageUrlUpload/constants.js +19 -0
  16. package/v2Components/CapImageUrlUpload/index.js +455 -0
  17. package/v2Components/CapImageUrlUpload/index.scss +35 -0
  18. package/v2Components/CapImageUrlUpload/messages.js +47 -0
  19. package/v2Containers/App/constants.js +5 -0
  20. package/v2Containers/Cap/tests/__snapshots__/index.test.js.snap +1 -0
  21. package/v2Containers/CreativesContainer/SlideBoxContent.js +57 -2
  22. package/v2Containers/CreativesContainer/SlideBoxHeader.js +1 -0
  23. package/v2Containers/CreativesContainer/constants.js +2 -0
  24. package/v2Containers/CreativesContainer/index.js +152 -0
  25. package/v2Containers/CreativesContainer/messages.js +4 -0
  26. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -0
  27. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -0
  28. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +25 -0
  29. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +18 -0
  30. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +46 -0
  31. package/v2Containers/SmsTrai/Create/tests/__snapshots__/index.test.js.snap +4 -0
  32. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +8 -0
  33. package/v2Containers/Templates/ChannelTypeIllustration.js +13 -1
  34. package/v2Containers/Templates/_templates.scss +203 -0
  35. package/v2Containers/Templates/actions.js +2 -1
  36. package/v2Containers/Templates/constants.js +1 -0
  37. package/v2Containers/Templates/index.js +273 -30
  38. package/v2Containers/Templates/messages.js +24 -0
  39. package/v2Containers/Templates/reducer.js +2 -0
  40. package/v2Containers/Templates/tests/index.test.js +10 -0
  41. package/v2Containers/TemplatesV2/index.js +3 -2
  42. package/v2Containers/TemplatesV2/messages.js +4 -0
  43. package/v2Containers/WebPush/Create/components/ButtonForm.js +175 -0
  44. package/v2Containers/WebPush/Create/components/ButtonItem.js +101 -0
  45. package/v2Containers/WebPush/Create/components/ButtonList.js +144 -0
  46. package/v2Containers/WebPush/Create/components/_buttons.scss +246 -0
  47. package/v2Containers/WebPush/Create/components/tests/ButtonForm.test.js +554 -0
  48. package/v2Containers/WebPush/Create/components/tests/ButtonItem.test.js +607 -0
  49. package/v2Containers/WebPush/Create/components/tests/ButtonList.test.js +633 -0
  50. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonForm.test.js.snap +666 -0
  51. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonItem.test.js.snap +74 -0
  52. package/v2Containers/WebPush/Create/components/tests/__snapshots__/ButtonList.test.js.snap +80 -0
  53. package/v2Containers/WebPush/Create/index.js +1755 -0
  54. package/v2Containers/WebPush/Create/index.scss +123 -0
  55. package/v2Containers/WebPush/Create/messages.js +199 -0
  56. package/v2Containers/WebPush/Create/preview/DevicePreviewContent.js +241 -0
  57. package/v2Containers/WebPush/Create/preview/NotificationContainer.js +290 -0
  58. package/v2Containers/WebPush/Create/preview/PreviewContent.js +81 -0
  59. package/v2Containers/WebPush/Create/preview/PreviewControls.js +240 -0
  60. package/v2Containers/WebPush/Create/preview/PreviewDisclaimer.js +23 -0
  61. package/v2Containers/WebPush/Create/preview/WebPushPreview.js +144 -0
  62. package/v2Containers/WebPush/Create/preview/assets/Light.svg +53 -0
  63. package/v2Containers/WebPush/Create/preview/assets/Top.svg +5 -0
  64. package/v2Containers/WebPush/Create/preview/assets/chrome-icon.png +0 -0
  65. package/v2Containers/WebPush/Create/preview/assets/edge-icon.png +0 -0
  66. package/v2Containers/WebPush/Create/preview/assets/firefox-icon.svg +106 -0
  67. package/v2Containers/WebPush/Create/preview/assets/iOS.svg +26 -0
  68. package/v2Containers/WebPush/Create/preview/assets/opera-icon.svg +18 -0
  69. package/v2Containers/WebPush/Create/preview/assets/safari-icon.svg +29 -0
  70. package/v2Containers/WebPush/Create/preview/components/AndroidMobileChromeHeader.js +44 -0
  71. package/v2Containers/WebPush/Create/preview/components/AndroidMobileExpanded.js +110 -0
  72. package/v2Containers/WebPush/Create/preview/components/IOSHeader.js +45 -0
  73. package/v2Containers/WebPush/Create/preview/components/NotificationExpandedContent.js +72 -0
  74. package/v2Containers/WebPush/Create/preview/components/NotificationHeader.js +55 -0
  75. package/v2Containers/WebPush/Create/preview/components/WindowsChromeExpanded.js +70 -0
  76. package/v2Containers/WebPush/Create/preview/components/tests/AndroidMobileExpanded.test.js +512 -0
  77. package/v2Containers/WebPush/Create/preview/components/tests/__snapshots__/AndroidMobileExpanded.test.js.snap +77 -0
  78. package/v2Containers/WebPush/Create/preview/config/notificationMappings.js +527 -0
  79. package/v2Containers/WebPush/Create/preview/constants.js +162 -0
  80. package/v2Containers/WebPush/Create/preview/notification-container.scss +104 -0
  81. package/v2Containers/WebPush/Create/preview/preview.scss +409 -0
  82. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-chrome.scss +300 -0
  83. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-edge.scss +12 -0
  84. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-firefox.scss +12 -0
  85. package/v2Containers/WebPush/Create/preview/styles/_android-mobile-opera.scss +12 -0
  86. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-chrome.scss +303 -0
  87. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-edge.scss +11 -0
  88. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-firefox.scss +11 -0
  89. package/v2Containers/WebPush/Create/preview/styles/_android-tablet-opera.scss +11 -0
  90. package/v2Containers/WebPush/Create/preview/styles/_base.scss +188 -0
  91. package/v2Containers/WebPush/Create/preview/styles/_ios.scss +106 -0
  92. package/v2Containers/WebPush/Create/preview/styles/_ipados.scss +107 -0
  93. package/v2Containers/WebPush/Create/preview/styles/_macos-chrome.scss +75 -0
  94. package/v2Containers/WebPush/Create/preview/styles/_windows-chrome.scss +174 -0
  95. package/v2Containers/WebPush/Create/preview/tests/DevicePreviewContent.test.js +909 -0
  96. package/v2Containers/WebPush/Create/preview/tests/NotificationContainer.test.js +1077 -0
  97. package/v2Containers/WebPush/Create/preview/tests/PreviewControls.test.js +723 -0
  98. package/v2Containers/WebPush/Create/preview/tests/WebPushPreview.test.js +943 -0
  99. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/DevicePreviewContent.test.js.snap +128 -0
  100. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/NotificationContainer.test.js.snap +121 -0
  101. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/PreviewControls.test.js.snap +144 -0
  102. package/v2Containers/WebPush/Create/preview/tests/__snapshots__/WebPushPreview.test.js.snap +127 -0
  103. package/v2Containers/WebPush/Create/utils/urlValidation.js +116 -0
  104. package/v2Containers/WebPush/Create/utils/urlValidation.test.js +449 -0
  105. package/v2Containers/WebPush/actions.js +60 -0
  106. package/v2Containers/WebPush/constants.js +108 -0
  107. package/v2Containers/WebPush/index.js +2 -0
  108. package/v2Containers/WebPush/reducer.js +104 -0
  109. package/v2Containers/WebPush/sagas.js +119 -0
  110. package/v2Containers/WebPush/selectors.js +65 -0
  111. package/v2Containers/WebPush/tests/reducer.test.js +863 -0
  112. package/v2Containers/WebPush/tests/sagas.test.js +566 -0
  113. package/v2Containers/WebPush/tests/selectors.test.js +960 -0
  114. package/v2Containers/Whatsapp/constants.js +9 -0
  115. package/v2Containers/Whatsapp/reducer.js +34 -5
  116. package/v2Containers/Whatsapp/sagas.js +61 -10
  117. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +132 -0
  118. package/v2Containers/Whatsapp/tests/reducer.test.js +188 -0
  119. package/v2Containers/Whatsapp/tests/saga.test.js +420 -7
@@ -0,0 +1,300 @@
1
+ @import '~@capillarytech/cap-ui-library/styles/_variables';
2
+
3
+ /**
4
+ * Android (Mobile) + Chrome Notification Styles
5
+ */
6
+
7
+ .notification-container.android-mobile-chrome {
8
+ background-color: $CAP_WHITE;
9
+ border: 1px solid $CAP_G08;
10
+ border-radius: 0.5rem;
11
+ padding: 0.75rem;
12
+ box-sizing: border-box;
13
+
14
+ &.collapsed {
15
+ width: 20.375rem;
16
+ height: 4.875rem;
17
+
18
+ .notification-header {
19
+ display: flex;
20
+ gap: 0.75rem;
21
+ height: 100%;
22
+ }
23
+
24
+ .notification-header.android-mobile-chrome-header {
25
+ align-items: center;
26
+ }
27
+
28
+ .notification-icon-container {
29
+ width: 1.75rem;
30
+ height: 1.75rem;
31
+ padding: 0.125rem;
32
+ border-radius: 50%;
33
+ }
34
+
35
+ .android-mobile-chrome-content {
36
+ display: flex;
37
+ flex-direction: column;
38
+ gap: 0.25rem;
39
+ min-width: 0;
40
+
41
+ .notification-title-row {
42
+ display: flex;
43
+ align-items: center;
44
+ gap: 0.375rem;
45
+ min-width: 0;
46
+
47
+ .notification-title {
48
+ font-weight: 600;
49
+ font-size: $FONT_SIZE_S;
50
+ color: $FONT_COLOR_01;
51
+ margin: 0;
52
+ overflow: hidden;
53
+ text-overflow: ellipsis;
54
+ white-space: nowrap;
55
+ flex: 1;
56
+ min-width: 0;
57
+ }
58
+
59
+ .notification-time {
60
+ font-size: $FONT_SIZE_S;
61
+ color: $CAP_G05;
62
+ flex-shrink: 0;
63
+ }
64
+ }
65
+
66
+ .notification-body {
67
+ font-size: $FONT_SIZE_S;
68
+ color: $FONT_COLOR_01;
69
+ margin: 0;
70
+ line-height: 1.2;
71
+ overflow: hidden;
72
+ text-overflow: ellipsis;
73
+ display: -webkit-box;
74
+ -webkit-box-orient: vertical;
75
+ -webkit-line-clamp: 2;
76
+ }
77
+
78
+ .notification-url {
79
+ display: none;
80
+ }
81
+ }
82
+
83
+ .notification-right-rail {
84
+ display: flex;
85
+ gap: 0.5rem;
86
+ margin-left: 0.5rem;
87
+ flex-shrink: 0;
88
+
89
+ .android-mobile-chrome-brand-icon {
90
+ width: 1.875rem;
91
+ height: 1.875rem;
92
+ padding: 0;
93
+ background-color: transparent;
94
+ display: flex;
95
+ align-items: center;
96
+ justify-content: center;
97
+
98
+ .notification-brand-icon {
99
+ width: 100%;
100
+ height: 100%;
101
+ object-fit: cover;
102
+ border-radius: 0.25rem;
103
+ }
104
+ }
105
+
106
+ .android-mobile-chrome-arrow {
107
+ font-size: $FONT_SIZE_M;
108
+ color: $CAP_G05;
109
+ line-height: 1;
110
+ margin-top: 0;
111
+ padding-top: 0;
112
+ }
113
+ }
114
+ }
115
+
116
+ &.expanded {
117
+ width: 20.375rem;
118
+ min-height: 4.875rem;
119
+ padding: 0.75rem;
120
+ display: flex;
121
+ flex-direction: row;
122
+ gap: 0.5rem;
123
+ position: relative;
124
+
125
+ // Browser icon as separate column, aligned to top
126
+ .android-mobile-expanded-icon {
127
+ padding: 0.125rem;
128
+ border-radius: 50%;
129
+ flex-shrink: 0;
130
+ align-self: flex-start;
131
+
132
+ .notification-icon-container {
133
+ width: 1rem;
134
+ height: 1rem;
135
+ display: flex;
136
+ align-items: center;
137
+ justify-content: center;
138
+ }
139
+
140
+ .notification-icon {
141
+ width: 1rem;
142
+ height: 1rem;
143
+ }
144
+ }
145
+
146
+ .android-mobile-expanded-wrapper {
147
+ display: flex;
148
+ flex-direction: column;
149
+ gap: 0.75rem;
150
+ flex: 1;
151
+ min-width: 0;
152
+ }
153
+
154
+ .android-mobile-expanded-top {
155
+ display: flex;
156
+ align-items: flex-start;
157
+ gap: 0.75rem;
158
+ width: 100%;
159
+ }
160
+
161
+ .android-mobile-expanded-top-content {
162
+ display: flex;
163
+ flex-direction: column;
164
+ gap: 0.5rem;
165
+ flex: 1;
166
+ min-width: 0;
167
+ }
168
+
169
+ .android-mobile-expanded-title {
170
+ font-weight: 600;
171
+ font-size: $FONT_SIZE_S;
172
+ color: $FONT_COLOR_01;
173
+ margin: 0;
174
+ line-height: 1.2;
175
+ word-break: break-word;
176
+ }
177
+
178
+ // Top container: Browser name, URL, time (all inline) | Brand icon
179
+ .android-mobile-expanded-header {
180
+ display: flex;
181
+ align-items: center;
182
+ gap: 0.75rem;
183
+ width: 100%;
184
+
185
+ .android-mobile-expanded-header-content {
186
+ display: flex;
187
+ align-items: center;
188
+ gap: 0.375rem;
189
+ flex: 1;
190
+ min-width: 0;
191
+ font-family: Roboto, sans-serif;
192
+ font-size: 0.625rem;
193
+ line-height: 0.8125rem;
194
+ letter-spacing: 0;
195
+ overflow: hidden;
196
+
197
+ .android-mobile-expanded-browser-name {
198
+ font-weight: 400;
199
+ color: $CAP_G04;
200
+ flex-shrink: 0;
201
+ }
202
+
203
+ .android-mobile-expanded-domain-time {
204
+ display: inline-flex;
205
+ align-items: center;
206
+ gap: 0.375rem;
207
+ min-width: 0;
208
+ overflow: hidden;
209
+
210
+ .android-mobile-expanded-domain {
211
+ color: $CAP_G04;
212
+ font-weight: 400;
213
+ overflow: hidden;
214
+ text-overflow: ellipsis;
215
+ white-space: nowrap;
216
+ }
217
+
218
+ .android-mobile-expanded-time {
219
+ color: $CAP_G04;
220
+ font-weight: 400;
221
+ flex-shrink: 0;
222
+ }
223
+ }
224
+ }
225
+ }
226
+
227
+ .android-mobile-chrome-brand-icon {
228
+ width: 2.143rem;
229
+ height: 2.143rem;
230
+ padding: 0;
231
+ background-color: transparent;
232
+ display: flex;
233
+ align-items: center;
234
+ justify-content: center;
235
+ flex-shrink: 0;
236
+
237
+ .notification-brand-icon {
238
+ width: 100%;
239
+ height: 100%;
240
+ object-fit: cover;
241
+ border-radius: 0.286rem;
242
+ }
243
+ }
244
+
245
+ // Arrow icon positioned as sibling to wrapper
246
+ .android-mobile-expanded-arrow {
247
+ font-size: $FONT_SIZE_M;
248
+ color: $CAP_G05;
249
+ line-height: 1;
250
+ flex-shrink: 0;
251
+ align-self: flex-start;
252
+ }
253
+
254
+ // Body container: body text, media
255
+ .android-mobile-expanded-body {
256
+ display: flex;
257
+ flex-direction: column;
258
+ gap: 0.5rem;
259
+ width: 100%;
260
+
261
+ // Body text (limited to 4 lines)
262
+ .android-mobile-expanded-body-text {
263
+ font-size: $FONT_SIZE_S;
264
+ color: $FONT_COLOR_01;
265
+ margin: 0;
266
+ line-height: 1.4;
267
+ word-break: break-word;
268
+
269
+ // Limit notification body to 4 lines with ellipsis
270
+ display: -webkit-box;
271
+ -webkit-box-orient: vertical;
272
+ -webkit-line-clamp: 4;
273
+ overflow: hidden;
274
+ text-overflow: ellipsis;
275
+ }
276
+
277
+ // Media image at bottom (if visible)
278
+ .android-mobile-expanded-media {
279
+ width: 100%;
280
+ margin-top: 0.25rem;
281
+ border-radius: 0.5rem;
282
+ overflow: hidden;
283
+ display: flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+
287
+ .android-mobile-expanded-media-image {
288
+ width: 100%;
289
+ max-width: 100%;
290
+ height: 12rem; // Fixed height limit
291
+ object-fit: cover; // Ensures image covers the area without distortion
292
+ object-position: center; // Centers the image
293
+ display: block;
294
+ box-sizing: border-box;
295
+ }
296
+ }
297
+ }
298
+ }
299
+ }
300
+
@@ -0,0 +1,12 @@
1
+ @import '~@capillarytech/cap-ui-library/styles/_variables';
2
+
3
+ /**
4
+ * Android (Mobile) + Edge Notification Styles
5
+ * Reuses Android Chrome styles since they have the same UI
6
+ */
7
+
8
+ .notification-container.android-mobile-edge {
9
+ @extend .notification-container.android-mobile-chrome;
10
+ }
11
+
12
+
@@ -0,0 +1,12 @@
1
+ @import '~@capillarytech/cap-ui-library/styles/_variables';
2
+
3
+ /**
4
+ * Android (Mobile) + Firefox Notification Styles
5
+ * Reuses Android Chrome styles since they have the same UI
6
+ */
7
+
8
+ .notification-container.android-mobile-firefox {
9
+ @extend .notification-container.android-mobile-chrome;
10
+ }
11
+
12
+
@@ -0,0 +1,12 @@
1
+ @import '~@capillarytech/cap-ui-library/styles/_variables';
2
+
3
+ /**
4
+ * Android (Mobile) + Opera Notification Styles
5
+ * Reuses Android Chrome styles since they have the same UI
6
+ */
7
+
8
+ .notification-container.android-mobile-opera {
9
+ @extend .notification-container.android-mobile-chrome;
10
+ }
11
+
12
+
@@ -0,0 +1,303 @@
1
+ @import '~@capillarytech/cap-ui-library/styles/_variables';
2
+
3
+ /**
4
+ * Android (Tablet) + Chrome Notification Styles
5
+ * Similar UI to Android Mobile, but with larger dimensions for tablet screen
6
+ */
7
+
8
+ .notification-container.android-tablet-chrome {
9
+ background-color: $CAP_WHITE;
10
+ border: 1px solid $CAP_G08;
11
+ border-radius: 0.5rem;
12
+ padding: 0.75rem;
13
+ box-sizing: border-box;
14
+
15
+ &.collapsed {
16
+ width: 30rem;
17
+ height: 4.875rem;
18
+
19
+ .notification-header {
20
+ display: flex;
21
+ gap: 0.75rem;
22
+ height: 100%;
23
+ }
24
+
25
+ .notification-header.android-mobile-chrome-header {
26
+ align-items: center;
27
+ }
28
+
29
+ .notification-icon-container {
30
+ width: 1.75rem;
31
+ height: 1.75rem;
32
+ padding: 0.125rem;
33
+ border-radius: 50%;
34
+ }
35
+
36
+ .android-mobile-chrome-content {
37
+ display: flex;
38
+ flex-direction: column;
39
+ gap: 0.25rem;
40
+ min-width: 0;
41
+
42
+ .notification-title-row {
43
+ display: flex;
44
+ align-items: center;
45
+ gap: 0.375rem;
46
+ min-width: 0;
47
+
48
+ .notification-title {
49
+ font-weight: 600;
50
+ font-size: $FONT_SIZE_S;
51
+ color: $FONT_COLOR_01;
52
+ margin: 0;
53
+ overflow: hidden;
54
+ text-overflow: ellipsis;
55
+ white-space: nowrap;
56
+ flex: 1;
57
+ min-width: 0;
58
+ }
59
+
60
+ .notification-time {
61
+ font-size: $FONT_SIZE_S;
62
+ color: $CAP_G05;
63
+ flex-shrink: 0;
64
+ }
65
+ }
66
+
67
+ .notification-body {
68
+ font-size: $FONT_SIZE_S;
69
+ color: $FONT_COLOR_01;
70
+ margin: 0;
71
+ line-height: 1.2;
72
+ overflow: hidden;
73
+ text-overflow: ellipsis;
74
+ display: -webkit-box;
75
+ -webkit-box-orient: vertical;
76
+ -webkit-line-clamp: 2;
77
+ line-clamp: 2;
78
+ }
79
+
80
+ .notification-url {
81
+ display: none;
82
+ }
83
+ }
84
+
85
+ .notification-right-rail {
86
+ display: flex;
87
+ gap: 0.5rem;
88
+ margin-left: 0.5rem;
89
+ flex-shrink: 0;
90
+
91
+ .android-mobile-chrome-brand-icon {
92
+ width: 1.875rem;
93
+ height: 1.875rem;
94
+ padding: 0;
95
+ background-color: transparent;
96
+ display: flex;
97
+ align-items: center;
98
+ justify-content: center;
99
+
100
+ .notification-brand-icon {
101
+ width: 100%;
102
+ height: 100%;
103
+ object-fit: cover;
104
+ border-radius: 0.25rem;
105
+ }
106
+ }
107
+
108
+ .android-mobile-chrome-arrow {
109
+ font-size: $FONT_SIZE_M;
110
+ color: $CAP_G05;
111
+ line-height: 1;
112
+ margin-top: 0;
113
+ padding-top: 0;
114
+ }
115
+ }
116
+ }
117
+
118
+ &.expanded {
119
+ width: 30rem;
120
+ min-height: 4.875rem;
121
+ padding: 0.75rem;
122
+ display: flex;
123
+ flex-direction: row;
124
+ gap: 0.5rem;
125
+ position: relative;
126
+
127
+ // Browser icon as separate column, aligned to top
128
+ .android-mobile-expanded-icon {
129
+ padding: 0.125rem;
130
+ border-radius: 50%;
131
+ flex-shrink: 0;
132
+ align-self: flex-start;
133
+
134
+ .notification-icon-container {
135
+ width: 1rem;
136
+ height: 1rem;
137
+ display: flex;
138
+ align-items: center;
139
+ justify-content: center;
140
+ }
141
+
142
+ .notification-icon {
143
+ width: 1rem;
144
+ height: 1rem;
145
+ }
146
+ }
147
+
148
+ .android-mobile-expanded-wrapper {
149
+ display: flex;
150
+ flex-direction: column;
151
+ gap: 0.75rem;
152
+ flex: 1;
153
+ min-width: 0;
154
+ }
155
+
156
+ .android-mobile-expanded-top {
157
+ display: flex;
158
+ align-items: flex-start;
159
+ gap: 0.75rem;
160
+ width: 100%;
161
+ }
162
+
163
+ .android-mobile-expanded-top-content {
164
+ display: flex;
165
+ flex-direction: column;
166
+ gap: 0.5rem;
167
+ flex: 1;
168
+ min-width: 0;
169
+ }
170
+
171
+ .android-mobile-expanded-title {
172
+ font-weight: 600;
173
+ font-size: $FONT_SIZE_S;
174
+ color: $FONT_COLOR_01;
175
+ margin: 0;
176
+ line-height: 1.2;
177
+ word-break: break-word;
178
+ }
179
+
180
+ // Top container: Browser name, URL, time (all inline) | Brand icon
181
+ .android-mobile-expanded-header {
182
+ display: flex;
183
+ align-items: center;
184
+ gap: 0.75rem;
185
+ width: 100%;
186
+
187
+ .android-mobile-expanded-header-content {
188
+ display: flex;
189
+ align-items: center;
190
+ gap: 0.375rem;
191
+ flex: 1;
192
+ min-width: 0;
193
+ font-family: Roboto, sans-serif;
194
+ font-size: 0.625rem;
195
+ line-height: 0.8125rem;
196
+ letter-spacing: 0;
197
+ overflow: hidden;
198
+
199
+ .android-mobile-expanded-browser-name {
200
+ font-weight: 400;
201
+ color: $CAP_G04;
202
+ flex-shrink: 0;
203
+ }
204
+
205
+ .android-mobile-expanded-domain-time {
206
+ display: inline-flex;
207
+ align-items: center;
208
+ gap: 0.375rem;
209
+ min-width: 0;
210
+ overflow: hidden;
211
+
212
+ .android-mobile-expanded-domain {
213
+ color: $CAP_G04;
214
+ font-weight: 400;
215
+ overflow: hidden;
216
+ text-overflow: ellipsis;
217
+ white-space: nowrap;
218
+ }
219
+
220
+ .android-mobile-expanded-time {
221
+ color: $CAP_G04;
222
+ font-weight: 400;
223
+ flex-shrink: 0;
224
+ }
225
+ }
226
+ }
227
+ }
228
+
229
+ .android-mobile-chrome-brand-icon {
230
+ width: 2.143rem;
231
+ height: 2.143rem;
232
+ padding: 0;
233
+ background-color: transparent;
234
+ display: flex;
235
+ align-items: center;
236
+ justify-content: center;
237
+ flex-shrink: 0;
238
+
239
+ .notification-brand-icon {
240
+ width: 100%;
241
+ height: 100%;
242
+ object-fit: cover;
243
+ border-radius: 0.286rem;
244
+ }
245
+ }
246
+
247
+ // Arrow icon positioned as sibling to wrapper
248
+ .android-mobile-expanded-arrow {
249
+ font-size: $FONT_SIZE_M;
250
+ color: $CAP_G05;
251
+ line-height: 1;
252
+ flex-shrink: 0;
253
+ align-self: flex-start;
254
+ }
255
+
256
+ // Body container: body text, media
257
+ .android-mobile-expanded-body {
258
+ display: flex;
259
+ flex-direction: column;
260
+ gap: 0.5rem;
261
+ width: 100%;
262
+
263
+ // Body text (limited to 4 lines)
264
+ .android-mobile-expanded-body-text {
265
+ font-size: $FONT_SIZE_S;
266
+ color: $FONT_COLOR_01;
267
+ margin: 0;
268
+ line-height: 1.4;
269
+ word-break: break-word;
270
+
271
+ // Limit notification body to 4 lines with ellipsis
272
+ display: -webkit-box;
273
+ -webkit-box-orient: vertical;
274
+ -webkit-line-clamp: 4;
275
+ line-clamp: 4;
276
+ overflow: hidden;
277
+ text-overflow: ellipsis;
278
+ }
279
+
280
+ // Media image at bottom (if visible)
281
+ .android-mobile-expanded-media {
282
+ width: 100%;
283
+ margin-top: 0.25rem;
284
+ border-radius: 0.5rem;
285
+ overflow: hidden;
286
+ display: flex;
287
+ align-items: center;
288
+ justify-content: center;
289
+
290
+ .android-mobile-expanded-media-image {
291
+ width: 100%;
292
+ max-width: 100%;
293
+ height: 10.5rem; // Fixed height limit
294
+ object-fit: cover; // Ensures image covers the area without distortion
295
+ object-position: center; // Centers the image
296
+ display: block;
297
+ box-sizing: border-box;
298
+ }
299
+ }
300
+ }
301
+ }
302
+ }
303
+
@@ -0,0 +1,11 @@
1
+ @import '~@capillarytech/cap-ui-library/styles/_variables';
2
+
3
+ /**
4
+ * Android (Tablet) + Edge Notification Styles
5
+ * Reuses Android Tablet Chrome styles since they have the same UI
6
+ */
7
+
8
+ .notification-container.android-tablet-edge {
9
+ @extend .notification-container.android-tablet-chrome;
10
+ }
11
+
@@ -0,0 +1,11 @@
1
+ @import '~@capillarytech/cap-ui-library/styles/_variables';
2
+
3
+ /**
4
+ * Android (Tablet) + Firefox Notification Styles
5
+ * Reuses Android Tablet Chrome styles since they have the same UI
6
+ */
7
+
8
+ .notification-container.android-tablet-firefox {
9
+ @extend .notification-container.android-tablet-chrome;
10
+ }
11
+
@@ -0,0 +1,11 @@
1
+ @import '~@capillarytech/cap-ui-library/styles/_variables';
2
+
3
+ /**
4
+ * Android (Tablet) + Opera Notification Styles
5
+ * Reuses Android Tablet Chrome styles since they have the same UI
6
+ */
7
+
8
+ .notification-container.android-tablet-opera {
9
+ @extend .notification-container.android-tablet-chrome;
10
+ }
11
+