@capillarytech/creatives-library 8.0.254 → 8.0.255-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 (143) 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/utils/common.js +5 -0
  9. package/utils/commonUtils.js +28 -5
  10. package/utils/tests/commonUtil.test.js +224 -0
  11. package/utils/transformTemplateConfig.js +0 -10
  12. package/v2Components/CapDeviceContent/index.js +61 -56
  13. package/v2Components/CapTagList/index.js +6 -1
  14. package/v2Components/CapTagListWithInput/index.js +5 -1
  15. package/v2Components/CapTagListWithInput/messages.js +1 -1
  16. package/v2Components/CapWhatsappCTA/tests/index.test.js +5 -0
  17. package/v2Components/ErrorInfoNote/constants.js +1 -0
  18. package/v2Components/ErrorInfoNote/index.js +457 -72
  19. package/v2Components/ErrorInfoNote/messages.js +36 -6
  20. package/v2Components/ErrorInfoNote/style.scss +282 -6
  21. package/v2Components/FormBuilder/tests/index.test.js +13 -4
  22. package/v2Components/HtmlEditor/HTMLEditor.js +547 -94
  23. package/v2Components/HtmlEditor/__tests__/HTMLEditor.apiErrors.test.js +874 -0
  24. package/v2Components/HtmlEditor/__tests__/HTMLEditor.test.js +1358 -133
  25. package/v2Components/HtmlEditor/__tests__/index.lazy.test.js +27 -16
  26. package/v2Components/HtmlEditor/_htmlEditor.scss +108 -45
  27. package/v2Components/HtmlEditor/_index.lazy.scss +0 -1
  28. package/v2Components/HtmlEditor/components/CodeEditorPane/_codeEditorPane.scss +22 -101
  29. package/v2Components/HtmlEditor/components/CodeEditorPane/index.js +149 -140
  30. package/v2Components/HtmlEditor/components/DeviceToggle/_deviceToggle.scss +2 -1
  31. package/v2Components/HtmlEditor/components/DeviceToggle/index.js +3 -3
  32. package/v2Components/HtmlEditor/components/EditorToolbar/_editorToolbar.scss +9 -0
  33. package/v2Components/HtmlEditor/components/EditorToolbar/index.js +1 -1
  34. package/v2Components/HtmlEditor/components/FullscreenModal/_fullscreenModal.scss +22 -0
  35. package/v2Components/HtmlEditor/components/InAppPreviewPane/DeviceFrame.js +4 -7
  36. package/v2Components/HtmlEditor/components/InAppPreviewPane/__tests__/DeviceFrame.test.js +35 -45
  37. package/v2Components/HtmlEditor/components/InAppPreviewPane/_inAppPreviewPane.scss +1 -3
  38. package/v2Components/HtmlEditor/components/InAppPreviewPane/constants.js +33 -33
  39. package/v2Components/HtmlEditor/components/InAppPreviewPane/index.js +7 -6
  40. package/v2Components/HtmlEditor/components/PreviewPane/_previewPane.scss +3 -6
  41. package/v2Components/HtmlEditor/components/PreviewPane/index.js +24 -34
  42. package/v2Components/HtmlEditor/components/SplitContainer/_splitContainer.scss +1 -1
  43. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/index.js +49 -31
  44. package/v2Components/HtmlEditor/components/ValidationPanel/_validationPanel.scss +50 -34
  45. package/v2Components/HtmlEditor/components/ValidationPanel/constants.js +6 -0
  46. package/v2Components/HtmlEditor/components/ValidationPanel/index.js +70 -41
  47. package/v2Components/HtmlEditor/components/ValidationTabs/_validationTabs.scss +254 -0
  48. package/v2Components/HtmlEditor/components/ValidationTabs/index.js +364 -0
  49. package/v2Components/HtmlEditor/components/ValidationTabs/messages.js +51 -0
  50. package/v2Components/HtmlEditor/constants.js +42 -20
  51. package/v2Components/HtmlEditor/hooks/__tests__/useInAppContent.test.js +373 -16
  52. package/v2Components/HtmlEditor/hooks/__tests__/useValidation.apiErrors.test.js +794 -0
  53. package/v2Components/HtmlEditor/hooks/useEditorContent.js +5 -2
  54. package/v2Components/HtmlEditor/hooks/useInAppContent.js +88 -146
  55. package/v2Components/HtmlEditor/hooks/useValidation.js +189 -53
  56. package/v2Components/HtmlEditor/index.js +1 -1
  57. package/v2Components/HtmlEditor/messages.js +95 -85
  58. package/v2Components/HtmlEditor/utils/__tests__/htmlValidator.enhanced.test.js +94 -45
  59. package/v2Components/HtmlEditor/utils/__tests__/validationAdapter.test.js +134 -0
  60. package/v2Components/HtmlEditor/utils/contentSanitizer.js +40 -41
  61. package/v2Components/HtmlEditor/utils/htmlValidator.js +71 -72
  62. package/v2Components/HtmlEditor/utils/liquidTemplateSupport.js +134 -102
  63. package/v2Components/HtmlEditor/utils/properSyntaxHighlighting.js +23 -25
  64. package/v2Components/HtmlEditor/utils/validationAdapter.js +66 -41
  65. package/v2Components/HtmlEditor/utils/validationConstants.js +40 -0
  66. package/v2Components/MobilePushPreviewV2/index.js +32 -7
  67. package/v2Components/TemplatePreview/_templatePreview.scss +55 -24
  68. package/v2Components/TemplatePreview/index.js +47 -32
  69. package/v2Components/TemplatePreview/messages.js +4 -0
  70. package/v2Components/TestAndPreviewSlidebox/_testAndPreviewSlidebox.scss +1 -0
  71. package/v2Containers/BeeEditor/index.js +172 -90
  72. package/v2Containers/BeePopupEditor/_beePopupEditor.scss +14 -0
  73. package/v2Containers/BeePopupEditor/constants.js +10 -0
  74. package/v2Containers/BeePopupEditor/index.js +194 -0
  75. package/v2Containers/BeePopupEditor/tests/index.test.js +627 -0
  76. package/v2Containers/CreativesContainer/SlideBoxContent.js +128 -51
  77. package/v2Containers/CreativesContainer/SlideBoxFooter.js +163 -13
  78. package/v2Containers/CreativesContainer/SlideBoxHeader.js +2 -1
  79. package/v2Containers/CreativesContainer/constants.js +1 -0
  80. package/v2Containers/CreativesContainer/index.js +239 -46
  81. package/v2Containers/CreativesContainer/messages.js +8 -0
  82. package/v2Containers/CreativesContainer/tests/SlideBoxFooter.test.js +11 -2
  83. package/v2Containers/CreativesContainer/tests/__snapshots__/SlideBoxContent.test.js.snap +38 -50
  84. package/v2Containers/CreativesContainer/tests/__snapshots__/index.test.js.snap +106 -0
  85. package/v2Containers/Email/actions.js +7 -0
  86. package/v2Containers/Email/constants.js +5 -1
  87. package/v2Containers/Email/index.js +234 -29
  88. package/v2Containers/Email/messages.js +32 -0
  89. package/v2Containers/Email/reducer.js +12 -1
  90. package/v2Containers/Email/sagas.js +61 -7
  91. package/v2Containers/Email/tests/__snapshots__/reducer.test.js.snap +2 -0
  92. package/v2Containers/Email/tests/reducer.test.js +46 -0
  93. package/v2Containers/Email/tests/sagas.test.js +320 -29
  94. package/v2Containers/EmailWrapper/components/EmailHTMLEditor.js +1285 -0
  95. package/v2Containers/EmailWrapper/components/EmailWrapperView.js +207 -19
  96. package/v2Containers/EmailWrapper/components/HTMLEditorTesting.js +40 -74
  97. package/v2Containers/EmailWrapper/components/__tests__/EmailHTMLEditor.test.js +1870 -0
  98. package/v2Containers/EmailWrapper/components/__tests__/EmailWrapperView.test.js +520 -0
  99. package/v2Containers/EmailWrapper/components/__tests__/HTMLEditorTesting.test.js +2 -67
  100. package/v2Containers/EmailWrapper/constants.js +2 -0
  101. package/v2Containers/EmailWrapper/hooks/useEmailWrapper.js +629 -77
  102. package/v2Containers/EmailWrapper/index.js +103 -23
  103. package/v2Containers/EmailWrapper/messages.js +61 -1
  104. package/v2Containers/EmailWrapper/tests/useEmailWrapper.edgeCases.test.js +643 -0
  105. package/v2Containers/EmailWrapper/tests/useEmailWrapper.test.js +594 -77
  106. package/v2Containers/InApp/__tests__/InAppHTMLEditor.test.js +376 -0
  107. package/v2Containers/InApp/__tests__/sagas.test.js +363 -0
  108. package/v2Containers/InApp/actions.js +7 -0
  109. package/v2Containers/InApp/constants.js +20 -4
  110. package/v2Containers/InApp/index.js +802 -359
  111. package/v2Containers/InApp/index.scss +4 -3
  112. package/v2Containers/InApp/messages.js +7 -3
  113. package/v2Containers/InApp/reducer.js +21 -3
  114. package/v2Containers/InApp/sagas.js +29 -9
  115. package/v2Containers/InApp/selectors.js +25 -5
  116. package/v2Containers/InApp/tests/index.test.js +154 -50
  117. package/v2Containers/InApp/tests/reducer.test.js +34 -0
  118. package/v2Containers/InApp/tests/sagas.test.js +61 -9
  119. package/v2Containers/InApp/tests/selectors.test.js +612 -0
  120. package/v2Containers/InAppWrapper/components/InAppWrapperView.js +151 -0
  121. package/v2Containers/InAppWrapper/components/__tests__/InAppWrapperView.test.js +267 -0
  122. package/v2Containers/InAppWrapper/components/inAppWrapperView.scss +23 -0
  123. package/v2Containers/InAppWrapper/constants.js +16 -0
  124. package/v2Containers/InAppWrapper/hooks/__tests__/useInAppWrapper.test.js +473 -0
  125. package/v2Containers/InAppWrapper/hooks/useInAppWrapper.js +198 -0
  126. package/v2Containers/InAppWrapper/index.js +148 -0
  127. package/v2Containers/InAppWrapper/messages.js +49 -0
  128. package/v2Containers/InappAdvance/index.js +1099 -0
  129. package/v2Containers/InappAdvance/index.scss +10 -0
  130. package/v2Containers/InappAdvance/tests/index.test.js +448 -0
  131. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/content.test.js.snap +3 -0
  132. package/v2Containers/Line/Container/ImageCarousel/tests/__snapshots__/index.test.js.snap +2 -0
  133. package/v2Containers/Line/Container/Wrapper/tests/__snapshots__/index.test.js.snap +2 -0
  134. package/v2Containers/Line/Container/tests/__snapshots__/index.test.js.snap +9 -0
  135. package/v2Containers/Rcs/tests/__snapshots__/index.test.js.snap +12 -0
  136. package/v2Containers/SmsTrai/Edit/tests/__snapshots__/index.test.js.snap +4 -0
  137. package/v2Containers/TagList/index.js +62 -19
  138. package/v2Containers/Templates/_templates.scss +60 -1
  139. package/v2Containers/Templates/index.js +89 -4
  140. package/v2Containers/Templates/messages.js +4 -0
  141. package/v2Containers/Whatsapp/tests/__snapshots__/index.test.js.snap +34 -0
  142. package/v2Components/HtmlEditor/components/ValidationErrorDisplay/__tests__/index.test.js +0 -152
  143. package/v2Containers/EmailWrapper/tests/EmailWrapperView.test.js +0 -214
