@thoughtspot/visual-embed-sdk 1.24.0-dev → 1.24.0-preRender.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 (239) hide show
  1. package/cjs/package.json +2 -3
  2. package/cjs/src/embed/TsEmbed.d.ts +302 -0
  3. package/cjs/src/embed/TsEmbed.d.ts.map +1 -0
  4. package/cjs/src/embed/TsEmbed.js +851 -0
  5. package/cjs/src/embed/TsEmbed.js.map +1 -0
  6. package/cjs/src/embed/app.d.ts +4 -1
  7. package/cjs/src/embed/app.d.ts.map +1 -1
  8. package/cjs/src/embed/app.js +9 -2
  9. package/cjs/src/embed/app.js.map +1 -1
  10. package/cjs/src/embed/base.d.ts +2 -0
  11. package/cjs/src/embed/base.d.ts.map +1 -1
  12. package/cjs/src/embed/base.js +2 -0
  13. package/cjs/src/embed/base.js.map +1 -1
  14. package/cjs/src/embed/liveboard.d.ts +3 -2
  15. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  16. package/cjs/src/embed/liveboard.js +6 -5
  17. package/cjs/src/embed/liveboard.js.map +1 -1
  18. package/cjs/src/embed/sage.d.ts +4 -1
  19. package/cjs/src/embed/sage.d.ts.map +1 -1
  20. package/cjs/src/embed/sage.js +9 -2
  21. package/cjs/src/embed/sage.js.map +1 -1
  22. package/cjs/src/embed/search-bar.d.ts +1 -0
  23. package/cjs/src/embed/search-bar.d.ts.map +1 -1
  24. package/cjs/src/embed/search-bar.js +1 -0
  25. package/cjs/src/embed/search-bar.js.map +1 -1
  26. package/cjs/src/embed/search.d.ts +5 -1
  27. package/cjs/src/embed/search.d.ts.map +1 -1
  28. package/cjs/src/embed/search.js +10 -2
  29. package/cjs/src/embed/search.js.map +1 -1
  30. package/cjs/src/embed/ts-embed.d.ts +14 -7
  31. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  32. package/cjs/src/embed/ts-embed.js +94 -63
  33. package/cjs/src/embed/ts-embed.js.map +1 -1
  34. package/cjs/src/embed/ts-embed.spec.js +47 -0
  35. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  36. package/cjs/src/index.d.ts +3 -2
  37. package/cjs/src/index.d.ts.map +1 -1
  38. package/cjs/src/index.js +3 -1
  39. package/cjs/src/index.js.map +1 -1
  40. package/cjs/src/mixpanel-service.d.ts.map +1 -1
  41. package/cjs/src/mixpanel-service.js +2 -0
  42. package/cjs/src/mixpanel-service.js.map +1 -1
  43. package/cjs/src/mixpanel-service.spec.js +1 -0
  44. package/cjs/src/mixpanel-service.spec.js.map +1 -1
  45. package/cjs/src/react/index.d.ts +5 -1
  46. package/cjs/src/react/index.d.ts.map +1 -1
  47. package/cjs/src/react/index.js +8 -8
  48. package/cjs/src/react/index.js.map +1 -1
  49. package/cjs/src/types.d.ts +60 -19
  50. package/cjs/src/types.d.ts.map +1 -1
  51. package/cjs/src/types.js +7 -13
  52. package/cjs/src/types.js.map +1 -1
  53. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  54. package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  55. package/cjs/src/utils/graphql/answerService/answer-queries.js +80 -0
  56. package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -0
  57. package/cjs/src/utils/graphql/answerService/answerService.d.ts +61 -0
  58. package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  59. package/cjs/src/utils/graphql/answerService/answerService.js +182 -0
  60. package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -0
  61. package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  62. package/cjs/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  63. package/cjs/src/utils/graphql/answerService/answerService.spec.js +201 -0
  64. package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
  65. package/cjs/src/utils/graphql/graphql-request.d.ts +15 -0
  66. package/cjs/src/utils/graphql/graphql-request.d.ts.map +1 -0
  67. package/cjs/src/utils/graphql/graphql-request.js +40 -0
  68. package/cjs/src/utils/graphql/graphql-request.js.map +1 -0
  69. package/cjs/src/utils/graphql/sourceService.d.ts +8 -0
  70. package/cjs/src/utils/graphql/sourceService.d.ts.map +1 -0
  71. package/cjs/src/utils/graphql/sourceService.js +69 -0
  72. package/cjs/src/utils/graphql/sourceService.js.map +1 -0
  73. package/cjs/src/utils/graphql/sourceService.spec.d.ts +2 -0
  74. package/cjs/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  75. package/cjs/src/utils/graphql/sourceService.spec.js +12 -0
  76. package/cjs/src/utils/graphql/sourceService.spec.js.map +1 -0
  77. package/cjs/src/utils/processData.d.ts.map +1 -1
  78. package/cjs/src/utils/processData.js +7 -11
  79. package/cjs/src/utils/processData.js.map +1 -1
  80. package/cjs/src/utils/processData.spec.js +13 -17
  81. package/cjs/src/utils/processData.spec.js.map +1 -1
  82. package/cjs/src/utils.d.ts +6 -0
  83. package/cjs/src/utils.d.ts.map +1 -1
  84. package/cjs/src/utils.js +26 -1
  85. package/cjs/src/utils.js.map +1 -1
  86. package/dist/src/embed/app.d.ts +4 -1
  87. package/dist/src/embed/app.d.ts.map +1 -1
  88. package/dist/src/embed/base.d.ts +2 -0
  89. package/dist/src/embed/base.d.ts.map +1 -1
  90. package/dist/src/embed/liveboard.d.ts +3 -2
  91. package/dist/src/embed/liveboard.d.ts.map +1 -1
  92. package/dist/src/embed/sage.d.ts +4 -1
  93. package/dist/src/embed/sage.d.ts.map +1 -1
  94. package/dist/src/embed/search-bar.d.ts +1 -0
  95. package/dist/src/embed/search-bar.d.ts.map +1 -1
  96. package/dist/src/embed/search.d.ts +5 -1
  97. package/dist/src/embed/search.d.ts.map +1 -1
  98. package/dist/src/embed/ts-embed.d.ts +14 -7
  99. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  100. package/dist/src/index.d.ts +3 -2
  101. package/dist/src/index.d.ts.map +1 -1
  102. package/dist/src/mixpanel-service.d.ts.map +1 -1
  103. package/dist/src/react/index.d.ts +5 -1
  104. package/dist/src/react/index.d.ts.map +1 -1
  105. package/dist/src/types.d.ts +60 -19
  106. package/dist/src/types.d.ts.map +1 -1
  107. package/dist/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  108. package/dist/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  109. package/dist/src/utils/graphql/answerService/answerService.d.ts +61 -0
  110. package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  111. package/dist/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  112. package/dist/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  113. package/dist/src/utils/graphql/graphql-request.d.ts +15 -0
  114. package/dist/src/utils/graphql/graphql-request.d.ts.map +1 -0
  115. package/dist/src/utils/graphql/sourceService.d.ts +8 -0
  116. package/dist/src/utils/graphql/sourceService.d.ts.map +1 -0
  117. package/dist/src/utils/graphql/sourceService.spec.d.ts +2 -0
  118. package/dist/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  119. package/dist/src/utils/processData.d.ts.map +1 -1
  120. package/dist/src/utils.d.ts +6 -0
  121. package/dist/src/utils.d.ts.map +1 -1
  122. package/dist/tsembed-react.es.js +513 -150
  123. package/dist/tsembed-react.js +516 -149
  124. package/dist/tsembed.es.js +556 -146
  125. package/dist/tsembed.js +556 -145
  126. package/dist/visual-embed-sdk-react-full.d.ts +152 -33
  127. package/dist/visual-embed-sdk-react.d.ts +152 -33
  128. package/dist/visual-embed-sdk.d.ts +147 -32
  129. package/lib/package.json +2 -3
  130. package/lib/src/embed/TsEmbed.d.ts +302 -0
  131. package/lib/src/embed/TsEmbed.d.ts.map +1 -0
  132. package/lib/src/embed/TsEmbed.js +847 -0
  133. package/lib/src/embed/TsEmbed.js.map +1 -0
  134. package/lib/src/embed/app.d.ts +4 -1
  135. package/lib/src/embed/app.d.ts.map +1 -1
  136. package/lib/src/embed/app.js +9 -2
  137. package/lib/src/embed/app.js.map +1 -1
  138. package/lib/src/embed/base.d.ts +2 -0
  139. package/lib/src/embed/base.d.ts.map +1 -1
  140. package/lib/src/embed/base.js +2 -0
  141. package/lib/src/embed/base.js.map +1 -1
  142. package/lib/src/embed/liveboard.d.ts +3 -2
  143. package/lib/src/embed/liveboard.d.ts.map +1 -1
  144. package/lib/src/embed/liveboard.js +6 -5
  145. package/lib/src/embed/liveboard.js.map +1 -1
  146. package/lib/src/embed/sage.d.ts +4 -1
  147. package/lib/src/embed/sage.d.ts.map +1 -1
  148. package/lib/src/embed/sage.js +9 -2
  149. package/lib/src/embed/sage.js.map +1 -1
  150. package/lib/src/embed/search-bar.d.ts +1 -0
  151. package/lib/src/embed/search-bar.d.ts.map +1 -1
  152. package/lib/src/embed/search-bar.js +1 -0
  153. package/lib/src/embed/search-bar.js.map +1 -1
  154. package/lib/src/embed/search.d.ts +5 -1
  155. package/lib/src/embed/search.d.ts.map +1 -1
  156. package/lib/src/embed/search.js +10 -2
  157. package/lib/src/embed/search.js.map +1 -1
  158. package/lib/src/embed/ts-embed.d.ts +14 -7
  159. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  160. package/lib/src/embed/ts-embed.js +94 -63
  161. package/lib/src/embed/ts-embed.js.map +1 -1
  162. package/lib/src/embed/ts-embed.spec.js +47 -0
  163. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  164. package/lib/src/index.d.ts +3 -2
  165. package/lib/src/index.d.ts.map +1 -1
  166. package/lib/src/index.js +2 -1
  167. package/lib/src/index.js.map +1 -1
  168. package/lib/src/mixpanel-service.d.ts.map +1 -1
  169. package/lib/src/mixpanel-service.js +2 -0
  170. package/lib/src/mixpanel-service.js.map +1 -1
  171. package/lib/src/mixpanel-service.spec.js +1 -0
  172. package/lib/src/mixpanel-service.spec.js.map +1 -1
  173. package/lib/src/react/index.d.ts +5 -1
  174. package/lib/src/react/index.d.ts.map +1 -1
  175. package/lib/src/react/index.js +7 -7
  176. package/lib/src/react/index.js.map +1 -1
  177. package/lib/src/types.d.ts +60 -19
  178. package/lib/src/types.d.ts.map +1 -1
  179. package/lib/src/types.js +6 -12
  180. package/lib/src/types.js.map +1 -1
  181. package/lib/src/utils/graphql/answerService/answer-queries.d.ts +5 -0
  182. package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -0
  183. package/lib/src/utils/graphql/answerService/answer-queries.js +77 -0
  184. package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -0
  185. package/lib/src/utils/graphql/answerService/answerService.d.ts +61 -0
  186. package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -0
  187. package/lib/src/utils/graphql/answerService/answerService.js +177 -0
  188. package/lib/src/utils/graphql/answerService/answerService.js.map +1 -0
  189. package/lib/src/utils/graphql/answerService/answerService.spec.d.ts +2 -0
  190. package/lib/src/utils/graphql/answerService/answerService.spec.d.ts.map +1 -0
  191. package/lib/src/utils/graphql/answerService/answerService.spec.js +199 -0
  192. package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -0
  193. package/lib/src/utils/graphql/graphql-request.d.ts +15 -0
  194. package/lib/src/utils/graphql/graphql-request.d.ts.map +1 -0
  195. package/lib/src/utils/graphql/graphql-request.js +36 -0
  196. package/lib/src/utils/graphql/graphql-request.js.map +1 -0
  197. package/lib/src/utils/graphql/sourceService.d.ts +8 -0
  198. package/lib/src/utils/graphql/sourceService.d.ts.map +1 -0
  199. package/lib/src/utils/graphql/sourceService.js +65 -0
  200. package/lib/src/utils/graphql/sourceService.js.map +1 -0
  201. package/lib/src/utils/graphql/sourceService.spec.d.ts +2 -0
  202. package/lib/src/utils/graphql/sourceService.spec.d.ts.map +1 -0
  203. package/lib/src/utils/graphql/sourceService.spec.js +10 -0
  204. package/lib/src/utils/graphql/sourceService.spec.js.map +1 -0
  205. package/lib/src/utils/processData.d.ts.map +1 -1
  206. package/lib/src/utils/processData.js +8 -12
  207. package/lib/src/utils/processData.js.map +1 -1
  208. package/lib/src/utils/processData.spec.js +14 -18
  209. package/lib/src/utils/processData.spec.js.map +1 -1
  210. package/lib/src/utils.d.ts +6 -0
  211. package/lib/src/utils.d.ts.map +1 -1
  212. package/lib/src/utils.js +23 -0
  213. package/lib/src/utils.js.map +1 -1
  214. package/lib/src/visual-embed-sdk.d.ts +153 -33
  215. package/package.json +2 -3
  216. package/src/embed/app.ts +13 -6
  217. package/src/embed/base.ts +2 -0
  218. package/src/embed/liveboard.ts +7 -5
  219. package/src/embed/sage.ts +13 -2
  220. package/src/embed/search-bar.tsx +2 -0
  221. package/src/embed/search.ts +14 -2
  222. package/src/embed/ts-embed.spec.ts +49 -0
  223. package/src/embed/ts-embed.ts +116 -64
  224. package/src/index.ts +5 -0
  225. package/src/mixpanel-service.spec.ts +1 -0
  226. package/src/mixpanel-service.ts +1 -0
  227. package/src/react/index.tsx +50 -45
  228. package/src/types.ts +64 -21
  229. package/src/utils/graphql/answerService/answer-queries.ts +80 -0
  230. package/src/utils/graphql/answerService/answerService.spec.ts +231 -0
  231. package/src/utils/graphql/answerService/answerService.ts +234 -0
  232. package/src/utils/graphql/graphql-request.ts +45 -0
  233. package/src/utils/graphql/sourceService.spec.ts +10 -0
  234. package/src/utils/graphql/sourceService.ts +71 -0
  235. package/src/utils/processData.spec.ts +15 -25
  236. package/src/utils/processData.ts +13 -15
  237. package/src/utils.ts +24 -0
  238. package/src/utils/answerService.spec.ts +0 -41
  239. package/src/utils/answerService.ts +0 -63
