@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
@@ -361,6 +361,29 @@
361
361
  return typeof domSelector === 'string' ? document.querySelector(domSelector) : domSelector;
362
362
  }
363
363
  const deepMerge = (target, source) => merge(target, source);
364
+ const getOperationNameFromQuery = (query) => {
365
+ const regex = /(?:query|mutation)\s+(\w+)/;
366
+ const matches = query.match(regex);
367
+ return matches === null || matches === void 0 ? void 0 : matches[1];
368
+ };
369
+ /**
370
+ *
371
+ * @param obj
372
+ */
373
+ function removeTypename(obj) {
374
+ if (!obj || typeof obj !== 'object')
375
+ return obj;
376
+ // eslint-disable-next-line no-restricted-syntax
377
+ for (const key in obj) {
378
+ if (key === '__typename') {
379
+ delete obj[key];
380
+ }
381
+ else if (typeof obj[key] === 'object') {
382
+ removeTypename(obj[key]);
383
+ }
384
+ }
385
+ return obj;
386
+ }
364
387
  const setStyleProperties = (element, styleProperties) => {
365
388
  if (!element || !styleProperties)
366
389
  return;
@@ -626,27 +649,27 @@
626
649
  /**
627
650
  * Search bar
628
651
  */
629
- HomepageModule["Search"] = "search";
652
+ HomepageModule["Search"] = "SEARCH";
630
653
  /**
631
654
  * kPI watchlist module
632
655
  */
633
- HomepageModule["Watchlist"] = "watchlist";
656
+ HomepageModule["Watchlist"] = "WATCHLIST";
634
657
  /**
635
658
  * favorite objects
636
659
  */
637
- HomepageModule["Favorite"] = "favorite";
660
+ HomepageModule["Favorite"] = "FAVORITE";
638
661
  /**
639
662
  * List of answers and liveboards
640
663
  */
641
- HomepageModule["MyLibrary"] = "mylibrary";
664
+ HomepageModule["MyLibrary"] = "MY_LIBRARY";
642
665
  /**
643
666
  * Trending list
644
667
  */
645
- HomepageModule["Trending"] = "trending";
668
+ HomepageModule["Trending"] = "TRENDING";
646
669
  /**
647
670
  * Learning videos
648
671
  */
649
- HomepageModule["Learning"] = "learning";
672
+ HomepageModule["Learning"] = "LEARNING";
650
673
  })(exports.HomepageModule || (exports.HomepageModule = {}));
651
674
  (function (EmbedEvent) {
652
675
  /**
@@ -2719,12 +2742,6 @@
2719
2742
  */
2720
2743
  Action["PersonalisedViewsDropdown"] = "personalisedViewsDropdown";
2721
2744
  })(exports.Action || (exports.Action = {}));
2722
- // eslint-disable-next-line no-shadow
2723
- var OperationType;
2724
- (function (OperationType) {
2725
- OperationType["GetChartWithData"] = "GetChartWithData";
2726
- OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
2727
- })(OperationType || (OperationType = {}));
2728
2745
  var PrefetchFeatures;
2729
2746
  (function (PrefetchFeatures) {
2730
2747
  PrefetchFeatures["FullApp"] = "FullApp";
@@ -8840,6 +8857,7 @@
8840
8857
  * @param sessionInfo
8841
8858
  */
8842
8859
  function initMixpanel(sessionInfo) {
8860
+ var _a;
8843
8861
  if (!sessionInfo || !sessionInfo.mixpanelToken) {
8844
8862
  return;
8845
8863
  }
@@ -8857,6 +8875,7 @@
8857
8875
  clusterId: sessionInfo.clusterId,
8858
8876
  clusterName: sessionInfo.clusterName,
8859
8877
  releaseVersion: sessionInfo.releaseVersion,
8878
+ hostAppUrl: ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.host) || '',
8860
8879
  });
8861
8880
  isMixpanelInitialized = true;
8862
8881
  emptyQueue();
@@ -10118,58 +10137,351 @@
10118
10137
 
10119
10138
  /**
10120
10139
  *
10121
- * @param session
10122
- * @param query
10123
- * @param operation
10140
+ * @param root0
10141
+ * @param root0.query
10142
+ * @param root0.variables
10143
+ * @param root0.thoughtSpotHost
10144
+ * @param root0.isCompositeQuery
10145
+ */
10146
+ async function graphqlQuery({ query, variables, thoughtSpotHost, isCompositeQuery = false, }) {
10147
+ const operationName = getOperationNameFromQuery(query);
10148
+ try {
10149
+ const response = await fetch(`${thoughtSpotHost}/prism/?op=${operationName}`, {
10150
+ method: 'POST',
10151
+ headers: {
10152
+ 'content-type': 'application/json;charset=UTF-8',
10153
+ 'x-requested-by': 'ThoughtSpot',
10154
+ accept: '*/*',
10155
+ 'accept-language': 'en-us',
10156
+ },
10157
+ body: JSON.stringify({
10158
+ operationName,
10159
+ query,
10160
+ variables,
10161
+ }),
10162
+ credentials: 'include',
10163
+ });
10164
+ const result = await response.json();
10165
+ const dataValues = Object.values(result.data);
10166
+ return (isCompositeQuery) ? result.data : dataValues[0];
10167
+ }
10168
+ catch (error) {
10169
+ return error;
10170
+ }
10171
+ }
10172
+
10173
+ const getSourceDetailQuery = `
10174
+ query GetSourceDetail($ids: [GUID!]!) {
10175
+ getSourceDetailById(ids: $ids, type: LOGICAL_TABLE) {
10176
+ id
10177
+ name
10178
+ description
10179
+ authorName
10180
+ authorDisplayName
10181
+ isExternal
10182
+ type
10183
+ created
10184
+ modified
10185
+ columns {
10186
+ id
10187
+ name
10188
+ author
10189
+ authorDisplayName
10190
+ description
10191
+ dataType
10192
+ type
10193
+ modified
10194
+ ownerName
10195
+ owner
10196
+ dataRecency
10197
+ sources {
10198
+ tableId
10199
+ tableName
10200
+ columnId
10201
+ columnName
10202
+ __typename
10203
+ }
10204
+ synonyms
10205
+ cohortAnswerId
10206
+ __typename
10207
+ }
10208
+ relationships
10209
+ destinationRelationships
10210
+ dataSourceId
10211
+ __typename
10212
+ }
10213
+ }
10214
+ `;
10215
+ const sourceDetailCache = new Map();
10216
+ /**
10217
+ *
10124
10218
  * @param thoughtSpotHost
10219
+ * @param sourceId
10125
10220
  */