@@ -6,6 +6,28 @@
6
6
  import { defineMessages } from "react-intl";
7
7
  const scope = "creatives.componentsV2.ErrorInfoNote";
8
8
  export default defineMessages({
9
+ // Tab labels for new tabbed interface
10
+ htmlIssues: {
11
+ id: `${scope}.htmlIssues`,
12
+ defaultMessage: "HTML issues",
13
+ },
14
+ labelIssues: {
15
+ id: `${scope}.labelIssues`,
16
+ defaultMessage: "Label issues",
17
+ },
18
+ liquidIssues: {
19
+ id: `${scope}.liquidIssues`,
20
+ defaultMessage: "Liquid issues",
21
+ },
22
+ navigateToError: {
23
+ id: `${scope}.navigateToError`,
24
+ defaultMessage: "Go to error location",
25
+ },
26
+ closePanel: {
27
+ id: `${scope}.closePanel`,
28
+ defaultMessage: "Close validation panel",
29
+ },
30
+ // Legacy messages (kept for backwards compatibility)
9
31
  dynamicErrorHeader: {
10
32
  id: `${scope}.dynamicErrorHeader`,
11
33
  defaultMessage:
@@ -24,31 +46,39 @@ export default defineMessages({
24
46
  ariaFooter: {
25
47
  id: `${scope}.ariaFooter`,
26
48
  defaultMessage:
27
- "Aira can make mistakes. Please verify the suggestions before applying them"
49
+ "Aira can make mistakes. Please verify the suggestions before applying them",
28
50
  },
29
51
  liquidDocLink: {
30
52
  id: `${scope}.liquidDocLink`,
31
53
  defaultMessage:
32
- "https://docs.capillarytech.com/docs/liquid-language-in-messages"
54
+ "https://docs.capillarytech.com/docs/liquid-language-in-messages",
33
55
  },
34
56
  androidDynamicErrorHeader: {
35
57
  id: `${scope}.androidDynamicErrorHeader`,
36
58
  defaultMessage:
37
- "Errors found in Android Dynamic Tags"
59
+ "Errors found in Android Dynamic Tags",
38
60
  },
39
61
  iosDynamicErrorHeader: {
40
62
  id: `${scope}.iosDynamicErrorHeader`,
41
63
  defaultMessage:
42
- "Errors found in iOS Dynamic Tags"
64
+ "Errors found in iOS Dynamic Tags",
43
65
  },
44
66
  androidStandardErrorHeader: {
45
67
  id: `${scope}.androidStandardErrorHeader`,
46
68
  defaultMessage:
47
- "Errors found in Android Standard Tags"
69
+ "Errors found in Android Standard Tags",
48
70
  },
49
71
  iosStandardErrorHeader: {
50
72
  id: `${scope}.iosStandardErrorHeader`,
51
73
  defaultMessage:
52
- "Errors found in iOS Standard Tags"
74
+ "Errors found in iOS Standard Tags",
75
+ },
76
+ line: {
77
+ id: `${scope}.line`,
78
+ defaultMessage: "Line",
79
+ },
80
+ char: {
81
+ id: `${scope}.char`,
82
+ defaultMessage: "Char",
53
83
  },
54
84
  });
@@ -1,23 +1,260 @@
1
1
  @import "~@capillarytech/cap-ui-library/styles/_variables.scss";
2
2
 
3
3
  .error-container {
4
- width: max-content;
4
+ width: 100%;
5
5
  margin-bottom: $CAP_SPACE_08;
6
- margin-top: $CAP_SPACE_12;
6
+ margin-top: -3.143rem;
7
7
  background-color: $CAP_COLOR_05;
8
8
  border-radius: $CAP_SPACE_04;
9
9
  padding: $CAP_SPACE_08 $CAP_SPACE_12 $CAP_SPACE_08 $CAP_SPACE_08;
10
- gap: $CAP_SPACE_08;
11
10
  box-sizing: border-box;
11
+
12
+ // New tabbed interface styles
13
+ &--tabs {
14
+ padding: 0.5rem 0.75rem;
15
+ }
12
16
  }
13
17
 
18
+ // Header with tabs and actions
19
+ .error-info-note {
20
+ &__header {
21
+ display: flex;
22
+ align-items: flex-start;
23
+ justify-content: space-between;
24
+ width: 100%;
25
+ }
26
+
27
+ &__tabs {
28
+ flex: 1;
29
+
30
+ // Override Ant Design Tabs styles
31
+ .ant-tabs-nav {
32
+ margin-bottom: 0;
33
+
34
+ &::before {
35
+ border-bottom: none;
36
+ }
37
+ }
38
+
39
+ .ant-tabs-tab {
40
+ padding: 0.5rem 0;
41
+ margin-right: 1.5rem;
42
+ color: $CAP_G03;
43
+ font-size: 0.875rem;
44
+ font-weight: $FONT_WEIGHT_MEDIUM;
45
+
46
+ &:hover {
47
+ color: $CAP_G01;
48
+ }
49
+
50
+ &.ant-tabs-tab-active {
51
+ .ant-tabs-tab-btn {
52
+ color: $CAP_G01;
53
+ font-weight: 600;
54
+ }
55
+ }
56
+ }
57
+
58
+ .ant-tabs-ink-bar {
59
+ background-color: $CAP_G01;
60
+ height: 0.125rem;
61
+ }
62
+
63
+ .ant-tabs-content-holder {
64
+ padding-top: 0.5rem;
65
+ }
66
+ }
67
+
68
+ &__tab-label {
69
+ display: flex;
70
+ align-items: center;
71
+ gap: 0.25rem;
72
+ }
73
+
74
+ &__tab-count {
75
+ color: inherit;
76
+ }
77
+
78
+ &__actions {
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 0.5rem;
82
+ flex-shrink: 0;
83
+ padding-top: 0.5rem;
84
+ }
85
+
86
+ &__liquid-doc {
87
+ display: flex;
88
+ align-items: center;
89
+ gap: 0.25rem;
90
+ color: $CAP_BLUE;
91
+ font-size: 0.875rem;
92
+ font-weight: $FONT_WEIGHT_MEDIUM;
93
+ background: transparent;
94
+ border: none;
95
+ cursor: pointer;
96
+ padding: 0;
97
+
98
+ &:hover {
99
+ color: $CAP_BLUE01;
100
+ }
101
+
102
+ .cap-icon-v2 {
103
+ margin-left: 0.25rem;
104
+ }
105
+ }
106
+
107
+ &__close {
108
+ display: flex;
109
+ align-items: center;
110
+ justify-content: center;
111
+ width: 1.5rem;
112
+ height: 1.5rem;
113
+ padding: 0;
114
+ background: transparent;
115
+ border: none;
116
+ border-radius: 0.25rem;
117
+ cursor: pointer;
118
+ color: $CAP_G03;
119
+ transition: all 0.2s ease;
120
+
121
+ &:hover {
122
+ background-color: rgba($CAP_G01, 0.1);
123
+ color: $CAP_G01;
124
+ }
125
+
126
+ .anticon {
127
+ font-size: 0.875rem;
128
+ }
129
+ }
130
+
131
+ &__content {
132
+ max-height: 12.5rem;
133
+ overflow-y: auto;
134
+ padding-right: 0.25rem;
135
+
136
+ // Custom scrollbar
137
+ &::-webkit-scrollbar {
138
+ width: 0.375rem;
139
+ }
140
+
141
+ &::-webkit-scrollbar-track {
142
+ background: transparent;
143
+ }
144
+
145
+ &::-webkit-scrollbar-thumb {
146
+ background-color: $CAP_G06;
147
+ border-radius: 0.1875rem;
148
+
149
+ &:hover {
150
+ background-color: $CAP_G04;
151
+ }
152
+ }
153
+ }
154
+
155
+ &__item {
156
+ display: flex;
157
+ align-items: flex-start;
158
+ gap: 0.5rem;
159
+ padding: 0.375rem 0;
160
+ border-bottom: 1px solid rgba($CAP_G06, 0.3);
161
+
162
+ &:last-child {
163
+ border-bottom: none;
164
+ }
165
+
166
+ &--error {
167
+ .error-info-note__icon--error {
168
+ color: $CAP_RED;
169
+ }
170
+ }
171
+
172
+ &--warning {
173
+ .error-info-note__icon--warning {
174
+ color: $CAP_YELLOW;
175
+ }
176
+ }
177
+ }
178
+
179
+ &__item-icon {
180
+ flex-shrink: 0;
181
+ display: flex;
182
+ align-items: center;
183
+ padding-top: 0.125rem;
184
+ }
185
+
186
+ &__icon {
187
+ font-size: 0.875rem;
188
+
189
+ &--error {
190
+ color: $CAP_RED;
191
+ }
192
+
193
+ &--warning {
194
+ color: $CAP_YELLOW;
195
+ }
196
+ }
197
+
198
+ &__item-content {
199
+ flex: 1;
200
+ display: flex;
201
+ flex-wrap: wrap;
202
+ align-items: baseline;
203
+ gap: 0.25rem;
204
+ font-size: 0.75rem;
205
+ line-height: 2;
206
+ color: $CAP_G01;
207
+ }
208
+
209
+ &__item-message {
210
+ color: $CAP_G01;
211
+ }
212
+
213
+ &__item-location {
214
+ color: $CAP_G03;
215
+ white-space: nowrap;
216
+ }
217
+
218
+ &__item-rule {
219
+ color: $CAP_G04;
220
+ font-family: monospace;
221
+ font-size: 0.6875rem;
222
+ }
223
+
224
+ &__item-navigate {
225
+ flex-shrink: 0;
226
+ display: flex;
227
+ align-items: center;
228
+ justify-content: center;
229
+ width: 1.25rem;
230
+ height: 1.25rem;
231
+ padding: 0;
232
+ background: transparent;
233
+ border: none;
234
+ border-radius: 0.25rem;
235
+ cursor: pointer;
236
+ color: $CAP_G04;
237
+ transition: all 0.2s ease;
238
+
239
+ &:hover {
240
+ background-color: rgba($CAP_G01, 0.1);
241
+ color: $CAP_G01;
242
+ }
243
+
244
+ .anticon {
245
+ font-size: 0.75rem;
246
+ }
247
+ }
248
+ }
249
+
250
+ // Legacy styles (kept for backwards compatibility)
14
251
  .error-header {
15
252
  width: 100%;
16
253
  height: $CAP_SPACE_32;
17
254
  display: inline-flex;
18
255
  align-items: center;
19
256
  justify-content: space-between;
20
- font-weight: 500;
257
+ font-weight: $FONT_WEIGHT_MEDIUM;
21
258
 
22
259
  .ant-btn.cap-button-v2.flat-btn {
23
260
  display: flex;
@@ -60,6 +297,25 @@
60
297
  }
61
298
  }
62
299
 
300
+ // Legacy error list for platform-specific errors
301
+ .error-list-legacy {
302
+ max-height: 10rem;
303
+ overflow-y: auto;
304
+ padding: 0;
305
+
306
+ &__item {
307
+ padding: $CAP_SPACE_04 0;
308
+ }
309
+
310
+ .cap-list-v2-error-item {
311
+ color: $CAP_G01;
312
+ font-size: $CAP_SPACE_12;
313
+ display: flex;
314
+ margin-left: $CAP_SPACE_04;
315
+ gap: $CAP_SPACE_04;
316
+ }
317
+ }
318
+
63
319
  .liquid-divider {
64
320
  &.ant-divider.cap-divider-v2 {
65
321
  background: $FONT_COLOR_04;
@@ -82,5 +338,25 @@
82
338
 
83
339
  .error-header-sub-title {
84
340
  margin-left: $CAP_SPACE_04;
85
- font-weight: 500;
86
- }
341
+ font-weight: $FONT_WEIGHT_MEDIUM;
342
+ }
343
+
344
+ // Responsive adjustments
345
+ @media (max-width: 768px) {
346
+ .error-info-note {
347
+ &__tabs {
348
+ .ant-tabs-tab {
349
+ margin-right: 1rem;
350
+ font-size: 0.8125rem;
351
+ }
352
+ }
353
+
354
+ &__content {
355
+ max-height: 10rem;
356
+ }
357
+
358
+ &__item-content {
359
+ font-size: 0.6875rem;
360
+ }
361
+ }
362
+ }
@@ -10,7 +10,8 @@ import {
10
10
  render,
11
11
  screen,
12
12
  fireEvent,
13
- waitFor
13
+ waitFor,
14
+ act
14
15
  } from '../../../utils/test-utils';
15
16
  import { mockData } from './mockData';
16
17
 
@@ -35,9 +36,17 @@ describe("test for checkbox form builder",() => {
35
36
  it("add action button to notification disabled in ios", async () => {
36
37
  const addNotifBtn=screen.getByLabelText("Add action buttons to notification")
37
38
  expect(addNotifBtn).toBeDisabled();
38
- fireEvent.mouseOver(addNotifBtn);
39
+ // Use mouseEnter instead of mouseOver for tooltip, and wait longer for tooltip to appear
40
+ // Tooltips typically have a delay and are rendered in a portal, so we need to wait for them to appear
41
+ await act(async () => {
42
+ fireEvent.mouseEnter(addNotifBtn);
43
+ // Also trigger mouseOver as some tooltip implementations use both
44
+ fireEvent.mouseOver(addNotifBtn);
45
+ });
46
+ // Wait for tooltip to appear - it might be in a portal, so query document body
39
47
  await waitFor(() => {
40
- expect(screen.getByText("This section is being revamped. Till then it will remain disabled.")).toBeInTheDocument();
41
- })
48
+ const tooltip = screen.getByText("This section is being revamped. Till then it will remain disabled.");
49
+ expect(tooltip).toBeInTheDocument();
50
+ }, { timeout: 3000 });
42
51
  })
43
52
  })