@@ -353,6 +353,29 @@ function getDOMNode(domSelector) {
353
353
  return typeof domSelector === 'string' ? document.querySelector(domSelector) : domSelector;
354
354
  }
355
355
  const deepMerge = (target, source) => merge(target, source);
356
+ const getOperationNameFromQuery = (query) => {
357
+ const regex = /(?:query|mutation)\s+(\w+)/;
358
+ const matches = query.match(regex);
359
+ return matches === null || matches === void 0 ? void 0 : matches[1];
360
+ };
361
+ /**
362
+ *
363
+ * @param obj
364
+ */
365
+ function removeTypename(obj) {
366
+ if (!obj || typeof obj !== 'object')
367
+ return obj;
368
+ // eslint-disable-next-line no-restricted-syntax
369
+ for (const key in obj) {
370
+ if (key === '__typename') {
371
+ delete obj[key];
372
+ }
373
+ else if (typeof obj[key] === 'object') {
374
+ removeTypename(obj[key]);
375
+ }
376
+ }
377
+ return obj;
378
+ }
356
379
  const setStyleProperties = (element, styleProperties) => {
357
380
  if (!element || !styleProperties)
358
381
  return;
@@ -629,27 +652,27 @@ var HomepageModule;
629
652
  /**
630
653
  * Search bar
631
654
  */
632
- HomepageModule["Search"] = "search";
655
+ HomepageModule["Search"] = "SEARCH";
633
656
  /**
634
657
  * kPI watchlist module
635
658
  */
636
- HomepageModule["Watchlist"] = "watchlist";
659
+ HomepageModule["Watchlist"] = "WATCHLIST";
637
660
  /**
638
661
  * favorite objects
639
662
  */
640
- HomepageModule["Favorite"] = "favorite";
663
+ HomepageModule["Favorite"] = "FAVORITE";
641
664
  /**
642
665
  * List of answers and liveboards
643
666
  */
644
- HomepageModule["MyLibrary"] = "mylibrary";
667
+ HomepageModule["MyLibrary"] = "MY_LIBRARY";
645
668
  /**
646
669
  * Trending list
647
670
  */
648
- HomepageModule["Trending"] = "trending";
671
+ HomepageModule["Trending"] = "TRENDING";
649
672
  /**
650
673
  * Learning videos
651
674
  */
652
- HomepageModule["Learning"] = "learning";
675
+ HomepageModule["Learning"] = "LEARNING";
653
676
  })(HomepageModule || (HomepageModule = {}));
654
677
  /**
655
678
  * Event types emitted by the embedded ThoughtSpot application.
@@ -2797,12 +2820,6 @@ var Action;
2797
2820
  */
2798
2821
  Action["PersonalisedViewsDropdown"] = "personalisedViewsDropdown";
2799
2822
  })(Action || (Action = {}));
2800
- // eslint-disable-next-line no-shadow
2801
- var OperationType;
2802
- (function (OperationType) {
2803
- OperationType["GetChartWithData"] = "GetChartWithData";
2804
- OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
2805
- })(OperationType || (OperationType = {}));
2806
2823
  var PrefetchFeatures;
