@thoughtspot/visual-embed-sdk 1.48.0 → 1.49.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 (201) hide show
  1. package/cjs/package.json +1 -1
  2. package/cjs/src/css-variables.d.ts +140 -0
  3. package/cjs/src/css-variables.d.ts.map +1 -1
  4. package/cjs/src/embed/app.d.ts +62 -1
  5. package/cjs/src/embed/app.d.ts.map +1 -1
  6. package/cjs/src/embed/app.js +57 -6
  7. package/cjs/src/embed/app.js.map +1 -1
  8. package/cjs/src/embed/app.spec.js +191 -1
  9. package/cjs/src/embed/app.spec.js.map +1 -1
  10. package/cjs/src/embed/auto-frame-renderer.js +7 -2
  11. package/cjs/src/embed/auto-frame-renderer.js.map +1 -1
  12. package/cjs/src/embed/auto-frame-renderer.spec.js +385 -6
  13. package/cjs/src/embed/auto-frame-renderer.spec.js.map +1 -1
  14. package/cjs/src/embed/base.d.ts +1 -0
  15. package/cjs/src/embed/base.d.ts.map +1 -1
  16. package/cjs/src/embed/base.js +13 -1
  17. package/cjs/src/embed/base.js.map +1 -1
  18. package/cjs/src/embed/base.spec.js +21 -0
  19. package/cjs/src/embed/base.spec.js.map +1 -1
  20. package/cjs/src/embed/bodyless-conversation.spec.js +86 -0
  21. package/cjs/src/embed/bodyless-conversation.spec.js.map +1 -1
  22. package/cjs/src/embed/conversation.d.ts +16 -1
  23. package/cjs/src/embed/conversation.d.ts.map +1 -1
  24. package/cjs/src/embed/conversation.js +5 -1
  25. package/cjs/src/embed/conversation.js.map +1 -1
  26. package/cjs/src/embed/conversation.spec.js +26 -0
  27. package/cjs/src/embed/conversation.spec.js.map +1 -1
  28. package/cjs/src/embed/liveboard.d.ts +47 -1
  29. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  30. package/cjs/src/embed/liveboard.js +47 -6
  31. package/cjs/src/embed/liveboard.js.map +1 -1
  32. package/cjs/src/embed/liveboard.spec.js +129 -1
  33. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  34. package/cjs/src/embed/spotter-viz-utils.d.ts +85 -0
  35. package/cjs/src/embed/spotter-viz-utils.d.ts.map +1 -0
  36. package/cjs/src/embed/spotter-viz-utils.js +17 -0
  37. package/cjs/src/embed/spotter-viz-utils.js.map +1 -0
  38. package/cjs/src/embed/spotter-viz-utils.spec.d.ts +2 -0
  39. package/cjs/src/embed/spotter-viz-utils.spec.d.ts.map +1 -0
  40. package/cjs/src/embed/spotter-viz-utils.spec.js +31 -0
  41. package/cjs/src/embed/spotter-viz-utils.spec.js.map +1 -0
  42. package/cjs/src/embed/ts-embed.d.ts +58 -38
  43. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  44. package/cjs/src/embed/ts-embed.js +245 -149
  45. package/cjs/src/embed/ts-embed.js.map +1 -1
  46. package/cjs/src/embed/ts-embed.spec.js +369 -123
  47. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  48. package/cjs/src/index.d.ts +2 -1
  49. package/cjs/src/index.d.ts.map +1 -1
  50. package/cjs/src/index.js.map +1 -1
  51. package/cjs/src/react/index.d.ts.map +1 -1
  52. package/cjs/src/react/index.js +3 -0
  53. package/cjs/src/react/index.js.map +1 -1
  54. package/cjs/src/types.d.ts +267 -27
  55. package/cjs/src/types.d.ts.map +1 -1
  56. package/cjs/src/types.js +223 -19
  57. package/cjs/src/types.js.map +1 -1
  58. package/cjs/src/utils/authService/tokenizedAuthService.spec.js +6 -7
  59. package/cjs/src/utils/authService/tokenizedAuthService.spec.js.map +1 -1
  60. package/cjs/src/utils/logger.js +2 -1
  61. package/cjs/src/utils/logger.js.map +1 -1
  62. package/cjs/src/utils/logger.spec.d.ts +1 -0
  63. package/cjs/src/utils/logger.spec.d.ts.map +1 -1
  64. package/cjs/src/utils/logger.spec.js +10 -9
  65. package/cjs/src/utils/logger.spec.js.map +1 -1
  66. package/cjs/src/utils.d.ts +4 -1
  67. package/cjs/src/utils.d.ts.map +1 -1
  68. package/cjs/src/utils.js +107 -10
  69. package/cjs/src/utils.js.map +1 -1
  70. package/cjs/src/utils.spec.js +163 -4
  71. package/cjs/src/utils.spec.js.map +1 -1
  72. package/dist/{index-Ck-r09gt.js → index-_UGCSSDR.js} +1 -1
  73. package/dist/src/css-variables.d.ts +140 -0
  74. package/dist/src/css-variables.d.ts.map +1 -1
  75. package/dist/src/embed/app.d.ts +62 -1
  76. package/dist/src/embed/app.d.ts.map +1 -1
  77. package/dist/src/embed/base.d.ts +1 -0
  78. package/dist/src/embed/base.d.ts.map +1 -1
  79. package/dist/src/embed/conversation.d.ts +16 -1
  80. package/dist/src/embed/conversation.d.ts.map +1 -1
  81. package/dist/src/embed/liveboard.d.ts +47 -1
  82. package/dist/src/embed/liveboard.d.ts.map +1 -1
  83. package/dist/src/embed/spotter-viz-utils.d.ts +85 -0
  84. package/dist/src/embed/spotter-viz-utils.d.ts.map +1 -0
  85. package/dist/src/embed/spotter-viz-utils.spec.d.ts +2 -0
  86. package/dist/src/embed/spotter-viz-utils.spec.d.ts.map +1 -0
  87. package/dist/src/embed/ts-embed.d.ts +58 -38
  88. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  89. package/dist/src/index.d.ts +2 -1
  90. package/dist/src/index.d.ts.map +1 -1
  91. package/dist/src/react/index.d.ts.map +1 -1
  92. package/dist/src/types.d.ts +267 -27
  93. package/dist/src/types.d.ts.map +1 -1
  94. package/dist/src/utils/logger.spec.d.ts +1 -0
  95. package/dist/src/utils/logger.spec.d.ts.map +1 -1
  96. package/dist/src/utils.d.ts +4 -1
  97. package/dist/src/utils.d.ts.map +1 -1
  98. package/dist/tsembed-react.es.js +3708 -3226
  99. package/dist/tsembed-react.js +3358 -2876
  100. package/dist/tsembed.es.js +3713 -3229
  101. package/dist/tsembed.js +3708 -3224
  102. package/dist/visual-embed-sdk-react-full.d.ts +643 -63
  103. package/dist/visual-embed-sdk-react.d.ts +643 -63
  104. package/dist/visual-embed-sdk.d.ts +658 -65
  105. package/lib/package.json +1 -1
  106. package/lib/src/css-variables.d.ts +140 -0
  107. package/lib/src/css-variables.d.ts.map +1 -1
  108. package/lib/src/embed/app.d.ts +62 -1
  109. package/lib/src/embed/app.d.ts.map +1 -1
  110. package/lib/src/embed/app.js +58 -7
  111. package/lib/src/embed/app.js.map +1 -1
  112. package/lib/src/embed/app.spec.js +192 -2
  113. package/lib/src/embed/app.spec.js.map +1 -1
  114. package/lib/src/embed/auto-frame-renderer.js +7 -2
  115. package/lib/src/embed/auto-frame-renderer.js.map +1 -1
  116. package/lib/src/embed/auto-frame-renderer.spec.js +387 -8
  117. package/lib/src/embed/auto-frame-renderer.spec.js.map +1 -1
  118. package/lib/src/embed/base.d.ts +1 -0
  119. package/lib/src/embed/base.d.ts.map +1 -1
  120. package/lib/src/embed/base.js +11 -0
  121. package/lib/src/embed/base.js.map +1 -1
  122. package/lib/src/embed/base.spec.js +22 -1
  123. package/lib/src/embed/base.spec.js.map +1 -1
  124. package/lib/src/embed/bodyless-conversation.spec.js +86 -0
  125. package/lib/src/embed/bodyless-conversation.spec.js.map +1 -1
  126. package/lib/src/embed/conversation.d.ts +16 -1
  127. package/lib/src/embed/conversation.d.ts.map +1 -1
  128. package/lib/src/embed/conversation.js +5 -1
  129. package/lib/src/embed/conversation.js.map +1 -1
  130. package/lib/src/embed/conversation.spec.js +27 -1
  131. package/lib/src/embed/conversation.spec.js.map +1 -1
  132. package/lib/src/embed/liveboard.d.ts +47 -1
  133. package/lib/src/embed/liveboard.d.ts.map +1 -1
  134. package/lib/src/embed/liveboard.js +48 -7
  135. package/lib/src/embed/liveboard.js.map +1 -1
  136. package/lib/src/embed/liveboard.spec.js +129 -1
  137. package/lib/src/embed/liveboard.spec.js.map +1 -1
  138. package/lib/src/embed/spotter-viz-utils.d.ts +85 -0
  139. package/lib/src/embed/spotter-viz-utils.d.ts.map +1 -0
  140. package/lib/src/embed/spotter-viz-utils.js +13 -0
  141. package/lib/src/embed/spotter-viz-utils.js.map +1 -0
  142. package/lib/src/embed/spotter-viz-utils.spec.d.ts +2 -0
  143. package/lib/src/embed/spotter-viz-utils.spec.d.ts.map +1 -0
  144. package/lib/src/embed/spotter-viz-utils.spec.js +29 -0
  145. package/lib/src/embed/spotter-viz-utils.spec.js.map +1 -0
  146. package/lib/src/embed/ts-embed.d.ts +58 -38
  147. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  148. package/lib/src/embed/ts-embed.js +248 -152
  149. package/lib/src/embed/ts-embed.js.map +1 -1
  150. package/lib/src/embed/ts-embed.spec.js +369 -123
  151. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  152. package/lib/src/index.d.ts +2 -1
  153. package/lib/src/index.d.ts.map +1 -1
  154. package/lib/src/index.js.map +1 -1
  155. package/lib/src/react/index.d.ts.map +1 -1
  156. package/lib/src/react/index.js +3 -0
  157. package/lib/src/react/index.js.map +1 -1
  158. package/lib/src/types.d.ts +267 -27
  159. package/lib/src/types.d.ts.map +1 -1
  160. package/lib/src/types.js +223 -19
  161. package/lib/src/types.js.map +1 -1
  162. package/lib/src/utils/authService/tokenizedAuthService.spec.js +6 -7
  163. package/lib/src/utils/authService/tokenizedAuthService.spec.js.map +1 -1
  164. package/lib/src/utils/logger.js +2 -1
  165. package/lib/src/utils/logger.js.map +1 -1
  166. package/lib/src/utils/logger.spec.d.ts +1 -0
  167. package/lib/src/utils/logger.spec.d.ts.map +1 -1
  168. package/lib/src/utils/logger.spec.js +10 -9
  169. package/lib/src/utils/logger.spec.js.map +1 -1
  170. package/lib/src/utils.d.ts +4 -1
  171. package/lib/src/utils.d.ts.map +1 -1
  172. package/lib/src/utils.js +103 -9
  173. package/lib/src/utils.js.map +1 -1
  174. package/lib/src/utils.spec.js +164 -5
  175. package/lib/src/utils.spec.js.map +1 -1
  176. package/lib/src/visual-embed-sdk.d.ts +658 -65
  177. package/package.json +1 -1
  178. package/src/css-variables.ts +175 -1
  179. package/src/embed/app.spec.ts +247 -3
  180. package/src/embed/app.ts +125 -5
  181. package/src/embed/auto-frame-renderer.spec.ts +457 -58
  182. package/src/embed/auto-frame-renderer.ts +7 -2
  183. package/src/embed/base.spec.ts +25 -1
  184. package/src/embed/base.ts +19 -5
  185. package/src/embed/bodyless-conversation.spec.ts +93 -0
  186. package/src/embed/conversation.spec.ts +34 -0
  187. package/src/embed/conversation.ts +22 -1
  188. package/src/embed/liveboard.spec.ts +149 -1
  189. package/src/embed/liveboard.ts +102 -6
  190. package/src/embed/spotter-viz-utils.spec.ts +30 -0
  191. package/src/embed/spotter-viz-utils.ts +94 -0
  192. package/src/embed/ts-embed.spec.ts +532 -234
  193. package/src/embed/ts-embed.ts +383 -257
  194. package/src/index.ts +3 -0
  195. package/src/react/index.tsx +3 -0
  196. package/src/types.ts +284 -23
  197. package/src/utils/authService/tokenizedAuthService.spec.ts +6 -6
  198. package/src/utils/logger.spec.ts +11 -9
  199. package/src/utils/logger.ts +2 -2
  200. package/src/utils.spec.ts +200 -4
  201. package/src/utils.ts +128 -9
