@thoughtspot/visual-embed-sdk 1.52.0 → 1.52.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (279) hide show
  1. package/cjs/package.json +9 -1
  2. package/cjs/src/contracts/contracts.spec.d.ts +2 -0
  3. package/cjs/src/contracts/contracts.spec.d.ts.map +1 -0
  4. package/cjs/src/contracts/contracts.spec.js +345 -0
  5. package/cjs/src/contracts/contracts.spec.js.map +1 -0
  6. package/cjs/src/contracts/embed-event-payloads.d.ts +73 -0
  7. package/cjs/src/contracts/embed-event-payloads.d.ts.map +1 -0
  8. package/cjs/src/contracts/embed-event-payloads.js +3 -0
  9. package/cjs/src/contracts/embed-event-payloads.js.map +1 -0
  10. package/cjs/src/contracts/host-event-contracts.d.ts +378 -0
  11. package/cjs/src/contracts/host-event-contracts.d.ts.map +1 -0
  12. package/cjs/src/contracts/host-event-contracts.js +3 -0
  13. package/cjs/src/contracts/host-event-contracts.js.map +1 -0
  14. package/cjs/src/contracts/index.d.ts +22 -0
  15. package/cjs/src/contracts/index.d.ts.map +1 -0
  16. package/cjs/src/contracts/index.js +33 -0
  17. package/cjs/src/contracts/index.js.map +1 -0
  18. package/cjs/src/contracts/ui-passthrough-contracts.d.ts +277 -0
  19. package/cjs/src/contracts/ui-passthrough-contracts.d.ts.map +1 -0
  20. package/cjs/src/{embed/hostEventClient/contracts.js → contracts/ui-passthrough-contracts.js} +6 -2
  21. package/cjs/src/contracts/ui-passthrough-contracts.js.map +1 -0
  22. package/cjs/src/embed/app.d.ts +17 -140
  23. package/cjs/src/embed/app.d.ts.map +1 -1
  24. package/cjs/src/embed/app.js +20 -120
  25. package/cjs/src/embed/app.js.map +1 -1
  26. package/cjs/src/embed/app.spec.js +70 -26
  27. package/cjs/src/embed/app.spec.js.map +1 -1
  28. package/cjs/src/embed/events.spec.js +12 -2
  29. package/cjs/src/embed/events.spec.js.map +1 -1
  30. package/cjs/src/embed/hostEventClient/host-event-client.d.ts +3 -2
  31. package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  32. package/cjs/src/embed/hostEventClient/host-event-client.js +23 -18
  33. package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
  34. package/cjs/src/embed/hostEventClient/host-event-client.spec.js +36 -36
  35. package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  36. package/cjs/src/embed/hostEventClient/utils.d.ts +1 -1
  37. package/cjs/src/embed/hostEventClient/utils.d.ts.map +1 -1
  38. package/cjs/src/embed/hostEventClient/utils.js +3 -3
  39. package/cjs/src/embed/hostEventClient/utils.js.map +1 -1
  40. package/cjs/src/embed/liveboard.d.ts +9 -161
  41. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  42. package/cjs/src/embed/liveboard.js +66 -134
  43. package/cjs/src/embed/liveboard.js.map +1 -1
  44. package/cjs/src/embed/liveboard.spec.js +211 -28
  45. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  46. package/cjs/src/embed/search.d.ts +14 -0
  47. package/cjs/src/embed/search.d.ts.map +1 -1
  48. package/cjs/src/embed/search.js +4 -1
  49. package/cjs/src/embed/search.js.map +1 -1
  50. package/cjs/src/embed/search.spec.js +65 -0
  51. package/cjs/src/embed/search.spec.js.map +1 -1
  52. package/cjs/src/embed/ts-embed.d.ts +17 -22
  53. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  54. package/cjs/src/embed/ts-embed.js +82 -56
  55. package/cjs/src/embed/ts-embed.js.map +1 -1
  56. package/cjs/src/embed/ts-embed.spec.js +325 -17
  57. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  58. package/cjs/src/full-height.d.ts +137 -0
  59. package/cjs/src/full-height.d.ts.map +1 -0
  60. package/cjs/src/full-height.js +272 -0
  61. package/cjs/src/full-height.js.map +1 -0
  62. package/cjs/src/full-height.spec.d.ts +2 -0
  63. package/cjs/src/full-height.spec.d.ts.map +1 -0
  64. package/cjs/src/full-height.spec.js +835 -0
  65. package/cjs/src/full-height.spec.js.map +1 -0
  66. package/cjs/src/index.d.ts +4 -3
  67. package/cjs/src/index.d.ts.map +1 -1
  68. package/cjs/src/index.js +3 -3
  69. package/cjs/src/index.js.map +1 -1
  70. package/cjs/src/react/all-types-export.d.ts +1 -1
  71. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  72. package/cjs/src/react/all-types-export.js.map +1 -1
  73. package/cjs/src/react/all-types-export.parity.spec.js +55 -3
  74. package/cjs/src/react/all-types-export.parity.spec.js.map +1 -1
  75. package/cjs/src/types.d.ts +540 -3
  76. package/cjs/src/types.d.ts.map +1 -1
  77. package/cjs/src/types.js +326 -1
  78. package/cjs/src/types.js.map +1 -1
  79. package/cjs/src/utils/processTrigger.d.ts +3 -1
  80. package/cjs/src/utils/processTrigger.d.ts.map +1 -1
  81. package/cjs/src/utils/processTrigger.js +19 -51
  82. package/cjs/src/utils/processTrigger.js.map +1 -1
  83. package/cjs/src/utils/transport/iframe-transport.d.ts +55 -0
  84. package/cjs/src/utils/transport/iframe-transport.d.ts.map +1 -0
  85. package/cjs/src/utils/transport/iframe-transport.js +108 -0
  86. package/cjs/src/utils/transport/iframe-transport.js.map +1 -0
  87. package/cjs/src/utils/transport/iframe-transport.spec.d.ts +2 -0
  88. package/cjs/src/utils/transport/iframe-transport.spec.d.ts.map +1 -0
  89. package/cjs/src/utils/transport/iframe-transport.spec.js +140 -0
  90. package/cjs/src/utils/transport/iframe-transport.spec.js.map +1 -0
  91. package/cjs/src/utils.d.ts +18 -0
  92. package/cjs/src/utils.d.ts.map +1 -1
  93. package/cjs/src/utils.js +39 -1
  94. package/cjs/src/utils.js.map +1 -1
  95. package/cjs/src/utils.spec.js +62 -0
  96. package/cjs/src/utils.spec.js.map +1 -1
  97. package/dist/{index-BMppCU63.js → index-C1pmYb5H.js} +1 -1
  98. package/dist/src/contracts/contracts.spec.d.ts +2 -0
  99. package/dist/src/contracts/contracts.spec.d.ts.map +1 -0
  100. package/dist/src/contracts/embed-event-payloads.d.ts +73 -0
  101. package/dist/src/contracts/embed-event-payloads.d.ts.map +1 -0
  102. package/dist/src/contracts/host-event-contracts.d.ts +378 -0
  103. package/dist/src/contracts/host-event-contracts.d.ts.map +1 -0
  104. package/dist/src/contracts/index.d.ts +22 -0
  105. package/dist/src/contracts/index.d.ts.map +1 -0
  106. package/dist/src/contracts/ui-passthrough-contracts.d.ts +277 -0
  107. package/dist/src/contracts/ui-passthrough-contracts.d.ts.map +1 -0
  108. package/dist/src/embed/app.d.ts +17 -140
  109. package/dist/src/embed/app.d.ts.map +1 -1
  110. package/dist/src/embed/hostEventClient/host-event-client.d.ts +3 -2
  111. package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  112. package/dist/src/embed/hostEventClient/utils.d.ts +1 -1
  113. package/dist/src/embed/hostEventClient/utils.d.ts.map +1 -1
  114. package/dist/src/embed/liveboard.d.ts +9 -161
  115. package/dist/src/embed/liveboard.d.ts.map +1 -1
  116. package/dist/src/embed/search.d.ts +14 -0
  117. package/dist/src/embed/search.d.ts.map +1 -1
  118. package/dist/src/embed/ts-embed.d.ts +17 -22
  119. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  120. package/dist/src/full-height.d.ts +137 -0
  121. package/dist/src/full-height.d.ts.map +1 -0
  122. package/dist/src/full-height.spec.d.ts +2 -0
  123. package/dist/src/full-height.spec.d.ts.map +1 -0
  124. package/dist/src/index.d.ts +4 -3
  125. package/dist/src/index.d.ts.map +1 -1
  126. package/dist/src/react/all-types-export.d.ts +1 -1
  127. package/dist/src/react/all-types-export.d.ts.map +1 -1
  128. package/dist/src/types.d.ts +540 -3
  129. package/dist/src/types.d.ts.map +1 -1
  130. package/dist/src/utils/processTrigger.d.ts +3 -1
  131. package/dist/src/utils/processTrigger.d.ts.map +1 -1
  132. package/dist/src/utils/transport/iframe-transport.d.ts +55 -0
  133. package/dist/src/utils/transport/iframe-transport.d.ts.map +1 -0
  134. package/dist/src/utils/transport/iframe-transport.spec.d.ts +2 -0
  135. package/dist/src/utils/transport/iframe-transport.spec.d.ts.map +1 -0
  136. package/dist/src/utils.d.ts +18 -0
  137. package/dist/src/utils.d.ts.map +1 -1
  138. package/dist/tsembed-react.es.js +925 -363
  139. package/dist/tsembed-react.js +924 -362
  140. package/dist/tsembed.es.js +925 -363
  141. package/dist/tsembed.js +924 -362
  142. package/dist/visual-embed-sdk-react-full.d.ts +1357 -656
  143. package/dist/visual-embed-sdk-react.d.ts +1257 -606
  144. package/dist/visual-embed-sdk.d.ts +1320 -642
  145. package/lib/package.json +9 -1
  146. package/lib/src/contracts/contracts.spec.d.ts +2 -0
  147. package/lib/src/contracts/contracts.spec.d.ts.map +1 -0
  148. package/lib/src/contracts/contracts.spec.js +342 -0
  149. package/lib/src/contracts/contracts.spec.js.map +1 -0
  150. package/lib/src/contracts/embed-event-payloads.d.ts +73 -0
  151. package/lib/src/contracts/embed-event-payloads.d.ts.map +1 -0
  152. package/lib/src/contracts/embed-event-payloads.js +2 -0
  153. package/lib/src/contracts/embed-event-payloads.js.map +1 -0
  154. package/lib/src/contracts/host-event-contracts.d.ts +378 -0
  155. package/lib/src/contracts/host-event-contracts.d.ts.map +1 -0
  156. package/lib/src/contracts/host-event-contracts.js +2 -0
  157. package/lib/src/contracts/host-event-contracts.js.map +1 -0
  158. package/lib/src/contracts/index.d.ts +22 -0
  159. package/lib/src/contracts/index.d.ts.map +1 -0
  160. package/lib/src/contracts/index.js +22 -0
  161. package/lib/src/contracts/index.js.map +1 -0
  162. package/lib/src/contracts/ui-passthrough-contracts.d.ts +277 -0
  163. package/lib/src/contracts/ui-passthrough-contracts.d.ts.map +1 -0
  164. package/lib/src/{embed/hostEventClient/contracts.js → contracts/ui-passthrough-contracts.js} +6 -2
  165. package/lib/src/contracts/ui-passthrough-contracts.js.map +1 -0
  166. package/lib/src/embed/app.d.ts +17 -140
  167. package/lib/src/embed/app.d.ts.map +1 -1
  168. package/lib/src/embed/app.js +22 -122
  169. package/lib/src/embed/app.js.map +1 -1
  170. package/lib/src/embed/app.spec.js +70 -26
  171. package/lib/src/embed/app.spec.js.map +1 -1
  172. package/lib/src/embed/events.spec.js +12 -2
  173. package/lib/src/embed/events.spec.js.map +1 -1
  174. package/lib/src/embed/hostEventClient/host-event-client.d.ts +3 -2
  175. package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  176. package/lib/src/embed/hostEventClient/host-event-client.js +6 -1
  177. package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
  178. package/lib/src/embed/hostEventClient/host-event-client.spec.js +1 -1
  179. package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  180. package/lib/src/embed/hostEventClient/utils.d.ts +1 -1
  181. package/lib/src/embed/hostEventClient/utils.d.ts.map +1 -1
  182. package/lib/src/embed/hostEventClient/utils.js +1 -1
  183. package/lib/src/embed/hostEventClient/utils.js.map +1 -1
  184. package/lib/src/embed/liveboard.d.ts +9 -161
  185. package/lib/src/embed/liveboard.d.ts.map +1 -1
  186. package/lib/src/embed/liveboard.js +67 -135
  187. package/lib/src/embed/liveboard.js.map +1 -1
  188. package/lib/src/embed/liveboard.spec.js +211 -28
  189. package/lib/src/embed/liveboard.spec.js.map +1 -1
  190. package/lib/src/embed/search.d.ts +14 -0
  191. package/lib/src/embed/search.d.ts.map +1 -1
  192. package/lib/src/embed/search.js +4 -1
  193. package/lib/src/embed/search.js.map +1 -1
  194. package/lib/src/embed/search.spec.js +65 -0
  195. package/lib/src/embed/search.spec.js.map +1 -1
  196. package/lib/src/embed/ts-embed.d.ts +17 -22
  197. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  198. package/lib/src/embed/ts-embed.js +82 -56
  199. package/lib/src/embed/ts-embed.js.map +1 -1
  200. package/lib/src/embed/ts-embed.spec.js +322 -14
  201. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  202. package/lib/src/full-height.d.ts +137 -0
  203. package/lib/src/full-height.d.ts.map +1 -0
  204. package/lib/src/full-height.js +268 -0
  205. package/lib/src/full-height.js.map +1 -0
  206. package/lib/src/full-height.spec.d.ts +2 -0
  207. package/lib/src/full-height.spec.d.ts.map +1 -0
  208. package/lib/src/full-height.spec.js +833 -0
  209. package/lib/src/full-height.spec.js.map +1 -0
  210. package/lib/src/index.d.ts +4 -3
  211. package/lib/src/index.d.ts.map +1 -1
  212. package/lib/src/index.js +1 -1
  213. package/lib/src/index.js.map +1 -1
  214. package/lib/src/react/all-types-export.d.ts +1 -1
  215. package/lib/src/react/all-types-export.d.ts.map +1 -1
  216. package/lib/src/react/all-types-export.js.map +1 -1
  217. package/lib/src/react/all-types-export.parity.spec.js +55 -3
  218. package/lib/src/react/all-types-export.parity.spec.js.map +1 -1
  219. package/lib/src/types.d.ts +540 -3
  220. package/lib/src/types.d.ts.map +1 -1
  221. package/lib/src/types.js +326 -1
  222. package/lib/src/types.js.map +1 -1
  223. package/lib/src/utils/processTrigger.d.ts +3 -1
  224. package/lib/src/utils/processTrigger.d.ts.map +1 -1
  225. package/lib/src/utils/processTrigger.js +19 -51
  226. package/lib/src/utils/processTrigger.js.map +1 -1
  227. package/lib/src/utils/transport/iframe-transport.d.ts +55 -0
  228. package/lib/src/utils/transport/iframe-transport.d.ts.map +1 -0
  229. package/lib/src/utils/transport/iframe-transport.js +101 -0
  230. package/lib/src/utils/transport/iframe-transport.js.map +1 -0
  231. package/lib/src/utils/transport/iframe-transport.spec.d.ts +2 -0
  232. package/lib/src/utils/transport/iframe-transport.spec.d.ts.map +1 -0
  233. package/lib/src/utils/transport/iframe-transport.spec.js +138 -0
  234. package/lib/src/utils/transport/iframe-transport.spec.js.map +1 -0
  235. package/lib/src/utils.d.ts +18 -0
  236. package/lib/src/utils.d.ts.map +1 -1
  237. package/lib/src/utils.js +37 -0
  238. package/lib/src/utils.js.map +1 -1
  239. package/lib/src/utils.spec.js +63 -1
  240. package/lib/src/utils.spec.js.map +1 -1
  241. package/lib/src/visual-embed-sdk.d.ts +1320 -642
  242. package/package.json +9 -1
  243. package/src/contracts/contracts.spec.ts +392 -0
  244. package/src/contracts/embed-event-payloads.ts +83 -0
  245. package/src/contracts/host-event-contracts.ts +456 -0
  246. package/src/contracts/index.ts +53 -0
  247. package/src/contracts/ui-passthrough-contracts.ts +301 -0
  248. package/src/embed/app.spec.ts +86 -34
  249. package/src/embed/app.ts +37 -264
  250. package/src/embed/events.spec.ts +14 -2
  251. package/src/embed/hostEventClient/host-event-client.spec.ts +2 -2
  252. package/src/embed/hostEventClient/host-event-client.ts +18 -5
  253. package/src/embed/hostEventClient/utils.ts +2 -1
  254. package/src/embed/liveboard.spec.ts +257 -38
  255. package/src/embed/liveboard.ts +75 -296
  256. package/src/embed/search.spec.ts +80 -0
  257. package/src/embed/search.ts +20 -0
  258. package/src/embed/ts-embed.spec.ts +448 -15
  259. package/src/embed/ts-embed.ts +109 -66
  260. package/src/full-height.spec.ts +1008 -0
  261. package/src/full-height.ts +361 -0
  262. package/src/index.ts +93 -5
  263. package/src/react/all-types-export.parity.spec.ts +63 -3
  264. package/src/react/all-types-export.ts +45 -0
  265. package/src/types.ts +540 -1
  266. package/src/utils/processTrigger.ts +28 -58
  267. package/src/utils/transport/iframe-transport.spec.ts +177 -0
  268. package/src/utils/transport/iframe-transport.ts +122 -0
  269. package/src/utils.spec.ts +71 -0
  270. package/src/utils.ts +38 -0
  271. package/cjs/src/embed/hostEventClient/contracts.d.ts +0 -231
  272. package/cjs/src/embed/hostEventClient/contracts.d.ts.map +0 -1
  273. package/cjs/src/embed/hostEventClient/contracts.js.map +0 -1
  274. package/dist/src/embed/hostEventClient/contracts.d.ts +0 -231
  275. package/dist/src/embed/hostEventClient/contracts.d.ts.map +0 -1
  276. package/lib/src/embed/hostEventClient/contracts.d.ts +0 -231
  277. package/lib/src/embed/hostEventClient/contracts.d.ts.map +0 -1
  278. package/lib/src/embed/hostEventClient/contracts.js.map +0 -1
  279. package/src/embed/hostEventClient/contracts.ts +0 -262
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Copyright (c) 2025
3
+ *
4
+ * Full-height support for the Liveboard and app embeds.
5
+ * @summary Full height
6
+ */
7
+ import { BaseViewConfig, EmbedEvent, FullHeightViewConfig, HostEvent, MessageCallback, QueryParams } from './types';
8
+ /**
9
+ * The slice of an embed's view config the full-height controller reads.
10
+ */
11
+ export type FullHeightControllerViewConfig = FullHeightViewConfig & Pick<BaseViewConfig, 'frameParams'>;
12
+ /**
13
+ * The subset of the embed the full-height controller drives. Keeping this
14
+ * narrow lets the controller stay independent of the embed class hierarchy.
15
+ */
16
+ export interface FullHeightEmbedHost {
17
+ /**
18
+ * Returns the embedded iframe. The iframe only exists once the embed has
19
+ * rendered, so this is a callback rather than a value.
20
+ */
21
+ getIframe: () => HTMLIFrameElement;
22
+ /**
23
+ * Sets the height of the embed container.
24
+ */
25
+ setFrameHeight: (height: number | string) => void;
26
+ /**
27
+ * Registers an SDK-owned handler for an embed event.
28
+ */
29
+ on: (eventType: EmbedEvent, callback: MessageCallback) => void;
30
+ /**
31
+ * Sends a host event to the embedded ThoughtSpot app.
32
+ */
33
+ trigger: (hostEvent: HostEvent, data: unknown) => void;
34
+ }
35
+ /**
36
+ * Owns every piece of full-height behavior for an embed: the height
37
+ * negotiation with the ThoughtSpot app, the query parameters that switch the
38
+ * feature on, and the viewport listeners that drive lazy loading.
39
+ *
40
+ * The controller is inert unless `fullHeight` is enabled, so embeds can create
41
+ * one unconditionally.
42
+ */
43
+ export declare class FullHeightController {
44
+ private readonly host;
45
+ private scrollContainers;
46
+ private resizeObserver;
47
+ private config;
48
+ constructor(viewConfig: FullHeightControllerViewConfig, host: FullHeightEmbedHost);
49
+ /**
50
+ * The view config the controller runs on: the host app's own config with
51
+ * the lazy-loading defaults filled in. Read-only, so the only way to change
52
+ * it is through the setter, which re-resolves the defaults.
53
+ */
54
+ get viewConfig(): Readonly<FullHeightControllerViewConfig>;
55
+ /**
56
+ * Replaces the view config the controller runs on and re-resolves the
57
+ * lazy-loading defaults against it. The config the caller passes is never
58
+ * written to; the controller keeps a copy of its own.
59
+ */
60
+ set viewConfig(viewConfig: Readonly<FullHeightControllerViewConfig>);
61
+ /**
62
+ * The view config with the lazy-loading settings the embed falls back to
63
+ * when the host app has not chosen its own.
64
+ *
65
+ * Pure by design: it returns a new config rather than writing to the one it
66
+ * is given, so the host app's object is left untouched.
67
+ * @param viewConfig The embed's view config
68
+ * @returns A copy with the defaults filled in, host app choices preserved
69
+ */
70
+ private static withLazyLoadingDefaults;
71
+ /**
72
+ * Whether the host app asked for a full-height embed.
73
+ */
74
+ private get isEnabled();
75
+ /**
76
+ * Whether visualizations should load as they scroll into view, which
77
+ * requires the SDK to report the visible region of the embed.
78
+ */
79
+ private get isLazyLoadEnabled();
80
+ /**
81
+ * The floor for the frame height. `defaultHeight` is the deprecated
82
+ * spelling of `minimumHeight` and is still honored for compatibility.
83
+ */
84
+ get minimumHeight(): number;
85
+ /**
86
+ * Registers the embed event handlers the feature depends on. Called from
87
+ * the constructor, so the handlers are in place before `render`.
88
+ */
89
+ private registerEventHandlers;
90
+ /**
91
+ * Adds the full-height query parameters to the embed URL params.
92
+ * @param params The query parameters being built by the embed
93
+ */
94
+ addQueryParams(params: QueryParams): void;
95
+ /**
96
+ * Attaches the viewport listeners that keep lazy loading in sync. Call this
97
+ * once the embed has rendered and the iframe exists.
98
+ */
99
+ onRender(): void;
100
+ /**
101
+ * Detaches every listener and observer owned by the controller.
102
+ */
103
+ destroy(): void;
104
+ /**
105
+ * Sets the frame height to the height reported by the ThoughtSpot app,
106
+ * never going below the configured minimum.
107
+ */
108
+ private handleEmbedHeight;
109
+ /**
110
+ * Answers the app's request for the center of the visible embed region.
111
+ */
112
+ private handleEmbedIframeCenter;
113
+ /**
114
+ * Answers the app's request for the currently visible embed coordinates.
115
+ */
116
+ private handleRequestVisibleCoordinates;
117
+ /**
118
+ * Resets the frame height when the app navigates away from a Liveboard,
119
+ * since only Liveboard routes report a height of their own.
120
+ */
121
+ private handleRouteChange;
122
+ /**
123
+ * Pushes the visible embed region to the app so it can decide which
124
+ * visualizations to load.
125
+ */
126
+ private sendVisibleCoordinates;
127
+ private getVisibleCoordinates;
128
+ private registerLazyLoadListeners;
129
+ /**
130
+ * Tracks the ancestors that can scroll or clip the embed, so the visible
131
+ * region stays correct when the embed lives inside its own scroll
132
+ * container rather than the page.
133
+ */
134
+ private observeScrollableContainers;
135
+ private unregisterLazyLoadListeners;
136
+ }
137
+ //# sourceMappingURL=full-height.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-height.d.ts","sourceRoot":"","sources":["../../src/full-height.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACH,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,SAAS,EACT,eAAe,EAGf,WAAW,EACd,MAAM,SAAS,CAAC;AAkCjB;;GAEG;AACH,MAAM,MAAM,8BAA8B,GAAG,oBAAoB,GAC7D,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;AAExC;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAChC;;;OAGG;IACH,SAAS,EAAE,MAAM,iBAAiB,CAAC;IACnC;;OAEG;IACH,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAClD;;OAEG;IACH,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IAC/D;;OAEG;IACH,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1D;AAED;;;;;;;GAOG;AACH,qBAAa,oBAAoB;IASzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IARzB,OAAO,CAAC,gBAAgB,CAAqB;IAE7C,OAAO,CAAC,cAAc,CAA6B;IAEnD,OAAO,CAAC,MAAM,CAAiC;gBAG3C,UAAU,EAAE,8BAA8B,EACzB,IAAI,EAAE,mBAAmB;IAM9C;;;;OAIG;IACH,IAAW,UAAU,IAAI,QAAQ,CAAC,8BAA8B,CAAC,CAEhE;IAED;;;;OAIG;IACH,IAAW,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,8BAA8B,CAAC,EAEzE;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAoBtC;;OAEG;IACH,OAAO,KAAK,SAAS,GAEpB;IAED;;;OAGG;IACH,OAAO,KAAK,iBAAiB,GAE5B;IAED;;;OAGG;IACH,IAAW,aAAa,IAAI,MAAM,CAGjC;IAED;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;;OAGG;IACI,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAchD;;;OAGG;IACI,QAAQ,IAAI,IAAI;IAIvB;;OAEG;IACI,OAAO,IAAI,IAAI;IAItB;;;OAGG;IACH,OAAO,CAAC,iBAAiB,CAMvB;IAEF;;OAEG;IACH,OAAO,CAAC,uBAAuB,CAY7B;IAEF;;OAEG;IACH,OAAO,CAAC,+BAA+B,CASrC;IAEF;;;OAGG;IACH,OAAO,CAAC,iBAAiB,CASvB;IAEF;;;OAGG;IACH,OAAO,CAAC,sBAAsB,CAQ5B;IAEF,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,yBAAyB;IAejC;;;;OAIG;IACH,OAAO,CAAC,2BAA2B;IAoBnC,OAAO,CAAC,2BAA2B;CAatC"}
@@ -0,0 +1,268 @@
1
+ /**
2
+ * Copyright (c) 2025
3
+ *
4
+ * Full-height support for the Liveboard and app embeds.
5
+ * @summary Full height
6
+ */
7
+ import { EmbedEvent, HostEvent, Param, } from './types';
8
+ import { calculateElementCenter, calculateVisibleElementData, getEffectiveClippingAncestors, getScrollableAncestors, isValidCssMargin, } from './utils';
9
+ import { logger } from './utils/logger';
10
+ import { DEFAULT_LAZY_LOADING_MARGIN } from './config';
11
+ /**
12
+ * The height the embed falls back to when the host app has not configured
13
+ * `minimumHeight` or `defaultHeight`.
14
+ */
15
+ const DEFAULT_MINIMUM_HEIGHT = 500;
16
+ /**
17
+ * Routes that are part of the Liveboard experience itself. Navigating between
18
+ * these does not reset the frame height, because the ThoughtSpot app keeps
19
+ * reporting a height of its own for them.
20
+ */
21
+ const LIVEBOARD_RELATED_ROUTES = [
22
+ '/pinboard/',
23
+ '/insights/pinboard/',
24
+ '/schedules/',
25
+ '/embed/viz/',
26
+ '/embed/insights/viz/',
27
+ '/liveboard/',
28
+ '/insights/liveboard/',
29
+ '/tsl-editor/PINBOARD_ANSWER_BOOK/',
30
+ '/import-tsl/PINBOARD_ANSWER_BOOK/',
31
+ ];
32
+ /**
33
+ * Owns every piece of full-height behavior for an embed: the height
34
+ * negotiation with the ThoughtSpot app, the query parameters that switch the
35
+ * feature on, and the viewport listeners that drive lazy loading.
36
+ *
37
+ * The controller is inert unless `fullHeight` is enabled, so embeds can create
38
+ * one unconditionally.
39
+ */
40
+ export class FullHeightController {
41
+ constructor(viewConfig, host) {
42
+ this.host = host;
43
+ this.scrollContainers = [];
44
+ /**
45
+ * Sets the frame height to the height reported by the ThoughtSpot app,
46
+ * never going below the configured minimum.
47
+ */
48
+ this.handleEmbedHeight = (payload) => {
49
+ const height = Number(payload === null || payload === void 0 ? void 0 : payload.data);
50
+ if (!isNaN(height)) {
51
+ this.host.setFrameHeight(Math.max(height, this.minimumHeight));
52
+ }
53
+ this.sendVisibleCoordinates();
54
+ };
55
+ /**
56
+ * Answers the app's request for the center of the visible embed region.
57
+ */
58
+ this.handleEmbedIframeCenter = (payload, responder) => {
59
+ const iframe = this.host.getIframe();
60
+ if (!iframe) {
61
+ return;
62
+ }
63
+ responder === null || responder === void 0 ? void 0 : responder({
64
+ type: EmbedEvent.EmbedIframeCenter,
65
+ data: calculateElementCenter(iframe),
66
+ });
67
+ };
68
+ /**
69
+ * Answers the app's request for the currently visible embed coordinates.
70
+ */
71
+ this.handleRequestVisibleCoordinates = (payload, responder) => {
72
+ logger.info('Sending RequestVisibleEmbedCoordinates', payload);
73
+ responder === null || responder === void 0 ? void 0 : responder({
74
+ type: EmbedEvent.RequestVisibleEmbedCoordinates,
75
+ data: this.getVisibleCoordinates(),
76
+ });
77
+ };
78
+ /**
79
+ * Resets the frame height when the app navigates away from a Liveboard,
80
+ * since only Liveboard routes report a height of their own.
81
+ */
82
+ this.handleRouteChange = (payload) => {
83
+ var _a, _b;
84
+ const currentPath = (_a = payload === null || payload === void 0 ? void 0 : payload.data) === null || _a === void 0 ? void 0 : _a.currentPath;
85
+ if (!currentPath) {
86
+ return;
87
+ }
88
+ if (LIVEBOARD_RELATED_ROUTES.some((route) => currentPath.startsWith(route))) {
89
+ return;
90
+ }
91
+ this.host.setFrameHeight(((_b = this.config.frameParams) === null || _b === void 0 ? void 0 : _b.height) || this.minimumHeight);
92
+ };
93
+ /**
94
+ * Pushes the visible embed region to the app so it can decide which
95
+ * visualizations to load.
96
+ */
97
+ this.sendVisibleCoordinates = () => {
98
+ if (!this.isLazyLoadEnabled) {
99
+ return;
100
+ }
101
+ const coordinates = this.getVisibleCoordinates();
102
+ if (coordinates) {
103
+ this.host.trigger(HostEvent.VisibleEmbedCoordinates, coordinates);
104
+ }
105
+ };
106
+ this.config = FullHeightController.withLazyLoadingDefaults(viewConfig);
107
+ this.registerEventHandlers();
108
+ }
109
+ /**
110
+ * The view config the controller runs on: the host app's own config with
111
+ * the lazy-loading defaults filled in. Read-only, so the only way to change
112
+ * it is through the setter, which re-resolves the defaults.
113
+ */
114
+ get viewConfig() {
115
+ return this.config;
116
+ }
117
+ /**
118
+ * Replaces the view config the controller runs on and re-resolves the
119
+ * lazy-loading defaults against it. The config the caller passes is never
120
+ * written to; the controller keeps a copy of its own.
121
+ */
122
+ set viewConfig(viewConfig) {
123
+ this.config = FullHeightController.withLazyLoadingDefaults(viewConfig);
124
+ }
125
+ /**
126
+ * The view config with the lazy-loading settings the embed falls back to
127
+ * when the host app has not chosen its own.
128
+ *
129
+ * Pure by design: it returns a new config rather than writing to the one it
130
+ * is given, so the host app's object is left untouched.
131
+ * @param viewConfig The embed's view config
132
+ * @returns A copy with the defaults filled in, host app choices preserved
133
+ */
134
+ static withLazyLoadingDefaults(viewConfig) {
135
+ return {
136
+ ...viewConfig,
137
+ lazyLoadingForFullHeight: viewConfig.lazyLoadingForFullHeight === undefined
138
+ ? true
139
+ : viewConfig.lazyLoadingForFullHeight,
140
+ enableScrollableContainerLazyLoading: viewConfig.enableScrollableContainerLazyLoading === undefined
141
+ ? true
142
+ : viewConfig.enableScrollableContainerLazyLoading,
143
+ lazyLoadingMargin: viewConfig.lazyLoadingMargin === undefined
144
+ ? DEFAULT_LAZY_LOADING_MARGIN
145
+ : viewConfig.lazyLoadingMargin,
146
+ };
147
+ }
148
+ /**
149
+ * Whether the host app asked for a full-height embed.
150
+ */
151
+ get isEnabled() {
152
+ return this.config.fullHeight === true;
153
+ }
154
+ /**
155
+ * Whether visualizations should load as they scroll into view, which
156
+ * requires the SDK to report the visible region of the embed.
157
+ */
158
+ get isLazyLoadEnabled() {
159
+ return this.isEnabled && !!this.config.lazyLoadingForFullHeight;
160
+ }
161
+ /**
162
+ * The floor for the frame height. `defaultHeight` is the deprecated
163
+ * spelling of `minimumHeight` and is still honored for compatibility.
164
+ */
165
+ get minimumHeight() {
166
+ const { minimumHeight, defaultHeight } = this.config;
167
+ return minimumHeight || defaultHeight || DEFAULT_MINIMUM_HEIGHT;
168
+ }
169
+ /**
170
+ * Registers the embed event handlers the feature depends on. Called from
171
+ * the constructor, so the handlers are in place before `render`.
172
+ */
173
+ registerEventHandlers() {
174
+ if (!this.isEnabled) {
175
+ return;
176
+ }
177
+ this.host.on(EmbedEvent.RouteChange, this.handleRouteChange);
178
+ this.host.on(EmbedEvent.EmbedHeight, this.handleEmbedHeight);
179
+ this.host.on(EmbedEvent.EmbedIframeCenter, this.handleEmbedIframeCenter);
180
+ this.host.on(EmbedEvent.RequestVisibleEmbedCoordinates, this.handleRequestVisibleCoordinates);
181
+ }
182
+ /**
183
+ * Adds the full-height query parameters to the embed URL params.
184
+ * @param params The query parameters being built by the embed
185
+ */
186
+ addQueryParams(params) {
187
+ if (!this.isEnabled) {
188
+ return;
189
+ }
190
+ params[Param.fullHeight] = true;
191
+ if (!this.config.lazyLoadingForFullHeight) {
192
+ return;
193
+ }
194
+ params[Param.IsLazyLoadingForEmbedEnabled] = true;
195
+ if (isValidCssMargin(this.config.lazyLoadingMargin)) {
196
+ params[Param.RootMarginForLazyLoad] = this.config.lazyLoadingMargin;
197
+ }
198
+ }
199
+ /**
200
+ * Attaches the viewport listeners that keep lazy loading in sync. Call this
201
+ * once the embed has rendered and the iframe exists.
202
+ */
203
+ onRender() {
204
+ this.registerLazyLoadListeners();
205
+ }
206
+ /**
207
+ * Detaches every listener and observer owned by the controller.
208
+ */
209
+ destroy() {
210
+ this.unregisterLazyLoadListeners();
211
+ }
212
+ getVisibleCoordinates() {
213
+ const iframe = this.host.getIframe();
214
+ if (!iframe) {
215
+ return null;
216
+ }
217
+ return calculateVisibleElementData(iframe, this.config.enableScrollableContainerLazyLoading);
218
+ }
219
+ registerLazyLoadListeners() {
220
+ if (!this.isLazyLoadEnabled || !this.host.getIframe()) {
221
+ return;
222
+ }
223
+ // Re-registering is safe: drop whatever a previous render attached.
224
+ this.unregisterLazyLoadListeners();
225
+ // TODO: Use passive: true, install modernizr to check for passive
226
+ window.addEventListener('resize', this.sendVisibleCoordinates);
227
+ window.addEventListener('scroll', this.sendVisibleCoordinates, true);
228
+ if (!this.config.enableScrollableContainerLazyLoading) {
229
+ return;
230
+ }
231
+ this.observeScrollableContainers();
232
+ }
233
+ /**
234
+ * Tracks the ancestors that can scroll or clip the embed, so the visible
235
+ * region stays correct when the embed lives inside its own scroll
236
+ * container rather than the page.
237
+ */
238
+ observeScrollableContainers() {
239
+ const iFrame = this.host.getIframe();
240
+ this.scrollContainers = getScrollableAncestors(iFrame);
241
+ this.scrollContainers.forEach((scrollContainer) => {
242
+ scrollContainer.addEventListener('scroll', this.sendVisibleCoordinates);
243
+ });
244
+ if (typeof ResizeObserver === 'undefined') {
245
+ return;
246
+ }
247
+ const resizeTargets = new Set([iFrame.parentElement, ...getEffectiveClippingAncestors(iFrame)].filter(Boolean));
248
+ this.resizeObserver = new ResizeObserver(this.sendVisibleCoordinates);
249
+ resizeTargets.forEach((resizeTarget) => {
250
+ this.resizeObserver.observe(resizeTarget);
251
+ });
252
+ }
253
+ unregisterLazyLoadListeners() {
254
+ var _a;
255
+ if (!this.isLazyLoadEnabled) {
256
+ return;
257
+ }
258
+ window.removeEventListener('resize', this.sendVisibleCoordinates);
259
+ window.removeEventListener('scroll', this.sendVisibleCoordinates, true);
260
+ (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();
261
+ this.resizeObserver = undefined;
262
+ this.scrollContainers.forEach((scrollContainer) => {
263
+ scrollContainer.removeEventListener('scroll', this.sendVisibleCoordinates);
264
+ });
265
+ this.scrollContainers = [];
266
+ }
267
+ }
268
+ //# sourceMappingURL=full-height.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-height.js","sourceRoot":"","sources":["../../src/full-height.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=full-height.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-height.spec.d.ts","sourceRoot":"","sources":["../../src/full-height.spec.ts"],"names":[],"mappings":""}