@thoughtspot/visual-embed-sdk 1.52.0 → 1.52.2-beta

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 (385) hide show
  1. package/cjs/package.json +19 -4
  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 +416 -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 +21 -143
  23. package/cjs/src/embed/app.d.ts.map +1 -1
  24. package/cjs/src/embed/app.js +21 -121
  25. package/cjs/src/embed/app.js.map +1 -1
  26. package/cjs/src/embed/app.spec.js +80 -26
  27. package/cjs/src/embed/app.spec.js.map +1 -1
  28. package/cjs/src/embed/auto-frame-renderer.js +1 -1
  29. package/cjs/src/embed/auto-frame-renderer.js.map +1 -1
  30. package/cjs/src/embed/auto-frame-renderer.spec.js +24 -13
  31. package/cjs/src/embed/auto-frame-renderer.spec.js.map +1 -1
  32. package/cjs/src/embed/bodyless-conversation.js +1 -1
  33. package/cjs/src/embed/bodyless-conversation.js.map +1 -1
  34. package/cjs/src/embed/conversation.d.ts +1 -0
  35. package/cjs/src/embed/conversation.d.ts.map +1 -1
  36. package/cjs/src/embed/conversation.js +4 -4
  37. package/cjs/src/embed/conversation.js.map +1 -1
  38. package/cjs/src/embed/conversation.spec.js +35 -24
  39. package/cjs/src/embed/conversation.spec.js.map +1 -1
  40. package/cjs/src/embed/embedConfig.spec.js +2 -1
  41. package/cjs/src/embed/embedConfig.spec.js.map +1 -1
  42. package/cjs/src/embed/events.spec.js +12 -2
  43. package/cjs/src/embed/events.spec.js.map +1 -1
  44. package/cjs/src/embed/hostEventClient/host-event-client.d.ts +5 -4
  45. package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  46. package/cjs/src/embed/hostEventClient/host-event-client.js +34 -23
  47. package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
  48. package/cjs/src/embed/hostEventClient/host-event-client.spec.js +50 -44
  49. package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  50. package/cjs/src/embed/hostEventClient/utils.d.ts +10 -1
  51. package/cjs/src/embed/hostEventClient/utils.d.ts.map +1 -1
  52. package/cjs/src/embed/hostEventClient/utils.js +52 -6
  53. package/cjs/src/embed/hostEventClient/utils.js.map +1 -1
  54. package/cjs/src/embed/hostEventClient/utils.spec.js +151 -0
  55. package/cjs/src/embed/hostEventClient/utils.spec.js.map +1 -1
  56. package/cjs/src/embed/liveboard.d.ts +13 -164
  57. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  58. package/cjs/src/embed/liveboard.js +72 -135
  59. package/cjs/src/embed/liveboard.js.map +1 -1
  60. package/cjs/src/embed/liveboard.spec.js +213 -29
  61. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  62. package/cjs/src/embed/search-bar.js +1 -1
  63. package/cjs/src/embed/search-bar.js.map +1 -1
  64. package/cjs/src/embed/search.d.ts +14 -0
  65. package/cjs/src/embed/search.d.ts.map +1 -1
  66. package/cjs/src/embed/search.js +5 -2
  67. package/cjs/src/embed/search.js.map +1 -1
  68. package/cjs/src/embed/search.spec.js +85 -0
  69. package/cjs/src/embed/search.spec.js.map +1 -1
  70. package/cjs/src/embed/spotter-utils.d.ts +8 -1
  71. package/cjs/src/embed/spotter-utils.d.ts.map +1 -1
  72. package/cjs/src/embed/spotter-utils.js +14 -1
  73. package/cjs/src/embed/spotter-utils.js.map +1 -1
  74. package/cjs/src/embed/spotter-utils.spec.js +26 -0
  75. package/cjs/src/embed/spotter-utils.spec.js.map +1 -1
  76. package/cjs/src/embed/ts-embed.d.ts +20 -22
  77. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  78. package/cjs/src/embed/ts-embed.js +171 -66
  79. package/cjs/src/embed/ts-embed.js.map +1 -1
  80. package/cjs/src/embed/ts-embed.spec.js +486 -38
  81. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  82. package/cjs/src/errors.js +1 -1
  83. package/cjs/src/errors.js.map +1 -1
  84. package/cjs/src/full-height.d.ts +137 -0
  85. package/cjs/src/full-height.d.ts.map +1 -0
  86. package/cjs/src/full-height.js +272 -0
  87. package/cjs/src/full-height.js.map +1 -0
  88. package/cjs/src/full-height.spec.d.ts +2 -0
  89. package/cjs/src/full-height.spec.d.ts.map +1 -0
  90. package/cjs/src/full-height.spec.js +835 -0
  91. package/cjs/src/full-height.spec.js.map +1 -0
  92. package/cjs/src/index.d.ts +5 -3
  93. package/cjs/src/index.d.ts.map +1 -1
  94. package/cjs/src/index.js +6 -4
  95. package/cjs/src/index.js.map +1 -1
  96. package/cjs/src/react/all-types-export.d.ts +1 -1
  97. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  98. package/cjs/src/react/all-types-export.js +2 -1
  99. package/cjs/src/react/all-types-export.js.map +1 -1
  100. package/cjs/src/react/all-types-export.parity.spec.js +55 -3
  101. package/cjs/src/react/all-types-export.parity.spec.js.map +1 -1
  102. package/cjs/src/types.d.ts +584 -24
  103. package/cjs/src/types.d.ts.map +1 -1
  104. package/cjs/src/types.js +370 -22
  105. package/cjs/src/types.js.map +1 -1
  106. package/cjs/src/utils/authService/tokenizedAuthService.spec.js +2 -1
  107. package/cjs/src/utils/authService/tokenizedAuthService.spec.js.map +1 -1
  108. package/cjs/src/utils/custom-actions.spec.js +4 -2
  109. package/cjs/src/utils/custom-actions.spec.js.map +1 -1
  110. package/cjs/src/utils/filterConverter.d.ts +106 -0
  111. package/cjs/src/utils/filterConverter.d.ts.map +1 -0
  112. package/cjs/src/utils/filterConverter.js +215 -0
  113. package/cjs/src/utils/filterConverter.js.map +1 -0
  114. package/cjs/src/utils/filterConverter.spec.d.ts +2 -0
  115. package/cjs/src/utils/filterConverter.spec.d.ts.map +1 -0
  116. package/cjs/src/utils/filterConverter.spec.js +709 -0
  117. package/cjs/src/utils/filterConverter.spec.js.map +1 -0
  118. package/cjs/src/utils/processData.spec.js +2 -1
  119. package/cjs/src/utils/processData.spec.js.map +1 -1
  120. package/cjs/src/utils/processTrigger.d.ts +3 -1
  121. package/cjs/src/utils/processTrigger.d.ts.map +1 -1
  122. package/cjs/src/utils/processTrigger.js +19 -51
  123. package/cjs/src/utils/processTrigger.js.map +1 -1
  124. package/cjs/src/utils/transport/iframe-transport.d.ts +55 -0
  125. package/cjs/src/utils/transport/iframe-transport.d.ts.map +1 -0
  126. package/cjs/src/utils/transport/iframe-transport.js +108 -0
  127. package/cjs/src/utils/transport/iframe-transport.js.map +1 -0
  128. package/cjs/src/utils/transport/iframe-transport.spec.d.ts +2 -0
  129. package/cjs/src/utils/transport/iframe-transport.spec.d.ts.map +1 -0
  130. package/cjs/src/utils/transport/iframe-transport.spec.js +140 -0
  131. package/cjs/src/utils/transport/iframe-transport.spec.js.map +1 -0
  132. package/cjs/src/utils.d.ts +18 -0
  133. package/cjs/src/utils.d.ts.map +1 -1
  134. package/cjs/src/utils.js +39 -1
  135. package/cjs/src/utils.js.map +1 -1
  136. package/cjs/src/utils.spec.js +62 -0
  137. package/cjs/src/utils.spec.js.map +1 -1
  138. package/dist/{index-BMppCU63.js → index-CcBYlGo9.js} +1 -1
  139. package/dist/src/contracts/contracts.spec.d.ts +2 -0
  140. package/dist/src/contracts/contracts.spec.d.ts.map +1 -0
  141. package/dist/src/contracts/embed-event-payloads.d.ts +73 -0
  142. package/dist/src/contracts/embed-event-payloads.d.ts.map +1 -0
  143. package/dist/src/contracts/host-event-contracts.d.ts +416 -0
  144. package/dist/src/contracts/host-event-contracts.d.ts.map +1 -0
  145. package/dist/src/contracts/index.d.ts +22 -0
  146. package/dist/src/contracts/index.d.ts.map +1 -0
  147. package/dist/src/contracts/ui-passthrough-contracts.d.ts +277 -0
  148. package/dist/src/contracts/ui-passthrough-contracts.d.ts.map +1 -0
  149. package/dist/src/embed/app.d.ts +21 -143
  150. package/dist/src/embed/app.d.ts.map +1 -1
  151. package/dist/src/embed/conversation.d.ts +1 -0
  152. package/dist/src/embed/conversation.d.ts.map +1 -1
  153. package/dist/src/embed/hostEventClient/host-event-client.d.ts +5 -4
  154. package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  155. package/dist/src/embed/hostEventClient/utils.d.ts +10 -1
  156. package/dist/src/embed/hostEventClient/utils.d.ts.map +1 -1
  157. package/dist/src/embed/liveboard.d.ts +13 -164
  158. package/dist/src/embed/liveboard.d.ts.map +1 -1
  159. package/dist/src/embed/search.d.ts +14 -0
  160. package/dist/src/embed/search.d.ts.map +1 -1
  161. package/dist/src/embed/spotter-utils.d.ts +8 -1
  162. package/dist/src/embed/spotter-utils.d.ts.map +1 -1
  163. package/dist/src/embed/ts-embed.d.ts +20 -22
  164. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  165. package/dist/src/full-height.d.ts +137 -0
  166. package/dist/src/full-height.d.ts.map +1 -0
  167. package/dist/src/full-height.spec.d.ts +2 -0
  168. package/dist/src/full-height.spec.d.ts.map +1 -0
  169. package/dist/src/index.d.ts +5 -3
  170. package/dist/src/index.d.ts.map +1 -1
  171. package/dist/src/react/all-types-export.d.ts +1 -1
  172. package/dist/src/react/all-types-export.d.ts.map +1 -1
  173. package/dist/src/types.d.ts +584 -24
  174. package/dist/src/types.d.ts.map +1 -1
  175. package/dist/src/utils/filterConverter.d.ts +106 -0
  176. package/dist/src/utils/filterConverter.d.ts.map +1 -0
  177. package/dist/src/utils/filterConverter.spec.d.ts +2 -0
  178. package/dist/src/utils/filterConverter.spec.d.ts.map +1 -0
  179. package/dist/src/utils/processTrigger.d.ts +3 -1
  180. package/dist/src/utils/processTrigger.d.ts.map +1 -1
  181. package/dist/src/utils/transport/iframe-transport.d.ts +55 -0
  182. package/dist/src/utils/transport/iframe-transport.d.ts.map +1 -0
  183. package/dist/src/utils/transport/iframe-transport.spec.d.ts +2 -0
  184. package/dist/src/utils/transport/iframe-transport.spec.d.ts.map +1 -0
  185. package/dist/src/utils.d.ts +18 -0
  186. package/dist/src/utils.d.ts.map +1 -1
  187. package/dist/tsembed-react.es.js +1144 -412
  188. package/dist/tsembed-react.js +1143 -411
  189. package/dist/tsembed.es.js +1357 -418
  190. package/dist/tsembed.js +1352 -412
  191. package/dist/visual-embed-sdk-react-full.d.ts +1514 -651
  192. package/dist/visual-embed-sdk-react.d.ts +1351 -632
  193. package/dist/visual-embed-sdk.d.ts +1508 -668
  194. package/lib/package.json +19 -4
  195. package/lib/src/contracts/contracts.spec.d.ts +2 -0
  196. package/lib/src/contracts/contracts.spec.d.ts.map +1 -0
  197. package/lib/src/contracts/contracts.spec.js +342 -0
  198. package/lib/src/contracts/contracts.spec.js.map +1 -0
  199. package/lib/src/contracts/embed-event-payloads.d.ts +73 -0
  200. package/lib/src/contracts/embed-event-payloads.d.ts.map +1 -0
  201. package/lib/src/contracts/embed-event-payloads.js +2 -0
  202. package/lib/src/contracts/embed-event-payloads.js.map +1 -0
  203. package/lib/src/contracts/host-event-contracts.d.ts +416 -0
  204. package/lib/src/contracts/host-event-contracts.d.ts.map +1 -0
  205. package/lib/src/contracts/host-event-contracts.js +2 -0
  206. package/lib/src/contracts/host-event-contracts.js.map +1 -0
  207. package/lib/src/contracts/index.d.ts +22 -0
  208. package/lib/src/contracts/index.d.ts.map +1 -0
  209. package/lib/src/contracts/index.js +22 -0
  210. package/lib/src/contracts/index.js.map +1 -0
  211. package/lib/src/contracts/ui-passthrough-contracts.d.ts +277 -0
  212. package/lib/src/contracts/ui-passthrough-contracts.d.ts.map +1 -0
  213. package/lib/src/{embed/hostEventClient/contracts.js → contracts/ui-passthrough-contracts.js} +6 -2
  214. package/lib/src/contracts/ui-passthrough-contracts.js.map +1 -0
  215. package/lib/src/embed/app.d.ts +21 -143
  216. package/lib/src/embed/app.d.ts.map +1 -1
  217. package/lib/src/embed/app.js +23 -123
  218. package/lib/src/embed/app.js.map +1 -1
  219. package/lib/src/embed/app.spec.js +80 -26
  220. package/lib/src/embed/app.spec.js.map +1 -1
  221. package/lib/src/embed/auto-frame-renderer.js +1 -1
  222. package/lib/src/embed/auto-frame-renderer.js.map +1 -1
  223. package/lib/src/embed/auto-frame-renderer.spec.js +24 -13
  224. package/lib/src/embed/auto-frame-renderer.spec.js.map +1 -1
  225. package/lib/src/embed/bodyless-conversation.js +1 -1
  226. package/lib/src/embed/bodyless-conversation.js.map +1 -1
  227. package/lib/src/embed/conversation.d.ts +1 -0
  228. package/lib/src/embed/conversation.d.ts.map +1 -1
  229. package/lib/src/embed/conversation.js +5 -5
  230. package/lib/src/embed/conversation.js.map +1 -1
  231. package/lib/src/embed/conversation.spec.js +35 -24
  232. package/lib/src/embed/conversation.spec.js.map +1 -1
  233. package/lib/src/embed/embedConfig.spec.js +2 -1
  234. package/lib/src/embed/embedConfig.spec.js.map +1 -1
  235. package/lib/src/embed/events.spec.js +12 -2
  236. package/lib/src/embed/events.spec.js.map +1 -1
  237. package/lib/src/embed/hostEventClient/host-event-client.d.ts +5 -4
  238. package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  239. package/lib/src/embed/hostEventClient/host-event-client.js +19 -8
  240. package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
  241. package/lib/src/embed/hostEventClient/host-event-client.spec.js +15 -9
  242. package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  243. package/lib/src/embed/hostEventClient/utils.d.ts +10 -1
  244. package/lib/src/embed/hostEventClient/utils.d.ts.map +1 -1
  245. package/lib/src/embed/hostEventClient/utils.js +48 -3
  246. package/lib/src/embed/hostEventClient/utils.js.map +1 -1
  247. package/lib/src/embed/hostEventClient/utils.spec.js +152 -1
  248. package/lib/src/embed/hostEventClient/utils.spec.js.map +1 -1
  249. package/lib/src/embed/liveboard.d.ts +13 -164
  250. package/lib/src/embed/liveboard.d.ts.map +1 -1
  251. package/lib/src/embed/liveboard.js +73 -136
  252. package/lib/src/embed/liveboard.js.map +1 -1
  253. package/lib/src/embed/liveboard.spec.js +213 -29
  254. package/lib/src/embed/liveboard.spec.js.map +1 -1
  255. package/lib/src/embed/search-bar.js +1 -1
  256. package/lib/src/embed/search-bar.js.map +1 -1
  257. package/lib/src/embed/search.d.ts +14 -0
  258. package/lib/src/embed/search.d.ts.map +1 -1
  259. package/lib/src/embed/search.js +5 -2
  260. package/lib/src/embed/search.js.map +1 -1
  261. package/lib/src/embed/search.spec.js +85 -0
  262. package/lib/src/embed/search.spec.js.map +1 -1
  263. package/lib/src/embed/spotter-utils.d.ts +8 -1
  264. package/lib/src/embed/spotter-utils.d.ts.map +1 -1
  265. package/lib/src/embed/spotter-utils.js +12 -0
  266. package/lib/src/embed/spotter-utils.js.map +1 -1
  267. package/lib/src/embed/spotter-utils.spec.js +27 -1
  268. package/lib/src/embed/spotter-utils.spec.js.map +1 -1
  269. package/lib/src/embed/ts-embed.d.ts +20 -22
  270. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  271. package/lib/src/embed/ts-embed.js +171 -66
  272. package/lib/src/embed/ts-embed.js.map +1 -1
  273. package/lib/src/embed/ts-embed.spec.js +484 -36
  274. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  275. package/lib/src/errors.js +1 -1
  276. package/lib/src/errors.js.map +1 -1
  277. package/lib/src/full-height.d.ts +137 -0
  278. package/lib/src/full-height.d.ts.map +1 -0
  279. package/lib/src/full-height.js +268 -0
  280. package/lib/src/full-height.js.map +1 -0
  281. package/lib/src/full-height.spec.d.ts +2 -0
  282. package/lib/src/full-height.spec.d.ts.map +1 -0
  283. package/lib/src/full-height.spec.js +833 -0
  284. package/lib/src/full-height.spec.js.map +1 -0
  285. package/lib/src/index.d.ts +5 -3
  286. package/lib/src/index.d.ts.map +1 -1
  287. package/lib/src/index.js +3 -2
  288. package/lib/src/index.js.map +1 -1
  289. package/lib/src/react/all-types-export.d.ts +1 -1
  290. package/lib/src/react/all-types-export.d.ts.map +1 -1
  291. package/lib/src/react/all-types-export.js +1 -1
  292. package/lib/src/react/all-types-export.js.map +1 -1
  293. package/lib/src/react/all-types-export.parity.spec.js +55 -3
  294. package/lib/src/react/all-types-export.parity.spec.js.map +1 -1
  295. package/lib/src/types.d.ts +584 -24
  296. package/lib/src/types.d.ts.map +1 -1
  297. package/lib/src/types.js +370 -22
  298. package/lib/src/types.js.map +1 -1
  299. package/lib/src/utils/authService/tokenizedAuthService.spec.js +2 -1
  300. package/lib/src/utils/authService/tokenizedAuthService.spec.js.map +1 -1
  301. package/lib/src/utils/custom-actions.spec.js +4 -2
  302. package/lib/src/utils/custom-actions.spec.js.map +1 -1
  303. package/lib/src/utils/filterConverter.d.ts +106 -0
  304. package/lib/src/utils/filterConverter.d.ts.map +1 -0
  305. package/lib/src/utils/filterConverter.js +210 -0
  306. package/lib/src/utils/filterConverter.js.map +1 -0
  307. package/lib/src/utils/filterConverter.spec.d.ts +2 -0
  308. package/lib/src/utils/filterConverter.spec.d.ts.map +1 -0
  309. package/lib/src/utils/filterConverter.spec.js +707 -0
  310. package/lib/src/utils/filterConverter.spec.js.map +1 -0
  311. package/lib/src/utils/processData.spec.js +2 -1
  312. package/lib/src/utils/processData.spec.js.map +1 -1
  313. package/lib/src/utils/processTrigger.d.ts +3 -1
  314. package/lib/src/utils/processTrigger.d.ts.map +1 -1
  315. package/lib/src/utils/processTrigger.js +19 -51
  316. package/lib/src/utils/processTrigger.js.map +1 -1
  317. package/lib/src/utils/transport/iframe-transport.d.ts +55 -0
  318. package/lib/src/utils/transport/iframe-transport.d.ts.map +1 -0
  319. package/lib/src/utils/transport/iframe-transport.js +101 -0
  320. package/lib/src/utils/transport/iframe-transport.js.map +1 -0
  321. package/lib/src/utils/transport/iframe-transport.spec.d.ts +2 -0
  322. package/lib/src/utils/transport/iframe-transport.spec.d.ts.map +1 -0
  323. package/lib/src/utils/transport/iframe-transport.spec.js +138 -0
  324. package/lib/src/utils/transport/iframe-transport.spec.js.map +1 -0
  325. package/lib/src/utils.d.ts +18 -0
  326. package/lib/src/utils.d.ts.map +1 -1
  327. package/lib/src/utils.js +37 -0
  328. package/lib/src/utils.js.map +1 -1
  329. package/lib/src/utils.spec.js +63 -1
  330. package/lib/src/utils.spec.js.map +1 -1
  331. package/lib/src/visual-embed-sdk.d.ts +1508 -668
  332. package/package.json +19 -4
  333. package/src/contracts/contracts.spec.ts +392 -0
  334. package/src/contracts/embed-event-payloads.ts +83 -0
  335. package/src/contracts/host-event-contracts.ts +500 -0
  336. package/src/contracts/index.ts +53 -0
  337. package/src/contracts/ui-passthrough-contracts.ts +301 -0
  338. package/src/embed/app.spec.ts +101 -34
  339. package/src/embed/app.ts +42 -268
  340. package/src/embed/auto-frame-renderer.spec.ts +24 -13
  341. package/src/embed/auto-frame-renderer.ts +1 -1
  342. package/src/embed/bodyless-conversation.ts +1 -1
  343. package/src/embed/conversation.spec.ts +38 -27
  344. package/src/embed/conversation.ts +5 -5
  345. package/src/embed/embedConfig.spec.ts +2 -1
  346. package/src/embed/events.spec.ts +14 -2
  347. package/src/embed/hostEventClient/host-event-client.spec.ts +16 -10
  348. package/src/embed/hostEventClient/host-event-client.ts +31 -10
  349. package/src/embed/hostEventClient/utils.spec.ts +176 -1
  350. package/src/embed/hostEventClient/utils.ts +53 -3
  351. package/src/embed/liveboard.spec.ts +261 -41
  352. package/src/embed/liveboard.ts +85 -300
  353. package/src/embed/search-bar.tsx +1 -1
  354. package/src/embed/search.spec.ts +103 -0
  355. package/src/embed/search.ts +21 -1
  356. package/src/embed/spotter-utils.spec.ts +29 -0
  357. package/src/embed/spotter-utils.ts +16 -0
  358. package/src/embed/ts-embed.spec.ts +650 -36
  359. package/src/embed/ts-embed.ts +205 -76
  360. package/src/errors.ts +1 -1
  361. package/src/full-height.spec.ts +1008 -0
  362. package/src/full-height.ts +361 -0
  363. package/src/index.ts +103 -5
  364. package/src/react/all-types-export.parity.spec.ts +63 -3
  365. package/src/react/all-types-export.ts +49 -0
  366. package/src/types.ts +584 -22
  367. package/src/utils/authService/tokenizedAuthService.spec.ts +2 -1
  368. package/src/utils/custom-actions.spec.ts +4 -2
  369. package/src/utils/filterConverter.spec.ts +801 -0
  370. package/src/utils/filterConverter.ts +304 -0
  371. package/src/utils/processData.spec.ts +2 -1
  372. package/src/utils/processTrigger.ts +28 -58
  373. package/src/utils/transport/iframe-transport.spec.ts +177 -0
  374. package/src/utils/transport/iframe-transport.ts +122 -0
  375. package/src/utils.spec.ts +71 -0
  376. package/src/utils.ts +38 -0
  377. package/cjs/src/embed/hostEventClient/contracts.d.ts +0 -231
  378. package/cjs/src/embed/hostEventClient/contracts.d.ts.map +0 -1
  379. package/cjs/src/embed/hostEventClient/contracts.js.map +0 -1
  380. package/dist/src/embed/hostEventClient/contracts.d.ts +0 -231
  381. package/dist/src/embed/hostEventClient/contracts.d.ts.map +0 -1
  382. package/lib/src/embed/hostEventClient/contracts.d.ts +0 -231
  383. package/lib/src/embed/hostEventClient/contracts.d.ts.map +0 -1
  384. package/lib/src/embed/hostEventClient/contracts.js.map +0 -1
  385. package/src/embed/hostEventClient/contracts.ts +0 -262
