@thoughtspot/visual-embed-sdk 1.24.0-alpha.7 → 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 (75) hide show
  1. package/cjs/package.json +2 -2
  2. package/cjs/src/embed/liveboard.d.ts +1 -0
  3. package/cjs/src/embed/liveboard.d.ts.map +1 -1
  4. package/cjs/src/embed/liveboard.js +5 -0
  5. package/cjs/src/embed/liveboard.js.map +1 -1
  6. package/cjs/src/embed/ts-embed.d.ts +19 -0
  7. package/cjs/src/embed/ts-embed.d.ts.map +1 -1
  8. package/cjs/src/embed/ts-embed.js +131 -4
  9. package/cjs/src/embed/ts-embed.js.map +1 -1
  10. package/cjs/src/react/all-types-export.d.ts +1 -1
  11. package/cjs/src/react/all-types-export.d.ts.map +1 -1
  12. package/cjs/src/react/all-types-export.js +2 -1
  13. package/cjs/src/react/all-types-export.js.map +1 -1
  14. package/cjs/src/react/index.d.ts +1 -0
  15. package/cjs/src/react/index.d.ts.map +1 -1
  16. package/cjs/src/react/index.js +18 -4
  17. package/cjs/src/react/index.js.map +1 -1
  18. package/cjs/src/types.d.ts +9 -0
  19. package/cjs/src/types.d.ts.map +1 -1
  20. package/cjs/src/types.js.map +1 -1
  21. package/cjs/src/utils.d.ts +2 -0
  22. package/cjs/src/utils.d.ts.map +1 -1
  23. package/cjs/src/utils.js +17 -1
  24. package/cjs/src/utils.js.map +1 -1
  25. package/dist/src/embed/liveboard.d.ts +1 -0
  26. package/dist/src/embed/liveboard.d.ts.map +1 -1
  27. package/dist/src/embed/ts-embed.d.ts +19 -0
  28. package/dist/src/embed/ts-embed.d.ts.map +1 -1
  29. package/dist/src/react/all-types-export.d.ts +1 -1
  30. package/dist/src/react/all-types-export.d.ts.map +1 -1
  31. package/dist/src/react/index.d.ts +1 -0
  32. package/dist/src/react/index.d.ts.map +1 -1
  33. package/dist/src/types.d.ts +9 -0
  34. package/dist/src/types.d.ts.map +1 -1
  35. package/dist/src/utils.d.ts +2 -0
  36. package/dist/src/utils.d.ts.map +1 -1
  37. package/dist/tsembed-react.es.js +171 -11
  38. package/dist/tsembed-react.js +171 -10
  39. package/dist/tsembed.es.js +152 -6
  40. package/dist/tsembed.js +152 -6
  41. package/dist/visual-embed-sdk-react-full.d.ts +29 -0
  42. package/dist/visual-embed-sdk-react.d.ts +29 -0
  43. package/dist/visual-embed-sdk.d.ts +28 -0
  44. package/lib/package.json +2 -2
  45. package/lib/src/embed/liveboard.d.ts +1 -0
  46. package/lib/src/embed/liveboard.d.ts.map +1 -1
  47. package/lib/src/embed/liveboard.js +5 -0
  48. package/lib/src/embed/liveboard.js.map +1 -1
  49. package/lib/src/embed/ts-embed.d.ts +19 -0
  50. package/lib/src/embed/ts-embed.d.ts.map +1 -1
  51. package/lib/src/embed/ts-embed.js +132 -5
  52. package/lib/src/embed/ts-embed.js.map +1 -1
  53. package/lib/src/react/all-types-export.d.ts +1 -1
  54. package/lib/src/react/all-types-export.d.ts.map +1 -1
  55. package/lib/src/react/all-types-export.js +1 -1
  56. package/lib/src/react/all-types-export.js.map +1 -1
  57. package/lib/src/react/index.d.ts +1 -0
  58. package/lib/src/react/index.d.ts.map +1 -1
  59. package/lib/src/react/index.js +17 -3
  60. package/lib/src/react/index.js.map +1 -1
  61. package/lib/src/types.d.ts +9 -0
  62. package/lib/src/types.d.ts.map +1 -1
  63. package/lib/src/types.js.map +1 -1
  64. package/lib/src/utils.d.ts +2 -0
  65. package/lib/src/utils.d.ts.map +1 -1
  66. package/lib/src/utils.js +14 -0
  67. package/lib/src/utils.js.map +1 -1
  68. package/lib/src/visual-embed-sdk.d.ts +28 -0
  69. package/package.json +5 -5
  70. package/src/embed/liveboard.ts +8 -0
  71. package/src/embed/ts-embed.ts +169 -12
  72. package/src/react/all-types-export.ts +1 -0
  73. package/src/react/index.tsx +25 -8
  74. package/src/types.ts +10 -0
  75. package/src/utils.ts +20 -0
