@thoughtspot/visual-embed-sdk 1.49.1 → 1.49.3
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 +4 -10
- package/cjs/src/css-variables.d.ts +17 -0
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +7 -1
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +4 -1
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +97 -0
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +8 -0
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +2 -1
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +12 -0
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/events.spec.js +5 -0
- package/cjs/src/embed/events.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +6 -0
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +4 -1
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +11 -0
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/spotter-viz-utils.d.ts +29 -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/ts-embed.d.ts +38 -0
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +166 -9
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +237 -0
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +2 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/types.d.ts +87 -4
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +47 -3
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.spec.js +15 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/cjs/src/utils/processTrigger.d.ts.map +1 -1
- package/cjs/src/utils/processTrigger.js +6 -5
- package/cjs/src/utils/processTrigger.js.map +1 -1
- package/cjs/src/utils/processTrigger.spec.js +13 -0
- package/cjs/src/utils/processTrigger.spec.js.map +1 -1
- package/cjs/src/utils.d.ts +10 -0
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +25 -4
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.js +48 -0
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/{index-B6Rn561t.js → index-DsSQndIB.js} +303 -187
- package/dist/src/css-variables.d.ts +17 -0
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +7 -1
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +8 -0
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +6 -0
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/spotter-viz-utils.d.ts +29 -0
- package/dist/src/embed/spotter-viz-utils.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +38 -0
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +87 -4
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/processTrigger.d.ts.map +1 -1
- package/dist/src/utils.d.ts +10 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +282 -35
- package/dist/tsembed-react.js +583 -220
- package/dist/tsembed.es.js +282 -35
- package/dist/tsembed.js +583 -220
- package/dist/visual-embed-sdk-react-full.d.ts +190 -4
- package/dist/visual-embed-sdk-react.d.ts +190 -4
- package/dist/visual-embed-sdk.d.ts +190 -4
- package/lib/package.json +4 -10
- package/lib/src/css-variables.d.ts +17 -0
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +7 -1
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +4 -1
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +97 -0
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +8 -0
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +2 -1
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +12 -0
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/events.spec.js +5 -0
- package/lib/src/embed/events.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +6 -0
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +4 -1
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +11 -0
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/spotter-viz-utils.d.ts +29 -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/ts-embed.d.ts +38 -0
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +167 -10
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +237 -0
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +2 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js.map +1 -1
- package/lib/src/types.d.ts +87 -4
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +47 -3
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.spec.js +15 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/lib/src/utils/processTrigger.d.ts.map +1 -1
- package/lib/src/utils/processTrigger.js +6 -5
- package/lib/src/utils/processTrigger.js.map +1 -1
- package/lib/src/utils/processTrigger.spec.js +13 -0
- package/lib/src/utils/processTrigger.spec.js.map +1 -1
- package/lib/src/utils.d.ts +10 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +22 -1
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +49 -1
- package/lib/src/utils.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +190 -4
- package/package.json +4 -10
- package/src/css-variables.ts +20 -0
- package/src/embed/app.spec.ts +109 -0
- package/src/embed/app.ts +11 -1
- package/src/embed/conversation.spec.ts +17 -0
- package/src/embed/conversation.ts +10 -0
- package/src/embed/events.spec.ts +7 -0
- package/src/embed/liveboard.spec.ts +15 -0
- package/src/embed/liveboard.ts +10 -0
- package/src/embed/spotter-viz-utils.ts +30 -0
- package/src/embed/ts-embed.spec.ts +294 -0
- package/src/embed/ts-embed.ts +180 -9
- package/src/index.ts +2 -1
- package/src/types.ts +86 -3
- package/src/utils/graphql/answerService/answerService.spec.ts +18 -0
- package/src/utils/processTrigger.spec.ts +23 -0
- package/src/utils/processTrigger.ts +8 -6
- package/src/utils.spec.ts +63 -0
- package/src/utils.ts +25 -1
package/dist/tsembed-react.es.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* @thoughtspot/visual-embed-sdk version 1.49.
|
|
1
|
+
/* @thoughtspot/visual-embed-sdk version 1.49.3 */
|
|
2
2
|
'use client';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import React__default, { useRef, useCallback } from 'react';
|
|
@@ -141,28 +141,45 @@ const isObject$1 = (obj) => {
|
|
|
141
141
|
}
|
|
142
142
|
return false;
|
|
143
143
|
};
|
|
144
|
-
const
|
|
144
|
+
const UNSAFE_KEYS = new Set([
|
|
145
|
+
"__proto__",
|
|
146
|
+
"constructor",
|
|
147
|
+
"prototype",
|
|
148
|
+
"toString",
|
|
149
|
+
"valueOf",
|
|
150
|
+
"hasOwnProperty",
|
|
151
|
+
"isPrototypeOf",
|
|
152
|
+
"propertyIsEnumerable",
|
|
153
|
+
"toLocaleString",
|
|
154
|
+
]);
|
|
155
|
+
const merge$1 = (...objects) => objects.reduce((result, current) => {
|
|
156
|
+
if (current === undefined) {
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
145
159
|
if (Array.isArray(current)) {
|
|
146
160
|
throw new TypeError("Arguments provided to ts-deepmerge must be objects, not arrays.");
|
|
147
161
|
}
|
|
148
162
|
Object.keys(current).forEach((key) => {
|
|
149
|
-
if (
|
|
163
|
+
if (UNSAFE_KEYS.has(key)) {
|
|
150
164
|
return;
|
|
151
165
|
}
|
|
152
166
|
if (Array.isArray(result[key]) && Array.isArray(current[key])) {
|
|
153
|
-
result[key] = merge.options.mergeArrays
|
|
154
|
-
? merge.options.uniqueArrayItems
|
|
167
|
+
result[key] = merge$1.options.mergeArrays
|
|
168
|
+
? merge$1.options.uniqueArrayItems
|
|
155
169
|
? Array.from(new Set(result[key].concat(current[key])))
|
|
156
170
|
: [...result[key], ...current[key]]
|
|
157
171
|
: current[key];
|
|
158
172
|
}
|
|
159
173
|
else if (isObject$1(result[key]) && isObject$1(current[key])) {
|
|
160
|
-
result[key] = merge(result[key], current[key]);
|
|
174
|
+
result[key] = merge$1(result[key], current[key]);
|
|
175
|
+
}
|
|
176
|
+
else if (!isObject$1(result[key]) && isObject$1(current[key])) {
|
|
177
|
+
result[key] = merge$1(current[key], undefined);
|
|
161
178
|
}
|
|
162
179
|
else {
|
|
163
180
|
result[key] =
|
|
164
181
|
current[key] === undefined
|
|
165
|
-
? merge.options.allowUndefinedOverrides
|
|
182
|
+
? merge$1.options.allowUndefinedOverrides
|
|
166
183
|
? current[key]
|
|
167
184
|
: result[key]
|
|
168
185
|
: current[key];
|
|
@@ -175,11 +192,11 @@ const defaultOptions = {
|
|
|
175
192
|
mergeArrays: true,
|
|
176
193
|
uniqueArrayItems: true,
|
|
177
194
|
};
|
|
178
|
-
merge.options = defaultOptions;
|
|
179
|
-
merge.withOptions = (options, ...objects) => {
|
|
180
|
-
merge.options = Object.assign(Object.assign({}, defaultOptions), options);
|
|
181
|
-
const result = merge(...objects);
|
|
182
|
-
merge.options = defaultOptions;
|
|
195
|
+
merge$1.options = defaultOptions;
|
|
196
|
+
merge$1.withOptions = (options, ...objects) => {
|
|
197
|
+
merge$1.options = Object.assign(Object.assign({}, defaultOptions), options);
|
|
198
|
+
const result = merge$1(...objects);
|
|
199
|
+
merge$1.options = defaultOptions;
|
|
183
200
|
return result;
|
|
184
201
|
};
|
|
185
202
|
|
|
@@ -2411,11 +2428,30 @@ var HostEvent;
|
|
|
2411
2428
|
/**
|
|
2412
2429
|
* Navigate to a specific page in the embedded ThoughtSpot application.
|
|
2413
2430
|
* This is the same as calling `appEmbed.navigateToPage(path, true)`.
|
|
2414
|
-
*
|
|
2415
|
-
*
|
|
2431
|
+
*
|
|
2432
|
+
* Accepts either a plain value or an object with `path`
|
|
2433
|
+
* and an optional `replace` flag.
|
|
2434
|
+
*
|
|
2435
|
+
* @param data - A string path, a numeric history delta, or an object
|
|
2436
|
+
* `{ path: string | number, replace?: boolean }`.
|
|
2437
|
+
* - `path` — the route to navigate to, or a history delta such as `1`
|
|
2438
|
+
* or `-1` (calls `window.history.go()`).
|
|
2439
|
+
* - `replace` — when `true`, replaces the current history entry instead
|
|
2440
|
+
* of pushing a new one (uses `window.location.replace`).
|
|
2441
|
+
*
|
|
2416
2442
|
* @example
|
|
2417
2443
|
* ```js
|
|
2418
|
-
*
|
|
2444
|
+
* // Preferred: use navigateToPage directly
|
|
2445
|
+
* appEmbed.navigateToPage(-1);
|
|
2446
|
+
*
|
|
2447
|
+
* // Numeric delta — go back one step
|
|
2448
|
+
* appEmbed.trigger(HostEvent.Navigate, -1);
|
|
2449
|
+
*
|
|
2450
|
+
* // String path — push a new history entry
|
|
2451
|
+
* appEmbed.trigger(HostEvent.Navigate, 'home');
|
|
2452
|
+
*
|
|
2453
|
+
* // Object format — replace current history entry
|
|
2454
|
+
* appEmbed.trigger(HostEvent.Navigate, { path: 'home', replace: true }); // SDK: 1.51.0 | ThoughtSpot Cloud: 26.8.0.cl
|
|
2419
2455
|
* ```
|
|
2420
2456
|
* @version SDK: 1.12.0 | ThoughtSpot: 8.4.0.cl, 8.4.1.sw
|
|
2421
2457
|
*/
|
|
@@ -4404,6 +4440,7 @@ var Param;
|
|
|
4404
4440
|
Param["EnableLiveboardDataCache"] = "enableLiveboardDataCache";
|
|
4405
4441
|
Param["SpotterFileUploadEnabled"] = "spotterFileUploadEnabled";
|
|
4406
4442
|
Param["SpotterFileUploadFileTypes"] = "spotterFileUploadFileTypes";
|
|
4443
|
+
Param["IsStarterPromptsEnabled"] = "enableStarterPrompts";
|
|
4407
4444
|
})(Param || (Param = {}));
|
|
4408
4445
|
/**
|
|
4409
4446
|
* ThoughtSpot application pages include actions and menu commands
|
|
@@ -5046,6 +5083,16 @@ var Action;
|
|
|
5046
5083
|
* @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw
|
|
5047
5084
|
*/
|
|
5048
5085
|
Action["AddToFavorites"] = "addToFavorites";
|
|
5086
|
+
/**
|
|
5087
|
+
* Remove from Favorites option in home page v3 sidebar.
|
|
5088
|
+
* Allows removing an object from the user's favorites list from home-page v3 sidebar.
|
|
5089
|
+
* @version SDK: 1.51.0 | ThoughtSpot Cloud: 26.8.0.cl
|
|
5090
|
+
* @example
|
|
5091
|
+
* ```js
|
|
5092
|
+
* disabledActions: [Action.RemoveFromFavorites]
|
|
5093
|
+
* ```
|
|
5094
|
+
*/
|
|
5095
|
+
Action["RemoveFromFavorites"] = "removeFromFavorites";
|
|
5049
5096
|
/**
|
|
5050
5097
|
* The edit icon on Liveboards (Classic experience).
|
|
5051
5098
|
* @example
|
|
@@ -6103,6 +6150,20 @@ var Action;
|
|
|
6103
6150
|
* ```
|
|
6104
6151
|
*/
|
|
6105
6152
|
Action["SpotterViz"] = "spotterViz";
|
|
6153
|
+
/**
|
|
6154
|
+
* The reference-mode toggle button inside the SpotterViz chat input.
|
|
6155
|
+
* When users enable reference mode, clicking tiles, filters, or
|
|
6156
|
+
* parameters adds them as chat context. Hide this action to remove
|
|
6157
|
+
* the reference-mode capability entirely.
|
|
6158
|
+
* Visible by default.
|
|
6159
|
+
* @version SDK: 1.51.0 | ThoughtSpot Cloud: 26.8.0.cl
|
|
6160
|
+
* @example
|
|
6161
|
+
* ```js
|
|
6162
|
+
* hiddenActions: [Action.SpotterVizReferenceMode]
|
|
6163
|
+
* disabledActions: [Action.SpotterVizReferenceMode]
|
|
6164
|
+
* ```
|
|
6165
|
+
*/
|
|
6166
|
+
Action["SpotterVizReferenceMode"] = "spotterVizReferenceMode";
|
|
6106
6167
|
/**
|
|
6107
6168
|
* Clears browser cache and fetches new data for liveboard ChartViz Containers.
|
|
6108
6169
|
* Requires `enableLiveboardDataCache` to be enabled.
|
|
@@ -6579,7 +6640,7 @@ var TableContentDensity;
|
|
|
6579
6640
|
TableContentDensity["Compact"] = "COMPACT";
|
|
6580
6641
|
})(TableContentDensity || (TableContentDensity = {}));
|
|
6581
6642
|
|
|
6582
|
-
var version$1="1.49.
|
|
6643
|
+
var version$1="1.49.3";var pkg = {version:version$1};
|
|
6583
6644
|
|
|
6584
6645
|
const { version } = pkg;
|
|
6585
6646
|
|
|
@@ -6926,7 +6987,28 @@ const getRuntimeFilters = (runtimefilters) => getFilterQuery(runtimefilters || [
|
|
|
6926
6987
|
function getDOMNode(domSelector) {
|
|
6927
6988
|
return typeof domSelector === 'string' ? document.querySelector(domSelector) : domSelector;
|
|
6928
6989
|
}
|
|
6929
|
-
|
|
6990
|
+
/**
|
|
6991
|
+
* Resolves a CSS selector to an element. `document.querySelector` cannot pierce
|
|
6992
|
+
* shadow boundaries, so when the document lookup misses and a reference node is
|
|
6993
|
+
* provided, this also searches the shadow root the reference node lives in —
|
|
6994
|
+
* letting a selector target an element inside the same shadow root as the embed
|
|
6995
|
+
* instead of silently falling back to the light DOM.
|
|
6996
|
+
* @param selector CSS selector string.
|
|
6997
|
+
* @param referenceNode Node whose shadow root is searched when the document lookup misses.
|
|
6998
|
+
*/
|
|
6999
|
+
function querySelectorAcrossShadowRoot(selector, referenceNode) {
|
|
7000
|
+
var _a;
|
|
7001
|
+
const fromDocument = document.querySelector(selector);
|
|
7002
|
+
if (fromDocument) {
|
|
7003
|
+
return fromDocument;
|
|
7004
|
+
}
|
|
7005
|
+
const rootNode = (_a = referenceNode === null || referenceNode === void 0 ? void 0 : referenceNode.getRootNode) === null || _a === void 0 ? void 0 : _a.call(referenceNode);
|
|
7006
|
+
if (typeof ShadowRoot !== 'undefined' && rootNode instanceof ShadowRoot) {
|
|
7007
|
+
return rootNode.querySelector(selector);
|
|
7008
|
+
}
|
|
7009
|
+
return null;
|
|
7010
|
+
}
|
|
7011
|
+
const deepMerge = (target, source) => merge$1(target, source);
|
|
6930
7012
|
const getOperationNameFromQuery = (query) => {
|
|
6931
7013
|
const regex = /(?:query|mutation)\s+(\w+)/;
|
|
6932
7014
|
const matches = query.match(regex);
|
|
@@ -9128,7 +9210,7 @@ class AnswerService {
|
|
|
9128
9210
|
async getTML() {
|
|
9129
9211
|
const { object } = await this.executeQuery(getAnswerTML, {});
|
|
9130
9212
|
const edoc = object[0].edoc;
|
|
9131
|
-
const YAML = await import('./index-
|
|
9213
|
+
const YAML = await import('./index-DsSQndIB.js');
|
|
9132
9214
|
const parsedDoc = YAML.parse(edoc);
|
|
9133
9215
|
return {
|
|
9134
9216
|
answer: {
|
|
@@ -19439,8 +19521,14 @@ function processTrigger(iFrame, messageType, thoughtSpotHost, data, context) {
|
|
|
19439
19521
|
}
|
|
19440
19522
|
}
|
|
19441
19523
|
const channel = new MessageChannel();
|
|
19524
|
+
// Close the messageChannel and resolve the promise if timeout.
|
|
19525
|
+
const timeoutId = setTimeout(() => {
|
|
19526
|
+
channel.port1.close();
|
|
19527
|
+
res(new Error(ERROR_MESSAGE.TRIGGER_TIMED_OUT));
|
|
19528
|
+
}, TRIGGER_TIMEOUT);
|
|
19442
19529
|
channel.port1.onmessage = ({ data: responseData }) => {
|
|
19443
19530
|
var _a;
|
|
19531
|
+
clearTimeout(timeoutId);
|
|
19444
19532
|
channel.port1.close();
|
|
19445
19533
|
const error = (responseData === null || responseData === void 0 ? void 0 : responseData.error) || ((_a = responseData === null || responseData === void 0 ? void 0 : responseData.data) === null || _a === void 0 ? void 0 : _a.error);
|
|
19446
19534
|
if (error) {
|
|
@@ -19450,11 +19538,6 @@ function processTrigger(iFrame, messageType, thoughtSpotHost, data, context) {
|
|
|
19450
19538
|
res(responseData);
|
|
19451
19539
|
}
|
|
19452
19540
|
};
|
|
19453
|
-
// Close the messageChannel and resolve the promise if timeout.
|
|
19454
|
-
setTimeout(() => {
|
|
19455
|
-
channel.port1.close();
|
|
19456
|
-
res(new Error(ERROR_MESSAGE.TRIGGER_TIMED_OUT));
|
|
19457
|
-
}, TRIGGER_TIMEOUT);
|
|
19458
19541
|
return postIframeMessage(iFrame, { type: messageType, data, context }, thoughtSpotHost, channel);
|
|
19459
19542
|
});
|
|
19460
19543
|
}
|
|
@@ -20219,6 +20302,14 @@ const processLegacyInterceptResponse = (payload) => {
|
|
|
20219
20302
|
*/
|
|
20220
20303
|
const THOUGHTSPOT_PARAM_PREFIX = 'ts-';
|
|
20221
20304
|
const TS_EMBED_ID = '_thoughtspot-embed';
|
|
20305
|
+
/**
|
|
20306
|
+
* dataset key used to stash a custom preRenderContainer's original inline
|
|
20307
|
+
* `position` while we override it to `relative`. Stored on the container (not
|
|
20308
|
+
* per-instance) so the override can be reverted on destroy even when multiple
|
|
20309
|
+
* pre-rendered embeds share the same container.
|
|
20310
|
+
*/
|
|
20311
|
+
const PRERENDER_CONTAINER_ORIGINAL_POSITION_KEY = 'tsEmbedOriginalPosition';
|
|
20312
|
+
const PRERENDER_WRAPPER_ID_PREFIX = 'tsEmbed-pre-render-wrapper-';
|
|
20222
20313
|
/**
|
|
20223
20314
|
* The event id map from v2 event names to v1 event id
|
|
20224
20315
|
* v1 events are the classic embed events implemented in Blink v1
|
|
@@ -20254,6 +20345,8 @@ class TsEmbed {
|
|
|
20254
20345
|
*/
|
|
20255
20346
|
this.shouldEncodeUrlQueryParams = false;
|
|
20256
20347
|
this.defaultHiddenActions = [Action.ReportError];
|
|
20348
|
+
this.preRenderContainerEl = null;
|
|
20349
|
+
this.containerScrollListener = null;
|
|
20257
20350
|
/**
|
|
20258
20351
|
* Handler for fullscreen change events
|
|
20259
20352
|
*/
|
|
@@ -21119,6 +21212,89 @@ class TsEmbed {
|
|
|
21119
21212
|
placeholder.id = id.placeHolder;
|
|
21120
21213
|
return placeholder;
|
|
21121
21214
|
}
|
|
21215
|
+
/**
|
|
21216
|
+
* Resolves the configured preRenderContainer to a live element, falling
|
|
21217
|
+
* back to `document.body`. A string selector is re-queried on every call so
|
|
21218
|
+
* a remounted container (E.g.: React replacing the node) resolves to the
|
|
21219
|
+
* fresh element; an element passed directly cannot be re-resolved.
|
|
21220
|
+
*/
|
|
21221
|
+
resolvePreRenderContainerTarget() {
|
|
21222
|
+
var _a;
|
|
21223
|
+
const containerConfig = this.viewConfig.preRenderContainer;
|
|
21224
|
+
let container = null;
|
|
21225
|
+
if (typeof containerConfig === 'string') {
|
|
21226
|
+
try {
|
|
21227
|
+
// Resolve against the host's shadow root too, so a selector can
|
|
21228
|
+
// target a container inside the same shadow DOM as the embed —
|
|
21229
|
+
// document.querySelector alone cannot pierce shadow boundaries.
|
|
21230
|
+
container = querySelectorAcrossShadowRoot(containerConfig, this.hostElement);
|
|
21231
|
+
}
|
|
21232
|
+
catch (e) {
|
|
21233
|
+
logger$3.error(`Invalid CSS selector for preRenderContainer: ${containerConfig}`, e);
|
|
21234
|
+
}
|
|
21235
|
+
}
|
|
21236
|
+
else if (containerConfig) {
|
|
21237
|
+
container = containerConfig;
|
|
21238
|
+
}
|
|
21239
|
+
return (_a = container) !== null && _a !== void 0 ? _a : document.body;
|
|
21240
|
+
}
|
|
21241
|
+
/**
|
|
21242
|
+
* Makes the container a positioning context for the absolutely positioned
|
|
21243
|
+
* wrapper, stashing the original inline `position` on the element (once) so
|
|
21244
|
+
* destroy() can restore it exactly, leaving no trace. Recording it on the
|
|
21245
|
+
* element rather than per-instance lets the override be reverted even when
|
|
21246
|
+
* embeds share the same container.
|
|
21247
|
+
*/
|
|
21248
|
+
applyPreRenderContainerPositioning(container) {
|
|
21249
|
+
if (container === document.body) {
|
|
21250
|
+
return;
|
|
21251
|
+
}
|
|
21252
|
+
const pos = window.getComputedStyle(container).position;
|
|
21253
|
+
if (pos === 'static') {
|
|
21254
|
+
if (container.dataset[PRERENDER_CONTAINER_ORIGINAL_POSITION_KEY] === undefined) {
|
|
21255
|
+
container.dataset[PRERENDER_CONTAINER_ORIGINAL_POSITION_KEY] = container.style.position;
|
|
21256
|
+
}
|
|
21257
|
+
container.style.position = 'relative';
|
|
21258
|
+
}
|
|
21259
|
+
}
|
|
21260
|
+
/**
|
|
21261
|
+
* Re-attaches the wrapper to a live container when the previously resolved
|
|
21262
|
+
* one has been detached or no longer holds the wrapper — e.g. the host app
|
|
21263
|
+
* remounted a custom preRenderContainer, which would otherwise leave a stale
|
|
21264
|
+
* reference and collapse the wrapper. Only string selectors can be
|
|
21265
|
+
* re-resolved; a container passed as an element is left untouched.
|
|
21266
|
+
*/
|
|
21267
|
+
reconcilePreRenderContainer() {
|
|
21268
|
+
const wrapper = this.preRenderWrapper;
|
|
21269
|
+
const stored = this.preRenderContainerEl;
|
|
21270
|
+
// Nothing to reconcile until this instance resolved its container.
|
|
21271
|
+
if (!wrapper || !stored) {
|
|
21272
|
+
return;
|
|
21273
|
+
}
|
|
21274
|
+
const storedIsLive = stored === document.body || document.contains(stored);
|
|
21275
|
+
if (storedIsLive && stored.contains(wrapper)) {
|
|
21276
|
+
return;
|
|
21277
|
+
}
|
|
21278
|
+
const resolved = this.resolvePreRenderContainerTarget();
|
|
21279
|
+
// Re-resolution yielded the same (still stale) element — nothing we can
|
|
21280
|
+
// do, e.g. a detached container passed as an HTMLElement.
|
|
21281
|
+
if (resolved === stored && stored.contains(wrapper)) {
|
|
21282
|
+
return;
|
|
21283
|
+
}
|
|
21284
|
+
if (this.containerScrollListener && stored !== resolved) {
|
|
21285
|
+
if (stored !== document.body) {
|
|
21286
|
+
stored.removeEventListener('scroll', this.containerScrollListener);
|
|
21287
|
+
}
|
|
21288
|
+
if (resolved !== document.body) {
|
|
21289
|
+
resolved.addEventListener('scroll', this.containerScrollListener);
|
|
21290
|
+
}
|
|
21291
|
+
}
|
|
21292
|
+
this.applyPreRenderContainerPositioning(resolved);
|
|
21293
|
+
if (wrapper.parentNode !== resolved) {
|
|
21294
|
+
resolved.appendChild(wrapper);
|
|
21295
|
+
}
|
|
21296
|
+
this.preRenderContainerEl = resolved;
|
|
21297
|
+
}
|
|
21122
21298
|
insertIntoDOMForPreRender(child) {
|
|
21123
21299
|
const preRenderChild = this.createPreRenderChild(child);
|
|
21124
21300
|
const preRenderWrapper = this.createPreRenderWrapper();
|
|
@@ -21138,7 +21314,10 @@ class TsEmbed {
|
|
|
21138
21314
|
else {
|
|
21139
21315
|
this.hidePreRender();
|
|
21140
21316
|
}
|
|
21141
|
-
|
|
21317
|
+
const targetContainer = this.resolvePreRenderContainerTarget();
|
|
21318
|
+
this.preRenderContainerEl = targetContainer;
|
|
21319
|
+
this.applyPreRenderContainerPositioning(targetContainer);
|
|
21320
|
+
targetContainer.appendChild(preRenderWrapper);
|
|
21142
21321
|
}
|
|
21143
21322
|
insertIntoDOM(child) {
|
|
21144
21323
|
var _a;
|
|
@@ -21577,6 +21756,50 @@ class TsEmbed {
|
|
|
21577
21756
|
tsParams = tsParams ? `?${tsParams}` : '';
|
|
21578
21757
|
return tsParams;
|
|
21579
21758
|
}
|
|
21759
|
+
/**
|
|
21760
|
+
* Reverts the custom preRenderContainer's `position` to the value it had
|
|
21761
|
+
* before we overrode it to `relative` (see insertIntoDOMForPreRender).
|
|
21762
|
+
*
|
|
21763
|
+
* We restore the original inline value rather than forcing `static`, and we
|
|
21764
|
+
* skip the restore if another preRender wrapper is still mounted inside the
|
|
21765
|
+
* same container — a shared container still needs the positioning context.
|
|
21766
|
+
*/
|
|
21767
|
+
restorePreRenderContainerPosition() {
|
|
21768
|
+
const container = this.preRenderContainerEl;
|
|
21769
|
+
if (!container || container === document.body) {
|
|
21770
|
+
return;
|
|
21771
|
+
}
|
|
21772
|
+
// Drop our reference up front so a destroyed embed never pins a
|
|
21773
|
+
// detached container in memory; restoration uses the local handle.
|
|
21774
|
+
this.preRenderContainerEl = null;
|
|
21775
|
+
const originalPosition = container.dataset[PRERENDER_CONTAINER_ORIGINAL_POSITION_KEY];
|
|
21776
|
+
if (originalPosition === undefined) {
|
|
21777
|
+
// We never overrode this container's position; nothing to restore.
|
|
21778
|
+
return;
|
|
21779
|
+
}
|
|
21780
|
+
// This instance's own wrapper has already been removed by now, so any
|
|
21781
|
+
// match here belongs to another embed still sharing the container — it
|
|
21782
|
+
// continues to rely on the positioning context, so leave it in place.
|
|
21783
|
+
const hasOtherWrapper = container.querySelector(`[id^="${PRERENDER_WRAPPER_ID_PREFIX}"]`);
|
|
21784
|
+
if (hasOtherWrapper) {
|
|
21785
|
+
return;
|
|
21786
|
+
}
|
|
21787
|
+
container.style.position = originalPosition;
|
|
21788
|
+
delete container.dataset[PRERENDER_CONTAINER_ORIGINAL_POSITION_KEY];
|
|
21789
|
+
}
|
|
21790
|
+
/**
|
|
21791
|
+
* Detaches and clears the container scroll listener, if one is attached.
|
|
21792
|
+
*/
|
|
21793
|
+
removeContainerScrollListener() {
|
|
21794
|
+
if (!this.containerScrollListener) {
|
|
21795
|
+
return;
|
|
21796
|
+
}
|
|
21797
|
+
const customContainer = this.preRenderContainerEl && this.preRenderContainerEl !== document.body
|
|
21798
|
+
? this.preRenderContainerEl
|
|
21799
|
+
: null;
|
|
21800
|
+
customContainer === null || customContainer === void 0 ? void 0 : customContainer.removeEventListener('scroll', this.containerScrollListener);
|
|
21801
|
+
this.containerScrollListener = null;
|
|
21802
|
+
}
|
|
21580
21803
|
/**
|
|
21581
21804
|
* Destroys the ThoughtSpot embed, and remove any nodes from the DOM.
|
|
21582
21805
|
* @version SDK: 1.19.1 | ThoughtSpot: *
|
|
@@ -21585,8 +21808,10 @@ class TsEmbed {
|
|
|
21585
21808
|
var _a, _b, _c;
|
|
21586
21809
|
try {
|
|
21587
21810
|
this.removeFullscreenChangeHandler();
|
|
21811
|
+
this.removeContainerScrollListener();
|
|
21588
21812
|
this.unsubscribeToEvents();
|
|
21589
21813
|
(_a = this.preRenderWrapper) === null || _a === void 0 ? void 0 : _a.remove();
|
|
21814
|
+
this.restorePreRenderContainerPosition();
|
|
21590
21815
|
if (!this.isRendered) {
|
|
21591
21816
|
return;
|
|
21592
21817
|
}
|
|
@@ -21696,15 +21921,19 @@ class TsEmbed {
|
|
|
21696
21921
|
}
|
|
21697
21922
|
this.hostElement.appendChild(this.insertedDomEl);
|
|
21698
21923
|
this.syncPreRenderStyle();
|
|
21924
|
+
const customContainer = this.preRenderContainerEl && this.preRenderContainerEl !== document.body
|
|
21925
|
+
? this.preRenderContainerEl
|
|
21926
|
+
: null;
|
|
21927
|
+
if (customContainer && !this.containerScrollListener) {
|
|
21928
|
+
this.containerScrollListener = () => this.syncPreRenderStyle();
|
|
21929
|
+
customContainer.addEventListener('scroll', this.containerScrollListener);
|
|
21930
|
+
}
|
|
21699
21931
|
if (!this.viewConfig.doNotTrackPreRenderSize) {
|
|
21700
21932
|
const observeTarget = (_a = this.insertedDomEl) !== null && _a !== void 0 ? _a : this.hostElement;
|
|
21701
21933
|
this.resizeObserver = new ResizeObserver((entries) => {
|
|
21702
21934
|
entries.forEach((entry) => {
|
|
21703
|
-
if (entry.
|
|
21704
|
-
|
|
21705
|
-
width: `${entry.contentRect.width}px`,
|
|
21706
|
-
height: `${entry.contentRect.height}px`,
|
|
21707
|
-
});
|
|
21935
|
+
if (entry.target === observeTarget) {
|
|
21936
|
+
this.syncPreRenderStyle();
|
|
21708
21937
|
}
|
|
21709
21938
|
});
|
|
21710
21939
|
});
|
|
@@ -21736,14 +21965,24 @@ class TsEmbed {
|
|
|
21736
21965
|
* is not defined or not found.
|
|
21737
21966
|
*/
|
|
21738
21967
|
syncPreRenderStyle() {
|
|
21968
|
+
var _a;
|
|
21739
21969
|
if (!this.isPreRenderConnected() || !this.getPreRenderPlaceHolderElement()) {
|
|
21740
21970
|
logger$3.error(ERROR_MESSAGE.SYNC_STYLE_CALLED_BEFORE_RENDER);
|
|
21741
21971
|
return;
|
|
21742
21972
|
}
|
|
21973
|
+
// Self-heal if the resolved container was remounted/detached, so we
|
|
21974
|
+
// never measure a stale node (which would collapse the wrapper).
|
|
21975
|
+
this.reconcilePreRenderContainer();
|
|
21743
21976
|
const elBoundingClient = this.getPreRenderPlaceHolderElement().getBoundingClientRect();
|
|
21977
|
+
const containerEl = this.preRenderContainerEl && this.preRenderContainerEl !== document.body
|
|
21978
|
+
? this.preRenderContainerEl
|
|
21979
|
+
: null;
|
|
21980
|
+
const containerRect = (_a = containerEl === null || containerEl === void 0 ? void 0 : containerEl.getBoundingClientRect()) !== null && _a !== void 0 ? _a : { x: 0, y: 0 };
|
|
21981
|
+
const scrollX = containerEl ? containerEl.scrollLeft : window.scrollX;
|
|
21982
|
+
const scrollY = containerEl ? containerEl.scrollTop : window.scrollY;
|
|
21744
21983
|
setStyleProperties(this.preRenderWrapper, {
|
|
21745
|
-
top: `${elBoundingClient.y +
|
|
21746
|
-
left: `${elBoundingClient.x +
|
|
21984
|
+
top: `${elBoundingClient.y - containerRect.y + scrollY}px`,
|
|
21985
|
+
left: `${elBoundingClient.x - containerRect.x + scrollX}px`,
|
|
21747
21986
|
width: `${elBoundingClient.width}px`,
|
|
21748
21987
|
height: `${elBoundingClient.height}px`,
|
|
21749
21988
|
position: 'absolute',
|
|
@@ -21770,6 +22009,7 @@ class TsEmbed {
|
|
|
21770
22009
|
overflow: 'hidden',
|
|
21771
22010
|
};
|
|
21772
22011
|
setStyleProperties(this.preRenderWrapper, preRenderHideStyles);
|
|
22012
|
+
this.removeContainerScrollListener();
|
|
21773
22013
|
if (this.resizeObserver) {
|
|
21774
22014
|
this.resizeObserver.disconnect();
|
|
21775
22015
|
}
|
|
@@ -21788,7 +22028,7 @@ class TsEmbed {
|
|
|
21788
22028
|
*/
|
|
21789
22029
|
getPreRenderIds() {
|
|
21790
22030
|
return {
|
|
21791
|
-
wrapper:
|
|
22031
|
+
wrapper: `${PRERENDER_WRAPPER_ID_PREFIX}${this.viewConfig.preRenderId}`,
|
|
21792
22032
|
child: `tsEmbed-pre-render-child-${this.viewConfig.preRenderId}`,
|
|
21793
22033
|
placeHolder: `tsEmbed-pre-render-placeholder-${this.viewConfig.preRenderId}`,
|
|
21794
22034
|
};
|
|
@@ -22497,12 +22737,15 @@ let AppEmbed$1 = class AppEmbed extends V1Embed {
|
|
|
22497
22737
|
}
|
|
22498
22738
|
// Handle spotterChatConfig params
|
|
22499
22739
|
if (spotterChatConfig) {
|
|
22500
|
-
const { hideToolResponseCardBranding, toolResponseCardBrandingLabel, spotterFileUploadEnabled, spotterFileUploadFileTypes, } = spotterChatConfig;
|
|
22740
|
+
const { hideToolResponseCardBranding, toolResponseCardBrandingLabel, spotterFileUploadEnabled, spotterFileUploadFileTypes, enableStarterPrompts, } = spotterChatConfig;
|
|
22501
22741
|
setParamIfDefined(params, Param.HideToolResponseCardBranding, hideToolResponseCardBranding, true);
|
|
22502
22742
|
setParamIfDefined(params, Param.ToolResponseCardBrandingLabel, toolResponseCardBrandingLabel);
|
|
22503
22743
|
if (spotterFileUploadEnabled !== undefined) {
|
|
22504
22744
|
params[Param.SpotterFileUploadEnabled] = spotterFileUploadEnabled;
|
|
22505
22745
|
}
|
|
22746
|
+
if (enableStarterPrompts !== undefined) {
|
|
22747
|
+
params[Param.IsStarterPromptsEnabled] = enableStarterPrompts;
|
|
22748
|
+
}
|
|
22506
22749
|
if (spotterFileUploadFileTypes !== undefined) {
|
|
22507
22750
|
params[Param.SpotterFileUploadFileTypes] = JSON.stringify(spotterFileUploadFileTypes);
|
|
22508
22751
|
}
|
|
@@ -23058,12 +23301,15 @@ let LiveboardEmbed$1 = class LiveboardEmbed extends V1Embed {
|
|
|
23058
23301
|
}
|
|
23059
23302
|
// Handle spotterChatConfig params
|
|
23060
23303
|
if (spotterChatConfig) {
|
|
23061
|
-
const { hideToolResponseCardBranding, toolResponseCardBrandingLabel, spotterFileUploadEnabled, spotterFileUploadFileTypes, } = spotterChatConfig;
|
|
23304
|
+
const { hideToolResponseCardBranding, toolResponseCardBrandingLabel, spotterFileUploadEnabled, spotterFileUploadFileTypes, enableStarterPrompts, } = spotterChatConfig;
|
|
23062
23305
|
setParamIfDefined(params, Param.HideToolResponseCardBranding, hideToolResponseCardBranding, true);
|
|
23063
23306
|
setParamIfDefined(params, Param.ToolResponseCardBrandingLabel, toolResponseCardBrandingLabel);
|
|
23064
23307
|
if (spotterFileUploadEnabled !== undefined) {
|
|
23065
23308
|
params[Param.SpotterFileUploadEnabled] = spotterFileUploadEnabled;
|
|
23066
23309
|
}
|
|
23310
|
+
if (enableStarterPrompts !== undefined) {
|
|
23311
|
+
params[Param.IsStarterPromptsEnabled] = enableStarterPrompts;
|
|
23312
|
+
}
|
|
23067
23313
|
if (spotterFileUploadFileTypes !== undefined) {
|
|
23068
23314
|
params[Param.SpotterFileUploadFileTypes] = JSON.stringify(spotterFileUploadFileTypes);
|
|
23069
23315
|
}
|
|
@@ -23900,10 +24146,11 @@ let SpotterEmbed$1 = class SpotterEmbed extends TsEmbed {
|
|
|
23900
24146
|
setParamIfDefined(queryParams, Param.EnableStopAnswerGenerationEmbed, enableStopAnswerGenerationEmbed, true);
|
|
23901
24147
|
// Handle spotterChatConfig params
|
|
23902
24148
|
if (spotterChatConfig) {
|
|
23903
|
-
const { hideToolResponseCardBranding, toolResponseCardBrandingLabel, spotterFileUploadEnabled, spotterFileUploadFileTypes, } = spotterChatConfig;
|
|
24149
|
+
const { hideToolResponseCardBranding, toolResponseCardBrandingLabel, spotterFileUploadEnabled, spotterFileUploadFileTypes, enableStarterPrompts, } = spotterChatConfig;
|
|
23904
24150
|
setParamIfDefined(queryParams, Param.HideToolResponseCardBranding, hideToolResponseCardBranding, true);
|
|
23905
24151
|
setParamIfDefined(queryParams, Param.ToolResponseCardBrandingLabel, toolResponseCardBrandingLabel);
|
|
23906
24152
|
setParamIfDefined(queryParams, Param.SpotterFileUploadEnabled, spotterFileUploadEnabled, true);
|
|
24153
|
+
setParamIfDefined(queryParams, Param.IsStarterPromptsEnabled, enableStarterPrompts, true);
|
|
23907
24154
|
if (spotterFileUploadFileTypes !== undefined) {
|
|
23908
24155
|
queryParams[Param.SpotterFileUploadFileTypes] = JSON.stringify(spotterFileUploadFileTypes);
|
|
23909
24156
|
}
|