@thoughtspot/visual-embed-sdk 1.46.5-beta.1 → 1.47.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 (242) hide show
  1. package/cjs/package.json +4 -4
  2. package/cjs/src/css-variables.d.ts +36 -0
  3. package/cjs/src/css-variables.d.ts.map +1 -1
  4. package/cjs/src/embed/app.d.ts +41 -17
  5. package/cjs/src/embed/app.d.ts.map +1 -1
  6. package/cjs/src/embed/app.js +26 -47
  7. package/cjs/src/embed/app.js.map +1 -1
  8. package/cjs/src/embed/app.spec.js +36 -79
  9. package/cjs/src/embed/app.spec.js.map +1 -1
  10. package/cjs/src/embed/conversation.d.ts +24 -2
  11. package/cjs/src/embed/conversation.d.ts.map +1 -1
  12. package/cjs/src/embed/conversation.js +18 -33
  13. package/cjs/src/embed/conversation.js.map +1 -1
  14. package/cjs/src/embed/conversation.spec.js +129 -97
  15. package/cjs/src/embed/conversation.spec.js.map +1 -1
  16. package/cjs/src/embed/hostEventClient/contracts.d.ts +31 -0
  17. package/cjs/src/embed/hostEventClient/contracts.d.ts.map +1 -1
  18. package/cjs/src/embed/hostEventClient/contracts.js +2 -0
  19. package/cjs/src/embed/hostEventClient/contracts.js.map +1 -1
  20. package/cjs/src/embed/hostEventClient/host-event-client.d.ts +18 -0
  21. package/cjs/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  22. package/cjs/src/embed/hostEventClient/host-event-client.js +69 -9
  23. package/cjs/src/embed/hostEventClient/host-event-client.js.map +1 -1
  24. package/cjs/src/embed/hostEventClient/host-event-client.spec.js +185 -19
  25. package/cjs/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  26. package/cjs/src/embed/hostEventClient/utils.d.ts +22 -0
  27. package/cjs/src/embed/hostEventClient/utils.d.ts.map +1 -0
  28. package/cjs/src/embed/hostEventClient/utils.js +57 -0
  29. package/cjs/src/embed/hostEventClient/utils.js.map +1 -0
  30. package/cjs/src/embed/hostEventClient/utils.spec.d.ts +2 -0
  31. package/cjs/src/embed/hostEventClient/utils.spec.d.ts.map +1 -0
  32. package/cjs/src/embed/hostEventClient/utils.spec.js +190 -0
  33. package/cjs/src/embed/hostEventClient/utils.spec.js.map +1 -0
  34. package/cjs/src/embed/liveboard.d.ts +18 -1
  35. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  36. package/cjs/src/embed/liveboard.js +9 -11
  37. package/cjs/src/embed/liveboard.js.map +1 -1
  38. package/cjs/src/embed/liveboard.spec.js +29 -71
  39. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  40. package/cjs/src/embed/spotter-utils.d.ts +20 -0
  41. package/cjs/src/embed/spotter-utils.d.ts.map +1 -0
  42. package/cjs/src/embed/spotter-utils.js +52 -0
  43. package/cjs/src/embed/spotter-utils.js.map +1 -0
  44. package/cjs/src/embed/spotter-utils.spec.d.ts +2 -0
  45. package/cjs/src/embed/spotter-utils.spec.d.ts.map +1 -0
  46. package/cjs/src/embed/spotter-utils.spec.js +54 -0
  47. package/cjs/src/embed/spotter-utils.spec.js.map +1 -0
  48. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  49. package/cjs/src/embed/ts-embed.js +25 -5
  50. package/cjs/src/embed/ts-embed.js.map +1 -1
  51. package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -1
  52. package/cjs/src/embed/ts-embed.spec.js +28 -67
  53. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  54. package/cjs/src/errors.d.ts +2 -1
  55. package/cjs/src/errors.d.ts.map +1 -1
  56. package/cjs/src/errors.js +2 -1
  57. package/cjs/src/errors.js.map +1 -1
  58. package/cjs/src/index.d.ts +1 -2
  59. package/cjs/src/index.d.ts.map +1 -1
  60. package/cjs/src/index.js +2 -4
  61. package/cjs/src/index.js.map +1 -1
  62. package/cjs/src/react/all-types-export.d.ts +2 -2
  63. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  64. package/cjs/src/react/all-types-export.js +1 -3
  65. package/cjs/src/react/all-types-export.js.map +1 -1
  66. package/cjs/src/react/index.d.ts +1 -36
  67. package/cjs/src/react/index.d.ts.map +1 -1
  68. package/cjs/src/react/index.js +1 -34
  69. package/cjs/src/react/index.js.map +1 -1
  70. package/cjs/src/types.d.ts +143 -76
  71. package/cjs/src/types.d.ts.map +1 -1
  72. package/cjs/src/types.js +118 -47
  73. package/cjs/src/types.js.map +1 -1
  74. package/cjs/src/utils.d.ts +0 -9
  75. package/cjs/src/utils.d.ts.map +1 -1
  76. package/cjs/src/utils.js +1 -10
  77. package/cjs/src/utils.js.map +1 -1
  78. package/dist/{index-DW2wEHqy.js → index-Bm2Hck8q.js} +1 -1
  79. package/dist/src/css-variables.d.ts +36 -0
  80. package/dist/src/css-variables.d.ts.map +1 -1
  81. package/dist/src/embed/app.d.ts +41 -17
  82. package/dist/src/embed/app.d.ts.map +1 -1
  83. package/dist/src/embed/conversation.d.ts +24 -2
  84. package/dist/src/embed/conversation.d.ts.map +1 -1
  85. package/dist/src/embed/hostEventClient/contracts.d.ts +31 -0
  86. package/dist/src/embed/hostEventClient/contracts.d.ts.map +1 -1
  87. package/dist/src/embed/hostEventClient/host-event-client.d.ts +18 -0
  88. package/dist/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  89. package/dist/src/embed/hostEventClient/utils.d.ts +22 -0
  90. package/dist/src/embed/hostEventClient/utils.d.ts.map +1 -0
  91. package/dist/src/embed/hostEventClient/utils.spec.d.ts +2 -0
  92. package/dist/src/embed/hostEventClient/utils.spec.d.ts.map +1 -0
  93. package/dist/src/embed/liveboard.d.ts +18 -1
  94. package/dist/src/embed/liveboard.d.ts.map +1 -1
  95. package/dist/src/embed/spotter-utils.d.ts +20 -0
  96. package/dist/src/embed/spotter-utils.d.ts.map +1 -0
  97. package/dist/src/embed/spotter-utils.spec.d.ts +2 -0
  98. package/dist/src/embed/spotter-utils.spec.d.ts.map +1 -0
  99. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  100. package/dist/src/embed/ts-embed.spec.d.ts.map +1 -1
  101. package/dist/src/errors.d.ts +2 -1
  102. package/dist/src/errors.d.ts.map +1 -1
  103. package/dist/src/index.d.ts +1 -2
  104. package/dist/src/index.d.ts.map +1 -1
  105. package/dist/src/react/all-types-export.d.ts +2 -2
  106. package/dist/src/react/all-types-export.d.ts.map +1 -1
  107. package/dist/src/react/index.d.ts +1 -36
  108. package/dist/src/react/index.d.ts.map +1 -1
  109. package/dist/src/types.d.ts +143 -76
  110. package/dist/src/types.d.ts.map +1 -1
  111. package/dist/src/utils.d.ts +0 -9
  112. package/dist/src/utils.d.ts.map +1 -1
  113. package/dist/tsembed-react.es.js +378 -304
  114. package/dist/tsembed-react.js +366 -294
  115. package/dist/tsembed.es.js +393 -285
  116. package/dist/tsembed.js +30798 -30691
  117. package/dist/visual-embed-sdk-react-full.d.ts +310 -273
  118. package/dist/visual-embed-sdk-react.d.ts +310 -273
  119. package/dist/visual-embed-sdk.d.ts +308 -243
  120. package/lib/package.json +4 -4
  121. package/lib/src/css-variables.d.ts +36 -0
  122. package/lib/src/css-variables.d.ts.map +1 -1
  123. package/lib/src/embed/app.d.ts +41 -17
  124. package/lib/src/embed/app.d.ts.map +1 -1
  125. package/lib/src/embed/app.js +28 -49
  126. package/lib/src/embed/app.js.map +1 -1
  127. package/lib/src/embed/app.spec.js +36 -79
  128. package/lib/src/embed/app.spec.js.map +1 -1
  129. package/lib/src/embed/conversation.d.ts +24 -2
  130. package/lib/src/embed/conversation.d.ts.map +1 -1
  131. package/lib/src/embed/conversation.js +19 -34
  132. package/lib/src/embed/conversation.js.map +1 -1
  133. package/lib/src/embed/conversation.spec.js +131 -99
  134. package/lib/src/embed/conversation.spec.js.map +1 -1
  135. package/lib/src/embed/hostEventClient/contracts.d.ts +31 -0
  136. package/lib/src/embed/hostEventClient/contracts.d.ts.map +1 -1
  137. package/lib/src/embed/hostEventClient/contracts.js +2 -0
  138. package/lib/src/embed/hostEventClient/contracts.js.map +1 -1
  139. package/lib/src/embed/hostEventClient/host-event-client.d.ts +18 -0
  140. package/lib/src/embed/hostEventClient/host-event-client.d.ts.map +1 -1
  141. package/lib/src/embed/hostEventClient/host-event-client.js +69 -9
  142. package/lib/src/embed/hostEventClient/host-event-client.js.map +1 -1
  143. package/lib/src/embed/hostEventClient/host-event-client.spec.js +185 -19
  144. package/lib/src/embed/hostEventClient/host-event-client.spec.js.map +1 -1
  145. package/lib/src/embed/hostEventClient/utils.d.ts +22 -0
  146. package/lib/src/embed/hostEventClient/utils.d.ts.map +1 -0
  147. package/lib/src/embed/hostEventClient/utils.js +49 -0
  148. package/lib/src/embed/hostEventClient/utils.js.map +1 -0
  149. package/lib/src/embed/hostEventClient/utils.spec.d.ts +2 -0
  150. package/lib/src/embed/hostEventClient/utils.spec.d.ts.map +1 -0
  151. package/lib/src/embed/hostEventClient/utils.spec.js +188 -0
  152. package/lib/src/embed/hostEventClient/utils.spec.js.map +1 -0
  153. package/lib/src/embed/liveboard.d.ts +18 -1
  154. package/lib/src/embed/liveboard.d.ts.map +1 -1
  155. package/lib/src/embed/liveboard.js +9 -11
  156. package/lib/src/embed/liveboard.js.map +1 -1
  157. package/lib/src/embed/liveboard.spec.js +29 -71
  158. package/lib/src/embed/liveboard.spec.js.map +1 -1
  159. package/lib/src/embed/spotter-utils.d.ts +20 -0
  160. package/lib/src/embed/spotter-utils.d.ts.map +1 -0
  161. package/lib/src/embed/spotter-utils.js +47 -0
  162. package/lib/src/embed/spotter-utils.js.map +1 -0
  163. package/lib/src/embed/spotter-utils.spec.d.ts +2 -0
  164. package/lib/src/embed/spotter-utils.spec.d.ts.map +1 -0
  165. package/lib/src/embed/spotter-utils.spec.js +52 -0
  166. package/lib/src/embed/spotter-utils.spec.js.map +1 -0
  167. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  168. package/lib/src/embed/ts-embed.js +25 -5
  169. package/lib/src/embed/ts-embed.js.map +1 -1
  170. package/lib/src/embed/ts-embed.spec.d.ts.map +1 -1
  171. package/lib/src/embed/ts-embed.spec.js +30 -69
  172. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  173. package/lib/src/errors.d.ts +2 -1
  174. package/lib/src/errors.d.ts.map +1 -1
  175. package/lib/src/errors.js +2 -1
  176. package/lib/src/errors.js.map +1 -1
  177. package/lib/src/index.d.ts +1 -2
  178. package/lib/src/index.d.ts.map +1 -1
  179. package/lib/src/index.js +1 -2
  180. package/lib/src/index.js.map +1 -1
  181. package/lib/src/react/all-types-export.d.ts +2 -2
  182. package/lib/src/react/all-types-export.d.ts.map +1 -1
  183. package/lib/src/react/all-types-export.js +1 -1
  184. package/lib/src/react/all-types-export.js.map +1 -1
  185. package/lib/src/react/index.d.ts +1 -36
  186. package/lib/src/react/index.d.ts.map +1 -1
  187. package/lib/src/react/index.js +0 -33
  188. package/lib/src/react/index.js.map +1 -1
  189. package/lib/src/types.d.ts +143 -76
  190. package/lib/src/types.d.ts.map +1 -1
  191. package/lib/src/types.js +118 -47
  192. package/lib/src/types.js.map +1 -1
  193. package/lib/src/utils.d.ts +0 -9
  194. package/lib/src/utils.d.ts.map +1 -1
  195. package/lib/src/utils.js +0 -8
  196. package/lib/src/utils.js.map +1 -1
  197. package/lib/src/visual-embed-sdk.d.ts +308 -243
  198. package/package.json +4 -4
  199. package/src/css-variables.ts +45 -0
  200. package/src/embed/app.spec.ts +51 -107
  201. package/src/embed/app.ts +60 -82
  202. package/src/embed/conversation.spec.ts +150 -119
  203. package/src/embed/conversation.ts +34 -58
  204. package/src/embed/hostEventClient/contracts.ts +31 -0
  205. package/src/embed/hostEventClient/host-event-client.spec.ts +260 -19
  206. package/src/embed/hostEventClient/host-event-client.ts +87 -11
  207. package/src/embed/hostEventClient/utils.spec.ts +225 -0
  208. package/src/embed/hostEventClient/utils.ts +74 -0
  209. package/src/embed/liveboard.spec.ts +38 -93
  210. package/src/embed/liveboard.ts +28 -10
  211. package/src/embed/spotter-utils.spec.ts +56 -0
  212. package/src/embed/spotter-utils.ts +65 -0
  213. package/src/embed/ts-embed.spec.ts +56 -108
  214. package/src/embed/ts-embed.ts +25 -4
  215. package/src/errors.ts +2 -1
  216. package/src/index.ts +2 -5
  217. package/src/react/all-types-export.ts +0 -3
  218. package/src/react/index.tsx +15 -59
  219. package/src/types.ts +206 -138
  220. package/src/utils.ts +0 -14
  221. package/cjs/src/embed/sage.d.ts +0 -164
  222. package/cjs/src/embed/sage.d.ts.map +0 -1
  223. package/cjs/src/embed/sage.js +0 -88
  224. package/cjs/src/embed/sage.js.map +0 -1
  225. package/cjs/src/embed/sage.spec.d.ts +0 -2
  226. package/cjs/src/embed/sage.spec.d.ts.map +0 -1
  227. package/cjs/src/embed/sage.spec.js +0 -151
  228. package/cjs/src/embed/sage.spec.js.map +0 -1
  229. package/dist/src/embed/sage.d.ts +0 -164
  230. package/dist/src/embed/sage.d.ts.map +0 -1
  231. package/dist/src/embed/sage.spec.d.ts +0 -2
  232. package/dist/src/embed/sage.spec.d.ts.map +0 -1
  233. package/lib/src/embed/sage.d.ts +0 -164
  234. package/lib/src/embed/sage.d.ts.map +0 -1
  235. package/lib/src/embed/sage.js +0 -84
  236. package/lib/src/embed/sage.js.map +0 -1
  237. package/lib/src/embed/sage.spec.d.ts +0 -2
  238. package/lib/src/embed/sage.spec.d.ts.map +0 -1
  239. package/lib/src/embed/sage.spec.js +0 -148
  240. package/lib/src/embed/sage.spec.js.map +0 -1
  241. package/src/embed/sage.spec.ts +0 -206
  242. package/src/embed/sage.ts +0 -231