10126
- function getAnswerServiceInstance(session, query, operation, thoughtSpotHost) {
10127
- let variable;
10128
- const fetchQuery = async (variables) => {
10129
- try {
10130
- const response = await fetch(`${thoughtSpotHost}/prism/?op=${operation}`, {
10131
- method: 'POST',
10132
- headers: {
10133
- 'content-type': 'application/json;charset=UTF-8',
10134
- 'x-requested-by': 'ThoughtSpot',
10135
- accept: '*/*',
10136
- 'accept-language': 'en-us',
10137
- },
10138
- body: JSON.stringify({
10139
- operationName: operation,
10140
- query,
10141
- variables,
10142
- }),
10143
- credentials: 'include',
10144
- });
10145
- const result = await response.json();
10146
- return result.data;
10221
+ async function getSourceDetail(thoughtSpotHost, sourceId) {
10222
+ if (sourceDetailCache.has(sourceId)) {
10223
+ return sourceDetailCache.get(sourceId);
10224
+ }
10225
+ const details = await graphqlQuery({
10226
+ query: getSourceDetailQuery,
10227
+ variables: {
10228
+ ids: [sourceId],
10229
+ },
10230
+ thoughtSpotHost,
10231
+ });
10232
+ const souceDetails = details[0];
10233
+ sourceDetailCache.set(sourceId, souceDetails);
10234
+ return souceDetails;
10235
+ }
10236
+
10237
+ const bachSessionId = `
10238
+ id {
10239
+ sessionId
10240
+ genNo
10241
+ acSession {
10242
+ sessionId
10243
+ genNo
10244
+ }
10245
+ }
10246
+ `;
10247
+ const getUnaggregatedAnswerSession = `
10248
+ mutation GetUnAggregatedAnswerSession($session: BachSessionIdInput!, $columns: [UserPointSelectionInput!]!) {
10249
+ Answer__getUnaggregatedAnswer(session: $session, columns: $columns) {
10250
+ ${bachSessionId}
10251
+ answer {
10252
+ visualizations {
10253
+ ... on TableViz {
10254
+ columns {
10255
+ column {
10256
+ id
10257
+ name
10258
+ referencedColumns {
10259
+ guid
10260
+ displayName
10261
+ }
10262
+ }
10263
+ }
10264
+ }
10265
+ }
10266
+ }
10267
+ }
10268
+ }
10269
+ `;
10270
+ const removeColumns = `
10271
+ mutation RemoveColumns($session: BachSessionIdInput!, $logicalColumnIds: [GUID!], $columnIds: [GUID!]) {
10272
+ Answer__removeColumns(
10273
+ session: $session
10274
+ logicalColumnIds: $logicalColumnIds
10275
+ columnIds: $columnIds
10276
+ ) {
10277
+ ${bachSessionId}
10278
+ }
10279
+ }
10280
+ `;
10281
+ const addColumns = `
10282
+ mutation AddColumns($session: BachSessionIdInput!, $columns: [AnswerColumnInfo!]!) {
10283
+ Answer__addColumn(session: $session, columns: $columns) {
10284
+ ${bachSessionId}
10285
+ }
10286
+ }
10287
+ `;
10288
+ const getAnswerData = `
10289
+ query GetTableWithHeadlineData($session: BachSessionIdInput!, $deadline: Int!, $dataPaginationParams: DataPaginationParamsInput!) {
10290
+ getAnswer(session: $session) {
10291
+ ${bachSessionId}
10292
+ answer {
10293
+ id
10294
+ visualizations {
10295
+ id
10296
+ ... on TableViz {
10297
+ columns {
10298
+ column {
10299
+ id
10300
+ name
10301
+ type
10302
+ aggregationType
10303
+ dataType
10304
+ }
10305
+ }
10306
+ data(deadline: $deadline, pagination: $dataPaginationParams)
10307
+ }
10308
+ }
10309
+ }
10310
+ }
10311
+ }
10312
+ `;
10313
+
10314
+ // eslint-disable-next-line no-shadow
10315
+ var OperationType;
10316
+ (function (OperationType) {
10317
+ OperationType["GetChartWithData"] = "GetChartWithData";
10318
+ OperationType["GetTableWithHeadlineData"] = "GetTableWithHeadlineData";
10319
+ })(OperationType || (OperationType = {}));
10320
+ /**
10321
+ * Class representing the answer service provided with the
10322
+ * custom action payload. This service could be used to run
10323
+ * graphql queries in the context of the answer on which the
10324
+ * custom action was triggered.
10325
+ *
10326
+ * @example
10327
+ * ```js
10328
+ * embed.on(EmbedEvent.CustomAction, e => {
10329
+ * const underlying = await e.answerService.getUnderlyingDataForPoint([
10330
+ * 'col name 1'
10331
+ * ]);
10332
+ * const data = await underlying.fetchData(0, 100);
10333
+ * })
10334
+ * ```
10335
+ * @version
10336
+ * ThoughtSpot: 9.9.0.cl / SDK: 1.25.0
10337
+ */
10338
+ class AnswerService {
10339
+ constructor(session, answer, thoughtSpotHost, selectedPoints) {
10340
+ this.session = session;
10341
+ this.answer = answer;
10342
+ this.thoughtSpotHost = thoughtSpotHost;
10343
+ this.selectedPoints = selectedPoints;
10344
+ this.session = removeTypename(session);
10345
+ }
10346
+ async getSourceDetail() {
10347
+ const sourceId = this.answer.sources[0].header.guid;
10348
+ return getSourceDetail(this.thoughtSpotHost, sourceId);
10349
+ }
10350
+ async removeColumns(columnIds) {
10351
+ return this.executeQuery(removeColumns, {
10352
+ logicalColumnIds: columnIds,
10353
+ });
10354
+ }
10355
+ async addColumns(columnIds) {
10356
+ return this.executeQuery(addColumns, {
10357
+ columns: columnIds.map((colId) => ({ logicalColumnId: colId })),
10358
+ });
10359
+ }
10360
+ async fetchData(offset = 0, size = 1000) {
10361
+ const { answer } = await this.executeQuery(getAnswerData, {
10362
+ deadline: 0,
10363
+ dataPaginationParams: {
10364
+ isClientPaginated: true,
10365
+ offset,
10366
+ size,
10367
+ },
10368
+ });
10369
+ const { columns, data } = answer.visualizations[0];
10370
+ return {
10371
+ columns,
10372
+ data,
10373
+ };
10374
+ }
10375
+ /**
10376
+ *
10377
+ * @param userLocale
10378
+ * @param omitInfo Omit the download Info on top of the CSV
10379
+ * @returns Response
10380
+ */
10381
+ async fetchCSVBlob(userLocale = 'en-us', omitInfo = false) {
10382
+ if (omitInfo) {
10383
+ console.warn('omitInfo not supported yet.');
10147
10384
  }
10148
- catch (error) {
10149
- return error;
10385
+ const fetchUrl = `${this.thoughtSpotHost}/prism/download/answer/csv?sessionId=${this.session.sessionId}&genNo=${this.session.genNo}&userLocale=${userLocale}&exportFileName=data&omitInfo=${omitInfo}`;
10386
+ return fetch(fetchUrl, {
10387
+ credentials: 'include',
10388
+ });
10389
+ }
10390
+ async getUnderlyingDataForPoint(outputColumnNames, selectedPoints) {
10391
+ if (!selectedPoints && !this.selectedPoints) {
10392
+ throw new Error('Needs to be triggered in context of a point');
10150
10393
  }
10151
- };
10152
- const fetchData = (offset, batchSize) => {
10153
- if (operation === OperationType.GetChartWithData) {
10154
- variable = { batchSize, offset: offset * batchSize };
10394
+ if (!selectedPoints) {
10395
+ selectedPoints = getSelectedPointsForUnderlyingDataQuery(this.selectedPoints);
10396
+ }
10397
+ const sourceDetail = await this.getSourceDetail();
10398
+ const ouputColumnGuids = getGuidsFromColumnNames(sourceDetail, outputColumnNames);
10399
+ const unAggAnswer = await graphqlQuery({
10400
+ query: getUnaggregatedAnswerSession,
10401
+ variables: {
10402
+ session: this.session,
10403
+ columns: selectedPoints,
10404
+ },
10405
+ thoughtSpotHost: this.thoughtSpotHost,
10406
+ });
10407
+ const unaggAnswerSession = new AnswerService(unAggAnswer.id, unAggAnswer.answer, this.thoughtSpotHost);
10408
+ const currentColumns = new Set(unAggAnswer.answer.visualizations[0].columns
10409
+ .map((c) => c.column.referencedColumns[0].guid));
10410
+ const columnsToAdd = [...ouputColumnGuids].filter((col) => !currentColumns.has(col));
10411
+ if (columnsToAdd.length) {
10412
+ await unaggAnswerSession.addColumns(columnsToAdd);
10413
+ }
10414
+ const columnsToRemove = [...currentColumns].filter((col) => !ouputColumnGuids.has(col));
10415
+ if (columnsToRemove.length) {
10416
+ await unaggAnswerSession.removeColumns(columnsToRemove);
10417
+ }
10418
+ return unaggAnswerSession;
10419
+ }
10420
+ async executeQuery(query, variables) {
10421
+ const data = await graphqlQuery({
10422
+ query,
10423
+ variables: {
10424
+ session: this.session,
10425
+ ...variables,
10426
+ },
10427
+ thoughtSpotHost: this.thoughtSpotHost,
10428
+ isCompositeQuery: false,
10429
+ });
10430
+ this.session = deepMerge(this.session, (data === null || data === void 0 ? void 0 : data.id) || {});
10431
+ return data;
10432
+ }
10433
+ getSession() {
10434
+ return this.session;
10435
+ }
10436
+ }
10437
+ /**
10438
+ *
10439
+ * @param sourceDetail
10440
+ * @param colNames
10441
+ */
10442
+ function getGuidsFromColumnNames(sourceDetail, colNames) {
10443
+ const cols = sourceDetail.columns.reduce((colSet, col) => {
10444
+ colSet[col.name] = col;
10445
+ return colSet;
10446
+ }, {});
10447
+ return new Set(colNames.map((colName) => {
10448
+ const col = cols[colName];
10449
+ return col.id;
10450
+ }));
10451
+ }
10452
+ /**
10453
+ *
10454
+ * @param selectedPoints
10455
+ */
10456
+ function getSelectedPointsForUnderlyingDataQuery(selectedPoints) {
10457
+ const underlyingDataPoint = [];
10458
+ /**
10459
+ *
10460
+ * @param colVal
10461
+ */
10462
+ function addPointFromColVal(colVal) {
10463
+ const dataType = colVal.column.dataType;
10464
+ const id = colVal.column.id;
10465
+ let dataValue;
10466
+ if (dataType === 'DATE') {
10467
+ dataValue = [{
10468
+ epochRange: {
10469
+ startEpoch: colVal.value,
10470
+ },
10471
+ }];
10155
10472
  }
10156
10473
  else {
10157
- variable = {
10158
- dataPaginationParams: {
10159
- isClientPaginated: true,
10160
- offset: offset * batchSize,
10161
- size: batchSize,
10162
- },
10163
- };
10474
+ dataValue = [{ value: colVal.value }];
10164
10475
  }
10165
- return fetchQuery({
10166
- session,
10167
- ...variable,
10476
+ underlyingDataPoint.push({
10477
+ columnId: colVal.column.id,
10478
+ dataValue,
10168
10479
  });
10169
- };
10170
- return {
10171
- fetchData,
10172
- };
10480
+ }
10481
+ selectedPoints.forEach((p) => {
10482
+ p.selectedAttributes.forEach(addPointFromColVal);
10483
+ });
10484
+ return underlyingDataPoint;
10173
10485
  }
10174
10486
 
10175
10487
  /**
@@ -10178,16 +10490,12 @@
10178
10490
  * @param thoughtSpotHost
10179
10491
  */
10180
10492
  function processCustomAction(e, thoughtSpotHost) {
10181
- var _a;
10182
- if ([OperationType.GetChartWithData, OperationType.GetTableWithHeadlineData].includes((_a = e.data) === null || _a === void 0 ? void 0 : _a.operation)) {
10183
- const { session, query, operation } = e.data;
10184
- const answerService = getAnswerServiceInstance(session, query, operation, thoughtSpotHost);
10185
- return {
10186
- ...e,
10187
- answerService,
10188
- };
10189
- }
10190
- return e;
10493
+ const { session, embedAnswerData, contextMenuPoints } = e.data;
10494
+ const answerService = new AnswerService(session, embedAnswerData, thoughtSpotHost, contextMenuPoints === null || contextMenuPoints === void 0 ? void 0 : contextMenuPoints.selectedPoints);
10495
+ return {
10496
+ ...e,
10497
+ answerService,
10498
+ };
10191
10499
  }
10192
10500
  /**
10193
10501
  *
@@ -10332,7 +10640,7 @@
10332
10640
  });
10333
10641
  }
10334
10642
 
10335
- 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$1={".":{"import":"./lib/src/index.js",require:"./cjs/src/index.js",types:"./lib/src/index.d.ts"},"./react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"},"./lib/src/react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"}};var typesVersions={"*":{react:["./lib/src/react/all-types-export.d.ts"]}};var scripts={lint:"eslint 'src/**'","lint:fix":"eslint 'src/**/*.*' --fix",tsc:"tsc -p . --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$1,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};
10643
+ 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$1={".":{"import":"./lib/src/index.js",require:"./cjs/src/index.js",types:"./lib/src/index.d.ts"},"./react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"},"./lib/src/react":{"import":"./lib/src/react/all-types-export.js",require:"./cjs/src/react/all-types-export.js",types:"./lib/src/react/all-types-export.d.ts"}};var typesVersions={"*":{react:["./lib/src/react/all-types-export.d.ts"]}};var scripts={lint:"eslint 'src/**'","lint:fix":"eslint 'src/**/*.*' --fix",tsc:"tsc -p . --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$1,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};
10336
10644
 
10337
10645
  /**
10338
10646
  * Copyright (c) 2022
@@ -10364,6 +10672,7 @@
10364
10672
  class TsEmbed {
10365
10673
  constructor(domSelector, viewConfig) {
10366
10674
  this.isAppInitialized = false;
10675
+ this.embedComponentType = 'TsEmbed';
10367
10676
  /**
10368
10677
  * Should we encode URL Query Params using base64 encoding which thoughtspot
10369
10678
  * will generate for embedding. This provides additional security to
@@ -10373,6 +10682,7 @@
10373
10682
  */
10374
10683
  this.shouldEncodeUrlQueryParams = false;
10375
10684
  this.defaultHiddenActions = [exports.Action.ReportError];
10685
+ this.subscribedListeners = {};
10376
10686
  /**
10377
10687
  * Send Custom style as part of payload of APP_INIT
10378
10688
  *
@@ -10395,6 +10705,7 @@
10395
10705
  ? getRuntimeFilters(this.viewConfig.runtimeFilters)
10396
10706
  : null,
10397
10707
  hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
10708
+ reorderedHomepageModules: this.viewConfig.reorderedHomepageModules || [],
10398
10709
  hostConfig: this.embedConfig.hostConfig,
10399
10710
  hiddenHomeLeftNavItems: ((_a = this.viewConfig) === null || _a === void 0 ? void 0 : _a.hiddenHomeLeftNavItems)
10400
10711
  ? (_b = this.viewConfig) === null || _b === void 0 ? void 0 : _b.hiddenHomeLeftNavItems
@@ -10444,6 +10755,7 @@
10444
10755
  this.registerAppInit();
10445
10756
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, {
10446
10757
  ...viewConfig,
10758
+ embedComponentType: this.embedComponentType,
10447
10759
  });
10448
10760
  }
10449
10761
  /**
@@ -10512,23 +10824,37 @@
10512
10824
  * and executes the registered callbacks accordingly.
10513
10825
  */
10514
10826
  subscribeToEvents() {
10515
- window.addEventListener('message', (event) => {
10827
+ this.unsubscribeToEvents();
10828
+ const messageEventListener = (event) => {
10516
10829
  const eventType = this.getEventType(event);
10517
10830
  const eventPort = this.getEventPort(event);
10518
10831
  const eventData = this.formatEventData(event, eventType);
10519
10832
  if (event.source === this.iFrame.contentWindow) {
10520
10833
  this.executeCallbacks(eventType, processEventData(eventType, eventData, this.thoughtSpotHost, this.el), eventPort);
10521
10834
  }
10522
- });
10523
- window.addEventListener('online', (e) => {
10835
+ };
10836
+ window.addEventListener('message', messageEventListener);
10837
+ const onlineEventListener = (e) => {
10524
10838
  this.trigger(exports.HostEvent.Reload);
10525
- });
10526
- window.addEventListener('offline', (e) => {
10839
+ };
10840
+ window.addEventListener('online', onlineEventListener);
10841
+ const offlineEventListener = (e) => {
10527
10842
  const offlineWarning = 'Network not Detected. Embed is offline. Please reconnect and refresh';
10528
10843
  this.executeCallbacks(exports.EmbedEvent.Error, {
10529
10844
  offlineWarning,
10530
10845
  });
10531
10846
  console.warn(offlineWarning);
10847
+ };
10848
+ window.addEventListener('offline', offlineEventListener);
10849
+ this.subscribedListeners = {
10850
+ message: messageEventListener,
10851
+ online: onlineEventListener,
10852
+ offline: offlineEventListener,
10853
+ };
10854
+ }
10855
+ unsubscribeToEvents() {
10856
+ Object.keys(this.subscribedListeners).forEach((key) => {
10857
+ window.removeEventListener(key, this.subscribedListeners[key]);
10532
10858
  });
10533
10859
  }
10534
10860
  /**
@@ -10700,14 +11026,22 @@
10700
11026
  iFrame.name = 'ThoughtSpot Embedded Analytics';
10701
11027
  return iFrame;
10702
11028
  }
11029
+ handleInsertionIntoDOM(child, showPreRenderByDefault = false) {
11030
+ if (this.isPreRendered) {
11031
+ this.insertIntoDOMForPreRender(this.embedConfig.loginFailedMessage, showPreRenderByDefault);
11032
+ }
11033
+ else {
11034
+ this.insertIntoDOM(this.embedConfig.loginFailedMessage);
11035
+ }
11036
+ }
10703
11037
  /**
10704
11038
  * Renders the embedded ThoughtSpot app in an iframe and sets up
10705
11039
  * event listeners.
10706
11040
  *
10707
- * @param url
10708
- * @param frameOptions
11041
+ * @param url - The URL of the embedded ThoughtSpot app.
11042
+ * @param showPreRenderByDefault - The flag to show the preRender by default.
10709
11043
  */
10710
- async renderIFrame(url) {
11044
+ async renderIFrame(url, showPreRenderByDefault = false) {
10711
11045
  if (this.isError) {
10712
11046
  return null;
10713
11047
  }
@@ -10727,12 +11061,7 @@
10727
11061
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_START);
10728
11062
  return (_a = getAuthPromise()) === null || _a === void 0 ? void 0 : _a.then((isLoggedIn) => {
10729
11063
  if (!isLoggedIn) {
10730
- if (this.isPreRendered) {
10731
- this.insertIntoDOMForPreRender(this.embedConfig.loginFailedMessage);
10732
- }
10733
- else {
10734
- this.insertIntoDOM(this.embedConfig.loginFailedMessage);
10735
- }
11064
+ this.handleInsertionIntoDOM(this.embedConfig.loginFailedMessage, showPreRenderByDefault);
10736
11065
  return;
10737
11066
  }
10738
11067
  this.iFrame = this.iFrame || this.createIframeEl(url);
@@ -10754,12 +11083,7 @@
10754
11083
  this.iFrame.addEventListener('error', () => {
10755
11084
  nextInQueue();
10756
11085
  });
10757
- if (this.isPreRendered) {
10758
- this.insertIntoDOMForPreRender(this.iFrame);
10759
- }
10760
- else {
10761
- this.insertIntoDOM(this.iFrame);
10762
- }
11086
+ this.handleInsertionIntoDOM(this.iFrame, showPreRenderByDefault);
10763
11087
  const prefetchIframe = document.querySelectorAll('.prefetchIframe');
10764
11088
  if (prefetchIframe.length) {
10765
11089
  prefetchIframe.forEach((el) => {
@@ -10772,12 +11096,7 @@
10772
11096
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_FAILED, {
10773
11097
  error: JSON.stringify(error),
10774
11098
  });
10775
- if (this.isPreRendered) {
10776
- this.insertIntoDOMForPreRender(this.embedConfig.loginFailedMessage);
10777
- }
10778
- else {
10779
- this.insertIntoDOM(this.embedConfig.loginFailedMessage);
10780
- }
11099
+ this.handleInsertionIntoDOM(this.embedConfig.loginFailedMessage);
10781
11100
  this.handleError(error);
10782
11101
  });
10783
11102
  });
@@ -10791,40 +11110,46 @@
10791
11110
  }
10792
11111
  createPreRenderWrapper(child) {
10793
11112
  if (!this.viewConfig.preRenderId) {
10794
- throw new Error('Pre render id is required');
11113
+ throw new Error('PreRender id is required');
10795
11114
  }
10796
11115
  const preRenderIds = this.getPreRenderIds();
10797
- const stalePreRenderWrapper = document.getElementById(preRenderIds.wrapper);
10798
- if (stalePreRenderWrapper) {
10799
- console.log('Found stale wrapper , removing');
10800
- stalePreRenderWrapper.remove();
10801
- }
11116
+ [preRenderIds.wrapper, preRenderIds.shield, preRenderIds.child]
11117
+ .map((id) => document.getElementById(id))
11118
+ .filter((element) => element)
11119
+ .forEach((existingElement) => existingElement.remove());
10802
11120
  const preRenderWrapper = document.createElement('div');
10803
11121
  preRenderWrapper.id = preRenderIds.wrapper;
10804
11122
  setStyleProperties(preRenderWrapper, { position: 'absolute', width: '100vw', height: '100vh' });
10805
- const preRenderShield = document.createElement('div');
10806
- preRenderShield.id = preRenderIds.shield;
10807
- setStyleProperties(preRenderShield, { position: 'absolute', width: '100%', height: '100%' });
11123
+ // const preRenderShield = document.createElement('div');
11124
+ // preRenderShield.id = preRenderIds.shield;
11125
+ // setStyleProperties(preRenderShield, { position: 'absolute',
11126
+ // width: '100%', height: '100%' });
10808
11127
  child.id = preRenderIds.child;
10809
11128
  preRenderWrapper.appendChild(child);
10810
- preRenderWrapper.appendChild(preRenderShield);
11129
+ // preRenderWrapper.appendChild(preRenderShield);
10811
11130
  this.preRenderWrapper = preRenderWrapper;
10812
- this.preRenderShield = preRenderShield;
11131
+ // this.preRenderShield = preRenderShield;
10813
11132
  this.preRenderChild = child;
10814
11133
  return preRenderWrapper;
10815
11134
  }
10816
- isPreRenderAvailable() {
11135
+ connectPreRendered() {
10817
11136
  const preRenderIds = this.getPreRenderIds();
10818
11137
  this.preRenderWrapper = this.preRenderWrapper
10819
11138
  || document.getElementById(preRenderIds.wrapper);
10820
- this.preRenderShield = this.preRenderShield
10821
- || document.getElementById(preRenderIds.shield);
11139
+ // this.preRenderShield = this.preRenderShield
11140
+ // || document.getElementById(preRenderIds.shield);
10822
11141
  this.preRenderChild = this.preRenderChild
10823
11142
  || document.getElementById(preRenderIds.child);
10824
- return !!this.preRenderWrapper && !!this.preRenderShield
10825
- && !!this.preRenderChild;
11143
+ if (this.preRenderWrapper && this.preRenderChild) {
11144
+ this.isPreRendered = true;
11145
+ this.iFrame = this.preRenderChild;
11146
+ }
11147
+ return this.isPreRenderAvailable();
11148
+ }
11149
+ isPreRenderAvailable() {
11150
+ return this.isPreRendered;
10826
11151
  }
10827
- insertIntoDOMForPreRender(child) {
11152
+ insertIntoDOMForPreRender(child, showPreRenderByDefault = false) {
10828
11153
  let childNode;
10829
11154
  if (typeof child === 'string') {
10830
11155
  const divChildNode = document.createElement('div');
@@ -10835,8 +11160,13 @@
10835
11160
  childNode = child;
10836
11161
  }
10837
11162
  const preRenderWrapper = this.createPreRenderWrapper(childNode);
11163
+ if (showPreRenderByDefault) {
11164
+ this.showPreRender();
11165
+ }
11166
+ else {
11167
+ this.hidePreRender();
11168
+ }
10838
11169
  document.body.appendChild(preRenderWrapper);
10839
- this.hidePreRender();
10840
11170
  }
10841
11171
  hidePreRender() {
10842
11172
  if (!this.isPreRenderAvailable()) {
@@ -10853,28 +11183,33 @@
10853
11183
  left: '0',
10854
11184
  });
10855
11185
  const childBoundingRect = this.preRenderChild.getBoundingClientRect();
10856
- setStyleProperties(this.preRenderShield, {
10857
- opacity: '0',
10858
- pointerEvents: 'none',
10859
- zIndex: '1',
10860
- width: `${childBoundingRect.width}px`,
10861
- height: `${childBoundingRect.height}px`,
10862
- position: 'absolute',
10863
- top: '0',
10864
- left: '0',
10865
- });
11186
+ // setStyleProperties(this.preRenderShield, {
11187
+ // opacity: '0',
11188
+ // pointerEvents: 'none',
11189
+ // zIndex: '1',
11190
+ // width: `${childBoundingRect.width}px`,
11191
+ // height: `${childBoundingRect.height}px`,
11192
+ // position: 'absolute',
11193
+ // top: '0',
11194
+ // left: '0',
11195
+ // });
11196
+ this.unsubscribeToEvents();
10866
11197
  }
10867
11198
  showPreRender() {
10868
11199
  if (!this.isPreRenderAvailable()) {
10869
- // if the Embed component is nor preRendered , Render it now and
10870
- // show it (hide is defalt behaviour)
10871
- console.log('No preRender found, creating new ');
10872
- this.render();
10873
- return;
11200
+ const isAvailable = this.connectPreRendered();
11201
+ if (!isAvailable) {
11202
+ // if the Embed component is nor preRendered , Render it now and
11203
+ // show it (hide is defalt behaviour)
11204
+ console.log('No preRender found, creating new ');
11205
+ this.preRender(true);
11206
+ return;
11207
+ }
10874
11208
  }
10875
11209
  this.syncPreRenderStyle();
10876
11210
  removeStyleProperties(this.preRenderWrapper, ['z-index', 'opacity', 'pointer-events']);
10877
- setStyleProperties(this.preRenderShield, { zIndex: '-1' });
11211
+ // setStyleProperties(this.preRenderShield, { zIndex: '-1' });
11212
+ this.subscribeToEvents();
10878
11213
  }
10879
11214
  syncPreRenderStyle() {
10880
11215
  if (!this.el) {
@@ -11101,8 +11436,10 @@
11101
11436
  }
11102
11437
  /**
11103
11438
  * Creates the preRender shell
11439
+ *
11440
+ * @param showPreRenderByDefault
11104
11441
  */
11105
- preRender() {
11442
+ preRender(showPreRenderByDefault = false) {
11106
11443
  this.isPreRendered = true;
11107
11444
  return this;
11108
11445
  }
@@ -11141,6 +11478,7 @@
11141
11478
  var _a;
11142
11479
  try {
11143
11480
  (_a = this.insertedDomEl) === null || _a === void 0 ? void 0 : _a.parentNode.removeChild(this.insertedDomEl);
11481
+ this.unsubscribeToEvents();
11144
11482
  }
11145
11483
  catch (e) {
11146
11484
  console.log('Error destroying TS Embed', e);
@@ -11178,9 +11516,10 @@
11178
11516
  * Render the app in an iframe and set up event handlers
11179
11517
  *
11180
11518
  * @param iframeSrc
11519
+ * @param showPreRenderByDefault - if true the preRender will be shown by default
11181
11520
  */
11182
- renderV1Embed(iframeSrc) {
11183
- return this.renderIFrame(iframeSrc);
11521
+ renderV1Embed(iframeSrc, showPreRenderByDefault = false) {
11522
+ return this.renderIFrame(iframeSrc, showPreRenderByDefault);
11184
11523
  }
11185
11524
  getRootIframeSrc() {
11186
11525
  const queryParams = this.getEmbedParams();
@@ -11226,6 +11565,7 @@
11226
11565
  class SearchBarEmbed extends TsEmbed {
11227
11566
  constructor(domSelector, viewConfig) {
11228
11567
  super(domSelector);
11568
+ this.embedComponentType = 'SearchBarEmbed';
11229
11569
  this.viewConfig = viewConfig;
11230
11570
  }
11231
11571
  /**
@@ -11304,6 +11644,7 @@
11304
11644
  // eslint-disable-next-line no-useless-constructor
11305
11645
  constructor(domSelector, viewConfig) {
11306
11646
  super(domSelector, viewConfig);
11647
+ this.embedComponentType = 'SageEmbed';
11307
11648
  }
11308
11649
  /**
11309
11650
  * Constructs a map of parameters to be passed on to the
@@ -11355,12 +11696,18 @@
11355
11696
  /**
11356
11697
  * Render the embedded ThoughtSpot Sage
11357
11698
  *
11699
+ * @param showPreRenderByDefault
11358
11700
  * @returns {SageEmbed} Eureka/Sage embed
11359
11701
  */
11360
- render() {
11702
+ render(showPreRenderByDefault = false) {
11361
11703
  super.render();
11362
11704
  const src = this.getIFrameSrc();
11363
- this.renderV1Embed(src);
11705
+ this.renderV1Embed(src, showPreRenderByDefault);
11706
+ return this;
11707
+ }
11708
+ preRender(showPreRenderByDefault = false) {
11709
+ super.preRender(showPreRenderByDefault);
11710
+ this.render(showPreRenderByDefault);
11364
11711
  return this;
11365
11712
  }
11366
11713
  }
@@ -11388,6 +11735,7 @@
11388
11735
  class SearchEmbed extends TsEmbed {
11389
11736
  constructor(domSelector, viewConfig) {
11390
11737
  super(domSelector);
11738
+ this.embedComponentType = 'SearchEmbed';
11391
11739
  this.viewConfig = viewConfig;
11392
11740
  }
11393
11741
  /**
@@ -11468,12 +11816,14 @@
11468
11816
  }
11469
11817
  /**
11470
11818
  * Render the embedded ThoughtSpot search
11819
+ *
11820
+ * @param showPreRenderByDefault
11471
11821
  */
11472
- render() {
11822
+ render(showPreRenderByDefault = false) {
11473
11823
  super.render();
11474
11824
  const { answerId } = this.viewConfig;
11475
11825
  const src = this.getIFrameSrc(answerId);
11476
- this.renderIFrame(src);
11826
+ this.renderIFrame(src, showPreRenderByDefault);
11477
11827
  getAuthPromise().then(() => {
11478
11828
  if (checkReleaseVersionInBeta(getReleaseVersion(), getEmbedConfig().suppressSearchEmbedBetaWarning)) {
11479
11829
  alert(ERROR_MESSAGE.SEARCHEMBED_BETA_WRANING_MESSAGE);
@@ -11481,6 +11831,11 @@
11481
11831
  });
11482
11832
  return this;
11483
11833
  }
11834
+ preRender(showPreRenderByDefault = false) {
11835
+ super.preRender(showPreRenderByDefault);
11836
+ this.render(showPreRenderByDefault);
11837
+ return this;
11838
+ }
11484
11839
  }
11485
11840
 
11486
11841
  /**
@@ -11533,6 +11888,7 @@
11533
11888
  constructor(domSelector, viewConfig) {
11534
11889
  super(domSelector, viewConfig);
11535
11890
  this.defaultHeight = '100%';
11891
+ this.embedComponentType = 'AppEmbed';
11536
11892
  /**
11537
11893
  * Set the iframe height as per the computed height received
11538
11894
  * from the ThoughtSpot app.
@@ -11683,11 +12039,17 @@
11683
12039
  *
11684
12040
  * @param renderOptions An object containing the page ID
11685
12041
  * to be embedded.
12042
+ * @param showPreRenderByDefault
11686
12043
  */
11687
- render() {
12044
+ render(showPreRenderByDefault = false) {
11688
12045
  super.render();
11689
12046
  const src = this.getIFrameSrc();
11690
- this.renderV1Embed(src);
12047
+ this.renderV1Embed(src, showPreRenderByDefault);
12048
+ return this;
12049
+ }
12050
+ preRender(showPreRenderByDefault = false) {
12051
+ super.preRender(showPreRenderByDefault);
12052
+ this.render(showPreRenderByDefault);
11691
12053
  return this;
11692
12054
  }
11693
12055
  }
@@ -11722,6 +12084,7 @@
11722
12084
  constructor(domSelector, viewConfig) {
11723
12085
  super(domSelector, viewConfig);
11724
12086
  this.defaultHeight = 500;
12087
+ this.embedComponentType = 'LiveboardEmbed';
11725
12088
  /**
11726
12089
  * Set the iframe height as per the computed height received
11727
12090
  * from the ThoughtSpot app.
@@ -11843,15 +12206,15 @@
11843
12206
  * @param renderOptions An object specifying the Liveboard ID,
11844
12207
  * visualization ID and the runtime filters.
11845
12208
  */
11846
- render() {
12209
+ render(showPreRenderByDefault = false) {
11847
12210
  super.render();
11848
12211
  const src = this.getIFrameSrc();
11849
- this.renderV1Embed(src);
12212
+ this.renderV1Embed(src, showPreRenderByDefault);
11850
12213
  return this;
11851
12214
  }
11852
- preRender() {
11853
- super.preRender();
11854
- this.render();
12215
+ preRender(showPreRenderByDefault = false) {
12216
+ super.preRender(showPreRenderByDefault);
12217
+ this.render(showPreRenderByDefault);
11855
12218
  return this;
11856
12219
  }
11857
12220
  navigateToLiveboard(liveboardId, vizId, activeTabId) {
@@ -11896,9 +12259,7 @@
11896
12259
  const tsEmbed = new EmbedConstructor(ref.current, deepMerge({
11897
12260
  insertAsSibling: viewConfig.insertAsSibling,
11898
12261
  frameParams: {
11899
- class: viewConfig.insertAsSibling
11900
- ? className || ''
11901
- : '',
12262
+ class: viewConfig.insertAsSibling ? className || '' : '',
11902
12263
  },
11903
12264
  }, viewConfig));
11904
12265
  Object.keys(listeners).forEach((eventName) => {
@@ -11926,9 +12287,7 @@
11926
12287
  }
11927
12288
  };
11928
12289
  }, [viewConfig, listeners]);
11929
- return ((viewConfig.insertAsSibling)
11930
- ? React__default['default'].createElement("span", { "data-testid": "tsEmbed", ref: ref, style: { position: 'absolute' } })
11931
- : React__default['default'].createElement("div", { "data-testid": "tsEmbed", ref: ref, className: className }));
12290
+ return viewConfig.insertAsSibling ? (React__default['default'].createElement("span", { "data-testid": "tsEmbed", ref: ref, style: { position: 'absolute' } })) : (React__default['default'].createElement("div", { "data-testid": "tsEmbed", ref: ref, className: className }));
11932
12291
  });
11933
12292
  /**
11934
12293
  * React component for Search Embed.
@@ -11959,6 +12318,7 @@
11959
12318
  * ```
11960
12319
  */
11961
12320
  const AppEmbed$1 = componentFactory(AppEmbed);
12321
+ const PreRenderedAppEmbed = componentFactory(AppEmbed, true);
11962
12322
  /**
11963
12323
  * React component for Liveboard embed.
11964
12324
  *
@@ -11976,6 +12336,8 @@
11976
12336
  */
11977
12337
  const LiveboardEmbed$1 = componentFactory(LiveboardEmbed);
11978
12338
  const PinboardEmbed = LiveboardEmbed$1;
12339
+ const PreRenderedLiveboardEmbed = componentFactory(LiveboardEmbed, true);
12340
+ const PreRenderedPinboardEmbed = PreRenderedLiveboardEmbed;
11979
12341
  /**
11980
12342
  * React component for Search bar embed.
11981
12343
  *
@@ -11990,6 +12352,7 @@
11990
12352
  * ```
11991
12353
  */
11992
12354
  const SearchBarEmbed$1 = componentFactory(SearchBarEmbed);
12355
+ const PreRenderedSearchBarEmbed = componentFactory(SearchBarEmbed, true);
11993
12356
  /**
11994
12357
  * React component for LLM based search Sage embed.
11995
12358
  *
@@ -12004,6 +12367,7 @@
12004
12367
  * ```
12005
12368
  */
12006
12369
  const SageEmbed$1 = componentFactory(SageEmbed);
12370
+ const PreRenderedSageEmbed = componentFactory(SageEmbed, true);
12007
12371
  /**
12008
12372
  * Get a reference to the embed component to trigger events on the component.
12009
12373
  *
@@ -12023,13 +12387,16 @@
12023
12387
  */
12024
12388
  function useEmbedRef() {
12025
12389
  return React__default['default'].useRef(null);
12026
- }
12027
- const PreRenderedLiveboardEmbed = componentFactory(LiveboardEmbed, true);
12390
+ }
12028
12391
 
12029
12392
  exports.AppEmbed = AppEmbed$1;
12030
12393
  exports.LiveboardEmbed = LiveboardEmbed$1;
12031
12394
  exports.PinboardEmbed = PinboardEmbed;
12395
+ exports.PreRenderedAppEmbed = PreRenderedAppEmbed;
12032
12396
  exports.PreRenderedLiveboardEmbed = PreRenderedLiveboardEmbed;
12397
+ exports.PreRenderedPinboardEmbed = PreRenderedPinboardEmbed;
12398
+ exports.PreRenderedSageEmbed = PreRenderedSageEmbed;
12399
+ exports.PreRenderedSearchBarEmbed = PreRenderedSearchBarEmbed;
12033
12400
  exports.SageEmbed = SageEmbed$1;
12034
12401
  exports.SearchBarEmbed = SearchBarEmbed$1;
12035
12402
  exports.SearchEmbed = SearchEmbed$1;