package/src/embed/app.ts CHANGED
@@ -9,7 +9,7 @@
9
9
  */
10
10
 
11
11
  import { logger } from '../utils/logger';
12
- import { calculateVisibleElementData, getQueryParamString, isUndefined, isValidCssMargin, setParamIfDefined } from '../utils';
12
+ import { calculateVisibleElementData, getEffectiveClippingAncestors, getQueryParamString, getScrollableAncestors, isUndefined, isValidCssMargin, setParamIfDefined } from '../utils';
13
13
  import {
14
14
  Param,
15
15
  DOMSelector,
@@ -19,10 +19,12 @@ import {
19
19
  AllEmbedViewConfig,
20
20
  DefaultAppInitData,
21
21
  VisualizationOverrides,
22
+ SpotterFileUploadFileTypes,
22
23
  } from '../types';
23
24
  import { V1Embed } from './ts-embed';
24
25
  import { SpotterChatViewConfig, SpotterSidebarViewConfig } from './conversation';
25
26
  import { buildSpotterSidebarAppInitData } from './spotter-utils';
27
+ import { SpotterVizConfig, buildSpotterVizAppInitData } from './spotter-viz-utils';
26
28
 
27
29
  /**
28
30
  * Pages within the ThoughtSpot app that can be embedded.
@@ -116,6 +118,14 @@ export enum HomePage {
116
118
  * with styling changes.
117
119
  */
118
120
  ModularWithStylingChanges = 'v3',
121
+ /**
122
+ * Focused (v4) introduces the V4 homepage experience
123
+ * in which Watchlist and recents and incorporated together
124
+ * to form a more focused homepage.
125
+ * Pre-requisite : spotter enablement
126
+ * @version SDK: 1.50.0 | ThoughtSpot Cloud: 26.7.0.cl
127
+ */
128
+ Focused = 'v4',
119
129
  }
