@thoughtspot/visual-embed-sdk 1.24.0-alpha.6 → 1.24.0-dev

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 (119) hide show
  1. package/cjs/package.json +2 -2
  2. package/cjs/src/embed/app.d.ts +1 -0
  3. package/cjs/src/embed/app.d.ts.map +1 -1
  4. package/cjs/src/embed/app.js +1 -0
  5. package/cjs/src/embed/app.js.map +1 -1
  6. package/cjs/src/embed/liveboard.d.ts +6 -1
  7. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  8. package/cjs/src/embed/liveboard.js +10 -2
  9. package/cjs/src/embed/liveboard.js.map +1 -1
  10. package/cjs/src/embed/liveboard.spec.js +23 -7
  11. package/cjs/src/embed/liveboard.spec.js.map +1 -1
  12. package/cjs/src/embed/search.d.ts +5 -1
  13. package/cjs/src/embed/search.d.ts.map +1 -1
  14. package/cjs/src/embed/search.js +4 -1
  15. package/cjs/src/embed/search.js.map +1 -1
  16. package/cjs/src/embed/search.spec.js +15 -0
  17. package/cjs/src/embed/search.spec.js.map +1 -1
  18. package/cjs/src/embed/ts-embed.d.ts +19 -0
  19. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  20. package/cjs/src/embed/ts-embed.js +136 -6
  21. package/cjs/src/embed/ts-embed.js.map +1 -1
  22. package/cjs/src/embed/ts-embed.spec.js +38 -1
  23. package/cjs/src/embed/ts-embed.spec.js.map +1 -1
  24. package/cjs/src/react/all-types-export.d.ts +1 -1
  25. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  26. package/cjs/src/react/all-types-export.js +2 -1
  27. package/cjs/src/react/all-types-export.js.map +1 -1
  28. package/cjs/src/react/index.d.ts +1 -0
  29. package/cjs/src/react/index.d.ts.map +1 -1
  30. package/cjs/src/react/index.js +18 -4
  31. package/cjs/src/react/index.js.map +1 -1
  32. package/cjs/src/types.d.ts +87 -7
  33. package/cjs/src/types.d.ts.map +1 -1
  34. package/cjs/src/types.js +60 -5
  35. package/cjs/src/types.js.map +1 -1
  36. package/cjs/src/utils.d.ts +9 -1
  37. package/cjs/src/utils.d.ts.map +1 -1
  38. package/cjs/src/utils.js +36 -1
  39. package/cjs/src/utils.js.map +1 -1
  40. package/cjs/src/utils.spec.js +24 -0
  41. package/cjs/src/utils.spec.js.map +1 -1
  42. package/dist/src/embed/app.d.ts +1 -0
  43. package/dist/src/embed/app.d.ts.map +1 -1
  44. package/dist/src/embed/liveboard.d.ts +6 -1
  45. package/dist/src/embed/liveboard.d.ts.map +1 -1
  46. package/dist/src/embed/search.d.ts +5 -1
  47. package/dist/src/embed/search.d.ts.map +1 -1
  48. package/dist/src/embed/ts-embed.d.ts +19 -0
  49. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  50. package/dist/src/react/all-types-export.d.ts +1 -1
  51. package/dist/src/react/all-types-export.d.ts.map +1 -1
  52. package/dist/src/react/index.d.ts +1 -0
  53. package/dist/src/react/index.d.ts.map +1 -1
  54. package/dist/src/types.d.ts +87 -7
  55. package/dist/src/types.d.ts.map +1 -1
  56. package/dist/src/utils.d.ts +9 -1
  57. package/dist/src/utils.d.ts.map +1 -1
  58. package/dist/tsembed-react.es.js +264 -21
  59. package/dist/tsembed-react.js +264 -20
  60. package/dist/tsembed.es.js +245 -16
  61. package/dist/tsembed.js +245 -16
  62. package/dist/visual-embed-sdk-react-full.d.ts +115 -7
  63. package/dist/visual-embed-sdk-react.d.ts +115 -7
  64. package/dist/visual-embed-sdk.d.ts +114 -7
  65. package/lib/package.json +2 -2
  66. package/lib/src/embed/app.d.ts +1 -0
  67. package/lib/src/embed/app.d.ts.map +1 -1
  68. package/lib/src/embed/app.js +1 -0
  69. package/lib/src/embed/app.js.map +1 -1
  70. package/lib/src/embed/liveboard.d.ts +6 -1
  71. package/lib/src/embed/liveboard.d.ts.map +1 -1
  72. package/lib/src/embed/liveboard.js +11 -3
  73. package/lib/src/embed/liveboard.js.map +1 -1
  74. package/lib/src/embed/liveboard.spec.js +23 -7
  75. package/lib/src/embed/liveboard.spec.js.map +1 -1
  76. package/lib/src/embed/search.d.ts +5 -1
  77. package/lib/src/embed/search.d.ts.map +1 -1
  78. package/lib/src/embed/search.js +5 -2
  79. package/lib/src/embed/search.js.map +1 -1
  80. package/lib/src/embed/search.spec.js +15 -0
  81. package/lib/src/embed/search.spec.js.map +1 -1
  82. package/lib/src/embed/ts-embed.d.ts +19 -0
  83. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  84. package/lib/src/embed/ts-embed.js +137 -7
  85. package/lib/src/embed/ts-embed.js.map +1 -1
  86. package/lib/src/embed/ts-embed.spec.js +38 -1
  87. package/lib/src/embed/ts-embed.spec.js.map +1 -1
  88. package/lib/src/react/all-types-export.d.ts +1 -1
  89. package/lib/src/react/all-types-export.d.ts.map +1 -1
  90. package/lib/src/react/all-types-export.js +1 -1
  91. package/lib/src/react/all-types-export.js.map +1 -1
  92. package/lib/src/react/index.d.ts +1 -0
  93. package/lib/src/react/index.d.ts.map +1 -1
  94. package/lib/src/react/index.js +17 -3
  95. package/lib/src/react/index.js.map +1 -1
  96. package/lib/src/types.d.ts +87 -7
  97. package/lib/src/types.d.ts.map +1 -1
  98. package/lib/src/types.js +60 -5
  99. package/lib/src/types.js.map +1 -1
  100. package/lib/src/utils.d.ts +9 -1
  101. package/lib/src/utils.d.ts.map +1 -1
  102. package/lib/src/utils.js +32 -0
  103. package/lib/src/utils.js.map +1 -1
  104. package/lib/src/utils.spec.js +25 -1
  105. package/lib/src/utils.spec.js.map +1 -1
  106. package/lib/src/visual-embed-sdk.d.ts +116 -9
  107. package/package.json +5 -5
  108. package/src/embed/app.ts +1 -0
  109. package/src/embed/liveboard.spec.ts +29 -10
  110. package/src/embed/liveboard.ts +19 -2
  111. package/src/embed/search.spec.ts +18 -0
  112. package/src/embed/search.ts +16 -1
  113. package/src/embed/ts-embed.spec.ts +40 -1
  114. package/src/embed/ts-embed.ts +174 -14
  115. package/src/react/all-types-export.ts +1 -0
  116. package/src/react/index.tsx +25 -8
  117. package/src/types.ts +97 -16
  118. package/src/utils.spec.ts +31 -0
  119. package/src/utils.ts +43 -0