@@ -352,7 +352,21 @@ const getRuntimeFilters = (runtimefilters) => getFilterQuery(runtimefilters || [
352
352
  function getDOMNode(domSelector) {
353
353
  return typeof domSelector === 'string' ? document.querySelector(domSelector) : domSelector;
354
354
  }
355
- 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
+ };
356
370
 
357
371
  /**
358
372
  * Copyright (c) 2023
@@ -10396,7 +10410,7 @@ function processTrigger(iFrame, messageType, thoughtSpotHost, data) {
10396
10410
  });
10397
10411
  }
10398
10412
 
10399
- var name="@thoughtspot/visual-embed-sdk";var version="1.24.0-alpha.7";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};
10400
10414
 
10401
10415
  /**
10402
10416
  * Copyright (c) 2022
@@ -10791,7 +10805,12 @@ class TsEmbed {
10791
10805
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_START);
10792
10806
  return (_a = getAuthPromise()) === null || _a === void 0 ? void 0 : _a.then((isLoggedIn) => {
10793
10807
  if (!isLoggedIn) {
10794
- 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
+ }
10795
10814
  return;
10796
10815
  }
10797
10816
  this.iFrame = this.iFrame || this.createIframeEl(url);
@@ -10813,7 +10832,12 @@ class TsEmbed {
10813
10832
  this.iFrame.addEventListener('error', () => {
10814
10833
  nextInQueue();
10815
10834
  });
10816
- this.insertIntoDOM(this.iFrame);
10835
+ if (this.isPreRendered) {
10836
+ this.insertIntoDOMForPreRender(this.iFrame);
10837
+ }
10838
+ else {
10839
+ this.insertIntoDOM(this.iFrame);
10840
+ }
10817
10841
  const prefetchIframe = document.querySelectorAll('.prefetchIframe');
10818
10842
  if (prefetchIframe.length) {
10819
10843
  prefetchIframe.forEach((el) => {
@@ -10826,11 +10850,119 @@ class TsEmbed {
10826
10850
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_FAILED, {
10827
10851
  error: JSON.stringify(error),
10828
10852
  });
10829
- 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
+ }
10830
10859
  this.handleError(error);
10831
10860
  });
10832
10861
  });
10833
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
+ }
10834
10966
  insertIntoDOM(child) {
10835
10967
  var _a;
10836
10968
  if (this.viewConfig.insertAsSibling) {
@@ -11045,6 +11177,13 @@ class TsEmbed {
11045
11177
  this.isRendered = true;
11046
11178
  return this;
11047
11179
  }
11180
+ /**
11181
+ * Creates the preRender shell
11182
+ */
11183
+ preRender() {
11184
+ this.isPreRendered = true;
11185
+ return this;
11186
+ }
11048
11187
  /**
11049
11188
  * Get the Post Url Params for THOUGHTSPOT from the current
11050
11189
  * host app URL.
@@ -11126,8 +11265,10 @@ class V1Embed extends TsEmbed {
11126
11265
  let queryString = queryParams;
11127
11266
  if (!this.viewConfig.excludeRuntimeFiltersfromURL) {
11128
11267
  const runtimeFilters = this.viewConfig.runtimeFilters;
11268
+ const runtimeParameters = this.viewConfig.runtimeParameters;
11269
+ const parameterQuery = getRuntimeParameters(runtimeParameters || []);
11129
11270
  const filterQuery = getFilterQuery(runtimeFilters || []);
11130
- queryString = [filterQuery, queryParams].filter(Boolean).join('&');
11271
+ queryString = [parameterQuery, filterQuery, queryParams].filter(Boolean).join('&');
11131
11272
  }
11132
11273
  return this.getV1EmbedBasePath(queryString);
11133
11274
  }
@@ -11791,6 +11932,11 @@ class LiveboardEmbed extends V1Embed {
11791
11932
  this.renderV1Embed(src);
11792
11933
  return this;
11793
11934
  }
11935
+ preRender() {
11936
+ super.preRender();
11937
+ this.render();
11938
+ return this;
11939
+ }
11794
11940
  navigateToLiveboard(liveboardId, vizId, activeTabId) {
11795
11941
  const path = this.getIframeSuffixSrc(liveboardId, vizId, activeTabId);
11796
11942
  this.viewConfig.liveboardId = liveboardId;
@@ -11825,7 +11971,7 @@ function getViewPropsAndListeners(props) {
11825
11971
  });
11826
11972
  }
11827
11973
 
11828
- const componentFactory = (EmbedConstructor) => React.forwardRef((props, forwardedRef) => {
11974
+ const componentFactory = (EmbedConstructor, isPreRenderedComponent = false) => React.forwardRef((props, forwardedRef) => {
11829
11975
  const ref = React.useRef(null);
11830
11976
  const { className, ...embedProps } = props;
11831
11977
  const { viewConfig, listeners } = getViewPropsAndListeners(embedProps);
@@ -11841,13 +11987,26 @@ const componentFactory = (EmbedConstructor) => React.forwardRef((props, forwarde
11841
11987
  Object.keys(listeners).forEach((eventName) => {
11842
11988
  tsEmbed.on(eventName, listeners[eventName]);
11843
11989
  });
11844
- tsEmbed.render();
11990
+ if (isPreRenderedComponent) {
11991
+ tsEmbed.preRender();
11992
+ }
11993
+ else if (props.preRenderId) {
11994
+ tsEmbed.showPreRender();
11995
+ }
11996
+ else {
11997
+ tsEmbed.render();
11998
+ }
11845
11999
  if (forwardedRef) {
11846
12000
  // eslint-disable-next-line no-param-reassign
11847
12001
  forwardedRef.current = tsEmbed;
11848
12002
  }
11849
12003
  return () => {
11850
- tsEmbed.destroy();
12004
+ if (!isPreRenderedComponent) {
12005
+ if (props.preRenderId)
12006
+ tsEmbed.hidePreRender();
12007
+ else
12008
+ tsEmbed.destroy();
12009
+ }
11851
12010
  };
11852
12011
  }, [viewConfig, listeners]);
11853
12012
  return ((viewConfig.insertAsSibling)
@@ -11947,6 +12106,7 @@ const SageEmbed$1 = componentFactory(SageEmbed);
11947
12106
  */
11948
12107
  function useEmbedRef() {
11949
12108
  return React.useRef(null);
11950
- }
12109
+ }
12110
+ const PreRenderedLiveboardEmbed = componentFactory(LiveboardEmbed, true);
11951
12111
 
