@thoughtspot/visual-embed-sdk 1.52.2-beta.2 → 1.53.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/cjs/package.json +1 -1
  2. package/cjs/src/contracts/contracts.spec.js +4 -0
  3. package/cjs/src/contracts/contracts.spec.js.map +1 -1
  4. package/cjs/src/contracts/host-event-contracts.d.ts +10 -0
  5. package/cjs/src/contracts/host-event-contracts.d.ts.map +1 -1
  6. package/cjs/src/css-variables.d.ts +373 -5
  7. package/cjs/src/css-variables.d.ts.map +1 -1
  8. package/cjs/src/embed/app.d.ts +15 -0
  9. package/cjs/src/embed/app.d.ts.map +1 -1
  10. package/cjs/src/embed/app.js +6 -3
  11. package/cjs/src/embed/app.js.map +1 -1
  12. package/cjs/src/embed/app.spec.js +28 -0
  13. package/cjs/src/embed/app.spec.js.map +1 -1
  14. package/cjs/src/embed/auto-frame-renderer.d.ts.map +1 -1
  15. package/cjs/src/embed/auto-frame-renderer.js +244 -4
  16. package/cjs/src/embed/auto-frame-renderer.js.map +1 -1
  17. package/cjs/src/embed/auto-frame-renderer.spec.js +389 -0
  18. package/cjs/src/embed/auto-frame-renderer.spec.js.map +1 -1
  19. package/cjs/src/embed/bodyless-conversation.js +1 -1
  20. package/cjs/src/embed/bodyless-conversation.js.map +1 -1
  21. package/cjs/src/embed/conversation.d.ts +29 -0
  22. package/cjs/src/embed/conversation.d.ts.map +1 -1
  23. package/cjs/src/embed/conversation.js +7 -3
  24. package/cjs/src/embed/conversation.js.map +1 -1
  25. package/cjs/src/embed/conversation.spec.js +88 -0
  26. package/cjs/src/embed/conversation.spec.js.map +1 -1
  27. package/cjs/src/embed/host-events.spec.js +32 -0
  28. package/cjs/src/embed/host-events.spec.js.map +1 -1
  29. package/cjs/src/embed/liveboard-override-utils.d.ts +59 -0
  30. package/cjs/src/embed/liveboard-override-utils.d.ts.map +1 -0
  31. package/cjs/src/embed/liveboard-override-utils.js +19 -0
  32. package/cjs/src/embed/liveboard-override-utils.js.map +1 -0
  33. package/cjs/src/embed/liveboard-override-utils.spec.d.ts +2 -0
  34. package/cjs/src/embed/liveboard-override-utils.spec.d.ts.map +1 -0
  35. package/cjs/src/embed/liveboard-override-utils.spec.js +34 -0
  36. package/cjs/src/embed/liveboard-override-utils.spec.js.map +1 -0
  37. package/cjs/src/embed/liveboard.d.ts +44 -13
  38. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  39. package/cjs/src/embed/liveboard.js +19 -23
  40. package/cjs/src/embed/liveboard.js.map +1 -1
  41. package/cjs/src/embed/liveboard.spec.js +122 -0
  42. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  43. package/cjs/src/embed/search-bar.js +1 -1
  44. package/cjs/src/embed/search-bar.js.map +1 -1
  45. package/cjs/src/embed/search.js +1 -1
  46. package/cjs/src/embed/search.js.map +1 -1
  47. package/cjs/src/embed/search.spec.js +20 -0
  48. package/cjs/src/embed/search.spec.js.map +1 -1
  49. package/cjs/src/embed/spotter-utils.d.ts +12 -0
  50. package/cjs/src/embed/spotter-utils.d.ts.map +1 -1
  51. package/cjs/src/embed/spotter-utils.js +20 -2
  52. package/cjs/src/embed/spotter-utils.js.map +1 -1
  53. package/cjs/src/embed/spotter-utils.spec.js +19 -0
  54. package/cjs/src/embed/spotter-utils.spec.js.map +1 -1
  55. package/cjs/src/embed/spotter-viz-utils.d.ts +15 -0
  56. package/cjs/src/embed/spotter-viz-utils.d.ts.map +1 -1
  57. package/cjs/src/embed/spotter-viz-utils.js.map +1 -1
  58. package/cjs/src/embed/spotter-viz-utils.spec.js +11 -0
  59. package/cjs/src/embed/spotter-viz-utils.spec.js.map +1 -1
  60. package/cjs/src/embed/ts-embed.d.ts +18 -20
  61. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  62. package/cjs/src/embed/ts-embed.js +181 -45
  63. package/cjs/src/embed/ts-embed.js.map +1 -1
  64. package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -1
  65. package/cjs/src/embed/ts-embed.spec.js +610 -0
  66. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  67. package/cjs/src/index.d.ts +5 -3
  68. package/cjs/src/index.d.ts.map +1 -1
  69. package/cjs/src/index.js +4 -2
  70. package/cjs/src/index.js.map +1 -1
  71. package/cjs/src/mixpanel-service.d.ts +1 -0
  72. package/cjs/src/mixpanel-service.d.ts.map +1 -1
  73. package/cjs/src/mixpanel-service.js +1 -0
  74. package/cjs/src/mixpanel-service.js.map +1 -1
  75. package/cjs/src/react/all-types-export.d.ts +1 -1
  76. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  77. package/cjs/src/react/all-types-export.js +2 -1
  78. package/cjs/src/react/all-types-export.js.map +1 -1
  79. package/cjs/src/types.d.ts +251 -4
  80. package/cjs/src/types.d.ts.map +1 -1
  81. package/cjs/src/types.js +176 -0
  82. package/cjs/src/types.js.map +1 -1
  83. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +1 -0
  84. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -1
  85. package/cjs/src/utils/graphql/answerService/answer-queries.js +8 -1
  86. package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -1
  87. package/cjs/src/utils/graphql/answerService/answerService.d.ts +28 -4
  88. package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
  89. package/cjs/src/utils/graphql/answerService/answerService.js +39 -4
  90. package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -1
  91. package/cjs/src/utils/graphql/answerService/answerService.spec.js +124 -0
  92. package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
  93. package/cjs/src/utils/runtimeTelemetry.d.ts +11 -0
  94. package/cjs/src/utils/runtimeTelemetry.d.ts.map +1 -0
  95. package/cjs/src/utils/runtimeTelemetry.js +34 -0
  96. package/cjs/src/utils/runtimeTelemetry.js.map +1 -0
  97. package/cjs/src/utils/runtimeTelemetry.spec.d.ts +2 -0
  98. package/cjs/src/utils/runtimeTelemetry.spec.d.ts.map +1 -0
  99. package/cjs/src/utils/runtimeTelemetry.spec.js +124 -0
  100. package/cjs/src/utils/runtimeTelemetry.spec.js.map +1 -0
  101. package/dist/{index-CnHREfvN.js → index-CrBnZBZv.js} +1 -1
  102. package/dist/src/contracts/host-event-contracts.d.ts +10 -0
  103. package/dist/src/contracts/host-event-contracts.d.ts.map +1 -1
  104. package/dist/src/css-variables.d.ts +373 -5
  105. package/dist/src/css-variables.d.ts.map +1 -1
  106. package/dist/src/embed/app.d.ts +15 -0
  107. package/dist/src/embed/app.d.ts.map +1 -1
  108. package/dist/src/embed/auto-frame-renderer.d.ts.map +1 -1
  109. package/dist/src/embed/conversation.d.ts +29 -0
  110. package/dist/src/embed/conversation.d.ts.map +1 -1
  111. package/dist/src/embed/liveboard-override-utils.d.ts +59 -0
  112. package/dist/src/embed/liveboard-override-utils.d.ts.map +1 -0
  113. package/dist/src/embed/liveboard-override-utils.spec.d.ts +2 -0
  114. package/dist/src/embed/liveboard-override-utils.spec.d.ts.map +1 -0
  115. package/dist/src/embed/liveboard.d.ts +44 -13
  116. package/dist/src/embed/liveboard.d.ts.map +1 -1
  117. package/dist/src/embed/spotter-utils.d.ts +12 -0
  118. package/dist/src/embed/spotter-utils.d.ts.map +1 -1
  119. package/dist/src/embed/spotter-viz-utils.d.ts +15 -0
  120. package/dist/src/embed/spotter-viz-utils.d.ts.map +1 -1
  121. package/dist/src/embed/ts-embed.d.ts +18 -20
  122. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  123. package/dist/src/embed/ts-embed.spec.d.ts.map +1 -1
  124. package/dist/src/index.d.ts +5 -3
  125. package/dist/src/index.d.ts.map +1 -1
  126. package/dist/src/mixpanel-service.d.ts +1 -0
  127. package/dist/src/mixpanel-service.d.ts.map +1 -1
  128. package/dist/src/react/all-types-export.d.ts +1 -1
  129. package/dist/src/react/all-types-export.d.ts.map +1 -1
  130. package/dist/src/types.d.ts +251 -4
  131. package/dist/src/types.d.ts.map +1 -1
  132. package/dist/src/utils/graphql/answerService/answer-queries.d.ts +1 -0
  133. package/dist/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -1
  134. package/dist/src/utils/graphql/answerService/answerService.d.ts +28 -4
  135. package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
  136. package/dist/src/utils/runtimeTelemetry.d.ts +11 -0
  137. package/dist/src/utils/runtimeTelemetry.d.ts.map +1 -0
  138. package/dist/src/utils/runtimeTelemetry.spec.d.ts +2 -0
  139. package/dist/src/utils/runtimeTelemetry.spec.d.ts.map +1 -0
  140. package/dist/tsembed-react.es.js +500 -85
  141. package/dist/tsembed-react.js +499 -84
  142. package/dist/tsembed.es.js +743 -90
  143. package/dist/tsembed.js +741 -88
  144. package/dist/visual-embed-sdk-react-full.d.ts +788 -44
  145. package/dist/visual-embed-sdk-react.d.ts +783 -44
  146. package/dist/visual-embed-sdk.d.ts +815 -45
  147. package/lib/package.json +1 -1
  148. package/lib/src/contracts/contracts.spec.js +4 -0
  149. package/lib/src/contracts/contracts.spec.js.map +1 -1
  150. package/lib/src/contracts/host-event-contracts.d.ts +10 -0
  151. package/lib/src/contracts/host-event-contracts.d.ts.map +1 -1
  152. package/lib/src/css-variables.d.ts +373 -5
  153. package/lib/src/css-variables.d.ts.map +1 -1
  154. package/lib/src/embed/app.d.ts +15 -0
  155. package/lib/src/embed/app.d.ts.map +1 -1
  156. package/lib/src/embed/app.js +7 -4
  157. package/lib/src/embed/app.js.map +1 -1
  158. package/lib/src/embed/app.spec.js +28 -0
  159. package/lib/src/embed/app.spec.js.map +1 -1
  160. package/lib/src/embed/auto-frame-renderer.d.ts.map +1 -1
  161. package/lib/src/embed/auto-frame-renderer.js +244 -4
  162. package/lib/src/embed/auto-frame-renderer.js.map +1 -1
  163. package/lib/src/embed/auto-frame-renderer.spec.js +389 -0
  164. package/lib/src/embed/auto-frame-renderer.spec.js.map +1 -1
  165. package/lib/src/embed/bodyless-conversation.js +1 -1
  166. package/lib/src/embed/bodyless-conversation.js.map +1 -1
  167. package/lib/src/embed/conversation.d.ts +29 -0
  168. package/lib/src/embed/conversation.d.ts.map +1 -1
  169. package/lib/src/embed/conversation.js +8 -4
  170. package/lib/src/embed/conversation.js.map +1 -1
  171. package/lib/src/embed/conversation.spec.js +89 -1
  172. package/lib/src/embed/conversation.spec.js.map +1 -1
  173. package/lib/src/embed/host-events.spec.js +32 -0
  174. package/lib/src/embed/host-events.spec.js.map +1 -1
  175. package/lib/src/embed/liveboard-override-utils.d.ts +59 -0
  176. package/lib/src/embed/liveboard-override-utils.d.ts.map +1 -0
  177. package/lib/src/embed/liveboard-override-utils.js +15 -0
  178. package/lib/src/embed/liveboard-override-utils.js.map +1 -0
  179. package/lib/src/embed/liveboard-override-utils.spec.d.ts +2 -0
  180. package/lib/src/embed/liveboard-override-utils.spec.d.ts.map +1 -0
  181. package/lib/src/embed/liveboard-override-utils.spec.js +32 -0
  182. package/lib/src/embed/liveboard-override-utils.spec.js.map +1 -0
  183. package/lib/src/embed/liveboard.d.ts +44 -13
  184. package/lib/src/embed/liveboard.d.ts.map +1 -1
  185. package/lib/src/embed/liveboard.js +19 -23
  186. package/lib/src/embed/liveboard.js.map +1 -1
  187. package/lib/src/embed/liveboard.spec.js +122 -0
  188. package/lib/src/embed/liveboard.spec.js.map +1 -1
  189. package/lib/src/embed/search-bar.js +1 -1
  190. package/lib/src/embed/search-bar.js.map +1 -1
  191. package/lib/src/embed/search.js +1 -1
  192. package/lib/src/embed/search.js.map +1 -1
  193. package/lib/src/embed/search.spec.js +20 -0
  194. package/lib/src/embed/search.spec.js.map +1 -1
  195. package/lib/src/embed/spotter-utils.d.ts +12 -0
  196. package/lib/src/embed/spotter-utils.d.ts.map +1 -1
  197. package/lib/src/embed/spotter-utils.js +19 -1
  198. package/lib/src/embed/spotter-utils.js.map +1 -1
  199. package/lib/src/embed/spotter-utils.spec.js +19 -0
  200. package/lib/src/embed/spotter-utils.spec.js.map +1 -1
  201. package/lib/src/embed/spotter-viz-utils.d.ts +15 -0
  202. package/lib/src/embed/spotter-viz-utils.d.ts.map +1 -1
  203. package/lib/src/embed/spotter-viz-utils.js.map +1 -1
  204. package/lib/src/embed/spotter-viz-utils.spec.js +11 -0
  205. package/lib/src/embed/spotter-viz-utils.spec.js.map +1 -1
  206. package/lib/src/embed/ts-embed.d.ts +18 -20
  207. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  208. package/lib/src/embed/ts-embed.js +181 -45
  209. package/lib/src/embed/ts-embed.js.map +1 -1
  210. package/lib/src/embed/ts-embed.spec.d.ts.map +1 -1
  211. package/lib/src/embed/ts-embed.spec.js +611 -1
  212. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  213. package/lib/src/index.d.ts +5 -3
  214. package/lib/src/index.d.ts.map +1 -1
  215. package/lib/src/index.js +3 -2
  216. package/lib/src/index.js.map +1 -1
  217. package/lib/src/mixpanel-service.d.ts +1 -0
  218. package/lib/src/mixpanel-service.d.ts.map +1 -1
  219. package/lib/src/mixpanel-service.js +1 -0
  220. package/lib/src/mixpanel-service.js.map +1 -1
  221. package/lib/src/react/all-types-export.d.ts +1 -1
  222. package/lib/src/react/all-types-export.d.ts.map +1 -1
  223. package/lib/src/react/all-types-export.js +1 -1
  224. package/lib/src/react/all-types-export.js.map +1 -1
  225. package/lib/src/types.d.ts +251 -4
  226. package/lib/src/types.d.ts.map +1 -1
  227. package/lib/src/types.js +176 -0
  228. package/lib/src/types.js.map +1 -1
  229. package/lib/src/utils/graphql/answerService/answer-queries.d.ts +1 -0
  230. package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -1
  231. package/lib/src/utils/graphql/answerService/answer-queries.js +7 -0
  232. package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -1
  233. package/lib/src/utils/graphql/answerService/answerService.d.ts +28 -4
  234. package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
  235. package/lib/src/utils/graphql/answerService/answerService.js +39 -4
  236. package/lib/src/utils/graphql/answerService/answerService.js.map +1 -1
  237. package/lib/src/utils/graphql/answerService/answerService.spec.js +125 -1
  238. package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
  239. package/lib/src/utils/runtimeTelemetry.d.ts +11 -0
  240. package/lib/src/utils/runtimeTelemetry.d.ts.map +1 -0
  241. package/lib/src/utils/runtimeTelemetry.js +28 -0
  242. package/lib/src/utils/runtimeTelemetry.js.map +1 -0
  243. package/lib/src/utils/runtimeTelemetry.spec.d.ts +2 -0
  244. package/lib/src/utils/runtimeTelemetry.spec.d.ts.map +1 -0
  245. package/lib/src/utils/runtimeTelemetry.spec.js +122 -0
  246. package/lib/src/utils/runtimeTelemetry.spec.js.map +1 -0
  247. package/lib/src/visual-embed-sdk.d.ts +815 -45
  248. package/package.json +1 -1
  249. package/src/contracts/contracts.spec.ts +4 -0
  250. package/src/contracts/host-event-contracts.ts +13 -0
  251. package/src/css-variables.ts +475 -26
  252. package/src/embed/app.spec.ts +32 -0
  253. package/src/embed/app.ts +29 -4
  254. package/src/embed/auto-frame-renderer.spec.ts +464 -0
  255. package/src/embed/auto-frame-renderer.ts +305 -6
  256. package/src/embed/bodyless-conversation.ts +1 -1
  257. package/src/embed/conversation.spec.ts +118 -1
  258. package/src/embed/conversation.ts +42 -3
  259. package/src/embed/host-events.spec.ts +44 -0
  260. package/src/embed/liveboard-override-utils.spec.ts +38 -0
  261. package/src/embed/liveboard-override-utils.ts +71 -0
  262. package/src/embed/liveboard.spec.ts +138 -0
  263. package/src/embed/liveboard.ts +64 -24
  264. package/src/embed/search-bar.tsx +1 -1
  265. package/src/embed/search.spec.ts +23 -0
  266. package/src/embed/search.ts +1 -1
  267. package/src/embed/spotter-utils.spec.ts +20 -0
  268. package/src/embed/spotter-utils.ts +24 -1
  269. package/src/embed/spotter-viz-utils.spec.ts +11 -0
  270. package/src/embed/spotter-viz-utils.ts +15 -0
  271. package/src/embed/ts-embed.spec.ts +767 -0
  272. package/src/embed/ts-embed.ts +186 -41
  273. package/src/index.ts +18 -1
  274. package/src/mixpanel-service.ts +1 -0
  275. package/src/react/all-types-export.ts +7 -0
  276. package/src/types.ts +254 -5
  277. package/src/utils/graphql/answerService/answer-queries.ts +8 -0
  278. package/src/utils/graphql/answerService/answerService.spec.ts +145 -1
  279. package/src/utils/graphql/answerService/answerService.ts +65 -3
  280. package/src/utils/runtimeTelemetry.spec.ts +148 -0
  281. package/src/utils/runtimeTelemetry.ts +50 -0