@@ -186,6 +186,24 @@ const getFilterQuery = (runtimeFilters) => {
186
186
  }
187
187
  return null;
188
188
  };
189
+ /**
190
+ * Construct a runtime parameter override query string from the given option.
191
+ *
192
+ * @param runtimeParameters
193
+ */
194
+ const getRuntimeParameters = (runtimeParameters) => {
195
+ if (runtimeParameters && runtimeParameters.length) {
196
+ const params = runtimeParameters.map((param, valueIndex) => {
197
+ const index = valueIndex + 1;
198
+ const filterExpr = [];
199
+ filterExpr.push(`param${index}=${encodeURIComponent(param.name)}`);
200
+ filterExpr.push(`paramVal${index}=${encodeURIComponent(param.value)}`);
201
+ return filterExpr.join('&');
202
+ });
203
+ return `${params.join('&')}`;
204
+ }
205
+ return null;
206
+ };
189
207
  /**
190
208
  * Convert a value to a string representation to be sent as a query
191
209
  * parameter to the ThoughtSpot app.
@@ -334,7 +352,21 @@ const getRuntimeFilters = (runtimefilters) => getFilterQuery(runtimefilters || [
334
352
  function getDOMNode(domSelector) {
335
353
  return typeof domSelector === 'string' ? document.querySelector(domSelector) : domSelector;
336
354
  }
337
- const deepMerge = (target, source) => merge(target, source);
355
+ const deepMerge = (target, source) => merge(target, source);
356
+ const setStyleProperties = (element, styleProperties) => {
357
+ if (!element || !styleProperties)
358
+ return;
359
+ Object.keys(styleProperties).forEach((styleProperty) => {
360
+ element.style[styleProperty] = styleProperties[styleProperty].toString();
361
+ });
362
+ };
363
+ const removeStyleProperties = (element, styleProperties) => {
364
+ if (!element || !styleProperties)
365
+ return;
366
+ styleProperties.forEach((styleProperty) => {
367
+ element.style.removeProperty(styleProperty);
368
+ });
369
+ };
338
370
 
339
371
  /**
340
372
  * Copyright (c) 2023
@@ -1045,21 +1077,21 @@ var EmbedEvent;
1045
1077
  */