120
130
 
121
131
  /**
@@ -551,6 +561,22 @@ export interface AppViewConfig extends AllEmbedViewConfig {
551
561
  */
552
562
  isUnifiedSearchExperienceEnabled?: boolean;
553
563
 
564
+ /**
565
+ * This flag is used to enable the new connection experience for AppEmbed.
566
+ *
567
+ * Supported embed types: `AppEmbed`
568
+ * @version SDK: 1.51.0 | ThoughtSpot Cloud: 26.8.0.cl
569
+ * @default false
570
+ * @example
571
+ * ```js
572
+ * const embed = new AppEmbed('#tsEmbed', {
573
+ * ... // other embed view config
574
+ * newConnectionsExperience: true,
575
+ * })
576
+ * ```
577
+ */
578
+ newConnectionsExperience?: boolean;
579
+
554
580
  /**
555
581
  * This flag is used to enable/disable the styling and grouping in a Liveboard. Use {@link isLiveboardMasterpiecesEnabled} instead.
556
582
  * @deprecated This flag is deprecated.
@@ -656,6 +682,17 @@ export interface AppViewConfig extends AllEmbedViewConfig {
656
682
  * ```
657
683
  */
658
684
  lazyLoadingForFullHeight?: boolean;
685
+ /**
686
+ * This flag is used to enable container-aware full height lazy loading.
687
+ *
688
+ * Use this when the embed is rendered inside a scrollable or clipping
689
+ * container instead of relying on the browser window as the only viewport.
690
+ *
691
+ * @type {boolean}
692
+ * @default false
693
+ * @hidden
694
+ */
695
+ enableScrollableContainerLazyLoading?: boolean;
659
696
 