@@ -1,4 +1,4 @@
1
- /* @thoughtspot/visual-embed-sdk version 1.52.2-beta.2 */
1
+ /* @thoughtspot/visual-embed-sdk version 1.53.1 */
2
2
  'use client';
3
3
  import * as React from 'react';
4
4
  import React__default, { useRef, useCallback } from 'react';
@@ -1393,6 +1393,36 @@ var EmbedEvent;
1393
1393
  * ```
1394
1394
  */
1395
1395
  EmbedEvent["Edit"] = "edit";
1396
+ /**
1397
+ * Emitted when a user clicks **Edit** on a Liveboard.
1398
+ *
1399
+ * Fired alongside {@link EmbedEvent.Edit} for backward compatibility;
1400
+ * listen to this instead of `Edit` to target the Liveboard surface only.
1401
+ * @version SDK: 1.54.0 | ThoughtSpot Cloud: 26.11.0.cl
1402
+ * @example
1403
+ * ```js
1404
+ * liveboardEmbed.on(EmbedEvent.EditLiveboard, payload => {
1405
+ * console.log('Liveboard edit', payload);
1406
+ * })
1407
+ * ```
1408
+ */
1409
+ EmbedEvent["EditLiveboard"] = "editLiveboard";
1410
+ /**
1411
+ * Emitted when a user clicks **Edit** on a visualization inside a
1412
+ * Liveboard.
1413
+ *
1414
+ * Fired alongside {@link EmbedEvent.Edit} for backward compatibility;
1415
+ * listen to this instead of `Edit` to target the visualization surface
1416
+ * only.
1417
+ * @version SDK: 1.54.0 | ThoughtSpot Cloud: 26.11.0.cl
1418
+ * @example
1419
+ * ```js
1420
+ * liveboardEmbed.on(EmbedEvent.EditVisualization, payload => {
1421
+ * console.log('visualization edit', payload);
1422
+ * })
1423
+ * ```
1424
+ */
1425
+ EmbedEvent["EditVisualization"] = "editVisualization";
1396
1426
  /**
1397
1427
  * Emitted when a user clicks *Make a copy* on a Liveboard
1398
1428
  * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw
@@ -3364,6 +3394,46 @@ var HostEvent;
3364
3394
  * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw
3365
3395
  */
3366
3396
  HostEvent["Edit"] = "edit";
3397
+ /**
3398
+ * Trigger the **Edit** action on a Liveboard only — does not affect a
3399
+ * visualization's edit surface.
3400
+ *
3401
+ * Behaves like {@link HostEvent.Edit} restricted to the Liveboard
3402
+ * surface. Use {@link HostEvent.EditVisualization} to target a
3403
+ * visualization instead, or `HostEvent.Edit` to control whichever
3404
+ * surface applies contextually (unchanged, existing behavior).
3405
+ * @example
3406
+ * ```js
3407
+ * liveboardEmbed.trigger(HostEvent.EditLiveboard)
3408
+ * ```
3409
+ * @version SDK: 1.54.0 | ThoughtSpot Cloud: 26.11.0.cl
3410
+ */
3411
+ HostEvent["EditLiveboard"] = "editLiveboard";
3412
+ /**
3413
+ * Trigger the **Edit** action on a specific visualization inside a
3414
+ * Liveboard only — does not affect the Liveboard-level edit surface.
3415
+ * @param - Object parameter. Includes the following keys:
3416
+ * - `vizId`: **Required.** The visualization to edit.
3417
+ *
3418
+ * @example
3419
+ * ```js
3420
+ * liveboardEmbed.trigger(HostEvent.EditVisualization, {vizId:
3421
+ * '730496d6-6903-4601-937e-2c691821af3c'})
3422
+ * ```
3423
+ * @version SDK: 1.54.0 | ThoughtSpot Cloud: 26.11.0.cl
3424
+ */
3425
+ HostEvent["EditVisualization"] = "editVisualization";
3426
+ /**
3427
+ * Exits Liveboard edit mode , equivalent to clicking the
3428
+ * *Cancel* button in the Liveboard edit header. The Liveboard returns to
3429
+ * view mode and the embedded app emits the {@link EmbedEvent.Cancel} event.
3430
+ * @version SDK: 1.55.0 | ThoughtSpot Cloud: 26.12.0.cl
3431
+ * @example
3432
+ * ```js
3433
+ * liveboardEmbed.trigger(HostEvent.ExitEditMode);
3434
+ * ```
3435
+ */
3436
+ HostEvent["ExitEditMode"] = "exitEditMode";
3367
3437
  /**
3368
3438
  * Trigger the **Copy link** action on a Liveboard or visualization
3369
3439
  * Payload: {@link VizScopedRequest}.
@@ -4899,6 +4969,39 @@ var HostEvent;
4899
4969
  * @version SDK: 1.49.0 | ThoughtSpot Cloud: 26.6.0.cl
4900
4970
  */
4901
4971
  HostEvent["RefreshLiveboardBrowserCache"] = "refreshLiveboardBrowserCache";
4972
+ /**
4973
+ * Switch the embed between dark appearance and its default appearance
4974
+ * while it is open, without reloading it.
4975
+ * Payload: {@link UpdateThemeRequest}.
4976
+ *
4977
+ * Use it to keep the embed in step with a theme switch in your
4978
+ * application; the appearance the embed loads with is set by `isDarkMode`.
4979
+ * The event resolves with the applied value, such as `{ isDarkMode: true }`.
4980
+ * When dark appearance is not available in the embed, the embed does not
4981
+ * change and the event rejects with an error message instead.
4982
+ * @version SDK: 1.55.0 | ThoughtSpot Cloud: 26.12.0.cl
4983
+ * @param - `isDarkMode` - `true` for dark appearance, `false` for the
4984
+ * default appearance.
4985
+ * @example
4986
+ * ```js
4987
+ * appEmbed.trigger(HostEvent.UpdateTheme, { isDarkMode: true });
4988
+ * ```
4989
+ * @example
4990
+ * ```js
4991
+ * // Follow a theme switch in your application
4992
+ * const themeSwitch = document.querySelector('#theme-switch');
4993
+ * themeSwitch.addEventListener('change', async (event) => {
4994
+ * try {
4995
+ * await appEmbed.trigger(HostEvent.UpdateTheme, {
4996
+ * isDarkMode: event.target.checked,
4997
+ * });
4998
+ * } catch (error) {
4999
+ * console.warn(error);
5000
+ * }
5001
+ * });
5002
+ * ```
5003
+ */
5004
+ HostEvent["UpdateTheme"] = "UpdateTheme";
4902
5005
  })(HostEvent || (HostEvent = {}));
4903
5006
  /**
4904
5007
  * The different visual modes that the data sources panel within
@@ -4926,6 +5029,22 @@ var DataSourceVisualMode;
4926
5029
  var Param;
4927
5030
  (function (Param) {
4928
5031
  Param["Tsmcp"] = "tsmcp";
5032
+ /**
5033
+ * Marker added by a host app replaying a stored conversation. Carries the
5034
+ * analytical session (conversation) identifier, from which the renderer
5035
+ * resolves the answer's current session parameters. Stripped before the
5036
+ * URL reaches the ThoughtSpot application.
5037
+ * @version SDK: 1.52.2 | ThoughtSpot Cloud: 26.9.0.cl
5038
+ */
5039
+ Param["TsmcpConversationId"] = "tsmcpConversationId";
5040
+ /**
5041
+ * Zero-based position of the answer within the conversation, counting only
5042
+ * non-thinking answer items in message order. Accompanies
5043
+ * {@link TsmcpConversationId}; defaults to 0 when absent. Stripped before
5044
+ * the URL reaches the ThoughtSpot application.
5045
+ * @version SDK: 1.52.2 | ThoughtSpot Cloud: 26.9.0.cl
5046
+ */
5047
+ Param["TsmcpAnswerIndex"] = "tsmcpAnswerIndex";
4929
5048
  Param["EmbedApp"] = "embedApp";
4930
5049
  Param["DataSources"] = "dataSources";
4931
5050
  Param["DataSourceMode"] = "dataSourceMode";
@@ -5089,6 +5208,9 @@ var Param;
5089
5208
  Param["SpotterDataSources"] = "spotterDataSources";
5090
5209
  Param["OpenSpotterOnLiveboardByDefault"] = "openSpotterOnLiveboardByDefault";
5091
5210
  Param["ShowAnswerEditPanel"] = "showAnswerEditPanel";
5211
+ Param["IsDarkMode"] = "isDarkMode";
5212
+ Param["RadiantThemeEnabled"] = "radiantThemeEnabled";
5213
+ Param["SpotterExperienceVersion"] = "spotterExperienceVersion";
5092
5214
  })(Param || (Param = {}));
5093
5215
  /**
5094
5216
  * ThoughtSpot application pages include actions and menu commands
@@ -5543,12 +5665,43 @@ var Action;
5543
5665
  * The *Edit* action on the Liveboard page and in the
5544
5666
  * visualization menu.
5545
5667
  * Opens a Liveboard or visualization in edit mode.
5668
+ *
5669
+ * Controls both surfaces together. To target one surface only, use
5670
+ * {@link Action.EditLiveboard} or {@link Action.EditVisualization}.
5546
5671
  * @example
5547
5672
  * ```js