@@ -1,4 +1,4 @@
1
- /* @thoughtspot/visual-embed-sdk version 1.46.5-beta.1 */
1
+ /* @thoughtspot/visual-embed-sdk version 1.47.0 */
2
2
  'use client';
3
3
  (function (global, factory) {
4
4
  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
@@ -1083,6 +1083,17 @@
1083
1083
  * ```
1084
1084
  */
1085
1085
  EmbedEvent["DownloadAsXlsx"] = "downloadAsXlsx";
1086
+ /**
1087
+ * Emitted when the Download Liveboard as Continuous PDF action is triggered
1088
+ * on a Liveboard.
1089
+ * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl
1090
+ * @example
1091
+ * ```js
1092
+ * liveboardEmbed.on(EmbedEvent.DownloadLiveboardAsContinuousPDF, payload => {
1093
+ * console.log('download liveboard as continuous PDF', payload)})
1094
+ * ```
1095
+ */
1096
+ EmbedEvent["DownloadLiveboardAsContinuousPDF"] = "downloadLiveboardAsContinuousPDF";
1086
1097
  /**
1087
1098
  * Emitted when an Answer is deleted in the app
1088
1099
  * Use start:true to subscribe to when delete is initiated, or end:true to subscribe
@@ -1460,19 +1471,6 @@
1460
1471
  * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl, 9.5.0.sw
1461
1472
  */
1462
1473
  EmbedEvent["FilterChanged"] = "filterChanged";
1463
- /**
1464
- * Emitted when a user clicks the **Go** button to initiate
1465
- * a Natural Language Search query
1466
- * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw
1467
- */
1468
- EmbedEvent["SageEmbedQuery"] = "sageEmbedQuery";
1469
- /**
1470
- * Emitted when a user selects a data source on the embedded
1471
- * Natural Language Search interface.
1472
- *
1473
- * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw
1474
- */
1475
- EmbedEvent["SageWorksheetUpdated"] = "sageWorksheetUpdated";
1476
1474
  /**
1477
1475
  * Emitted when a user updates a connection on the **Data** page
1478
1476
  * @version SDK: 1.27.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
@@ -2611,6 +2609,18 @@
2611
2609
  * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw
2612
2610
  */
2613
2611
  HostEvent["DownloadAsPdf"] = "downloadAsPdf";
2612
+ /**
2613
+ * Trigger the **Download Liveboard as Continuous PDF** action on an
2614
+ * embedded Liveboard.
2615
+ *
2616
+ * @example
2617
+ * ```js
2618
+ * liveboardEmbed.trigger(HostEvent.DownloadLiveboardAsContinuousPDF)
2619
+ * ```
2620
+ *
2621
+ * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl
2622
+ */
2623
+ HostEvent["DownloadLiveboardAsContinuousPDF"] = "downloadLiveboardAsContinuousPDF";
2614
2624
  /**
2615
2625
  * Trigger the **AI Highlights** action on an embedded Liveboard
2616
2626
  *
@@ -2837,6 +2847,20 @@
2837
2847
  * vizId: '730496d6-6903-4601-937e-2c691821af3c'
2838
2848
  * }, ContextType.Liveboard);
2839
2849
  * ```
2850
+ * @example
2851
+ * ```js
2852
+ * // Copy link from liveboard context
2853
+ * import { ContextType } from '@thoughtspot/visual-embed-sdk';
2854
+ * liveboardEmbed.trigger(HostEvent.CopyLink, {}, ContextType.Liveboard);
2855
+ * ```
2856
+ * @example
2857
+ * ```js
2858
+ * // Copy link from liveboard visualization context
2859
+ * import { ContextType } from '@thoughtspot/visual-embed-sdk';
2860
+ * liveboardEmbed.trigger(HostEvent.CopyLink, {
2861
+ * vizId: '730496d6-6903-4601-937e-2c691821af3c'
2862
+ * }, ContextType.Liveboard);
2863
+ * ```
2840
2864
  * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw
2841
2865
  */
2842
2866
  HostEvent["CopyLink"] = "embedDocument";
@@ -2868,6 +2892,20 @@
2868
2892
  * import { ContextType } from '@thoughtspot/visual-embed-sdk';
2869
2893
  * liveboardEmbed.trigger(HostEvent.Present, {}, ContextType.Liveboard);
2870
2894
  * ```
2895
+ * @example
2896
+ * ```js
2897
+ * // Present from liveboard visualization context
2898
+ * import { ContextType } from '@thoughtspot/visual-embed-sdk';
2899
+ * liveboardEmbed.trigger(HostEvent.Present, {
2900
+ * vizId: '730496d6-6903-4601-937e-2c691821af3c'
2901
+ * }, ContextType.Liveboard);
2902
+ * ```
2903
+ * @example
2904
+ * ```js
2905
+ * // Present from liveboard context
2906
+ * import { ContextType } from '@thoughtspot/visual-embed-sdk';
2907
+ * liveboardEmbed.trigger(HostEvent.Present, {}, ContextType.Liveboard);
2908
+ * ```
2871
2909
  * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw
2872
2910
  */
2873
2911
  HostEvent["Present"] = "present";
@@ -2896,7 +2934,7 @@
2896
2934
  * tml.answer.search_query // TML representation of the search query
2897
2935
  * );
2898
2936
  * })
2899
- * ```
2937
+ * ```
2900
2938
  * @example
2901
2939
  * ```js
2902
2940
  * // Get TML from search context
@@ -3520,21 +3558,6 @@
3520
3558
  * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw
3521
3559
  */
3522
3560
  HostEvent["SetHiddenTabs"] = "SetPinboardHiddenTabs";
3523
- /**
3524
- * Updates the search query string for Natural Language Search operations.
3525
- * @param - Includes the following keys:
3526
- * - `queryString`: Text string in Natural Language format.
3527
- * - `executeSearch`: Boolean to execute search and update search query.
3528
- * @example
3529
- * ```js
3530
- * sageEmbed.trigger(HostEvent.UpdateSageQuery, {
3531
- * queryString: 'revenue per year',
3532
- * executeSearch: true,
3533
- * })
3534
- * ```
3535
- * @version SDK: 1.26.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw
3536
- */
3537
- HostEvent["UpdateSageQuery"] = "updateSageQuery";
3538
3561
  /**
3539
3562
  * Get the Answer session for a Search or
3540
3563
  * Liveboard visualization.
@@ -4100,7 +4123,6 @@
4100
4123
  Param["HideNotification"] = "hideNotification";
4101
4124
  Param["HideApplicationSwitcher"] = "applicationSwitcherHidden";
4102
4125
  Param["HideOrgSwitcher"] = "orgSwitcherHidden";
4103
- Param["IsSageEmbed"] = "isSageEmbed";
4104
4126
  Param["HideWorksheetSelector"] = "hideWorksheetSelector";
4105
4127
  Param["DisableWorksheetChange"] = "disableWorksheetChange";
4106
4128
  Param["HideSourceSelection"] = "hideSourceSelection";
@@ -4151,7 +4173,6 @@
4151
4173
  Param["HideIrrelevantFiltersInTab"] = "hideIrrelevantFiltersAtTabLevel";
4152
4174
  Param["IsEnhancedFilterInteractivityEnabled"] = "isLiveboardPermissionV2Enabled";
4153
4175
  Param["SpotterEnabled"] = "isSpotterExperienceEnabled";
4154
- Param["IsUnifiedSearchExperienceEnabled"] = "isUnifiedSearchExperienceEnabled";
4155
4176
  Param["OverrideOrgId"] = "orgId";
4156
4177
  Param["OauthPollingInterval"] = "oAuthPollingInterval";
4157
4178
  Param["IsForceRedirect"] = "isForceRedirect";
@@ -4165,6 +4186,7 @@
4165
4186
  Param["IsLazyLoadingForEmbedEnabled"] = "isLazyLoadingForEmbedEnabled";
4166
4187
  Param["RootMarginForLazyLoad"] = "rootMarginForLazyLoad";
4167
4188
  Param["isPNGInScheduledEmailsEnabled"] = "isPNGInScheduledEmailsEnabled";
4189
+ Param["IsWYSIWYGLiveboardPDFEnabled"] = "isWYSIWYGLiveboardPDFEnabled";
4168
4190
  Param["isLiveboardXLSXCSVDownloadEnabled"] = "isLiveboardXLSXCSVDownloadEnabled";
4169
4191
  Param["isGranularXLSXCSVSchedulesEnabled"] = "isGranularXLSXCSVSchedulesEnabled";
4170
4192
  Param["isCentralizedLiveboardFilterUXEnabled"] = "isCentralizedLiveboardFilterUXEnabled";
@@ -4509,6 +4531,16 @@
4509
4531
  * @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
4510
4532
  */
4511
4533
  Action["DownloadLiveboard"] = "downloadLiveboard";
4534
+ /**
4535
+ * The **Download Liveboard as Continuous PDF** menu action on a Liveboard.
4536
+ * Allows downloading the entire Liveboard as a continuous PDF.
4537
+ * @example
4538
+ * ```js
4539
+ * disabledActions: [Action.DownloadLiveboardAsContinuousPDF]
4540
+ * ```
4541
+ * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl
4542
+ */
4543
+ Action["DownloadLiveboardAsContinuousPDF"] = "downloadLiveboardAsContinuousPDF";
4512
4544
  /**
4513
4545
  * @hidden
4514
4546
  */
@@ -5467,11 +5499,11 @@
5467
5499
  */
5468
5500
  Action["CoverAndFilterOptionInPDF"] = "coverAndFilterOptionInPDF";
5469
5501
  /**
5470
- * Action ID to hide or disable the Coaching workflow in Spotter conversations.
5471
- * When disabled, users cannot access **Add to Coaching** workflow in conversation.
5472
- * The **Add to Coaching** feature allows adding reference questions and
5473
- * business terms to improve Spotter’s responses. This feature is generally available
5474
- * (GA) from version 26.2.0.cl and enabled by default on embed deployments.
5502
+ * Action ID to hide or disable the Coaching workflow in Spotter conversations.
5503
+ * When disabled, users cannot access **Add to Coaching** workflow in conversation.
5504
+ * The **Add to Coaching** feature allows adding reference questions and
5505
+ * business terms to improve Spotter’s responses. This feature is generally available
5506
+ * (GA) from version 26.2.0.cl and enabled by default on embed deployments.
5475
5507
  * @example
5476
5508
  * ```js
5477
5509
  * hiddenAction: [Action.InConversationTraining]
@@ -5548,17 +5580,17 @@
5548
5580
  */
5549
5581
  Action["LiveboardStylePanel"] = "liveboardStylePanel";
5550
5582
  /**
5551
- * The **Publish** action for Liveboards, Answers and Models.
5552
- * Opens the publishing modal. It's a parent action for the
5553
- * **Manage Publishing** and **Unpublish** actions if the object
5554
- * is already published, otherwise appears standalone.
5555
- * @example
5556
- * ```js
5557
- * hiddenActions: [Action.Publish]
5558
- * disabledActions: [Action.Publish]
5559
- * ```
5560
- * @version SDK: 1.45.0 | ThoughtSpot Cloud: 26.2.0.cl
5561
- */
5583
+ * The **Publish** action for Liveboards, Answers and Models.
5584
+ * Opens the publishing modal. It's a parent action for the
5585
+ * **Manage Publishing** and **Unpublish** actions if the object
5586
+ * is already published, otherwise appears standalone.
5587
+ * @example
5588
+ * ```js
5589
+ * hiddenActions: [Action.Publish]
5590
+ * disabledActions: [Action.Publish]
5591
+ * ```
5592
+ * @version SDK: 1.45.0 | ThoughtSpot Cloud: 26.2.0.cl
5593
+ */
5562
5594
  Action["Publish"] = "publish";
5563
5595
  /**
5564
5596
  * The **Manage Publishing** action for Liveboards, Answers and Models.
@@ -5726,6 +5758,39 @@
5726
5758
  * @version SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl
5727
5759
  */
5728
5760
  Action["SpotterDocs"] = "spotterDocs";
5761
+ /**
5762
+ * Controls visibility and disable state of the connector resources
5763
+ * section in the Spotter chat interface.
5764
+ * @example
5765
+ * ```js
5766
+ * hiddenActions: [Action.SpotterChatConnectorResources]
5767
+ * disabledActions: [Action.SpotterChatConnectorResources]
5768
+ * ```
5769
+ * @version SDK: 1.48.0 | ThoughtSpot Cloud: 26.5.0.cl
5770
+ */
5771
+ Action["SpotterChatConnectorResources"] = "spotterChatConnectorResources";
5772
+ /**
5773
+ * Controls visibility and disable state of the connectors
5774
+ * in the Spotter chat interface.
5775
+ * @example
5776
+ * ```js
5777
+ * hiddenActions: [Action.SpotterChatConnectors]
5778
+ * disabledActions: [Action.SpotterChatConnectors]
5779
+ * ```
5780
+ * @version SDK: 1.48.0 | ThoughtSpot Cloud: 26.5.0.cl
5781
+ */
5782
+ Action["SpotterChatConnectors"] = "spotterChatConnectors";
5783
+ /**
5784
+ * Controls visibility and disable state of the mode switcher
5785
+ * in the Spotter chat interface.
5786
+ * @example
5787
+ * ```js
5788
+ * hiddenActions: [Action.SpotterChatModeSwitcher]
5789
+ * disabledActions: [Action.SpotterChatModeSwitcher]
5790
+ * ```
5791
+ * @version SDK: 1.48.0 | ThoughtSpot Cloud: 26.5.0.cl
5792
+ */
5793
+ Action["SpotterChatModeSwitcher"] = "spotterChatModeSwitcher";
5729
5794
  /**
5730
5795
  * The **Include current period** checkbox for date filters.
5731
5796
  * Controls the visibility and availability of the option to include
@@ -6019,6 +6084,12 @@
6019
6084
  EmbedErrorCodes["UPDATE_PARAMS_FAILED"] = "UPDATE_PARAMS_FAILED";
6020
6085
  /** Invalid URL provided in configuration */
6021
6086
  EmbedErrorCodes["INVALID_URL"] = "INVALID_URL";
6087
+ /** Host event payload validation failed */
6088
+ EmbedErrorCodes["HOST_EVENT_VALIDATION"] = "HOST_EVENT_VALIDATION";
6089
+ /** UpdateFilters payload is invalid - missing or malformed filter/filters */
6090
+ EmbedErrorCodes["UPDATEFILTERS_INVALID_PAYLOAD"] = "UPDATEFILTERS_INVALID_PAYLOAD";
6091
+ /** DrillDown payload is invalid - missing or malformed points */
6092
+ EmbedErrorCodes["DRILLDOWN_INVALID_PAYLOAD"] = "DRILLDOWN_INVALID_PAYLOAD";
6022
6093
  })(EmbedErrorCodes || (EmbedErrorCodes = {}));