@@ -0,0 +1,301 @@
1
+ import { HostEvent, RuntimeFilter } from '../types';
2
+ import { SessionInterface } from '../utils/graphql/answerService/answerService';
3
+
4
+ export interface LiveboardTab {
5
+ id: string;
6
+ name: string;
7
+ [key: string]: any;
8
+ }
9
+
10
+ export interface LiveboardGroup {
11
+ id: string;
12
+ name: string;
13
+ [key: string]: any;
14
+ }
15
+
16
+ /**
17
+ * Levels at which a filter or parameter can be applied.
18
+ */
19
+ export enum ApplicabilityLevel {
20
+ Liveboard = 'LIVEBOARD',
21
+ Tab = 'TAB',
22
+ Group = 'GROUP',
23
+ }
24
+
25
+ /**
26
+ * Scopes a filter or parameter to a specific target.
27
+ * At `LIVEBOARD` level the filter applies to the whole Liveboard, so `targetId`
28
+ * is not required. `level` accepts the enum or its string value, e.g. `'TAB'`.
29
+ */
30
+ export interface Applicability {
31
+ level: ApplicabilityLevel | `${ApplicabilityLevel}`;
32
+ targetId?: string;
33
+ }
34
+
35
+ export interface FilterUpdate {
36
+ column: string;
37
+ oper: string;
38
+ values: string[];
39
+ type?: string;
40
+ applicability?: Applicability;
41
+ }
42
+
43
+ export interface LiveboardFilter {
44
+ applicability?: Applicability;
45
+ [key: string]: any;
46
+ }
47
+
48
+ export interface LiveboardParameter {
49
+ applicability?: Applicability;
50
+ [key: string]: any;
51
+ }
52
+
53
+ export enum UIPassthroughEvent {
54
+ PinAnswerToLiveboard = 'addVizToPinboard',
55
+ SaveAnswer = 'saveAnswer',
56
+ GetDiscoverabilityStatus = 'getDiscoverabilityStatus',
57
+ GetAvailableUIPassthroughs = 'getAvailableUiPassthroughs',
58
+ GetAnswerConfig = 'getAnswerPageConfig',
59
+ GetLiveboardConfig = 'getPinboardPageConfig',
60
+ GetUnsavedAnswerTML = 'getUnsavedAnswerTML',
61
+ UpdateFilters = 'updateFilters',
62
+ Drilldown = 'drillDown',
63
+ GetAnswerSession = 'getAnswerSession',
64
+ GetFilters = 'getFilters',
65
+ GetIframeUrl = 'getIframeUrl',
66
+ GetParameters = 'getParameters',
67
+ GetTML = 'getTML',
68
+ GetTabs = 'getTabs',
69
+ GetGroups = 'getGroups',
70
+ GetExportRequestForCurrentPinboard = 'getExportRequestForCurrentPinboard',
71
+ }
72
+
73
+ /**
74
+ * UI passthrough contract. Each event's request/response is a named interface so it
75
+ * documents and imports cleanly; `UIPassthroughContractBase` maps events to the pairs.
76
+ */
77
+
78
+ /** Request for {@link UIPassthroughEvent.PinAnswerToLiveboard}. */
79
+ export interface PinAnswerToLiveboardRequest {
80
+ vizId?: string;
81
+ newVizName: string;
82
+ newVizDescription?: string;
83
+ liveboardId?: string;
84
+ tabId?: string;
85
+ newLiveboardName?: string;
86
+ newTabName?: string;
87
+ }
88
+ /** Response for {@link UIPassthroughEvent.PinAnswerToLiveboard}. */
89
+ export interface PinAnswerToLiveboardResponse {
90
+ liveboardId: string;
91
+ tabId: string;
92
+ vizId: string;
93
+ }
94
+ /** Request for {@link UIPassthroughEvent.SaveAnswer}. */
95
+ export interface SaveAnswerRequest {
96
+ name: string;
97
+ description: string;
98
+ vizId?: string;
99
+ isDiscoverable?: boolean;
100
+ }
101
+ /** Response for {@link UIPassthroughEvent.SaveAnswer}. */
102
+ export interface SaveAnswerResponse {
103
+ answerId: string;
104
+ saveResponse?: any;
105
+ shareResponse?: any;
106
+ }
107
+ /** Response for {@link UIPassthroughEvent.GetDiscoverabilityStatus}. */
108
+ export interface GetDiscoverabilityStatusResponse {
109
+ shouldShowDiscoverability: boolean;
110
+ isDiscoverabilityCheckboxUnselectedPerOrg: boolean;
111
+ }
112
+ /** Response for {@link UIPassthroughEvent.GetAvailableUIPassthroughs}. */
113
+ export interface GetAvailableUIPassthroughsResponse {
114
+ keys: string[];
115
+ }
116
+ /** Request for {@link UIPassthroughEvent.GetAnswerConfig}. */
117
+ export interface GetAnswerConfigRequest {
118
+ vizId?: string;
119
+ }
120
+ /** Request for {@link UIPassthroughEvent.GetUnsavedAnswerTML}. */
121
+ export interface GetUnsavedAnswerTMLRequest {
122
+ sessionId?: string;
123
+ vizId?: string;
124
+ }
125
+ /** Response for {@link UIPassthroughEvent.GetUnsavedAnswerTML}. */
126
+ export interface GetUnsavedAnswerTMLResponse {
127
+ tml: string;
128
+ }
129
+ /** Request for {@link UIPassthroughEvent.GetAnswerSession}. */
130
+ export interface GetAnswerSessionRequest {
131
+ vizId?: string;
132
+ }
133
+ /** Response for {@link UIPassthroughEvent.GetAnswerSession}. */
134
+ export interface GetAnswerSessionResponse {
135
+ session: SessionInterface;
136
+ embedAnswerData?: Record<string, any>;
137
+ }
138
+ /** Request for {@link UIPassthroughEvent.GetFilters}. */
139
+ export interface GetFiltersRequest {
140
+ vizId?: string;
141
+ }
142
+ /** Response for {@link UIPassthroughEvent.GetFilters}. */
143
+ export interface GetFiltersResponse {
144
+ liveboardFilters: LiveboardFilter[];
145
+ runtimeFilters: RuntimeFilter[];
146
+ }
147
+ /** Response for {@link UIPassthroughEvent.GetIframeUrl}. */
148
+ export interface GetIframeUrlResponse {
149
+ iframeUrl: string;
150
+ }
151
+ /** Response for {@link UIPassthroughEvent.GetParameters}. */
152
+ export interface GetParametersResponse {
153
+ parameters: LiveboardParameter[];
154
+ }
155
+ /** Request for {@link UIPassthroughEvent.GetTML}. */
156
+ export interface GetTMLRequest {
157
+ vizId?: string;
158
+ includeNonExecutedSearchTokens?: boolean;
159
+ }
160
+ /** Response for {@link UIPassthroughEvent.GetTabs}. */
161
+ export interface GetTabsResponse {
162
+ orderedTabIds: string[];
163
+ numberOfTabs: number;
164
+ Tabs: LiveboardTab[];
165
+ }
166
+ /** Response for {@link UIPassthroughEvent.GetGroups}. */
167
+ export interface GetGroupsResponse {
168
+ orderedGroupIds: string[];
169
+ numberOfGroups: number;
170
+ Groups: LiveboardGroup[];
171
+ }
172
+ /** Response for {@link UIPassthroughEvent.GetExportRequestForCurrentPinboard}. */
173
+ export interface GetExportRequestForCurrentPinboardResponse {
174
+ data: { v2Content: string };
175
+ type: UIPassthroughEvent.GetExportRequestForCurrentPinboard;
176
+ }
177
+ /**
178
+ * Request for {@link UIPassthroughEvent.UpdateFilters}. Not the host-event
179
+ * `UpdateFiltersRequest` (host-event-contracts.ts), which has a different shape.
180
+ */
181
+ export interface UpdateFiltersPassthroughRequest {
182
+ filter?: FilterUpdate;
183
+ filters?: FilterUpdate[];
184
+ }
185
+ /** Request for {@link UIPassthroughEvent.Drilldown}. */
186
+ export interface DrilldownRequest {
187
+ points: {
188
+ selectedPoints?: string[];
189
+ clickedPoint?: string;
190
+ };
191
+ columnGuid?: string;
192
+ autoDrillDown?: boolean;
193
+ vizId?: string;
194
+ }
195
+
196
+ /** Maps each UI passthrough event to its request/response pair. */
197
+ export type UIPassthroughContractBase = {
198
+ [UIPassthroughEvent.PinAnswerToLiveboard]: {
199
+ request: PinAnswerToLiveboardRequest;
200
+ response: PinAnswerToLiveboardResponse;
201
+ };
202
+ [UIPassthroughEvent.SaveAnswer]: {
203
+ request: SaveAnswerRequest;
204
+ response: SaveAnswerResponse;
205
+ };
206
+ [UIPassthroughEvent.GetDiscoverabilityStatus]: {
207
+ request: any;
208
+ response: GetDiscoverabilityStatusResponse;
209
+ };
210
+ [UIPassthroughEvent.GetAvailableUIPassthroughs]: {
211
+ request: any;
212
+ response: GetAvailableUIPassthroughsResponse;
213
+ };
214
+ [UIPassthroughEvent.GetAnswerConfig]: {
215
+ request: GetAnswerConfigRequest;
216
+ response: any;
217
+ };
218
+ [UIPassthroughEvent.GetLiveboardConfig]: {
219
+ request: any;
220
+ response: any;
221
+ };
222
+ [UIPassthroughEvent.GetUnsavedAnswerTML]: {
223
+ request: GetUnsavedAnswerTMLRequest;
224
+ response: GetUnsavedAnswerTMLResponse;
225
+ };
226
+ [UIPassthroughEvent.GetAnswerSession]: {
227
+ request: GetAnswerSessionRequest;
228
+ response: GetAnswerSessionResponse;
229
+ };
230
+ [UIPassthroughEvent.GetFilters]: {
231
+ request: GetFiltersRequest;
232
+ response: GetFiltersResponse;
233
+ };
234
+ [UIPassthroughEvent.GetIframeUrl]: {
235
+ request: Record<string, never>;
236
+ response: GetIframeUrlResponse;
237
+ };
238
+ [UIPassthroughEvent.GetParameters]: {
239
+ request: Record<string, never>;
240
+ response: GetParametersResponse;
241
+ };
242
+ [UIPassthroughEvent.GetTML]: {
243
+ request: GetTMLRequest;
244
+ response: Record<string, any>;
245
+ };
246
+ [UIPassthroughEvent.GetTabs]: {
247
+ request: Record<string, never>;
248
+ response: GetTabsResponse;
249
+ };
250
+ [UIPassthroughEvent.GetGroups]: {
251
+ request: Record<string, never>;
252
+ response: GetGroupsResponse;
253
+ };
254
+ [UIPassthroughEvent.GetExportRequestForCurrentPinboard]: {
255
+ request: Record<string, never>;
256
+ response: GetExportRequestForCurrentPinboardResponse;
257
+ };
258
+ [UIPassthroughEvent.UpdateFilters]: {
259
+ request: UpdateFiltersPassthroughRequest;
260
+ response: unknown;
261
+ };
262
+ [UIPassthroughEvent.Drilldown]: {
263
+ request: DrilldownRequest;
264
+ response: unknown;
265
+ };
266
+ };
267
+
268
+ // UI Passthrough Request and Response
269
+ export type UIPassthroughRequest<T
270
+ extends keyof UIPassthroughContractBase
271
+ > = UIPassthroughContractBase[T]['request'];
272
+
273
+ export type UIPassthroughResponse<
274
+ T extends keyof UIPassthroughContractBase
275
+ > = UIPassthroughContractBase[T]['response'];
276
+
277
+ export type UIPassthroughArrayResponse<ApiName extends keyof UIPassthroughContractBase> =
278
+ Array<{
279
+ refId?: string;
280
+ value?: UIPassthroughResponse<ApiName>;
281
+ error?: any;
282
+ }>
283
+
284
+ // Host event and UI Passthrough Event Mapping
285
+ export type EmbedApiHostEventMapping = {
286
+ [HostEvent.Pin]: UIPassthroughEvent.PinAnswerToLiveboard;
287
+ [HostEvent.SaveAnswer]: UIPassthroughEvent.SaveAnswer;
288
+ [HostEvent.GetAnswerSession]: UIPassthroughEvent.GetAnswerSession;
289
+ [HostEvent.GetFilters]: UIPassthroughEvent.GetFilters;
290
+ [HostEvent.GetIframeUrl]: UIPassthroughEvent.GetIframeUrl;
291
+ [HostEvent.GetParameters]: UIPassthroughEvent.GetParameters;
292
+ [HostEvent.GetTML]: UIPassthroughEvent.GetTML;
293
+ [HostEvent.GetTabs]: UIPassthroughEvent.GetTabs;
294
+ [HostEvent.GetGroups]: UIPassthroughEvent.GetGroups;
295
+ [HostEvent.getExportRequestForCurrentPinboard]: UIPassthroughEvent.GetExportRequestForCurrentPinboard;
296
+ }
297
+
298
+ // NOTE: HostEventRequest / HostEventResponse / TriggerPayload / TriggerResponse
299
+ // live in the sibling ./host-event-contracts, which layers the
300
+ // HostEventRequestMap on top of the UI-passthrough mapping above.
301
+ // The former 2-tier definitions that lived here were superseded and removed.
@@ -55,7 +55,7 @@ const testUrlParams = async (viewConfig: AppViewConfig, expectedUrl: string) =>
55
55
  });
