@thoughtspot/visual-embed-sdk 1.52.2-beta.2 → 1.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/package.json +1 -1
- package/cjs/src/contracts/contracts.spec.js +4 -0
- package/cjs/src/contracts/contracts.spec.js.map +1 -1
- package/cjs/src/contracts/host-event-contracts.d.ts +10 -0
- package/cjs/src/contracts/host-event-contracts.d.ts.map +1 -1
- package/cjs/src/css-variables.d.ts +373 -5
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +15 -0
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +6 -3
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +28 -0
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.d.ts.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.js +244 -4
- package/cjs/src/embed/auto-frame-renderer.js.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.spec.js +389 -0
- package/cjs/src/embed/auto-frame-renderer.spec.js.map +1 -1
- package/cjs/src/embed/bodyless-conversation.js +1 -1
- package/cjs/src/embed/bodyless-conversation.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +29 -0
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +7 -3
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +88 -0
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/host-events.spec.js +32 -0
- package/cjs/src/embed/host-events.spec.js.map +1 -1
- package/cjs/src/embed/liveboard-override-utils.d.ts +59 -0
- package/cjs/src/embed/liveboard-override-utils.d.ts.map +1 -0
- package/cjs/src/embed/liveboard-override-utils.js +19 -0
- package/cjs/src/embed/liveboard-override-utils.js.map +1 -0
- package/cjs/src/embed/liveboard-override-utils.spec.d.ts +2 -0
- package/cjs/src/embed/liveboard-override-utils.spec.d.ts.map +1 -0
- package/cjs/src/embed/liveboard-override-utils.spec.js +34 -0
- package/cjs/src/embed/liveboard-override-utils.spec.js.map +1 -0
- package/cjs/src/embed/liveboard.d.ts +44 -13
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +19 -23
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +122 -0
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/search-bar.js +1 -1
- package/cjs/src/embed/search-bar.js.map +1 -1
- package/cjs/src/embed/search.js +1 -1
- package/cjs/src/embed/search.js.map +1 -1
- package/cjs/src/embed/search.spec.js +20 -0
- package/cjs/src/embed/search.spec.js.map +1 -1
- package/cjs/src/embed/spotter-utils.d.ts +12 -0
- package/cjs/src/embed/spotter-utils.d.ts.map +1 -1
- package/cjs/src/embed/spotter-utils.js +20 -2
- package/cjs/src/embed/spotter-utils.js.map +1 -1
- package/cjs/src/embed/spotter-utils.spec.js +19 -0
- package/cjs/src/embed/spotter-utils.spec.js.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.d.ts +15 -0
- package/cjs/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.js.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.spec.js +11 -0
- package/cjs/src/embed/spotter-viz-utils.spec.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +18 -20
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +181 -45
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +610 -0
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +5 -3
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +4 -2
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/mixpanel-service.d.ts +1 -0
- package/cjs/src/mixpanel-service.d.ts.map +1 -1
- package/cjs/src/mixpanel-service.js +1 -0
- package/cjs/src/mixpanel-service.js.map +1 -1
- package/cjs/src/react/all-types-export.d.ts +1 -1
- package/cjs/src/react/all-types-export.d.ts.map +1 -1
- package/cjs/src/react/all-types-export.js +2 -1
- package/cjs/src/react/all-types-export.js.map +1 -1
- package/cjs/src/types.d.ts +251 -4
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +176 -0
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answer-queries.d.ts +1 -0
- package/cjs/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -1
- package/cjs/src/utils/graphql/answerService/answer-queries.js +8 -1
- package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.d.ts +28 -4
- package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.js +39 -4
- package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.spec.js +124 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/cjs/src/utils/runtimeTelemetry.d.ts +11 -0
- package/cjs/src/utils/runtimeTelemetry.d.ts.map +1 -0
- package/cjs/src/utils/runtimeTelemetry.js +34 -0
- package/cjs/src/utils/runtimeTelemetry.js.map +1 -0
- package/cjs/src/utils/runtimeTelemetry.spec.d.ts +2 -0
- package/cjs/src/utils/runtimeTelemetry.spec.d.ts.map +1 -0
- package/cjs/src/utils/runtimeTelemetry.spec.js +124 -0
- package/cjs/src/utils/runtimeTelemetry.spec.js.map +1 -0
- package/dist/{index-CnHREfvN.js → index-CrBnZBZv.js} +1 -1
- package/dist/src/contracts/host-event-contracts.d.ts +10 -0
- package/dist/src/contracts/host-event-contracts.d.ts.map +1 -1
- package/dist/src/css-variables.d.ts +373 -5
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +15 -0
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/auto-frame-renderer.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +29 -0
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/liveboard-override-utils.d.ts +59 -0
- package/dist/src/embed/liveboard-override-utils.d.ts.map +1 -0
- package/dist/src/embed/liveboard-override-utils.spec.d.ts +2 -0
- package/dist/src/embed/liveboard-override-utils.spec.d.ts.map +1 -0
- package/dist/src/embed/liveboard.d.ts +44 -13
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/spotter-utils.d.ts +12 -0
- package/dist/src/embed/spotter-utils.d.ts.map +1 -1
- package/dist/src/embed/spotter-viz-utils.d.ts +15 -0
- package/dist/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +18 -20
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/dist/src/index.d.ts +5 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/mixpanel-service.d.ts +1 -0
- package/dist/src/mixpanel-service.d.ts.map +1 -1
- package/dist/src/react/all-types-export.d.ts +1 -1
- package/dist/src/react/all-types-export.d.ts.map +1 -1
- package/dist/src/types.d.ts +251 -4
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/graphql/answerService/answer-queries.d.ts +1 -0
- package/dist/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -1
- package/dist/src/utils/graphql/answerService/answerService.d.ts +28 -4
- package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
- package/dist/src/utils/runtimeTelemetry.d.ts +11 -0
- package/dist/src/utils/runtimeTelemetry.d.ts.map +1 -0
- package/dist/src/utils/runtimeTelemetry.spec.d.ts +2 -0
- package/dist/src/utils/runtimeTelemetry.spec.d.ts.map +1 -0
- package/dist/tsembed-react.es.js +500 -85
- package/dist/tsembed-react.js +499 -84
- package/dist/tsembed.es.js +743 -90
- package/dist/tsembed.js +741 -88
- package/dist/visual-embed-sdk-react-full.d.ts +788 -44
- package/dist/visual-embed-sdk-react.d.ts +783 -44
- package/dist/visual-embed-sdk.d.ts +815 -45
- package/lib/package.json +1 -1
- package/lib/src/contracts/contracts.spec.js +4 -0
- package/lib/src/contracts/contracts.spec.js.map +1 -1
- package/lib/src/contracts/host-event-contracts.d.ts +10 -0
- package/lib/src/contracts/host-event-contracts.d.ts.map +1 -1
- package/lib/src/css-variables.d.ts +373 -5
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +15 -0
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +7 -4
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +28 -0
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/auto-frame-renderer.d.ts.map +1 -1
- package/lib/src/embed/auto-frame-renderer.js +244 -4
- package/lib/src/embed/auto-frame-renderer.js.map +1 -1
- package/lib/src/embed/auto-frame-renderer.spec.js +389 -0
- package/lib/src/embed/auto-frame-renderer.spec.js.map +1 -1
- package/lib/src/embed/bodyless-conversation.js +1 -1
- package/lib/src/embed/bodyless-conversation.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +29 -0
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +8 -4
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +89 -1
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/host-events.spec.js +32 -0
- package/lib/src/embed/host-events.spec.js.map +1 -1
- package/lib/src/embed/liveboard-override-utils.d.ts +59 -0
- package/lib/src/embed/liveboard-override-utils.d.ts.map +1 -0
- package/lib/src/embed/liveboard-override-utils.js +15 -0
- package/lib/src/embed/liveboard-override-utils.js.map +1 -0
- package/lib/src/embed/liveboard-override-utils.spec.d.ts +2 -0
- package/lib/src/embed/liveboard-override-utils.spec.d.ts.map +1 -0
- package/lib/src/embed/liveboard-override-utils.spec.js +32 -0
- package/lib/src/embed/liveboard-override-utils.spec.js.map +1 -0
- package/lib/src/embed/liveboard.d.ts +44 -13
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +19 -23
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +122 -0
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/search-bar.js +1 -1
- package/lib/src/embed/search-bar.js.map +1 -1
- package/lib/src/embed/search.js +1 -1
- package/lib/src/embed/search.js.map +1 -1
- package/lib/src/embed/search.spec.js +20 -0
- package/lib/src/embed/search.spec.js.map +1 -1
- package/lib/src/embed/spotter-utils.d.ts +12 -0
- package/lib/src/embed/spotter-utils.d.ts.map +1 -1
- package/lib/src/embed/spotter-utils.js +19 -1
- package/lib/src/embed/spotter-utils.js.map +1 -1
- package/lib/src/embed/spotter-utils.spec.js +19 -0
- package/lib/src/embed/spotter-utils.spec.js.map +1 -1
- package/lib/src/embed/spotter-viz-utils.d.ts +15 -0
- package/lib/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/lib/src/embed/spotter-viz-utils.js.map +1 -1
- package/lib/src/embed/spotter-viz-utils.spec.js +11 -0
- package/lib/src/embed/spotter-viz-utils.spec.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +18 -20
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +181 -45
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +611 -1
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +5 -3
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +3 -2
- package/lib/src/index.js.map +1 -1
- package/lib/src/mixpanel-service.d.ts +1 -0
- package/lib/src/mixpanel-service.d.ts.map +1 -1
- package/lib/src/mixpanel-service.js +1 -0
- package/lib/src/mixpanel-service.js.map +1 -1
- package/lib/src/react/all-types-export.d.ts +1 -1
- package/lib/src/react/all-types-export.d.ts.map +1 -1
- package/lib/src/react/all-types-export.js +1 -1
- package/lib/src/react/all-types-export.js.map +1 -1
- package/lib/src/types.d.ts +251 -4
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +176 -0
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answer-queries.d.ts +1 -0
- package/lib/src/utils/graphql/answerService/answer-queries.d.ts.map +1 -1
- package/lib/src/utils/graphql/answerService/answer-queries.js +7 -0
- package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.d.ts +28 -4
- package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.js +39 -4
- package/lib/src/utils/graphql/answerService/answerService.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.spec.js +125 -1
- package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/lib/src/utils/runtimeTelemetry.d.ts +11 -0
- package/lib/src/utils/runtimeTelemetry.d.ts.map +1 -0
- package/lib/src/utils/runtimeTelemetry.js +28 -0
- package/lib/src/utils/runtimeTelemetry.js.map +1 -0
- package/lib/src/utils/runtimeTelemetry.spec.d.ts +2 -0
- package/lib/src/utils/runtimeTelemetry.spec.d.ts.map +1 -0
- package/lib/src/utils/runtimeTelemetry.spec.js +122 -0
- package/lib/src/utils/runtimeTelemetry.spec.js.map +1 -0
- package/lib/src/visual-embed-sdk.d.ts +815 -45
- package/package.json +1 -1
- package/src/contracts/contracts.spec.ts +4 -0
- package/src/contracts/host-event-contracts.ts +13 -0
- package/src/css-variables.ts +475 -26
- package/src/embed/app.spec.ts +32 -0
- package/src/embed/app.ts +29 -4
- package/src/embed/auto-frame-renderer.spec.ts +464 -0
- package/src/embed/auto-frame-renderer.ts +305 -6
- package/src/embed/bodyless-conversation.ts +1 -1
- package/src/embed/conversation.spec.ts +118 -1
- package/src/embed/conversation.ts +42 -3
- package/src/embed/host-events.spec.ts +44 -0
- package/src/embed/liveboard-override-utils.spec.ts +38 -0
- package/src/embed/liveboard-override-utils.ts +71 -0
- package/src/embed/liveboard.spec.ts +138 -0
- package/src/embed/liveboard.ts +64 -24
- package/src/embed/search-bar.tsx +1 -1
- package/src/embed/search.spec.ts +23 -0
- package/src/embed/search.ts +1 -1
- package/src/embed/spotter-utils.spec.ts +20 -0
- package/src/embed/spotter-utils.ts +24 -1
- package/src/embed/spotter-viz-utils.spec.ts +11 -0
- package/src/embed/spotter-viz-utils.ts +15 -0
- package/src/embed/ts-embed.spec.ts +767 -0
- package/src/embed/ts-embed.ts +186 -41
- package/src/index.ts +18 -1
- package/src/mixpanel-service.ts +1 -0
- package/src/react/all-types-export.ts +7 -0
- package/src/types.ts +254 -5
- package/src/utils/graphql/answerService/answer-queries.ts +8 -0
- package/src/utils/graphql/answerService/answerService.spec.ts +145 -1
- package/src/utils/graphql/answerService/answerService.ts +65 -3
- package/src/utils/runtimeTelemetry.spec.ts +148 -0
- package/src/utils/runtimeTelemetry.ts +50 -0
package/dist/tsembed-react.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* @thoughtspot/visual-embed-sdk version 1.
|
|
1
|
+
/* @thoughtspot/visual-embed-sdk version 1.53.1 */
|
|
2
2
|
'use client';
|
|
3
3
|
(function (global, factory) {
|
|
4
4
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
|
|
@@ -1415,6 +1415,36 @@
|
|
|
1415
1415
|
* ```
|
|
1416
1416
|
*/
|
|
1417
1417
|
EmbedEvent["Edit"] = "edit";
|
|
1418
|
+
/**
|
|
1419
|
+
* Emitted when a user clicks **Edit** on a Liveboard.
|
|
1420
|
+
*
|
|
1421
|
+
* Fired alongside {@link EmbedEvent.Edit} for backward compatibility;
|
|
1422
|
+
* listen to this instead of `Edit` to target the Liveboard surface only.
|
|
1423
|
+
* @version SDK: 1.54.0 | ThoughtSpot Cloud: 26.11.0.cl
|
|
1424
|
+
* @example
|
|
1425
|
+
* ```js
|
|
1426
|
+
* liveboardEmbed.on(EmbedEvent.EditLiveboard, payload => {
|
|
1427
|
+
* console.log('Liveboard edit', payload);
|
|
1428
|
+
* })
|
|
1429
|
+
* ```
|
|
1430
|
+
*/
|
|
1431
|
+
EmbedEvent["EditLiveboard"] = "editLiveboard";
|
|
1432
|
+
/**
|
|
1433
|
+
* Emitted when a user clicks **Edit** on a visualization inside a
|
|
1434
|
+
* Liveboard.
|
|
1435
|
+
*
|
|
1436
|
+
* Fired alongside {@link EmbedEvent.Edit} for backward compatibility;
|
|
1437
|
+
* listen to this instead of `Edit` to target the visualization surface
|
|
1438
|
+
* only.
|
|
1439
|
+
* @version SDK: 1.54.0 | ThoughtSpot Cloud: 26.11.0.cl
|
|
1440
|
+
* @example
|
|
1441
|
+
* ```js
|
|
1442
|
+
* liveboardEmbed.on(EmbedEvent.EditVisualization, payload => {
|
|
1443
|
+
* console.log('visualization edit', payload);
|
|
1444
|
+
* })
|
|
1445
|
+
* ```
|
|
1446
|
+
*/
|
|
1447
|
+
EmbedEvent["EditVisualization"] = "editVisualization";
|
|
1418
1448
|
/**
|
|
1419
1449
|
* Emitted when a user clicks *Make a copy* on a Liveboard
|
|
1420
1450
|
* @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw
|
|
@@ -3386,6 +3416,46 @@
|
|
|
3386
3416
|
* @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw
|
|
3387
3417
|
*/
|
|
3388
3418
|
HostEvent["Edit"] = "edit";
|
|
3419
|
+
/**
|
|
3420
|
+
* Trigger the **Edit** action on a Liveboard only — does not affect a
|
|
3421
|
+
* visualization's edit surface.
|
|
3422
|
+
*
|
|
3423
|
+
* Behaves like {@link HostEvent.Edit} restricted to the Liveboard
|
|
3424
|
+
* surface. Use {@link HostEvent.EditVisualization} to target a
|
|
3425
|
+
* visualization instead, or `HostEvent.Edit` to control whichever
|
|
3426
|
+
* surface applies contextually (unchanged, existing behavior).
|
|
3427
|
+
* @example
|
|
3428
|
+
* ```js
|
|
3429
|
+
* liveboardEmbed.trigger(HostEvent.EditLiveboard)
|
|
3430
|
+
* ```
|
|
3431
|
+
* @version SDK: 1.54.0 | ThoughtSpot Cloud: 26.11.0.cl
|
|
3432
|
+
*/
|
|
3433
|
+
HostEvent["EditLiveboard"] = "editLiveboard";
|
|
3434
|
+
/**
|
|
3435
|
+
* Trigger the **Edit** action on a specific visualization inside a
|
|
3436
|
+
* Liveboard only — does not affect the Liveboard-level edit surface.
|
|
3437
|
+
* @param - Object parameter. Includes the following keys:
|
|
3438
|
+
* - `vizId`: **Required.** The visualization to edit.
|
|
3439
|
+
*
|
|
3440
|
+
* @example
|
|
3441
|
+
* ```js
|
|
3442
|
+
* liveboardEmbed.trigger(HostEvent.EditVisualization, {vizId:
|
|
3443
|
+
* '730496d6-6903-4601-937e-2c691821af3c'})
|
|
3444
|
+
* ```
|
|
3445
|
+
* @version SDK: 1.54.0 | ThoughtSpot Cloud: 26.11.0.cl
|
|
3446
|
+
*/
|
|
3447
|
+
HostEvent["EditVisualization"] = "editVisualization";
|
|
3448
|
+
/**
|
|
3449
|
+
* Exits Liveboard edit mode , equivalent to clicking the
|
|
3450
|
+
* *Cancel* button in the Liveboard edit header. The Liveboard returns to
|
|
3451
|
+
* view mode and the embedded app emits the {@link EmbedEvent.Cancel} event.
|
|
3452
|
+
* @version SDK: 1.55.0 | ThoughtSpot Cloud: 26.12.0.cl
|
|
3453
|
+
* @example
|
|
3454
|
+
* ```js
|
|
3455
|
+
* liveboardEmbed.trigger(HostEvent.ExitEditMode);
|
|
3456
|
+
* ```
|
|
3457
|
+
*/
|
|
3458
|
+
HostEvent["ExitEditMode"] = "exitEditMode";
|
|
3389
3459
|
/**
|
|
3390
3460
|
* Trigger the **Copy link** action on a Liveboard or visualization
|
|
3391
3461
|
* Payload: {@link VizScopedRequest}.
|
|
@@ -4921,6 +4991,39 @@
|
|
|
4921
4991
|
* @version SDK: 1.49.0 | ThoughtSpot Cloud: 26.6.0.cl
|
|
4922
4992
|
*/
|
|
4923
4993
|
HostEvent["RefreshLiveboardBrowserCache"] = "refreshLiveboardBrowserCache";
|
|
4994
|
+
/**
|
|
4995
|
+
* Switch the embed between dark appearance and its default appearance
|
|
4996
|
+
* while it is open, without reloading it.
|
|
4997
|
+
* Payload: {@link UpdateThemeRequest}.
|
|
4998
|
+
*
|
|
4999
|
+
* Use it to keep the embed in step with a theme switch in your
|
|
5000
|
+
* application; the appearance the embed loads with is set by `isDarkMode`.
|
|
5001
|
+
* The event resolves with the applied value, such as `{ isDarkMode: true }`.
|
|
5002
|
+
* When dark appearance is not available in the embed, the embed does not
|
|
5003
|
+
* change and the event rejects with an error message instead.
|
|
5004
|
+
* @version SDK: 1.55.0 | ThoughtSpot Cloud: 26.12.0.cl
|
|
5005
|
+
* @param - `isDarkMode` - `true` for dark appearance, `false` for the
|
|
5006
|
+
* default appearance.
|
|
5007
|
+
* @example
|
|
5008
|
+
* ```js
|
|
5009
|
+
* appEmbed.trigger(HostEvent.UpdateTheme, { isDarkMode: true });
|
|
5010
|
+
* ```
|
|
5011
|
+
* @example
|
|
5012
|
+
* ```js
|
|
5013
|
+
* // Follow a theme switch in your application
|
|
5014
|
+
* const themeSwitch = document.querySelector('#theme-switch');
|
|
5015
|
+
* themeSwitch.addEventListener('change', async (event) => {
|
|
5016
|
+
* try {
|
|
5017
|
+
* await appEmbed.trigger(HostEvent.UpdateTheme, {
|
|
5018
|
+
* isDarkMode: event.target.checked,
|
|
5019
|
+
* });
|
|
5020
|
+
* } catch (error) {
|
|
5021
|
+
* console.warn(error);
|
|
5022
|
+
* }
|
|
5023
|
+
* });
|
|
5024
|
+
* ```
|
|
5025
|
+
*/
|
|
5026
|
+
HostEvent["UpdateTheme"] = "UpdateTheme";
|
|
4924
5027
|
})(exports.HostEvent || (exports.HostEvent = {}));
|
|
4925
5028
|
/**
|
|
4926
5029
|
* The different visual modes that the data sources panel within
|
|
@@ -4948,6 +5051,22 @@
|
|
|
4948
5051
|
var Param;
|
|
4949
5052
|
(function (Param) {
|
|
4950
5053
|
Param["Tsmcp"] = "tsmcp";
|
|
5054
|
+
/**
|
|
5055
|
+
* Marker added by a host app replaying a stored conversation. Carries the
|
|
5056
|
+
* analytical session (conversation) identifier, from which the renderer
|
|
5057
|
+
* resolves the answer's current session parameters. Stripped before the
|
|
5058
|
+
* URL reaches the ThoughtSpot application.
|
|
5059
|
+
* @version SDK: 1.52.2 | ThoughtSpot Cloud: 26.9.0.cl
|
|
5060
|
+
*/
|
|
5061
|
+
Param["TsmcpConversationId"] = "tsmcpConversationId";
|
|
5062
|
+
/**
|
|
5063
|
+
* Zero-based position of the answer within the conversation, counting only
|
|
5064
|
+
* non-thinking answer items in message order. Accompanies
|
|
5065
|
+
* {@link TsmcpConversationId}; defaults to 0 when absent. Stripped before
|
|
5066
|
+
* the URL reaches the ThoughtSpot application.
|
|
5067
|
+
* @version SDK: 1.52.2 | ThoughtSpot Cloud: 26.9.0.cl
|
|
5068
|
+
*/
|
|
5069
|
+
Param["TsmcpAnswerIndex"] = "tsmcpAnswerIndex";
|
|
4951
5070
|
Param["EmbedApp"] = "embedApp";
|
|
4952
5071
|
Param["DataSources"] = "dataSources";
|
|
4953
5072
|
Param["DataSourceMode"] = "dataSourceMode";
|
|
@@ -5111,6 +5230,9 @@
|
|
|
5111
5230
|
Param["SpotterDataSources"] = "spotterDataSources";
|
|
5112
5231
|
Param["OpenSpotterOnLiveboardByDefault"] = "openSpotterOnLiveboardByDefault";
|
|
5113
5232
|
Param["ShowAnswerEditPanel"] = "showAnswerEditPanel";
|
|
5233
|
+
Param["IsDarkMode"] = "isDarkMode";
|
|
5234
|
+
Param["RadiantThemeEnabled"] = "radiantThemeEnabled";
|
|
5235
|
+
Param["SpotterExperienceVersion"] = "spotterExperienceVersion";
|
|
5114
5236
|
})(Param || (Param = {}));
|
|
5115
5237
|
/**
|
|
5116
5238
|
* ThoughtSpot application pages include actions and menu commands
|
|
@@ -5565,12 +5687,43 @@
|
|
|
5565
5687
|
* The *Edit* action on the Liveboard page and in the
|
|
5566
5688
|
* visualization menu.
|
|
5567
5689
|
* Opens a Liveboard or visualization in edit mode.
|
|
5690
|
+
*
|
|
5691
|
+
* Controls both surfaces together. To target one surface only, use
|
|
5692
|
+
* {@link Action.EditLiveboard} or {@link Action.EditVisualization}.
|
|
5568
5693
|
* @example
|
|
5569
5694
|
* ```js
|
|
5570
5695
|
* disabledActions: [Action.Edit]
|
|
5571
5696
|
* ```
|
|
5572
5697
|
*/
|
|
5573
5698
|
Action["Edit"] = "edit";
|
|
5699
|
+
/**
|
|
5700
|
+
* The *Edit* action on the Liveboard page only.
|
|
5701
|
+
* Opens a Liveboard in edit mode.
|
|
5702
|
+
*
|
|
5703
|
+
* Does not affect the *Edit* action in the visualization menu; use
|
|
5704
|
+
* {@link Action.EditVisualization} for that, or {@link Action.Edit} to
|
|
5705
|
+
* control both surfaces together.
|
|
5706
|
+
* @version SDK: 1.54.0 | ThoughtSpot Cloud: 26.11.0.cl
|
|
5707
|
+
* @example
|
|
5708
|
+
* ```js
|
|
5709
|
+
* disabledActions: [Action.EditLiveboard]
|
|
5710
|
+
* ```
|
|
5711
|
+
*/
|
|
5712
|
+
Action["EditLiveboard"] = "editLiveboard";
|
|
5713
|
+
/**
|
|
5714
|
+
* The *Edit* action in the visualization `...` menu only.
|
|
5715
|
+
* Opens a visualization in the editor.
|
|
5716
|
+
*
|
|
5717
|
+
* Does not affect the *Edit* action on the Liveboard page; use
|
|
5718
|
+
* {@link Action.EditLiveboard} for that, or {@link Action.Edit} to
|
|
5719
|
+
* control both surfaces together.
|
|
5720
|
+
* @version SDK: 1.54.0 | ThoughtSpot Cloud: 26.11.0.cl
|
|
5721
|
+
* @example
|
|
5722
|
+
* ```js
|
|
5723
|
+
* disabledActions: [Action.EditVisualization]
|
|
5724
|
+
* ```
|
|
5725
|
+
*/
|
|
5726
|
+
Action["EditVisualization"] = "editVisualization";
|
|
5574
5727
|
/**
|
|
5575
5728
|
* The text edit option for Liveboard and visualization titles.
|
|
5576
5729
|
* @example
|
|
@@ -7346,6 +7499,29 @@
|
|
|
7346
7499
|
* ```
|
|
7347
7500
|
*/
|
|
7348
7501
|
Action["CustomizeHomepage"] = "customizeHomepage";
|
|
7502
|
+
/**
|
|
7503
|
+
* Controls the visibility and disabled state of the *Cancel* button in the
|
|
7504
|
+
* Liveboard edit header, the button that discards the changes made in edit
|
|
7505
|
+
* mode and returns the Liveboard to view mode. The button is shown only
|
|
7506
|
+
* while the Liveboard is in edit mode.
|
|
7507
|
+
* @version SDK: 1.55.0 | ThoughtSpot Cloud: 26.12.0.cl
|
|
7508
|
+
* @example
|
|
7509
|
+
* ```js
|
|
7510
|
+
* const liveboardEmbed = new LiveboardEmbed('#tsEmbed', {
|
|
7511
|
+
* ... // other embed view config
|
|
7512
|
+
* hiddenActions: [Action.Cancel],
|
|
7513
|
+
* });
|
|
7514
|
+
* ```
|
|
7515
|
+
* @example
|
|
7516
|
+
* ```js
|
|
7517
|
+
* const liveboardEmbed = new LiveboardEmbed('#tsEmbed', {
|
|
7518
|
+
* ... // other embed view config
|
|
7519
|
+
* disabledActions: [Action.Cancel],
|
|
7520
|
+
* disabledActionReason: 'Save your changes to leave edit mode',
|
|
7521
|
+
* });
|
|
7522
|
+
* ```
|
|
7523
|
+
*/
|
|
7524
|
+
Action["Cancel"] = "cancel";
|
|
7349
7525
|
})(exports.Action || (exports.Action = {}));
|
|
7350
7526
|
var PrefetchFeatures;
|
|
7351
7527
|
(function (PrefetchFeatures) {
|
|
@@ -7850,7 +8026,7 @@
|
|
|
7850
8026
|
TableContentDensity["Compact"] = "COMPACT";
|
|
7851
8027
|
})(TableContentDensity || (TableContentDensity = {}));
|
|
7852
8028
|
|
|
7853
|
-
var version$1="1.
|
|
8029
|
+
var version$1="1.53.1";var pkg = {version:version$1};
|
|
7854
8030
|
|
|
7855
8031
|
const { version } = pkg;
|
|
7856
8032
|
|
|
@@ -10118,6 +10294,13 @@ mutation RemoveColumns($session: BachSessionIdInput!, $logicalColumnIds: [GUID!]
|
|
|
10118
10294
|
${bachSessionId}
|
|
10119
10295
|
}
|
|
10120
10296
|
}
|
|
10297
|
+
`;
|
|
10298
|
+
const updateSort = `
|
|
10299
|
+
mutation UpdateSort($session: BachSessionIdInput!, $sortOrder: [AnswerColumnSortInput!]!) {
|
|
10300
|
+
Answer__updateSort(session: $session, sortOrder: $sortOrder) {
|
|
10301
|
+
${bachSessionId}
|
|
10302
|
+
}
|
|
10303
|
+
}
|
|
10121
10304
|
`;
|
|
10122
10305
|
const getAnswer = `
|
|
10123
10306
|
query GetAnswer($session: BachSessionIdInput!) {
|
|
@@ -10423,6 +10606,26 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
10423
10606
|
},
|
|
10424
10607
|
});
|
|
10425
10608
|
}
|
|
10609
|
+
/**
|
|
10610
|
+
* Adapt the sort options into the `updateSort` payload and send it.
|
|
10611
|
+
* @param sortOptions Columns to sort by, each with a direction.
|
|
10612
|
+
* @param sourceDetail
|
|
10613
|
+
*/
|
|
10614
|
+
async adaptSorting(sortOptions, sourceDetail) {
|
|
10615
|
+
const { answer } = await this.executeQuery(getAnswer, {});
|
|
10616
|
+
const guidToColumnId = getGuidToColumnIdMap(answer);
|
|
10617
|
+
const sortOrder = sortOptions.map((sort) => {
|
|
10618
|
+
const guid = getGuidsFromColumnNames(sourceDetail, [sort.columnName])
|
|
10619
|
+
.values().next().value;
|
|
10620
|
+
return {
|
|
10621
|
+
columnId: guidToColumnId.get(guid),
|
|
10622
|
+
sortType: sort.ascending ? 'ASCENDING' : 'DESCENDING',
|
|
10623
|
+
};
|
|
10624
|
+
});
|
|
10625
|
+
return this.executeQuery(updateSort, {
|
|
10626
|
+
sortOrder,
|
|
10627
|
+
});
|
|
10628
|
+
}
|
|
10426
10629
|
async updateDisplayMode(displayMode = "TABLE_MODE") {
|
|
10427
10630
|
return this.executeQuery(updateDisplayMode, {
|
|
10428
10631
|
displayMode,
|
|
@@ -10510,18 +10713,21 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
10510
10713
|
* automatically passed.
|
|
10511
10714
|
* @param outputColumnNames
|
|
10512
10715
|
* @param selectedPoints
|
|
10716
|
+
* @param sortOptions Optional columns to sort the underlying data by.
|
|
10513
10717
|
* @example
|
|
10514
10718
|
* ```js
|
|
10515
10719
|
* embed.on(EmbedEvent.CustomAction, e => {
|
|
10516
|
-
* const underlying = await e.answerService.getUnderlyingDataForPoint(
|
|
10517
|
-
* 'col name 1' // The column should exist in the data source.
|
|
10518
|
-
*
|
|
10720
|
+
* const underlying = await e.answerService.getUnderlyingDataForPoint(
|
|
10721
|
+
* ['col name 1'], // The column should exist in the data source.
|
|
10722
|
+
* undefined,
|
|
10723
|
+
* [{ columnName: 'col name 1', ascending: true }],
|
|
10724
|
+
* );
|
|
10519
10725
|
* const data = await underlying.fetchData(0, 100);
|
|
10520
10726
|
* })
|
|
10521
10727
|
* ```
|
|
10522
10728
|
* @version SDK: 1.25.0 | ThoughtSpot: 9.10.0.cl
|
|
10523
10729
|
*/
|
|
10524
|
-
async getUnderlyingDataForPoint(outputColumnNames, selectedPoints) {
|
|
10730
|
+
async getUnderlyingDataForPoint(outputColumnNames, selectedPoints, sortOptions) {
|
|
10525
10731
|
if (!selectedPoints && !this.selectedPoints) {
|
|
10526
10732
|
throw new Error('Needs to be triggered in context of a point');
|
|
10527
10733
|
}
|
|
@@ -10549,6 +10755,9 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
10549
10755
|
if (columnsToRemove.length) {
|
|
10550
10756
|
await unaggAnswerSession.removeColumns(columnsToRemove);
|
|
10551
10757
|
}
|
|
10758
|
+
if (sortOptions === null || sortOptions === void 0 ? void 0 : sortOptions.length) {
|
|
10759
|
+
await unaggAnswerSession.adaptSorting(sortOptions, sourceDetail);
|
|
10760
|
+
}
|
|
10552
10761
|
return unaggAnswerSession;
|
|
10553
10762
|
}
|
|
10554
10763
|
/**
|
|
@@ -10608,6 +10817,15 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
10608
10817
|
this.tmlOverride = override;
|
|
10609
10818
|
}
|
|
10610
10819
|
}
|
|
10820
|
+
/**
|
|
10821
|
+
* Build a map from a source column guid to the answer's viz column id, using
|
|
10822
|
+
* the `referencedColumns` link on each viz column.
|
|
10823
|
+
* @param answer
|
|
10824
|
+
*/
|
|
10825
|
+
function getGuidToColumnIdMap(answer) {
|
|
10826
|
+
const tableViz = answer.visualizations.find((viz) => viz.columns);
|
|
10827
|
+
return new Map(tableViz.columns.map((col) => [col.column.referencedColumns[0].guid, col.column.id]));
|
|
10828
|
+
}
|
|
10611
10829
|
/**
|
|
10612
10830
|
*
|
|
10613
10831
|
* @param sourceDetail
|
|
@@ -19688,6 +19906,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
19688
19906
|
const MIXPANEL_EVENT = {
|
|
19689
19907
|
VISUAL_SDK_RENDER_START: 'visual-sdk-render-start',
|
|
19690
19908
|
VISUAL_SDK_CALLED_INIT: 'visual-sdk-called-init',
|
|
19909
|
+
VISUAL_SDK_INIT_ACTIONS: 'visual-sdk-init-actions',
|
|
19691
19910
|
VISUAL_SDK_RENDER_COMPLETE: 'visual-sdk-render-complete',
|
|
19692
19911
|
VISUAL_SDK_RENDER_FAILED: 'visual-sdk-render-failed',
|
|
19693
19912
|
VISUAL_SDK_TRIGGER: 'visual-sdk-trigger',
|
|
@@ -19760,6 +19979,32 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
19760
19979
|
}
|
|
19761
19980
|
}
|
|
19762
19981
|
|
|
19982
|
+
// Membership is checked, not just the key: a bare key allowlist would upload an
|
|
19983
|
+
// arbitrary customer string sitting under `operator` verbatim.
|
|
19984
|
+
const isEnumMember = (enumObject, value) => typeof value === 'string' && Object.values(enumObject).includes(value);
|
|
19985
|
+
const uniqueEnumMembers = (enumObject, values) => Array.from(new Set(values.filter((v) => isEnumMember(enumObject, v))));
|
|
19986
|
+
const describeRuntimeFilters = (runtimeFilters) => ({
|
|
19987
|
+
count: runtimeFilters.length,
|
|
19988
|
+
operators: uniqueEnumMembers(exports.RuntimeFilterOp, runtimeFilters.map((filter) => filter === null || filter === void 0 ? void 0 : filter.operator)),
|
|
19989
|
+
});
|
|
19990
|
+
const describeRuntimeParameters = (runtimeParameters) => ({
|
|
19991
|
+
count: runtimeParameters.length,
|
|
19992
|
+
applicabilityLevels: uniqueEnumMembers(ApplicabilityLevel, runtimeParameters.map((parameter) => { var _a; return (_a = parameter === null || parameter === void 0 ? void 0 : parameter.applicability) === null || _a === void 0 ? void 0 : _a.level; })),
|
|
19993
|
+
});
|
|
19994
|
+
// Column names, parameter names and operands are customer data and must never
|
|
19995
|
+
// reach Mixpanel; an unrecognized shape is dropped rather than forwarded.
|
|
19996
|
+
const summarizeRuntimeDataForTelemetry = (viewConfig) => {
|
|
19997
|
+
const { runtimeFilters, runtimeParameters, ...rest } = viewConfig !== null && viewConfig !== void 0 ? viewConfig : {};
|
|
19998
|
+
const telemetryProps = { ...rest };
|
|
19999
|
+
if (Array.isArray(runtimeFilters)) {
|
|
20000
|
+
telemetryProps.runtimeFilters = describeRuntimeFilters(runtimeFilters);
|
|
20001
|
+
}
|
|
20002
|
+
if (Array.isArray(runtimeParameters)) {
|
|
20003
|
+
telemetryProps.runtimeParameters = describeRuntimeParameters(runtimeParameters);
|
|
20004
|
+
}
|
|
20005
|
+
return telemetryProps;
|
|
20006
|
+
};
|
|
20007
|
+
|
|
19763
20008
|
var eventemitter3 = createCommonjsModule(function (module) {
|
|
19764
20009
|
|
|
19765
20010
|
var has = Object.prototype.hasOwnProperty
|
|
@@ -21899,6 +22144,97 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
21899
22144
|
// truthy, so null or '' leaves the previous embed's values in place. '&' is
|
|
21900
22145
|
// truthy and parses to {}.
|
|
21901
22146
|
const NO_RUNTIME_PARAMS = '&';
|
|
22147
|
+
/**
|
|
22148
|
+
* Params kept on the iframe `src` when `excludeConfigFromURL` is set. The rest
|
|
22149
|
+
* are sent in the APP_INIT payload.
|
|
22150
|
+
* @internal
|
|
22151
|
+
*/
|
|
22152
|
+
const BOOTSTRAP_URL_PARAMS = new Set([
|
|
22153
|
+
// Marks the app as embedded.
|
|
22154
|
+
Param.EmbedApp,
|
|
22155
|
+
// The host page URL, used to validate the postMessage origin.
|
|
22156
|
+
Param.HostAppUrl,
|
|
22157
|
+
// The SDK version.
|
|
22158
|
+
Param.Version,
|
|
22159
|
+
// The authentication type set in init.
|
|
22160
|
+
Param.AuthType,
|
|
22161
|
+
// Whether the app signs the user in automatically.
|
|
22162
|
+
Param.AutoLogin,
|
|
22163
|
+
// Stops the app from redirecting to its login page.
|
|
22164
|
+
Param.DisableLoginRedirect,
|
|
22165
|
+
// Forces the SAML redirect for EmbeddedSSO.
|
|
22166
|
+
Param.ForceSAMLAutoRedirect,
|
|
22167
|
+
// Set for cookieless trusted authentication.
|
|
22168
|
+
Param.cookieless,
|
|
22169
|
+
// Lets the app use the pre-fetched auth info.
|
|
22170
|
+
Param.preAuthCache,
|
|
22171
|
+
// Blocks access to the full app outside the embed.
|
|
22172
|
+
Param.blockNonEmbedFullAppAccess,
|
|
22173
|
+
// The org to load, which the auth info depends on.
|
|
22174
|
+
Param.OverrideOrgId,
|
|
22175
|
+
// The host window height when the iframe loads.
|
|
22176
|
+
Param.ViewPortHeight,
|
|
22177
|
+
// The host window width when the iframe loads.
|
|
22178
|
+
Param.ViewPortWidth,
|
|
22179
|
+
// The app's client log level.
|
|
22180
|
+
Param.ClientLogLevel,
|
|
22181
|
+
// Lets the app override the native console.
|
|
22182
|
+
Param.OverrideNativeConsole,
|
|
22183
|
+
// An extra Pendo tracking key.
|
|
22184
|
+
Param.PendoTrackingKey,
|
|
22185
|
+
// The locale for number formatting.
|
|
22186
|
+
Param.NumberFormatLocale,
|
|
22187
|
+
// The locale for date formatting.
|
|
22188
|
+
Param.DateFormatLocale,
|
|
22189
|
+
// The currency format.
|
|
22190
|
+
Param.CurrencyFormat,
|
|
22191
|
+
// The UI language.
|
|
22192
|
+
Param.Locale,
|
|
22193
|
+
// Turns on dark mode.
|
|
22194
|
+
Param.IsDarkMode,
|
|
22195
|
+
// Turns on the radiant theme that dark mode needs.
|
|
22196
|
+
Param.RadiantThemeEnabled,
|
|
22197
|
+
// Marks a SearchEmbed or SearchBarEmbed.
|
|
22198
|
+
Param.searchEmbed,
|
|
22199
|
+
// Marks a LiveboardEmbed.
|
|
22200
|
+
Param.livedBoardEmbed,
|
|
22201
|
+
// Marks a SpotterAgentEmbed.
|
|
22202
|
+
Param.isSpotterAgentEmbed,
|
|
22203
|
+
// Marks a SpotterEmbed.
|
|
22204
|
+
Param.SpotterEnabled,
|
|
22205
|
+
// Marks an AppEmbed.
|
|
22206
|
+
Param.IsFullAppEmbed,
|
|
22207
|
+
// Legacy flag for the onBeforeGetVizData API intercept.
|
|
22208
|
+
Param.IsOnBeforeGetVizDataInterceptEnabled,
|
|
22209
|
+
// Lets the host override links in the app.
|
|
22210
|
+
Param.LinkOverride,
|
|
22211
|
+
// Turns on version 2 of the link overrides.
|
|
22212
|
+
Param.EnableLinkOverridesV2,
|
|
22213
|
+
// Stops links from opening in a new tab.
|
|
22214
|
+
Param.DisableRedirectionLinksInNewTab,
|
|
22215
|
+
// Uses replaceState instead of pushState for app navigation.
|
|
22216
|
+
Param.OverrideHistoryState,
|
|
22217
|
+
// Shows search results as a table.
|
|
22218
|
+
Param.ForceTable,
|
|
22219
|
+
// The URL of the custom string IDs file.
|
|
22220
|
+
Param.StringIDsUrl,
|
|
22221
|
+
// The data sources that search opens with.
|
|
22222
|
+
Param.DataSources,
|
|
22223
|
+
// Exposes translation IDs in the app.
|
|
22224
|
+
Param.ExposeTranslationIDs,
|
|
22225
|
+
// The URL of the custom icon sprite.
|
|
22226
|
+
Param.IconSpriteUrl,
|
|
22227
|
+
// The tag that filters the metadata lists in an AppEmbed.
|
|
22228
|
+
Param.Tag,
|
|
22229
|
+
// Set when a Liveboard embed shows a single visualization (vizId).
|
|
22230
|
+
Param.vizEmbed,
|
|
22231
|
+
// Whether search opens with the last-selected data sources.
|
|
22232
|
+
Param.UseLastSelectedDataSource,
|
|
22233
|
+
// The query mode Spotter opens in.
|
|
22234
|
+
Param.DefaultQueryMode,
|
|
22235
|
+
// The initial search query. Omitted with excludeSearchTokenStringFromURL.
|
|
22236
|
+
Param.searchTokenString,
|
|
22237
|
+
]);
|
|
21902
22238
|
/**
|
|
21903
22239
|
* The event id map from v2 event names to v1 event id
|
|
21904
22240
|
* v1 events are the classic embed events implemented in Blink v1
|
|
@@ -21927,6 +22263,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
21927
22263
|
this.embedNodeKey = '__tsEmbed';
|
|
21928
22264
|
this.embedContainerLoadedKey = '__tsEmbedContainerLoaded';
|
|
21929
22265
|
this.isAppInitialized = false;
|
|
22266
|
+
this.initDataParams = {};
|
|
21930
22267
|
/**
|
|
21931
22268
|
* Should we encode URL Query Params using base64 encoding which ThoughtSpot
|
|
21932
22269
|
* will generate for embedding. This provides additional security to
|
|
@@ -21961,7 +22298,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
21961
22298
|
*/
|
|
21962
22299
|
this.appInitCb = async (_, responder) => {
|
|
21963
22300
|
try {
|
|
21964
|
-
const appInitData = await this.getAppInitData();
|
|
22301
|
+
const appInitData = this.withInitDataParams(await this.getAppInitData());
|
|
21965
22302
|
this.isAppInitialized = true;
|
|
21966
22303
|
responder({
|
|
21967
22304
|
type: exports.EmbedEvent.APP_INIT,
|
|
@@ -22115,9 +22452,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
22115
22452
|
...viewConfig,
|
|
22116
22453
|
};
|
|
22117
22454
|
this.registerAppInit();
|
|
22118
|
-
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE,
|
|
22119
|
-
...viewConfig,
|
|
22120
|
-
});
|
|
22455
|
+
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE, summarizeRuntimeDataForTelemetry(viewConfig));
|
|
22121
22456
|
const embedConfig = getEmbedConfig();
|
|
22122
22457
|
if (embedConfig) {
|
|
22123
22458
|
this.embedConfig = embedConfig;
|
|
@@ -22389,6 +22724,18 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
22389
22724
|
async getAppInitData() {
|
|
22390
22725
|
return this.getDefaultAppInitData();
|
|
22391
22726
|
}
|
|
22727
|
+
withInitDataParams(appInitData) {
|
|
22728
|
+
if (isEmpty_1(this.initDataParams)) {
|
|
22729
|
+
return appInitData;
|
|
22730
|
+
}
|
|
22731
|
+
return {
|
|
22732
|
+
...appInitData,
|
|
22733
|
+
embedParams: {
|
|
22734
|
+
...this.initDataParams,
|
|
22735
|
+
...(appInitData.embedParams || {}),
|
|
22736
|
+
},
|
|
22737
|
+
};
|
|
22738
|
+
}
|
|
22392
22739
|
/**
|
|
22393
22740
|
* Helper method to refresh/update auth token for TrustedAuthTokenCookieless auth type
|
|
22394
22741
|
* @param responder - Function to send response back
|
|
@@ -22448,7 +22795,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
22448
22795
|
* @returns queryParams
|
|
22449
22796
|
*/
|
|
22450
22797
|
getBaseQueryParams(queryParams = {}) {
|
|
22451
|
-
var _a, _b, _c, _d;
|
|
22798
|
+
var _a, _b, _c, _d, _e;
|
|
22452
22799
|
let hostAppUrl = ((_a = window === null || window === void 0 ? void 0 : window.location) === null || _a === void 0 ? void 0 : _a.host) || '';
|
|
22453
22800
|
// The below check is needed because TS Cloud firewall, blocks
|
|
22454
22801
|
// localhost/127.0.0.1 in any url param.
|
|
@@ -22485,6 +22832,15 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
22485
22832
|
if (this.embedConfig.currencyFormat) {
|
|
22486
22833
|
queryParams[Param.CurrencyFormat] = this.embedConfig.currencyFormat;
|
|
22487
22834
|
}
|
|
22835
|
+
// The view config wins over init, so an embed can opt out of a dark
|
|
22836
|
+
// mode set in `init`. `??` and not `||`, so that an explicit `false`
|
|
22837
|
+
// overrides an init-level `true`.
|
|
22838
|
+
const isDarkMode = (_c = this.viewConfig.isDarkMode) !== null && _c !== void 0 ? _c : this.embedConfig.isDarkMode;
|
|
22839
|
+
setParamIfDefined(queryParams, Param.IsDarkMode, isDarkMode, true);
|
|
22840
|
+
// The app's dark mode lives in its radiant theme, so turn that on too.
|
|
22841
|
+
if (isDarkMode) {
|
|
22842
|
+
queryParams[Param.RadiantThemeEnabled] = true;
|
|
22843
|
+
}
|
|
22488
22844
|
const { disabledActions, disabledActionReason, hiddenActions, visibleActions, hiddenTabs, visibleTabs, showAlerts, additionalFlags: additionalFlagsFromView, locale, customizations, contextMenuTrigger, linkOverride, enableLinkOverridesV2, insertInToSlide, disableRedirectionLinksInNewTab, overrideOrgId, overrideHistoryState, exposeTranslationIDs, primaryAction, } = this.viewConfig;
|
|
22489
22845
|
const { additionalFlags: additionalFlagsFromInit } = this.embedConfig;
|
|
22490
22846
|
const additionalFlags = {
|
|
@@ -22550,7 +22906,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
22550
22906
|
if (spriteUrl) {
|
|
22551
22907
|
queryParams[Param.IconSpriteUrl] = spriteUrl.replace('https://', '');
|
|
22552
22908
|
}
|
|
22553
|
-
const stringIDsUrl = ((
|
|
22909
|
+
const stringIDsUrl = ((_d = customizations === null || customizations === void 0 ? void 0 : customizations.content) === null || _d === void 0 ? void 0 : _d.stringIDsUrl) || ((_e = embedCustomizations === null || embedCustomizations === void 0 ? void 0 : embedCustomizations.content) === null || _e === void 0 ? void 0 : _e.stringIDsUrl);
|
|
22554
22910
|
if (stringIDsUrl) {
|
|
22555
22911
|
queryParams[Param.StringIDsUrl] = stringIDsUrl;
|
|
22556
22912
|
}
|
|
@@ -22604,13 +22960,32 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
22604
22960
|
return path;
|
|
22605
22961
|
}
|
|
22606
22962
|
getEmbedParams() {
|
|
22607
|
-
const queryParams = this.
|
|
22963
|
+
const queryParams = this.getUrlQueryParamsObject();
|
|
22608
22964
|
return getQueryParamString(queryParams);
|
|
22609
22965
|
}
|
|
22610
22966
|
getEmbedParamsObject() {
|
|
22611
22967
|
const params = this.getBaseQueryParams();
|
|
22612
22968
|
return params;
|
|
22613
22969
|
}
|
|
22970
|
+
getUrlQueryParamsObject() {
|
|
22971
|
+
const queryParams = this.getEmbedParamsObject();
|
|
22972
|
+
if (!this.isConfigExcludedFromUrl()) {
|
|
22973
|
+
this.initDataParams = {};
|
|
22974
|
+
return queryParams;
|
|
22975
|
+
}
|
|
22976
|
+
const urlParams = {};
|
|
22977
|
+
const excludedParams = {};
|
|
22978
|
+
Object.entries(queryParams).forEach(([key, value]) => {
|
|
22979
|
+
if (BOOTSTRAP_URL_PARAMS.has(key)) {
|
|
22980
|
+
urlParams[key] = value;
|
|
22981
|
+
}
|
|
22982
|
+
else {
|
|
22983
|
+
excludedParams[key] = deserializeParam(value);
|
|
22984
|
+
}
|
|
22985
|
+
});
|
|
22986
|
+
this.initDataParams = excludedParams;
|
|
22987
|
+
return urlParams;
|
|
22988
|
+
}
|
|
22614
22989
|
getRootIframeSrc() {
|
|
22615
22990
|
const query = this.getEmbedParams();
|
|
22616
22991
|
return this.getEmbedBasePath(query);
|
|
@@ -22849,26 +23224,12 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
22849
23224
|
return placeholder;
|
|
22850
23225
|
}
|
|
22851
23226
|
/**
|
|
22852
|
-
* Resolves the configured preRenderContainer
|
|
22853
|
-
*
|
|
22854
|
-
*
|
|
22855
|
-
*
|
|
22856
|
-
*
|
|
22857
|
-
*
|
|
22858
|
-
* scrolling ancestor, falling back to `document.body`.
|
|
22859
|
-
*
|
|
22860
|
-
* The wrapper is absolutely positioned, so it follows the page for free —
|
|
22861
|
-
* but only while it sits inside whatever scrolls. `document.body` is right
|
|
22862
|
-
* only when the document itself is the scroller; an app that scrolls an
|
|
22863
|
-
* inner element instead left the frame pinned to the viewport while the page
|
|
22864
|
-
* moved under it (SCAL-338563). Being inside the scroller also lets wheel
|
|
22865
|
-
* events chain out of the frame into it, which they cannot do from
|
|
22866
|
-
* `document.body`.
|
|
22867
|
-
*
|
|
22868
|
-
* A scrolling ancestor is layout chrome rather than route content, so it
|
|
22869
|
-
* outlives the embed in practice; and if it does go, the host element goes
|
|
22870
|
-
* with it and this instance is remounting anyway.
|
|
22871
|
-
* `reconcilePreRenderContainer` re-runs this on a detached container.
|
|
23227
|
+
* Resolves the configured preRenderContainer, or defaults to the host's
|
|
23228
|
+
* nearest scrolling ancestor (document.body if none). The absolutely
|
|
23229
|
+
* positioned wrapper only follows the page while it sits inside what
|
|
23230
|
+
* scrolls, so body is right only when the document itself scrolls — an inner
|
|
23231
|
+
* scroller left the frame pinned to the viewport (SCAL-338563). A string
|
|
23232
|
+
* selector is re-queried each call so a remounted container resolves fresh.
|
|
22872
23233
|
*/
|
|
22873
23234
|
resolvePreRenderContainerTarget() {
|
|
22874
23235
|
var _a;
|
|
@@ -23310,9 +23671,16 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
23310
23671
|
* @param args
|
|
23311
23672
|
*/
|
|
23312
23673
|
async render() {
|
|
23674
|
+
var _a, _b, _c;
|
|
23313
23675
|
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_RENDER_CALLED, {
|
|
23314
23676
|
embedComponentType: this.viewConfig.embedComponentType,
|
|
23315
23677
|
});
|
|
23678
|
+
uploadMixpanelEvent(MIXPANEL_EVENT.VISUAL_SDK_INIT_ACTIONS, {
|
|
23679
|
+
embedComponentType: this.viewConfig.embedComponentType,
|
|
23680
|
+
hiddenActions: (_a = this.viewConfig.hiddenActions) !== null && _a !== void 0 ? _a : [],
|
|
23681
|
+
visibleActions: (_b = this.viewConfig.visibleActions) !== null && _b !== void 0 ? _b : [],
|
|
23682
|
+
disabledActions: (_c = this.viewConfig.disabledActions) !== null && _c !== void 0 ? _c : [],
|
|
23683
|
+
});
|
|
23316
23684
|
if (!getIsInitCalled()) {
|
|
23317
23685
|
logger$3.error(ERROR_MESSAGE.RENDER_CALLED_BEFORE_INIT);
|
|
23318
23686
|
}
|
|
@@ -23547,6 +23915,26 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
23547
23915
|
this.isRendered = true;
|
|
23548
23916
|
return this.renderIFrame(prerenderFrameSrc);
|
|
23549
23917
|
}
|
|
23918
|
+
isConfigExcludedFromUrl() {
|
|
23919
|
+
var _a, _b, _c;
|
|
23920
|
+
const flag = (_b = (_a = this.viewConfig.additionalFlags) === null || _a === void 0 ? void 0 : _a.excludeConfigFromURL) !== null && _b !== void 0 ? _b : (_c = this.embedConfig.additionalFlags) === null || _c === void 0 ? void 0 : _c.excludeConfigFromURL;
|
|
23921
|
+
return flag === true || flag === 'true';
|
|
23922
|
+
}
|
|
23923
|
+
async triggerUpdateEmbedParams() {
|
|
23924
|
+
try {
|
|
23925
|
+
const params = await this.getUpdateEmbedParamsObject();
|
|
23926
|
+
this.trigger(exports.HostEvent.UpdateEmbedParams, params);
|
|
23927
|
+
}
|
|
23928
|
+
catch (error) {
|
|
23929
|
+
logger$3.error(ERROR_MESSAGE.UPDATE_PARAMS_FAILED, error);
|
|
23930
|
+
this.handleError({
|
|
23931
|
+
errorType: ErrorDetailsTypes.API,
|
|
23932
|
+
message: (error === null || error === void 0 ? void 0 : error.message) || ERROR_MESSAGE.UPDATE_PARAMS_FAILED,
|
|
23933
|
+
code: EmbedErrorCodes.UPDATE_PARAMS_FAILED,
|
|
23934
|
+
error: (error === null || error === void 0 ? void 0 : error.message) || error,
|
|
23935
|
+
});
|
|
23936
|
+
}
|
|
23937
|
+
}
|
|
23550
23938
|
beforePrerenderVisible() {
|
|
23551
23939
|
// We can ignore this as its a bit expensive and the newer customers
|
|
23552
23940
|
// have moved on to UpdateEmbedParams supported clusters
|
|
@@ -23557,17 +23945,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
23557
23945
|
this.preRenderParamsApplied = new Promise((resolve) => {
|
|
23558
23946
|
this.executeAfterEmbedContainerLoaded(async () => {
|
|
23559
23947
|
try {
|
|
23560
|
-
|
|
23561
|
-
this.trigger(exports.HostEvent.UpdateEmbedParams, params);
|
|
23562
|
-
}
|
|
23563
|
-
catch (error) {
|
|
23564
|
-
logger$3.error(ERROR_MESSAGE.UPDATE_PARAMS_FAILED, error);
|
|
23565
|
-
this.handleError({
|
|
23566
|
-
errorType: ErrorDetailsTypes.API,
|
|
23567
|
-
message: (error === null || error === void 0 ? void 0 : error.message) || ERROR_MESSAGE.UPDATE_PARAMS_FAILED,
|
|
23568
|
-
code: EmbedErrorCodes.UPDATE_PARAMS_FAILED,
|
|
23569
|
-
error: (error === null || error === void 0 ? void 0 : error.message) || error,
|
|
23570
|
-
});
|
|
23948
|
+
await this.triggerUpdateEmbedParams();
|
|
23571
23949
|
}
|
|
23572
23950
|
finally {
|
|
23573
23951
|
setTimeout(resolve, UPDATE_EMBED_PARAMS_SETTLE_MS);
|
|
@@ -23701,19 +24079,21 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
23701
24079
|
return;
|
|
23702
24080
|
}
|
|
23703
24081
|
const { zIndex } = this.getPreRenderConfig();
|
|
24082
|
+
// A hidden pre-render frame must add no scroll space to the host page.
|
|
23704
24083
|
const preRenderHideStyles = {
|
|
23705
24084
|
opacity: '0',
|
|
23706
24085
|
pointerEvents: 'none',
|
|
23707
24086
|
zIndex: zIndex !== undefined ? String(zIndex) : '-1000',
|
|
23708
|
-
|
|
24087
|
+
// Resolves to the viewport, so the hidden frame belongs to no
|
|
24088
|
+
// scroll container's overflow; syncPreRenderStyle restores absolute
|
|
24089
|
+
// on show.
|
|
24090
|
+
position: 'fixed',
|
|
23709
24091
|
top: '0',
|
|
23710
24092
|
left: '0',
|
|
23711
24093
|
overflow: 'hidden',
|
|
23712
|
-
//
|
|
23713
|
-
//
|
|
23714
|
-
//
|
|
23715
|
-
// downwards, so a hidden frame parked above the top edge adds
|
|
23716
|
-
// none, where one left at full height shows as blank scroll space.
|
|
24094
|
+
// The one exception: a transformed or contained ancestor captures
|
|
24095
|
+
// `fixed`; parking above the top edge keeps it out of that
|
|
24096
|
+
// overflow.
|
|
23717
24097
|
transform: PRERENDER_PARKED_TRANSFORM,
|
|
23718
24098
|
};
|
|
23719
24099
|
setStyleProperties(this.preRenderWrapper, preRenderHideStyles);
|
|
@@ -23902,7 +24282,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
23902
24282
|
* @param dataSources A list of data source GUIDs
|
|
23903
24283
|
*/
|
|
23904
24284
|
getIFrameSrc() {
|
|
23905
|
-
const queryParams = this.
|
|
24285
|
+
const queryParams = this.getUrlQueryParamsObject();
|
|
23906
24286
|
const path = 'search-bar-embed';
|
|
23907
24287
|
let query = '';
|
|
23908
24288
|
const queryParamsString = getQueryParamString(queryParams, true);
|
|
@@ -24089,7 +24469,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
24089
24469
|
}
|
|
24090
24470
|
getEmbedParams() {
|
|
24091
24471
|
const { runtimeParameters, runtimeFilters, excludeRuntimeParametersfromURL, excludeRuntimeFiltersfromURL, } = this.viewConfig;
|
|
24092
|
-
const queryParams = this.
|
|
24472
|
+
const queryParams = this.getUrlQueryParamsObject();
|
|
24093
24473
|
let query = '';
|
|
24094
24474
|
const queryParamsString = getQueryParamString(queryParams, true);
|
|
24095
24475
|
if (queryParamsString) {
|
|
@@ -24422,8 +24802,11 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
24422
24802
|
embedParams: { visualOverridesParams: visualOverrides },
|
|
24423
24803
|
};
|
|
24424
24804
|
}
|
|
24805
|
+
// The app reads enableSpotterInstructionAndMoreSettings from the top level
|
|
24806
|
+
// of embedParams, so lift it out of the sidebar config.
|
|
24807
|
+
const { enableSpotterInstructionAndMoreSettings, ...sidebarConfigRest } = spotterSidebarConfig || {};
|
|
24425
24808
|
const resolvedSidebarConfig = {
|
|
24426
|
-
...
|
|
24809
|
+
...sidebarConfigRest,
|
|
24427
24810
|
...(resolvedEnablePastConversations !== undefined && {
|
|
24428
24811
|
enablePastConversationsSidebar: resolvedEnablePastConversations,
|
|
24429
24812
|
}),
|
|
@@ -24445,6 +24828,9 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
24445
24828
|
embedParams: {
|
|
24446
24829
|
...(defaultAppInitData.embedParams || {}),
|
|
24447
24830
|
spotterSidebarConfig: resolvedSidebarConfig,
|
|
24831
|
+
...(enableSpotterInstructionAndMoreSettings !== undefined
|
|
24832
|
+
? { enableSpotterInstructionAndMoreSettings }
|
|
24833
|
+
: {}),
|
|
24448
24834
|
...(visualOverrides !== undefined ? { visualOverridesParams: visualOverrides } : {}),
|
|
24449
24835
|
},
|
|
24450
24836
|
};
|
|
@@ -24485,7 +24871,19 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
24485
24871
|
spotterAnalystConfig,
|
|
24486
24872
|
},
|
|
24487
24873
|
};
|
|
24488
|
-
}
|
|
24874
|
+
}
|
|
24875
|
+
/**
|
|
24876
|
+
* The Spotter experience version to load in the embedded view.
|
|
24877
|
+
* @version SDK: 1.53.0 | ThoughtSpot Cloud: 26.11.0.cl
|
|
24878
|
+
* @group Embed components
|
|
24879
|
+
*/
|
|
24880
|
+
var SpotterExperienceVersion;
|
|
24881
|
+
(function (SpotterExperienceVersion) {
|
|
24882
|
+
/**
|
|
24883
|
+
* The Spotter experience version introduced in ThoughtSpot 26.11.
|
|
24884
|
+
*/
|
|
24885
|
+
SpotterExperienceVersion["SPOTTER_2026_11"] = "spotter_2026_11";
|
|
24886
|
+
})(SpotterExperienceVersion || (SpotterExperienceVersion = {}));
|
|
24489
24887
|
|
|
24490
24888
|
function buildSpotterVizAppInitData(initData, viewConfig) {
|
|
24491
24889
|
const { spotterViz } = viewConfig;
|
|
@@ -24682,12 +25080,12 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
24682
25080
|
* embedded Liveboard or visualization.
|
|
24683
25081
|
*/
|
|
24684
25082
|
getEmbedParams() {
|
|
24685
|
-
const params = this.
|
|
25083
|
+
const params = this.getUrlQueryParamsObject();
|
|
24686
25084
|
return getQueryParamString(params, true);
|
|
24687
25085
|
}
|
|
24688
25086
|
getEmbedParamsObject() {
|
|
24689
25087
|
var _a;
|
|
24690
|
-
const { tag, hideTagFilterChips, hideObjects, liveboardV2, showPrimaryNavbar, disableProfileAndHelp, hideHamburger, hideObjectSearch, hideNotification, hideApplicationSwitcher, hideOrgSwitcher, enableSearchAssist, newConnectionsExperience, dataPanelV2 = true, updatedSpotterExperience, hideLiveboardHeader = false, showLiveboardTitle = true, showLiveboardDescription = true, showMaskedFilterChip = false, isLiveboardMasterpiecesEnabled, newChartsLibrary, hideHomepageLeftNav = false, modularHomeExperience, isLiveboardHeaderSticky = true, enableAskSage, collapseSearchBarInitially = false, enable2ColumnLayout, isLiveboardAlwaysOn12ColLayout, enableCustomColumnGroups = false, dataPanelCustomGroupsAccordionInitialState = DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL, collapseSearchBar = true, isLiveboardCompactHeaderEnabled, showLiveboardVerifiedBadge = true, showLiveboardReverifyBanner = true, hideIrrelevantChipsInLiveboardTabs, isEnhancedFilterInteractivityEnabled, homePageSearchBarMode, isUnifiedSearchExperienceEnabled = true, enablePendoHelp = true, discoveryExperience, coverAndFilterOptionInPDF, isLiveboardStylingAndGroupingEnabled, liveboardGutter, isPNGInScheduledEmailsEnabled = false, isLiveboardXLSXCSVDownloadEnabled, isGranularXLSXCSVSchedulesEnabled, isCentralizedLiveboardFilterUXEnabled = false, isScopedLiveboardFilteringEnabled, isLinkParametersEnabled, updatedSpotterChatPrompt, showSpotterRadiance, defaultQueryMode, enableStopAnswerGenerationEmbed, spotterChatConfig, spotterDataSources, isThisPeriodInDateFiltersEnabled, enableHomepageAnnouncement = false, isContinuousLiveboardPDFEnabled, enableLiveboardDataCache, hideAnswerEditPanel, } = this.viewConfig;
|
|
25088
|
+
const { tag, hideTagFilterChips, hideObjects, liveboardV2, showPrimaryNavbar, disableProfileAndHelp, hideHamburger, hideObjectSearch, hideNotification, hideApplicationSwitcher, hideOrgSwitcher, enableSearchAssist, newConnectionsExperience, dataPanelV2 = true, updatedSpotterExperience, hideLiveboardHeader = false, showLiveboardTitle = true, showLiveboardDescription = true, showMaskedFilterChip = false, isLiveboardMasterpiecesEnabled, newChartsLibrary, hideHomepageLeftNav = false, modularHomeExperience, isLiveboardHeaderSticky = true, enableAskSage, collapseSearchBarInitially = false, enable2ColumnLayout, isLiveboardAlwaysOn12ColLayout, enableCustomColumnGroups = false, dataPanelCustomGroupsAccordionInitialState = DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL, collapseSearchBar = true, isLiveboardCompactHeaderEnabled, showLiveboardVerifiedBadge = true, showLiveboardReverifyBanner = true, hideIrrelevantChipsInLiveboardTabs, isEnhancedFilterInteractivityEnabled, homePageSearchBarMode, isUnifiedSearchExperienceEnabled = true, enablePendoHelp = true, discoveryExperience, coverAndFilterOptionInPDF, isLiveboardStylingAndGroupingEnabled, liveboardGutter, isPNGInScheduledEmailsEnabled = false, isLiveboardXLSXCSVDownloadEnabled, isGranularXLSXCSVSchedulesEnabled, isCentralizedLiveboardFilterUXEnabled = false, isScopedLiveboardFilteringEnabled, isLinkParametersEnabled, updatedSpotterChatPrompt, showSpotterRadiance, defaultQueryMode, enableStopAnswerGenerationEmbed, spotterChatConfig, spotterDataSources, isThisPeriodInDateFiltersEnabled, enableHomepageAnnouncement = false, isContinuousLiveboardPDFEnabled, enableLiveboardDataCache, hideAnswerEditPanel, spotterExperienceVersion, } = this.viewConfig;
|
|
24691
25089
|
let params = {};
|
|
24692
25090
|
params[Param.PrimaryNavHidden] = !showPrimaryNavbar;
|
|
24693
25091
|
params[Param.HideProfleAndHelp] = !!disableProfileAndHelp;
|
|
@@ -24742,6 +25140,9 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
24742
25140
|
if (spotterDataSources && spotterDataSources.length) {
|
|
24743
25141
|
params[Param.SpotterDataSources] = JSON.stringify(spotterDataSources);
|
|
24744
25142
|
}
|
|
25143
|
+
if (spotterExperienceVersion !== undefined) {
|
|
25144
|
+
params[Param.SpotterExperienceVersion] = spotterExperienceVersion;
|
|
25145
|
+
}
|
|
24745
25146
|
// Handle spotterChatConfig params
|
|
24746
25147
|
if (spotterChatConfig) {
|
|
24747
25148
|
const { hideToolResponseCardBranding, toolResponseCardBrandingLabel, spotterFileUploadEnabled, spotterFileUploadFileTypes, enableStarterPrompts, openSpotterOnLiveboardByDefault, } = spotterChatConfig;
|
|
@@ -24860,7 +25261,7 @@ mutation GetUnsavedAnswerTML($session: BachSessionIdInput!, $exportDependencies:
|
|
|
24860
25261
|
}
|
|
24861
25262
|
// Navigation V1/V2 and home page V1/V2 are deprecated. V3 is now the
|
|
24862
25263
|
// default experience, Need to send navigationVersion=v3 and
|
|
24863
|
-
// homepageVersion=v3 even when the no discoveryExperience /
|
|
25264
|
+
// homepageVersion=v3 even when the no discoveryExperience /
|
|
24864
25265
|
// modularHomeExperience config is set. Without these
|
|
24865
25266
|
// params, older TSA versions (< 26.7) fall back to V2 for nav and
|
|
24866
25267
|
// home page, so the defaults must be sent explicitly from the SDK.
|
|
@@ -25109,6 +25510,21 @@ query GetEurekaVizSnapshots(
|
|
|
25109
25510
|
document.head.insertAdjacentHTML('beforeend', previewStyles);
|
|
25110
25511
|
};
|
|
25111
25512
|
|
|
25513
|
+
function buildLiveboardOverrideAppInitData(initData, viewConfig) {
|
|
25514
|
+
var _a;
|
|
25515
|
+
const { liveboardOverride } = viewConfig;
|
|
25516
|
+
// ThoughtSpot ignores an override with no data source entries; skip it.
|
|
25517
|
+
if (!((_a = liveboardOverride === null || liveboardOverride === void 0 ? void 0 : liveboardOverride.dataSourceOverride) === null || _a === void 0 ? void 0 : _a.length))
|
|
25518
|
+
return initData;
|
|
25519
|
+
return {
|
|
25520
|
+
...initData,
|
|
25521
|
+
embedParams: {
|
|
25522
|
+
...(initData.embedParams || {}),
|
|
25523
|
+
liveboardOverride,
|
|
25524
|
+
},
|
|
25525
|
+
};
|
|
25526
|
+
}
|
|
25527
|
+
|
|
25112
25528
|
/**
|
|
25113
25529
|
* Copyright (c) 2022
|
|
25114
25530
|
*
|
|
@@ -25178,14 +25594,15 @@ query GetEurekaVizSnapshots(
|
|
|
25178
25594
|
async getAppInitData() {
|
|
25179
25595
|
const defaultAppInitData = await super.getAppInitData();
|
|
25180
25596
|
const vizInitData = buildSpotterVizAppInitData(defaultAppInitData, this.viewConfig);
|
|
25181
|
-
|
|
25597
|
+
const starterPromptsInitData = buildStarterPromptsAppInitData(vizInitData, this.viewConfig);
|
|
25598
|
+
return buildLiveboardOverrideAppInitData(starterPromptsInitData, this.viewConfig);
|
|
25182
25599
|
}
|
|
25183
25600
|
/**
|
|
25184
25601
|
* Construct a map of params to be passed on to the
|
|
25185
25602
|
* embedded Liveboard or visualization.
|
|
25186
25603
|
*/
|
|
25187
25604
|
getEmbedParams() {
|
|
25188
|
-
const params = this.
|
|
25605
|
+
const params = this.getUrlQueryParamsObject();
|
|
25189
25606
|
const queryParams = getQueryParamString(params, true);
|
|
25190
25607
|
return queryParams;
|
|
25191
25608
|
}
|
|
@@ -25193,7 +25610,7 @@ query GetEurekaVizSnapshots(
|
|
|
25193
25610
|
var _a;
|
|
25194
25611
|
let params = {};
|
|
25195
25612
|
params = this.getBaseQueryParams(params);
|
|
25196
|
-
const { enableVizTransformations, visibleVizs, liveboardV2, vizId, hideTabPanel, activeTabId, hideLiveboardHeader, showLiveboardDescription, showLiveboardTitle, isLiveboardHeaderSticky = true, isLiveboardCompactHeaderEnabled, showLiveboardVerifiedBadge = true, showLiveboardReverifyBanner = true, hideIrrelevantChipsInLiveboardTabs, showMaskedFilterChip = false, isLiveboardMasterpiecesEnabled, newChartsLibrary, isEnhancedFilterInteractivityEnabled, enableAskSage, enable2ColumnLayout, isLiveboardAlwaysOn12ColLayout, dataPanelV2 = true, updatedSpotterExperience, enableCustomColumnGroups = false, oAuthPollingInterval, isForceRedirect, dataSourceId, coverAndFilterOptionInPDF, isLiveboardStylingAndGroupingEnabled, liveboardGutter, isPNGInScheduledEmailsEnabled = false, isLiveboardXLSXCSVDownloadEnabled, isGranularXLSXCSVSchedulesEnabled, showSpotterLimitations, isCentralizedLiveboardFilterUXEnabled = false, isScopedLiveboardFilteringEnabled, isLinkParametersEnabled, updatedSpotterChatPrompt, showSpotterRadiance, enableStopAnswerGenerationEmbed, spotterChatConfig, isThisPeriodInDateFiltersEnabled, isContinuousLiveboardPDFEnabled, enableLiveboardDataCache, } = this.viewConfig;
|
|
25613
|
+
const { enableVizTransformations, visibleVizs, liveboardV2, vizId, hideTabPanel, activeTabId, hideLiveboardHeader, showLiveboardDescription, showLiveboardTitle, isLiveboardHeaderSticky = true, isLiveboardCompactHeaderEnabled, showLiveboardVerifiedBadge = true, showLiveboardReverifyBanner = true, hideIrrelevantChipsInLiveboardTabs, showMaskedFilterChip = false, isLiveboardMasterpiecesEnabled, newChartsLibrary, isEnhancedFilterInteractivityEnabled, enableAskSage, enable2ColumnLayout, isLiveboardAlwaysOn12ColLayout, dataPanelV2 = true, updatedSpotterExperience, enableCustomColumnGroups = false, oAuthPollingInterval, isForceRedirect, dataSourceId, coverAndFilterOptionInPDF, isLiveboardStylingAndGroupingEnabled, liveboardGutter, isPNGInScheduledEmailsEnabled = false, isLiveboardXLSXCSVDownloadEnabled, isGranularXLSXCSVSchedulesEnabled, showSpotterLimitations, isCentralizedLiveboardFilterUXEnabled = false, isScopedLiveboardFilteringEnabled, isLinkParametersEnabled, updatedSpotterChatPrompt, showSpotterRadiance, enableStopAnswerGenerationEmbed, spotterChatConfig, isThisPeriodInDateFiltersEnabled, isContinuousLiveboardPDFEnabled, enableLiveboardDataCache, spotterExperienceVersion, } = this.viewConfig;
|
|
25197
25614
|
const preventLiveboardFilterRemoval = this.viewConfig.preventLiveboardFilterRemoval
|
|
25198
25615
|
|| this.viewConfig.preventPinboardFilterRemoval;
|
|
25199
25616
|
(_a = this.fullHeightController) === null || _a === void 0 ? void 0 : _a.addQueryParams(params);
|
|
@@ -25255,6 +25672,9 @@ query GetEurekaVizSnapshots(
|
|
|
25255
25672
|
if (isLiveboardStylingAndGroupingEnabled !== undefined) {
|
|
25256
25673
|
params[Param.IsLiveboardStylingAndGroupingEnabled] = isLiveboardStylingAndGroupingEnabled;
|
|
25257
25674
|
}
|
|
25675
|
+
if (spotterExperienceVersion !== undefined) {
|
|
25676
|
+
params[Param.SpotterExperienceVersion] = spotterExperienceVersion;
|
|
25677
|
+
}
|
|
25258
25678
|
if (liveboardGutter !== undefined) {
|
|
25259
25679
|
params[Param.LiveboardGutter] = liveboardGutter;
|
|
25260
25680
|
}
|
|
@@ -25427,7 +25847,7 @@ query GetEurekaVizSnapshots(
|
|
|
25427
25847
|
// instance. React builds a new instance per mount, so an equal config
|
|
25428
25848
|
// is a hide/show, not a hand-over: there is nothing stale to clear.
|
|
25429
25849
|
const previous = this.getPreRenderObj();
|
|
25430
|
-
const
|
|
25850
|
+
const previousRoute = this.isSameEmbedConfig(previous)
|
|
25431
25851
|
? undefined
|
|
25432
25852
|
: previous === null || previous === void 0 ? void 0 : previous.currentLiveboardState;
|
|
25433
25853
|
this.executeAfterEmbedContainerLoaded(async () => {
|
|
@@ -25435,7 +25855,7 @@ query GetEurekaVizSnapshots(
|
|
|
25435
25855
|
// Navigate goes out first, so the container loads with the previous
|
|
25436
25856
|
// config's filters.
|
|
25437
25857
|
await this.preRenderParamsApplied;
|
|
25438
|
-
if (this.
|
|
25858
|
+
if (this.isAlreadyOnSameRoute(previousRoute)) {
|
|
25439
25859
|
// Navigate to the route we are already on is a no-op, so the
|
|
25440
25860
|
// liveboard keeps its state. Home unmounts the container, which
|
|
25441
25861
|
// clears it.
|
|
@@ -25456,18 +25876,9 @@ query GetEurekaVizSnapshots(
|
|
|
25456
25876
|
};
|
|
25457
25877
|
});
|
|
25458
25878
|
}
|
|
25459
|
-
|
|
25460
|
-
|
|
25461
|
-
|
|
25462
|
-
* Undefined-valued keys are dropped before comparing. `navigateToLiveboard`
|
|
25463
|
-
* assigns `vizId`, `activeTabId` and `personalizedViewId` unconditionally,
|
|
25464
|
-
* so an instance that has been shown once carries those keys as `undefined`
|
|
25465
|
-
* while a freshly constructed one does not have them at all. `isEqual`
|
|
25466
|
-
* counts own keys, so without this the comparison can never be true after
|
|
25467
|
-
* the first show — which is the whole case this exists for.
|
|
25468
|
-
*
|
|
25469
|
-
* Callbacks compare as equal: React passes a fresh closure per render.
|
|
25470
|
-
*/
|
|
25879
|
+
// definedEntries drops undefined-valued keys: a shown instance carries
|
|
25880
|
+
// vizId/activeTabId/etc as undefined, so a raw isEqual never matches again.
|
|
25881
|
+
// Functions compare equal, since React passes a fresh closure per render.
|
|
25471
25882
|
isSameEmbedConfig(previous) {
|
|
25472
25883
|
if (!previous)
|
|
25473
25884
|
return false;
|
|
@@ -25478,14 +25889,14 @@ query GetEurekaVizSnapshots(
|
|
|
25478
25889
|
// The whole route, not just the liveboard id: the path is built from the
|
|
25479
25890
|
// viz, tab and view too, so a same-liveboard show onto another tab is a
|
|
25480
25891
|
// real navigation.
|
|
25481
|
-
|
|
25482
|
-
if (!(
|
|
25892
|
+
isAlreadyOnSameRoute(previousRoute) {
|
|
25893
|
+
if (!(previousRoute === null || previousRoute === void 0 ? void 0 : previousRoute.liveboardId))
|
|
25483
25894
|
return false;
|
|
25484
25895
|
const { liveboardId, vizId, activeTabId, personalizedViewId, } = this.viewConfig;
|
|
25485
|
-
return
|
|
25486
|
-
&&
|
|
25487
|
-
&&
|
|
25488
|
-
&&
|
|
25896
|
+
return previousRoute.liveboardId === liveboardId
|
|
25897
|
+
&& previousRoute.vizId === vizId
|
|
25898
|
+
&& previousRoute.activeTabId === activeTabId
|
|
25899
|
+
&& previousRoute.personalizedViewId === personalizedViewId;
|
|
25489
25900
|
}
|
|
25490
25901
|
async handleRenderForPrerender() {
|
|
25491
25902
|
if (isUndefined$1(this.viewConfig.liveboardId)) {
|
|
@@ -25979,7 +26390,7 @@ query SendMessage($params: Input_convassist_SendMessageRequest) {
|
|
|
25979
26390
|
getIframeSrc() {
|
|
25980
26391
|
const { sessionId, genNo, acSessionId, acGenNo, convId, messageId, } = this.viewConfig;
|
|
25981
26392
|
const path = 'conv-assist-answer';
|
|
25982
|
-
const queryParams = this.
|
|
26393
|
+
const queryParams = this.getUrlQueryParamsObject();
|
|
25983
26394
|
let query = '';
|
|
25984
26395
|
const queryParamsString = getQueryParamString(queryParams, true);
|
|
25985
26396
|
if (queryParamsString) {
|
|
@@ -26171,18 +26582,22 @@ query SendMessage($params: Input_convassist_SendMessageRequest) {
|
|
|
26171
26582
|
}
|
|
26172
26583
|
}
|
|
26173
26584
|
setParamIfDefined(queryParams, Param.UpdatedSpotterExperience, updatedSpotterExperience, true);
|
|
26585
|
+
setParamIfDefined(queryParams, Param.SpotterExperienceVersion, this.viewConfig.spotterExperienceVersion);
|
|
26174
26586
|
return queryParams;
|
|
26175
26587
|
}
|
|
26176
26588
|
getIframeSrc() {
|
|
26177
|
-
const { worksheetId, searchOptions, runtimeFilters, excludeRuntimeFiltersfromURL, runtimeParameters, excludeRuntimeParametersfromURL, sharedConversationId, dataSources, } = this.viewConfig;
|
|
26589
|
+
const { worksheetId, searchOptions, runtimeFilters, excludeRuntimeFiltersfromURL, runtimeParameters, excludeRuntimeParametersfromURL, sharedConversationId, dataSources, spotterExperienceVersion, } = this.viewConfig;
|
|
26178
26590
|
// Deep-link into the read-only shared-conversation reader view when a
|
|
26179
26591
|
// shared conversation id is supplied (e.g. a recipient landing from a
|
|
26180
26592
|
// host-configured CONVERSATION_URL share link); otherwise the normal
|
|
26181
26593
|
// Spotter conversation surface.
|
|
26182
|
-
|
|
26594
|
+
let path = sharedConversationId
|
|
26183
26595
|
? `insights/conv-assist/s/${encodeURIComponent(sharedConversationId)}`
|
|
26184
26596
|
: 'insights/conv-assist';
|
|
26185
|
-
|
|
26597
|
+
if (spotterExperienceVersion === SpotterExperienceVersion.SPOTTER_2026_11) {
|
|
26598
|
+
path = path.replace('insights/conv-assist', 'insights/spotter');
|
|
26599
|
+
}
|
|
26600
|
+
const queryParams = this.getUrlQueryParamsObject();
|
|
26186
26601
|
let query = '';
|
|
26187
26602
|
const queryParamsString = getQueryParamString(queryParams, true);
|
|
26188
26603
|
if (queryParamsString) {
|