@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
@@ -46,6 +46,7 @@ import {
46
46
  getValueFromWindow,
47
47
  deserializeParam,
48
48
  getScrollableAncestors,
49
+ setParamIfDefined,
49
50
  } from '../utils';
50
51
  import { getCustomActions } from '../utils/custom-actions';
51
52
  import {
@@ -80,6 +81,7 @@ import {
80
81
  BaseViewConfig,
81
82
  } from '../types';
82
83
  import { uploadMixpanelEvent, MIXPANEL_EVENT } from '../mixpanel-service';
84
+ import { summarizeRuntimeDataForTelemetry } from '../utils/runtimeTelemetry';
83
85
  import { processEventData, processAuthFailure } from '../utils/processData';
84
86
  import { version } from '../utils/sdk-version';
85
87
  import {
@@ -129,6 +131,98 @@ const UPDATE_EMBED_PARAMS_SETTLE_MS = 200;
129
131
  // truthy and parses to {}.
130
132
  const NO_RUNTIME_PARAMS = '&';
131
133
 
134
+ /**
135
+ * Params kept on the iframe `src` when `excludeConfigFromURL` is set. The rest
136
+ * are sent in the APP_INIT payload.
137
+ * @internal
138
+ */
139
+ export const BOOTSTRAP_URL_PARAMS: ReadonlySet<string> = new Set<string>([
140
+ // Marks the app as embedded.
141
+ Param.EmbedApp,
142
+ // The host page URL, used to validate the postMessage origin.
143
+ Param.HostAppUrl,
144
+ // The SDK version.
145
+ Param.Version,
146
+ // The authentication type set in init.
147
+ Param.AuthType,
148
+ // Whether the app signs the user in automatically.
149
+ Param.AutoLogin,
150
+ // Stops the app from redirecting to its login page.
151
+ Param.DisableLoginRedirect,
152
+ // Forces the SAML redirect for EmbeddedSSO.
153
+ Param.ForceSAMLAutoRedirect,
154
+ // Set for cookieless trusted authentication.
155
+ Param.cookieless,
156
+ // Lets the app use the pre-fetched auth info.
157
+ Param.preAuthCache,
158
+ // Blocks access to the full app outside the embed.
159
+ Param.blockNonEmbedFullAppAccess,
160
+ // The org to load, which the auth info depends on.
161
+ Param.OverrideOrgId,
162
+ // The host window height when the iframe loads.
163
+ Param.ViewPortHeight,
164
+ // The host window width when the iframe loads.
165
+ Param.ViewPortWidth,
166
+ // The app's client log level.
167
+ Param.ClientLogLevel,
168
+ // Lets the app override the native console.
169
+ Param.OverrideNativeConsole,
170
+ // An extra Pendo tracking key.
171
+ Param.PendoTrackingKey,
172
+ // The locale for number formatting.
173
+ Param.NumberFormatLocale,
174
+ // The locale for date formatting.
175
+ Param.DateFormatLocale,
176
+ // The currency format.
177
+ Param.CurrencyFormat,
178
+ // The UI language.
179
+ Param.Locale,
180
+ // Turns on dark mode.
181
+ Param.IsDarkMode,
182
+ // Turns on the radiant theme that dark mode needs.
183
+ Param.RadiantThemeEnabled,
184
+ // Marks a SearchEmbed or SearchBarEmbed.
185
+ Param.searchEmbed,
186
+ // Marks a LiveboardEmbed.
187
+ Param.livedBoardEmbed,
188
+ // Marks a SpotterAgentEmbed.
189
+ Param.isSpotterAgentEmbed,
190
+ // Marks a SpotterEmbed.
191
+ Param.SpotterEnabled,
192
+ // Marks an AppEmbed.
193
+ Param.IsFullAppEmbed,
194
+ // Legacy flag for the onBeforeGetVizData API intercept.
195
+ Param.IsOnBeforeGetVizDataInterceptEnabled,
196
+ // Lets the host override links in the app.
197
+ Param.LinkOverride,
198
+ // Turns on version 2 of the link overrides.
199
+ Param.EnableLinkOverridesV2,
200
+ // Stops links from opening in a new tab.
201
+ Param.DisableRedirectionLinksInNewTab,
202
+ // Uses replaceState instead of pushState for app navigation.
203
+ Param.OverrideHistoryState,
204
+ // Shows search results as a table.
205
+ Param.ForceTable,
206
+ // The URL of the custom string IDs file.
207
+ Param.StringIDsUrl,
208
+ // The data sources that search opens with.
209
+ Param.DataSources,
210
+ // Exposes translation IDs in the app.
211
+ Param.ExposeTranslationIDs,
212
+ // The URL of the custom icon sprite.
213
+ Param.IconSpriteUrl,
214
+ // The tag that filters the metadata lists in an AppEmbed.
215
+ Param.Tag,
216
+ // Set when a Liveboard embed shows a single visualization (vizId).
217
+ Param.vizEmbed,
218
+ // Whether search opens with the last-selected data sources.
219
+ Param.UseLastSelectedDataSource,
220
+ // The query mode Spotter opens in.
221
+ Param.DefaultQueryMode,
222
+ // The initial search query. Omitted with excludeSearchTokenStringFromURL.
223
+ Param.searchTokenString,
224
+ ]);
225
+
132
226
  /**
133
227
  * The event id map from v2 event names to v1 event id
134
228
  * v1 events are the classic embed events implemented in Blink v1
@@ -165,6 +259,8 @@ export class TsEmbed {
165
259
 
166
260
  protected isAppInitialized = false;
167
261
 
262
+ private initDataParams: Partial<Record<Param, any>> & Record<string, any> = {};
263
+
168
264
  /**
169
265
  * A reference to the iframe within which the ThoughtSpot app
170
266
  * will be rendered.
@@ -255,9 +351,10 @@ export class TsEmbed {
255
351
  ...viewConfig,
256
352
  };
257
353
  this.registerAppInit();
258
- uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
259
- ...viewConfig,
260
- });
354
+ uploadMixpanelEvent(
355
+ MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE,
356
+ summarizeRuntimeDataForTelemetry(viewConfig),
357
+ );
261
358
  const embedConfig = getEmbedConfig();
262
359
  if (embedConfig) {
263
360
  this.embedConfig = embedConfig;
@@ -585,6 +682,19 @@ export class TsEmbed {
585
682
  return this.getDefaultAppInitData();
586
683
  }
587
684
 
685
+ private withInitDataParams(appInitData: Record<string, any>): Record<string, any> {
686
+ if (isEmpty(this.initDataParams)) {
687
+ return appInitData;
688
+ }
689
+ return {
690
+ ...appInitData,
691
+ embedParams: {
692
+ ...this.initDataParams,
693
+ ...(appInitData.embedParams || {}),
694
+ },
695
+ };
696
+ }
697
+
588
698
  /**
589
699
  * Send Custom style as part of payload of APP_INIT
590
700
  * @param _
@@ -592,7 +702,7 @@ export class TsEmbed {
592
702
  */
593
703
  private appInitCb = async (_: any, responder: any) => {
594
704
  try {
595
- const appInitData = await this.getAppInitData();
705
+ const appInitData = this.withInitDataParams(await this.getAppInitData());
596
706
  this.isAppInitialized = true;
597
707
  responder({
598
708
  type: EmbedEvent.APP_INIT,
@@ -798,6 +908,15 @@ export class TsEmbed {
798
908
  if (this.embedConfig.currencyFormat) {
799
909
  queryParams[Param.CurrencyFormat] = this.embedConfig.currencyFormat;
800
910
  }
911
+ // The view config wins over init, so an embed can opt out of a dark
912
+ // mode set in `init`. `??` and not `||`, so that an explicit `false`
913
+ // overrides an init-level `true`.
914
+ const isDarkMode = this.viewConfig.isDarkMode ?? this.embedConfig.isDarkMode;
915
+ setParamIfDefined(queryParams, Param.IsDarkMode, isDarkMode, true);
916
+ // The app's dark mode lives in its radiant theme, so turn that on too.
917
+ if (isDarkMode) {
918
+ queryParams[Param.RadiantThemeEnabled] = true;
919
+ }
801
920
 
802
921
  const {
803
922
  disabledActions,
@@ -953,7 +1072,7 @@ export class TsEmbed {
953
1072
  }
954
1073
 
955
1074
  protected getEmbedParams() {
956
- const queryParams = this.getEmbedParamsObject();
1075
+ const queryParams = this.getUrlQueryParamsObject();
957
1076
  return getQueryParamString(queryParams);
958
1077
  }
959
1078
 
@@ -962,6 +1081,25 @@ export class TsEmbed {
962
1081
  return params;
963
1082
  }
964
1083
 
1084
+ protected getUrlQueryParamsObject(): Record<any, any> {
1085
+ const queryParams = this.getEmbedParamsObject();
1086
+ if (!this.isConfigExcludedFromUrl()) {
1087
+ this.initDataParams = {};
1088
+ return queryParams;
1089
+ }
1090
+ const urlParams: Record<any, any> = {};
1091
+ const excludedParams: Partial<Record<Param, any>> & Record<string, any> = {};
1092
+ Object.entries(queryParams).forEach(([key, value]) => {
1093
+ if (BOOTSTRAP_URL_PARAMS.has(key)) {
1094
+ urlParams[key] = value;
1095
+ } else {
1096
+ excludedParams[key] = deserializeParam(value);
1097
+ }
1098
+ });
1099
+ this.initDataParams = excludedParams;
1100
+ return urlParams;
1101
+ }
1102
+
965
1103
  protected getRootIframeSrc() {
966
1104
  const query = this.getEmbedParams();
967
1105
  return this.getEmbedBasePath(query);
@@ -1236,26 +1374,12 @@ export class TsEmbed {
1236
1374
  }
1237
1375
 
1238
1376
  /**
1239
- * Resolves the configured preRenderContainer to a live element. A string
1240
- * selector is re-queried on every call so a remounted container (E.g.: React
1241
- * replacing the node) resolves to the fresh element; an element passed
1242
- * directly cannot be re-resolved.
1243
- *
1244
- * With nothing configured the frame goes into the host element's nearest
1245
- * scrolling ancestor, falling back to `document.body`.
1246
- *
1247
- * The wrapper is absolutely positioned, so it follows the page for free —
1248
- * but only while it sits inside whatever scrolls. `document.body` is right
1249
- * only when the document itself is the scroller; an app that scrolls an
1250
- * inner element instead left the frame pinned to the viewport while the page
1251
- * moved under it (SCAL-338563). Being inside the scroller also lets wheel
1252
- * events chain out of the frame into it, which they cannot do from
1253
- * `document.body`.
1254
- *
1255
- * A scrolling ancestor is layout chrome rather than route content, so it
1256
- * outlives the embed in practice; and if it does go, the host element goes
1257
- * with it and this instance is remounting anyway.
1258
- * `reconcilePreRenderContainer` re-runs this on a detached container.
1377
+ * Resolves the configured preRenderContainer, or defaults to the host's
1378
+ * nearest scrolling ancestor (document.body if none). The absolutely
1379
+ * positioned wrapper only follows the page while it sits inside what
1380
+ * scrolls, so body is right only when the document itself scrolls — an inner
1381
+ * scroller left the frame pinned to the viewport (SCAL-338563). A string
1382
+ * selector is re-queried each call so a remounted container resolves fresh.
1259
1383
  */
1260
1384
  private resolvePreRenderContainerTarget(): HTMLElement {
1261
1385
  const containerConfig = this.getPreRenderConfig().containerSelector;
@@ -1821,6 +1945,12 @@ export class TsEmbed {
1821
1945
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_CALLED, {
1822
1946
  embedComponentType: this.viewConfig.embedComponentType,
1823
1947
  });
1948
+ uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_INIT_ACTIONS, {
1949
+ embedComponentType: this.viewConfig.embedComponentType,
1950
+ hiddenActions: this.viewConfig.hiddenActions ?? [],
1951
+ visibleActions: this.viewConfig.visibleActions ?? [],
1952
+ disabledActions: this.viewConfig.disabledActions ?? [],
1953
+ });
1824
1954
  if (!getIsInitCalled()) {
1825
1955
  logger.error(ERROR_MESSAGE.RENDER_CALLED_BEFORE_INIT);
1826
1956
  }
@@ -2079,6 +2209,28 @@ export class TsEmbed {
2079
2209
  // blocked.
2080
2210
  protected preRenderParamsApplied: Promise<void> = Promise.resolve();
2081
2211
 
2212
+ protected isConfigExcludedFromUrl(): boolean {
2213
+ const flag =
2214
+ this.viewConfig.additionalFlags?.excludeConfigFromURL ??
2215
+ this.embedConfig.additionalFlags?.excludeConfigFromURL;
2216
+ return flag === true || flag === 'true';
2217
+ }
2218
+
2219
+ protected async triggerUpdateEmbedParams(): Promise<void> {
2220
+ try {
2221
+ const params = await this.getUpdateEmbedParamsObject();
2222
+ this.trigger(HostEvent.UpdateEmbedParams, params);
2223
+ } catch (error) {
2224
+ logger.error(ERROR_MESSAGE.UPDATE_PARAMS_FAILED, error);
2225
+ this.handleError({
2226
+ errorType: ErrorDetailsTypes.API,
2227
+ message: error?.message || ERROR_MESSAGE.UPDATE_PARAMS_FAILED,
2228
+ code: EmbedErrorCodes.UPDATE_PARAMS_FAILED,
2229
+ error: error?.message || error,
2230
+ });
2231
+ }
2232
+ }
2233
+
2082
2234
  protected beforePrerenderVisible(): void {
2083
2235
  // We can ignore this as its a bit expensive and the newer customers
2084
2236
  // have moved on to UpdateEmbedParams supported clusters
@@ -2089,16 +2241,7 @@ export class TsEmbed {
2089
2241
  this.preRenderParamsApplied = new Promise<void>((resolve) => {
2090
2242
  this.executeAfterEmbedContainerLoaded(async () => {
2091
2243
  try {
2092
- const params = await this.getUpdateEmbedParamsObject();
2093
- this.trigger(HostEvent.UpdateEmbedParams, params);
2094
- } catch (error) {
2095
- logger.error(ERROR_MESSAGE.UPDATE_PARAMS_FAILED, error);
2096
- this.handleError({
2097
- errorType: ErrorDetailsTypes.API,
2098
- message: error?.message || ERROR_MESSAGE.UPDATE_PARAMS_FAILED,
2099
- code: EmbedErrorCodes.UPDATE_PARAMS_FAILED,
2100
- error: error?.message || error,
2101
- });
2244
+ await this.triggerUpdateEmbedParams();
2102
2245
  } finally {
2103
2246
  setTimeout(resolve, UPDATE_EMBED_PARAMS_SETTLE_MS);
2104
2247
  }
@@ -2247,19 +2390,21 @@ export class TsEmbed {
2247
2390
  return;
2248
2391
  }
2249
2392
  const { zIndex } = this.getPreRenderConfig();
2393
+ // A hidden pre-render frame must add no scroll space to the host page.
2250
2394
  const preRenderHideStyles = {
2251
2395
  opacity: '0',
2252
2396
  pointerEvents: 'none',
2253
2397
  zIndex: zIndex !== undefined ? String(zIndex) : '-1000',
2254
- position: 'absolute',
2398
+ // Resolves to the viewport, so the hidden frame belongs to no
2399
+ // scroll container's overflow; syncPreRenderStyle restores absolute
2400
+ // on show.
2401
+ position: 'fixed',
2255
2402
  top: '0',
2256
2403
  left: '0',
2257
2404
  overflow: 'hidden',
2258
- // Keeps the measured size — so the next show needs no resize, which
2259
- // is the point of pre-rendering — while lifting the box out of
2260
- // the container's scrollable area. Overflow only extends
2261
- // downwards, so a hidden frame parked above the top edge adds
2262
- // none, where one left at full height shows as blank scroll space.
2405
+ // The one exception: a transformed or contained ancestor captures
2406
+ // `fixed`; parking above the top edge keeps it out of that
2407
+ // overflow.
2263
2408
  transform: PRERENDER_PARKED_TRANSFORM,
2264
2409
  };
2265
2410
  setStyleProperties(this.preRenderWrapper, preRenderHideStyles);
package/src/index.ts CHANGED
@@ -34,6 +34,13 @@ import { SearchBarEmbed, SearchBarViewConfig } from './embed/search-bar';
34
34
  import { SpotterAgentEmbed, SpotterAgentEmbedViewConfig, BodylessConversation, BodylessConversationViewConfig} from './embed/bodyless-conversation';
35
35
  import { SpotterEmbed, SpotterEmbedViewConfig, SpotterChatViewConfig, SpotterSidebarViewConfig, SpotterAnalystConfig, SpotterQueryMode, SpotterShareConversationConfig, StarterPromptsConfig, StarterPromptCategory, StarterPreviewDataCategory, StarterPromptQuestion, ConversationEmbed, ConversationViewConfig } from './embed/conversation';
36
36
  import { SpotterVizConfig, SpotterVizStarterPrompt, SpotterVizLoaderTip } from './embed/spotter-viz-utils';
37
+ import { SpotterExperienceVersion } from './embed/spotter-utils';
38
+ import {
39
+ LiveboardOverride,
40
+ LiveboardDataSourceOverride,
41
+ LiveboardFilterQuery,
42
+ LiveboardParameterQuery,
43
+ } from './embed/liveboard-override-utils';
37
44
  import {
38
45
  AuthFailureType, AuthStatus, AuthEvent, AuthEventEmitter,
39
46
  } from './auth';
@@ -84,7 +91,9 @@ import {
84
91
  VisualizationOverrides,
85
92
  } from './types';
86
93
  import { CustomCssVariables } from './css-variables';
87
- import { AnswerService, SessionInterface, UnderlyingDataPoint } from './utils/graphql/answerService/answerService';
94
+ import {
95
+ AnswerService, SessionInterface, UnderlyingDataPoint, SortOptions,
96
+ } from './utils/graphql/answerService/answerService';
88
97
  import { getEmbedConfig } from './embed/embedConfig';
89
98
  import { uploadMixpanelEvent, MIXPANEL_EVENT } from './mixpanel-service';
90
99
  import { tokenizedFetch } from './tokenizedFetch';
@@ -150,6 +159,7 @@ import {
150
159
  ScheduleEmailRequest,
151
160
  NavigateRequest,
152
161
  SetActiveTabRequest,
162
+ UpdateThemeRequest,
153
163
  } from './contracts/host-event-contracts';
154
164
  import {
155
165
  convertFilterChangedToUpdateFiltersPayload,
@@ -202,6 +212,7 @@ export {
202
212
  // types
203
213
  SessionInterface,
204
214
  UnderlyingDataPoint,
215
+ SortOptions,
205
216
  Page,
206
217
  AuthType,
207
218
  RuntimeFilter,
@@ -216,9 +227,14 @@ export {
216
227
  SearchViewConfig,
217
228
  SearchBarViewConfig,
218
229
  LiveboardViewConfig,
230
+ LiveboardOverride,
231
+ LiveboardDataSourceOverride,
232
+ LiveboardFilterQuery,
233
+ LiveboardParameterQuery,
219
234
  SpotterVizConfig,
220
235
  SpotterVizStarterPrompt,
221
236
  SpotterVizLoaderTip,
237
+ SpotterExperienceVersion,
222
238
  AppViewConfig,
223
239
  PrefetchFeatures,
224
240
  FrameParams,
@@ -277,6 +293,7 @@ export {
277
293
  ScheduleEmailRequest,
278
294
  NavigateRequest,
279
295
  SetActiveTabRequest,
296
+ UpdateThemeRequest,
280
297
  LiveboardTab,
281
298
  LiveboardGroup,
282
299
  ApplicabilityLevel,
@@ -19,6 +19,7 @@ let mixpanelInstance: mixpanel.Mixpanel;
19
19
  export const MIXPANEL_EVENT = {
20
20
  VISUAL_SDK_RENDER_START: 'visual-sdk-render-start',
21
21
  VISUAL_SDK_CALLED_INIT: 'visual-sdk-called-init',
22
+ VISUAL_SDK_INIT_ACTIONS: 'visual-sdk-init-actions',
22
23
  VISUAL_SDK_RENDER_COMPLETE: 'visual-sdk-render-complete',
23
24
  VISUAL_SDK_RENDER_FAILED: 'visual-sdk-render-failed',
24
25
  VISUAL_SDK_TRIGGER: 'visual-sdk-trigger',
@@ -34,6 +34,7 @@ export {
34
34
  AuthType,
35
35
  RuntimeFilter,
36
36
  RuntimeFilterOp,
37
+ SortOptions,
37
38
  EmbedEvent,
38
39
  HostEvent,
39
40
  DataSourceVisualMode,
@@ -42,6 +43,10 @@ export {
42
43
  SearchViewConfig,
43
44
  SearchBarViewConfig,
44
45
  LiveboardViewConfig,
46
+ LiveboardOverride,
47
+ LiveboardDataSourceOverride,
48
+ LiveboardFilterQuery,
49
+ LiveboardParameterQuery,
45
50
  AppViewConfig,
46
51
  PrefetchFeatures,
47
52
  FrameParams,
@@ -87,6 +92,7 @@ export {
87
92
  ScheduleEmailRequest,
88
93
  NavigateRequest,
89
94
  SetActiveTabRequest,
95
+ UpdateThemeRequest,
90
96
  LiveboardTab,
91
97
  LiveboardGroup,
92
98
  ApplicabilityLevel,
@@ -124,6 +130,7 @@ export {
124
130
  CustomActionsPosition,
125
131
  CustomActionTarget,
126
132
  SpotterAnalystConfig,
133
+ SpotterExperienceVersion,
127
134
  StarterPromptsConfig,
128
135
  StarterPromptCategory,
129
136
  StarterPreviewDataCategory,