1046
1078
  EmbedEvent["InsertIntoSlide"] = "insertInToSlide";
1047
1079
  /**
1080
+ * @hidden
1048
1081
  * Emitted when a user changes any filter on a Liveboard.
1049
- *
1050
1082
  * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl
1051
1083
  */
1052
1084
  EmbedEvent["FilterChanged"] = "filterChanged";
1053
1085
  /**
1054
1086
  * Emitted when a user click on Go button in Sage Embed
1055
1087
  *
1056
- * @version SDK : 1.27.0 | Thoughtspot: 9.7.0.cl
1088
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
1057
1089
  */
1058
1090
  EmbedEvent["SageEmbedQuery"] = "sageEmbedQuery";
1059
1091
  /**
1060
1092
  * Emitten when a user select data source in Sage Embed
1061
1093
  *
1062
- * @version SDK : 1.27.0 | Thoughtspot: 9.7.0.cl
1094
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
1063
1095
  */
1064
1096
  EmbedEvent["SageWorksheetUpdated"] = "sageWorksheetUpdated";
1065
1097
  /**
@@ -1068,6 +1100,51 @@ var EmbedEvent;
1068
1100
  * @version SDK : 1.27.0 | Thoughtspot: 9.8.0.cl
1069
1101
  */
1070
1102
  EmbedEvent["UpdateConnection"] = "updateConnection";
1103
+ /**
1104
+ * Emitted when name, status (private or public) or filter values of a
1105
+ * PersonalisedView is updated.
1106
+ *
1107
+ * @returns viewName: string
1108
+ * @returns viewId: string
1109
+ * @returns liveboardId: string
1110
+ * @returns isPublic: boolean
1111
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
1112
+ */
1113
+ EmbedEvent["UpdatePersonalisedView"] = "updatePersonalisedView";
1114
+ /**
1115
+ * Emitted when a PersonalisedView is saved.
1116
+ *
1117
+ * @returns viewName: string
1118
+ * @returns viewId: string
1119
+ * @returns liveboardId: string
1120
+ * @returns isPublic: boolean
1121
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
1122
+ */
1123
+ EmbedEvent["SavePersonalisedView"] = "savePersonalisedView";
1124
+ /**
1125
+ * Emitted when a Liveboard is reset.
1126
+ *
1127
+ * @returns viewName: string
1128
+ * @returns viewId: string
1129
+ * @returns liveboardId: string
1130
+ * @returns isPublic: boolean
1131
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
1132
+ */
1133
+ EmbedEvent["ResetLiveboard"] = "resetLiveboard";
1134
+ /**
1135
+ * Emitted when a PersonalisedView is deleted.
1136
+ *
1137
+ * @returns views: string[]
1138
+ * @returns liveboardId: string
1139
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
1140
+ */
1141
+ EmbedEvent["DeletePersonalisedView"] = "deletePersonalisedView";
1142
+ /**
1143
+ * Emitten when a user creates a new worksheet
1144
+ *
1145
+ * @version SDK : 1.27.0 | Thoughtspot: 9.8.0.cl
1146
+ */
1147
+ EmbedEvent["CreateWorksheet"] = "createWorksheet";
1071
1148
  })(EmbedEvent || (EmbedEvent = {}));
1072
1149
  /**
1073
1150
  * Event types that can be triggered by the host application
@@ -1712,16 +1789,16 @@ var HostEvent;
1712
1789
  */
1713
1790
  HostEvent["ResetSearch"] = "resetSearch";