6023
6094
  /**
6024
6095
  * Context types for specifying the page context when triggering host events.
@@ -6154,7 +6225,6 @@
6154
6225
  LIVEBOARD_VIZ_ID_VALIDATION: 'Please select a Liveboard to embed.',
6155
6226
  TRIGGER_TIMED_OUT: 'Trigger timed-out in getting a response',
6156
6227
  SEARCHEMBED_BETA_WRANING_MESSAGE: 'SearchEmbed is in Beta in this release.',
6157
- SAGE_EMBED_BETA_WARNING_MESSAGE: 'SageEmbed is in Beta in this release.',
6158
6228
  THIRD_PARTY_COOKIE_BLOCKED_ALERT: 'Third-party cookie access is blocked on this browser. Please allow third-party cookies for this to work properly. \nYou can use `suppressNoCookieAccessAlert` to suppress this message.',
6159
6229
  DUPLICATE_TOKEN_ERR: 'Duplicate token. Please issue a new token every time getAuthToken callback is called. See https://developers.thoughtspot.com/docs/?pageid=embed-auth#trusted-auth-embed for more details.',
6160
6230
  SDK_NOT_INITIALIZED: 'SDK not initialized',
@@ -6180,6 +6250,8 @@
6180
6250
  SSR_ENVIRONMENT_ERROR: 'SSR environment detected. This function cannot be called in SSR environment.',
6181
6251
  UPDATE_PARAMS_FAILED: 'Failed to update embed parameters',
6182
6252
  INVALID_SPOTTER_DOCUMENTATION_URL: 'Invalid spotterDocumentationUrl. Please provide a valid http or https URL.',
6253
+ UPDATEFILTERS_INVALID_PAYLOAD: 'UpdateFilters requires a valid filter or filters array. Expected: { filter: { column, oper, values } } or { filters: [{ column, oper, values }, ...] }',
6254
+ DRILLDOWN_INVALID_PAYLOAD: 'DrillDown requires a valid points object. Expected: { points: { clickedPoint?, selectedPoints? }, autoDrillDown?, vizId? }',
6183
6255
  };
6184
6256
  const CUSTOM_ACTIONS_ERROR_MESSAGE = {
6185
6257
  INVALID_ACTION_OBJECT: 'Custom Action Validation Error: Invalid action object provided',
@@ -6683,14 +6755,6 @@
6683
6755
  return [false, error instanceof Error ? error : new Error(String(error))];
6684
6756
  }
6685
6757
  };
6686
- /**
6687
- * Resolves enablePastConversationsSidebar with
6688
- * spotterSidebarConfig taking precedence over the
6689
- * standalone flag.
6690
- */
6691
- const resolveEnablePastConversationsSidebar = (params) => (params.spotterSidebarConfigValue !== undefined
6692
- ? params.spotterSidebarConfigValue
6693
- : params.standaloneValue);
6694
6758
  /**
6695
6759
  * Sets a query parameter if the value is defined.
6696
6760
  * @param queryParams - The query params object to modify
@@ -8198,9 +8262,9 @@
8198
8262
 
8199
8263
  var stubFalse_1 = stubFalse;
8200
8264
 
8201
- var isBuffer_1 = createCommonjsModule(function (module, exports) {
8265
+ var isBuffer_1 = createCommonjsModule(function (module, exports$1) {
8202
8266
  /** Detect free variable `exports`. */