11952
- 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 };
@@ -360,7 +360,21 @@
360
360
  function getDOMNode(domSelector) {
361
361
  return typeof domSelector === 'string' ? document.querySelector(domSelector) : domSelector;
362
362
  }
363
- const deepMerge = (target, source) => merge(target, source);
363
+ const deepMerge = (target, source) => merge(target, source);
364
+ const setStyleProperties = (element, styleProperties) => {
365
+ if (!element || !styleProperties)
366
+ return;
367
+ Object.keys(styleProperties).forEach((styleProperty) => {
368
+ element.style[styleProperty] = styleProperties[styleProperty].toString();
369
+ });
370
+ };
371
+ const removeStyleProperties = (element, styleProperties) => {
372
+ if (!element || !styleProperties)
373
+ return;
374
+ styleProperties.forEach((styleProperty) => {
375
+ element.style.removeProperty(styleProperty);
376
+ });
377
+ };
364
378
 
365
379
  /**
366
380
  * Copyright (c) 2023
@@ -10318,7 +10332,7 @@
10318
10332
  });
10319
10333
  }
10320
10334
 
10321
- var name="@thoughtspot/visual-embed-sdk";var version="1.24.0-alpha.7";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 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$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};
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};
10322
10336
 
10323
10337
  /**
10324
10338
  * Copyright (c) 2022
@@ -10713,7 +10727,12 @@
10713
10727
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_START);
10714
10728
  return (_a = getAuthPromise()) === null || _a === void 0 ? void 0 : _a.then((isLoggedIn) => {
10715
10729
  if (!isLoggedIn) {
10716
- this.insertIntoDOM(this.embedConfig.loginFailedMessage);
10730
+ if (this.isPreRendered) {
10731
+ this.insertIntoDOMForPreRender(this.embedConfig.loginFailedMessage);
10732
+ }
10733
+ else {
10734
+ this.insertIntoDOM(this.embedConfig.loginFailedMessage);
10735
+ }
10717
10736
  return;
10718
10737
  }
10719
10738
  this.iFrame = this.iFrame || this.createIframeEl(url);
@@ -10735,7 +10754,12 @@
10735
10754
  this.iFrame.addEventListener('error', () => {
10736
10755
  nextInQueue();
10737
10756
  });
10738
- this.insertIntoDOM(this.iFrame);
10757
+ if (this.isPreRendered) {
10758
+ this.insertIntoDOMForPreRender(this.iFrame);
10759
+ }
10760
+ else {
10761
+ this.insertIntoDOM(this.iFrame);
10762
+ }
10739
10763
  const prefetchIframe = document.querySelectorAll('.prefetchIframe');
10740
10764
  if (prefetchIframe.length) {
10741
10765
  prefetchIframe.forEach((el) => {
@@ -10748,11 +10772,119 @@
10748
10772
  uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_FAILED, {
10749
10773
  error: JSON.stringify(error),
10750
10774
  });
10751
- this.insertIntoDOM(this.embedConfig.loginFailedMessage);
10775
+ if (this.isPreRendered) {
10776
+ this.insertIntoDOMForPreRender(this.embedConfig.loginFailedMessage);
10777
+ }
10778
+ else {
10779
+ this.insertIntoDOM(this.embedConfig.loginFailedMessage);
10780
+ }
10752
10781
  this.handleError(error);
10753
10782
  });
10754
10783
  });
10755
10784
  }
10785
+ getPreRenderIds() {
10786
+ return {
10787
+ wrapper: `tsEmbed-pre-render-wrapper-${this.viewConfig.preRenderId}`,
10788
+ shield: `tsEmbed-pre-render-shield-${this.viewConfig.preRenderId}`,
10789
+ child: `tsEmbed-pre-render-child-${this.viewConfig.preRenderId}`,
10790
+ };
10791
+ }
10792
+ createPreRenderWrapper(child) {
10793
+ if (!this.viewConfig.preRenderId) {
10794
+ throw new Error('Pre render id is required');
10795
+ }
10796
+ 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
+ }
10802
+ const preRenderWrapper = document.createElement('div');
10803
+ preRenderWrapper.id = preRenderIds.wrapper;
10804
+ 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%' });
10808
+ child.id = preRenderIds.child;
10809
+ preRenderWrapper.appendChild(child);
10810
+ preRenderWrapper.appendChild(preRenderShield);
10811
+ this.preRenderWrapper = preRenderWrapper;
10812
+ this.preRenderShield = preRenderShield;
10813
+ this.preRenderChild = child;
10814
+ return preRenderWrapper;
10815
+ }
10816
+ isPreRenderAvailable() {
10817
+ const preRenderIds = this.getPreRenderIds();
10818
+ this.preRenderWrapper = this.preRenderWrapper
10819
+ || document.getElementById(preRenderIds.wrapper);
10820
+ this.preRenderShield = this.preRenderShield
10821
+ || document.getElementById(preRenderIds.shield);
10822
+ this.preRenderChild = this.preRenderChild
10823
+ || document.getElementById(preRenderIds.child);
10824
+ return !!this.preRenderWrapper && !!this.preRenderShield
10825
+ && !!this.preRenderChild;
10826
+ }
10827
+ insertIntoDOMForPreRender(child) {
10828
+ let childNode;
10829
+ if (typeof child === 'string') {
10830
+ const divChildNode = document.createElement('div');
10831
+ divChildNode.innerHTML = child;
10832
+ childNode = divChildNode;
10833
+ }
10834
+ else {
10835
+ childNode = child;
10836
+ }
10837
+ const preRenderWrapper = this.createPreRenderWrapper(childNode);
10838
+ document.body.appendChild(preRenderWrapper);
10839
+ this.hidePreRender();
10840
+ }
10841
+ hidePreRender() {
10842
+ if (!this.isPreRenderAvailable()) {
10843
+ // if the embed component is not preRendered , nothing to hide
10844
+ console.log('No preRender found, not hiding ');
10845
+ return;
10846
+ }
10847
+ setStyleProperties(this.preRenderWrapper, {
10848
+ opacity: '0',
10849
+ pointerEvents: 'none',
10850
+ zIndex: '-1000',
10851
+ position: 'absolute ',
10852
+ top: '0',
10853
+ left: '0',
10854
+ });
10855
+ 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
+ });
10866
+ }
10867
+ showPreRender() {
10868
+ 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;
10874
+ }
10875
+ this.syncPreRenderStyle();
10876
+ removeStyleProperties(this.preRenderWrapper, ['z-index', 'opacity', 'pointer-events']);
10877
+ setStyleProperties(this.preRenderShield, { zIndex: '-1' });
10878
+ }
10879
+ syncPreRenderStyle() {
10880
+ if (!this.el) {
10881
+ throw new Error('Embed element is not defined');
10882
+ }
10883
+ const elBoundingClient = this.el.getBoundingClientRect();
10884
+ setStyleProperties(this.preRenderWrapper, {
10885
+ top: `${elBoundingClient.y}px`, left: `${elBoundingClient.x}px`, width: `${elBoundingClient.width}px`, height: `${elBoundingClient.height}px`,
10886
+ });
10887
+ }
10756
10888
  insertIntoDOM(child) {
10757
10889
  var _a;
10758
10890
  if (this.viewConfig.insertAsSibling) {
@@ -10967,6 +11099,13 @@
10967
11099
  this.isRendered = true;
10968
11100
  return this;
10969
11101
  }
11102
+ /**
11103
+ * Creates the preRender shell
11104
+ */
11105
+ preRender() {
11106
+ this.isPreRendered = true;
11107
+ return this;
11108
+ }
10970
11109
  /**
10971
11110
  * Get the Post Url Params for THOUGHTSPOT from the current
10972
11111
  * host app URL.
@@ -11048,8 +11187,10 @@
11048
11187
  let queryString = queryParams;
11049
11188
  if (!this.viewConfig.excludeRuntimeFiltersfromURL) {
11050
11189
  const runtimeFilters = this.viewConfig.runtimeFilters;
11190
+ const runtimeParameters = this.viewConfig.runtimeParameters;
11191
+ const parameterQuery = getRuntimeParameters(runtimeParameters || []);
11051
11192
  const filterQuery = getFilterQuery(runtimeFilters || []);
11052
- queryString = [filterQuery, queryParams].filter(Boolean).join('&');
11193
+ queryString = [parameterQuery, filterQuery, queryParams].filter(Boolean).join('&');
11053
11194
  }
11054
11195
  return this.getV1EmbedBasePath(queryString);
11055
11196
  }
@@ -11708,6 +11849,11 @@
11708
11849
  this.renderV1Embed(src);
11709
11850
  return this;
11710
11851
  }
11852
+ preRender() {
11853
+ super.preRender();
11854
+ this.render();
11855
+ return this;
11856
+ }
11711
11857
  navigateToLiveboard(liveboardId, vizId, activeTabId) {
11712
11858
  const path = this.getIframeSuffixSrc(liveboardId, vizId, activeTabId);
11713
11859
  this.viewConfig.liveboardId = liveboardId;
@@ -11742,7 +11888,7 @@
11742
11888
  });
11743
11889
  }
11744
11890
 
11745
- const componentFactory = (EmbedConstructor) => React__default['default'].forwardRef((props, forwardedRef) => {
11891
+ const componentFactory = (EmbedConstructor, isPreRenderedComponent = false) => React__default['default'].forwardRef((props, forwardedRef) => {
11746
11892
  const ref = React__default['default'].useRef(null);
11747
11893
  const { className, ...embedProps } = props;
11748
11894
  const { viewConfig, listeners } = getViewPropsAndListeners(embedProps);
@@ -11758,13 +11904,26 @@
11758
11904
  Object.keys(listeners).forEach((eventName) => {
11759
11905
  tsEmbed.on(eventName, listeners[eventName]);
11760
11906
  });
11761
- tsEmbed.render();
11907
+ if (isPreRenderedComponent) {
11908
+ tsEmbed.preRender();
11909
+ }
11910
+ else if (props.preRenderId) {
11911
+ tsEmbed.showPreRender();
11912
+ }
11913
+ else {
11914
+ tsEmbed.render();
11915
+ }
11762
11916
  if (forwardedRef) {
11763
11917
  // eslint-disable-next-line no-param-reassign
11764
11918
  forwardedRef.current = tsEmbed;
11765
11919
  }
11766
11920
  return () => {
11767
- tsEmbed.destroy();
11921
+ if (!isPreRenderedComponent) {
11922
+ if (props.preRenderId)
11923
+ tsEmbed.hidePreRender();
11924
+ else
11925
+ tsEmbed.destroy();
11926
+ }
11768
11927
  };
11769
11928
  }, [viewConfig, listeners]);
11770
11929
  return ((viewConfig.insertAsSibling)
@@ -11864,11 +12023,13 @@
11864
12023
  */
11865
12024
  function useEmbedRef() {
11866
12025
  return React__default['default'].useRef(null);
11867
- }
12026
+ }
12027
+ const PreRenderedLiveboardEmbed = componentFactory(LiveboardEmbed, true);
11868
12028
 
11869
12029
  exports.AppEmbed = AppEmbed$1;
11870
12030
  exports.LiveboardEmbed = LiveboardEmbed$1;
11871
12031
  exports.PinboardEmbed = PinboardEmbed;
12032
+ exports.PreRenderedLiveboardEmbed = PreRenderedLiveboardEmbed;
11872
12033
  exports.SageEmbed = SageEmbed$1;
11873
12034
  exports.SearchBarEmbed = SearchBarEmbed$1;
11874
12035
  exports.SearchEmbed = SearchEmbed$1;