1714
1791
  /**
1792
+ * @hidden
1715
1793
  * Gets the currents visible and runtime filters applied on a Liveboard
1716
- *
1717
1794
  * @example
1718
1795
  * liveboardEmbed.trigger(HostEvent.GetFilters)
1719
1796
  * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl
1720
1797
  */
1721
1798
  HostEvent["GetFilters"] = "getFilters";
1722
1799
  /**
1800
+ * @hidden
1723
1801
  * Updates the visible filters on the Liveboard.
1724
- *
1725
1802
  * @param - filter: filter object containing column name and filter operation and values
1726
1803
  * @example
1727
1804
  *
@@ -2709,6 +2786,16 @@ var Action;
2709
2786
  * ```
2710
2787
  */
2711
2788
  Action["ManageMonitor"] = "ManageMonitor";
2789
+ /**
2790
+ * Action ID for Liveboard Personalised Views dropdown
2791
+ *
2792
+ * @example
2793
+ * ```js
2794
+ * disabledActions: [Action.PersonalisedViewsDropdown]
2795
+ * ```
2796
+ * @version SDK : 1.26.0 | Thoughtspot: 9.7.0.cl
2797
+ */
2798
+ Action["PersonalisedViewsDropdown"] = "personalisedViewsDropdown";
2712
2799
  })(Action || (Action = {}));
2713
2800
  // eslint-disable-next-line no-shadow
2714
2801
  var OperationType;
@@ -10323,7 +10410,7 @@ function processTrigger(iFrame, messageType, thoughtSpotHost, data) {
10323
10410
  });
10324
10411
  }
10325
10412
 
10326
- var name="@thoughtspot/visual-embed-sdk";var version="1.24.0-alpha.6";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 is-publish-allowed && npm run test && 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};
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};
10327
10414
 