8203
- var freeExports = exports && !exports.nodeType && exports;
8267
+ var freeExports = exports$1 && !exports$1.nodeType && exports$1;
8204
8268
 
8205
8269
  /** Detect free variable `module`. */
8206
8270
  var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
@@ -8370,9 +8434,9 @@
8370
8434
 
8371
8435
  var _baseUnary = baseUnary;
8372
8436
 
8373
- var _nodeUtil = createCommonjsModule(function (module, exports) {
8437
+ var _nodeUtil = createCommonjsModule(function (module, exports$1) {
8374
8438
  /** Detect free variable `exports`. */
8375
- var freeExports = exports && !exports.nodeType && exports;
8439
+ var freeExports = exports$1 && !exports$1.nodeType && exports$1;
8376
8440
 
8377
8441
  /** Detect free variable `module`. */
8378
8442
  var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
@@ -8987,6 +9051,8 @@
8987
9051
  UIPassthroughEvent["GetAnswerConfig"] = "getAnswerPageConfig";
8988
9052
  UIPassthroughEvent["GetLiveboardConfig"] = "getPinboardPageConfig";
8989
9053
  UIPassthroughEvent["GetUnsavedAnswerTML"] = "getUnsavedAnswerTML";
9054
+ UIPassthroughEvent["UpdateFilters"] = "updateFilters";
9055
+ UIPassthroughEvent["Drilldown"] = "drillDown";
8990
9056
  UIPassthroughEvent["GetAnswerSession"] = "getAnswerSession";
8991
9057
  UIPassthroughEvent["GetFilters"] = "getFilters";
8992
9058
  UIPassthroughEvent["GetIframeUrl"] = "getIframeUrl";
@@ -10271,9 +10337,6 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
10271
10337
 
10272
10338
  var _stringToPath = stringToPath;
10273
10339
 
10274
- /** Used as references for various `Number` constants. */
10275
- var INFINITY$1 = 1 / 0;
10276
-
10277
10340
  /** Used to convert symbols to primitives and strings. */
10278
10341
  var symbolProto = _Symbol ? _Symbol.prototype : undefined,
10279
10342
  symbolToString = symbolProto ? symbolProto.toString : undefined;
@@ -10299,7 +10362,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
10299
10362
  return symbolToString ? symbolToString.call(value) : '';
10300
10363
  }
10301
10364
  var result = (value + '');
10302
- return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result;
10365
+ return (result == '0' && (1 / value) == -Infinity) ? '-0' : result;
10303
10366
  }
10304
10367
 
10305
10368
  var _baseToString = baseToString;
@@ -10348,9 +10411,6 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
10348
10411
 
10349
10412
  var _castPath = castPath;
10350
10413
 
10351
- /** Used as references for various `Number` constants. */
10352
- var INFINITY = 1 / 0;
10353
-
10354
10414
  /**
10355
10415
  * Converts `value` to a string key if it's not a string or symbol.
10356
10416
  *
@@ -10363,7 +10423,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
10363
10423
  return value;
10364
10424
  }
10365
10425
  var result = (value + '');
10366
- return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
10426
+ return (result == '0' && (1 / value) == -Infinity) ? '-0' : result;
10367
10427
  }
10368
10428
 
10369
10429
  var _toKey = toKey;
@@ -17675,10 +17735,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
17675
17735
  VISUAL_SDK_RENDER_FAILED: 'visual-sdk-render-failed',
17676
17736
  VISUAL_SDK_TRIGGER: 'visual-sdk-trigger',
17677
17737
  VISUAL_SDK_ON: 'visual-sdk-on',
17678
- VISUAL_SDK_IFRAME_LOAD_PERFORMANCE: 'visual-sdk-iframe-load-performance',
17679
- VISUAL_SDK_EMBED_CREATE: 'visual-sdk-embed-create',
17680
- VERCEL_INTEGRATION_COMPLETED: 'vercel-integration-completed',
17681
- };
17738
+ VISUAL_SDK_EMBED_CREATE: 'visual-sdk-embed-create'};
17682
17739
  let isMixpanelInitialized = false;
17683
17740
  let eventQueue = [];
17684
17741
  /**
@@ -19228,10 +19285,66 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
19228
19285
  return eventData;
19229
19286
  }
19230
19287
 
19231
- var name="@thoughtspot/visual-embed-sdk";var version$1="1.46.5-beta.1";var description="ThoughtSpot Embed SDK";var module="lib/src/index.js";var main="dist/tsembed.js";var types="lib/src/index.d.ts";var files=["dist/**","lib/**","src/**","cjs/**"];var exports$1={".":{"import":"./lib/src/index.js",require:"./cjs/src/index.js",types:"./lib/src/index.d.ts"},"./react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"},"./lib/src/react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"}};var typesVersions={"*":{react:["./lib/src/react/all-types-export.d.ts"]}};var scripts={lint:"eslint 'src/**'","lint:fix":"eslint 'src/**/*.*' --fix",tsc:"tsc -p tsconfig.build.json --incremental false; tsc -p tsconfig.build.json --incremental false --module commonjs --outDir cjs","build-and-publish":"npm run build:gatsby && npm run publish","bundle-dts-file":"dts-bundle-generator --config ./dts-config/dts-bundle-file.config.js && node dts-config/wrap-ambient-module.mjs","bundle-dts":"dts-bundle-generator --config ./dts-config/dts-bundle.config.js","bundle-dts-react":"dts-bundle-generator --config ./dts-config/dts-bundle-react.config.js","bundle-dts-react-full":"dts-bundle-generator --config ./dts-config/dts-bundle-react-full.config.js",build:"rollup -c",watch:"rollup -cw",docgen:"typedoc --tsconfig tsconfig.build.json --theme typedoc-theme --json static/typedoc/typedoc.json --disableOutputCheck","test-sdk":"jest -c jest.config.sdk.js --runInBand",test:"npm run test-sdk",posttest:"cat ./coverage/sdk/lcov.info | npx coveralls-next || echo 'Warning: Coveralls upload failed but not breaking the build.'","is-publish-allowed":"node scripts/is-publish-allowed.js",prepublishOnly:"npm run tsc && npm run bundle-dts-file && npm run bundle-dts && npm run bundle-dts-react && npm run bundle-dts-react-full && npm run build","check-size":"npm run build && size-limit","publish-dev":"npm publish --tag dev","publish-prod":"npm publish --tag latest",dev:"vite -c vite.local.config.ts"};var peerDependencies={react:"> 16.8.0","react-dom":"> 16.8.0"};var dependencies={classnames:"^2.3.1",eventemitter3:"^4.0.7",lodash:"^4.17.23","mixpanel-browser":"2.47.0","ts-deepmerge":"^6.0.2",tslib:"^2.5.3","use-deep-compare-effect":"^1.8.1",yaml:"^2.5.1"};var devDependencies={"@mdx-js/mdx":"^1.6.22","@mdx-js/react":"^1.6.22","@react-icons/all-files":"^4.1.0","@rollup/plugin-commonjs":"^18.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^11.2.1","@rollup/plugin-replace":"^5.0.2","@size-limit/preset-big-lib":"^11.2.0","@testing-library/dom":"^7.31.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^11.2.7","@testing-library/user-event":"^13.1.8","@types/jest":"^30.0.0","@types/lodash":"^4.17.0","@types/mixpanel-browser":"^2.35.6","@types/react-test-renderer":"^17.0.1","@typescript-eslint/eslint-plugin":"^8.28.0","@typescript-eslint/parser":"^8.28.0",ajv:"^8.17.1",asciidoctor:"^2.2.1","babel-jest":"^30.2.0","babel-preset-gatsby":"^1.10.0","command-line-args":"^5.1.1","coveralls-next":"^5.0.0",crypto:"^1.0.1","current-git-branch":"^1.1.0","dts-bundle-generator":"^9.5.1",eslint:"^9.23.0","eslint-config-airbnb-base":"^15.0.0","eslint-config-prettier":"^10.1.1","eslint-import-resolver-typescript":"^4.2.5","eslint-plugin-comment-length":"2.2.1","eslint-plugin-import":"^2.31.0","eslint-plugin-jsdoc":"^50.6.9","eslint-plugin-prettier":"^5.2.5","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^5.2.0","fs-extra":"^10.0.0","gh-pages":"6.3.0",globals:"^16.0.0","highlight.js":"^10.6.0","html-to-text":"^8.0.0","identity-obj-proxy":"^3.0.0","istanbul-merge":"^2.0.0",jest:"^30.2.0","jest-environment-jsdom":"^29.7.0","jest-fetch-mock":"^3.0.3",jsdom:"^17.0.0",prettier:"2.1.2",react:"^16.14.0","react-dom":"^16.14.0","react-resizable":"^1.11.0","react-resize-detector":"^6.6.0","react-test-renderer":"^17.0.2","react-use-flexsearch":"^0.1.1",rollup:"4.24.0","rollup-plugin-typescript2":"0.27.3","ts-jest":"^29.4.6","ts-loader":"8.0.4",typedoc:"0.21.6","typedoc-plugin-toc-group":"thoughtspot/typedoc-plugin-toc-group",typescript:"^4.9.4","typescript-eslint":"^8.29.1","url-search-params-polyfill":"^8.1.0",util:"^0.12.4",vite:"^6.3.5"};var author="ThoughtSpot";var email="support@thoughtspot.com";var license="ThoughtSpot Development Tools End User License Agreement";var directories={lib:"lib"};var repository={type:"git",url:"git+https://github.com/thoughtspot/visual-embed-sdk.git"};var publishConfig={registry:"https://registry.npmjs.org"};var keywords=["thoughtspot","everywhere","embedded","embed","sdk","analytics"];var bugs={url:"https://github.com/thoughtspot/visual-embed-sdk/issues"};var homepage="https://github.com/thoughtspot/visual-embed-sdk#readme";var globals={window:{}};var pkgInfo = {name:name,version:version$1,description:description,module:module,main:main,types:types,files:files,exports:exports$1,typesVersions:typesVersions,"size-limit":[{path:"dist/tsembed.es.js",limit:"32 kB"}],scripts:scripts,peerDependencies:peerDependencies,dependencies:dependencies,devDependencies:devDependencies,author:author,email:email,license:license,directories:directories,repository:repository,publishConfig:publishConfig,keywords:keywords,bugs:bugs,homepage:homepage,globals:globals};
19288
+ var version$1="1.47.0";var pkgInfo = {version:version$1};
19289
+
19290
+ function isValidUpdateFiltersPayload(payload) {
19291
+ if (!payload)
19292
+ return false;
19293
+ const isValidFilter = (f) => {
19294
+ const hasColumn = typeof f.column === 'string' || typeof f.columnName === 'string';
19295
+ const hasOperator = typeof f.oper === 'string' || typeof f.operator === 'string';
19296
+ const hasValues = Array.isArray(f.values);
19297
+ const validType = !f.type || typeof f.type === 'string';
19298
+ return hasColumn && hasOperator && hasValues && validType;
19299
+ };
19300
+ const hasValidFilter = payload.filter && isValidFilter(payload.filter);
19301
+ const hasValidFilters = Array.isArray(payload.filters) && payload.filters.length > 0 && payload.filters.every(isValidFilter);
19302
+ return !!(hasValidFilter || hasValidFilters);
19303
+ }
19304
+ function isValidDrillDownPayload(payload) {
19305
+ if (!payload)
19306
+ return false;
19307
+ const points = payload.points;
19308
+ if (!points || typeof points !== 'object')
19309
+ return false;
19310
+ const hasClickedPoint = 'clickedPoint' in points && points.clickedPoint != null;
19311
+ const hasSelectedPoints = Array.isArray(points.selectedPoints) && points.selectedPoints.length > 0;
19312
+ return hasClickedPoint || hasSelectedPoints;
19313
+ }
19314
+ function createValidationError(message) {
19315
+ const err = new Error(message);
19316
+ err.isValidationError = true;
19317
+ err.embedErrorDetails = {
19318
+ type: exports.EmbedEvent.Error,
19319
+ data: {
19320
+ errorType: ErrorDetailsTypes.VALIDATION_ERROR,
19321
+ message,
19322
+ code: EmbedErrorCodes.HOST_EVENT_VALIDATION,
19323
+ error: message
19324
+ },
19325
+ status: embedEventStatus.END
19326
+ };
19327
+ throw err;
19328
+ }
19329
+ function throwUpdateFiltersValidationError() {
19330
+ createValidationError(ERROR_MESSAGE.UPDATEFILTERS_INVALID_PAYLOAD);
19331
+ }
19332
+ function throwDrillDownValidationError() {
19333
+ createValidationError(ERROR_MESSAGE.DRILLDOWN_INVALID_PAYLOAD);
19334
+ }
19232
19335
 
19233
- /** Host events that use getDataWithPassthroughFallback (getter-style APIs) */
19234
- const HOST_EVENT_PASSTHROUGH_MAP = {
19336
+ /**
19337
+ * Maps HostEvent to its corresponding UIPassthroughEvent.
19338
+ * Includes both custom-handler events (Pin, SaveAnswer, UpdateFilters, DrillDown)
19339
+ * and getter events (GetAnswerSession, GetFilters, etc.) that use getDataWithPassthroughFallback.
19340
+ */
19341
+ const PASSTHROUGH_MAP = {
19342
+ // Custom handlers (setters with special logic)
19343
+ [exports.HostEvent.Pin]: UIPassthroughEvent.PinAnswerToLiveboard,
19344
+ [exports.HostEvent.SaveAnswer]: UIPassthroughEvent.SaveAnswer,
19345
+ [exports.HostEvent.UpdateFilters]: UIPassthroughEvent.UpdateFilters,
19346
+ [exports.HostEvent.DrillDown]: UIPassthroughEvent.Drilldown,
19347
+ // Getters (use getDataWithPassthroughFallback)
19235
19348
  [exports.HostEvent.GetAnswerSession]: UIPassthroughEvent.GetAnswerSession,
19236
19349
  [exports.HostEvent.GetFilters]: UIPassthroughEvent.GetFilters,
19237
19350
  [exports.HostEvent.GetIframeUrl]: UIPassthroughEvent.GetIframeUrl,
@@ -19242,10 +19355,14 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
19242
19355
  };
19243
19356
  class HostEventClient {
19244
19357
  constructor(iFrame) {
19358
+ /** Cached list of available UI passthrough keys from the embedded app */
19359
+ this.availablePassthroughKeysCache = null;
19245
19360
  this.iFrame = iFrame;
19246
19361
  this.customHandlers = {
19247
19362
  [exports.HostEvent.Pin]: (p, c) => this.handlePinEvent(p, c),
19248
19363
  [exports.HostEvent.SaveAnswer]: (p, c) => this.handleSaveAnswerEvent(p, c),
19364
+ [exports.HostEvent.UpdateFilters]: (p, c) => this.handleUpdateFiltersEvent(p, c),
19365
+ [exports.HostEvent.DrillDown]: (p, c) => this.handleDrillDownEvent(p, c),
19249
19366
  };
19250
19367
  }
19251
19368
  /**
@@ -19308,6 +19425,26 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
19308
19425
  setIframeElement(iFrame) {
19309
19426
  this.iFrame = iFrame;
19310
19427
  }
19428
+ /**
19429
+ * Fetches the list of available UI passthrough keys from the embedded app.
19430
+ * Result is cached for the session. Returns empty array on failure.
19431
+ */
19432
+ async getAvailableUIPassthroughKeys(context) {
19433
+ var _a, _b;
19434
+ if (this.availablePassthroughKeysCache !== null) {
19435
+ return this.availablePassthroughKeysCache;
19436
+ }
19437
+ try {
19438
+ const response = await this.triggerUIPassthroughApi(UIPassthroughEvent.GetAvailableUIPassthroughs, {}, context);
19439
+ const matched = (_a = response === null || response === void 0 ? void 0 : response.find) === null || _a === void 0 ? void 0 : _a.call(response, (r) => r.value && !r.error);
19440
+ const keys = (_b = matched === null || matched === void 0 ? void 0 : matched.value) === null || _b === void 0 ? void 0 : _b.keys;
19441
+ this.availablePassthroughKeysCache = Array.isArray(keys) ? keys : [];
19442
+ return this.availablePassthroughKeysCache;
19443
+ }
19444
+ catch {
19445
+ return [];
19446
+ }
19447
+ }
19311
19448
  async triggerUIPassthroughApi(apiName, parameters, context) {
19312
19449
  const res = await this.processTrigger(exports.HostEvent.UIPassthrough, {
19313
19450
  type: apiName,
@@ -19343,16 +19480,41 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
19343
19480
  answerId: (_d = (_c = (_b = (_a = data === null || data === void 0 ? void 0 : data.saveResponse) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.Answer__save) === null || _c === void 0 ? void 0 : _c.answer) === null || _d === void 0 ? void 0 : _d.id,
19344
19481
  };
19345
19482
  }
19483
+ handleUpdateFiltersEvent(payload, context) {
19484
+ if (!isValidUpdateFiltersPayload(payload)) {
19485
+ throwUpdateFiltersValidationError();
19486
+ }
19487
+ return this.handleHostEventWithParam(UIPassthroughEvent.UpdateFilters, payload, context);
19488
+ }
19489
+ handleDrillDownEvent(payload, context) {
19490
+ if (!isValidDrillDownPayload(payload)) {
19491
+ throwDrillDownValidationError();
19492
+ }
19493
+ return this.handleHostEventWithParam(UIPassthroughEvent.Drilldown, payload, context);
19494
+ }
19495
+ /**
19496
+ * Dispatches a host event using the appropriate channel:
19497
+ * 1. If the embedded app supports UI passthrough for this event, use it (custom handler or getter).
19498
+ * 2. Otherwise fall back to the legacy host event channel.
19499
+ *
19500
+ * @param hostEvent - The host event to trigger
19501
+ * @param payload - Optional payload for the event
19502
+ * @param context - Optional context (e.g. vizId) for scoped operations
19503
+ */
19346
19504
  async triggerHostEvent(hostEvent, payload, context) {
19347
19505
  const customHandler = this.customHandlers[hostEvent];
19348
- if (customHandler) {
19349
- return customHandler(payload, context);
19350
- }
19351
- const passthroughEvent = HOST_EVENT_PASSTHROUGH_MAP[hostEvent];
19352
- if (passthroughEvent) {
19353
- return this.getDataWithPassthroughFallback(passthroughEvent, hostEvent, payload, context);
19506
+ const passthroughEvent = PASSTHROUGH_MAP[hostEvent];
19507
+ // If embedded app supports passthrough but not this event, use legacy channel
19508
+ const keys = passthroughEvent ? await this.getAvailableUIPassthroughKeys(context) : [];
19509
+ if (passthroughEvent && keys.length > 0 && !keys.includes(passthroughEvent)) {
19510
+ return this.hostEventFallback(hostEvent, payload, context);
19354
19511
  }
19355
- return this.hostEventFallback(hostEvent, payload, context);
19512
+ // Custom handler (setters) > getter passthrough > legacy fallback
19513
+ return (customHandler
19514
+ ? customHandler(payload, context)
19515
+ : passthroughEvent
19516
+ ? this.getDataWithPassthroughFallback(passthroughEvent, hostEvent, payload, context)
19517
+ : this.hostEventFallback(hostEvent, payload, context));
19356
19518
  }
19357
19519
  }
19358
19520
 
@@ -20686,7 +20848,19 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
20686
20848
  return null;
20687
20849
  }
20688
20850
  // send an empty object, this is needed for liveboard default handlers
20689
- return this.hostEventClient.triggerHostEvent(messageType, data, context);
20851
+ return this.hostEventClient.triggerHostEvent(messageType, data, context).catch((err) => {
20852
+ var _a;
20853
+ if (err === null || err === void 0 ? void 0 : err.isValidationError) {
20854
+ const errorDetails = (_a = err.embedErrorDetails) !== null && _a !== void 0 ? _a : {
20855
+ errorType: ErrorDetailsTypes.VALIDATION_ERROR,
20856
+ message: err.message || ERROR_MESSAGE.UPDATEFILTERS_INVALID_PAYLOAD,
20857
+ code: EmbedErrorCodes.UPDATEFILTERS_INVALID_PAYLOAD,
20858
+ error: err.message,
20859
+ };
20860
+ this.handleError(errorDetails);
20861
+ }
20862
+ throw err;
20863
+ });
20690
20864
  }
20691
20865
  /**
20692
20866
  * Triggers an event to the embedded app, skipping the UI flow.
@@ -20809,6 +20983,9 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
20809
20983
  try {
20810
20984
  this.removeFullscreenChangeHandler();
20811
20985
  this.unsubscribeToEvents();
20986
+ if (!this.isRendered) {
20987
+ return;
20988
+ }
20812
20989
  if (!getEmbedConfig().waitForCleanupOnDestroy) {
20813
20990
  this.trigger(exports.HostEvent.DestroyEmbed);
20814
20991
  (_b = (_a = this.insertedDomEl) === null || _a === void 0 ? void 0 : _a.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(this.insertedDomEl);
@@ -20818,11 +20995,16 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
20818
20995
  Promise.race([
20819
20996
  this.trigger(exports.HostEvent.DestroyEmbed),
20820
20997
  new Promise((resolve) => setTimeout(resolve, cleanupTimeout)),
20821
- ]).then(() => {
20822
- var _a, _b;
20823
- (_b = (_a = this.insertedDomEl) === null || _a === void 0 ? void 0 : _a.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(this.insertedDomEl);
20824
- }).catch((e) => {
20998
+ ]).catch((e) => {
20825
20999
  logger$3.log('Error destroying TS Embed', e);
21000
+ }).finally(() => {
21001
+ var _a, _b;
21002
+ try {
21003
+ (_b = (_a = this.insertedDomEl) === null || _a === void 0 ? void 0 : _a.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(this.insertedDomEl);
21004
+ }
21005
+ catch (e) {
21006
+ logger$3.log('Error removing DOM element on destroy', e);
21007
+ }
20826
21008
  });
20827
21009
  }
20828
21010
  }
@@ -21163,87 +21345,6 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
21163
21345
  }
21164
21346
  };
21165
21347
 
21166
- /**
21167
- * Copyright (c) 2023
21168
- *
21169
- * Embed ThoughtSpot Sage
21170
- * @summary TS Sage embed
21171
- * @author Mourya Balabhadra <mourya.balabhadra@thoughtspot.com>
21172
- */
21173
- /**
21174
- * Embed ThoughtSpot LLM and GPT-based Natural Language Search component.
21175
- * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl, 9.5.1-sw
21176
- *
21177
- * Note: This embed will be deprecated from SDK: 1.40.0 | ThoughtSpot: 10.13.0.cl
21178
- * @group Embed components
21179
- */
21180
- let SageEmbed$1 = class SageEmbed extends V1Embed {
21181
- constructor(domSelector, viewConfig) {
21182
- viewConfig.embedComponentType = 'SageEmbed';
21183
- super(domSelector, viewConfig);
21184
- }
21185
- getEmbedParamsObject() {
21186
- const { disableWorksheetChange, hideWorksheetSelector, showObjectSuggestions, dataPanelV2, hideSampleQuestions, isProductTour, hideSageAnswerHeader, hideAutocompleteSuggestions, } = this.viewConfig;
21187
- const params = this.getBaseQueryParams();
21188
- params[Param.DataPanelV2Enabled] = !!dataPanelV2;
21189
- params[Param.IsSageEmbed] = true;
21190
- params[Param.DisableWorksheetChange] = !!disableWorksheetChange;
21191
- params[Param.HideWorksheetSelector] = !!hideWorksheetSelector;
21192
- params[Param.HideEurekaSuggestions] = !!hideAutocompleteSuggestions;
21193
- if (showObjectSuggestions) {
21194
- params[Param.HideEurekaSuggestions] = !showObjectSuggestions;
21195
- // support backwards compatibility
21196
- }
21197
- params[Param.HideSampleQuestions] = !!hideSampleQuestions;
21198
- params[Param.IsProductTour] = !!isProductTour;
21199
- params[Param.HideSageAnswerHeader] = !!hideSageAnswerHeader;
21200
- return params;
21201
- }
21202
- /**
21203
- * Constructs a map of parameters to be passed on to the
21204
- * embedded Eureka or Sage search page.
21205
- * @returns {string} query string
21206
- */
21207
- getEmbedParams() {
21208
- const params = this.getEmbedParamsObject();
21209
- return getQueryParamString(params, true);
21210
- }
21211
- /**
21212
- * Construct the URL of the embedded ThoughtSpot sage to be
21213
- * loaded in the iframe
21214
- * @returns {string} iframe url
21215
- */
21216
- getIFrameSrc() {
21217
- const path = 'eureka';
21218
- const postHashObj = {};
21219
- const tsPostHashParams = this.getThoughtSpotPostUrlParams();
21220
- const { dataSource, searchOptions, } = this.viewConfig;
21221
- if (dataSource)
21222
- postHashObj[Param.WorksheetId] = dataSource;
21223
- if ((searchOptions === null || searchOptions === void 0 ? void 0 : searchOptions.searchQuery) && searchOptions.executeSearch) {
21224
- postHashObj[Param.executeSearch] = true;
21225
- }
21226
- let sagePostHashParams = new URLSearchParams(postHashObj).toString();
21227
- if (sagePostHashParams)
21228
- sagePostHashParams = `${tsPostHashParams ? '&' : '?'}${sagePostHashParams}`;
21229
- if (searchOptions === null || searchOptions === void 0 ? void 0 : searchOptions.searchQuery)
21230
- sagePostHashParams += `${sagePostHashParams ? '&' : '?'}${[Param.Query]}=${encodeURIComponent(searchOptions.searchQuery)}`;
21231
- // use encodeURIComponent for query instead of URLSearchParams
21232
- // as it adds + instead of %20 for spaces
21233
- return `${this.getRootIframeSrc()}/embed/${path}${tsPostHashParams}${sagePostHashParams}`;
21234
- }
21235
- /**
21236
- * Render the embedded ThoughtSpot Sage
21237
- * @returns {SageEmbed} Eureka/Sage embed
21238
- */
21239
- async render() {
21240
- await super.render();
21241
- const src = this.getIFrameSrc();
21242
- await this.renderV1Embed(src);
21243
- return this;
21244
- }
21245
- };
21246
-
21247
21348
  /**
21248
21349
  * Copyright (c) 2022
21249
21350
  *
@@ -21415,7 +21516,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
21415
21516
  */
21416
21517
  async render() {
21417
21518
  await super.render();
21418
- this.viewConfig;
21519
+ const { answerId } = this.viewConfig;
21419
21520
  const src = this.getIFrameSrc();
21420
21521
  await this.renderIFrame(src);
21421
21522
  getAuthPromise().then(() => {
@@ -21428,6 +21529,50 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
21428
21529
  }
21429
21530
  };
21430
21531
 
21532
+ /**
21533
+ * Resolves enablePastConversationsSidebar with
21534
+ * spotterSidebarConfig taking precedence over the
21535
+ * standalone flag.
21536
+ */
21537
+ const resolveEnablePastConversationsSidebar = (params) => (params.spotterSidebarConfigValue !== undefined
21538
+ ? params.spotterSidebarConfigValue
21539
+ : params.standaloneValue);
21540
+ function buildSpotterSidebarAppInitData(defaultAppInitData, viewConfig, handleError) {
21541
+ const { spotterSidebarConfig, enablePastConversationsSidebar } = viewConfig;
21542
+ const resolvedEnablePastConversations = resolveEnablePastConversationsSidebar({
21543
+ spotterSidebarConfigValue: spotterSidebarConfig === null || spotterSidebarConfig === void 0 ? void 0 : spotterSidebarConfig.enablePastConversationsSidebar,
21544
+ standaloneValue: enablePastConversationsSidebar,
21545
+ });
21546
+ const hasConfig = spotterSidebarConfig || resolvedEnablePastConversations !== undefined;
21547
+ if (!hasConfig)
21548
+ return defaultAppInitData;
21549
+ const resolvedSidebarConfig = {
21550
+ ...spotterSidebarConfig,
21551
+ ...(resolvedEnablePastConversations !== undefined && {
21552
+ enablePastConversationsSidebar: resolvedEnablePastConversations,
21553
+ }),
21554
+ };
21555
+ if (resolvedSidebarConfig.spotterDocumentationUrl !== undefined) {
21556
+ const [isValid, validationError] = validateHttpUrl(resolvedSidebarConfig.spotterDocumentationUrl);
21557
+ if (!isValid) {
21558
+ handleError({
21559
+ errorType: ErrorDetailsTypes.VALIDATION_ERROR,
21560
+ message: ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL,
21561
+ code: EmbedErrorCodes.INVALID_URL,
21562
+ error: (validationError === null || validationError === void 0 ? void 0 : validationError.message) || ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL,
21563
+ });
21564
+ delete resolvedSidebarConfig.spotterDocumentationUrl;
21565
+ }
21566
+ }
21567
+ return {
21568
+ ...defaultAppInitData,
21569
+ embedParams: {
21570
+ ...(defaultAppInitData.embedParams || {}),
21571
+ spotterSidebarConfig: resolvedSidebarConfig,
21572
+ },
21573
+ };
21574
+ }
21575
+
21431
21576
  /**
21432
21577
  * Copyright (c) 2022
21433
21578
  *
@@ -21557,7 +21702,10 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
21557
21702
  this.defaultHeight = 500;
21558
21703
  this.sendFullHeightLazyLoadData = () => {
21559
21704
  const data = calculateVisibleElementData(this.iFrame);
21560
- this.trigger(exports.HostEvent.VisibleEmbedCoordinates, data);
21705
+ // this should be fired only if the lazyLoadingForFullHeight and fullHeight are true
21706
+ if (this.viewConfig.lazyLoadingForFullHeight && this.viewConfig.fullHeight) {
21707
+ this.trigger(exports.HostEvent.VisibleEmbedCoordinates, data);
21708
+ }
21561
21709
  };
21562
21710
  /**
21563
21711
  * This is a handler for the RequestVisibleEmbedCoordinates event.
@@ -21570,22 +21718,13 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
21570
21718
  const visibleCoordinatesData = calculateVisibleElementData(this.iFrame);
21571
21719
  responder({ type: exports.EmbedEvent.RequestVisibleEmbedCoordinates, data: visibleCoordinatesData });
21572
21720
  };
21573
- this.HEIGHT_CHANAGE_THRESHOLD = 30;
21574
21721
  /**
21575
21722
  * Set the iframe height as per the computed height received
21576
21723
  * from the ThoughtSpot app.
21577
21724
  * @param data The event payload
21578
21725
  */
21579
21726
  this.updateIFrameHeight = (data) => {
21580
- logger$3.error('Updating iframe height', data);
21581
- const currentHeight = this.iFrame.getBoundingClientRect().height;
21582
- const heightToSet = Math.max(data.data, this.defaultHeight);
21583
- const heightChange = Math.abs(heightToSet - currentHeight);
21584
- if (heightChange < this.HEIGHT_CHANAGE_THRESHOLD) {
21585
- logger$3.info('Height change is less than the threshold, skipping height update', { heightChange, heightToSet, currentHeight });
21586
- return;
21587
- }
21588
- this.setIFrameHeight(heightToSet);
21727
+ this.setIFrameHeight(Math.max(data.data, this.defaultHeight));
21589
21728
  this.sendFullHeightLazyLoadData();
21590
21729
  };
21591
21730
  this.embedIframeCenter = (data, responder) => {
@@ -21619,12 +21758,28 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
21619
21758
  this.on(exports.EmbedEvent.RequestVisibleEmbedCoordinates, this.requestVisibleEmbedCoordinatesHandler);
21620
21759
  }
21621
21760
  }
21761
+ /**
21762
+ * Extends the default APP_INIT payload with `embedParams.spotterSidebarConfig`
21763
+ * so the conv-assist app can read sidebar configuration on initialisation.
21764
+ *
21765
+ * Precedence for `enablePastConversationsSidebar`:
21766
+ * `spotterSidebarConfig.enablePastConversationsSidebar` wins over the
21767
+ * deprecated top-level `enablePastConversationsSidebar` flag; if the former
21768
+ * is absent the latter is used as a fallback.
21769
+ *
21770
+ * An invalid `spotterDocumentationUrl` triggers a validation error and is
21771
+ * excluded from the payload rather than forwarded to the app.
21772
+ */
21773
+ async getAppInitData() {
21774
+ const defaultAppInitData = await super.getAppInitData();
21775
+ return buildSpotterSidebarAppInitData(defaultAppInitData, this.viewConfig, this.handleError.bind(this));
21776
+ }
21622
21777
  /**
21623
21778
  * Constructs a map of parameters to be passed on to the
21624
21779
  * embedded Liveboard or visualization.
21625
21780
  */
21626
21781
  getEmbedParams() {
21627
- const { tag, hideTagFilterChips, hideObjects, liveboardV2, showPrimaryNavbar, disableProfileAndHelp, hideHamburger, hideObjectSearch, hideNotification, hideApplicationSwitcher, hideOrgSwitcher, enableSearchAssist, fullHeight, dataPanelV2 = true, hideLiveboardHeader = false, showLiveboardTitle = true, showLiveboardDescription = true, showMaskedFilterChip = false, isLiveboardMasterpiecesEnabled = false, hideHomepageLeftNav = false, modularHomeExperience = false, isLiveboardHeaderSticky = true, enableAskSage, collapseSearchBarInitially = false, enable2ColumnLayout, enableCustomColumnGroups = false, dataPanelCustomGroupsAccordionInitialState = DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL, collapseSearchBar = true, isLiveboardCompactHeaderEnabled = false, showLiveboardVerifiedBadge = true, showLiveboardReverifyBanner = true, hideIrrelevantChipsInLiveboardTabs = false, isEnhancedFilterInteractivityEnabled = false, homePageSearchBarMode, isUnifiedSearchExperienceEnabled = true, enablePendoHelp = true, discoveryExperience, coverAndFilterOptionInPDF = false, isLiveboardStylingAndGroupingEnabled, isPNGInScheduledEmailsEnabled = false, isLiveboardXLSXCSVDownloadEnabled = false, isGranularXLSXCSVSchedulesEnabled = false, isCentralizedLiveboardFilterUXEnabled = false, isLinkParametersEnabled, updatedSpotterChatPrompt, spotterSidebarConfig, spotterChatConfig, minimumHeight, isThisPeriodInDateFiltersEnabled, enableHomepageAnnouncement, } = this.viewConfig;
21782
+ const { tag, hideTagFilterChips, hideObjects, liveboardV2, showPrimaryNavbar, disableProfileAndHelp, hideHamburger, hideObjectSearch, hideNotification, hideApplicationSwitcher, hideOrgSwitcher, enableSearchAssist, fullHeight, dataPanelV2 = true, hideLiveboardHeader = false, showLiveboardTitle = true, showLiveboardDescription = true, showMaskedFilterChip = false, isLiveboardMasterpiecesEnabled = false, hideHomepageLeftNav = false, modularHomeExperience = false, isLiveboardHeaderSticky = true, enableAskSage, collapseSearchBarInitially = false, enable2ColumnLayout, enableCustomColumnGroups = false, dataPanelCustomGroupsAccordionInitialState = DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL, collapseSearchBar = true, isLiveboardCompactHeaderEnabled = false, showLiveboardVerifiedBadge = true, showLiveboardReverifyBanner = true, hideIrrelevantChipsInLiveboardTabs = false, isEnhancedFilterInteractivityEnabled = false, homePageSearchBarMode, enablePendoHelp = true, discoveryExperience, coverAndFilterOptionInPDF = false, isLiveboardStylingAndGroupingEnabled, isPNGInScheduledEmailsEnabled = false, isLiveboardXLSXCSVDownloadEnabled = false, isGranularXLSXCSVSchedulesEnabled = false, isCentralizedLiveboardFilterUXEnabled = false, isLinkParametersEnabled, updatedSpotterChatPrompt, spotterChatConfig, minimumHeight, isThisPeriodInDateFiltersEnabled, enableHomepageAnnouncement = false, isContinuousLiveboardPDFEnabled, } = this.viewConfig;
21628
21783
  let params = {};
21629
21784
  params[Param.PrimaryNavHidden] = !showPrimaryNavbar;
21630
21785
  params[Param.HideProfleAndHelp] = !!disableProfileAndHelp;
@@ -21642,45 +21797,11 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
21642
21797
  params[Param.ShowLiveboardVerifiedBadge] = showLiveboardVerifiedBadge;
21643
21798
  params[Param.ShowLiveboardReverifyBanner] = showLiveboardReverifyBanner;
21644
21799
  params[Param.HideIrrelevantFiltersInTab] = hideIrrelevantChipsInLiveboardTabs;
21645
- params[Param.IsUnifiedSearchExperienceEnabled] = isUnifiedSearchExperienceEnabled;
21646
21800
  params[Param.CoverAndFilterOptionInPDF] = !!coverAndFilterOptionInPDF;
21647
21801
  params = this.getBaseQueryParams(params);
21648
21802
  if (!isUndefined(updatedSpotterChatPrompt)) {
21649
21803
  params[Param.UpdatedSpotterChatPrompt] = !!updatedSpotterChatPrompt;
21650
21804
  }
21651
- const resolvedEnablePastConversationsSidebar = resolveEnablePastConversationsSidebar({
21652
- spotterSidebarConfigValue: spotterSidebarConfig === null || spotterSidebarConfig === void 0 ? void 0 : spotterSidebarConfig.enablePastConversationsSidebar,
21653
- standaloneValue: this.viewConfig.enablePastConversationsSidebar,
21654
- });
21655
- setParamIfDefined(params, Param.EnablePastConversationsSidebar, resolvedEnablePastConversationsSidebar, true);
21656
- // Handle spotterSidebarConfig params
21657
- if (spotterSidebarConfig) {
21658
- const { spotterSidebarTitle, spotterSidebarDefaultExpanded, spotterChatRenameLabel, spotterChatDeleteLabel, spotterDeleteConversationModalTitle, spotterPastConversationAlertMessage, spotterDocumentationUrl, spotterBestPracticesLabel, spotterConversationsBatchSize, spotterNewChatButtonTitle, } = spotterSidebarConfig;
21659
- setParamIfDefined(params, Param.SpotterSidebarDefaultExpanded, spotterSidebarDefaultExpanded, true);
21660
- setParamIfDefined(params, Param.SpotterSidebarTitle, spotterSidebarTitle);
21661
- setParamIfDefined(params, Param.SpotterChatRenameLabel, spotterChatRenameLabel);
21662
- setParamIfDefined(params, Param.SpotterChatDeleteLabel, spotterChatDeleteLabel);
21663
- setParamIfDefined(params, Param.SpotterDeleteConversationModalTitle, spotterDeleteConversationModalTitle);
21664
- setParamIfDefined(params, Param.SpotterPastConversationAlertMessage, spotterPastConversationAlertMessage);
21665
- setParamIfDefined(params, Param.SpotterBestPracticesLabel, spotterBestPracticesLabel);
21666
- setParamIfDefined(params, Param.SpotterConversationsBatchSize, spotterConversationsBatchSize);
21667
- setParamIfDefined(params, Param.SpotterNewChatButtonTitle, spotterNewChatButtonTitle);
21668
- // URL param with validation
21669
- if (spotterDocumentationUrl !== undefined) {
21670
- const [isValid, validationError] = validateHttpUrl(spotterDocumentationUrl);
21671
- if (isValid) {
21672
- params[Param.SpotterDocumentationUrl] = spotterDocumentationUrl;
21673
- }
21674
- else {
21675
- this.handleError({
21676
- errorType: ErrorDetailsTypes.VALIDATION_ERROR,
21677
- message: ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL,
21678
- code: EmbedErrorCodes.INVALID_URL,
21679
- error: (validationError === null || validationError === void 0 ? void 0 : validationError.message) || ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL,
21680
- });
21681
- }
21682
- }
21683
- }
21684
21805
  // Handle spotterChatConfig params
21685
21806
  if (spotterChatConfig) {
21686
21807
  const { hideToolResponseCardBranding, toolResponseCardBrandingLabel, } = spotterChatConfig;
@@ -21756,6 +21877,9 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
21756
21877
  if (enableHomepageAnnouncement !== undefined) {
21757
21878
  params[Param.EnableHomepageAnnouncement] = enableHomepageAnnouncement;
21758
21879
  }
21880
+ if (isContinuousLiveboardPDFEnabled !== undefined) {
21881
+ params[Param.IsWYSIWYGLiveboardPDFEnabled] = isContinuousLiveboardPDFEnabled;
21882
+ }
21759
21883
  this.defaultHeight = minimumHeight || this.defaultHeight;
21760
21884
  params[Param.DataPanelV2Enabled] = dataPanelV2;
21761
21885
  params[Param.HideHomepageLeftNav] = hideHomepageLeftNav;
@@ -22031,7 +22155,10 @@ query GetEurekaVizSnapshots(
22031
22155
  this.defaultHeight = 500;
22032
22156
  this.sendFullHeightLazyLoadData = () => {
22033
22157
  const data = calculateVisibleElementData(this.iFrame);
22034
- this.trigger(exports.HostEvent.VisibleEmbedCoordinates, data);
22158
+ // this should be fired only if the lazyLoadingForFullHeight and fullHeight are true
22159
+ if (this.viewConfig.lazyLoadingForFullHeight && this.viewConfig.fullHeight) {
22160
+ this.trigger(exports.HostEvent.VisibleEmbedCoordinates, data);
22161
+ }
22035
22162
  };
22036
22163
  /**
22037
22164
  * This is a handler for the RequestVisibleEmbedCoordinates event.
@@ -22044,21 +22171,13 @@ query GetEurekaVizSnapshots(
22044
22171
  const visibleCoordinatesData = calculateVisibleElementData(this.iFrame);
22045
22172
  responder({ type: exports.EmbedEvent.RequestVisibleEmbedCoordinates, data: visibleCoordinatesData });
22046
22173
  };
22047
- this.HEIGHT_CHANAGE_THRESHOLD = 30;
22048
22174
  /**
22049
22175
  * Set the iframe height as per the computed height received
22050
22176
  * from the ThoughtSpot app.
22051
22177
  * @param data The event payload
22052
22178
  */
22053
22179
  this.updateIFrameHeight = (data) => {
22054
- const currentHeight = this.iFrame.getBoundingClientRect().height;
22055
- const heightToSet = Math.max(data.data, this.defaultHeight);
22056
- const heightChange = Math.abs(heightToSet - currentHeight);
22057
- if (heightChange < this.HEIGHT_CHANAGE_THRESHOLD) {
22058
- logger$3.info('Height change is less than the threshold, skipping height update', { heightChange, heightToSet, currentHeight });
22059
- return;
22060
- }
22061
- this.setIFrameHeight(heightToSet);
22180
+ this.setIFrameHeight(Math.max(data.data, this.defaultHeight));
22062
22181
  this.sendFullHeightLazyLoadData();
22063
22182
  };
22064
22183
  this.embedIframeCenter = (data, responder) => {
@@ -22119,7 +22238,7 @@ query GetEurekaVizSnapshots(
22119
22238
  getEmbedParamsObject() {
22120
22239
  let params = {};
22121
22240
  params = this.getBaseQueryParams(params);
22122
- const { enableVizTransformations, fullHeight, defaultHeight, minimumHeight, visibleVizs, liveboardV2, vizId, hideTabPanel, activeTabId, hideLiveboardHeader, showLiveboardDescription, showLiveboardTitle, isLiveboardHeaderSticky = true, isLiveboardCompactHeaderEnabled = false, showLiveboardVerifiedBadge = true, showLiveboardReverifyBanner = true, hideIrrelevantChipsInLiveboardTabs = false, showMaskedFilterChip = false, isLiveboardMasterpiecesEnabled = false, isEnhancedFilterInteractivityEnabled = false, enableAskSage, enable2ColumnLayout, dataPanelV2 = true, enableCustomColumnGroups = false, oAuthPollingInterval, isForceRedirect, dataSourceId, coverAndFilterOptionInPDF = false, isLiveboardStylingAndGroupingEnabled, isPNGInScheduledEmailsEnabled = false, isLiveboardXLSXCSVDownloadEnabled = false, isGranularXLSXCSVSchedulesEnabled = false, showSpotterLimitations, isCentralizedLiveboardFilterUXEnabled = false, isLinkParametersEnabled, updatedSpotterChatPrompt, spotterChatConfig, isThisPeriodInDateFiltersEnabled, } = this.viewConfig;
22241
+ const { enableVizTransformations, fullHeight, defaultHeight, minimumHeight, visibleVizs, liveboardV2, vizId, hideTabPanel, activeTabId, hideLiveboardHeader, showLiveboardDescription, showLiveboardTitle, isLiveboardHeaderSticky = true, isLiveboardCompactHeaderEnabled = false, showLiveboardVerifiedBadge = true, showLiveboardReverifyBanner = true, hideIrrelevantChipsInLiveboardTabs = false, showMaskedFilterChip = false, isLiveboardMasterpiecesEnabled = false, isEnhancedFilterInteractivityEnabled = false, enableAskSage, enable2ColumnLayout, dataPanelV2 = true, enableCustomColumnGroups = false, oAuthPollingInterval, isForceRedirect, dataSourceId, coverAndFilterOptionInPDF = false, isLiveboardStylingAndGroupingEnabled, isPNGInScheduledEmailsEnabled = false, isLiveboardXLSXCSVDownloadEnabled = false, isGranularXLSXCSVSchedulesEnabled = false, showSpotterLimitations, isCentralizedLiveboardFilterUXEnabled = false, isLinkParametersEnabled, updatedSpotterChatPrompt, spotterChatConfig, isThisPeriodInDateFiltersEnabled, isContinuousLiveboardPDFEnabled, } = this.viewConfig;
22123
22242
  const preventLiveboardFilterRemoval = this.viewConfig.preventLiveboardFilterRemoval
22124
22243
  || this.viewConfig.preventPinboardFilterRemoval;
22125
22244
  if (fullHeight === true) {
@@ -22208,6 +22327,9 @@ query GetEurekaVizSnapshots(
22208
22327
  if (isThisPeriodInDateFiltersEnabled !== undefined) {
22209
22328
  params[Param.IsThisPeriodInDateFiltersEnabled] = isThisPeriodInDateFiltersEnabled;
22210
22329
  }
22330
+ if (isContinuousLiveboardPDFEnabled !== undefined) {
22331
+ params[Param.IsWYSIWYGLiveboardPDFEnabled] = isContinuousLiveboardPDFEnabled;
22332
+ }
22211
22333
  params[Param.LiveboardHeaderSticky] = isLiveboardHeaderSticky;
22212
22334
  params[Param.LiveboardHeaderV2] = isLiveboardCompactHeaderEnabled;
22213
22335
  params[Param.ShowLiveboardVerifiedBadge] = showLiveboardVerifiedBadge;
@@ -22955,14 +23077,24 @@ query SendMessage($params: Input_convassist_SendMessageRequest) {
22955
23077
  super(container, viewConfig);
22956
23078
  this.viewConfig = viewConfig;
22957
23079
  }
23080
+ /**
23081
+ * Extends the default APP_INIT payload with `embedParams.spotterSidebarConfig`
23082
+ * so the conv-assist app can read sidebar configuration on initialisation.
23083
+ *
23084
+ * Precedence for `enablePastConversationsSidebar`:
23085
+ * `spotterSidebarConfig.enablePastConversationsSidebar` wins over the
23086
+ * deprecated top-level `enablePastConversationsSidebar` flag; if the former
23087
+ * is absent the latter is used as a fallback.
23088
+ *
23089
+ * An invalid `spotterDocumentationUrl` triggers a validation error and is
23090
+ * excluded from the payload rather than forwarded to the app.
23091
+ */
23092
+ async getAppInitData() {
23093
+ const defaultAppInitData = await super.getAppInitData();
23094
+ return buildSpotterSidebarAppInitData(defaultAppInitData, this.viewConfig, this.handleError.bind(this));
23095
+ }
22958
23096
  getEmbedParamsObject() {
22959
- const { worksheetId, searchOptions, disableSourceSelection, hideSourceSelection, dataPanelV2, showSpotterLimitations, hideSampleQuestions, runtimeFilters, excludeRuntimeFiltersfromURL, runtimeParameters, excludeRuntimeParametersfromURL, updatedSpotterChatPrompt, spotterSidebarConfig, spotterChatConfig, } = this.viewConfig;
22960
- // Extract sidebar config properties
22961
- const { enablePastConversationsSidebar: sidebarEnablePastConversationsSidebar, spotterSidebarTitle, spotterSidebarDefaultExpanded, spotterChatRenameLabel, spotterChatDeleteLabel, spotterDeleteConversationModalTitle, spotterPastConversationAlertMessage, spotterDocumentationUrl, spotterBestPracticesLabel, spotterConversationsBatchSize, spotterNewChatButtonTitle, } = spotterSidebarConfig || {};
22962
- const resolvedEnablePastConversationsSidebar = resolveEnablePastConversationsSidebar({
22963
- spotterSidebarConfigValue: sidebarEnablePastConversationsSidebar,
22964
- standaloneValue: this.viewConfig.enablePastConversationsSidebar,
22965
- });
23097
+ const { worksheetId, searchOptions, disableSourceSelection, hideSourceSelection, dataPanelV2, showSpotterLimitations, hideSampleQuestions, runtimeFilters, excludeRuntimeFiltersfromURL, runtimeParameters, excludeRuntimeParametersfromURL, updatedSpotterChatPrompt, spotterChatConfig, } = this.viewConfig;
22966
23098
  if (!worksheetId) {
22967
23099
  this.handleError({
22968
23100
  errorType: ErrorDetailsTypes.VALIDATION_ERROR,
@@ -22980,32 +23112,6 @@ query SendMessage($params: Input_convassist_SendMessageRequest) {
22980
23112
  setParamIfDefined(queryParams, Param.ShowSpotterLimitations, showSpotterLimitations, true);
22981
23113
  setParamIfDefined(queryParams, Param.HideSampleQuestions, hideSampleQuestions, true);
22982
23114
  setParamIfDefined(queryParams, Param.UpdatedSpotterChatPrompt, updatedSpotterChatPrompt, true);
22983
- setParamIfDefined(queryParams, Param.EnablePastConversationsSidebar, resolvedEnablePastConversationsSidebar, true);
22984
- setParamIfDefined(queryParams, Param.SpotterSidebarDefaultExpanded, spotterSidebarDefaultExpanded, true);
22985
- // String params
22986
- setParamIfDefined(queryParams, Param.SpotterSidebarTitle, spotterSidebarTitle);
22987
- setParamIfDefined(queryParams, Param.SpotterChatRenameLabel, spotterChatRenameLabel);
22988
- setParamIfDefined(queryParams, Param.SpotterChatDeleteLabel, spotterChatDeleteLabel);
22989
- setParamIfDefined(queryParams, Param.SpotterDeleteConversationModalTitle, spotterDeleteConversationModalTitle);
22990
- setParamIfDefined(queryParams, Param.SpotterPastConversationAlertMessage, spotterPastConversationAlertMessage);
22991
- setParamIfDefined(queryParams, Param.SpotterBestPracticesLabel, spotterBestPracticesLabel);
22992
- setParamIfDefined(queryParams, Param.SpotterConversationsBatchSize, spotterConversationsBatchSize);
22993
- setParamIfDefined(queryParams, Param.SpotterNewChatButtonTitle, spotterNewChatButtonTitle);
22994
- // URL param with validation
22995
- if (spotterDocumentationUrl !== undefined) {
22996
- const [isValid, validationError] = validateHttpUrl(spotterDocumentationUrl);
22997
- if (isValid) {
22998
- queryParams[Param.SpotterDocumentationUrl] = spotterDocumentationUrl;
22999
- }
23000
- else {
23001
- this.handleError({
23002
- errorType: ErrorDetailsTypes.VALIDATION_ERROR,
23003
- message: ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL,
23004
- code: EmbedErrorCodes.INVALID_URL,
23005
- error: (validationError === null || validationError === void 0 ? void 0 : validationError.message) || ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL,
23006
- });
23007
- }
23008
- }
23009
23115
  // Handle spotterChatConfig params
23010
23116
  if (spotterChatConfig) {
23011
23117
  const { hideToolResponseCardBranding, toolResponseCardBrandingLabel, } = spotterChatConfig;
@@ -23255,38 +23361,6 @@ query SendMessage($params: Input_convassist_SendMessageRequest) {
23255
23361
  * ```
23256
23362
  */
23257
23363
  const PreRenderedSearchBarEmbed = componentFactory(SearchBarEmbed$1, true);
23258
- /**
23259
- * React component for LLM based search Sage embed.
23260
- * @example
23261
- * ```tsx
23262
- * function Sage() {
23263
- * return <SageEmbed
23264
- * showObjectResults={true}
23265
- * ... other view config props or event listeners.
23266
- * />
23267
- * }
23268
- * ```
23269
- */
23270
- const SageEmbed = componentFactory(SageEmbed$1);
23271
- /**
23272
- * React component for PreRendered Sage embed.
23273
- *
23274
- * PreRenderedSageEmbed will preRender the SageEmbed and will be hidden by
23275
- * default.
23276
- *
23277
- * SageEmbed with preRenderId passed will call showPreRender on the embed.
23278
- * @example
23279
- * ```tsx
23280
- * function LandingPageComponent() {
23281
- * return <PreRenderedSageEmbed preRenderId="someId" showObjectResults={true} />
23282
- * }
23283
- * ```
23284
- * function MyComponent() {
23285
- * return <SageEmbed preRenderId="someId" showObjectResults={true} />
23286
- * }
23287
- * ```
23288
- */
23289
- const PreRenderedSageEmbed = componentFactory(SageEmbed$1, true);
23290
23364
  /**
23291
23365
  * React component for LLM based conversation BI.
23292
23366
  * @example
@@ -30878,10 +30952,8 @@ query SendMessage($params: Input_convassist_SendMessageRequest) {
30878
30952
  exports.PreRenderedConversationEmbed = PreRenderedConversationEmbed;
30879
30953
  exports.PreRenderedLiveboardEmbed = PreRenderedLiveboardEmbed;
30880
30954
  exports.PreRenderedPinboardEmbed = PreRenderedPinboardEmbed;
30881
- exports.PreRenderedSageEmbed = PreRenderedSageEmbed;
30882
30955
  exports.PreRenderedSearchBarEmbed = PreRenderedSearchBarEmbed;
30883
30956
  exports.PreRenderedSearchEmbed = PreRenderedSearchEmbed;
30884
- exports.SageEmbed = SageEmbed;
30885
30957
  exports.SearchBarEmbed = SearchBarEmbed;
30886
30958
  exports.SearchEmbed = SearchEmbed;
30887
30959
  exports.SpotterEmbed = SpotterEmbed;