5548
5673
  * disabledActions: [Action.Edit]
5549
5674
  * ```
5550
5675
  */
5551
5676
  Action["Edit"] = "edit";
5677
+ /**
5678
+ * The *Edit* action on the Liveboard page only.
5679
+ * Opens a Liveboard in edit mode.
5680
+ *
5681
+ * Does not affect the *Edit* action in the visualization menu; use
5682
+ * {@link Action.EditVisualization} for that, or {@link Action.Edit} to
5683
+ * control both surfaces together.
5684
+ * @version SDK: 1.54.0 | ThoughtSpot Cloud: 26.11.0.cl
5685
+ * @example
5686
+ * ```js
5687
+ * disabledActions: [Action.EditLiveboard]
5688
+ * ```
5689
+ */
5690
+ Action["EditLiveboard"] = "editLiveboard";
5691
+ /**
5692
+ * The *Edit* action in the visualization `...` menu only.
5693
+ * Opens a visualization in the editor.
5694
+ *
5695
+ * Does not affect the *Edit* action on the Liveboard page; use
5696
+ * {@link Action.EditLiveboard} for that, or {@link Action.Edit} to
5697
+ * control both surfaces together.
5698
+ * @version SDK: 1.54.0 | ThoughtSpot Cloud: 26.11.0.cl
5699
+ * @example
5700
+ * ```js
5701
+ * disabledActions: [Action.EditVisualization]
5702
+ * ```
5703
+ */
5704
+ Action["EditVisualization"] = "editVisualization";
5552
5705
  /**
5553
5706
  * The text edit option for Liveboard and visualization titles.
5554
5707
  * @example
@@ -7324,6 +7477,29 @@ var Action;
7324
7477
  * ```
7325
7478
  */
7326
7479
  Action["CustomizeHomepage"] = "customizeHomepage";