10328
10415
  /**
10329
10416
  * Copyright (c) 2022
@@ -10382,11 +10469,14 @@ class TsEmbed {
10382
10469
  data: {
10383
10470
  customisations: getCustomisations(this.embedConfig, this.viewConfig),
10384
10471
  authToken,
10385
- runtimeFilterParams: getRuntimeFilters(this.viewConfig.runtimeFilters),
10472
+ runtimeFilterParams: this.viewConfig.excludeRuntimeFiltersfromURL
10473
+ ? getRuntimeFilters(this.viewConfig.runtimeFilters)
10474
+ : null,
10386
10475
  hiddenHomepageModules: this.viewConfig.hiddenHomepageModules || [],
10387
10476
  hostConfig: this.embedConfig.hostConfig,
10388
10477
  hiddenHomeLeftNavItems: ((_a = this.viewConfig) === null || _a === void 0 ? void 0 : _a.hiddenHomeLeftNavItems)
10389
- ? (_b = this.viewConfig) === null || _b === void 0 ? void 0 : _b.hiddenHomeLeftNavItems : [],
10478
+ ? (_b = this.viewConfig) === null || _b === void 0 ? void 0 : _b.hiddenHomeLeftNavItems
10479
+ : [],
10390
10480
  },
10391
10481
  });
10392
10482
  };
@@ -10715,7 +10805,12 @@ class TsEmbed {
10715
10805
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_START);
10716
10806
  return (_a = getAuthPromise()) === null || _a === void 0 ? void 0 : _a.then((isLoggedIn) => {
10717
10807
  if (!isLoggedIn) {
10718
- this.insertIntoDOM(this.embedConfig.loginFailedMessage);
10808
+ if (this.isPreRendered) {
10809
+ this.insertIntoDOMForPreRender(this.embedConfig.loginFailedMessage);
10810
+ }
10811
+ else {
10812
+ this.insertIntoDOM(this.embedConfig.loginFailedMessage);
10813
+ }
10719
10814
  return;
10720
10815
  }
10721
10816
  this.iFrame = this.iFrame || this.createIframeEl(url);
@@ -10737,7 +10832,12 @@ class TsEmbed {
10737
10832
  this.iFrame.addEventListener('error', () => {
10738
10833
  nextInQueue();
10739
10834
  });
10740
- this.insertIntoDOM(this.iFrame);
10835
+ if (this.isPreRendered) {
10836
+ this.insertIntoDOMForPreRender(this.iFrame);
10837
+ }
10838
+ else {
10839
+ this.insertIntoDOM(this.iFrame);
10840
+ }
10741
10841
  const prefetchIframe = document.querySelectorAll('.prefetchIframe');
10742
10842
  if (prefetchIframe.length) {
10743
10843
  prefetchIframe.forEach((el) => {
@@ -10750,11 +10850,119 @@ class TsEmbed {
10750
10850
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_FAILED, {
10751
10851
  error: JSON.stringify(error),
10752
10852
  });
10753
- this.insertIntoDOM(this.embedConfig.loginFailedMessage);
10853
+ if (this.isPreRendered) {
10854
+ this.insertIntoDOMForPreRender(this.embedConfig.loginFailedMessage);
10855
+ }
10856
+ else {
10857
+ this.insertIntoDOM(this.embedConfig.loginFailedMessage);
10858
+ }
10754
10859
  this.handleError(error);
10755
10860
  });
10756
10861
  });
10757
10862
  }
10863
+ getPreRenderIds() {
10864
+ return {
10865
+ wrapper: `tsEmbed-pre-render-wrapper-${this.viewConfig.preRenderId}`,
10866
+ shield: `tsEmbed-pre-render-shield-${this.viewConfig.preRenderId}`,
10867
+ child: `tsEmbed-pre-render-child-${this.viewConfig.preRenderId}`,
10868
+ };
10869
+ }
10870
+ createPreRenderWrapper(child) {
10871
+ if (!this.viewConfig.preRenderId) {
10872
+ throw new Error('Pre render id is required');
10873
+ }
10874
+ 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
+ }
10880
+ const preRenderWrapper = document.createElement('div');
10881
+ preRenderWrapper.id = preRenderIds.wrapper;
10882
+ 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%' });
10886
+ child.id = preRenderIds.child;
10887
+ preRenderWrapper.appendChild(child);
10888
+ preRenderWrapper.appendChild(preRenderShield);
10889
+ this.preRenderWrapper = preRenderWrapper;
10890
+ this.preRenderShield = preRenderShield;
10891
+ this.preRenderChild = child;
10892
+ return preRenderWrapper;
10893
+ }
10894
+ isPreRenderAvailable() {
10895
+ const preRenderIds = this.getPreRenderIds();
10896
+ this.preRenderWrapper = this.preRenderWrapper
10897
+ || document.getElementById(preRenderIds.wrapper);
10898
+ this.preRenderShield = this.preRenderShield
10899
+ || document.getElementById(preRenderIds.shield);
10900
+ this.preRenderChild = this.preRenderChild
10901
+ || document.getElementById(preRenderIds.child);
10902
+ return !!this.preRenderWrapper && !!this.preRenderShield
10903
+ && !!this.preRenderChild;
10904
+ }
10905
+ insertIntoDOMForPreRender(child) {
10906
+ let childNode;
10907
+ if (typeof child === 'string') {
10908
+ const divChildNode = document.createElement('div');
10909
+ divChildNode.innerHTML = child;
10910
+ childNode = divChildNode;
10911
+ }
10912
+ else {
10913
+ childNode = child;
10914
+ }
10915
+ const preRenderWrapper = this.createPreRenderWrapper(childNode);
10916
+ document.body.appendChild(preRenderWrapper);
10917
+ this.hidePreRender();
10918
+ }
10919
+ hidePreRender() {
10920
+ if (!this.isPreRenderAvailable()) {
10921
+ // if the embed component is not preRendered , nothing to hide
10922
+ console.log('No preRender found, not hiding ');
10923
+ return;
10924
+ }
10925
+ setStyleProperties(this.preRenderWrapper, {
10926
+ opacity: '0',
10927
+ pointerEvents: 'none',
10928
+ zIndex: '-1000',
10929
+ position: 'absolute ',
10930
+ top: '0',
10931
+ left: '0',
10932
+ });
10933
+ 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
+ });
10944
+ }
10945
+ showPreRender() {
10946
+ 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;
10952
+ }
10953
+ this.syncPreRenderStyle();
10954
+ removeStyleProperties(this.preRenderWrapper, ['z-index', 'opacity', 'pointer-events']);
10955
+ setStyleProperties(this.preRenderShield, { zIndex: '-1' });
10956
+ }
10957
+ syncPreRenderStyle() {
10958
+ if (!this.el) {
10959
+ throw new Error('Embed element is not defined');
10960
+ }
10961
+ const elBoundingClient = this.el.getBoundingClientRect();
10962
+ setStyleProperties(this.preRenderWrapper, {
10963
+ top: `${elBoundingClient.y}px`, left: `${elBoundingClient.x}px`, width: `${elBoundingClient.width}px`, height: `${elBoundingClient.height}px`,
10964
+ });
10965
+ }
10758
10966
  insertIntoDOM(child) {
10759
10967
  var _a;
10760
10968
  if (this.viewConfig.insertAsSibling) {
@@ -10969,6 +11177,13 @@ class TsEmbed {
10969
11177
  this.isRendered = true;
10970
11178
  return this;
10971
11179
  }
11180
+ /**
11181
+ * Creates the preRender shell
11182
+ */
11183
+ preRender() {
11184
+ this.isPreRendered = true;
11185
+ return this;
11186
+ }
10972
11187
  /**
10973
11188
  * Get the Post Url Params for THOUGHTSPOT from the current
10974
11189
  * host app URL.
@@ -11050,8 +11265,10 @@ class V1Embed extends TsEmbed {
11050
11265
  let queryString = queryParams;
11051
11266
  if (!this.viewConfig.excludeRuntimeFiltersfromURL) {
11052
11267
  const runtimeFilters = this.viewConfig.runtimeFilters;
11268
+ const runtimeParameters = this.viewConfig.runtimeParameters;
11269
+ const parameterQuery = getRuntimeParameters(runtimeParameters || []);
11053
11270
  const filterQuery = getFilterQuery(runtimeFilters || []);
11054
- queryString = [filterQuery, queryParams].filter(Boolean).join('&');
11271
+ queryString = [parameterQuery, filterQuery, queryParams].filter(Boolean).join('&');
11055
11272
  }
11056
11273
  return this.getV1EmbedBasePath(queryString);
11057
11274
  }
@@ -11267,7 +11484,7 @@ class SearchEmbed extends TsEmbed {
11267
11484
  }
11268
11485
  getEmbedParams() {
11269
11486
  var _a;
11270
- const { hideResults, enableSearchAssist, forceTable, searchOptions, runtimeFilters, dataSource, dataSources, excludeRuntimeFiltersfromURL, dataPanelV2 = false, useLastSelectedSources = false, } = this.viewConfig;
11487
+ const { hideResults, enableSearchAssist, forceTable, searchOptions, runtimeFilters, dataSource, dataSources, excludeRuntimeFiltersfromURL, dataPanelV2 = false, useLastSelectedSources = false, runtimeParameters, } = this.viewConfig;
11271
11488
  const queryParams = this.getBaseQueryParams();
11272
11489
  queryParams[Param.HideActions] = [
11273
11490
  ...((_a = queryParams[Param.HideActions]) !== null && _a !== void 0 ? _a : []),
@@ -11306,6 +11523,9 @@ class SearchEmbed extends TsEmbed {
11306
11523
  if (queryParamsString) {
11307
11524
  query = `?${queryParamsString}`;
11308
11525
  }
11526
+ const parameterQuery = getRuntimeParameters(runtimeParameters || []);
11527
+ if (parameterQuery)
11528
+ query += `&${parameterQuery}`;
11309
11529
  const filterQuery = getFilterQuery(runtimeFilters || []);
11310
11530
  if (filterQuery && !excludeRuntimeFiltersfromURL) {
11311
11531
  query += `&${filterQuery}`;
@@ -11473,6 +11693,7 @@ class AppEmbed extends V1Embed {
11473
11693
  * Gets the ThoughtSpot route of the page for a particular page ID.
11474
11694
  *
11475
11695
  * @param pageId The identifier for a page in the ThoughtSpot app.
11696
+ * @param modularHomeExperience
11476
11697
  */
