@thoughtspot/visual-embed-sdk 1.45.2 → 1.45.3-mcp.2
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 +2 -2
- package/cjs/src/css-variables.d.ts +48 -0
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +37 -0
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js +37 -1
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/app.spec.js +24 -0
- package/cjs/src/embed/app.spec.js.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.d.ts +3 -0
- package/cjs/src/embed/auto-frame-renderer.d.ts.map +1 -0
- package/cjs/src/embed/auto-frame-renderer.js +70 -0
- package/cjs/src/embed/auto-frame-renderer.js.map +1 -0
- package/cjs/src/embed/base.d.ts.map +1 -1
- package/cjs/src/embed/base.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +128 -10
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js +41 -18
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +96 -3
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +38 -1
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +38 -10
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +179 -7
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts +2 -0
- package/cjs/src/embed/searchEmbed-basic-auth.spec.d.ts.map +1 -0
- package/cjs/src/embed/searchEmbed-basic-auth.spec.js +104 -0
- package/cjs/src/embed/searchEmbed-basic-auth.spec.js.map +1 -0
- package/cjs/src/errors.d.ts +1 -0
- package/cjs/src/errors.d.ts.map +1 -1
- package/cjs/src/errors.js +1 -0
- package/cjs/src/errors.js.map +1 -1
- package/cjs/src/index.d.ts +4 -3
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js +3 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/types.d.ts +196 -41
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +185 -19
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/answerService/answerService.d.ts +34 -0
- package/cjs/src/utils/answerService/answerService.d.ts.map +1 -0
- package/cjs/src/utils/answerService/answerService.js +142 -0
- package/cjs/src/utils/answerService/answerService.js.map +1 -0
- package/cjs/src/utils/answerService/answerService.spec.d.ts +1 -0
- package/cjs/src/utils/answerService/answerService.spec.d.ts.map +1 -0
- package/cjs/src/utils/answerService/answerService.spec.js +1 -0
- package/cjs/src/utils/answerService/answerService.spec.js.map +1 -0
- package/cjs/src/utils/answerService/graphql-queries.d.ts +6 -0
- package/cjs/src/utils/answerService/graphql-queries.d.ts.map +1 -0
- package/cjs/src/utils/answerService/graphql-queries.js +123 -0
- package/cjs/src/utils/answerService/graphql-queries.js.map +1 -0
- package/cjs/src/utils/answerService.d.ts +10 -0
- package/cjs/src/utils/answerService.d.ts.map +1 -0
- package/cjs/src/utils/answerService.js +61 -0
- package/cjs/src/utils/answerService.js.map +1 -0
- package/cjs/src/utils/answerService.spec.d.ts +2 -0
- package/cjs/src/utils/answerService.spec.d.ts.map +1 -0
- package/cjs/src/utils/answerService.spec.js +31 -0
- package/cjs/src/utils/answerService.spec.js.map +1 -0
- package/cjs/src/utils/authService.d.ts +37 -0
- package/cjs/src/utils/authService.d.ts.map +1 -0
- package/cjs/src/utils/authService.js +106 -0
- package/cjs/src/utils/authService.js.map +1 -0
- package/cjs/src/utils/authService.spec.d.ts +2 -0
- package/cjs/src/utils/authService.spec.d.ts.map +1 -0
- package/cjs/src/utils/authService.spec.js +72 -0
- package/cjs/src/utils/authService.spec.js.map +1 -0
- 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 +23 -1
- package/cjs/src/utils/graphql/answerService/answer-queries.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.d.ts +2 -1
- package/cjs/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.js +9 -1
- package/cjs/src/utils/graphql/answerService/answerService.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/answerService.spec.js +73 -0
- package/cjs/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/cjs/src/utils/graphql/answerService/graphql-queries.d.ts +5 -0
- package/cjs/src/utils/graphql/answerService/graphql-queries.d.ts.map +1 -0
- package/cjs/src/utils/graphql/answerService/graphql-queries.js +80 -0
- package/cjs/src/utils/graphql/answerService/graphql-queries.js.map +1 -0
- package/cjs/src/utils/graphql/conversationService/conversation-queries.d.ts +3 -0
- package/cjs/src/utils/graphql/conversationService/conversation-queries.d.ts.map +1 -0
- package/cjs/src/utils/graphql/conversationService/conversation-queries.js +318 -0
- package/cjs/src/utils/graphql/conversationService/conversation-queries.js.map +1 -0
- package/cjs/src/utils/graphql/conversationService/conversation-service.d.ts +12 -0
- package/cjs/src/utils/graphql/conversationService/conversation-service.d.ts.map +1 -0
- package/cjs/src/utils/graphql/conversationService/conversation-service.js +89 -0
- package/cjs/src/utils/graphql/conversationService/conversation-service.js.map +1 -0
- package/cjs/src/utils/graphql/spotterService/conversation-queries.d.ts +3 -0
- package/cjs/src/utils/graphql/spotterService/conversation-queries.d.ts.map +1 -0
- package/cjs/src/utils/graphql/spotterService/conversation-queries.js +318 -0
- package/cjs/src/utils/graphql/spotterService/conversation-queries.js.map +1 -0
- package/cjs/src/utils/graphql/spotterService/conversation-service.d.ts +12 -0
- package/cjs/src/utils/graphql/spotterService/conversation-service.d.ts.map +1 -0
- package/cjs/src/utils/graphql/spotterService/conversation-service.js +89 -0
- package/cjs/src/utils/graphql/spotterService/conversation-service.js.map +1 -0
- package/cjs/src/utils/graphql/spotterService/nls-answer-queries.d.ts +2 -0
- package/cjs/src/utils/graphql/spotterService/nls-answer-queries.d.ts.map +1 -0
- package/cjs/src/utils/graphql/spotterService/nls-answer-queries.js +403 -0
- package/cjs/src/utils/graphql/spotterService/nls-answer-queries.js.map +1 -0
- package/cjs/src/utils/graphql/spotterService/nls-answer-service.d.ts +12 -0
- package/cjs/src/utils/graphql/spotterService/nls-answer-service.d.ts.map +1 -0
- package/cjs/src/utils/graphql/spotterService/nls-answer-service.js +55 -0
- package/cjs/src/utils/graphql/spotterService/nls-answer-service.js.map +1 -0
- package/cjs/src/utils.d.ts +15 -0
- package/cjs/src/utils.d.ts.map +1 -1
- package/cjs/src/utils.js +33 -1
- package/cjs/src/utils.js.map +1 -1
- package/cjs/src/utils.spec.js +49 -0
- package/cjs/src/utils.spec.js.map +1 -1
- package/dist/{index-BdkKLLo1.js → index-0serzuii.js} +1 -1
- package/dist/index-CqrIh3Vj.js +7370 -0
- package/dist/index-aFN9fe8V.js +7371 -0
- package/dist/src/css-variables.d.ts +48 -0
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +37 -0
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/auto-frame-renderer.d.ts +3 -0
- package/dist/src/embed/auto-frame-renderer.d.ts.map +1 -0
- package/dist/src/embed/base.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +128 -10
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +38 -1
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/errors.d.ts +1 -0
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/index.d.ts +4 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/types.d.ts +196 -41
- 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 +2 -1
- package/dist/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
- package/dist/src/utils.d.ts +15 -0
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/tsembed-react.es.js +365 -52
- package/dist/tsembed-react.js +364 -51
- package/dist/tsembed.es.js +429 -53
- package/dist/tsembed.js +428 -51
- package/dist/visual-embed-sdk-react-full.d.ts +697 -343
- package/dist/visual-embed-sdk-react.d.ts +686 -332
- package/dist/visual-embed-sdk.d.ts +761 -380
- package/lib/package.json +2 -2
- package/lib/src/css-variables.d.ts +48 -0
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +37 -0
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js +39 -3
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/app.spec.js +24 -0
- package/lib/src/embed/app.spec.js.map +1 -1
- package/lib/src/embed/auto-frame-renderer.d.ts +3 -0
- package/lib/src/embed/auto-frame-renderer.d.ts.map +1 -0
- package/lib/src/embed/auto-frame-renderer.js +66 -0
- package/lib/src/embed/auto-frame-renderer.js.map +1 -0
- package/lib/src/embed/base.d.ts.map +1 -1
- package/lib/src/embed/base.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +128 -10
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js +42 -19
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +96 -3
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +38 -1
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +39 -11
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +179 -7
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/searchEmbed-basic-auth.spec.d.ts +2 -0
- package/lib/src/embed/searchEmbed-basic-auth.spec.d.ts.map +1 -0
- package/lib/src/embed/searchEmbed-basic-auth.spec.js +101 -0
- package/lib/src/embed/searchEmbed-basic-auth.spec.js.map +1 -0
- package/lib/src/errors.d.ts +1 -0
- package/lib/src/errors.d.ts.map +1 -1
- package/lib/src/errors.js +1 -0
- package/lib/src/errors.js.map +1 -1
- package/lib/src/index.d.ts +4 -3
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js +1 -0
- package/lib/src/index.js.map +1 -1
- package/lib/src/types.d.ts +196 -41
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +185 -19
- 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 +22 -0
- package/lib/src/utils/graphql/answerService/answer-queries.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.d.ts +2 -1
- package/lib/src/utils/graphql/answerService/answerService.d.ts.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.js +9 -1
- package/lib/src/utils/graphql/answerService/answerService.js.map +1 -1
- package/lib/src/utils/graphql/answerService/answerService.spec.js +73 -0
- package/lib/src/utils/graphql/answerService/answerService.spec.js.map +1 -1
- package/lib/src/utils/graphql/conversationService/conversation-queries.d.ts +3 -0
- package/lib/src/utils/graphql/conversationService/conversation-queries.d.ts.map +1 -0
- package/lib/src/utils/graphql/conversationService/conversation-queries.js +315 -0
- package/lib/src/utils/graphql/conversationService/conversation-queries.js.map +1 -0
- package/lib/src/utils/graphql/conversationService/conversation-service.d.ts +12 -0
- package/lib/src/utils/graphql/conversationService/conversation-service.d.ts.map +1 -0
- package/lib/src/utils/graphql/conversationService/conversation-service.js +84 -0
- package/lib/src/utils/graphql/conversationService/conversation-service.js.map +1 -0
- package/lib/src/utils/graphql/spotterService/conversation-queries.d.ts +3 -0
- package/lib/src/utils/graphql/spotterService/conversation-queries.d.ts.map +1 -0
- package/lib/src/utils/graphql/spotterService/conversation-queries.js +315 -0
- package/lib/src/utils/graphql/spotterService/conversation-queries.js.map +1 -0
- package/lib/src/utils/graphql/spotterService/conversation-service.d.ts +12 -0
- package/lib/src/utils/graphql/spotterService/conversation-service.d.ts.map +1 -0
- package/lib/src/utils/graphql/spotterService/conversation-service.js +84 -0
- package/lib/src/utils/graphql/spotterService/conversation-service.js.map +1 -0
- package/lib/src/utils/graphql/spotterService/nls-answer-queries.d.ts +2 -0
- package/lib/src/utils/graphql/spotterService/nls-answer-queries.d.ts.map +1 -0
- package/lib/src/utils/graphql/spotterService/nls-answer-queries.js +400 -0
- package/lib/src/utils/graphql/spotterService/nls-answer-queries.js.map +1 -0
- package/lib/src/utils/graphql/spotterService/nls-answer-service.d.ts +12 -0
- package/lib/src/utils/graphql/spotterService/nls-answer-service.d.ts.map +1 -0
- package/lib/src/utils/graphql/spotterService/nls-answer-service.js +50 -0
- package/lib/src/utils/graphql/spotterService/nls-answer-service.js.map +1 -0
- package/lib/src/utils.d.ts +15 -0
- package/lib/src/utils.d.ts.map +1 -1
- package/lib/src/utils.js +30 -0
- package/lib/src/utils.js.map +1 -1
- package/lib/src/utils.spec.js +50 -1
- package/lib/src/utils.spec.js.map +1 -1
- package/lib/src/visual-embed-sdk.d.ts +7186 -0
- package/package.json +3 -3
- package/src/css-variables.ts +60 -0
- package/src/embed/app.spec.ts +32 -0
- package/src/embed/app.ts +97 -1
- package/src/embed/auto-frame-renderer.ts +78 -0
- package/src/embed/base.ts +1 -0
- package/src/embed/conversation.spec.ts +117 -3
- package/src/embed/conversation.ts +189 -30
- package/src/embed/liveboard.spec.ts +264 -10
- package/src/embed/liveboard.ts +100 -11
- package/src/errors.ts +1 -0
- package/src/index.ts +8 -1
- package/src/types.ts +198 -42
- package/src/utils/graphql/answerService/answer-queries.ts +23 -0
- package/src/utils/graphql/answerService/answerService.spec.ts +87 -0
- package/src/utils/graphql/answerService/answerService.ts +13 -1
- package/src/utils.spec.ts +56 -0
- package/src/utils.ts +36 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thoughtspot/visual-embed-sdk",
|
|
3
|
-
"version": "1.45.2",
|
|
3
|
+
"version": "1.45.3-mcp.2",
|
|
4
4
|
"description": "ThoughtSpot Embed SDK",
|
|
5
5
|
"module": "lib/src/index.js",
|
|
6
6
|
"main": "dist/tsembed.js",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"test": "npm run test-sdk",
|
|
58
58
|
"posttest": "cat ./coverage/sdk/lcov.info | npx coveralls-next",
|
|
59
59
|
"is-publish-allowed": "node scripts/is-publish-allowed.js",
|
|
60
|
-
"prepublishOnly": "npm run is-publish-allowed && npm run
|
|
60
|
+
"prepublishOnly": "npm run is-publish-allowed && npm run tsc && npm run bundle-dts-file && npm run bundle-dts && npm run bundle-dts-react && npm run bundle-dts-react-full && npm run build",
|
|
61
61
|
"check-size": "npm run build && size-limit",
|
|
62
62
|
"publish-dev": "npm publish --tag dev",
|
|
63
63
|
"publish-prod": "npm publish --tag latest",
|
|
@@ -173,4 +173,4 @@
|
|
|
173
173
|
"globals": {
|
|
174
174
|
"window": {}
|
|
175
175
|
}
|
|
176
|
-
}
|
|
176
|
+
}
|
package/src/css-variables.ts
CHANGED
|
@@ -852,4 +852,64 @@ export interface CustomCssVariables {
|
|
|
852
852
|
* Width of the Spotter chat window.
|
|
853
853
|
*/
|
|
854
854
|
'--ts-var-spotter-chat-width'?: string;
|
|
855
|
+
|
|
856
|
+
/**
|
|
857
|
+
* Border color for the saved chats sidebar container.
|
|
858
|
+
*/
|
|
859
|
+
'--ts-var-saved-chats-border-color'?: string;
|
|
860
|
+
|
|
861
|
+
/**
|
|
862
|
+
* Background color for the saved chats sidebar container.
|
|
863
|
+
*/
|
|
864
|
+
'--ts-var-saved-chats-bg'?: string;
|
|
865
|
+
|
|
866
|
+
/**
|
|
867
|
+
* Text color for the saved chats sidebar container.
|
|
868
|
+
*/
|
|
869
|
+
'--ts-var-saved-chats-text-color'?: string;
|
|
870
|
+
|
|
871
|
+
/**
|
|
872
|
+
* Border color for the saved chats sidebar header.
|
|
873
|
+
*/
|
|
874
|
+
'--ts-var-saved-chats-header-border'?: string;
|
|
875
|
+
|
|
876
|
+
/**
|
|
877
|
+
* Color for the saved chats sidebar title text.
|
|
878
|
+
*/
|
|
879
|
+
'--ts-var-saved-chats-title-color'?: string;
|
|
880
|
+
|
|
881
|
+
/**
|
|
882
|
+
* Background color for buttons (new chat, toggle, footer) in the saved chats sidebar.
|
|
883
|
+
*/
|
|
884
|
+
'--ts-var-saved-chats-btn-bg'?: string;
|
|
885
|
+
|
|
886
|
+
/**
|
|
887
|
+
* Hover background color for buttons in the saved chats sidebar.
|
|
888
|
+
*/
|
|
889
|
+
'--ts-var-saved-chats-btn-hover-bg'?: string;
|
|
890
|
+
|
|
891
|
+
/**
|
|
892
|
+
* Text color for conversation items in the saved chats sidebar.
|
|
893
|
+
*/
|
|
894
|
+
'--ts-var-saved-chats-conv-text-color'?: string;
|
|
895
|
+
|
|
896
|
+
/**
|
|
897
|
+
* Background color for conversation items on hover in the saved chats sidebar.
|
|
898
|
+
*/
|
|
899
|
+
'--ts-var-saved-chats-conv-hover-bg'?: string;
|
|
900
|
+
|
|
901
|
+
/**
|
|
902
|
+
* Background color for the active/selected conversation in the saved chats sidebar.
|
|
903
|
+
*/
|
|
904
|
+
'--ts-var-saved-chats-conv-active-bg'?: string;
|
|
905
|
+
|
|
906
|
+
/**
|
|
907
|
+
* Border color for the saved chats sidebar footer.
|
|
908
|
+
*/
|
|
909
|
+
'--ts-var-saved-chats-footer-border'?: string;
|
|
910
|
+
|
|
911
|
+
/**
|
|
912
|
+
* Color for section title text (e.g., "Recent", "Older") in the saved chats sidebar.
|
|
913
|
+
*/
|
|
914
|
+
'--ts-var-saved-chats-section-title-color'?: string;
|
|
855
915
|
}
|
package/src/embed/app.spec.ts
CHANGED
|
@@ -443,6 +443,38 @@ describe('App embed tests', () => {
|
|
|
443
443
|
});
|
|
444
444
|
});
|
|
445
445
|
|
|
446
|
+
test('should set hideToolResponseCardBranding to true in url via spotterChatConfig', async () => {
|
|
447
|
+
const appEmbed = new AppEmbed(getRootEl(), {
|
|
448
|
+
...defaultViewConfig,
|
|
449
|
+
spotterChatConfig: {
|
|
450
|
+
hideToolResponseCardBranding: true,
|
|
451
|
+
},
|
|
452
|
+
} as AppViewConfig);
|
|
453
|
+
appEmbed.render();
|
|
454
|
+
await executeAfterWait(() => {
|
|
455
|
+
expectUrlMatchesWithParams(
|
|
456
|
+
getIFrameSrc(),
|
|
457
|
+
`http://${thoughtSpotHost}/?embedApp=true&profileAndHelpInNavBarHidden=false&hideToolResponseCardBranding=true${defaultParamsPost}#/home`,
|
|
458
|
+
);
|
|
459
|
+
});
|
|
460
|
+
});
|
|
461
|
+
|
|
462
|
+
test('should set toolResponseCardBrandingLabel in url via spotterChatConfig', async () => {
|
|
463
|
+
const appEmbed = new AppEmbed(getRootEl(), {
|
|
464
|
+
...defaultViewConfig,
|
|
465
|
+
spotterChatConfig: {
|
|
466
|
+
toolResponseCardBrandingLabel: 'MyBrand',
|
|
467
|
+
},
|
|
468
|
+
} as AppViewConfig);
|
|
469
|
+
appEmbed.render();
|
|
470
|
+
await executeAfterWait(() => {
|
|
471
|
+
expectUrlMatchesWithParams(
|
|
472
|
+
getIFrameSrc(),
|
|
473
|
+
`http://${thoughtSpotHost}/?embedApp=true&profileAndHelpInNavBarHidden=false&toolResponseCardBrandingLabel=MyBrand${defaultParamsPost}#/home`,
|
|
474
|
+
);
|
|
475
|
+
});
|
|
476
|
+
});
|
|
477
|
+
|
|
446
478
|
test('should set isLiveboardXLSXCSVDownloadEnabled to false in url', async () => {
|
|
447
479
|
const appEmbed = new AppEmbed(getRootEl(), {
|
|
448
480
|
...defaultViewConfig,
|
package/src/embed/app.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import { logger } from '../utils/logger';
|
|
12
|
-
import { calculateVisibleElementData, getQueryParamString, isUndefined, isValidCssMargin } from '../utils';
|
|
12
|
+
import { calculateVisibleElementData, getQueryParamString, isUndefined, isValidCssMargin, setParamIfDefined, validateHttpUrl } from '../utils';
|
|
13
13
|
import {
|
|
14
14
|
Param,
|
|
15
15
|
DOMSelector,
|
|
@@ -17,8 +17,12 @@ import {
|
|
|
17
17
|
EmbedEvent,
|
|
18
18
|
MessagePayload,
|
|
19
19
|
AllEmbedViewConfig,
|
|
20
|
+
ErrorDetailsTypes,
|
|
21
|
+
EmbedErrorCodes,
|
|
20
22
|
} from '../types';
|
|
21
23
|
import { V1Embed } from './ts-embed';
|
|
24
|
+
import { SpotterChatViewConfig, SpotterSidebarViewConfig } from './conversation';
|
|
25
|
+
import { ERROR_MESSAGE } from '../errors';
|
|
22
26
|
|
|
23
27
|
/**
|
|
24
28
|
* Pages within the ThoughtSpot app that can be embedded.
|
|
@@ -672,6 +676,42 @@ export interface AppViewConfig extends AllEmbedViewConfig {
|
|
|
672
676
|
* @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl
|
|
673
677
|
*/
|
|
674
678
|
updatedSpotterChatPrompt?: boolean;
|
|
679
|
+
/**
|
|
680
|
+
* Configuration for the Spotter sidebar UI customization.
|
|
681
|
+
* Only applicable when navigating to Spotter within the app.
|
|
682
|
+
*
|
|
683
|
+
* Supported embed types: `AppEmbed`
|
|
684
|
+
* @example
|
|
685
|
+
* ```js
|
|
686
|
+
* const embed = new AppEmbed('#tsEmbed', {
|
|
687
|
+
* ... //other embed view config
|
|
688
|
+
* spotterSidebarConfig: {
|
|
689
|
+
* enablePastConversationsSidebar: true,
|
|
690
|
+
* spotterSidebarTitle: 'My Conversations',
|
|
691
|
+
* },
|
|
692
|
+
* })
|
|
693
|
+
* ```
|
|
694
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl
|
|
695
|
+
*/
|
|
696
|
+
spotterSidebarConfig?: SpotterSidebarViewConfig;
|
|
697
|
+
/**
|
|
698
|
+
* Configuration for customizing Spotter chat UI
|
|
699
|
+
* branding in tool response cards.
|
|
700
|
+
*
|
|
701
|
+
* Supported embed types: `AppEmbed`
|
|
702
|
+
* @example
|
|
703
|
+
* ```js
|
|
704
|
+
* const embed = new AppEmbed('#tsEmbed', {
|
|
705
|
+
* ... //other embed view config
|
|
706
|
+
* spotterChatConfig: {
|
|
707
|
+
* hideToolResponseCardBranding: true,
|
|
708
|
+
* toolResponseCardBrandingLabel: 'MyBrand',
|
|
709
|
+
* },
|
|
710
|
+
* })
|
|
711
|
+
* ```
|
|
712
|
+
* @version SDK: 1.46.0 | ThoughtSpot: 26.4.0.cl
|
|
713
|
+
*/
|
|
714
|
+
spotterChatConfig?: SpotterChatViewConfig;
|
|
675
715
|
/**
|
|
676
716
|
* This is the minimum height (in pixels) for a full-height App.
|
|
677
717
|
* Setting this height helps resolve issues with empty Apps and
|
|
@@ -763,6 +803,8 @@ export class AppEmbed extends V1Embed {
|
|
|
763
803
|
isCentralizedLiveboardFilterUXEnabled = false,
|
|
764
804
|
isLinkParametersEnabled,
|
|
765
805
|
updatedSpotterChatPrompt,
|
|
806
|
+
spotterSidebarConfig,
|
|
807
|
+
spotterChatConfig,
|
|
766
808
|
minimumHeight,
|
|
767
809
|
isThisPeriodInDateFiltersEnabled,
|
|
768
810
|
} = this.viewConfig;
|
|
@@ -793,6 +835,60 @@ export class AppEmbed extends V1Embed {
|
|
|
793
835
|
params[Param.UpdatedSpotterChatPrompt] = !!updatedSpotterChatPrompt;
|
|
794
836
|
}
|
|
795
837
|
|
|
838
|
+
// Handle spotterSidebarConfig params
|
|
839
|
+
if (spotterSidebarConfig) {
|
|
840
|
+
const {
|
|
841
|
+
enablePastConversationsSidebar,
|
|
842
|
+
spotterSidebarTitle,
|
|
843
|
+
spotterSidebarDefaultExpanded,
|
|
844
|
+
spotterChatRenameLabel,
|
|
845
|
+
spotterChatDeleteLabel,
|
|
846
|
+
spotterDeleteConversationModalTitle,
|
|
847
|
+
spotterPastConversationAlertMessage,
|
|
848
|
+
spotterDocumentationUrl,
|
|
849
|
+
spotterBestPracticesLabel,
|
|
850
|
+
spotterConversationsBatchSize,
|
|
851
|
+
spotterNewChatButtonTitle,
|
|
852
|
+
} = spotterSidebarConfig;
|
|
853
|
+
|
|
854
|
+
setParamIfDefined(params, Param.EnablePastConversationsSidebar, enablePastConversationsSidebar, true);
|
|
855
|
+
setParamIfDefined(params, Param.SpotterSidebarDefaultExpanded, spotterSidebarDefaultExpanded, true);
|
|
856
|
+
setParamIfDefined(params, Param.SpotterSidebarTitle, spotterSidebarTitle);
|
|
857
|
+
setParamIfDefined(params, Param.SpotterChatRenameLabel, spotterChatRenameLabel);
|
|
858
|
+
setParamIfDefined(params, Param.SpotterChatDeleteLabel, spotterChatDeleteLabel);
|
|
859
|
+
setParamIfDefined(params, Param.SpotterDeleteConversationModalTitle, spotterDeleteConversationModalTitle);
|
|
860
|
+
setParamIfDefined(params, Param.SpotterPastConversationAlertMessage, spotterPastConversationAlertMessage);
|
|
861
|
+
setParamIfDefined(params, Param.SpotterBestPracticesLabel, spotterBestPracticesLabel);
|
|
862
|
+
setParamIfDefined(params, Param.SpotterConversationsBatchSize, spotterConversationsBatchSize);
|
|
863
|
+
setParamIfDefined(params, Param.SpotterNewChatButtonTitle, spotterNewChatButtonTitle);
|
|
864
|
+
|
|
865
|
+
// URL param with validation
|
|
866
|
+
if (spotterDocumentationUrl !== undefined) {
|
|
867
|
+
const [isValid, validationError] = validateHttpUrl(spotterDocumentationUrl);
|
|
868
|
+
if (isValid) {
|
|
869
|
+
params[Param.SpotterDocumentationUrl] = spotterDocumentationUrl;
|
|
870
|
+
} else {
|
|
871
|
+
this.handleError({
|
|
872
|
+
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
873
|
+
message: ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL,
|
|
874
|
+
code: EmbedErrorCodes.INVALID_URL,
|
|
875
|
+
error: validationError?.message || ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL,
|
|
876
|
+
});
|
|
877
|
+
}
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
|
|
881
|
+
// Handle spotterChatConfig params
|
|
882
|
+
if (spotterChatConfig) {
|
|
883
|
+
const {
|
|
884
|
+
hideToolResponseCardBranding,
|
|
885
|
+
toolResponseCardBrandingLabel,
|
|
886
|
+
} = spotterChatConfig;
|
|
887
|
+
|
|
888
|
+
setParamIfDefined(params, Param.HideToolResponseCardBranding, hideToolResponseCardBranding, true);
|
|
889
|
+
setParamIfDefined(params, Param.ToolResponseCardBrandingLabel, toolResponseCardBrandingLabel);
|
|
890
|
+
}
|
|
891
|
+
|
|
796
892
|
if (hideObjectSearch) {
|
|
797
893
|
params[Param.HideObjectSearch] = !!hideObjectSearch;
|
|
798
894
|
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { AutoMCPFrameRendererViewConfig, Param } from "../types";
|
|
2
|
+
import { TsEmbed } from "./ts-embed";
|
|
3
|
+
import { getQueryParamString } from "../utils";
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
export function startAutoMCPFrameRenderer(viewConfig: AutoMCPFrameRendererViewConfig = {}) {
|
|
7
|
+
|
|
8
|
+
const replaceWithMCPIframe = (iframe: HTMLIFrameElement) => {
|
|
9
|
+
const autoMCPFrameRenderer = new AutoFrameRenderer(viewConfig);
|
|
10
|
+
autoMCPFrameRenderer.replaceIframe(iframe);
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const observer = new MutationObserver((mutations) => {
|
|
14
|
+
for (const mutation of mutations) {
|
|
15
|
+
for (const node of Array.from(mutation.addedNodes)) {
|
|
16
|
+
if (node instanceof HTMLIFrameElement && isTSMCPIframe(node)) {
|
|
17
|
+
replaceWithMCPIframe(node);
|
|
18
|
+
}
|
|
19
|
+
if (node instanceof HTMLElement) {
|
|
20
|
+
node.querySelectorAll('iframe').forEach((iframe) => {
|
|
21
|
+
if (isTSMCPIframe(iframe)) {
|
|
22
|
+
replaceWithMCPIframe(iframe);
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
observer.observe(document.body, { childList: true, subtree: true });
|
|
31
|
+
|
|
32
|
+
return observer;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function isTSMCPIframe(iframe: HTMLIFrameElement) {
|
|
36
|
+
const src = iframe.src;
|
|
37
|
+
return src.includes(`${Param.Tsmcp}=true`);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
class AutoFrameRenderer extends TsEmbed {
|
|
41
|
+
private frameToReplace: HTMLIFrameElement;
|
|
42
|
+
|
|
43
|
+
constructor(protected viewConfig: AutoMCPFrameRendererViewConfig) {
|
|
44
|
+
viewConfig.embedComponentType = 'auto-frame-renderer';
|
|
45
|
+
const container = document.createElement('div');
|
|
46
|
+
super(container, viewConfig);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
private getMCPIframeSrc(sourceSrc: string) {
|
|
50
|
+
const queryParams = this.getEmbedParamsObject();
|
|
51
|
+
const sourceURL = new URL(sourceSrc);
|
|
52
|
+
const existingQueryParams = sourceURL.searchParams;
|
|
53
|
+
// convert existing query params to an object
|
|
54
|
+
const existingQueryParamsObject = Object.fromEntries(existingQueryParams);
|
|
55
|
+
delete existingQueryParamsObject[Param.Tsmcp];
|
|
56
|
+
|
|
57
|
+
// merge the existing query params with the new query params
|
|
58
|
+
const mergedQueryParams = { ...queryParams, ...existingQueryParamsObject };
|
|
59
|
+
const mergedQueryParamsString = getQueryParamString(mergedQueryParams);
|
|
60
|
+
const frameSrc = `${sourceURL.origin}${sourceURL.pathname}?${mergedQueryParamsString}/${sourceURL.hash}`;
|
|
61
|
+
return frameSrc;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
protected handleInsertionIntoDOM(child: string | Node): void {
|
|
65
|
+
if (this.frameToReplace) {
|
|
66
|
+
this.frameToReplace.replaceWith(child);
|
|
67
|
+
} else {
|
|
68
|
+
super.handleInsertionIntoDOM(child);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public async replaceIframe(iframe: HTMLIFrameElement): Promise<void> {
|
|
73
|
+
this.frameToReplace = iframe;
|
|
74
|
+
const src = this.getMCPIframeSrc(iframe.src);
|
|
75
|
+
await this.renderIFrame(src);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
package/src/embed/base.ts
CHANGED
|
@@ -37,6 +37,7 @@ import { getQueryParamString, getValueFromWindow, isWindowUndefined, storeValueI
|
|
|
37
37
|
import { resetAllCachedServices } from '../utils/resetServices';
|
|
38
38
|
import { reload } from '../utils/processTrigger';
|
|
39
39
|
import { ERROR_MESSAGE } from '../errors';
|
|
40
|
+
import { startAutoMCPFrameRenderer } from './auto-frame-renderer';
|
|
40
41
|
|
|
41
42
|
const CONFIG_DEFAULTS: Partial<EmbedConfig> = {
|
|
42
43
|
loginFailedMessage: 'Not logged in',
|
|
@@ -295,7 +295,9 @@ describe('ConversationEmbed', () => {
|
|
|
295
295
|
searchOptions: {
|
|
296
296
|
searchQuery: 'searchQuery',
|
|
297
297
|
},
|
|
298
|
-
|
|
298
|
+
spotterSidebarConfig: {
|
|
299
|
+
enablePastConversationsSidebar: true,
|
|
300
|
+
},
|
|
299
301
|
};
|
|
300
302
|
|
|
301
303
|
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
@@ -312,7 +314,9 @@ describe('ConversationEmbed', () => {
|
|
|
312
314
|
searchOptions: {
|
|
313
315
|
searchQuery: 'searchQuery',
|
|
314
316
|
},
|
|
315
|
-
|
|
317
|
+
spotterSidebarConfig: {
|
|
318
|
+
enablePastConversationsSidebar: false,
|
|
319
|
+
},
|
|
316
320
|
};
|
|
317
321
|
|
|
318
322
|
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
@@ -334,7 +338,9 @@ describe('ConversationEmbed', () => {
|
|
|
334
338
|
dataPanelV2: true,
|
|
335
339
|
showSpotterLimitations: true,
|
|
336
340
|
hideSampleQuestions: true,
|
|
337
|
-
|
|
341
|
+
spotterSidebarConfig: {
|
|
342
|
+
enablePastConversationsSidebar: true,
|
|
343
|
+
},
|
|
338
344
|
};
|
|
339
345
|
|
|
340
346
|
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
@@ -345,6 +351,44 @@ describe('ConversationEmbed', () => {
|
|
|
345
351
|
);
|
|
346
352
|
});
|
|
347
353
|
|
|
354
|
+
it('should render the conversation embed with tool response card branding hidden', async () => {
|
|
355
|
+
const viewConfig: SpotterEmbedViewConfig = {
|
|
356
|
+
worksheetId: 'worksheetId',
|
|
357
|
+
searchOptions: {
|
|
358
|
+
searchQuery: 'searchQuery',
|
|
359
|
+
},
|
|
360
|
+
spotterChatConfig: {
|
|
361
|
+
hideToolResponseCardBranding: true,
|
|
362
|
+
},
|
|
363
|
+
};
|
|
364
|
+
|
|
365
|
+
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
366
|
+
await conversationEmbed.render();
|
|
367
|
+
expectUrlMatchesWithParams(
|
|
368
|
+
getIFrameSrc(),
|
|
369
|
+
`http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&hideToolResponseCardBranding=true#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
|
|
370
|
+
);
|
|
371
|
+
});
|
|
372
|
+
|
|
373
|
+
it('should render the conversation embed with custom tool response card branding label', async () => {
|
|
374
|
+
const viewConfig: SpotterEmbedViewConfig = {
|
|
375
|
+
worksheetId: 'worksheetId',
|
|
376
|
+
searchOptions: {
|
|
377
|
+
searchQuery: 'searchQuery',
|
|
378
|
+
},
|
|
379
|
+
spotterChatConfig: {
|
|
380
|
+
toolResponseCardBrandingLabel: 'MyBrand',
|
|
381
|
+
},
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
385
|
+
await conversationEmbed.render();
|
|
386
|
+
expectUrlMatchesWithParams(
|
|
387
|
+
getIFrameSrc(),
|
|
388
|
+
`http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&toolResponseCardBrandingLabel=MyBrand#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
|
|
389
|
+
);
|
|
390
|
+
});
|
|
391
|
+
|
|
348
392
|
it('should ensure deprecated ConversationEmbed class maintains same functionality as SpotterEmbed', async () => {
|
|
349
393
|
const viewConfig: SpotterEmbedViewConfig = {
|
|
350
394
|
worksheetId: 'worksheetId',
|
|
@@ -402,4 +446,74 @@ describe('ConversationEmbed', () => {
|
|
|
402
446
|
`http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&updatedSpotterChatPrompt=false#/embed/insights/conv-assist?worksheet=worksheetId&query=searchQuery`,
|
|
403
447
|
);
|
|
404
448
|
});
|
|
449
|
+
|
|
450
|
+
describe('spotter sidebar config params', () => {
|
|
451
|
+
it.each([
|
|
452
|
+
['enablePastConversationsSidebar', true, 'enablePastConversationsSidebar=true'],
|
|
453
|
+
['spotterSidebarTitle', 'My Conversations', 'spotterSidebarTitle=My%20Conversations'],
|
|
454
|
+
['spotterSidebarDefaultExpanded', true, 'spotterSidebarDefaultExpanded=true'],
|
|
455
|
+
['spotterChatRenameLabel', 'Edit Name', 'spotterChatRenameLabel=Edit%20Name'],
|
|
456
|
+
['spotterChatDeleteLabel', 'Remove', 'spotterChatDeleteLabel=Remove'],
|
|
457
|
+
['spotterDeleteConversationModalTitle', 'Remove Conversation', 'spotterDeleteConversationModalTitle=Remove%20Conversation'],
|
|
458
|
+
['spotterPastConversationAlertMessage', 'Viewing past conversation', 'spotterPastConversationAlertMessage=Viewing%20past%20conversation'],
|
|
459
|
+
['spotterBestPracticesLabel', 'Help Tips', 'spotterBestPracticesLabel=Help%20Tips'],
|
|
460
|
+
['spotterConversationsBatchSize', 50, 'spotterConversationsBatchSize=50'],
|
|
461
|
+
['spotterNewChatButtonTitle', 'Start New Conversation', 'spotterNewChatButtonTitle=Start%20New%20Conversation'],
|
|
462
|
+
['spotterDocumentationUrl', 'https://docs.example.com/spotter', 'spotterDocumentationUrl=https%3A%2F%2Fdocs.example.com%2Fspotter'],
|
|
463
|
+
])('should render with spotterSidebarConfig.%s', async (configKey, configValue, expectedParam) => {
|
|
464
|
+
const viewConfig: SpotterEmbedViewConfig = {
|
|
465
|
+
worksheetId: 'worksheetId',
|
|
466
|
+
spotterSidebarConfig: {
|
|
467
|
+
[configKey]: configValue,
|
|
468
|
+
},
|
|
469
|
+
};
|
|
470
|
+
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
471
|
+
await conversationEmbed.render();
|
|
472
|
+
expectUrlMatchesWithParams(
|
|
473
|
+
getIFrameSrc(),
|
|
474
|
+
`http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&${expectedParam}#/embed/insights/conv-assist?worksheet=worksheetId&query=`,
|
|
475
|
+
);
|
|
476
|
+
});
|
|
477
|
+
|
|
478
|
+
it.each([
|
|
479
|
+
['invalid URL format', 'invalid-url'],
|
|
480
|
+
['invalid protocol (ftp)', 'ftp://docs.example.com/spotter'],
|
|
481
|
+
])('should handle error for spotterSidebarConfig.spotterDocumentationUrl with %s', async (_, invalidUrl) => {
|
|
482
|
+
const viewConfig: SpotterEmbedViewConfig = {
|
|
483
|
+
worksheetId: 'worksheetId',
|
|
484
|
+
spotterSidebarConfig: {
|
|
485
|
+
spotterDocumentationUrl: invalidUrl,
|
|
486
|
+
},
|
|
487
|
+
};
|
|
488
|
+
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
489
|
+
(conversationEmbed as any).handleError = jest.fn();
|
|
490
|
+
await conversationEmbed.render();
|
|
491
|
+
expect((conversationEmbed as any).handleError).toHaveBeenCalledWith(
|
|
492
|
+
expect.objectContaining({
|
|
493
|
+
errorType: ErrorDetailsTypes.VALIDATION_ERROR,
|
|
494
|
+
message: ERROR_MESSAGE.INVALID_SPOTTER_DOCUMENTATION_URL,
|
|
495
|
+
code: EmbedErrorCodes.INVALID_URL,
|
|
496
|
+
}),
|
|
497
|
+
);
|
|
498
|
+
});
|
|
499
|
+
|
|
500
|
+
it('should render with multiple spotterSidebarConfig options', async () => {
|
|
501
|
+
const viewConfig: SpotterEmbedViewConfig = {
|
|
502
|
+
worksheetId: 'worksheetId',
|
|
503
|
+
spotterSidebarConfig: {
|
|
504
|
+
enablePastConversationsSidebar: true,
|
|
505
|
+
spotterSidebarTitle: 'Chats',
|
|
506
|
+
spotterSidebarDefaultExpanded: true,
|
|
507
|
+
spotterNewChatButtonTitle: 'New',
|
|
508
|
+
spotterConversationsBatchSize: 25,
|
|
509
|
+
},
|
|
510
|
+
};
|
|
511
|
+
const conversationEmbed = new SpotterEmbed(getRootEl(), viewConfig);
|
|
512
|
+
await conversationEmbed.render();
|
|
513
|
+
expectUrlMatchesWithParams(
|
|
514
|
+
getIFrameSrc(),
|
|
515
|
+
`http://${thoughtSpotHost}/v2/?${defaultParams}&isSpotterExperienceEnabled=true&enablePastConversationsSidebar=true&spotterSidebarDefaultExpanded=true&spotterSidebarTitle=Chats&spotterConversationsBatchSize=25&spotterNewChatButtonTitle=New#/embed/insights/conv-assist?worksheet=worksheetId&query=`,
|
|
516
|
+
);
|
|
517
|
+
});
|
|
518
|
+
});
|
|
405
519
|
});
|