660
697
  /**
661
698
  * The margin to be used for lazy loading.
@@ -744,6 +781,29 @@ export interface AppViewConfig extends AllEmbedViewConfig {
744
781
  * ```
745
782
  */
746
783
  spotterChatConfig?: SpotterChatViewConfig;
784
+ /**
785
+ * Configuration for the SpotterViz interface shown on the Liveboard.
786
+ * Customize the brand name, description, chat input placeholder,
787
+ * starter prompts, and visibility of starter prompts in the SpotterViz panel.
788
+ *
789
+ * Supported embed types: `AppEmbed`, `LiveboardEmbed`
790
+ * @version SDK: 1.50.0 | ThoughtSpot Cloud: 26.7.0.cl
791
+ * @example
792
+ * ```js
793
+ * const embed = new AppEmbed('#embed-container', {
794
+ * ... // other options
795
+ * spotterViz: {
796
+ * brandName: 'MyBrand',
797
+ * brandHeadline: 'Hi, there! I\'m',
798
+ * description: 'Ask questions about your data',
799
+ * inputChatPlaceholder: 'Ask a question...',
800
+ * hideStarterPrompts: false,
801
+ * customStarterPrompts: [{ id: '1', displayText: 'Top products', fullPrompt: 'What are the top products by revenue?' }]
802
+ * },
803
+ * })
804
+ * ```
805
+ */
806
+ spotterViz?: SpotterVizConfig;
747
807
  /**
748
808
  * Enables the stop answer generation button in the Spotter embed UI,
749
809
  * allowing users to interrupt an ongoing answer generation.
@@ -814,6 +874,7 @@ export interface AppViewConfig extends AllEmbedViewConfig {
814
874
  export interface AppEmbedAppInitData extends DefaultAppInitData {
815
875
  embedParams?: {
816
876
  spotterSidebarConfig?: SpotterSidebarViewConfig;
877
+ spotterVizConfig?: SpotterVizConfig;
817
878
  };
818
879
  }
819
880
 
@@ -826,6 +887,10 @@ export class AppEmbed extends V1Embed {
826
887
 
827
888
  private defaultHeight = 500;
828
889
 
890
+ private lazyLoadScrollContainers: HTMLElement[] = [];
891
+
892
+ private lazyLoadResizeObserver: ResizeObserver | undefined;
893
+
829
894
  constructor(domSelector: DOMSelector, viewConfig: AppViewConfig) {
830
895
  viewConfig.embedComponentType = 'AppEmbed';
831
896
  super(domSelector, viewConfig);
@@ -854,7 +919,12 @@ export class AppEmbed extends V1Embed {
854
919
  */