2807
2824
  (function (PrefetchFeatures) {
2808
2825
  PrefetchFeatures["FullApp"] = "FullApp";
@@ -8918,6 +8935,7 @@ function emptyQueue() {
8918
8935
  * @param sessionInfo
8919
8936
  */
8920
8937
  function initMixpanel(sessionInfo) {
8938
+ var _a;
8921
8939
  if (!sessionInfo || !sessionInfo.mixpanelToken) {
8922
8940
  return;
8923
8941
  }
@@ -8935,6 +8953,7 @@ function initMixpanel(sessionInfo) {
8935
8953
  clusterId: sessionInfo.clusterId,
8936
8954
  clusterName: sessionInfo.clusterName,
8937
8955
  releaseVersion: sessionInfo.releaseVersion,
8956
+ hostAppUrl: ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.host) || '',
8938
8957
  });
8939
8958
  isMixpanelInitialized = true;
8940
8959
  emptyQueue();
@@ -10196,58 +10215,351 @@ const renderInQueue = (fn) => {
10196
10215
 
10197
10216
  /**
10198
10217
  *
10199
- * @param session
10200
- * @param query
10201
- * @param operation
10218
+ * @param root0
10219
+ * @param root0.query
10220
+ * @param root0.variables
10221
+ * @param root0.thoughtSpotHost
10222
+ * @param root0.isCompositeQuery
10223
+ */
10224
+ async function graphqlQuery({ query, variables, thoughtSpotHost, isCompositeQuery = false, }) {
10225
+ const operationName = getOperationNameFromQuery(query);
10226
+ try {
10227
+ const response = await fetch(`${thoughtSpotHost}/prism/?op=${operationName}`, {
10228
+ method: 'POST',
10229
+ headers: {
10230
+ 'content-type': 'application/json;charset=UTF-8',
10231
+ 'x-requested-by': 'ThoughtSpot',
10232
+ accept: '*/*',
10233
+ 'accept-language': 'en-us',
10234
+ },
10235
+ body: JSON.stringify({
10236
+ operationName,
10237
+ query,
10238
+ variables,
10239
+ }),
10240
+ credentials: 'include',
10241
+ });
10242
+ const result = await response.json();
10243
+ const dataValues = Object.values(result.data);
10244
+ return (isCompositeQuery) ? result.data : dataValues[0];
10245
+ }
10246
+ catch (error) {
10247
+ return error;
10248
+ }
10249
+ }
10250
+
10251
+ const getSourceDetailQuery = `
10252
+ query GetSourceDetail($ids: [GUID!]!) {
10253
+ getSourceDetailById(ids: $ids, type: LOGICAL_TABLE) {
10254
+ id
10255
+ name
10256
+ description
10257
+ authorName
10258
+ authorDisplayName
10259
+ isExternal
10260
+ type
10261
+ created
10262
+ modified
10263
+ columns {
10264
+ id
10265
+ name
10266
+ author
10267
+ authorDisplayName
10268
+ description
10269
+ dataType
10270
+ type
10271
+ modified
10272
+ ownerName
10273
+ owner
10274
+ dataRecency
10275
+ sources {
10276
+ tableId
10277
+ tableName
10278
+ columnId
10279
+ columnName
10280
+ __typename
10281
+ }
10282
+ synonyms
10283
+ cohortAnswerId
10284
+ __typename
10285
+ }
10286
+ relationships
10287
+ destinationRelationships
10288
+ dataSourceId
10289
+ __typename
10290
+ }
10291
+ }
10292
+ `;
10293
+ const sourceDetailCache = new Map();
10294
+ /**
10295
+ *
10202
10296
  * @param thoughtSpotHost
10297
+ * @param sourceId
10203
10298
  */
10204
- function getAnswerServiceInstance(session, query, operation, thoughtSpotHost) {
10205
- let variable;
10206
- const fetchQuery = async (variables) => {
10207
- try {
10208
- const response = await fetch(`${thoughtSpotHost}/prism/?op=${operation}`, {
10209
- method: 'POST',
10210
- headers: {
10211
- 'content-type': 'application/json;charset=UTF-8',
10212
- 'x-requested-by': 'ThoughtSpot',
10213
- accept: '*/*',
10214
- 'accept-language': 'en-us',
10215
- },
10216
- body: JSON.stringify({
10217
- operationName: operation,
10218
- query,
10219
- variables,
10220
- }),
10221
- credentials: 'include',
10222
- });
10223
- const result = await response.json();
10224
- return result.data;
10299
+ async function getSourceDetail(thoughtSpotHost, sourceId) {
10300
+ if (sourceDetailCache.has(sourceId)) {
10301
+ return sourceDetailCache.get(sourceId);
10302
+ }
10303
+ const details = await graphqlQuery({
10304
+ query: getSourceDetailQuery,
10305
+ variables: {
10306
+ ids: [sourceId],
10307
+ },
10308
+ thoughtSpotHost,
10309
+ });
10310
+ const souceDetails = details[0];
10311
+ sourceDetailCache.set(sourceId, souceDetails);
10312
+ return souceDetails;
10313
+ }
10314
+
10315
+ const bachSessionId = `
10316
+ id {
10317
+ sessionId
10318
+ genNo
10319
+ acSession {
10320
+ sessionId
10321
+ genNo
10322
+ }
10323
+ }
10324
+ `;
10325
+ const getUnaggregatedAnswerSession = `
10326
+ mutation GetUnAggregatedAnswerSession($session: BachSessionIdInput!, $columns: [UserPointSelectionInput!]!) {
10327
+ Answer__getUnaggregatedAnswer(session: $session, columns: $columns) {
10328
+ ${bachSessionId}
10329
+ answer {
10330
+ visualizations {
10331
+ ... on TableViz {
10332
+ columns {
10333
+ column {
10334
+ id
10335
+ name
10336
+ referencedColumns {
10337
+ guid
10338
+ displayName
10339
+ }
10340
+ }
10341
+ }
10342
+ }
10343
+ }
10344
+ }
10345
+ }
10346
+ }
10347
+ `;
10348
+ const removeColumns = `
10349
+ mutation RemoveColumns($session: BachSessionIdInput!, $logicalColumnIds: [GUID!], $columnIds: [GUID!]) {
10350
+ Answer__removeColumns(
10351
+ session: $session
10352
+ logicalColumnIds: $logicalColumnIds
10353
+ columnIds: $columnIds
10354
+ ) {
10355
+ ${bachSessionId}
10356
+ }
10357
+ }
10358
+ `;
10359
+ const addColumns = `
10360
+ mutation AddColumns($session: BachSessionIdInput!, $columns: [AnswerColumnInfo!]!) {
10361
+ Answer__addColumn(session: $session, columns: $columns) {
10362
+ ${bachSessionId}
10363
+ }
10364
+ }
10365
+ `;
10366
+ const getAnswerData = `
10367
+ query GetTableWithHeadlineData($session: BachSessionIdInput!, $deadline: Int!, $dataPaginationParams: DataPaginationParamsInput!) {
10368
+ getAnswer(session: $session) {
10369
+ ${bachSessionId}
10370
+ answer {
10371
+ id
10372
+ visualizations {
10373
+ id
10374
+ ... on TableViz {
10375
+ columns {
10376
+ column {
10377
+ id
10378
+ name
10379
+ type
10380
+ aggregationType
10381
+ dataType
10382
+ }
10383
+ }
10384
+ data(deadline: $deadline, pagination: $dataPaginationParams)
10385
+ }
10386
+ }
10387
+ }
10388
+ }
10389
+ }
10390
+ `;
10391
+
10392
+ // eslint-disable-next-line no-shadow
10393
+ var OperationType;
10394
+ (function (OperationType) {
10395
+ OperationType["GetChartWithData"] = "GetChartWithData";
10396
+ OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
10397
+ })(OperationType || (OperationType = {}));
10398
+ /**
10399
+ * Class representing the answer service provided with the
10400
+ * custom action payload. This service could be used to run
10401
+ * graphql queries in the context of the answer on which the
10402
+ * custom action was triggered.
10403
+ *
10404
+ * @example
10405
+ * ```js
10406
+ * embed.on(EmbedEvent.CustomAction, e => {
10407
+ * const underlying = await e.answerService.getUnderlyingDataForPoint([
10408
+ * 'col name 1'
10409
+ * ]);
10410
+ * const data = await underlying.fetchData(0, 100);
10411
+ * })
10412
+ * ```
10413
+ * @version
10414
+ * ThoughtSpot: 9.9.0.cl / SDK: 1.25.0
10415
+ */
10416
+ class AnswerService {
10417
+ constructor(session, answer, thoughtSpotHost, selectedPoints) {
10418
+ this.session = session;
10419
+ this.answer = answer;
10420
+ this.thoughtSpotHost = thoughtSpotHost;
10421
+ this.selectedPoints = selectedPoints;
10422
+ this.session = removeTypename(session);
10423
+ }
10424
+ async getSourceDetail() {
10425
+ const sourceId = this.answer.sources[0].header.guid;
10426
+ return getSourceDetail(this.thoughtSpotHost, sourceId);
10427
+ }
10428
+ async removeColumns(columnIds) {
10429
+ return this.executeQuery(removeColumns, {
10430
+ logicalColumnIds: columnIds,
10431
+ });
10432
+ }
10433
+ async addColumns(columnIds) {
10434
+ return this.executeQuery(addColumns, {
10435
+ columns: columnIds.map((colId) => ({ logicalColumnId: colId })),
10436
+ });
10437
+ }
10438
+ async fetchData(offset = 0, size = 1000) {
10439
+ const { answer } = await this.executeQuery(getAnswerData, {
10440
+ deadline: 0,
10441
+ dataPaginationParams: {
10442
+ isClientPaginated: true,
10443
+ offset,
10444
+ size,
10445
+ },
10446
+ });
10447
+ const { columns, data } = answer.visualizations[0];
10448
+ return {
10449
+ columns,
10450
+ data,
10451
+ };
10452
+ }
10453
+ /**
10454
+ *
10455
+ * @param userLocale
10456
+ * @param omitInfo Omit the download Info on top of the CSV
10457
+ * @returns Response
10458
+ */
10459
+ async fetchCSVBlob(userLocale = 'en-us', omitInfo = false) {
10460
+ if (omitInfo) {
10461
+ console.warn('omitInfo not supported yet.');
10225
10462
  }
10226
- catch (error) {
10227
- return error;
10463
+ const fetchUrl = `${this.thoughtSpotHost}/prism/download/answer/csv?sessionId=${this.session.sessionId}&genNo=${this.session.genNo}&userLocale=${userLocale}&exportFileName=data&omitInfo=${omitInfo}`;
10464
+ return fetch(fetchUrl, {
10465
+ credentials: 'include',
10466
+ });
10467
+ }
10468
+ async getUnderlyingDataForPoint(outputColumnNames, selectedPoints) {
10469
+ if (!selectedPoints && !this.selectedPoints) {
10470
+ throw new Error('Needs to be triggered in context of a point');
10228
10471
  }
10229
- };
10230
- const fetchData = (offset, batchSize) => {
10231
- if (operation === OperationType.GetChartWithData) {
10232
- variable = { batchSize, offset: offset * batchSize };
10472
+ if (!selectedPoints) {
10473
+ selectedPoints = getSelectedPointsForUnderlyingDataQuery(this.selectedPoints);
10474
+ }
10475
+ const sourceDetail = await this.getSourceDetail();
10476
+ const ouputColumnGuids = getGuidsFromColumnNames(sourceDetail, outputColumnNames);
10477
+ const unAggAnswer = await graphqlQuery({
10478
+ query: getUnaggregatedAnswerSession,
10479
+ variables: {
10480
+ session: this.session,
10481
+ columns: selectedPoints,
10482
+ },
10483
+ thoughtSpotHost: this.thoughtSpotHost,
10484
+ });
10485
+ const unaggAnswerSession = new AnswerService(unAggAnswer.id, unAggAnswer.answer, this.thoughtSpotHost);
10486
+ const currentColumns = new Set(unAggAnswer.answer.visualizations[0].columns
10487
+ .map((c) => c.column.referencedColumns[0].guid));
10488
+ const columnsToAdd = [...ouputColumnGuids].filter((col) => !currentColumns.has(col));
10489
+ if (columnsToAdd.length) {
10490
+ await unaggAnswerSession.addColumns(columnsToAdd);
10491
+ }
10492
+ const columnsToRemove = [...currentColumns].filter((col) => !ouputColumnGuids.has(col));
10493
+ if (columnsToRemove.length) {
10494
+ await unaggAnswerSession.removeColumns(columnsToRemove);
10495
+ }
10496
+ return unaggAnswerSession;
10497
+ }
10498
+ async executeQuery(query, variables) {
10499
+ const data = await graphqlQuery({
10500
+ query,
10501
+ variables: {
10502
+ session: this.session,
10503
+ ...variables,
10504
+ },
10505
+ thoughtSpotHost: this.thoughtSpotHost,
10506
+ isCompositeQuery: false,
10507
+ });
10508
+ this.session = deepMerge(this.session, (data === null || data === void 0 ? void 0 : data.id) || {});
10509
+ return data;
10510
+ }
10511
+ getSession() {
10512
+ return this.session;
10513
+ }
10514
+ }
10515
+ /**
10516
+ *
10517
+ * @param sourceDetail
10518
+ * @param colNames
10519
+ */
10520
+ function getGuidsFromColumnNames(sourceDetail, colNames) {
10521
+ const cols = sourceDetail.columns.reduce((colSet, col) => {
10522
+ colSet[col.name] = col;
10523
+ return colSet;
10524
+ }, {});
10525
+ return new Set(colNames.map((colName) => {
10526
+ const col = cols[colName];
10527
+ return col.id;
10528
+ }));
10529
+ }
10530
+ /**
10531
+ *
10532
+ * @param selectedPoints
10533
+ */
10534
+ function getSelectedPointsForUnderlyingDataQuery(selectedPoints) {
10535
+ const underlyingDataPoint = [];
10536
+ /**
10537
+ *
10538
+ * @param colVal
10539
+ */
10540
+ function addPointFromColVal(colVal) {
10541
+ const dataType = colVal.column.dataType;
10542
+ const id = colVal.column.id;
10543
+ let dataValue;
10544
+ if (dataType === 'DATE') {
10545
+ dataValue = [{
10546
+ epochRange: {
10547
+ startEpoch: colVal.value,
10548
+ },
10549
+ }];
10233
10550
  }
10234
10551
  else {
10235
- variable = {
10236
- dataPaginationParams: {
10237
- isClientPaginated: true,
10238
- offset: offset * batchSize,
10239
- size: batchSize,
10240
- },
10241
- };
10552
+ dataValue = [{ value: colVal.value }];
10242
10553
  }
10243
- return fetchQuery({
10244
- session,
10245
- ...variable,
10554
+ underlyingDataPoint.push({
10555
+ columnId: colVal.column.id,
10556
+ dataValue,
10246
10557
  });
10247
- };
10248
- return {
10249
- fetchData,
10250
- };
10558
+ }
10559
+ selectedPoints.forEach((p) => {
10560
+ p.selectedAttributes.forEach(addPointFromColVal);
10561
+ });
10562
+ return underlyingDataPoint;
10251
10563
  }
10252
10564
 
10253
10565
  /**
@@ -10256,16 +10568,12 @@ function getAnswerServiceInstance(session, query, operation, thoughtSpotHost) {
10256
10568
  * @param thoughtSpotHost
10257
10569
  */
10258
10570
  function processCustomAction(e, thoughtSpotHost) {
10259
- var _a;
10260
- if ([OperationType.GetChartWithData, OperationType.GetTableWithHeadlineData].includes((_a = e.data) === null || _a === void 0 ? void 0 : _a.operation)) {
10261
- const { session, query, operation } = e.data;
10262
- const answerService = getAnswerServiceInstance(session, query, operation, thoughtSpotHost);
10263
- return {
10264
- ...e,
10265
- answerService,
10266
- };
10267
- }
10268
- return e;
10571
+ const { session, embedAnswerData, contextMenuPoints } = e.data;
10572
+ const answerService = new AnswerService(session, embedAnswerData, thoughtSpotHost, contextMenuPoints === null || contextMenuPoints === void 0 ? void 0 : contextMenuPoints.selectedPoints);
10573
+ return {
10574
+ ...e,
10575
+ answerService,
10576
+ };
10269
10577
  }
10270
10578
  /**
10271
10579
  *
@@ -10410,7 +10718,7 @@ function processTrigger(iFrame, messageType, thoughtSpotHost, data) {
10410
10718
  });
10411
10719
  }
10412
10720
 
10413
- var name="@thoughtspot/visual-embed-sdk";var version="1.24.0-dev";var description="ThoughtSpot Embed SDK";var module="lib/src/index.js";var main="dist/tsembed.js";var types="lib/src/index.d.ts";var files=["dist/**","lib/**","src/**","cjs/**"];var exports={".":{"import":"./lib/src/index.js",require:"./cjs/src/index.js",types:"./lib/src/index.d.ts"},"./react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"},"./lib/src/react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"}};var typesVersions={"*":{react:["./lib/src/react/all-types-export.d.ts"]}};var scripts={lint:"eslint 'src/**'","lint:fix":"eslint 'src/**/*.*' --fix",tsc:"tsc -p . --incremental false; tsc -p . --incremental false --module commonjs --outDir cjs",start:"gatsby develop","build:gatsby":"npm run clean:gatsby && gatsby build --prefix-paths","build:gatsby:noprefix":"npm run clean:gatsby && gatsby build","serve:gatsby":"gatsby serve","clean:gatsby":"gatsby clean","build-and-publish":"npm run build:gatsby && npm run publish","bundle-dts-file":"dts-bundle --name @thoughtspot/visual-embed-sdk --out visual-embed-sdk.d.ts --main lib/src/index.d.ts","bundle-dts":"dts-bundle --name ../../dist/visual-embed-sdk --main lib/src/index.d.ts --outputAsModuleFolder=true","bundle-dts-react":"dts-bundle --name ../../../dist/visual-embed-sdk-react --main lib/src/react/index.d.ts --outputAsModuleFolder=true","bundle-dts-react-full":"dts-bundle --name ../../../dist/visual-embed-sdk-react-full --main lib/src/react/all-types-export.d.ts --outputAsModuleFolder=true",build:"rollup -c",watch:"rollup -cw","docs-cmd":"node scripts/gatsby-commands.js",docgen:"typedoc --tsconfig tsconfig.json --theme typedoc-theme","test-sdk":"jest -c jest.config.sdk.js --runInBand","test-docs":"jest -c jest.config.docs.js",test:"npm run test-sdk && npm run test-docs",posttest:"cat ./coverage/sdk/lcov.info | coveralls","is-publish-allowed":"node scripts/is-publish-allowed.js",prepublishOnly:"npm run tsc && npm run bundle-dts-file && npm run bundle-dts && npm run bundle-dts-react && npm run bundle-dts-react-full && npm run build","check-size":"npm run build && size-limit","publish-dev":"npm publish --tag dev","publish-prod":"npm publish --tag latest"};var peerDependencies={react:"> 16.8.0","react-dom":"> 16.8.0"};var dependencies={algoliasearch:"^4.10.5",classnames:"^2.3.1",dompurify:"^2.3.4","eslint-plugin-comment-length":"^0.9.2","eslint-plugin-jsdoc":"^40.1.0",eventemitter3:"^4.0.7","gatsby-plugin-vercel":"^1.0.3","html-react-parser":"^1.4.12",lodash:"^4.17.21","mixpanel-browser":"^2.45.0","ts-deepmerge":"^6.0.2",tslib:"^2.5.3","use-deep-compare-effect":"^1.8.1"};var devDependencies={"@mdx-js/mdx":"^1.6.22","@mdx-js/react":"^1.6.22","@react-icons/all-files":"^4.1.0","@rollup/plugin-commonjs":"^18.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^11.2.1","@rollup/plugin-replace":"^5.0.2","@size-limit/preset-big-lib":"^8.2.6","@testing-library/dom":"^7.31.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^11.2.7","@testing-library/user-event":"^13.1.8","@types/jest":"^22.2.3","@types/mixpanel-browser":"^2.35.6","@types/react-test-renderer":"^17.0.1","@typescript-eslint/eslint-plugin":"^4.6.0","@typescript-eslint/parser":"^4.6.0",asciidoctor:"^2.2.1","babel-jest":"^26.6.3","babel-preset-gatsby":"^1.10.0","command-line-args":"^5.1.1",coveralls:"^3.1.0","current-git-branch":"^1.1.0","dts-bundle":"^0.7.3",eslint:"^7.12.1","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.15.0","eslint-import-resolver-typescript":"^2.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-prettier":"^3.1.4","eslint-plugin-react-hooks":"^4.2.0","fs-extra":"^10.0.0",gatsby:"3.13.1","gatsby-plugin-algolia":"^0.22.2","gatsby-plugin-catch-links":"^3.1.0","gatsby-plugin-env-variables":"^2.1.0","gatsby-plugin-intl":"^0.3.3","gatsby-plugin-manifest":"^3.2.0","gatsby-plugin-output":"^0.1.3","gatsby-plugin-sass":"6.7.0","gatsby-plugin-sitemap":"^4.10.0","gatsby-source-filesystem":"3.1.0","gatsby-transformer-asciidoc":"2.1.0","gatsby-transformer-rehype":"2.0.0","gh-pages":"^3.1.0","highlight.js":"^10.6.0","html-to-text":"^8.0.0","identity-obj-proxy":"^3.0.0","istanbul-merge":"^1.1.1",jest:"^26.6.3","jest-puppeteer":"^4.4.0",jsdom:"^17.0.0","node-sass":"^8.0.0",prettier:"2.1.2",puppeteer:"^7.0.1",react:"^16.14.0","react-dom":"^16.14.0","react-resizable":"^1.11.0","react-resize-detector":"^6.6.0","react-test-renderer":"^17.0.2","react-use-flexsearch":"^0.1.1",rollup:"2.30.0","rollup-plugin-typescript2":"0.27.3","ts-jest":"^26.5.5","ts-loader":"8.0.4",typedoc:"0.21.6","typedoc-plugin-toc-group":"thoughtspot/typedoc-plugin-toc-group",typescript:"^4.9.4","url-search-params-polyfill":"^8.1.0",util:"^0.12.4"};var author="ThoughtSpot";var email="support@thoughtspot.com";var license="ThoughtSpot Development Tools End User License Agreement";var directories={lib:"lib"};var repository={type:"git",url:"git+https://github.com/thoughtspot/visual-embed-sdk.git"};var publishConfig={registry:"https://registry.npmjs.org"};var keywords=["thoughtspot","everywhere","embed","sdk","analytics"];var bugs={url:"https://github.com/thoughtspot/visual-embed-sdk/issues"};var homepage="https://github.com/thoughtspot/visual-embed-sdk#readme";var globals={window:{}};var pkgInfo = {name:name,version:version,description:description,module:module,main:main,types:types,files:files,exports:exports,typesVersions:typesVersions,"size-limit":[{path:"dist/tsembed.js",limit:"40 kB"}],scripts:scripts,peerDependencies:peerDependencies,dependencies:dependencies,devDependencies:devDependencies,author:author,email:email,license:license,directories:directories,repository:repository,publishConfig:publishConfig,keywords:keywords,bugs:bugs,homepage:homepage,globals:globals};
10721
+ var name="@thoughtspot/visual-embed-sdk";var version="1.24.0-preRender.1";var description="ThoughtSpot Embed SDK";var module="lib/src/index.js";var main="dist/tsembed.js";var types="lib/src/index.d.ts";var files=["dist/**","lib/**","src/**","cjs/**"];var exports={".":{"import":"./lib/src/index.js",require:"./cjs/src/index.js",types:"./lib/src/index.d.ts"},"./react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"},"./lib/src/react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"}};var typesVersions={"*":{react:["./lib/src/react/all-types-export.d.ts"]}};var scripts={lint:"eslint 'src/**'","lint:fix":"eslint 'src/**/*.*' --fix",tsc:"tsc -p . --incremental false; tsc -p . --incremental false --module commonjs --outDir cjs",start:"gatsby develop","build:gatsby":"npm run clean:gatsby && gatsby build --prefix-paths","build:gatsby:noprefix":"npm run clean:gatsby && gatsby build","serve:gatsby":"gatsby serve","clean:gatsby":"gatsby clean","build-and-publish":"npm run build:gatsby && npm run publish","bundle-dts-file":"dts-bundle --name @thoughtspot/visual-embed-sdk --out visual-embed-sdk.d.ts --main lib/src/index.d.ts","bundle-dts":"dts-bundle --name ../../dist/visual-embed-sdk --main lib/src/index.d.ts --outputAsModuleFolder=true","bundle-dts-react":"dts-bundle --name ../../../dist/visual-embed-sdk-react --main lib/src/react/index.d.ts --outputAsModuleFolder=true","bundle-dts-react-full":"dts-bundle --name ../../../dist/visual-embed-sdk-react-full --main lib/src/react/all-types-export.d.ts --outputAsModuleFolder=true",build:"rollup -c",watch:"rollup -cw","docs-cmd":"node scripts/gatsby-commands.js",docgen:"typedoc --tsconfig tsconfig.json --theme typedoc-theme","test-sdk":"jest -c jest.config.sdk.js --runInBand","test-docs":"jest -c jest.config.docs.js",test:"npm run test-sdk && npm run test-docs",posttest:"cat ./coverage/sdk/lcov.info | coveralls","is-publish-allowed":"node scripts/is-publish-allowed.js",prepublishOnly:"npm run tsc && npm run bundle-dts-file && npm run bundle-dts && npm run bundle-dts-react && npm run bundle-dts-react-full && npm run build","check-size":"npm run build && size-limit","publish-dev":"npm publish --tag dev","publish-prod":"npm publish --tag latest"};var peerDependencies={react:"> 16.8.0","react-dom":"> 16.8.0"};var dependencies={algoliasearch:"^4.10.5",classnames:"^2.3.1",dompurify:"^2.3.4","eslint-plugin-comment-length":"^0.9.2","eslint-plugin-jsdoc":"^40.1.0",eventemitter3:"^4.0.7","gatsby-plugin-vercel":"^1.0.3","html-react-parser":"^1.4.12",lodash:"^4.17.21","mixpanel-browser":"^2.45.0","ts-deepmerge":"^6.0.2",tslib:"^2.5.3","use-deep-compare-effect":"^1.8.1"};var devDependencies={"@mdx-js/mdx":"^1.6.22","@mdx-js/react":"^1.6.22","@react-icons/all-files":"^4.1.0","@rollup/plugin-commonjs":"^18.0.0","@rollup/plugin-json":"^4.1.0","@rollup/plugin-node-resolve":"^11.2.1","@rollup/plugin-replace":"^5.0.2","@size-limit/preset-big-lib":"^8.2.6","@testing-library/dom":"^7.31.0","@testing-library/jest-dom":"^5.14.1","@testing-library/react":"^11.2.7","@testing-library/user-event":"^13.1.8","@types/jest":"^22.2.3","@types/mixpanel-browser":"^2.35.6","@types/react-test-renderer":"^17.0.1","@typescript-eslint/eslint-plugin":"^4.6.0","@typescript-eslint/parser":"^4.6.0",asciidoctor:"^2.2.1","babel-jest":"^26.6.3","babel-preset-gatsby":"^1.10.0","command-line-args":"^5.1.1",coveralls:"^3.1.0","current-git-branch":"^1.1.0","dts-bundle":"^0.7.3",eslint:"^7.12.1","eslint-config-airbnb-base":"^14.2.0","eslint-config-prettier":"^6.15.0","eslint-import-resolver-typescript":"^2.3.0","eslint-plugin-import":"^2.22.1","eslint-plugin-prettier":"^3.1.4","eslint-plugin-react-hooks":"^4.2.0","fs-extra":"^10.0.0",gatsby:"3.13.1","gatsby-plugin-algolia":"^0.22.2","gatsby-plugin-catch-links":"^3.1.0","gatsby-plugin-env-variables":"^2.1.0","gatsby-plugin-intl":"^0.3.3","gatsby-plugin-manifest":"^3.2.0","gatsby-plugin-output":"^0.1.3","gatsby-plugin-sass":"6.7.0","gatsby-plugin-sitemap":"^4.10.0","gatsby-source-filesystem":"3.1.0","gatsby-transformer-asciidoc":"2.1.0","gatsby-transformer-rehype":"2.0.0","gh-pages":"^3.1.0","highlight.js":"^10.6.0","html-to-text":"^8.0.0","identity-obj-proxy":"^3.0.0","istanbul-merge":"^1.1.1",jest:"^26.6.3","jest-fetch-mock":"^3.0.3",jsdom:"^17.0.0","node-sass":"^8.0.0",prettier:"2.1.2",react:"^16.14.0","react-dom":"^16.14.0","react-resizable":"^1.11.0","react-resize-detector":"^6.6.0","react-test-renderer":"^17.0.2","react-use-flexsearch":"^0.1.1",rollup:"2.30.0","rollup-plugin-typescript2":"0.27.3","ts-jest":"^26.5.5","ts-loader":"8.0.4",typedoc:"0.21.6","typedoc-plugin-toc-group":"thoughtspot/typedoc-plugin-toc-group",typescript:"^4.9.4","url-search-params-polyfill":"^8.1.0",util:"^0.12.4"};var author="ThoughtSpot";var email="support@thoughtspot.com";var license="ThoughtSpot Development Tools End User License Agreement";var directories={lib:"lib"};var repository={type:"git",url:"git+https://github.com/thoughtspot/visual-embed-sdk.git"};var publishConfig={registry:"https://registry.npmjs.org"};var keywords=["thoughtspot","everywhere","embed","sdk","analytics"];var bugs={url:"https://github.com/thoughtspot/visual-embed-sdk/issues"};var homepage="https://github.com/thoughtspot/visual-embed-sdk#readme";var globals={window:{}};var pkgInfo = {name:name,version:version,description:description,module:module,main:main,types:types,files:files,exports:exports,typesVersions:typesVersions,"size-limit":[{path:"dist/tsembed.js",limit:"40 kB"}],scripts:scripts,peerDependencies:peerDependencies,dependencies:dependencies,devDependencies:devDependencies,author:author,email:email,license:license,directories:directories,repository:repository,publishConfig:publishConfig,keywords:keywords,bugs:bugs,homepage:homepage,globals:globals};
10414
10722
 
10415
10723
  /**
10416
10724
  * Copyright (c) 2022
@@ -10442,6 +10750,7 @@ const V1EventMap = {};
10442
10750
  class TsEmbed {
10443
10751
  constructor(domSelector, viewConfig) {
10444
10752
  this.isAppInitialized = false;
10753
+ this.embedComponentType = 'TsEmbed';
10445
10754
  /**
10446
10755
  * Should we encode URL Query Params using base64 encoding which thoughtspot
10447
10756
  * will generate for embedding. This provides additional security to
@@ -10451,6 +10760,7 @@ class TsEmbed {
10451
10760
  */
10452
10761
  this.shouldEncodeUrlQueryParams = false;
10453
10762
  this.defaultHiddenActions = [Action.ReportError];
10763
+ this.subscribedListeners = {};
10454
10764
  /**
10455
10765
  * Send Custom style as part of payload of APP_INIT
10456
10766
  *
@@ -10473,6 +10783,7 @@ class TsEmbed {
10473
10783
  ? getRuntimeFilters(this.viewConfig.runtimeFilters)
10474
10784
  : null,
10475
10785
  hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
10786
+ reorderedHomepageModules: this.viewConfig.reorderedHomepageModules || [],
10476
10787
  hostConfig: this.embedConfig.hostConfig,
10477
10788
  hiddenHomeLeftNavItems: ((_a = this.viewConfig) === null || _a === void 0 ? void 0 : _a.hiddenHomeLeftNavItems)
10478
10789
  ? (_b = this.viewConfig) === null || _b === void 0 ? void 0 : _b.hiddenHomeLeftNavItems
@@ -10522,6 +10833,7 @@ class TsEmbed {
10522
10833
  this.registerAppInit();
10523
10834
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
10524
10835
  ...viewConfig,
10836
+ embedComponentType: this.embedComponentType,
10525
10837
  });
10526
10838
  }
10527
10839
  /**
@@ -10590,23 +10902,37 @@ class TsEmbed {
10590
10902
  * and executes the registered callbacks accordingly.
10591
10903
  */
10592
10904
  subscribeToEvents() {
10593
- window.addEventListener('message', (event) => {
10905
+ this.unsubscribeToEvents();
10906
+ const messageEventListener = (event) => {
10594
10907
  const eventType = this.getEventType(event);
10595
10908
  const eventPort = this.getEventPort(event);
10596
10909
  const eventData = this.formatEventData(event, eventType);
10597
10910
  if (event.source === this.iFrame.contentWindow) {
10598
10911
  this.executeCallbacks(eventType, processEventData(eventType, eventData, this.thoughtSpotHost, this.el), eventPort);
10599
10912
  }
10600
- });
10601
- window.addEventListener('online', (e) => {
10913
+ };
10914
+ window.addEventListener('message', messageEventListener);
10915
+ const onlineEventListener = (e) => {
10602
10916
  this.trigger(HostEvent.Reload);
10603
- });
10604
- window.addEventListener('offline', (e) => {
10917
+ };
10918
+ window.addEventListener('online', onlineEventListener);
10919
+ const offlineEventListener = (e) => {
10605
10920
  const offlineWarning = 'Network not Detected. Embed is offline. Please reconnect and refresh';
10606
10921
  this.executeCallbacks(EmbedEvent.Error, {
10607
10922
  offlineWarning,
10608
10923
  });
10609
10924
  console.warn(offlineWarning);
10925
+ };
10926
+ window.addEventListener('offline', offlineEventListener);
10927
+ this.subscribedListeners = {
10928
+ message: messageEventListener,
10929
+ online: onlineEventListener,
10930
+ offline: offlineEventListener,
10931
+ };
10932
+ }
10933
+ unsubscribeToEvents() {
10934
+ Object.keys(this.subscribedListeners).forEach((key) => {
10935
+ window.removeEventListener(key, this.subscribedListeners[key]);
10610
10936
  });
10611
10937
  }
10612
10938
  /**
@@ -10778,14 +11104,22 @@ class TsEmbed {
10778
11104
  iFrame.name = 'ThoughtSpot Embedded Analytics';
10779
11105
  return iFrame;
10780
11106
  }
11107
+ handleInsertionIntoDOM(child, showPreRenderByDefault = false) {
11108
+ if (this.isPreRendered) {
11109
+ this.insertIntoDOMForPreRender(this.embedConfig.loginFailedMessage, showPreRenderByDefault);
11110
+ }
11111
+ else {
11112
+ this.insertIntoDOM(this.embedConfig.loginFailedMessage);
11113
+ }
11114
+ }
10781
11115
  /**
10782
11116
  * Renders the embedded ThoughtSpot app in an iframe and sets up
10783
11117
  * event listeners.
10784
11118
  *
10785
- * @param url
10786
- * @param frameOptions
11119
+ * @param url - The URL of the embedded ThoughtSpot app.
11120
+ * @param showPreRenderByDefault - The flag to show the preRender by default.
10787
11121
  */
10788
- async renderIFrame(url) {
11122
+ async renderIFrame(url, showPreRenderByDefault = false) {
10789
11123
  if (this.isError) {
10790
11124
  return null;
10791
11125
  }
@@ -10805,12 +11139,7 @@ class TsEmbed {
10805
11139
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_START);
10806
11140
  return (_a = getAuthPromise()) === null || _a === void 0 ? void 0 : _a.then((isLoggedIn) => {
10807
11141
  if (!isLoggedIn) {
10808
- if (this.isPreRendered) {
10809
- this.insertIntoDOMForPreRender(this.embedConfig.loginFailedMessage);
10810
- }
10811
- else {
10812
- this.insertIntoDOM(this.embedConfig.loginFailedMessage);
10813
- }
11142
+ this.handleInsertionIntoDOM(this.embedConfig.loginFailedMessage, showPreRenderByDefault);
10814
11143
  return;
10815
11144
  }
10816
11145
  this.iFrame = this.iFrame || this.createIframeEl(url);
@@ -10832,12 +11161,7 @@ class TsEmbed {
10832
11161
  this.iFrame.addEventListener('error', () => {
10833
11162
  nextInQueue();
10834
11163
  });
10835
- if (this.isPreRendered) {
10836
- this.insertIntoDOMForPreRender(this.iFrame);
10837
- }
10838
- else {
10839
- this.insertIntoDOM(this.iFrame);
10840
- }
11164
+ this.handleInsertionIntoDOM(this.iFrame, showPreRenderByDefault);
10841
11165
  const prefetchIframe = document.querySelectorAll('.prefetchIframe');
10842
11166
  if (prefetchIframe.length) {
10843
11167
  prefetchIframe.forEach((el) => {
@@ -10850,12 +11174,7 @@ class TsEmbed {
10850
11174
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_FAILED, {
10851
11175
  error: JSON.stringify(error),
10852
11176
  });
10853
- if (this.isPreRendered) {
10854
- this.insertIntoDOMForPreRender(this.embedConfig.loginFailedMessage);
10855
- }
10856
- else {
10857
- this.insertIntoDOM(this.embedConfig.loginFailedMessage);
10858
- }
11177
+ this.handleInsertionIntoDOM(this.embedConfig.loginFailedMessage);
10859
11178
  this.handleError(error);
10860
11179
  });
10861
11180
  });
@@ -10869,40 +11188,46 @@ class TsEmbed {
10869
11188
  }
10870
11189
  createPreRenderWrapper(child) {
10871
11190
  if (!this.viewConfig.preRenderId) {
10872
- throw new Error('Pre render id is required');
11191
+ throw new Error('PreRender id is required');
10873
11192
  }
10874
11193
  const preRenderIds = this.getPreRenderIds();
10875
- const stalePreRenderWrapper = document.getElementById(preRenderIds.wrapper);
10876
- if (stalePreRenderWrapper) {
10877
- console.log('Found stale wrapper , removing');
10878
- stalePreRenderWrapper.remove();
10879
- }
11194
+ [preRenderIds.wrapper, preRenderIds.shield, preRenderIds.child]
11195
+ .map((id) => document.getElementById(id))
11196
+ .filter((element) => element)
11197
+ .forEach((existingElement) => existingElement.remove());
10880
11198
  const preRenderWrapper = document.createElement('div');
10881
11199
  preRenderWrapper.id = preRenderIds.wrapper;
10882
11200
  setStyleProperties(preRenderWrapper, { position: 'absolute', width: '100vw', height: '100vh' });
10883
- const preRenderShield = document.createElement('div');
10884
- preRenderShield.id = preRenderIds.shield;
10885
- setStyleProperties(preRenderShield, { position: 'absolute', width: '100%', height: '100%' });
11201
+ // const preRenderShield = document.createElement('div');
11202
+ // preRenderShield.id = preRenderIds.shield;
11203
+ // setStyleProperties(preRenderShield, { position: 'absolute',
11204
+ // width: '100%', height: '100%' });
10886
11205
  child.id = preRenderIds.child;
10887
11206
  preRenderWrapper.appendChild(child);
10888
- preRenderWrapper.appendChild(preRenderShield);
11207
+ // preRenderWrapper.appendChild(preRenderShield);
10889
11208
  this.preRenderWrapper = preRenderWrapper;
10890
- this.preRenderShield = preRenderShield;
11209
+ // this.preRenderShield = preRenderShield;
10891
11210
  this.preRenderChild = child;
10892
11211
  return preRenderWrapper;
10893
11212
  }
10894
- isPreRenderAvailable() {
11213
+ connectPreRendered() {
10895
11214
  const preRenderIds = this.getPreRenderIds();
10896
11215
  this.preRenderWrapper = this.preRenderWrapper
10897
11216
  || document.getElementById(preRenderIds.wrapper);
10898
- this.preRenderShield = this.preRenderShield
10899
- || document.getElementById(preRenderIds.shield);
11217
+ // this.preRenderShield = this.preRenderShield
11218
+ // || document.getElementById(preRenderIds.shield);
10900
11219
  this.preRenderChild = this.preRenderChild
10901
11220
  || document.getElementById(preRenderIds.child);
10902
- return !!this.preRenderWrapper && !!this.preRenderShield
10903
- && !!this.preRenderChild;
11221
+ if (this.preRenderWrapper && this.preRenderChild) {
11222
+ this.isPreRendered = true;
11223
+ this.iFrame = this.preRenderChild;
11224
+ }
11225
+ return this.isPreRenderAvailable();
11226
+ }
11227
+ isPreRenderAvailable() {
11228
+ return this.isPreRendered;
10904
11229
  }
10905
- insertIntoDOMForPreRender(child) {
11230
+ insertIntoDOMForPreRender(child, showPreRenderByDefault = false) {
10906
11231
  let childNode;
10907
11232
  if (typeof child === 'string') {
10908
11233
  const divChildNode = document.createElement('div');
@@ -10913,8 +11238,13 @@ class TsEmbed {
10913
11238
  childNode = child;
10914
11239
  }
10915
11240
  const preRenderWrapper = this.createPreRenderWrapper(childNode);
11241
+ if (showPreRenderByDefault) {
11242
+ this.showPreRender();
11243
+ }
11244
+ else {
11245
+ this.hidePreRender();
11246
+ }
10916
11247
  document.body.appendChild(preRenderWrapper);
10917
- this.hidePreRender();
10918
11248
  }
10919
11249
  hidePreRender() {
10920
11250
  if (!this.isPreRenderAvailable()) {
@@ -10931,28 +11261,33 @@ class TsEmbed {
10931
11261
  left: '0',
10932
11262
  });
10933
11263
  const childBoundingRect = this.preRenderChild.getBoundingClientRect();
10934
- setStyleProperties(this.preRenderShield, {
10935
- opacity: '0',
10936
- pointerEvents: 'none',
10937
- zIndex: '1',
10938
- width: `${childBoundingRect.width}px`,
10939
- height: `${childBoundingRect.height}px`,
10940
- position: 'absolute',
10941
- top: '0',
10942
- left: '0',
10943
- });
11264
+ // setStyleProperties(this.preRenderShield, {
11265
+ // opacity: '0',
11266
+ // pointerEvents: 'none',
11267
+ // zIndex: '1',
11268
+ // width: `${childBoundingRect.width}px`,
11269
+ // height: `${childBoundingRect.height}px`,
11270
+ // position: 'absolute',
11271
+ // top: '0',
11272
+ // left: '0',
11273
+ // });
11274
+ this.unsubscribeToEvents();
10944
11275
  }
10945
11276
  showPreRender() {
10946
11277
  if (!this.isPreRenderAvailable()) {
10947
- // if the Embed component is nor preRendered , Render it now and
10948
- // show it (hide is defalt behaviour)
10949
- console.log('No preRender found, creating new ');
10950
- this.render();
10951
- return;
11278
+ const isAvailable = this.connectPreRendered();
11279
+ if (!isAvailable) {
11280
+ // if the Embed component is nor preRendered , Render it now and
11281
+ // show it (hide is defalt behaviour)
11282
+ console.log('No preRender found, creating new ');
11283
+ this.preRender(true);
11284
+ return;
11285
+ }
10952
11286
  }
10953
11287
  this.syncPreRenderStyle();
10954
11288
  removeStyleProperties(this.preRenderWrapper, ['z-index', 'opacity', 'pointer-events']);
10955
- setStyleProperties(this.preRenderShield, { zIndex: '-1' });
11289
+ // setStyleProperties(this.preRenderShield, { zIndex: '-1' });
11290
+ this.subscribeToEvents();
10956
11291
  }
10957
11292
  syncPreRenderStyle() {
10958
11293
  if (!this.el) {
@@ -11179,8 +11514,10 @@ class TsEmbed {
11179
11514
  }
11180
11515
  /**
11181
11516
  * Creates the preRender shell
11517
+ *
11518
+ * @param showPreRenderByDefault
11182
11519
  */
11183
- preRender() {
11520
+ preRender(showPreRenderByDefault = false) {
11184
11521
  this.isPreRendered = true;
11185
11522
  return this;
11186
11523
  }
@@ -11219,6 +11556,7 @@ class TsEmbed {
11219
11556
  var _a;
11220
11557
  try {
11221
11558
  (_a = this.insertedDomEl) === null || _a === void 0 ? void 0 : _a.parentNode.removeChild(this.insertedDomEl);
11559
+ this.unsubscribeToEvents();
11222
11560
  }
11223
11561
  catch (e) {
11224
11562
  console.log('Error destroying TS Embed', e);
@@ -11256,9 +11594,10 @@ class V1Embed extends TsEmbed {
11256
11594
  * Render the app in an iframe and set up event handlers
11257
11595
  *
11258
11596
  * @param iframeSrc
11597
+ * @param showPreRenderByDefault - if true the preRender will be shown by default
11259
11598
  */
11260
- renderV1Embed(iframeSrc) {
11261
- return this.renderIFrame(iframeSrc);
11599
+ renderV1Embed(iframeSrc, showPreRenderByDefault = false) {
11600
+ return this.renderIFrame(iframeSrc, showPreRenderByDefault);
11262
11601
  }
11263
11602
  getRootIframeSrc() {
11264
11603
  const queryParams = this.getEmbedParams();
@@ -11304,6 +11643,7 @@ class V1Embed extends TsEmbed {
11304
11643
  class SearchBarEmbed extends TsEmbed {
11305
11644
  constructor(domSelector, viewConfig) {
11306
11645
  super(domSelector);
11646
+ this.embedComponentType = 'SearchBarEmbed';
11307
11647
  this.viewConfig = viewConfig;
11308
11648
  }
11309
11649
  /**
@@ -11382,6 +11722,7 @@ class SageEmbed extends V1Embed {
11382
11722
  // eslint-disable-next-line no-useless-constructor
11383
11723
  constructor(domSelector, viewConfig) {
11384
11724
  super(domSelector, viewConfig);
11725
+ this.embedComponentType = 'SageEmbed';
11385
11726
  }
11386
11727
  /**
11387
11728
  * Constructs a map of parameters to be passed on to the
@@ -11433,12 +11774,18 @@ class SageEmbed extends V1Embed {
11433
11774
  /**
11434
11775
  * Render the embedded ThoughtSpot Sage
11435
11776
  *
11777
+ * @param showPreRenderByDefault
11436
11778
  * @returns {SageEmbed} Eureka/Sage embed
11437
11779
  */
11438
- render() {
11780
+ render(showPreRenderByDefault = false) {
11439
11781
  super.render();
11440
11782
  const src = this.getIFrameSrc();
11441
- this.renderV1Embed(src);
11783
+ this.renderV1Embed(src, showPreRenderByDefault);
11784
+ return this;
11785
+ }
11786
+ preRender(showPreRenderByDefault = false) {
11787
+ super.preRender(showPreRenderByDefault);
11788
+ this.render(showPreRenderByDefault);
11442
11789
  return this;
11443
11790
  }
11444
11791
  }
@@ -11466,6 +11813,7 @@ const HiddenActionItemByDefaultForSearchEmbed = [
11466
11813
  class SearchEmbed extends TsEmbed {
11467
11814
  constructor(domSelector, viewConfig) {
11468
11815
  super(domSelector);
11816
+ this.embedComponentType = 'SearchEmbed';
11469
11817
  this.viewConfig = viewConfig;
11470
11818
  }
11471
11819
  /**
@@ -11546,12 +11894,14 @@ class SearchEmbed extends TsEmbed {
11546
11894
  }
11547
11895
  /**
11548
11896
  * Render the embedded ThoughtSpot search
11897
+ *
11898
+ * @param showPreRenderByDefault
11549
11899
  */
11550
- render() {
11900
+ render(showPreRenderByDefault = false) {
11551
11901
  super.render();
11552
11902
  const { answerId } = this.viewConfig;
11553
11903
  const src = this.getIFrameSrc(answerId);
11554
- this.renderIFrame(src);
11904
+ this.renderIFrame(src, showPreRenderByDefault);
11555
11905
  getAuthPromise().then(() => {
11556
11906
  if (checkReleaseVersionInBeta(getReleaseVersion(), getEmbedConfig().suppressSearchEmbedBetaWarning)) {
11557
11907
  alert(ERROR_MESSAGE.SEARCHEMBED_BETA_WRANING_MESSAGE);
@@ -11559,6 +11909,11 @@ class SearchEmbed extends TsEmbed {
11559
11909
  });
11560
11910
  return this;
11561
11911
  }
11912
+ preRender(showPreRenderByDefault = false) {
11913
+ super.preRender(showPreRenderByDefault);
11914
+ this.render(showPreRenderByDefault);
11915
+ return this;
11916
+ }
11562
11917
  }
11563
11918
 
11564
11919
  /**
@@ -11616,6 +11971,7 @@ class AppEmbed extends V1Embed {
11616
11971
  constructor(domSelector, viewConfig) {
11617
11972
  super(domSelector, viewConfig);
11618
11973
  this.defaultHeight = '100%';
11974
+ this.embedComponentType = 'AppEmbed';
11619
11975
  /**
11620
11976
  * Set the iframe height as per the computed height received
11621
11977
  * from the ThoughtSpot app.
@@ -11766,11 +12122,17 @@ class AppEmbed extends V1Embed {
11766
12122
  *
11767
12123
  * @param renderOptions An object containing the page ID
11768
12124
  * to be embedded.
12125
+ * @param showPreRenderByDefault
11769
12126
  */
11770
- render() {
12127
+ render(showPreRenderByDefault = false) {
11771
12128
  super.render();
11772
12129
  const src = this.getIFrameSrc();
11773
- this.renderV1Embed(src);
12130
+ this.renderV1Embed(src, showPreRenderByDefault);
12131
+ return this;
12132
+ }
12133
+ preRender(showPreRenderByDefault = false) {
12134
+ super.preRender(showPreRenderByDefault);
12135
+ this.render(showPreRenderByDefault);
11774
12136
  return this;
11775
12137
  }
11776
12138
  }
@@ -11805,6 +12167,7 @@ class LiveboardEmbed extends V1Embed {
11805
12167
  constructor(domSelector, viewConfig) {
11806
12168
  super(domSelector, viewConfig);
11807
12169
  this.defaultHeight = 500;
12170
+ this.embedComponentType = 'LiveboardEmbed';
11808
12171
  /**
11809
12172
  * Set the iframe height as per the computed height received
11810
12173
  * from the ThoughtSpot app.
@@ -11926,15 +12289,15 @@ class LiveboardEmbed extends V1Embed {
11926
12289
  * @param renderOptions An object specifying the Liveboard ID,
11927
12290
  * visualization ID and the runtime filters.
11928
12291
  */
11929
- render() {
12292
+ render(showPreRenderByDefault = false) {
11930
12293
  super.render();
11931
12294
  const src = this.getIFrameSrc();
11932
- this.renderV1Embed(src);
12295
+ this.renderV1Embed(src, showPreRenderByDefault);
11933
12296
  return this;
11934
12297
  }
11935
- preRender() {
11936
- super.preRender();
11937
- this.render();
12298
+ preRender(showPreRenderByDefault = false) {
12299
+ super.preRender(showPreRenderByDefault);
12300
+ this.render(showPreRenderByDefault);
11938
12301
  return this;
11939
12302
  }
11940
12303
  navigateToLiveboard(liveboardId, vizId, activeTabId) {
@@ -11979,9 +12342,7 @@ const componentFactory = (EmbedConstructor, isPreRenderedComponent = false) => R
11979
12342
  const tsEmbed = new EmbedConstructor(ref.current, deepMerge({
11980
12343
  insertAsSibling: viewConfig.insertAsSibling,
11981
12344
  frameParams: {
11982
- class: viewConfig.insertAsSibling
11983
- ? className || ''
11984
- : '',
12345
+ class: viewConfig.insertAsSibling ? className || '' : '',
11985
12346
  },
11986
12347
  }, viewConfig));
11987
12348
  Object.keys(listeners).forEach((eventName) => {
@@ -12009,9 +12370,7 @@ const componentFactory = (EmbedConstructor, isPreRenderedComponent = false) => R
12009
12370
  }
12010
12371
  };
12011
12372
  }, [viewConfig, listeners]);
12012
- return ((viewConfig.insertAsSibling)
12013
- ? React.createElement("span", { "data-testid": "tsEmbed", ref: ref, style: { position: 'absolute' } })
12014
- : React.createElement("div", { "data-testid": "tsEmbed", ref: ref, className: className }));
12373
+ return viewConfig.insertAsSibling ? (React.createElement("span", { "data-testid": "tsEmbed", ref: ref, style: { position: 'absolute' } })) : (React.createElement("div", { "data-testid": "tsEmbed", ref: ref, className: className }));
12015
12374
  });
12016
12375
  /**
12017
12376
  * React component for Search Embed.
@@ -12042,6 +12401,7 @@ const SearchEmbed$1 = componentFactory(SearchEmbed);
12042
12401
  * ```
12043
12402
  */
12044
12403
  const AppEmbed$1 = componentFactory(AppEmbed);
12404
+ const PreRenderedAppEmbed = componentFactory(AppEmbed, true);
12045
12405
  /**
12046
12406
  * React component for Liveboard embed.
12047
12407
  *
@@ -12059,6 +12419,8 @@ const AppEmbed$1 = componentFactory(AppEmbed);
12059
12419
  */
12060
12420
  const LiveboardEmbed$1 = componentFactory(LiveboardEmbed);
12061
12421
  const PinboardEmbed = LiveboardEmbed$1;
12422
+ const PreRenderedLiveboardEmbed = componentFactory(LiveboardEmbed, true);
12423
+ const PreRenderedPinboardEmbed = PreRenderedLiveboardEmbed;
12062
12424
  /**
12063
12425
  * React component for Search bar embed.
12064
12426
  *
@@ -12073,6 +12435,7 @@ const PinboardEmbed = LiveboardEmbed$1;
12073
12435
  * ```
12074
12436
  */
12075
12437
  const SearchBarEmbed$1 = componentFactory(SearchBarEmbed);
12438
+ const PreRenderedSearchBarEmbed = componentFactory(SearchBarEmbed, true);
12076
12439
  /**
12077
12440
  * React component for LLM based search Sage embed.
12078
12441
  *
@@ -12087,6 +12450,7 @@ const SearchBarEmbed$1 = componentFactory(SearchBarEmbed);
12087
12450
  * ```
12088
12451
  */
12089
12452
  const SageEmbed$1 = componentFactory(SageEmbed);
12453
+ const PreRenderedSageEmbed = componentFactory(SageEmbed, true);
12090
12454
  /**
12091
12455
  * Get a reference to the embed component to trigger events on the component.
12092
12456
  *
@@ -12106,7 +12470,6 @@ const SageEmbed$1 = componentFactory(SageEmbed);
12106
12470
  */
12107
12471
  function useEmbedRef() {
12108
12472
  return React.useRef(null);
12109
- }
12110
- const PreRenderedLiveboardEmbed = componentFactory(LiveboardEmbed, true);
12473
+ }
12111
12474
 
12112
- export { Action, AppEmbed$1 as AppEmbed, EmbedEvent, HomeLeftNavItem, HomepageModule, HostEvent, LiveboardEmbed$1 as LiveboardEmbed, Page, PinboardEmbed, PreRenderedLiveboardEmbed, RuntimeFilterOp, SageEmbed$1 as SageEmbed, SearchBarEmbed$1 as SearchBarEmbed, SearchEmbed$1 as SearchEmbed, useEmbedRef };
12475
+ export { Action, AppEmbed$1 as AppEmbed, EmbedEvent, HomeLeftNavItem, HomepageModule, HostEvent, LiveboardEmbed$1 as LiveboardEmbed, Page, PinboardEmbed, PreRenderedAppEmbed, PreRenderedLiveboardEmbed, PreRenderedPinboardEmbed, PreRenderedSageEmbed, PreRenderedSearchBarEmbed, RuntimeFilterOp, SageEmbed$1 as SageEmbed, SearchBarEmbed$1 as SearchBarEmbed, SearchEmbed$1 as SearchEmbed, useEmbedRef };