11477
11698
  getPageRoute(pageId, modularHomeExperience = false) {
11478
11699
  switch (pageId) {
@@ -11616,7 +11837,7 @@ class LiveboardEmbed extends V1Embed {
11616
11837
  let params = {};
11617
11838
  params[Param.EmbedApp] = true;
11618
11839
  params = this.getBaseQueryParams(params);
11619
- const { enableVizTransformations, fullHeight, defaultHeight, visibleVizs, liveboardV2, vizId, hideTabPanel, activeTabId, } = this.viewConfig;
11840
+ const { enableVizTransformations, fullHeight, defaultHeight, visibleVizs, liveboardV2, vizId, hideTabPanel, activeTabId, runtimeParameters, } = this.viewConfig;
11620
11841
  const preventLiveboardFilterRemoval = this.viewConfig.preventLiveboardFilterRemoval
11621
11842
  || this.viewConfig.preventPinboardFilterRemoval;
11622
11843
  if (fullHeight === true) {
@@ -11644,7 +11865,10 @@ class LiveboardEmbed extends V1Embed {
11644
11865
  if (hideTabPanel) {
11645
11866
  params[Param.HideTabPanel] = hideTabPanel;
11646
11867
  }
11647
- const queryParams = getQueryParamString(params, true);
11868
+ let queryParams = getQueryParamString(params, true);
11869
+ const parameterQuery = getRuntimeParameters(runtimeParameters || []);
11870
+ if (parameterQuery)
11871
+ queryParams += `&${parameterQuery}`;
11648
11872
  return queryParams;
11649
11873
  }
11650
11874
  getIframeSuffixSrc(liveboardId, vizId, activeTabId) {
@@ -11708,6 +11932,11 @@ class LiveboardEmbed extends V1Embed {
11708
11932
  this.renderV1Embed(src);
11709
11933
  return this;
11710
11934
  }
11935
+ preRender() {
11936
+ super.preRender();
11937
+ this.render();
11938
+ return this;
11939
+ }
11711
11940
  navigateToLiveboard(liveboardId, vizId, activeTabId) {
11712
11941
  const path = this.getIframeSuffixSrc(liveboardId, vizId, activeTabId);
11713
11942
  this.viewConfig.liveboardId = liveboardId;
@@ -11742,7 +11971,7 @@ function getViewPropsAndListeners(props) {
11742
11971
  });
11743
11972
  }
11744
11973
 
11745
- const componentFactory = (EmbedConstructor) => React.forwardRef((props, forwardedRef) => {
11974
+ const componentFactory = (EmbedConstructor, isPreRenderedComponent = false) => React.forwardRef((props, forwardedRef) => {
11746
11975
  const ref = React.useRef(null);
11747
11976
  const { className, ...embedProps } = props;
11748
11977
  const { viewConfig, listeners } = getViewPropsAndListeners(embedProps);
@@ -11758,13 +11987,26 @@ const componentFactory = (EmbedConstructor) => React.forwardRef((props, forwarde
11758
11987
  Object.keys(listeners).forEach((eventName) => {
11759
11988
  tsEmbed.on(eventName, listeners[eventName]);
11760
11989
  });
11761
- tsEmbed.render();
11990
+ if (isPreRenderedComponent) {
11991
+ tsEmbed.preRender();
11992
+ }
11993
+ else if (props.preRenderId) {
11994
+ tsEmbed.showPreRender();
11995
+ }
11996
+ else {
11997
+ tsEmbed.render();
11998
+ }
11762
11999
  if (forwardedRef) {
11763
12000
  // eslint-disable-next-line no-param-reassign
11764
12001
  forwardedRef.current = tsEmbed;
11765
12002
  }
11766
12003
  return () => {
11767
- tsEmbed.destroy();
12004
+ if (!isPreRenderedComponent) {
12005
+ if (props.preRenderId)
12006
+ tsEmbed.hidePreRender();
12007
+ else
12008
+ tsEmbed.destroy();
12009
+ }
11768
12010
  };
11769
12011
  }, [viewConfig, listeners]);
11770
12012
  return ((viewConfig.insertAsSibling)
@@ -11864,6 +12106,7 @@ const SageEmbed$1 = componentFactory(SageEmbed);
11864
12106
  */
11865
12107
  function useEmbedRef() {
11866
12108
  return React.useRef(null);
11867
- }
12109
+ }
12110
+ const PreRenderedLiveboardEmbed = componentFactory(LiveboardEmbed, true);
11868
12111
 
11869
- export { Action, AppEmbed$1 as AppEmbed, EmbedEvent, HomeLeftNavItem, HomepageModule, HostEvent, LiveboardEmbed$1 as LiveboardEmbed, Page, PinboardEmbed, RuntimeFilterOp, SageEmbed$1 as SageEmbed, SearchBarEmbed$1 as SearchBarEmbed, SearchEmbed$1 as SearchEmbed, useEmbedRef };
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 };