855
920
  protected async getAppInitData(): Promise<AppEmbedAppInitData> {
856
921
  const defaultAppInitData = await super.getAppInitData();
857
- return buildSpotterSidebarAppInitData(defaultAppInitData, this.viewConfig, this.handleError.bind(this));
922
+ const sidebarInitData = buildSpotterSidebarAppInitData(
923
+ defaultAppInitData,
924
+ this.viewConfig,
925
+ this.handleError.bind(this),
926
+ );
927
+ return buildSpotterVizAppInitData(sidebarInitData, this.viewConfig);
858
928
  }
859
929
 
860
930
  /**
@@ -875,6 +945,7 @@ export class AppEmbed extends V1Embed {
875
945
  hideApplicationSwitcher,
876
946
  hideOrgSwitcher,
877
947
  enableSearchAssist,
948
+ newConnectionsExperience,
878
949
  fullHeight,
879
950
  dataPanelV2 = true,
880
951
  hideLiveboardHeader = false,
@@ -957,10 +1028,18 @@ export class AppEmbed extends V1Embed {
957
1028
  const {
958
1029
  hideToolResponseCardBranding,
959
1030
  toolResponseCardBrandingLabel,
1031
+ spotterFileUploadEnabled,
1032
+ spotterFileUploadFileTypes,
960
1033
  } = spotterChatConfig;
961
1034
 
962
1035
  setParamIfDefined(params, Param.HideToolResponseCardBranding, hideToolResponseCardBranding, true);
963
1036
  setParamIfDefined(params, Param.ToolResponseCardBrandingLabel, toolResponseCardBrandingLabel);
1037
+ if (spotterFileUploadEnabled !== undefined) {
1038
+ params[Param.SpotterFileUploadEnabled] = spotterFileUploadEnabled;
1039
+ }
1040
+ if (spotterFileUploadFileTypes !== undefined) {
1041
+ params[Param.SpotterFileUploadFileTypes] = JSON.stringify(spotterFileUploadFileTypes);
1042
+ }
964
1043
  }
965
1044
 
966
1045
  if (hideObjectSearch) {
@@ -999,6 +1078,10 @@ export class AppEmbed extends V1Embed {
999
1078
  params[Param.EnableSearchAssist] = enableSearchAssist;
1000
1079
  }
1001
1080
 
1081
+ if (newConnectionsExperience !== undefined) {
1082
+ params[Param.EnableConnectionNewExperience] = newConnectionsExperience;
1083
+ }
1084
+
1002
1085
  if (enable2ColumnLayout !== undefined) {
1003
1086
  params[Param.Enable2ColumnLayout] = enable2ColumnLayout;
1004
1087
  }
@@ -1122,6 +1205,10 @@ export class AppEmbed extends V1Embed {
1122
1205
  if (discoveryExperience.listPageVersion !== undefined) {
1123
1206
  params[Param.ListPageVersion] = discoveryExperience.listPageVersion;
1124
1207
  }
1208
+
1209
+ if (discoveryExperience.homePage === HomePage.Focused) {
1210
+ params[Param.HomepageVersion] = HomePage.Focused;
1211
+ }
1125
1212
  }
1126
1213
 
1127
1214
  const queryParams = getQueryParamString(params, true);
@@ -1130,7 +1217,10 @@ export class AppEmbed extends V1Embed {
1130
1217
  }
1131
1218
 
1132
1219
  private sendFullHeightLazyLoadData = () => {
1133
- const data = calculateVisibleElementData(this.iFrame);
1220
+ const data = calculateVisibleElementData(
1221
+ this.iFrame,
1222
+ this.viewConfig.enableScrollableContainerLazyLoading,
1223
+ );
1134
1224
  // this should be fired only if the lazyLoadingForFullHeight and fullHeight are true
1135
1225
  if(this.viewConfig.lazyLoadingForFullHeight && this.viewConfig.fullHeight){
1136
1226
  this.trigger(HostEvent.VisibleEmbedCoordinates, data);
@@ -1145,7 +1235,10 @@ export class AppEmbed extends V1Embed {
1145
1235
  */