7480
+ /**
7481
+ * Controls the visibility and disabled state of the *Cancel* button in the
7482
+ * Liveboard edit header, the button that discards the changes made in edit
7483
+ * mode and returns the Liveboard to view mode. The button is shown only
7484
+ * while the Liveboard is in edit mode.
7485
+ * @version SDK: 1.55.0 | ThoughtSpot Cloud: 26.12.0.cl
7486
+ * @example
7487
+ * ```js
7488
+ * const liveboardEmbed = new LiveboardEmbed('#tsEmbed', {
7489
+ * ... // other embed view config
7490
+ * hiddenActions: [Action.Cancel],
7491
+ * });
7492
+ * ```
7493
+ * @example
7494
+ * ```js
7495
+ * const liveboardEmbed = new LiveboardEmbed('#tsEmbed', {
7496
+ * ... // other embed view config
7497
+ * disabledActions: [Action.Cancel],
7498
+ * disabledActionReason: 'Save your changes to leave edit mode',
7499
+ * });
7500
+ * ```
7501
+ */
7502
+ Action["Cancel"] = "cancel";
7327
7503
  })(Action || (Action = {}));
7328
7504
  var PrefetchFeatures;
7329
7505
  (function (PrefetchFeatures) {
@@ -7828,7 +8004,7 @@ var TableContentDensity;
7828
8004
  TableContentDensity["Compact"] = "COMPACT";
7829
8005
  })(TableContentDensity || (TableContentDensity = {}));
7830
8006
 
7831
- var version$1="1.52.2-beta.2";var pkg = {version:version$1};
8007
+ var version$1="1.53.1";var pkg = {version:version$1};
7832
8008
 
7833
8009
  const { version } = pkg;
7834
8010
 
@@ -10097,6 +10273,13 @@ const addFilter = `
10097
10273
  }
10098
10274
  }
10099
10275
  `;
10276
+ const updateSort = `
10277
+ mutation UpdateSort($session: BachSessionIdInput!, $sortOrder: [AnswerColumnSortInput!]!) {
10278
+ Answer__updateSort(session: $session, sortOrder: $sortOrder) {
10279
+ ${bachSessionId}
10280
+ }
10281
+ }
10282
+ `;
10100
10283
  const getAnswer = `
10101
10284
  query GetAnswer($session: BachSessionIdInput!) {
10102
10285
  getAnswer(session: $session) {
@@ -10401,6 +10584,26 @@ class AnswerService {
10401
10584
  },
10402
10585
  });
10403
10586
  }
10587
+ /**
10588
+ * Adapt the sort options into the `updateSort` payload and send it.
10589
+ * @param sortOptions Columns to sort by, each with a direction.
10590
+ * @param sourceDetail
10591
+ */
10592
+ async adaptSorting(sortOptions, sourceDetail) {
10593
+ const { answer } = await this.executeQuery(getAnswer, {});
10594
+ const guidToColumnId = getGuidToColumnIdMap(answer);
10595
+ const sortOrder = sortOptions.map((sort) => {
10596
+ const guid = getGuidsFromColumnNames(sourceDetail, [sort.columnName])
10597
+ .values().next().value;
10598
+ return {
10599
+ columnId: guidToColumnId.get(guid),
10600
+ sortType: sort.ascending ? 'ASCENDING' : 'DESCENDING',
10601
+ };
10602
+ });
10603
+ return this.executeQuery(updateSort, {
10604
+ sortOrder,
10605
+ });
10606
+ }
10404
10607
  async updateDisplayMode(displayMode = "TABLE_MODE") {
10405
10608
  return this.executeQuery(updateDisplayMode, {
10406
10609
  displayMode,
@@ -10488,18 +10691,21 @@ class AnswerService {
10488
10691
  * automatically passed.
10489
10692
  * @param outputColumnNames
10490
10693
  * @param selectedPoints
10694
+ * @param sortOptions Optional columns to sort the underlying data by.
10491
10695
  * @example
10492
10696
  * ```js
10493
10697
  * embed.on(EmbedEvent.CustomAction, e => {
10494
- * const underlying = await e.answerService.getUnderlyingDataForPoint([
10495
- * 'col name 1' // The column should exist in the data source.
10496
- * ]);
10698
+ * const underlying = await e.answerService.getUnderlyingDataForPoint(
10699
+ * ['col name 1'], // The column should exist in the data source.
10700
+ * undefined,
10701
+ * [{ columnName: 'col name 1', ascending: true }],
10702
+ * );
10497
10703
  * const data = await underlying.fetchData(0, 100);
10498
10704
  * })