56
56
  };
57
57
 
58
- // Helper function to test setIframeHeightForNonEmbedLiveboard behavior
58
+ // Helper function to test the full-height route-change behavior
59
59
  const testSetIframeHeightBehavior = (
60
60
  currentPath: string,
61
61
  shouldBeCalled: boolean
@@ -70,7 +70,7 @@ const testSetIframeHeightBehavior = (
70
70
  : jest.spyOn(appEmbed, 'setIFrameHeight');
71
71
 
72
72
  appEmbed.render();
73
- appEmbed.setIframeHeightForNonEmbedLiveboard({
73
+ appEmbed.fullHeightController.handleRouteChange({
74
74
  data: { currentPath },
75
75
  type: 'Route',
76
76
  });
@@ -375,6 +375,21 @@ describe('App embed tests', () => {
375
375
  });
376
376
  });
377
377
 
378
+ test('should hide the Customize homepage button via hiddenActions', async () => {
379
+ const appEmbed = new AppEmbed(getRootEl(), {
380
+ ...defaultViewConfig,
381
+ hiddenActions: [Action.CustomizeHomepage],
382
+ } as AppViewConfig);
383
+
384
+ appEmbed.render();
385
+ await executeAfterWait(() => {
386
+ expectUrlMatchesWithParams(
387
+ getIFrameSrc(),
388
+ `http://${thoughtSpotHost}/?embedApp=true&primaryNavHidden=true&profileAndHelpInNavBarHidden=false&hideHomepageLeftNav=false&navigationVersion=v3&homepageVersion=v3&${defaultParamsWithoutHiddenActions}&hideAction=[%22${Action.ReportError}%22,%22customizeHomepage%22]${defaultParamsPost}#/home`,
389
+ );
390
+ });
391
+ });
392
+
378
393
  test('should set enable2ColumnLayout to true in url', async () => {
379
394
  const appEmbed = new AppEmbed(getRootEl(), {
380
395
  ...defaultViewConfig,
@@ -1851,6 +1866,7 @@ describe('App embed tests', () => {
1851
1866
 
1852
1867
  test('should register event handlers to adjust iframe height', async () => {
1853
1868
  let embedHeightCallback: any = () => { };
1869
+ let embedIframeCenterCallback: any = () => { };
1854
1870
  const onSpy = jest.spyOn(AppEmbed.prototype, 'on').mockImplementation((event, callback) => {
1855
1871
  if (event === EmbedEvent.RouteChange) {
1856
1872
  callback({ type: EmbedEvent.RouteChange, data: { currentPath: '/answers' } } as any, jest.fn());
@@ -1859,11 +1875,10 @@ describe('App embed tests', () => {
1859
1875
  embedHeightCallback = callback;
1860
1876
  }
1861
1877
  if (event === EmbedEvent.EmbedIframeCenter) {
1862
- callback({ type: EmbedEvent.EmbedIframeCenter, data: {} } as any, jest.fn());
1878
+ embedIframeCenterCallback = callback;
1863
1879
  }
1864
1880
  return null;
1865
1881
  });
1866
- jest.spyOn(TsEmbed.prototype as any, 'getIframeCenter').mockReturnValue({});
1867
1882
  jest.spyOn(TsEmbed.prototype as any, 'setIFrameHeight').mockReturnValue({});
1868
1883
  const appEmbed = new AppEmbed(getRootEl(), {
1869
1884
  ...defaultViewConfig,
@@ -1879,13 +1894,27 @@ describe('App embed tests', () => {
1879
1894
  await appEmbed.render();
1880
1895
  embedHeightCallback({ data: '100%' });
1881
1896
 
1897
+ // The app only asks for the iframe center once the iframe exists.
1898
+ const centerResponder = jest.fn();
1899
+ embedIframeCenterCallback(
1900
+ { type: EmbedEvent.EmbedIframeCenter, data: {} } as any,
1901
+ centerResponder,
1902
+ );
1903
+
1882
1904
  // Verify event handlers were registered
1883
1905
  await executeAfterWait(() => {
1884
1906
  expect(onSpy).toHaveBeenCalledWith(EmbedEvent.EmbedHeight, expect.anything());
1885
1907
  expect(onSpy).toHaveBeenCalledWith(EmbedEvent.RouteChange, expect.anything());
1886
1908
  expect(onSpy).toHaveBeenCalledWith(EmbedEvent.EmbedIframeCenter, expect.anything());
1887
1909
  expect(onSpy).toHaveBeenCalledWith(EmbedEvent.RequestVisibleEmbedCoordinates, expect.anything());
1910
+ expect(centerResponder).toHaveBeenCalledWith(
1911
+ expect.objectContaining({ type: EmbedEvent.EmbedIframeCenter }),
1912
+ );
1888
1913
  }, 100);
1914
+
1915
+ // This test replaces AppEmbed.prototype.on; restore it so the mock does
1916
+ // not leak into the tests that follow.
1917
+ jest.restoreAllMocks();
1889
1918
  });
1890
1919
 
1891
1920
  describe('Navigate to Page API', () => {
@@ -2130,7 +2159,6 @@ describe('App embed tests', () => {
2130
2159
  const onSpy = jest.spyOn(AppEmbed.prototype, 'on').mockImplementation((event, callback) => {
2131
2160
  return null;
2132
2161
  });
2133
- jest.spyOn(TsEmbed.prototype as any, 'getIframeCenter').mockReturnValue({});
2134
2162
  jest.spyOn(TsEmbed.prototype as any, 'setIFrameHeight').mockReturnValue({});
2135
2163
 
2136
2164
  // Create the AppEmbed instance
@@ -2165,10 +2193,6 @@ describe('App embed tests', () => {
2165
2193
  fullHeight: true,
2166
2194
  } as AppViewConfig);
2167
2195
 
2168
- expect((appEmbed as any).viewConfig.lazyLoadingForFullHeight).toBe(true);
2169
- expect((appEmbed as any).viewConfig.enableScrollableContainerLazyLoading).toBe(true);
2170
- expect((appEmbed as any).viewConfig.lazyLoadingMargin).toBe('500px 0px');
2171
-
2172
2196
  await appEmbed.render();
2173
2197
 
2174
2198
  await executeAfterWait(() => {
@@ -2184,11 +2208,14 @@ describe('App embed tests', () => {
2184
2208
  ...defaultViewConfig,
2185
2209
  } as AppViewConfig);
2186
2210
 
2187
- expect((appEmbed as any).viewConfig.lazyLoadingForFullHeight).toBeUndefined();
2188
- expect(
2189
- (appEmbed as any).viewConfig.enableScrollableContainerLazyLoading,
2190
- ).toBeUndefined();
2191
- expect((appEmbed as any).viewConfig.lazyLoadingMargin).toBeUndefined();
2211
+ await appEmbed.render();
2212
+
2213
+ await executeAfterWait(() => {
2214
+ const iframeSrc = getIFrameSrc();
2215
+ expect(iframeSrc).not.toContain('isFullHeightPinboard');
2216
+ expect(iframeSrc).not.toContain('isLazyLoadingForEmbedEnabled');
2217
+ expect(iframeSrc).not.toContain('rootMarginForLazyLoad');
2218
+ }, 100);
2192
2219
  });
2193
2220
 
2194
2221
  test('should not write the defaults back onto the caller view config', async () => {
@@ -2210,11 +2237,14 @@ describe('App embed tests', () => {
2210
2237
  fullHeight: false,
2211
2238
  } as AppViewConfig);
2212
2239
 
2213
- expect((appEmbed as any).viewConfig.lazyLoadingForFullHeight).toBeUndefined();
2214
- expect(
2215
- (appEmbed as any).viewConfig.enableScrollableContainerLazyLoading,
2216
- ).toBeUndefined();
2217
- expect((appEmbed as any).viewConfig.lazyLoadingMargin).toBeUndefined();
2240
+ await appEmbed.render();
2241
+
2242
+ await executeAfterWait(() => {
2243
+ const iframeSrc = getIFrameSrc();
2244
+ expect(iframeSrc).not.toContain('isFullHeightPinboard');
2245
+ expect(iframeSrc).not.toContain('isLazyLoadingForEmbedEnabled');
2246
+ expect(iframeSrc).not.toContain('rootMarginForLazyLoad');
2247
+ }, 100);
2218
2248
  });
2219
2249
 
2220
2250
  test('should default lazyLoadingMargin when lazyLoadingForFullHeight is set explicitly', async () => {
@@ -2224,14 +2254,14 @@ describe('App embed tests', () => {
2224
2254
  lazyLoadingForFullHeight: true,
2225
2255
  } as AppViewConfig);
2226
2256
 
2227
- expect((appEmbed as any).viewConfig.lazyLoadingMargin).toBe(
2228
- config.DEFAULT_LAZY_LOADING_MARGIN,
2229
- );
2230
-
2231
2257
  await appEmbed.render();
2232
2258
 
2233
2259
  await executeAfterWait(() => {
2234
- expect(getIFrameSrc()).toContain('rootMarginForLazyLoad=500px%200px');
2260
+ expect(getIFrameSrc()).toContain(
2261
+ `rootMarginForLazyLoad=${encodeURIComponent(
2262
+ config.DEFAULT_LAZY_LOADING_MARGIN,
2263
+ )}`,
2264
+ );
2235
2265
  }, 100);
2236
2266
  });
2237
2267
 
@@ -2455,7 +2485,7 @@ describe('App embed tests', () => {
2455
2485
  await appEmbed.render();
2456
2486
 
2457
2487
  // Trigger the lazy load data calculation
2458
- (appEmbed as any).sendFullHeightLazyLoadData();
2488
+ (appEmbed as any).fullHeightController.sendVisibleCoordinates();
2459
2489
 
2460
2490
  expect(mockTrigger).toHaveBeenCalledWith(HostEvent.VisibleEmbedCoordinates, {
2461
2491
  top: 0,
@@ -2477,7 +2507,7 @@ describe('App embed tests', () => {
2477
2507
  await appEmbed.render();
2478
2508
 
2479
2509
  // Trigger the lazy load data calculation
2480
- (appEmbed as any).sendFullHeightLazyLoadData();
2510
+ (appEmbed as any).fullHeightController.sendVisibleCoordinates();
2481
2511
 
2482
2512
  expect(mockTrigger).not.toHaveBeenCalledWith(HostEvent.VisibleEmbedCoordinates, {
2483
2513
  top: 0,
@@ -2510,7 +2540,7 @@ describe('App embed tests', () => {
2510
2540
  await appEmbed.render();
2511
2541
 
2512
2542
  // Trigger the lazy load data calculation
2513
- (appEmbed as any).sendFullHeightLazyLoadData();
2543
+ (appEmbed as any).fullHeightController.sendVisibleCoordinates();
2514
2544
 
2515
2545
  expect(mockTrigger).toHaveBeenCalledWith(HostEvent.VisibleEmbedCoordinates, {
2516
2546
  top: 50, // 50px clipped from top
@@ -2618,7 +2648,7 @@ describe('App embed tests', () => {
2618
2648
  const mockResponder = jest.fn();
2619
2649
 
2620
2650
  // Trigger the handler directly
2621
- (appEmbed as any).requestVisibleEmbedCoordinatesHandler({}, mockResponder);
2651
+ (appEmbed as any).fullHeightController.handleRequestVisibleCoordinates({}, mockResponder);
2622
2652
 
2623
2653
  // Verify the responder was called with the correct data
2624
2654
  expect(mockResponder).toHaveBeenCalledWith({
@@ -2676,7 +2706,7 @@ describe('App embed tests', () => {
2676
2706
  data: 600,
2677
2707
  type: EmbedEvent.EmbedHeight,
2678
2708
  };
2679
- appEmbed.updateIFrameHeight(mockEvent);
2709
+ appEmbed.fullHeightController.handleEmbedHeight(mockEvent);
2680
2710
 
2681
2711
  // Check if the iframe style was updated
2682
2712
  expect(mockIFrame.style.height).toBe('600px');
@@ -2697,7 +2727,7 @@ describe('App embed tests', () => {
2697
2727
  data: 0, // This will make it use the default height
2698
2728
  type: EmbedEvent.EmbedHeight,
2699
2729
  };
2700
- appEmbed.updateIFrameHeight(mockEvent);
2730
+ appEmbed.fullHeightController.handleEmbedHeight(mockEvent);
2701
2731
 
2702
2732
  // Should use the default height
2703
2733
  expect(mockIFrame.style.height).toBe('500px');
@@ -2712,7 +2742,7 @@ describe('App Embed Default Height and Minimum Height Handling', () => {
2712
2742
  fullHeight: true,
2713
2743
  } as AppViewConfig);
2714
2744
  await appEmbed.render();
2715
- expect(appEmbed['defaultHeight']).toBe(500);
2745
+ expect(appEmbed['fullHeightController'].minimumHeight).toBe(500);
2716
2746
  });
2717
2747
  test('should set default height to 700 when default height is provided', async () => {
2718
2748
  const appEmbed = new AppEmbed(getRootEl(), {
@@ -2721,7 +2751,7 @@ describe('App Embed Default Height and Minimum Height Handling', () => {
2721
2751
  minimumHeight: 700,
2722
2752
  } as AppViewConfig);
2723
2753
  await appEmbed.render();
2724
- expect(appEmbed['defaultHeight']).toBe(700);
2754
+ expect(appEmbed['fullHeightController'].minimumHeight).toBe(700);
2725
2755
  });
2726
2756
  });
2727
2757
 
@@ -2756,6 +2786,43 @@ describe('AppEmbed uncovered branch tests', () => {
2756
2786
  });
2757
2787
  });
2758
2788
 
2789
+ test('should set showAnswerEditPanel=false when hideAnswerEditPanel is true', async () => {
2790
+ const appEmbed = new AppEmbed(getRootEl(), {
2791
+ ...defaultViewConfig,
2792
+ hideAnswerEditPanel: true,
2793
+ } as AppViewConfig);
2794
+ appEmbed.render();
2795
+ await executeAfterWait(() => {
2796
+ expectUrlToHaveParamsWithValues(getIFrameSrc(), {
2797
+ showAnswerEditPanel: 'false',
2798
+ });
2799
+ });
2800
+ });
2801
+
2802
+ test('should set showAnswerEditPanel=true when hideAnswerEditPanel is false', async () => {
2803
+ const appEmbed = new AppEmbed(getRootEl(), {
2804
+ ...defaultViewConfig,
2805
+ hideAnswerEditPanel: false,
2806
+ } as AppViewConfig);
2807
+ appEmbed.render();
2808
+ await executeAfterWait(() => {
2809
+ expectUrlToHaveParamsWithValues(getIFrameSrc(), {
2810
+ showAnswerEditPanel: 'true',
2811
+ });
2812
+ });
2813
+ });
2814
+
2815
+ test('should not set showAnswerEditPanel param when hideAnswerEditPanel is not provided', async () => {
2816
+ const appEmbed = new AppEmbed(getRootEl(), {
2817
+ ...defaultViewConfig,
2818
+ } as AppViewConfig);
2819
+ appEmbed.render();
2820
+ await executeAfterWait(() => {
2821
+ const url = new URL(getIFrameSrc());
2822
+ expect(url.searchParams.has('showAnswerEditPanel')).toBe(false);
2823
+ });
2824
+ });
2825
+
2759
2826
  test('should set hideObjects param when non-empty array is provided', async () => {
2760
2827
  const appEmbed = new AppEmbed(getRootEl(), {
2761
2828
  ...defaultViewConfig,
@@ -2807,7 +2874,7 @@ describe('AppEmbed uncovered branch tests', () => {
2807
2874
  });
2808
2875
  });
2809
2876
 
2810
- test('registerLazyLoadEvents should return early when iFrame is not set', () => {
2877
+ test('lazy load registration should return early when iFrame is not set', () => {
2811
2878
  const appEmbed = new AppEmbed(getRootEl(), {
2812
2879
  ...defaultViewConfig,
2813
2880
  fullHeight: true,
@@ -2815,7 +2882,7 @@ describe('AppEmbed uncovered branch tests', () => {
2815
2882
  } as AppViewConfig);
2816
2883
  // iFrame is not set (render not called), should not throw
2817
2884
  expect(() => {
2818
- (appEmbed as any).registerLazyLoadEvents();
2885
+ (appEmbed as any).fullHeightController.onRender();
2819
2886
  }).not.toThrow();
2820
2887
  });
2821
2888
  });