1146
1236
  private requestVisibleEmbedCoordinatesHandler = (data: MessagePayload, responder: any) => {
1147
1237
  logger.info('Sending RequestVisibleEmbedCoordinates', data);
1148
- const visibleCoordinatesData = calculateVisibleElementData(this.iFrame);
1238
+ const visibleCoordinatesData = calculateVisibleElementData(
1239
+ this.iFrame,
1240
+ this.viewConfig.enableScrollableContainerLazyLoading,
1241
+ );
1149
1242
  responder({ type: EmbedEvent.RequestVisibleEmbedCoordinates, data: visibleCoordinatesData });
1150
1243
  }
1151
1244
 
@@ -1294,17 +1387,44 @@ export class AppEmbed extends V1Embed {
1294
1387
  }
1295
1388
 
1296
1389
  private registerLazyLoadEvents() {
1390
+ if (!this.iFrame) {
1391
+ return;
1392
+ }
1297
1393
  if (this.viewConfig.fullHeight && this.viewConfig.lazyLoadingForFullHeight) {
1394
+ this.unregisterLazyLoadEvents();
1298
1395
  // TODO: Use passive: true, install modernizr to check for passive
1299
1396
  window.addEventListener('resize', this.sendFullHeightLazyLoadData);
1300
1397
  window.addEventListener('scroll', this.sendFullHeightLazyLoadData, true);
1398
+ if (!this.viewConfig.enableScrollableContainerLazyLoading) {
1399
+ return;
1400
+ }
1401
+ this.lazyLoadScrollContainers = getScrollableAncestors(this.iFrame);
1402
+ this.lazyLoadScrollContainers.forEach((scrollContainer) => {
1403
+ scrollContainer.addEventListener('scroll', this.sendFullHeightLazyLoadData);
1404
+ });
1405
+ if (typeof ResizeObserver !== 'undefined') {
1406
+ const resizeTargets = new Set([
1407
+ this.iFrame.parentElement,
1408
+ ...getEffectiveClippingAncestors(this.iFrame),
1409
+ ].filter(Boolean) as HTMLElement[]);
1410
+ this.lazyLoadResizeObserver = new ResizeObserver(this.sendFullHeightLazyLoadData);
1411
+ resizeTargets.forEach((resizeTarget) => {
1412
+ this.lazyLoadResizeObserver.observe(resizeTarget);
1413
+ });
1414
+ }
1301
1415
  }
1302
1416
  }
1303
1417
 
1304
1418
  private unregisterLazyLoadEvents() {
1305
1419
  if (this.viewConfig.fullHeight && this.viewConfig.lazyLoadingForFullHeight) {
1306
1420
  window.removeEventListener('resize', this.sendFullHeightLazyLoadData);
1307
- window.removeEventListener('scroll', this.sendFullHeightLazyLoadData);
1421
+ window.removeEventListener('scroll', this.sendFullHeightLazyLoadData, true);
1422
+ this.lazyLoadResizeObserver?.disconnect();
1423
+ this.lazyLoadResizeObserver = undefined;
1424
+ this.lazyLoadScrollContainers.forEach((scrollContainer) => {
1425
+ scrollContainer.removeEventListener('scroll', this.sendFullHeightLazyLoadData);
1426
+ });
1427
+ this.lazyLoadScrollContainers = [];
1308
1428
  }
1309
1429
  }
1310
1430