10499
10705
  * ```
10500
10706
  * @version SDK: 1.25.0 | ThoughtSpot: 9.10.0.cl
10501
10707
  */
10502
- async getUnderlyingDataForPoint(outputColumnNames, selectedPoints) {
10708
+ async getUnderlyingDataForPoint(outputColumnNames, selectedPoints, sortOptions) {
10503
10709
  if (!selectedPoints && !this.selectedPoints) {
10504
10710
  throw new Error('Needs to be triggered in context of a point');
10505
10711
  }
@@ -10527,6 +10733,9 @@ class AnswerService {
10527
10733
  if (columnsToRemove.length) {
10528
10734
  await unaggAnswerSession.removeColumns(columnsToRemove);
10529
10735
  }
10736
+ if (sortOptions === null || sortOptions === void 0 ? void 0 : sortOptions.length) {
10737
+ await unaggAnswerSession.adaptSorting(sortOptions, sourceDetail);
10738
+ }
10530
10739
  return unaggAnswerSession;
10531
10740
  }
10532
10741
  /**
@@ -10565,7 +10774,7 @@ class AnswerService {
10565
10774
  async getTML() {
10566
10775
  const { object } = await this.executeQuery(getAnswerTML, {});
10567
10776
  const edoc = object[0].edoc;
10568
- const YAML = await import('./index-CnHREfvN.js');
10777
+ const YAML = await import('./index-CrBnZBZv.js');
10569
10778
  const parsedDoc = YAML.parse(edoc);
10570
10779
  return {
10571
10780
  answer: {
@@ -10586,6 +10795,15 @@ class AnswerService {
10586
10795
  this.tmlOverride = override;
10587
10796
  }
10588
10797
  }
10798
+ /**
10799
+ * Build a map from a source column guid to the answer's viz column id, using
10800
+ * the `referencedColumns` link on each viz column.
10801
+ * @param answer
10802
+ */
10803
+ function getGuidToColumnIdMap(answer) {
10804
+ const tableViz = answer.visualizations.find((viz) => viz.columns);
10805
+ return new Map(tableViz.columns.map((col) => [col.column.referencedColumns[0].guid, col.column.id]));
10806
+ }
10589
10807
  /**
10590
10808
  *
10591
10809
  * @param sourceDetail
@@ -19666,6 +19884,7 @@ let mixpanelInstance;
19666
19884
  const MIXPANEL_EVENT = {
19667
19885
  VISUAL_SDK_RENDER_START: 'visual-sdk-render-start',
19668
19886
  VISUAL_SDK_CALLED_INIT: 'visual-sdk-called-init',
19887
+ VISUAL_SDK_INIT_ACTIONS: 'visual-sdk-init-actions',
19669
19888
  VISUAL_SDK_RENDER_COMPLETE: 'visual-sdk-render-complete',
19670
19889
  VISUAL_SDK_RENDER_FAILED: 'visual-sdk-render-failed',
19671
19890
  VISUAL_SDK_TRIGGER: 'visual-sdk-trigger',
@@ -19738,6 +19957,32 @@ function initMixpanel(sessionInfo) {
19738
19957
  }
19739
19958
  }
19740
19959
 
19960
+ // Membership is checked, not just the key: a bare key allowlist would upload an
19961
+ // arbitrary customer string sitting under `operator` verbatim.
19962
+ const isEnumMember = (enumObject, value) => typeof value === 'string' && Object.values(enumObject).includes(value);
19963
+ const uniqueEnumMembers = (enumObject, values) => Array.from(new Set(values.filter((v) => isEnumMember(enumObject, v))));
19964
+ const describeRuntimeFilters = (runtimeFilters) => ({
19965
+ count: runtimeFilters.length,
19966
+ operators: uniqueEnumMembers(RuntimeFilterOp, runtimeFilters.map((filter) => filter === null || filter === void 0 ? void 0 : filter.operator)),
19967
+ });
19968
+ const describeRuntimeParameters = (runtimeParameters) => ({
19969
+ count: runtimeParameters.length,
19970
+ applicabilityLevels: uniqueEnumMembers(ApplicabilityLevel, runtimeParameters.map((parameter) => { var _a; return (_a = parameter === null || parameter === void 0 ? void 0 : parameter.applicability) === null || _a === void 0 ? void 0 : _a.level; })),
19971
+ });
19972
+ // Column names, parameter names and operands are customer data and must never
19973
+ // reach Mixpanel; an unrecognized shape is dropped rather than forwarded.
19974
+ const summarizeRuntimeDataForTelemetry = (viewConfig) => {
19975
+ const { runtimeFilters, runtimeParameters, ...rest } = viewConfig !== null && viewConfig !== void 0 ? viewConfig : {};
19976
+ const telemetryProps = { ...rest };
19977
+ if (Array.isArray(runtimeFilters)) {
19978
+ telemetryProps.runtimeFilters = describeRuntimeFilters(runtimeFilters);
19979
+ }
19980
+ if (Array.isArray(runtimeParameters)) {
19981
+ telemetryProps.runtimeParameters = describeRuntimeParameters(runtimeParameters);
19982
+ }
19983
+ return telemetryProps;
19984
+ };
19985
+
19741
19986
  var eventemitter3 = createCommonjsModule(function (module) {
19742
19987
 
19743
19988
  var has = Object.prototype.hasOwnProperty
@@ -21877,6 +22122,97 @@ const UPDATE_EMBED_PARAMS_SETTLE_MS = 200;
21877
22122
  // truthy, so null or '' leaves the previous embed's values in place. '&' is
21878
22123
  // truthy and parses to {}.
21879
22124
  const NO_RUNTIME_PARAMS = '&';
22125
+ /**
22126
+ * Params kept on the iframe `src` when `excludeConfigFromURL` is set. The rest
22127
+ * are sent in the APP_INIT payload.
22128
+ * @internal
22129
+ */
22130
+ const BOOTSTRAP_URL_PARAMS = new Set([
22131
+ // Marks the app as embedded.
22132
+ Param.EmbedApp,
22133
+ // The host page URL, used to validate the postMessage origin.
22134
+ Param.HostAppUrl,
22135
+ // The SDK version.
22136
+ Param.Version,
22137
+ // The authentication type set in init.
22138
+ Param.AuthType,
22139
+ // Whether the app signs the user in automatically.
22140
+ Param.AutoLogin,
22141
+ // Stops the app from redirecting to its login page.
22142
+ Param.DisableLoginRedirect,
22143
+ // Forces the SAML redirect for EmbeddedSSO.
22144
+ Param.ForceSAMLAutoRedirect,
22145
+ // Set for cookieless trusted authentication.
22146
+ Param.cookieless,
22147
+ // Lets the app use the pre-fetched auth info.
22148
+ Param.preAuthCache,
22149
+ // Blocks access to the full app outside the embed.
22150
+ Param.blockNonEmbedFullAppAccess,
22151
+ // The org to load, which the auth info depends on.
22152
+ Param.OverrideOrgId,
22153
+ // The host window height when the iframe loads.
22154
+ Param.ViewPortHeight,
22155
+ // The host window width when the iframe loads.
22156
+ Param.ViewPortWidth,
22157
+ // The app's client log level.
22158
+ Param.ClientLogLevel,
22159
+ // Lets the app override the native console.
22160
+ Param.OverrideNativeConsole,
22161
+ // An extra Pendo tracking key.
22162
+ Param.PendoTrackingKey,
22163
+ // The locale for number formatting.
22164
+ Param.NumberFormatLocale,
22165
+ // The locale for date formatting.
22166
+ Param.DateFormatLocale,
22167
+ // The currency format.
22168
+ Param.CurrencyFormat,
22169
+ // The UI language.
22170
+ Param.Locale,
22171
+ // Turns on dark mode.
22172
+ Param.IsDarkMode,
22173
+ // Turns on the radiant theme that dark mode needs.
22174
+ Param.RadiantThemeEnabled,
22175
+ // Marks a SearchEmbed or SearchBarEmbed.
22176
+ Param.searchEmbed,
22177
+ // Marks a LiveboardEmbed.
22178
+ Param.livedBoardEmbed,
22179
+ // Marks a SpotterAgentEmbed.
22180
+ Param.isSpotterAgentEmbed,
22181
+ // Marks a SpotterEmbed.
22182
+ Param.SpotterEnabled,
22183
+ // Marks an AppEmbed.
22184
+ Param.IsFullAppEmbed,
22185
+ // Legacy flag for the onBeforeGetVizData API intercept.
22186
+ Param.IsOnBeforeGetVizDataInterceptEnabled,
22187
+ // Lets the host override links in the app.
22188
+ Param.LinkOverride,
22189
+ // Turns on version 2 of the link overrides.
22190
+ Param.EnableLinkOverridesV2,
22191
+ // Stops links from opening in a new tab.
22192
+ Param.DisableRedirectionLinksInNewTab,
22193
+ // Uses replaceState instead of pushState for app navigation.
22194
+ Param.OverrideHistoryState,
22195
+ // Shows search results as a table.
22196
+ Param.ForceTable,
22197
+ // The URL of the custom string IDs file.
22198
+ Param.StringIDsUrl,
22199
+ // The data sources that search opens with.
22200
+ Param.DataSources,
22201
+ // Exposes translation IDs in the app.
22202
+ Param.ExposeTranslationIDs,
22203
+ // The URL of the custom icon sprite.
22204
+ Param.IconSpriteUrl,
22205
+ // The tag that filters the metadata lists in an AppEmbed.
22206
+ Param.Tag,
22207
+ // Set when a Liveboard embed shows a single visualization (vizId).
22208
+ Param.vizEmbed,
22209
+ // Whether search opens with the last-selected data sources.
22210
+ Param.UseLastSelectedDataSource,
22211
+ // The query mode Spotter opens in.
22212
+ Param.DefaultQueryMode,
22213
+ // The initial search query. Omitted with excludeSearchTokenStringFromURL.
22214
+ Param.searchTokenString,
22215
+ ]);
21880
22216
  /**
21881
22217
  * The event id map from v2 event names to v1 event id
21882
22218
  * v1 events are the classic embed events implemented in Blink v1
@@ -21905,6 +22241,7 @@ class TsEmbed {
21905
22241
  this.embedNodeKey = '__tsEmbed';
21906
22242
  this.embedContainerLoadedKey = '__tsEmbedContainerLoaded';
21907
22243
  this.isAppInitialized = false;
22244
+ this.initDataParams = {};
21908
22245
  /**
21909
22246
  * Should we encode URL Query Params using base64 encoding which ThoughtSpot
21910
22247
  * will generate for embedding. This provides additional security to
@@ -21939,7 +22276,7 @@ class TsEmbed {
21939
22276
  */
21940
22277
  this.appInitCb = async (_, responder) => {
21941
22278
  try {
21942
- const appInitData = await this.getAppInitData();
22279
+ const appInitData = this.withInitDataParams(await this.getAppInitData());
21943
22280
  this.isAppInitialized = true;
21944
22281
  responder({
21945
22282
  type: EmbedEvent.APP_INIT,
@@ -22093,9 +22430,7 @@ class TsEmbed {
22093
22430
  ...viewConfig,
22094
22431
  };
22095
22432
  this.registerAppInit();
22096
- uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
22097
- ...viewConfig,
22098
- });
22433
+ uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, summarizeRuntimeDataForTelemetry(viewConfig));
22099
22434
  const embedConfig = getEmbedConfig();
22100
22435
  if (embedConfig) {
22101
22436
  this.embedConfig = embedConfig;
@@ -22367,6 +22702,18 @@ class TsEmbed {
22367
22702
  async getAppInitData() {
22368
22703
  return this.getDefaultAppInitData();
22369
22704
  }
22705
+ withInitDataParams(appInitData) {
22706
+ if (isEmpty_1(this.initDataParams)) {
22707
+ return appInitData;
22708
+ }
22709
+ return {
22710
+ ...appInitData,
22711
+ embedParams: {
22712
+ ...this.initDataParams,
22713
+ ...(appInitData.embedParams || {}),
22714
+ },
22715
+ };
22716
+ }
22370
22717
  /**
22371
22718
  * Helper method to refresh/update auth token for TrustedAuthTokenCookieless auth type
22372
22719
  * @param responder - Function to send response back
@@ -22426,7 +22773,7 @@ class TsEmbed {
22426
22773
  * @returns queryParams
22427
22774
  */
22428
22775
  getBaseQueryParams(queryParams = {}) {
22429
- var _a, _b, _c, _d;
22776
+ var _a, _b, _c, _d, _e;
22430
22777
  let hostAppUrl = ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.host) || '';
22431
22778
  // The below check is needed because TS Cloud firewall, blocks
22432
22779
  // localhost/127.0.0.1 in any url param.
@@ -22463,6 +22810,15 @@ class TsEmbed {
22463
22810
  if (this.embedConfig.currencyFormat) {
22464
22811
  queryParams[Param.CurrencyFormat] = this.embedConfig.currencyFormat;
22465
22812
  }
22813
+ // The view config wins over init, so an embed can opt out of a dark
22814
+ // mode set in `init`. `??` and not `||`, so that an explicit `false`
22815
+ // overrides an init-level `true`.
22816
+ const isDarkMode = (_c = this.viewConfig.isDarkMode) !== null && _c !== void 0 ? _c : this.embedConfig.isDarkMode;
22817
+ setParamIfDefined(queryParams, Param.IsDarkMode, isDarkMode, true);
22818
+ // The app's dark mode lives in its radiant theme, so turn that on too.
22819
+ if (isDarkMode) {
22820
+ queryParams[Param.RadiantThemeEnabled] = true;
22821
+ }
22466
22822
  const { disabledActions, disabledActionReason, hiddenActions, visibleActions, hiddenTabs, visibleTabs, showAlerts, additionalFlags: additionalFlagsFromView, locale, customizations, contextMenuTrigger, linkOverride, enableLinkOverridesV2, insertInToSlide, disableRedirectionLinksInNewTab, overrideOrgId, overrideHistoryState, exposeTranslationIDs, primaryAction, } = this.viewConfig;
22467
22823
  const { additionalFlags: additionalFlagsFromInit } = this.embedConfig;
22468
22824
  const additionalFlags = {
@@ -22528,7 +22884,7 @@ class TsEmbed {
22528
22884
  if (spriteUrl) {
22529
22885
  queryParams[Param.IconSpriteUrl] = spriteUrl.replace('https://', '');
22530
22886
  }
22531
- const stringIDsUrl = ((_c = customizations === null || customizations === void 0 ? void 0 : customizations.content) === null || _c === void 0 ? void 0 : _c.stringIDsUrl) || ((_d = embedCustomizations === null || embedCustomizations === void 0 ? void 0 : embedCustomizations.content) === null || _d === void 0 ? void 0 : _d.stringIDsUrl);
22887
+ const stringIDsUrl = ((_d = customizations === null || customizations === void 0 ? void 0 : customizations.content) === null || _d === void 0 ? void 0 : _d.stringIDsUrl) || ((_e = embedCustomizations === null || embedCustomizations === void 0 ? void 0 : embedCustomizations.content) === null || _e === void 0 ? void 0 : _e.stringIDsUrl);
22532
22888
  if (stringIDsUrl) {
22533
22889
  queryParams[Param.StringIDsUrl] = stringIDsUrl;
22534
22890
  }
@@ -22582,13 +22938,32 @@ class TsEmbed {
22582
22938
  return path;
22583
22939
  }
22584
22940
  getEmbedParams() {
22585
- const queryParams = this.getEmbedParamsObject();
22941
+ const queryParams = this.getUrlQueryParamsObject();
22586
22942
  return getQueryParamString(queryParams);
22587
22943
  }
22588
22944
  getEmbedParamsObject() {
22589
22945
  const params = this.getBaseQueryParams();
22590
22946
  return params;
22591
22947
  }
22948
+ getUrlQueryParamsObject() {
22949
+ const queryParams = this.getEmbedParamsObject();
22950
+ if (!this.isConfigExcludedFromUrl()) {
22951
+ this.initDataParams = {};
22952
+ return queryParams;
22953
+ }
22954
+ const urlParams = {};
22955
+ const excludedParams = {};
22956
+ Object.entries(queryParams).forEach(([key, value]) => {
22957
+ if (BOOTSTRAP_URL_PARAMS.has(key)) {
22958
+ urlParams[key] = value;
22959
+ }
22960
+ else {
22961
+ excludedParams[key] = deserializeParam(value);
22962
+ }
22963
+ });
22964
+ this.initDataParams = excludedParams;
22965
+ return urlParams;
22966
+ }
22592
22967
  getRootIframeSrc() {
22593
22968
  const query = this.getEmbedParams();
22594
22969
  return this.getEmbedBasePath(query);
@@ -22827,26 +23202,12 @@ class TsEmbed {
22827
23202
  return placeholder;
22828
23203
  }
22829
23204
  /**
22830
- * Resolves the configured preRenderContainer to a live element. A string
22831
- * selector is re-queried on every call so a remounted container (E.g.: React
22832
- * replacing the node) resolves to the fresh element; an element passed
22833
- * directly cannot be re-resolved.
22834
- *
22835
- * With nothing configured the frame goes into the host element's nearest
22836
- * scrolling ancestor, falling back to `document.body`.
22837
- *
22838
- * The wrapper is absolutely positioned, so it follows the page for free —
22839
- * but only while it sits inside whatever scrolls. `document.body` is right
22840
- * only when the document itself is the scroller; an app that scrolls an
22841
- * inner element instead left the frame pinned to the viewport while the page
22842
- * moved under it (SCAL-338563). Being inside the scroller also lets wheel
22843
- * events chain out of the frame into it, which they cannot do from
22844
- * `document.body`.
22845
- *
22846
- * A scrolling ancestor is layout chrome rather than route content, so it
22847
- * outlives the embed in practice; and if it does go, the host element goes
22848
- * with it and this instance is remounting anyway.
22849
- * `reconcilePreRenderContainer` re-runs this on a detached container.
23205
+ * Resolves the configured preRenderContainer, or defaults to the host's
23206
+ * nearest scrolling ancestor (document.body if none). The absolutely
23207
+ * positioned wrapper only follows the page while it sits inside what
23208
+ * scrolls, so body is right only when the document itself scrolls — an inner
23209
+ * scroller left the frame pinned to the viewport (SCAL-338563). A string
23210
+ * selector is re-queried each call so a remounted container resolves fresh.
22850
23211
  */
22851
23212
  resolvePreRenderContainerTarget() {
22852
23213
  var _a;
@@ -23288,9 +23649,16 @@ class TsEmbed {
23288
23649
  * @param args
23289
23650
  */
23290
23651
  async render() {
23652
+ var _a, _b, _c;
23291
23653
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_CALLED, {
23292
23654
  embedComponentType: this.viewConfig.embedComponentType,
23293
23655
  });
23656
+ uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_INIT_ACTIONS, {
23657
+ embedComponentType: this.viewConfig.embedComponentType,
23658
+ hiddenActions: (_a = this.viewConfig.hiddenActions) !== null && _a !== void 0 ? _a : [],
23659
+ visibleActions: (_b = this.viewConfig.visibleActions) !== null && _b !== void 0 ? _b : [],
23660
+ disabledActions: (_c = this.viewConfig.disabledActions) !== null && _c !== void 0 ? _c : [],
23661
+ });
23294
23662
  if (!getIsInitCalled()) {
23295
23663
  logger$3.error(ERROR_MESSAGE.RENDER_CALLED_BEFORE_INIT);
23296
23664
  }
@@ -23525,6 +23893,26 @@ class TsEmbed {
23525
23893
  this.isRendered = true;
23526
23894
  return this.renderIFrame(prerenderFrameSrc);
23527
23895
  }
23896
+ isConfigExcludedFromUrl() {
23897
+ var _a, _b, _c;
23898
+ const flag = (_b = (_a = this.viewConfig.additionalFlags) === null || _a === void 0 ? void 0 : _a.excludeConfigFromURL) !== null && _b !== void 0 ? _b : (_c = this.embedConfig.additionalFlags) === null || _c === void 0 ? void 0 : _c.excludeConfigFromURL;
23899
+ return flag === true || flag === 'true';
23900
+ }
23901
+ async triggerUpdateEmbedParams() {
23902
+ try {
23903
+ const params = await this.getUpdateEmbedParamsObject();
23904
+ this.trigger(HostEvent.UpdateEmbedParams, params);
23905
+ }
23906
+ catch (error) {
23907
+ logger$3.error(ERROR_MESSAGE.UPDATE_PARAMS_FAILED, error);
23908
+ this.handleError({
23909
+ errorType: ErrorDetailsTypes.API,
23910
+ message: (error === null || error === void 0 ? void 0 : error.message) || ERROR_MESSAGE.UPDATE_PARAMS_FAILED,
23911
+ code: EmbedErrorCodes.UPDATE_PARAMS_FAILED,
23912
+ error: (error === null || error === void 0 ? void 0 : error.message) || error,
23913
+ });
23914
+ }
23915
+ }
23528
23916
  beforePrerenderVisible() {
23529
23917
  // We can ignore this as its a bit expensive and the newer customers
23530
23918
  // have moved on to UpdateEmbedParams supported clusters
@@ -23535,17 +23923,7 @@ class TsEmbed {
23535
23923
  this.preRenderParamsApplied = new Promise((resolve) => {
23536
23924
  this.executeAfterEmbedContainerLoaded(async () => {
23537
23925
  try {
23538
- const params = await this.getUpdateEmbedParamsObject();
23539
- this.trigger(HostEvent.UpdateEmbedParams, params);
23540
- }
23541
- catch (error) {
23542
- logger$3.error(ERROR_MESSAGE.UPDATE_PARAMS_FAILED, error);
23543
- this.handleError({
23544
- errorType: ErrorDetailsTypes.API,
23545
- message: (error === null || error === void 0 ? void 0 : error.message) || ERROR_MESSAGE.UPDATE_PARAMS_FAILED,
23546
- code: EmbedErrorCodes.UPDATE_PARAMS_FAILED,
23547
- error: (error === null || error === void 0 ? void 0 : error.message) || error,
23548
- });
23926
+ await this.triggerUpdateEmbedParams();
23549
23927
  }
23550
23928
  finally {
23551
23929
  setTimeout(resolve, UPDATE_EMBED_PARAMS_SETTLE_MS);
@@ -23679,19 +24057,21 @@ class TsEmbed {
23679
24057
  return;
23680
24058
  }
23681
24059
  const { zIndex } = this.getPreRenderConfig();
24060
+ // A hidden pre-render frame must add no scroll space to the host page.
23682
24061
  const preRenderHideStyles = {
23683
24062
  opacity: '0',
23684
24063
  pointerEvents: 'none',
23685
24064
  zIndex: zIndex !== undefined ? String(zIndex) : '-1000',
23686
- position: 'absolute',
24065
+ // Resolves to the viewport, so the hidden frame belongs to no
24066
+ // scroll container's overflow; syncPreRenderStyle restores absolute
24067
+ // on show.
24068
+ position: 'fixed',
23687
24069
  top: '0',
23688
24070
  left: '0',
23689
24071
  overflow: 'hidden',
23690
- // Keeps the measured size — so the next show needs no resize, which
23691
- // is the point of pre-rendering — while lifting the box out of
23692
- // the container's scrollable area. Overflow only extends
23693
- // downwards, so a hidden frame parked above the top edge adds
23694
- // none, where one left at full height shows as blank scroll space.
24072
+ // The one exception: a transformed or contained ancestor captures
24073
+ // `fixed`; parking above the top edge keeps it out of that
24074
+ // overflow.
23695
24075
  transform: PRERENDER_PARKED_TRANSFORM,
23696
24076
  };
23697
24077
  setStyleProperties(this.preRenderWrapper, preRenderHideStyles);
@@ -23880,7 +24260,7 @@ let SearchBarEmbed$1 = class SearchBarEmbed extends TsEmbed {
23880
24260
  * @param dataSources A list of data source GUIDs
23881
24261
  */
23882
24262
  getIFrameSrc() {
23883
- const queryParams = this.getEmbedParamsObject();
24263
+ const queryParams = this.getUrlQueryParamsObject();
23884
24264
  const path = 'search-bar-embed';
23885
24265
  let query = '';
23886
24266
  const queryParamsString = getQueryParamString(queryParams, true);
@@ -24067,7 +24447,7 @@ let SearchEmbed$1 = class SearchEmbed extends TsEmbed {
24067
24447
  }
24068
24448
  getEmbedParams() {
24069
24449
  const { runtimeParameters, runtimeFilters, excludeRuntimeParametersfromURL, excludeRuntimeFiltersfromURL, } = this.viewConfig;
24070
- const queryParams = this.getEmbedParamsObject();
24450
+ const queryParams = this.getUrlQueryParamsObject();
24071
24451
  let query = '';
24072
24452
  const queryParamsString = getQueryParamString(queryParams, true);
24073
24453
  if (queryParamsString) {
@@ -24400,8 +24780,11 @@ function buildSpotterSidebarAppInitData(defaultAppInitData, viewConfig, handleEr
24400
24780
  embedParams: { visualOverridesParams: visualOverrides },
24401
24781
  };
24402
24782
  }
24783
+ // The app reads enableSpotterInstructionAndMoreSettings from the top level
24784
+ // of embedParams, so lift it out of the sidebar config.
24785
+ const { enableSpotterInstructionAndMoreSettings, ...sidebarConfigRest } = spotterSidebarConfig || {};
24403
24786
  const resolvedSidebarConfig = {
24404
- ...spotterSidebarConfig,
24787
+ ...sidebarConfigRest,
24405
24788
  ...(resolvedEnablePastConversations !== undefined && {
24406
24789
  enablePastConversationsSidebar: resolvedEnablePastConversations,
24407
24790
  }),
@@ -24423,6 +24806,9 @@ function buildSpotterSidebarAppInitData(defaultAppInitData, viewConfig, handleEr
24423
24806
  embedParams: {
24424
24807
  ...(defaultAppInitData.embedParams || {}),
24425
24808
  spotterSidebarConfig: resolvedSidebarConfig,
24809
+ ...(enableSpotterInstructionAndMoreSettings !== undefined
24810
+ ? { enableSpotterInstructionAndMoreSettings }
24811
+ : {}),
24426
24812
  ...(visualOverrides !== undefined ? { visualOverridesParams: visualOverrides } : {}),
24427
24813
  },
24428
24814
  };
@@ -24463,7 +24849,19 @@ function buildSpotterAnalystAppInitData(initData, viewConfig) {
24463
24849
  spotterAnalystConfig,
24464
24850
  },
24465
24851
  };
24466
- }
24852
+ }
24853
+ /**
24854
+ * The Spotter experience version to load in the embedded view.
24855
+ * @version SDK: 1.53.0 | ThoughtSpot Cloud: 26.11.0.cl
24856
+ * @group Embed components
24857
+ */
24858
+ var SpotterExperienceVersion;
24859
+ (function (SpotterExperienceVersion) {
24860
+ /**
24861
+ * The Spotter experience version introduced in ThoughtSpot 26.11.
24862
+ */
24863
+ SpotterExperienceVersion["SPOTTER_2026_11"] = "spotter_2026_11";
24864
+ })(SpotterExperienceVersion || (SpotterExperienceVersion = {}));
24467
24865
 
24468
24866
  function buildSpotterVizAppInitData(initData, viewConfig) {
24469
24867
  const { spotterViz } = viewConfig;
@@ -24660,12 +25058,12 @@ let AppEmbed$1 = class AppEmbed extends V1Embed {
24660
25058
  * embedded Liveboard or visualization.
24661
25059
  */
24662
25060
  getEmbedParams() {
24663
- const params = this.getEmbedParamsObject();
25061
+ const params = this.getUrlQueryParamsObject();
24664
25062
  return getQueryParamString(params, true);
24665
25063
  }
24666
25064
  getEmbedParamsObject() {
24667
25065
  var _a;
24668
- const { tag, hideTagFilterChips, hideObjects, liveboardV2, showPrimaryNavbar, disableProfileAndHelp, hideHamburger, hideObjectSearch, hideNotification, hideApplicationSwitcher, hideOrgSwitcher, enableSearchAssist, newConnectionsExperience, dataPanelV2 = true, updatedSpotterExperience, hideLiveboardHeader = false, showLiveboardTitle = true, showLiveboardDescription = true, showMaskedFilterChip = false, isLiveboardMasterpiecesEnabled, newChartsLibrary, hideHomepageLeftNav = false, modularHomeExperience, isLiveboardHeaderSticky = true, enableAskSage, collapseSearchBarInitially = false, enable2ColumnLayout, isLiveboardAlwaysOn12ColLayout, enableCustomColumnGroups = false, dataPanelCustomGroupsAccordionInitialState = DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL, collapseSearchBar = true, isLiveboardCompactHeaderEnabled, showLiveboardVerifiedBadge = true, showLiveboardReverifyBanner = true, hideIrrelevantChipsInLiveboardTabs, isEnhancedFilterInteractivityEnabled, homePageSearchBarMode, isUnifiedSearchExperienceEnabled = true, enablePendoHelp = true, discoveryExperience, coverAndFilterOptionInPDF, isLiveboardStylingAndGroupingEnabled, liveboardGutter, isPNGInScheduledEmailsEnabled = false, isLiveboardXLSXCSVDownloadEnabled, isGranularXLSXCSVSchedulesEnabled, isCentralizedLiveboardFilterUXEnabled = false, isScopedLiveboardFilteringEnabled, isLinkParametersEnabled, updatedSpotterChatPrompt, showSpotterRadiance, defaultQueryMode, enableStopAnswerGenerationEmbed, spotterChatConfig, spotterDataSources, isThisPeriodInDateFiltersEnabled, enableHomepageAnnouncement = false, isContinuousLiveboardPDFEnabled, enableLiveboardDataCache, hideAnswerEditPanel, } = this.viewConfig;
25066
+ const { tag, hideTagFilterChips, hideObjects, liveboardV2, showPrimaryNavbar, disableProfileAndHelp, hideHamburger, hideObjectSearch, hideNotification, hideApplicationSwitcher, hideOrgSwitcher, enableSearchAssist, newConnectionsExperience, dataPanelV2 = true, updatedSpotterExperience, hideLiveboardHeader = false, showLiveboardTitle = true, showLiveboardDescription = true, showMaskedFilterChip = false, isLiveboardMasterpiecesEnabled, newChartsLibrary, hideHomepageLeftNav = false, modularHomeExperience, isLiveboardHeaderSticky = true, enableAskSage, collapseSearchBarInitially = false, enable2ColumnLayout, isLiveboardAlwaysOn12ColLayout, enableCustomColumnGroups = false, dataPanelCustomGroupsAccordionInitialState = DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL, collapseSearchBar = true, isLiveboardCompactHeaderEnabled, showLiveboardVerifiedBadge = true, showLiveboardReverifyBanner = true, hideIrrelevantChipsInLiveboardTabs, isEnhancedFilterInteractivityEnabled, homePageSearchBarMode, isUnifiedSearchExperienceEnabled = true, enablePendoHelp = true, discoveryExperience, coverAndFilterOptionInPDF, isLiveboardStylingAndGroupingEnabled, liveboardGutter, isPNGInScheduledEmailsEnabled = false, isLiveboardXLSXCSVDownloadEnabled, isGranularXLSXCSVSchedulesEnabled, isCentralizedLiveboardFilterUXEnabled = false, isScopedLiveboardFilteringEnabled, isLinkParametersEnabled, updatedSpotterChatPrompt, showSpotterRadiance, defaultQueryMode, enableStopAnswerGenerationEmbed, spotterChatConfig, spotterDataSources, isThisPeriodInDateFiltersEnabled, enableHomepageAnnouncement = false, isContinuousLiveboardPDFEnabled, enableLiveboardDataCache, hideAnswerEditPanel, spotterExperienceVersion, } = this.viewConfig;
24669
25067
  let params = {};
24670
25068
  params[Param.PrimaryNavHidden] = !showPrimaryNavbar;
24671
25069
  params[Param.HideProfleAndHelp] = !!disableProfileAndHelp;
@@ -24720,6 +25118,9 @@ let AppEmbed$1 = class AppEmbed extends V1Embed {
24720
25118
  if (spotterDataSources && spotterDataSources.length) {
24721
25119
  params[Param.SpotterDataSources] = JSON.stringify(spotterDataSources);
24722
25120
  }
25121
+ if (spotterExperienceVersion !== undefined) {
25122
+ params[Param.SpotterExperienceVersion] = spotterExperienceVersion;
25123
+ }
24723
25124
  // Handle spotterChatConfig params
24724
25125
  if (spotterChatConfig) {
24725
25126
  const { hideToolResponseCardBranding, toolResponseCardBrandingLabel, spotterFileUploadEnabled, spotterFileUploadFileTypes, enableStarterPrompts, openSpotterOnLiveboardByDefault, } = spotterChatConfig;
@@ -24838,7 +25239,7 @@ let AppEmbed$1 = class AppEmbed extends V1Embed {
24838
25239
  }
24839
25240
  // Navigation V1/V2 and home page V1/V2 are deprecated. V3 is now the
24840
25241
  // default experience, Need to send navigationVersion=v3 and
24841
- // homepageVersion=v3 even when the no discoveryExperience /
25242
+ // homepageVersion=v3 even when the no discoveryExperience /
24842
25243
  // modularHomeExperience config is set. Without these
24843
25244
  // params, older TSA versions (< 26.7) fall back to V2 for nav and
24844
25245
  // home page, so the defaults must be sent explicitly from the SDK.
@@ -25087,6 +25488,21 @@ const addPreviewStylesIfNotPresent = () => {
25087
25488
  document.head.insertAdjacentHTML('beforeend', previewStyles);
25088
25489
  };
25089
25490
 
25491
+ function buildLiveboardOverrideAppInitData(initData, viewConfig) {
25492
+ var _a;
25493
+ const { liveboardOverride } = viewConfig;
25494
+ // ThoughtSpot ignores an override with no data source entries; skip it.
25495
+ if (!((_a = liveboardOverride === null || liveboardOverride === void 0 ? void 0 : liveboardOverride.dataSourceOverride) === null || _a === void 0 ? void 0 : _a.length))
25496
+ return initData;
25497
+ return {
25498
+ ...initData,
25499
+ embedParams: {
25500
+ ...(initData.embedParams || {}),
25501
+ liveboardOverride,
25502
+ },
25503
+ };
25504
+ }
25505
+
25090
25506
  /**
25091
25507
  * Copyright (c) 2022
25092
25508
  *
@@ -25156,14 +25572,15 @@ let LiveboardEmbed$1 = class LiveboardEmbed extends V1Embed {
25156
25572
  async getAppInitData() {
25157
25573
  const defaultAppInitData = await super.getAppInitData();
25158
25574
  const vizInitData = buildSpotterVizAppInitData(defaultAppInitData, this.viewConfig);
25159
- return buildStarterPromptsAppInitData(vizInitData, this.viewConfig);
25575
+ const starterPromptsInitData = buildStarterPromptsAppInitData(vizInitData, this.viewConfig);
25576
+ return buildLiveboardOverrideAppInitData(starterPromptsInitData, this.viewConfig);
25160
25577
  }
25161
25578
  /**
25162
25579
  * Construct a map of params to be passed on to the
25163
25580
  * embedded Liveboard or visualization.
25164
25581
  */
25165
25582
  getEmbedParams() {
25166
- const params = this.getEmbedParamsObject();
25583
+ const params = this.getUrlQueryParamsObject();
25167
25584
  const queryParams = getQueryParamString(params, true);
25168
25585
  return queryParams;
25169
25586
  }
@@ -25171,7 +25588,7 @@ let LiveboardEmbed$1 = class LiveboardEmbed extends V1Embed {
25171
25588
  var _a;
25172
25589
  let params = {};
25173
25590
  params = this.getBaseQueryParams(params);
25174
- const { enableVizTransformations, visibleVizs, liveboardV2, vizId, hideTabPanel, activeTabId, hideLiveboardHeader, showLiveboardDescription, showLiveboardTitle, isLiveboardHeaderSticky = true, isLiveboardCompactHeaderEnabled, showLiveboardVerifiedBadge = true, showLiveboardReverifyBanner = true, hideIrrelevantChipsInLiveboardTabs, showMaskedFilterChip = false, isLiveboardMasterpiecesEnabled, newChartsLibrary, isEnhancedFilterInteractivityEnabled, enableAskSage, enable2ColumnLayout, isLiveboardAlwaysOn12ColLayout, dataPanelV2 = true, updatedSpotterExperience, enableCustomColumnGroups = false, oAuthPollingInterval, isForceRedirect, dataSourceId, coverAndFilterOptionInPDF, isLiveboardStylingAndGroupingEnabled, liveboardGutter, isPNGInScheduledEmailsEnabled = false, isLiveboardXLSXCSVDownloadEnabled, isGranularXLSXCSVSchedulesEnabled, showSpotterLimitations, isCentralizedLiveboardFilterUXEnabled = false, isScopedLiveboardFilteringEnabled, isLinkParametersEnabled, updatedSpotterChatPrompt, showSpotterRadiance, enableStopAnswerGenerationEmbed, spotterChatConfig, isThisPeriodInDateFiltersEnabled, isContinuousLiveboardPDFEnabled, enableLiveboardDataCache, } = this.viewConfig;
25591
+ const { enableVizTransformations, visibleVizs, liveboardV2, vizId, hideTabPanel, activeTabId, hideLiveboardHeader, showLiveboardDescription, showLiveboardTitle, isLiveboardHeaderSticky = true, isLiveboardCompactHeaderEnabled, showLiveboardVerifiedBadge = true, showLiveboardReverifyBanner = true, hideIrrelevantChipsInLiveboardTabs, showMaskedFilterChip = false, isLiveboardMasterpiecesEnabled, newChartsLibrary, isEnhancedFilterInteractivityEnabled, enableAskSage, enable2ColumnLayout, isLiveboardAlwaysOn12ColLayout, dataPanelV2 = true, updatedSpotterExperience, enableCustomColumnGroups = false, oAuthPollingInterval, isForceRedirect, dataSourceId, coverAndFilterOptionInPDF, isLiveboardStylingAndGroupingEnabled, liveboardGutter, isPNGInScheduledEmailsEnabled = false, isLiveboardXLSXCSVDownloadEnabled, isGranularXLSXCSVSchedulesEnabled, showSpotterLimitations, isCentralizedLiveboardFilterUXEnabled = false, isScopedLiveboardFilteringEnabled, isLinkParametersEnabled, updatedSpotterChatPrompt, showSpotterRadiance, enableStopAnswerGenerationEmbed, spotterChatConfig, isThisPeriodInDateFiltersEnabled, isContinuousLiveboardPDFEnabled, enableLiveboardDataCache, spotterExperienceVersion, } = this.viewConfig;
25175
25592
  const preventLiveboardFilterRemoval = this.viewConfig.preventLiveboardFilterRemoval
25176
25593
  || this.viewConfig.preventPinboardFilterRemoval;
25177
25594
  (_a = this.fullHeightController) === null || _a === void 0 ? void 0 : _a.addQueryParams(params);
@@ -25233,6 +25650,9 @@ let LiveboardEmbed$1 = class LiveboardEmbed extends V1Embed {
25233
25650
  if (isLiveboardStylingAndGroupingEnabled !== undefined) {
25234
25651
  params[Param.IsLiveboardStylingAndGroupingEnabled] = isLiveboardStylingAndGroupingEnabled;
25235
25652
  }
25653
+ if (spotterExperienceVersion !== undefined) {
25654
+ params[Param.SpotterExperienceVersion] = spotterExperienceVersion;
25655
+ }
25236
25656
  if (liveboardGutter !== undefined) {
25237
25657
  params[Param.LiveboardGutter] = liveboardGutter;
25238
25658
  }
@@ -25405,7 +25825,7 @@ let LiveboardEmbed$1 = class LiveboardEmbed extends V1Embed {
25405
25825
  // instance. React builds a new instance per mount, so an equal config
25406
25826
  // is a hide/show, not a hand-over: there is nothing stale to clear.
25407
25827
  const previous = this.getPreRenderObj();
25408
- const showing = this.isSameEmbedConfig(previous)
25828
+ const previousRoute = this.isSameEmbedConfig(previous)
25409
25829
  ? undefined
25410
25830
  : previous === null || previous === void 0 ? void 0 : previous.currentLiveboardState;
25411
25831
  this.executeAfterEmbedContainerLoaded(async () => {
@@ -25413,7 +25833,7 @@ let LiveboardEmbed$1 = class LiveboardEmbed extends V1Embed {
25413
25833
  // Navigate goes out first, so the container loads with the previous
25414
25834
  // config's filters.
25415
25835
  await this.preRenderParamsApplied;
25416
- if (this.isShowingLiveboardRoute(showing)) {
25836
+ if (this.isAlreadyOnSameRoute(previousRoute)) {
25417
25837
  // Navigate to the route we are already on is a no-op, so the
25418
25838
  // liveboard keeps its state. Home unmounts the container, which
25419
25839
  // clears it.
@@ -25434,18 +25854,9 @@ let LiveboardEmbed$1 = class LiveboardEmbed extends V1Embed {
25434
25854
  };
25435
25855
  });
25436
25856
  }
25437
- /**
25438
- * Whether `previous` was showing what this instance is about to show.
25439
- *
25440
- * Undefined-valued keys are dropped before comparing. `navigateToLiveboard`
25441
- * assigns `vizId`, `activeTabId` and `personalizedViewId` unconditionally,
25442
- * so an instance that has been shown once carries those keys as `undefined`
25443
- * while a freshly constructed one does not have them at all. `isEqual`
25444
- * counts own keys, so without this the comparison can never be true after
25445
- * the first show — which is the whole case this exists for.
25446
- *
25447
- * Callbacks compare as equal: React passes a fresh closure per render.
25448
- */
25857
+ // definedEntries drops undefined-valued keys: a shown instance carries
25858
+ // vizId/activeTabId/etc as undefined, so a raw isEqual never matches again.
25859
+ // Functions compare equal, since React passes a fresh closure per render.
25449
25860
  isSameEmbedConfig(previous) {
25450
25861
  if (!previous)
25451
25862
  return false;
@@ -25456,14 +25867,14 @@ let LiveboardEmbed$1 = class LiveboardEmbed extends V1Embed {
25456
25867
  // The whole route, not just the liveboard id: the path is built from the
25457
25868
  // viz, tab and view too, so a same-liveboard show onto another tab is a
25458
25869
  // real navigation.
25459
- isShowingLiveboardRoute(showing) {
25460
- if (!(showing === null || showing === void 0 ? void 0 : showing.liveboardId))
25870
+ isAlreadyOnSameRoute(previousRoute) {
25871
+ if (!(previousRoute === null || previousRoute === void 0 ? void 0 : previousRoute.liveboardId))
25461
25872
  return false;
25462
25873
  const { liveboardId, vizId, activeTabId, personalizedViewId, } = this.viewConfig;
25463
- return showing.liveboardId === liveboardId
25464
- && showing.vizId === vizId
25465
- && showing.activeTabId === activeTabId
25466
- && showing.personalizedViewId === personalizedViewId;
25874
+ return previousRoute.liveboardId === liveboardId
25875
+ && previousRoute.vizId === vizId
25876
+ && previousRoute.activeTabId === activeTabId
25877
+ && previousRoute.personalizedViewId === personalizedViewId;
25467
25878
  }
25468
25879
  async handleRenderForPrerender() {
25469
25880
  if (isUndefined$1(this.viewConfig.liveboardId)) {
@@ -25957,7 +26368,7 @@ let ConversationMessage$1 = class ConversationMessage extends TsEmbed {
25957
26368
  getIframeSrc() {
25958
26369
  const { sessionId, genNo, acSessionId, acGenNo, convId, messageId, } = this.viewConfig;
25959
26370
  const path = 'conv-assist-answer';
25960
- const queryParams = this.getEmbedParamsObject();
26371
+ const queryParams = this.getUrlQueryParamsObject();
25961
26372
  let query = '';
25962
26373
  const queryParamsString = getQueryParamString(queryParams, true);
25963
26374
  if (queryParamsString) {
@@ -26149,18 +26560,22 @@ let SpotterEmbed$1 = class SpotterEmbed extends TsEmbed {
26149
26560
  }
26150
26561
  }
26151
26562
  setParamIfDefined(queryParams, Param.UpdatedSpotterExperience, updatedSpotterExperience, true);
26563
+ setParamIfDefined(queryParams, Param.SpotterExperienceVersion, this.viewConfig.spotterExperienceVersion);
26152
26564
  return queryParams;
26153
26565
  }
26154
26566
  getIframeSrc() {
26155
- const { worksheetId, searchOptions, runtimeFilters, excludeRuntimeFiltersfromURL, runtimeParameters, excludeRuntimeParametersfromURL, sharedConversationId, dataSources, } = this.viewConfig;
26567
+ const { worksheetId, searchOptions, runtimeFilters, excludeRuntimeFiltersfromURL, runtimeParameters, excludeRuntimeParametersfromURL, sharedConversationId, dataSources, spotterExperienceVersion, } = this.viewConfig;
26156
26568
  // Deep-link into the read-only shared-conversation reader view when a
26157
26569
  // shared conversation id is supplied (e.g. a recipient landing from a
26158
26570
  // host-configured CONVERSATION_URL share link); otherwise the normal
26159
26571
  // Spotter conversation surface.
26160
- const path = sharedConversationId
26572
+ let path = sharedConversationId
26161
26573
  ? `insights/conv-assist/s/${encodeURIComponent(sharedConversationId)}`
26162
26574
  : 'insights/conv-assist';
26163
- const queryParams = this.getEmbedParamsObject();
26575
+ if (spotterExperienceVersion === SpotterExperienceVersion.SPOTTER_2026_11) {
26576
+ path = path.replace('insights/conv-assist', 'insights/spotter');
26577
+ }
26578
+ const queryParams = this.getUrlQueryParamsObject();
26164
26579
  let query = '';
26165
26580
  const queryParamsString = getQueryParamString(queryParams, true);
26166
26581
  if (queryParamsString) {