declare module '@thoughtspot/visual-embed-sdk' { // Generated by dts-bundle-generator v9.5.1 /** * The list of customization css variables. These * are the only allowed variables possible. */ export interface CustomCssVariables { /** * Background color of the Liveboard, visualization, Search, and Answer pages. */ "--ts-var-root-background"?: string; /** * Color of the text on application pages. */ "--ts-var-root-color"?: string; /** * Font type for the text on application pages. */ "--ts-var-root-font-family"?: string; /** * Text transformation specification for UI elements in the app. */ "--ts-var-root-text-transform"?: string; /** * Font color of the text on toggle buttons such as * **All**, **Answers**, and **Liveboards** on the Home page (Classic experience), * the text color of the chart and table tiles on Home page (New modular Homepage * experience), title text on the AI-generated charts and tables, and object titles on * list pages such as *Liveboards* and *Answers*. * The default color code is #2770EF. * */ "--ts-var-application-color"?: string; /** * Background color of the top navigation panel. */ "--ts-var-nav-background"?: string; /** * Font color of the top navigation panel. */ "--ts-var-nav-color"?: string; /** * Background color of the *Search data* button. */ "--ts-var-search-data-button-background"?: string; /** * Color of the text on the *Search data* button. */ "--ts-var-search-data-button-font-color"?: string; /** * Font of the text on the *Search data* button. */ "--ts-var-search-data-button-font-family"?: string; /** * Font color of the text in the Search bar. */ "--ts-var-search-bar-text-font-color"?: string; /** * Font of the text in the Search bar. */ "--ts-var-search-bar-text-font-family"?: string; /** * Font style of the text in the Search bar. */ "--ts-var-search-bar-text-font-style"?: string; /** * Background color of the search bar. */ "--ts-var-search-bar-background"?: string; /** * Background color of the search suggestions panel. */ "--ts-var-search-auto-complete-background"?: string; /** * Background color of the navigation panel that allows you to undo, redo, and reset * search operations. */ "--ts-var-search-navigation-button-background"?: string; /** * Background color of the navigation help text that appears at the bottom of the * search suggestions panel. */ "--ts-var-search-bar-navigation-help-text-background"?: string; /** * Background color of the search suggestion block on hover. */ "--ts-var-search-bar-auto-complete-hover-background"?: string; /** * Font color of the text in the search suggestion panel. */ "--ts-var-search-auto-complete-font-color"?: string; /** * Font color of the sub-text that appears below the keyword in the search suggestion * panel. */ "--ts-var-search-auto-complete-subtext-font-color"?: string; /** * Background color of the input box in the Spotter page. */ "--ts-var-spotter-input-background"?: string; /** * Background color of the previously asked prompt message in the Spotter page. */ "--ts-var-spotter-prompt-background"?: string; /** * Background color of the data panel. */ "--ts-var-answer-data-panel-background-color"?: string; /** * Background color of the vertical panel on the right side of the Answer page, which * includes the options to edit charts and tables. */ "--ts-var-answer-edit-panel-background-color"?: string; /** * Background color of the chart switcher on search results and Answer pages. */ "--ts-var-answer-view-table-chart-switcher-background"?: string; /** * Background color of the currently selected chart type in the chart switcher. */ "--ts-var-answer-view-table-chart-switcher-active-background"?: string; /** * Border-radius of main buttons. * For example, the *Search data* button in the top navigation panel. */ "--ts-var-button-border-radius"?: string; /** * Border-radius of small buttons such as secondary buttons. * For example, share and favorite buttons. */ "--ts-var-button--icon-border-radius"?: string; /** * Font color of the text on primary buttons. For example, the primary buttons on * Liveboard*, Answer, *Data* workspace, *SpotIQ*, or *Home* page. */ "--ts-var-button--primary-color"?: string; /** * Font family specification for the text on primary buttons. */ "--ts-var-button--primary--font-family"?: string; /** * Background color of the primary buttons. For example, the primary buttons such as * Pin* and *Save*. */ "--ts-var-button--primary-background"?: string; /** * Background color of the primary buttons on hover. */ "--ts-var-button--primary--hover-background"?: string; /** * Backgroud color of the primary buttons when active. */ "--ts-var-button--primary--active-background"?: string; /** * Font color of the text on the secondary buttons. */ "--ts-var-button--secondary-color"?: string; /** * Font family specification for the text on the secondary buttons. */ "--ts-var-button--secondary--font-family"?: string; /** * Background color of the secondary buttons. */ "--ts-var-button--secondary-background"?: string; /** * Background color of the secondary button on hover. */ "--ts-var-button--secondary--hover-background"?: string; /** * Backgroud color of the secondary buttons when active. */ "--ts-var-button--secondary--active-background"?: string; /** * Font color of the tertiary button. For example, the *Undo*, *Redo*, and *Reset* * buttons on the *Search* page. */ "--ts-var-button--tertiary-color"?: string; /** * Background color of the tertiary button. */ "--ts-var-button--tertiary-background"?: string; /** * Background color of the tertiary button when a user hovers over these buttons. */ "--ts-var-button--tertiary--hover-background"?: string; /** * Backgroud color of the tertiary buttons when active. */ "--ts-var-button--tertiary--active-background"?: string; /** * Font color of the title text of a visualization or Answer. */ "--ts-var-viz-title-color"?: string; /** * Font family specification for the title text of a visualization/Answer. */ "--ts-var-viz-title-font-family"?: string; /** * Text transformation specification for visualization and Answer titles. */ "--ts-var-viz-title-text-transform"?: string; /** * Font color of the description text and subtitle of a visualization or Answer. */ "--ts-var-viz-description-color"?: string; /** * Font family specification of description text and subtitle of a visualization or * Answer. */ "--ts-var-viz-description-font-family"?: string; /** * Text transformation specification for description text and subtitle of a * visualization or Answer. */ "--ts-var-viz-description-text-transform"?: string; /** * Border-radius for the visualization tiles and header panel on a Liveboard. */ "--ts-var-viz-border-radius"?: string; /** * Box shadow property for the visualization tiles and header panel on a Liveboard. */ "--ts-var-viz-box-shadow"?: string; /** * Background color of the visualization tiles and header panel on a Liveboard. */ "--ts-var-viz-background"?: string; /** * Background color of the legend on a visualization or Answer. */ "--ts-var-viz-legend-hover-background"?: string; /** * Background color of the selected chart type on the chart selection widget. */ "--ts-var-answer-chart-select-background"?: string; /** * Background color of the chart type element when a user hovers over a chart type on * the chart selection widget. */ "--ts-var-answer-chart-hover-background"?: string; /** * Border-radius of filter chips. */ "--ts-var-chip-border-radius"?: string; /** * Shadow effect for filter chips. */ "--ts-var-chip-box-shadow"?: string; /** * Background color of filter chips. */ "--ts-var-chip-background"?: string; /** * Font color of the filter label when a filter chip is selected */ "--ts-var-chip--active-color"?: string; /** * Background color of the filter chips when selected. */ "--ts-var-chip--active-background"?: string; /** * Font color of the text on filter chips when hovered over. */ "--ts-var-chip--hover-color"?: string; /** * Background color of filter chips on hover. */ "--ts-var-chip--hover-background"?: string; /** * Font color of the text on filter chips. */ "--ts-var-chip-color"?: string; /** * Font family specification for the text on filter chips. */ "--ts-var-chip-title-font-family"?: string; /** * Font color of axis title on charts. */ "--ts-var-axis-title-color"?: string; /** * Font family specification for the X and Y axis title text. */ "--ts-var-axis-title-font-family"?: string; /** * Font color of the X and Y axis labels. */ "--ts-var-axis-data-label-color"?: string; /** * Font family specification for X and Y axis labels. */ "--ts-var-axis-data-label-font-family"?: string; /** * Font color of the menu items. */ "--ts-var-menu-color"?: string; /** * Background color of menu panels. */ "--ts-var-menu-background"?: string; /** * Font family specification for the menu items. */ "--ts-var-menu-font-family"?: string; /** * Text capitalization specification for the menu items. */ "--ts-var-menu-text-transform"?: string; /** * Background color for menu items on hover. */ "--ts-var-menu--hover-background"?: string; /** * Text color for selected menu items. */ "--ts-var-menu-selected-text-color"?: string; /** * Background color of the dialogs. */ "--ts-var-dialog-body-background"?: string; /** * Font color of the body text displayed on dialogs. */ "--ts-var-dialog-body-color"?: string; /** * Background color of the header text on dialogs. */ "--ts-var-dialog-header-background"?: string; /** * Font color of the header text on dialogs. */ "--ts-var-dialog-header-color"?: string; /** * Background color of the footer area on dialogs. */ "--ts-var-dialog-footer-background"?: string; /** * Background for selected state in list */ "--ts-var-list-selected-background"?: string; /** * Background for hover state in list */ "--ts-var-list-hover-background"?: string; /** * Background for hover state in segment control. */ "--ts-var-segment-control-hover-background"?: string; /** * Text color for slected item in modular home's watchlist. */ "--ts-var-home-watchlist-selected-text-color"?: string; /** * Text color for favorite carousel find your favorites card in modular home. */ "--ts-var-home-favorite-suggestion-card-text-color"?: string; /** * Icon color for favorite carousel find your favorites card in modular home. */ "--ts-var-home-favorite-suggestion-card-icon-color"?: string; /** * Background for favorite carousel find your favorites card in modular home. */ "--ts-var-home-favorite-suggestion-card-background"?: string; /** * Border color of checkbox in error state. */ "--ts-var-checkbox-error-border"?: string; /** * Border color of checkbox. */ "--ts-var-checkbox-border-color"?: string; /** * Border color of checkbox in hover state. */ "--ts-var-checkbox-hover-border"?: string; /** * Border and font color of checkbox in active state. */ "--ts-var-checkbox-active-color"?: string; /** * Border color and font color of checkbox in checked state. */ "--ts-var-checkbox-checked-color"?: string; /** * Border and font color of checkbox in disabled state. */ "--ts-var-checkbox-checked-disabled"?: string; /** * Background color of checkbox. */ "--ts-var-checkbox-background-color"?: string; /** * Background color of the layout in the Liveboard. */ "--ts-var-liveboard-layout-background"?: string; /** * Background color of the header in the Liveboard. */ "--ts-var-liveboard-header-background"?: string; /** * Font color of the header in the Liveboard. */ "--ts-var-liveboard-header-font-color"?: string; /** * Border color of the tiles in the Liveboard. */ "--ts-var-liveboard-tile-border-color"?: string; /** * Background color of the tiles in the Liveboard. */ "--ts-var-liveboard-tile-background"?: string; /** * Border radius of the tiles in the Liveboard. */ "--ts-var-liveboard-tile-border-radius"?: string; /** * Padding of the tiles in the Liveboard. */ "--ts-var-liveboard-tile-padding"?: string; /** * Background color of the table header in the Liveboard. */ "--ts-var-liveboard-tile-table-header-background"?: string; /** * Padding of the groups in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-padding"?: string; /** * Font size of the title of the groups in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-title-font-size"?: string; /** * Font weight of the title of the groups in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-title-font-weight"?: string; /** * Font size of the title of the tiles inside the groups in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-tile-title-font-size"?: string; /** * Font weight of the title of the tiles inside the groups in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-tile-title-font-weight"?: string; /** * Padding of the group tiles in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-tile-padding"?: string; /** * Padding of the answer viz in the Liveboard. */ "--ts-var-liveboard-answer-viz-padding"?: string; /** * Background color of the groups in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-background"?: string; /** * Border color of the groups in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-border-color"?: string; /** * Font color of the heading of the note title in the Liveboard. */ "--ts-var-liveboard-notetitle-heading-font-color"?: string; /** * Font color of the body of the note title in the Liveboard. */ "--ts-var-liveboard-notetitle-body-font-color"?: string; /** * Font color of the title of the groups in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-title-font-color"?: string; /** * Font color of the description of the groups in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-description-font-color"?: string; /** * Font color of the title of the tiles inside the groups in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-tile-title-font-color"?: string; /** * Font color of the description of the tiles inside the groups in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-tile-description-font-color"?: string; /** * Background color of the tiles inside the groups in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-group-tile-background"?: string; /** * Background color of the filter chips in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-chip-background"?: string; /** * Font color of the filter chips in the Liveboard. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-chip-color"?: string; /** * Background color of the filter chips in the Liveboard on hover. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-chip--hover-background"?: string; /** * Background color of the filter chips in the Liveboard on active. * * Please enable the Liveboard Masterpieces feature in your ThoughtSpot instance and * then set the isLiveboardMasterpiecesEnabled SDK flag to true to start modifying * this CSS variable. */ "--ts-var-liveboard-chip--active-background"?: string; /** * Width of the side panel in the Liveboard. */ "--ts-var-side-panel-width"?: string; /** * Background color of the edit bar in the Liveboard. */ "--ts-var-liveboard-edit-bar-background"?: string; /** * Breakpoint for the dual column layout in the Liveboard. */ "--ts-var-liveboard-dual-column-breakpoint"?: string; /** * Breakpoint for the single column layout in the Liveboard. */ "--ts-var-liveboard-single-column-breakpoint"?: string; /** * Background color of the cross filter layout in the Liveboard. */ "--ts-var-liveboard-cross-filter-layout-background"?: string; /** * Border color of the active tab in the Liveboard. */ "--ts-var-liveboard-tab-active-border-color"?: string; /** * Font color of the hover tab in the Liveboard. */ "--ts-var-liveboard-tab-hover-color"?: string; /** * Font size of the title of the tiles in the Liveboard. */ "--ts-var-liveboard-tile-title-fontsize"?: string; /** * Font weight of the title of the tiles in the Liveboard. */ "--ts-var-liveboard-tile-title-fontweight"?: string; /** * Background color of the parameter chips in the Liveboard. */ "--ts-var-parameter-chip-background"?: string; /** * Font color of the parameter chips in the Liveboard. */ "--ts-var-parameter-chip-text-color"?: string; /** * Background color of the parameter chips in the Liveboard on hover. */ "--ts-var-parameter-chip-hover-background"?: string; /** * Font color of the parameter chips in the Liveboard on hover. */ "--ts-var-parameter-chip-hover-text-color"?: string; /** * Background color of the parameter chips in the Liveboard on active. */ "--ts-var-parameter-chip-active-background"?: string; /** * Font color of the parameter chips in the Liveboard on active. */ "--ts-var-parameter-chip-active-text-color"?: string; /** * Background color of the action button in the Liveboard header. */ "--ts-var-liveboard-header-action-button-background"?: string; /** * Font color of the action button in the Liveboard header. */ "--ts-var-liveboard-header-action-button-font-color"?: string; /** * Font color of the action button in the Liveboard header on hover. */ "--ts-var-liveboard-header-action-button-hover-color"?: string; /** * Font color of the action button in the Liveboard header on active. */ "--ts-var-liveboard-header-action-button-active-color"?: string; /** * Background color of the badge in the Liveboard header. */ "--ts-var-liveboard-header-badge-background"?: string; /** * Font color of the badge in the Liveboard header. */ "--ts-var-liveboard-header-badge-font-color"?: string; /** * Background color of the modified badge in the Liveboard header. */ "--ts-var-liveboard-header-badge-modified-background"?: string; /** * Font color of the modified badge in the Liveboard header. */ "--ts-var-liveboard-header-badge-modified-font-color"?: string; /** * Font color of the badge in the Liveboard header on hover. */ "--ts-var-liveboard-header-badge-hover-color"?: string; /** * Font color of the badge in the Liveboard header on active. */ "--ts-var-liveboard-header-badge-active-color"?: string; /** * Font color of the hero text in the KPI widget. */ "--ts-var-kpi-hero-color"?: string; /** * Font color of the comparison text in the KPI widget. */ "--ts-var-kpi-comparison-color"?: string; /** * Font color of the analyze text in the KPI widget. */ "--ts-var-kpi-analyze-text-color"?: string; /** * Font color of the legend title in the heatmap chart. */ "--ts-var-chart-heatmap-legend-title-color"?: string; /** * Font color of the legend label in the heatmap chart. */ "--ts-var-chart-heatmap-legend-label-color"?: string; /** * Font color of the legend title in the treemap chart. */ "--ts-var-chart-treemap-legend-title-color"?: string; /** * Font color of the legend label in the treemap chart. */ "--ts-var-chart-treemap-legend-label-color"?: string; /** * Color of the positive change in the KPI. */ "--ts-var-kpi-positive-change-color"?: string; /** * Color of the negative change in the KPI. */ "--ts-var-kpi-negative-change-color"?: string; /** * Background color of the change analysis insights. */ "--ts-var-change-analysis-insights-background"?: string; /** * Background color of the forecasting card in the SpotIQ analyze. */ "--ts-var-spotiq-analyze-forecasting-card-background"?: string; /** * Background color of the outlier card in the SpotIQ analyze. */ "--ts-var-spotiq-analyze-outlier-card-background"?: string; /** * Background color of the trend card in the SpotIQ analyze. */ "--ts-var-spotiq-analyze-trend-card-background"?: string; /** * Background color of the crosscorrelation card in the SpotIQ analyze. */ "--ts-var-spotiq-analyze-crosscorrelation-card-background"?: string; /** * Background color of the summary header in the CCA modal. */ "--ts-var-cca-modal-summary-header-background"?: string; /** * Width of the Spotter chat window. */ "--ts-var-spotter-chat-width"?: string; /** * Border color for the saved chats sidebar container. */ "--ts-var-saved-chats-border-color"?: string; /** * Background color for the saved chats sidebar container. */ "--ts-var-saved-chats-bg"?: string; /** * Text color for the saved chats sidebar container. */ "--ts-var-saved-chats-text-color"?: string; /** * Border color for the saved chats sidebar header. */ "--ts-var-saved-chats-header-border"?: string; /** * Color for the saved chats sidebar title text. */ "--ts-var-saved-chats-title-color"?: string; /** * Background color for buttons (new chat, toggle, footer) in the saved chats sidebar. */ "--ts-var-saved-chats-btn-bg"?: string; /** * Hover background color for buttons in the saved chats sidebar. */ "--ts-var-saved-chats-btn-hover-bg"?: string; /** * Text color for conversation items in the saved chats sidebar. */ "--ts-var-saved-chats-conv-text-color"?: string; /** * Background color for conversation items on hover in the saved chats sidebar. */ "--ts-var-saved-chats-conv-hover-bg"?: string; /** * Background color for the active/selected conversation in the saved chats sidebar. */ "--ts-var-saved-chats-conv-active-bg"?: string; /** * Border color for the saved chats sidebar footer. */ "--ts-var-saved-chats-footer-border"?: string; /** * Color for section title text (e.g., "Recent", "Older") in the saved chats sidebar. */ "--ts-var-saved-chats-section-title-color"?: string; /** * Text color of the styling panel in the Liveboard. */ "--ts-var-liveboard-styling-panel-text-color"?: string; /** * Border color of the styling panel in the Liveboard. */ "--ts-var-liveboard-styling-panel-border-color"?: string; /** * Background color of the styling button in the Liveboard. */ "--ts-var-liveboard-styling-button-background"?: string; /** * Text color of the styling button in the Liveboard. */ "--ts-var-liveboard-styling-button-text-color"?: string; /** * Background color of the styling button in the Liveboard on hover. */ "--ts-var-liveboard-styling-button-hover-background"?: string; /** * Background color of the styling button in the Liveboard when active. */ "--ts-var-liveboard-styling-button-active-background"?: string; /** * Text color of the styling button in the Liveboard on hover. */ "--ts-var-liveboard-styling-button-hover-text-color"?: string; /** * Box shadow of the styling button in the Liveboard. */ "--ts-var-liveboard-styling-button-shadow"?: string; /** * Background color of the color palette in the Liveboard styling panel. */ "--ts-var-liveboard-styling-color-palette-background"?: string; } export interface SessionInterface { sessionId: string; genNo: number; acSession: { sessionId: string; genNo: number; }; } export interface UnderlyingDataPoint { columnId: string; dataValue: any; } /** * AnswerService provides a simple way to work with ThoughtSpot Answers. * * This service allows you to interact with ThoughtSpot Answers programmatically, * making it easy to customize visualizations, filter data, and extract insights * directly from your application. * * You can use this service to: * * - Add or remove columns from Answers (`addColumns`, `removeColumns`, * `addColumnsByName`) * - Apply filters to Answers (`addFilter`) * - Get data from Answers in different formats (JSON, CSV, PNG) (`fetchData`, * `fetchCSVBlob`, `fetchPNGBlob`) * - Get data for specific points in visualizations * (`getUnderlyingDataForPoint`) * - Run custom queries (`executeQuery`) * - Add visualizations to Liveboards (`addDisplayedVizToLiveboard`) * * @example * ```js * // Get the answer service * embed.on(EmbedEvent.Data, async (e) => { * const service = await embed.getAnswerService(); * * // Add columns to the answer * await service.addColumnsByName(["Sales", "Region"]); * * // Get the data * const data = await service.fetchData(); * console.log(data); * }); * ``` * * @example * ```js * // Get data for a point in a visualization * embed.on(EmbedEvent.CustomAction, async (e) => { * const underlying = await e.answerService.getUnderlyingDataForPoint([ * 'Product Name', * 'Sales Amount' * ]); * * const data = await underlying.fetchData(0, 100); * console.log(data); * }); * ``` * * @version SDK: 1.25.0 | ThoughtSpot: 9.10.0.cl * @group Events */ export class AnswerService { private session; private thoughtSpotHost; private selectedPoints?; private answer; private tmlOverride; /** * Should not need to be called directly. * @param session * @param answer * @param thoughtSpotHost * @param selectedPoints */ constructor(session: SessionInterface, answer: any, thoughtSpotHost: string, selectedPoints?: VizPoint[]); /** * Get the details about the source used in the answer. * This can be used to get the list of all columns in the data source for example. */ getSourceDetail(): Promise; /** * Remove columnIds and return updated answer session. * @param columnIds * @returns */ removeColumns(columnIds: string[]): Promise; /** * Add columnIds and return updated answer session. * @param columnIds * @returns */ addColumns(columnIds: string[]): Promise; /** * Add columns by names and return updated answer session. * @param columnNames * @returns * @example * ```js * embed.on(EmbedEvent.Data, async (e) => { * const service = await embed.getAnswerService(); * await service.addColumnsByName([ * "col name 1", * "col name 2" * ]); * console.log(await service.fetchData()); * }); * ``` */ addColumnsByName(columnNames: string[]): Promise; /** * Add a filter to the answer. * @param columnName * @param operator * @param values * @returns */ addFilter(columnName: string, operator: RuntimeFilterOp, values: RuntimeFilter["values"]): Promise; updateDisplayMode(displayMode?: string): Promise; getSQLQuery(fetchSQLWithAllColumns?: boolean): Promise; /** * Fetch data from the answer. * @param offset * @param size * @returns */ fetchData(offset?: number, size?: number): Promise<{ columns: any; data: any; }>; /** * Fetch the data for the answer as a CSV blob. This might be * quicker for larger data. * @param userLocale * @param includeInfo Include the CSV header in the output * @returns Response */ fetchCSVBlob(userLocale?: string, includeInfo?: boolean): Promise; /** * Fetch the data for the answer as a PNG blob. This might be * quicker for larger data. * @param userLocale * @param includeInfo * @param omitBackground Omit the background in the PNG * @param deviceScaleFactor The scale factor for the PNG * @return Response */ fetchPNGBlob(userLocale?: string, omitBackground?: boolean, deviceScaleFactor?: number): Promise; /** * Just get the internal URL for this answer's data * as a CSV blob. * @param userLocale * @param includeInfo * @returns */ getFetchCSVBlobUrl(userLocale?: string, includeInfo?: boolean): string; /** * Just get the internal URL for this answer's data * as a PNG blob. * @param userLocale * @param omitBackground * @param deviceScaleFactor */ getFetchPNGBlobUrl(userLocale?: string, omitBackground?: boolean, deviceScaleFactor?: number): string; /** * Get underlying data given a point and the output column names. * In case of a context menu action, the selectedPoints are * automatically passed. * @param outputColumnNames * @param selectedPoints * @example * ```js * embed.on(EmbedEvent.CustomAction, e => { * const underlying = await e.answerService.getUnderlyingDataForPoint([ * 'col name 1' // The column should exist in the data source. * ]); * const data = await underlying.fetchData(0, 100); * }) * ``` * @version SDK: 1.25.0 | ThoughtSpot: 9.10.0.cl */ getUnderlyingDataForPoint(outputColumnNames: string[], selectedPoints?: UnderlyingDataPoint[]): Promise; /** * Execute a custom graphql query in the context of the answer. * @param query graphql query * @param variables graphql variables * @returns */ executeQuery(query: string, variables: any): Promise; /** * Get the internal session details for the answer. * @returns */ getSession(): SessionInterface; getAnswer(): Promise; getTML(): Promise; addDisplayedVizToLiveboard(liveboardId: string): Promise; setTMLOverride(override: any): void; } /** * The authentication mechanism for allowing access to * the embedded app * @group Authentication / Init */ export enum AuthType { /** * No authentication on the SDK. Pass-through to the embedded App. Alias for * `Passthrough`. * @example * ```js * init({ * // ... * authType: AuthType.None, * }); * ``` */ None = "None", /** * Passthrough SSO to the embedded application within the iframe. Requires least * configuration, but may not be supported by all IDPs. This will behave like `None` * if SSO is not configured on ThoughtSpot. * * To use this: * Your SAML or OpenID provider must allow iframe redirects. * For example, if you are using Okta as IdP, you can enable iframe embedding. * @version SDK: 1.15.0 | ThoughtSpot: 8.8.0.cl * @example * ```js * init({ * // ... * authType: AuthType.EmbeddedSSO, * }); * ``` */ EmbeddedSSO = "EmbeddedSSO", /** * SSO using SAML, Use {@link SAMLRedirect} instead * @deprecated This option is deprecated. * @hidden */ SSO = "SSO_SAML", /** * SSO using SAML, Use {@link SAMLRedirect} instead * @deprecated This option is deprecated. * @hidden */ SAML = "SSO_SAML", /** * SSO using SAML * Makes the host application redirect to the SAML IdP. Use this * if your IdP does not allow itself to be embedded. * * This redirects the host application to the SAML IdP. The host application * will be redirected back to the ThoughtSpot app after authentication. * @example * ```js * init({ * // ... * authType: AuthType.SAMLRedirect, * }); * ``` * * This opens the SAML IdP in a popup window. The popup is triggered * when the user clicks the trigger button. The popup window will be * closed automatically after authentication. * @example * ```js * init({ * // ... * authType: AuthType.SAMLRedirect, * authTriggerText: 'Login with SAML', * authTriggerContainer: '#tsEmbed', * inPopup: true, * }); * ``` * * Can also use the event to trigger the popup flow. Works the same * as the above example. * @example * ```js * const authEE = init({ * // ... * authType: AuthType.SAMLRedirect, * inPopup: true, * }); * * someButtonOnYourPage.addEventListener('click', () => { * authEE.emit(AuthEvent.TRIGGER_SSO_POPUP); * }); * ``` */ SAMLRedirect = "SSO_SAML", /** * SSO using OIDC * SSO using OIDC, Use {@link OIDCRedirect} instead * @deprecated This option is deprecated. * @hidden */ OIDC = "SSO_OIDC", /** * SSO using OIDC * Will make the host application redirect to the OIDC IdP. * See code samples in {@link SAMLRedirect}. */ OIDCRedirect = "SSO_OIDC", /** * Trusted authentication server * Use {@link TrustedAuth} instead * @deprecated This option is deprecated. * @hidden */ AuthServer = "AuthServer", /** * Trusted authentication server. Use your own authentication server * which returns a bearer token, generated using the `secret_key` obtained * from ThoughtSpot. * @example * ```js * init({ * // ... * authType: AuthType.TrustedAuthToken, * getAuthToken: () => { * return fetch('https://my-backend.app/ts-token') * .then((response) => response.json()) * .then((data) => data.token); * } * }); * ``` */ TrustedAuthToken = "AuthServer", /** * Trusted authentication server Cookieless, Use your own authentication * server which returns a bearer token, generated using the `secret_key` * obtained from ThoughtSpot. This uses a cookieless authentication * approach, recommended to bypass the third-party cookie-blocking restriction * implemented by some browsers. * @version SDK: 1.22.0 | ThoughtSpot: 9.3.0.cl, 9.5.1.sw * @example * ```js * init({ * // ... * authType: AuthType.TrustedAuthTokenCookieless, * getAuthToken: () => { * return fetch('https://my-backend.app/ts-token') * .then((response) => response.json()) * .then((data) => data.token); * } * }); * ``` */ TrustedAuthTokenCookieless = "AuthServerCookieless", /** * Use the ThoughtSpot login API to authenticate to the cluster directly. * * Warning: This feature is primarily intended for developer testing. It is * strongly advised not to use this authentication method in production. */ Basic = "Basic" } /** * * **Note**: This attribute is not supported in the classic (V1) homepage experience. * */ export enum HomeLeftNavItem { /** * The *Search data* option in * the *Insights* left navigation panel. * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl */ SearchData = "search-data", /** * The *Home* menu option in * the *Insights* left navigation panel. * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl */ Home = "insights-home", /** * The *Liveboards* menu option in * the *Insights* left navigation panel. * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl */ Liveboards = "liveboards", /** * The *Answers* menu option in * the *Insights* left navigation panel. * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl */ Answers = "answers", /** * The *Monitor subscriptions* menu option in * the *Insights* left navigation panel. * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl */ MonitorSubscription = "monitor-alerts", /** * The *SpotIQ analysis* menu option in * the *Insights* left navigation panel. * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl */ SpotIQAnalysis = "spotiq-analysis", /** * The *Liveboard schedules* menu option in * the *Insights* left navigation panel. * @version SDK: 1.34.0 | ThoughtSpot: 10.3.0.cl */ LiveboardSchedules = "liveboard-schedules", /** * The create option in the *Insights* * left navigation panel. * Available in the V3 navigation experience. * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ Create = "create", /** * The *Spotter* menu option in the *Insights* * left navigation panel. * Available in the V3 navigation experience. * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ Spotter = "spotter", /** * The *Favorites* section in the *Insights* * left navigation panel. * Available in the V3 navigation experience. * @version SDK: 1.41.0 | ThoughtSpot: 10.12.0.cl */ Favorites = "favorites" } export type DOMSelector = string | HTMLElement; /** * inline customCSS within the {@link CustomisationsInterface}. * Use {@link CustomCssVariables} or css rules. */ export interface customCssInterface { /** * The custom css variables, which can be set. * The variables are available in the {@link CustomCssVariables} * interface. For more information, see * link:https://developers.thoughtspot.com/docs/css-variables-reference[CSS variable reference]. */ variables?: CustomCssVariables; /** * Can be used to define a custom font face * like: * @example * ```js * rules_UNSTABLE?: { * "@font-face": { * "font-family": "custom-font", * "src": url("/path/") * }; * }; * ``` * * Also, custom css rules outside of variables. * @example * ```js * rules_UNSTABLE?: { * ".thoughtspot_class_name": { * "border-radius": "10px", * margin: "20px" * }; * }; * ``` */ rules_UNSTABLE?: { [selector: string]: { [declaration: string]: string; }; }; } /** * Styles within the {@link CustomisationsInterface}. */ export interface CustomStyles { customCSSUrl?: string; customCSS?: customCssInterface; } /** * Configuration to define the customization on the Embedded * ThoughtSpot components. * You can customize styles, text strings, and icons. * For more information, see link:https://developers.thoughtspot.com/docs/custom-css[CSS customization framework]. * @example * ```js * init({ * // ... * customizations: { * style: { * customCSS: { * variables: {}, * rules_UNSTABLE: {} * } * }, * content: { * strings: { * 'LIVEBOARDS': 'Dashboards', * 'ANSWERS': 'Visualizations', * 'Edit': 'Modify', * 'Show underlying data': 'Show source data', * 'SpotIQ': 'Insights', * 'Monitor': 'Alerts', * } * }, * iconSpriteUrl: 'https://my-custom-icon-sprite.svg' * } * }) * ``` */ export interface CustomisationsInterface { style?: CustomStyles; content?: { /** * @version SDK: 1.26.0 | 9.7.0.cl */ strings?: Record; stringIDs?: Record; stringIDsUrl?: string; [key: string]: any; }; iconSpriteUrl?: string; } /** * The configuration object for embedding ThoughtSpot content. * It includes the ThoughtSpot hostname or IP address, * the type of authentication, and the authentication endpoint * if a trusted authentication server is used. * @group Authentication / Init */ export interface EmbedConfig { /** * The ThoughtSpot cluster hostname or IP address. */ thoughtSpotHost: string; /** * The authentication mechanism to use. */ authType: AuthType; /** * [AuthServer] The trusted authentication endpoint to use to get the * authentication token. A `GET` request is made to the * authentication API endpoint, which returns the token * as a plaintext response. For trusted authentication, * the `authEndpoint` or `getAuthToken` attribute is required. */ authEndpoint?: string; /** * [AuthServer] A function that invokes the trusted authentication endpoint * and returns a Promise that resolves to the `auth token` string. * For trusted authentication, the `authEndpoint` or `getAuthToken` * attribute is required. * * It is advisable to fetch a new token inside this method and not * reuse the old issued token. When auth expires this method is * called again and if it is called with an older token, the authentication * will not succeed. */ getAuthToken?: () => Promise; /** * [AuthServer / Basic] The user name of the ThoughtSpot user. This * attribute is required for trusted authentication. */ username?: string; /** * [Basic] The ThoughtSpot login password corresponding to the username * * Warning: This feature is primarily intended for developer testing. It is * strongly advised not to use this authentication method in production. */ password?: string; /** * [SSO] For SSO Authentication, if `noRedirect` is set to true, it will * open the SAML auth flow in a popup, instead of redirecting the browser in * place. * @deprecated This option is deprecated. * @default false */ noRedirect?: boolean; /** * [SSO] For SSO Authentication, if `inPopup` is set to true, it will open * the SAML auth flow in a popup, instead of redirecting the browser in place. * * Need to use this with `authTriggerContainer`. Or manually trigger * the `AuthEvent.TRIGGER_SSO_POPUP` event on a user interaction. * @version SDK: 1.18.0 * @default false */ inPopup?: boolean; /** * [SSO] For SSO Authentication, one can supply an optional path param; * This will be the path on the host origin where the SAML flow will be * terminated. * * Eg: "/dashboard", "#/foo" [Do not include the host] * @version SDK: 1.10.2 | ThoughtSpot: 8.2.0.cl, 8.4.1.sw */ redirectPath?: string; /** @internal */ basepath?: string; /** * Boolean to define if the query parameters in the ThoughtSpot URL * should be encoded in base64. This provides additional security to * ThoughtSpot clusters against cross-site scripting attacks. * @default false */ shouldEncodeUrlQueryParams?: boolean; /** * Suppress cookie access alert when third-party cookies are blocked by the * user's browser. Third-party cookie blocking is the default behaviour on * some web browsers like Safari. If you set this attribute to `true`, * you are encouraged to handle `noCookieAccess` event, to show your own treatment * in this case. * @default false */ suppressNoCookieAccessAlert?: boolean; /** * Ignore the cookie access alert when third-party cookies are blocked by the * user's browser. If you set this to `true`, the embedded iframe behaviour * persists even in the case of a non-logged-in user. * @default false */ ignoreNoCookieAccess?: boolean; /** * Re-login a user with the previous login options * when a user session expires. * @default false */ autoLogin?: boolean; /** * Disable redirection to the login page when the embedded session expires * This flag is typically used alongside the combination of authentication modes such * as {@link AuthType.AuthServer} and auto-login behavior {@link * EmbedConfig.autoLogin} * @version SDK: 1.9.3 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw * @default false */ disableLoginRedirect?: boolean; /** * This message is displayed in the embedded view when a user login fails. * @version SDK: 1.10.1 | ThoughtSpot: 8.2.0.cl, 8.4.1.sw */ loginFailedMessage?: string; /** * Calls the prefetch method internally when set to `true` * @default false */ callPrefetch?: boolean; /** * When there are multiple objects embedded, queue the rendering of embedded objects * to start after the previous embed's render is complete. This helps improve * performance by decreasing the load on the browser. * @version SDK: 1.5.0 | ThoughtSpot: ts7.oct.cl, 7.2.1 * @default false */ queueMultiRenders?: boolean; /** * [AuthServer|Basic] Detect if third-party cookies are enabled by doing an * additional call. This is slower and should be avoided. Listen to the * `NO_COOKIE_ACCESS` event to handle the situation. * * This is slightly slower than letting the browser handle the cookie check, as it * involves an extra network call. * @version SDK: 1.10.4 | ThoughtSpot: 8.2.0.cl, 8.4.1.sw */ detectCookieAccessSlow?: boolean; /** * Hide the `beta` alert warning message for SearchEmbed. * @version SDK: 1.12.0 | ThoughtSpot: 8.4.0.cl, 8.4.1.sw */ suppressSearchEmbedBetaWarning?: boolean; /** * Custom style params for embed Config. * @version SDK: 1.17.0 | ThoughtSpot: 8.9.0.cl, 9.0.1.sw */ customizations?: CustomisationsInterface; /** * For `inPopup` SAMLRedirect or OIDCRedirect authentication, we need a * button that the user can click to trigger the flow. * This attribute sets a containing element for that button. * @version SDK: 1.17.0 | ThoughtSpot: 8.9.0.cl, 9.0.1.sw * @example * ```js * init({ * authType: AuthType.SAMLRedirect, * inPopup: true, * authTriggerContainer: '#auth-trigger-container' * }) * ``` */ authTriggerContainer?: string | HTMLElement; /** * Specify that we want to use the `AuthEvent.TRIGGER_SSO_POPUP` event to trigger * SAML popup. This is useful when you want to trigger the popup on a custom user * action. * */ useEventForSAMLPopup?: boolean; /** * Text to show in the button which triggers the popup auth flow. * Default: `Authorize`. * @version SDK: 1.17.0 | ThoughtSpot: 8.9.0.cl, 9.0.1.sw */ authTriggerText?: string; /** * Prevent embedded application users from accessing ThoughtSpot * application pages outside of the iframe. * @version SDK: 1.22.0 | ThoughtSpot: 9.3.0.cl, 9.5.1.sw * @default true */ blockNonEmbedFullAppAccess?: boolean; /** * Host config in case embedded app is inside TS app itself * @hidden */ hostConfig?: { hostUserGuid: string; hostClusterId: string; hostClusterName: string; }; /** * Pendo API key to enable Pendo tracking to your own subscription, the key * is added as an additional key to the embed, as per this link:https://support.pendo.io/hc/en-us/articles/360032201951-Send-data-to-multiple-subscriptions[document]. * @version SDK: 1.27.0 | ThoughtSpot: 9.8.0.cl */ pendoTrackingKey?: string; /** * If passed as true all alerts will be suppressed in the embedded app. * @version SDK: 1.26.2 | ThoughtSpot: * */ suppressErrorAlerts?: boolean; /** * Suppress or show specific types of logs in the console output. * For example, `LogLevel.ERROR` shows only Visual Embed SDK and * ThoughtSpot application errors and suppresses * other logs such as warnings, information alerts, * and debug messages in the console output. * * @version SDK: 1.26.7 | ThoughtSpot: 9.10.0.cl * @default LogLevel.ERROR * @example * ```js * init({ * ...embedConfig, * logLevel: LogLevel.SILENT * }) * ``` */ logLevel?: LogLevel; /** * Disables the Mixpanel tracking from the SDK. * @version SDK: 1.27.9 * @hidden */ disableSDKTracking?: boolean; /** * Overrides default/user preferred locale for date formatting * @version SDK: 1.28.4 | ThoughtSpot: 10.0.0.cl, 9.5.0.sw */ dateFormatLocale?: string; /** * Overrides default/user preferred locale for number formatting * @version SDK: 1.28.4 | ThoughtSpot: 10.0.0.cl, 9.5.0.sw */ numberFormatLocale?: string; /** * Format to be used for currency when currency format is set to infer from browser * @version SDK: 1.28.4 | ThoughtSpot: 10.0.0.cl, 9.5.0.sw */ currencyFormat?: string; /** * This flag is used to disable the token verification in the SDK. * Enabling this flag will also disable the caching of the token. * @hidden * @version SDK: 1.28.5 | ThoughtSpot: 9.10.0.cl, 10.1.0.sw * @example * ```js * init({ * ...embedConfig, * disableTokenVerification : true * }) * ``` */ disableTokenVerification?: boolean; /** * This flag is used to disable showing the login failure page in the embedded app. * @version SDK: 1.32.3 | ThoughtSpot: 10.1.0.cl, 10.1.0.sw */ disableLoginFailurePage?: boolean; /** * This is an object (key/val) of override flags which will be applied * to the internal embedded object. This can be used to add any * URL flag. * Warning: This option is for advanced use only and is used internally * to control embed behavior in non-regular ways. We do not publish the * list of supported keys and values associated with each. * @version SDK: 1.33.5 | ThoughtSpot: * * @example * ```js * const embed = new LiveboardEmbed('#embed', { * ... // other liveboard view config * additionalFlags: { * flag1: 'value1', * flag2: 'value2' * } * }); * ``` */ additionalFlags?: { [key: string]: string | number | boolean; }; /** * This is an object (key/val) for customVariables being * used by the third party tool's script. * @version SDK: 1.37.0 | ThoughtSpot: 10.8.0.cl * @example * ```js * const embed = new LiveboardEmbed('#embed', { * ... // other liveboard view config * customVariablesForThirdPartyTools: { * key1: 'value1', * key2: 'value2' * } * }); * ``` */ customVariablesForThirdPartyTools?: Record; disablePreauthCache?: boolean; /** * Disable fullscreen presentation mode functionality. When enabled, prevents entering * and exiting fullscreen mode for embedded visualizations during presentations. * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl * @default true (feature is disabled by default) * @example * ```js * init({ * ... // other embed config options * disableFullscreenPresentation: false, // enables the feature * }) * ``` */ disableFullscreenPresentation?: boolean; /** * Custom Actions allows users to define interactive UI actions (like buttons or menu * items) that appear in ThoughtSpot's visualizations, answers, and Liveboards. These * actions enable users to trigger custom workflows — such as navigating to an * external app, calling an API, or opening a modal — based on the data context of * what they clicked can be used to trigger custom logic when the action is clicked. * @version SDK: 1.43.0 | ThoughtSpot: 10.14.0.cl * @example * ```js * import { CustomActionsPosition, CustomActionTarget } from '@thoughtspot/visual-embed-sdk'; * init({ * ... // other embed config options * customActions: [ * { * // Unique identifier for the custom action * id: 'my-custom-action', * * // Display name shown to users in the UI * name: 'My Custom Action', * * // Where the action appears in the UI * // PRIMARY: Shows as a primary button (e.g., in the toolbar) * // MENU: Shows in the "More" menu (three dots menu) * // CONTEXTMENU: Shows in the right-click context menu * position: CustomActionsPosition.PRIMARY, * * // What type of content this action applies to * // ANSWER: Available on answer pages * target: CustomActionTarget.ANSWER, * * // Optional: Restrict where this action appears based on data models * // dataModelIds: { * // // Restrict to specific data models * // modelIds: ['model-id-1', 'model-id-2'], * // // Restrict to specific columns within models * // modelColumnNames: ['model-id::column-name'] * // }, * * // Optional: Restrict where this action appears based on metadata * // metadataIds: { * // // Restrict to specific answers * // answerIds: ['answer-id-1', 'answer-id-2'], * // }, * // // Restrict to specific groups (for group-based access control) * // groupIds: ['group-id-1', 'group-id-2'], * // // Restrict to specific organizations (for multi-org deployments) * // orgIds: ['org-id-1', 'org-id-2'], * } * ], * }) * ``` * @example * ```js * import { CustomActionsPosition, CustomActionTarget } from '@thoughtspot/visual-embed-sdk'; * init({ * ... // other embed config options * customActions: [ * { * // Unique identifier for the custom action * id: 'my-custom-action', * * // Display name shown to users in the UI * name: 'My Custom Action', * * // Where the action appears in the UI * // MENU: Shows in the "More" menu (three dots menu) * // CONTEXTMENU: Shows in the right-click context menu * position: CustomActionsPosition.MENU, * * // What type of content this action applies to * // SPOTTER: Available in Spotter (AI-powered search) * target: CustomActionTarget.SPOTTER, * * // Optional: Restrict where this action appears based on data models * // dataModelIds: { * // // Restrict to specific data models * // modelIds: ['model-id-1', 'model-id-2'], * // }, * // // Restrict to specific groups (for group-based access control) * // groupIds: ['group-id-1'], * // // Restrict to specific organizations (for multi-org deployments) * // orgIds: ['org-id-1'], * } * ], * }) * ``` * @example * ```js * import { CustomActionsPosition, CustomActionTarget } from '@thoughtspot/visual-embed-sdk'; * init({ * ... // other embed config options * customActions: [ * { * // Unique identifier for the custom action * id: 'my-liveboard-custom-action', * * // Display name shown to users in the UI * name: 'My Liveboard Custom Action', * * // Where the action appears in the UI * // PRIMARY: Shows as a primary button (e.g., in the toolbar) * // MENU: Shows in the "More" menu (three dots menu) * position: CustomActionsPosition.PRIMARY, * * // What type of content this action applies to * // LIVEBOARD: Available on liveboard pages * target: CustomActionTarget.LIVEBOARD, * * // Optional: Restrict where this action appears based on metadata * // metadataIds: { * // // Restrict to specific liveboards * // liveboardIds: ['liveboard-id-1', 'liveboard-id-2'], * // }, * // // Restrict to specific groups (for group-based access control) * // groupIds: ['group-id-1', 'group-id-2'], * // // Restrict to specific organizations (for multi-org deployments) * // orgIds: ['org-id-1', 'org-id-2'], * }, * { * // Unique identifier for the custom action * id: 'my-viz-custom-action', * * // Display name shown to users in the UI * name: 'My Viz Custom Action', * * // Where the action appears in the UI * // PRIMARY: Shows as a primary button (e.g., in the toolbar) * // MENU: Shows in the "More" menu (three dots menu) * // CONTEXTMENU: Shows in the right-click context menu * position: CustomActionsPosition.PRIMARY, * * // What type of content this action applies to * // VIZ: Available on individual visualizations * target: CustomActionTarget.VIZ, * * // Optional: Restrict where this action appears based on metadata * // metadataIds: { * // // Restrict to specific answers * // answerIds: ['answer-id-1', 'answer-id-2'], * // // Restrict to specific liveboard. If liveboardId is * // // passed, custom actions will appear on all vizzes of liveboard * // liveboardIds: ['liveboard-id-1'], * // // Restrict to specific vizIds * // vizIds: ['viz-id-1'] * // }, * // dataModelIds: { * // // Restrict to specific data models * // modelIds: ['model-id-1', 'model-id-2'], * // // Restrict to specific columns within models * // modelColumnNames: ['model-id::column-name'] * // }, * // // Restrict to specific groups (for group-based access control) * // groupIds: ['group-id-1', 'group-id-2'], * // // Restrict to specific organizations (for multi-org deployments) * // orgIds: ['org-id-1', 'org-id-2'], * } * ], * }) * ``` */ customActions?: CustomAction[]; /** * Wait for the cleanup to be completed before destroying the embed. * @version SDK: 1.41.0 | ThoughtSpot: 10.12.0.cl * @default false */ waitForCleanupOnDestroy?: boolean; /** * The timeout for the cleanup to be completed before destroying the embed. * @version SDK: 1.41.0 | ThoughtSpot: 10.12.0.cl * @default 5000 */ cleanupTimeout?: number; } export interface LayoutConfig { } /** * Embedded iframe configuration * @group Embed components */ export interface FrameParams { /** * The width of the iframe (unit is pixels if numeric). */ width?: number | string; /** * The height of the iframe (unit is pixels if numeric). */ height?: number | string; /** * Set to 'lazy' to enable lazy loading of the embedded TS frame. * This will defer loading of the frame until it comes into the * viewport. This is useful for performance optimization. */ loading?: "lazy" | "eager" | "auto"; /** * These parameters will be passed to the iframe * as is. */ [key: string]: string | number | boolean | undefined; } /** * The common configuration object for an embedded view. */ export interface BaseViewConfig extends ApiInterceptFlags { /** * @hidden */ layoutConfig?: LayoutConfig; /** * The width and height dimensions to render an embedded * object inside your app. Specify the values in pixels or percentage. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterAgentEmbed`, `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 7.2.1 * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * frameParams: { * width: '500px' | '50%', * height: '400px' | '60%', * }, * }) * ``` */ frameParams?: FrameParams; /** * @hidden */ theme?: string; /** * @hidden */ styleSheet__unstable?: string; /** * The list of actions to disable from the primary menu, more menu * (...), and the contextual menu. Disabled actions are grayed out * and still visible to the user, but cannot be clicked. * Use this when you want to disable an action (keep it visible but non-interactive). * To completely remove an action from the UI, use {@link hiddenActions} instead. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterAgentEmbed`, `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * disabledActions: [Action.Download, Action.Save], * }); * ``` */ disabledActions?: Action[]; /** * The tooltip to display for disabled actions. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterAgentEmbed`, `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * disabledActions: [Action.Download, Action.Save], * disabledActionReason: "Reason for disabling", * }); * ``` */ disabledActionReason?: string; /** * The list of actions to completely remove from the embedded view. * Hidden actions are not visible to the user at all (fully removed from the UI). * Use this when you want to remove an action entirely. * To keep an action visible but non-interactive (grayed out), use {@link disabledActions} instead. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterAgentEmbed`, `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * hiddenActions: [Action.Download, Action.Export], * }); * ``` * @important */ hiddenActions?: Action[]; /** * The list of actions to display from the primary menu, more menu * (...), and the contextual menu. These will be only actions that * are visible to the user. * Use this as an allowlist — only the actions listed here will be shown. * All other actions will be hidden. Use either this or {@link hiddenActions}, not both. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterAgentEmbed`, `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw * @important * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * visibleActions: [Action.Download, Action.Export], * }); * ``` */ visibleActions?: Action[]; /** * The locale settings to apply to the embedded view. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterAgentEmbed`, `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.9.4 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * locale:'en', * }) * ``` */ locale?: string; /** * This is an object (key/val) of override flags which will be applied * to the internal embedded object. This can be used to add any * URL flag. * If the same flags are passed in init, they will be overridden by the values here. * Warning: This option is for advanced use only and is used internally * to control embed behavior in non-regular ways. We do not publish the * list of supported keys and values associated with each. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterAgentEmbed`, `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * additionalFlags: { * flag1: 'value1', * flag2: 'value2' * }, * }); * ``` */ additionalFlags?: { [key: string]: string | number | boolean; }; /** * Dynamic CSSUrl and customCSS to be injected in the loaded application. * You would also need to set `style-src` in the CSP settings. * @version SDK: 1.17.2 | ThoughtSpot: 8.4.1.sw, 8.4.0.cl * @default '' */ customizations?: CustomisationsInterface; /** * Insert as a sibling of the target container, instead of appending to a * child inside it. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterAgentEmbed`, `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.2.0 | ThoughtSpot: 9.0.0.cl, 9.0.0.sw * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * insertAsSibling:true, * }) * ``` */ insertAsSibling?: boolean; /** * Use a pre-rendered iframe from a pool of pre-rendered iframes * if available and matches the configuration. * @version SDK: 1.22.0 * @hidden * * See [docs]() on how to create a prerender pool. */ usePrerenderedIfAvailable?: boolean; /** * PreRender id to be used for PreRendering the embed. * Use PreRender to render the embed in the background and then * show or hide the rendered embed using showPreRender or hidePreRender respectively. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterAgentEmbed`, `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.25.0 | ThoughtSpot: 9.6.0.cl, 9.8.0.sw * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * preRenderId: "preRenderId-123", * }); * embed.showPreRender(); * ``` */ preRenderId?: string; /** * Determines if the PreRender component should dynamically track the size * of its embedding element and adjust its own size accordingly. * Enabling this option allows the PreRender component to automatically adapt * its dimensions based on changes to the size of the embedding element. * @type {boolean} * @default false * @version SDK: 1.24.0 | ThoughtSpot: 9.4.0.cl, 9.4.0.sw * @example * ```js * // Disable tracking PreRender size in the configuration * const config = { * doNotTrackPreRenderSize: true, * }; * * // Instantiate an object with the configuration * const myComponent = new MyComponent(config); * ``` */ doNotTrackPreRenderSize?: boolean; /** * Enable the V2 shell. This can provide performance benefits * due to a lighter-weight shell. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterAgentEmbed`, `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.31.2 | ThoughtSpot: 10.0.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * enableV2Shell_experimental: true, * }); * ``` */ enableV2Shell_experimental?: boolean; /** * For internal tracking of the embed component type. * @hidden */ embedComponentType?: string; /** * This flag can be used to expose translation IDs on the embedded app. * @default false * @version SDK: 1.37.0 | ThoughtSpot: 10.9.0.cl */ exposeTranslationIDs?: boolean; /** * This flag can be used to disable links inside the embedded app, * and disable redirection of links in a new tab. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterAgentEmbed`, `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.32.1 | ThoughtSpot: 10.3.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * disableRedirectionLinksInNewTab: true, * }); * ``` */ disableRedirectionLinksInNewTab?: boolean; /** * Overrides an Org context for embedding application users. * This parameter allows a user authenticated to one Org to view the * objects from another Org. * The `overrideOrgId` setting is honoured only if the * Per Org URL feature is enabled on your ThoughtSpot instance. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterAgentEmbed`, `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.35.0 | ThoughtSpot: 10.5.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * overrideOrgId: 142536, * }); * ``` */ overrideOrgId?: number; /** * Flag to override the *Open Link in New Tab* context * menu option. * * For improved link override handling, use * {@link enableLinkOverridesV2} instead. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, * `SearchEmbed`, `SpotterAgentEmbed`, * `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... // other embed view config * linkOverride: true, * }) * ``` */ linkOverride?: boolean; /** * Enables the V2 link override mechanism with improved * handling. When enabled, navigation links within the * embedded ThoughtSpot app are intercepted and routed * through the SDK via the `EmbedEvent.DialogOpen` * event. * * The SDK automatically sends {@link linkOverride} * alongside this flag for backward compatibility with * older ThoughtSpot versions. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, * `SearchEmbed`, `SpotterAgentEmbed`, * `SpotterEmbed`, `SearchBarEmbed` * @version SDK: 1.46.0 | ThoughtSpot: 26.2.0.cl * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... // other embed view config * enableLinkOverridesV2: true, * }); * * embed.on(EmbedEvent.DialogOpen, (payload) => { * console.log('Link clicked:', payload); * }); * ``` */ enableLinkOverridesV2?: boolean; /** * The primary action to display on top of the viz for Liveboard and App Embed. * Use this to set the primary action. * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.39.0 | ThoughtSpot: 10.11.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * primaryAction: Action.Download * }); * ``` */ primaryAction?: Action | string; /** * flag to enable insert into slides action * @hidden * @private */ insertInToSlide?: boolean; /** * Show alert messages and toast messages in the embed. * Supported in all embed types. * * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * showAlerts:true, * }) * ``` */ showAlerts?: boolean; /** * Custom Actions allows users to define interactive UI actions (like buttons or menu * items) that appear in ThoughtSpot's visualizations, answers, and Liveboards. These * actions enable users to trigger custom workflows — such as navigating to an * external app, calling an API, or opening a modal — based on the data context of * what they clicked can be used to trigger custom logic when the action is clicked. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed`, `SpotterEmbed` * @version SDK: 1.43.0 | ThoughtSpot: 10.14.0.cl * @example * ```ts * import { * CustomActionPayload, * CustomActionsPosition, * CustomActionTarget, * } from '@thoughtspot/visual-embed-sdk'; * // Use supported embed types such as AppEmbed or LiveboardEmbed * const embed = new LiveboardEmbed('#tsEmbed', { * ... // other embed config options * customActions: [ * { * // Unique identifier for the custom action * id: 'my-custom-action', * * // Display name shown to users in the UI * name: 'My Custom Action', * * // Where the action appears in the UI * // PRIMARY: Shows as a primary button (e.g., in the toolbar) * // MENU: Shows in the "More" menu (three dots menu) * // CONTEXTMENU: Shows in the right-click context menu * position: CustomActionsPosition.PRIMARY, * * // What type of content this action applies to * // ANSWER: Available on answer pages * target: CustomActionTarget.ANSWER, * * // Optional: Restrict where this action appears based on data models * // dataModelIds: { * // // Restrict to specific data models * // modelIds: ['model-id-1', 'model-id-2'], * // // Restrict to specific columns within models * // modelColumnNames: ['model-id::column-name'] * // }, * * // Optional: Restrict where this action appears based on metadata * // metadataIds: { * // // Restrict to specific answers * // answerIds: ['answer-id-1', 'answer-id-2'], * // }, * // // Restrict to specific groups (for group-based access control) * // groupIds: ['group-id-1', 'group-id-2'], * // // Restrict to specific organizations (for multi-org deployments) * // orgIds: ['org-id-1', 'org-id-2'], * } * ], * }) * * // to trigger a custom flow on custom action click listen to Custom action embed event * embed.on(EmbedEvent.CustomAction, (payload: CustomActionPayload) => { * console.log('Custom Action event:', payload); * }) * ``` * @example * ```ts * import { * CustomActionsPosition, * CustomActionTarget, * } from '@thoughtspot/visual-embed-sdk'; * const embed = new LiveboardEmbed('#tsEmbed', { * ... // other embed config options * customActions: [ * { * // Unique identifier for the custom action * id: 'my-custom-action', * * // Display name shown to users in the UI * name: 'My Custom Action', * * // Where the action appears in the UI * // MENU: Shows in the "More" menu (three dots menu) * // CONTEXTMENU: Shows in the right-click context menu * position: CustomActionsPosition.MENU, * * // What type of content this action applies to * // SPOTTER: Available in Spotter (AI-powered search) * target: CustomActionTarget.SPOTTER, * * // Optional: Restrict where this action appears based on data models * // dataModelIds: { * // // Restrict to specific data models * // modelIds: ['model-id-1', 'model-id-2'], * // }, * // // Restrict to specific groups (for group-based access control) * // groupIds: ['group-id-1'], * // // Restrict to specific organizations (for multi-org deployments) * // orgIds: ['org-id-1'], * } * ], * }) * ``` * @example * ```ts * import { * CustomActionsPosition, * CustomActionTarget, * } from '@thoughtspot/visual-embed-sdk'; * const embed = new LiveboardEmbed('#tsEmbed', { * ... // other embed config options * customActions: [ * { * // Unique identifier for the custom action * id: 'my-liveboard-custom-action', * * // Display name shown to users in the UI * name: 'My Liveboard Custom Action', * * // Where the action appears in the UI * // PRIMARY: Shows as a primary button (e.g., in the toolbar) * // MENU: Shows in the "More" menu (three dots menu) * position: CustomActionsPosition.PRIMARY, * * // What type of content this action applies to * // LIVEBOARD: Available on liveboard pages * target: CustomActionTarget.LIVEBOARD, * * // Optional: Restrict where this action appears based on metadata * // metadataIds: { * // // Restrict to specific liveboards * // liveboardIds: ['liveboard-id-1', 'liveboard-id-2'], * // }, * // // Restrict to specific groups (for group-based access control) * // groupIds: ['group-id-1', 'group-id-2'], * // // Restrict to specific organizations (for multi-org deployments) * // orgIds: ['org-id-1', 'org-id-2'], * }, * { * // Unique identifier for the custom action * id: 'my-viz-custom-action', * * // Display name shown to users in the UI * name: 'My Viz Custom Action', * * // Where the action appears in the UI * // PRIMARY: Shows as a primary button (e.g., in the toolbar) * // MENU: Shows in the "More" menu (three dots menu) * // CONTEXTMENU: Shows in the right-click context menu * position: CustomActionsPosition.PRIMARY, * * // What type of content this action applies to * // VIZ: Available on individual visualizations * target: CustomActionTarget.VIZ, * * // Optional: Restrict where this action appears based on metadata * // metadataIds: { * // // Restrict to specific answers * // answerIds: ['answer-id-1', 'answer-id-2'], * // // Restrict to specific liveboard. If liveboardId is * // // passed, custom actions will appear on all vizzes of liveboard * // liveboardIds: ['liveboard-id-1'], * // // Restrict to specific vizIds * // vizIds: ['viz-id-1'] * // }, * // dataModelIds: { * // // Restrict to specific data models * // modelIds: ['model-id-1', 'model-id-2'], * // // Restrict to specific columns within models * // modelColumnNames: ['model-id::column-name'] * // }, * // // Restrict to specific groups (for group-based access control) * // groupIds: ['group-id-1', 'group-id-2'], * // // Restrict to specific organizations (for multi-org deployments) * // orgIds: ['org-id-1', 'org-id-2'], * } * ], * }) * ``` */ customActions?: CustomAction[]; /** * Refresh the auth token when the token is near expiry. * @version SDK: 1.45.2 | ThoughtSpot: 26.3.0.cl * @default true * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * refreshAuthTokenOnNearExpiry: true, * }) * ``` */ refreshAuthTokenOnNearExpiry?: boolean; /** * This flag skips payload validation so events can be processed even if the payload is old, incomplete, or from a trusted system. * @default false * @version SDK: 1.45.2 | ThoughtSpot: 26.3.0.cl * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * shouldBypassPayloadValidation:true, * }) * ``` */ shouldBypassPayloadValidation?: boolean; /** * Flag to use host events v2. This is used to enable the new host events v2 API. * @default false * @version SDK: 1.45.2 | ThoughtSpot: 26.3.0.cl * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * useHostEventsV2:true, * }) * ``` */ useHostEventsV2?: boolean; } export interface AutoMCPFrameRendererViewConfig extends BaseViewConfig { } /** * The configuration object for Home page embeds configs. */ export interface HomePageConfig { /** * Hide columns on list pages such as * *Liveboards* and *Answers*. * For example: `hiddenListColumns = [ListPageColumns.Author]` * * **Note**: This option is available only in full app embedding and requires * importing the `ListPageColumns` enum. Starting with version 10.14.0.cl, you can * use this attribute to * hide the columns on all list pages in the *Insights* section. * * Supported embed types: `AppEmbed` * @version SDK: 1.38.0 | ThoughtSpot: 10.9.0.cl * @example * ```js * import { ListPageColumns } from '@thoughtspot/visual-embed-sdk'; * * const embed = new AppEmbed('#tsEmbed', { * ... //other embed view config * hiddenListColumns : [ListPageColumns.Favorite,ListPageColumns.Author], * }) * ``` */ hiddenListColumns?: ListPageColumns[]; /** * Control the visibility of home page modules. * To specify the modules, import the `HomepageModule` enum. * For example: `hiddenHomepageModules = [HomepageModule.MyLibrary]` * * **Note**: This attribute is not supported in the classic (v1) experience. * * Supported embed types: `AppEmbed` * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl, 10.1.0.sw * @example * ```js * import { HomepageModule } from '@thoughtspot/visual-embed-sdk'; * * const embed = new AppEmbed('#tsEmbed', { * ... // V2/V3 navigation and home page experience attributes * hiddenHomepageModules : [HomepageModule.Favorite,HomepageModule.Learning], * //...other embed view configuration attributes * }) * ``` */ hiddenHomepageModules?: HomepageModule[]; /** * Reorder home page modules. * To specify the modules, import the `HomepageModule` enum. * For example: `reorderedHomepageModules = [HomepageModule.MyLibrary, * HomepageModule.Watchlist]` **Note**: This attribute is not supported in the * classic (v1) homepage. * * Supported embed types: `AppEmbed` * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl, 10.1.0.sw * @example * ```js * import { HomepageModule } from '@thoughtspot/visual-embed-sdk'; * * const embed = new AppEmbed('#tsEmbed', { * ...//V2/V3 navigation and home page experience attributes * reorderedHomepageModules:[HomepageModule.Favorite,HomepageModule.MyLibrary], * //... other embed view configuration attributes * }) * ``` */ reorderedHomepageModules?: HomepageModule[]; /** * Controls the visibility of the menu items * on the home page left navigation panel. * To specify the menu items, import the `HomeLeftNavItem` enum. * * **Note**: This attribute is not supported in the classic (v1) homepage. * * Supported embed types: `AppEmbed` * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl, 10.1.0.sw * @example * ```js * import { HomeLeftNavItem } from '@thoughtspot/visual-embed-sdk'; * * const embed = new AppEmbed('#tsEmbed', { * //... V2/V3 experience attributes * hiddenHomeLeftNavItems : [HomeLeftNavItem.Home,HomeLeftNavItem.Answers], * ... //other embed view configuration attributes * }) * ``` */ hiddenHomeLeftNavItems?: HomeLeftNavItem[]; } /** * The configuration object for common Search and Liveboard embeds configs. */ export interface SearchLiveboardCommonViewConfig { /** * The list of runtime filters to apply to a search Answer, * visualization, or Liveboard. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed` * @version SDK: 1.9.4 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * runtimeFilters: [ * { * columnName: 'value', * operator: RuntimeFilterOp.EQ, * values: ['string' | 123 | true], * }, * ], * }) * ``` */ runtimeFilters?: RuntimeFilter[]; /** * The list of parameter overrides to apply to a search Answer, * visualization, or Liveboard. * * Supported embed types: `AppEmbed`, `LiveboardEmbed`, `SearchEmbed` * @version SDK: 1.25.0 | ThoughtSpot: 9.2.0.cl, 9.5.0.sw * @example * ```js * // Replace with embed component name. For example, AppEmbed, SearchEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * runtimeParameters: [ * { * name: 'value', * value: 'string' | 123 | true, * }, * ] * }) * ``` */ runtimeParameters?: RuntimeParameter[]; /** * flag to set ContextMenu Trigger to either left or right click. * * Supported embed types: `AppEmbed`, `SearchEmbed` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed, or SearchEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * contextMenuTrigger:ContextMenuTriggerOptions.LEFT_CLICK || RIGHT_CLICK, * }) * ``` */ contextMenuTrigger?: ContextMenuTriggerOptions; /** * Boolean to exclude runtimeFilters in the URL * By default it is true, this flag removes runtime filters from the URL * (default behavior from SDK 1.45.0). * when set to false, runtime filters will be included in the URL * (default behavior before SDK 1.45.0). * * Irrespective of this flag, runtime filters ( if passed ) will be applied to the * embedded view. * @default true * @version SDK: 1.24.0 | ThoughtSpot: 9.5.0.cl */ excludeRuntimeFiltersfromURL?: boolean; /** * Boolean to exclude runtimeParameters from the URL * when set to true, this flag removes runtime parameters from the URL * (default behavior from SDK 1.45.0). * when set to false, runtime parameters will be included in the URL * (default behavior before SDK 1.45.0). * * Irrespective of this flag, runtime parameters (if passed) will be applied to the * embedded view. * @default true * @version SDK: 1.29.0 | ThoughtSpot: 10.1.0.cl */ excludeRuntimeParametersfromURL?: boolean; /** * To set the initial state of the search bar in case of saved Answers. * * Supported embed types: `AppEmbed`, `SearchBarEmbed` * @default true * @version SDK: 1.34.0 | ThoughtSpot: 10.3.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed, or SearchBarEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * collapseSearchBar: true, * }); * ``` */ collapseSearchBar?: boolean; /** * Flag to control Data panel experience * * Supported embed types: `AppEmbed`, `SearchBarEmbed`, `LiveboardEmbed`, `SearchEmbed` * @deprecated from SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl * @default true * @example * ```js * // Replace with embed component name. For example, AppEmbed, or SearchBarEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * dataPanelV2: true, * }) * ``` */ dataPanelV2?: boolean; /** * To enable custom column groups in data panel v2 * * Supported embed types: `SearchBarEmbed`, `LiveboardEmbed`, `SearchEmbed` * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl, 10.1.0.sw * @default false * @example * ```js * // Replace with embed component name. For example, SearchBarEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * enableCustomColumnGroups: true, * }); * ``` */ enableCustomColumnGroups?: boolean; /** * To enable **Include current period** checkbox for date filters. * Controls the visibility of the option to include * the current time period in filter results. * * Supported embed types: `AppEmbed`, `SearchBarEmbed`, `LiveboardEmbed`, `SearchEmbed` * @version SDK: 1.45.0 | ThoughtSpot: 26.4.0.cl * @example * ```js * const embed = new ('#tsEmbed', { * ... // other embed view config * isThisPeriodInDateFiltersEnabled: true, * }) * ``` */ isThisPeriodInDateFiltersEnabled?: boolean; } /** * The configuration object for common Liveboard and App embeds configs. */ export interface LiveboardAppEmbedViewConfig { /** * Show or hide Liveboard header * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl * @default false * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * hideLiveboardHeader : true, * }) * ``` */ hideLiveboardHeader?: boolean; /** * Show or hide Liveboard title * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl * @default false * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * showLiveboardTitle:true, * }) * ``` */ showLiveboardTitle?: boolean; /** * Show or hide Liveboard description * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl * @default false * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * showLiveboardDescription:true, * }) * ``` */ showLiveboardDescription?: boolean; /** * Boolean to control if Liveboard header is sticky or not. * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#embed', { * ... // other app view config * isLiveboardHeaderSticky: true, * }); * ``` */ isLiveboardHeaderSticky?: boolean; /** * This attribute can be used to enable the two-column layout on an embedded Liveboard * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @type {boolean} * @version SDK: 1.32.0 | ThoughtSpot: 10.1.0.cl * @default false * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * enable2ColumnLayout: true, * }) * ``` */ enable2ColumnLayout?: boolean; /** * This flag can be used to enable the compact header in Liveboard * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @type {boolean} * @version SDK: 1.35.0 | ThoughtSpot: 10.3.0.cl * @default false * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isLiveboardCompactHeaderEnabled: true, * }) * ``` */ isLiveboardCompactHeaderEnabled?: boolean; /** * This flag can be used to show or hide the Liveboard verified icon in the compact * header. * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.35.0 | ThoughtSpot: 10.4.0.cl * @default true * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * showLiveboardVerifiedBadge: true, * }) * ``` */ showLiveboardVerifiedBadge?: boolean; /** * This flag is used to enable/disable hide irrelevant filters in Liveboard tab * * **Note**: This feature is supported only if compact header is enabled on your * Liveboard. To enable compact header, use the `isLiveboardCompactHeaderEnabled` * attribute. * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.36.0 | ThoughtSpot: 10.6.0.cl * @default false * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * hideIrrelevantChipsInLiveboardTabs: true, * isLiveboardCompactHeaderEnabled: true, * }) * ``` */ hideIrrelevantChipsInLiveboardTabs?: boolean; /** * This flag can be used to show or hide the re-verify banner on the Liveboard * compact header * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.35.0 | ThoughtSpot: 10.4.0.cl * @default true * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * showLiveboardReverifyBanner: true, * }) * ``` */ showLiveboardReverifyBanner?: boolean; /** * enable or disable ask sage * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.29.0 | ThoughtSpot: 9.12.0.cl * @default false * @example * ```js * // Replace with embed component name. For example, AppEmbed, SpotterEmbed, or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * enableAskSage:true, * }) * ``` */ enableAskSage?: boolean; /** * This flag is used to show or hide checkboxes for including or excluding * the cover and filters pages in the Liveboard PDF. * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.40.0 | ThoughtSpot: 10.8.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * coverAndFilterOptionInPDF: false, * }) * ``` */ coverAndFilterOptionInPDF?: boolean; /** * This flag is used to enable or disable the new centralized Liveboard filter UX * (v2). When enabled, a unified modal is used to manage and update multiple filters * at once, replacing the older individual filter interactions. * To enable this feature on your instance, contact ThoughtSpot Support. * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.46.0 | ThoughtSpot: 26.4.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isCentralizedLiveboardFilterUXEnabled: true, * }) * ``` */ isCentralizedLiveboardFilterUXEnabled?: boolean; /** * This flag is used to enable or disable the link parameters in liveboard. * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.42.0 | ThoughtSpot: 10.14.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isLinkParametersEnabled: true, * }) * ``` */ isLinkParametersEnabled?: boolean; /** * This flag is used to enable or disable the enhanced filter interactivity in * liveboard. * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.42.0 | ThoughtSpot: 10.15.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isEnhancedFilterInteractivityEnabled: true, * }) * ``` */ isEnhancedFilterInteractivityEnabled?: boolean; /** * Show or hide masked filter chips * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl * @default false * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * showMaskedFilterChip: true, * }) * ``` */ showMaskedFilterChip?: boolean; /** * Enable or disable Liveboard styling and grouping * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl * @default false * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isLiveboardMasterpiecesEnabled: true, * }) * ``` */ isLiveboardMasterpiecesEnabled?: boolean; /** * Enable or disable Muze chart phase 1 GA * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @version SDK: 1.49.0 | ThoughtSpot Cloud: 26.6.0.cl * @default false * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * newChartsLibrary: true, * }) * ``` */ newChartsLibrary?: boolean; } export interface AllEmbedViewConfig extends BaseViewConfig, SearchLiveboardCommonViewConfig, HomePageConfig, LiveboardAppEmbedViewConfig { } /** * MessagePayload: Embed event payload: message type, data and status (start/end) * @group Events */ export type MessagePayload = { type: string; data: any; status?: string; }; /** * MessageOptions: By providing options, getting specific event start / end based on * option * @group Events */ export type MessageOptions = { /** * A boolean value indicating that start status events of this type * will be dispatched. */ start?: boolean; }; /** * MessageCallback: Embed event message callback * @group Events */ export type MessageCallback = (payload: MessagePayload, /** * responder: Message callback function triggered when embed event * initiated */ responder?: (data: any) => void) => void; /** * A map of the supported runtime filter operations */ export enum RuntimeFilterOp { /** * Equals */ EQ = "EQ", /** * Does not equal */ NE = "NE", /** * Less than */ LT = "LT", /** * Less than or equal to */ LE = "LE", /** * Greater than */ GT = "GT", /** * Greater than or equal to */ GE = "GE", /** * Contains */ CONTAINS = "CONTAINS", /** * Begins with */ BEGINS_WITH = "BEGINS_WITH", /** * Ends with */ ENDS_WITH = "ENDS_WITH", /** * Between, inclusive of higher value */ BW_INC_MAX = "BW_INC_MAX", /** * Between, inclusive of lower value */ BW_INC_MIN = "BW_INC_MIN", /** * Between, inclusive of both higher and lower value */ BW_INC = "BW_INC", /** * Between, non-inclusive */ BW = "BW", /** * Is included in this list of values */ IN = "IN", /** * Is not included in this list of values */ NOT_IN = "NOT_IN" } /** * Home page modules that can be hidden * via `hiddenHomepageModules` and reordered via * `reorderedHomepageModules`. * * **Note**: This option is not supported in the classic (v1) experience. * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl, 10.1.0.sw */ export enum HomepageModule { /** * Search bar */ Search = "SEARCH", /** * KPI watchlist module */ Watchlist = "WATCHLIST", /** * Favorite module */ Favorite = "FAVORITE", /** * List of answers and Liveboards */ MyLibrary = "MY_LIBRARY", /** * Trending list */ Trending = "TRENDING", /** * Learning videos */ Learning = "LEARNING" } /** * List page columns that can be hidden. * **Note**: This option is applicable to full app embedding only. * @version SDK: 1.38.0 | ThoughtSpot: 10.9.0.cl */ export enum ListPageColumns { /** * Favorites */ Favorites = "FAVOURITE", /** * Favourite Use {@link ListPageColumns.Favorites} instead. * @deprecated This option is deprecated. */ Favourite = "FAVOURITE", /** * Tags */ Tags = "TAGS", /** * Author */ Author = "AUTHOR", /** * Last viewed/Last modified */ DateSort = "DATE_SORT", /** * Share */ Share = "SHARE", /** * Verified badge/column */ Verified = "VERIFIED" } /** * A filter that can be applied to ThoughtSpot answers, Liveboards, or * visualizations at runtime. */ export interface RuntimeFilter { /** * The name of the column to filter on (case-sensitive) */ columnName: string; /** * The operator to apply */ operator: RuntimeFilterOp; /** * The list of operands. Some operators like EQ, LE accept * a single operand, whereas other operators like BW and IN accept multiple * operands. */ values: (number | boolean | string | bigint)[]; } /** * A filter that can be applied to ThoughtSpot Answers, Liveboards, or * visualizations at runtime. */ export interface RuntimeParameter { /** * The name of the runtime parameter to filter on (case-sensitive) */ name: string; /** * Values */ value: number | boolean | string; } /** * Event types emitted by the embedded ThoughtSpot application. * * To add an event listener use the corresponding * {@link LiveboardEmbed.on} or {@link AppEmbed.on} or {@link SearchEmbed.on} method. * @example * ```js * import { EmbedEvent } from '@thoughtspot/visual-embed-sdk'; * // Or * // const { EmbedEvent } = window.tsembed; * * // create the liveboard embed. * * liveboardEmbed.on(EmbedEvent.Drilldown, (drilldown) => { * console.log('Drilldown event', drilldown); * })); * ``` * * If you are using React components for embedding, you can register to any * events from the `EmbedEvent` list by using the `on` convention. * For example,`onAlert`, `onCopyToClipboard` and so on. * @example * ```js * // ... * const MyComponent = ({ dataSources }) => { * const onLoad = () => { * console.log(EmbedEvent.Load, {}); * }; * * return ( * * ); * }; * ``` * @group Events */ export enum EmbedEvent { /** * Rendering has initialized. * @example * ```js * liveboardEmbed.on(EmbedEvent.Init, showLoader) * //show a loader * function showLoader() { * document.getElementById("loader"); * } * ``` * @returns timestamp - The timestamp when the event was generated. */ Init = "init", /** * Authentication has either succeeded or failed. * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw * @example * ```js * appEmbed.on(EmbedEvent.AuthInit, payload => { * console.log('AuthInit', payload); * }) * ``` * @returns isLoggedIn - A Boolean specifying whether authentication was successful. */ AuthInit = "authInit", /** * The embed object container has loaded. * @returns timestamp - The timestamp when the event was generated. * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.Load, hideLoader) * //hide loader * function hideLoader() { * document.getElementById("loader"); * } * ``` */ Load = "load", /** * Data pertaining to an Answer, Liveboard or Spotter visualization is received. * The event payload includes the raw data of the object. * @return data - Answer of Liveboard data * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.Data, payload => { * console.log('data', payload); * }) * ``` * @important */ Data = "data", /** * Search query has been updated by the user. * @version SDK: 1.4.0 | ThoughtSpot: ts7.sep.cl, 8.4.1.sw * @example * ```js * searchEmbed.on(EmbedEvent.QueryChanged, payload => console.log('data', payload)) * ``` */ QueryChanged = "queryChanged", /** * A drill-down operation has been performed. * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw * @returns additionalFilters - Any additional filters applied * @returns drillDownColumns - The columns on which drill down was performed * @returns nonFilteredColumns - The columns that were not filtered * @example * ```js * searchEmbed.on(EmbedEvent.DrillDown, { * points: { * clickedPoint, * selectedPoints: selectedPoint * }, * autoDrillDown: true, * }) * ``` * In this example, `VizPointDoubleClick` event is used for * triggering the `DrillDown` event when an area or specific * data point on a table or chart is double-clicked. * @example * ```js * searchEmbed.on(EmbedEvent.VizPointDoubleClick, (payload) => { * console.log(payload); * const clickedPoint = payload.data.clickedPoint; * const selectedPoint = payload.data.selectedPoints; * console.log('>>> called', clickedPoint); * embed.trigger(HostEvent.DrillDown, { * points: { * clickedPoint, * selectedPoints: selectedPoint * }, * autoDrillDown: true, * }) * }) * ``` */ Drilldown = "drillDown", /** * One or more data sources have been selected. * @returns dataSourceIds - the list of data sources * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw * @example * ```js * searchEmbed.on(EmbedEvent.DataSourceSelected, payload => { * console.log('DataSourceSelected', payload); * }) * ``` */ DataSourceSelected = "dataSourceSelected", /** * One or more data columns have been selected. * @returns columnIds - the list of columns * @version SDK: 1.10.0 | ThoughtSpot: 8.2.0.cl, 8.4.1.sw * @example * ```js * appEmbed.on(EmbedEvent.AddRemoveColumns, payload => { * console.log('AddRemoveColumns', payload); * }) * ``` */ AddRemoveColumns = "addRemoveColumns", /** * A custom action has been triggered. * @returns actionId - ID of the custom action * @returns payload {@link CustomActionPayload} - Response payload with the * Answer or Liveboard data * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw * @example * ```js * appEmbed.on(EmbedEvent.customAction, payload => { * const data = payload.data; * if (data.id === 'insert Custom Action ID here') { * console.log('Custom Action event:', data.embedAnswerData); * } * }) * ``` */ CustomAction = "customAction", /** * Listen to double click actions on a visualization. * @return ContextMenuInputPoints - Data point that is double-clicked * @version SDK: 1.5.0 | ThoughtSpot: ts7.oct.cl, 7.2.1 * @example * ```js * LiveboardEmbed.on(EmbedEvent.VizPointDoubleClick, payload => { * console.log('VizPointDoubleClick', payload); * }) * ``` */ VizPointDoubleClick = "vizPointDoubleClick", /** * Listen to clicks on a visualization in a Liveboard or Search result. * @return viz, clickedPoint - metadata about the point that is clicked * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @important * @example * ```js * embed.on(EmbedEvent.VizPointClick, ({data}) => { * console.log( * data.vizId, // viz id * data.clickedPoint.selectedAttributes[0].value, * data.clickedPoint.selectedAttributes[0].column.name, * data.clickedPoint.selectedMeasures[0].value, * data.clickedPoint.selectedMeasures[0].column.name, * ) * }); * ``` */ VizPointClick = "vizPointClick", /** * An error has occurred. This event is fired for the following error types: * * `API` - API call failure. * `FULLSCREEN` - Error when presenting a Liveboard or visualization in full screen * mode. `SINGLE_VALUE_FILTER` - Error due to multiple values in the single value * filter. `NON_EXIST_FILTER` - Error due to a non-existent filter. * `INVALID_DATE_VALUE` - Invalid date value error. * `INVALID_OPERATOR` - Use of invalid operator during filter application. * * For more information, see https://developers.thoughtspot.com/docs/events-app-integration#errorType * @returns error - An error object or message * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw * @example * ```js * // API error * SearchEmbed.on(EmbedEvent.Error, (error) => { * console.log(error); * // { type: "Error", data: { errorType: "API", error: { message: '...', error: '...' } } } * // { errorType: "API", message: '...', code: '...' } new format * }); * ``` * @example * ```js * // Fullscreen error (Errors during presenting of a liveboard) * LiveboardEmbed.on(EmbedEvent.Error, (error) => { * console.log(error); * // { type: "Error", data: { errorType: "FULLSCREEN", error: { * // message: "Fullscreen API is not enabled", * // stack: "..." * // } }} * // { errorType: "FULLSCREEN", message: "Fullscreen API is not enabled", code: '...' } new format * }) * ``` */ Error = "Error", /** * The embedded object has sent an alert. * @returns alert - An alert object * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 8.4.1.sw * @example * ```js * searchEmbed.on(EmbedEvent.Alert) * ``` */ Alert = "alert", /** * The ThoughtSpot authentication session has expired. * @version SDK: 1.4.0 | ThoughtSpot: ts7.sep.cl, 8.4.1.sw * @example * ```js * appEmbed.on(EmbedEvent.AuthExpire, showAuthExpired) * //show auth expired banner * function showAuthExpired() { * document.getElementById("authExpiredBanner"); * } * ``` */ AuthExpire = "ThoughtspotAuthExpired", /** * ThoughtSpot failed to validate the auth session. * @hidden */ AuthFailure = "ThoughtspotAuthFailure", /** * ThoughtSpot failed to re validate the auth session. * @hidden */ IdleSessionTimeout = "IdleSessionTimeout", /** * ThoughtSpot failed to validate the auth session. * @hidden */ AuthLogout = "ThoughtspotAuthLogout", /** * The height of the embedded Liveboard or visualization has been computed. * @returns data - The height of the embedded Liveboard or visualization * @hidden */ EmbedHeight = "EMBED_HEIGHT", /** * The center of visible iframe viewport is calculated. * @returns data - The center of the visible Iframe viewport. * @hidden */ EmbedIframeCenter = "EmbedIframeCenter", /** * Emitted when the **Get Data** action is initiated. * Applicable to `SearchBarEmbed` only. * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw * @example * ```js * searchbarEmbed.on(EmbedEvent.GetDataClick) * .then(data => { * console.log('Answer Data:', data); * }) * ``` */ GetDataClick = "getDataClick", /** * Detects the route change. * @version SDK: 1.7.0 | ThoughtSpot: 8.0.0.cl, 8.4.1.sw * @example * ```js * searchEmbed.on(EmbedEvent.RouteChange, payload => * console.log('data', payload)) * ``` */ RouteChange = "ROUTE_CHANGE", /** * The v1 event type for Data * @hidden */ V1Data = "exportVizDataToParent", /** * Emitted when the embed does not have cookie access. This happens * when third-party cookies are blocked by Safari or other * web browsers. `NoCookieAccess` can trigger. * @example * ```js * appEmbed.on(EmbedEvent.NoCookieAccess) * ``` * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 7.2.1.sw */ NoCookieAccess = "noCookieAccess", /** * Emitted when SAML is complete * @private * @hidden */ SAMLComplete = "samlComplete", /** * Emitted when any modal is opened in the app * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw * @example * ```js * appEmbed.on(EmbedEvent.DialogOpen, payload => { * console.log('dialog open', payload); * }) * ``` */ DialogOpen = "dialog-open", /** * Emitted when any modal is closed in the app * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw * @example * ```js * appEmbed.on(EmbedEvent.DialogClose, payload => { * console.log('dialog close', payload); * }) * ``` */ DialogClose = "dialog-close", /** * Emitted when the Liveboard shell loads. * You can use this event as a hook to trigger * other events on the rendered Liveboard. * @version SDK: 1.9.1 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.LiveboardRendered, payload => { console.log('Liveboard is rendered', payload); }) * ``` * The following example shows how to trigger * `SetVisibleVizs` event using LiveboardRendered embed event: * @example * ```js * const embedRef = useEmbedRef(); * const onLiveboardRendered = () => { * embed.trigger(HostEvent.SetVisibleVizs, ['viz1', 'viz2']); * }; * ``` */ LiveboardRendered = "PinboardRendered", /** * Emits all events. * @version SDK: 1.10.0 | ThoughtSpot: 8.2.0.cl, 8.4.1.sw * @example * ```js * appEmbed.on(EmbedEvent.ALL, payload => { * console.log('Embed Events', payload) * }) * ``` */ ALL = "*", /** * Emitted when an Answer is saved in the app. * Use start:true to subscribe to when save is initiated, or end:true to subscribe to when save is completed. Default is end:true. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * //Emit when action starts * searchEmbed.on(EmbedEvent.Save, payload => { * console.log('Save', payload) * }, { * start: true * }) * //emit when action ends * searchEmbed.on(EmbedEvent.Save, payload => { * console.log('Save', payload) * }) * ``` */ Save = "save", /** * Emitted when the download action is triggered on an Answer. * * **Note**: This event is deprecated in v1.21.0. * To fire an event when a download action is initiated on a chart or table, * use `EmbedEvent.DownloadAsPng`, `EmbedEvent.DownloadAsPDF`, * `EmbedEvent.DownloadAsCSV`, or `EmbedEvent.DownloadAsXLSX` * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.Download, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }) * ``` */ Download = "download", /** * Emitted when the download action is triggered on an Answer. * Use start:true to subscribe to when download is initiated, or end:true to * subscribe to when download is completed. Default is end:true. * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.4.0.sw * @example * ```js * //emit when action starts * searchEmbed.on(EmbedEvent.DownloadAsPng, payload => { * console.log('download PNG', payload)}, {start: true }) * //emit when action ends * searchEmbed.on(EmbedEvent.DownloadAsPng, payload => { * console.log('download PNG', payload)}) * ``` */ DownloadAsPng = "downloadAsPng", /** * Emitted when the Download as PDF action is triggered on an Answer * Use start:true to subscribe to when download as PDF is initiated, or end:true to * subscribe to when download as PDF is completed. Default is end:true. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * //emit when action starts * searchEmbed.on(EmbedEvent.DownloadAsPdf, payload => { * console.log('download PDF', payload)}, {start: true }) * //emit when action ends * searchEmbed.on(EmbedEvent.DownloadAsPdf, payload => { * console.log('download PDF', payload)}) * ``` */ DownloadAsPdf = "downloadAsPdf", /** * Emitted when the Download as CSV action is triggered on an Answer. * Use start:true to subscribe to when download as CSV is initiated, or end:true to * subscribe to when download as CSV is completed. Default is end:true. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * //emit when action starts * searchEmbed.on(EmbedEvent.DownloadAsCSV, payload => { * console.log('download CSV', payload)}, {start: true }) * //emit when action ends * searchEmbed.on(EmbedEvent.DownloadAsCSV, payload => { * console.log('download CSV', payload)}) * ``` */ DownloadAsCsv = "downloadAsCsv", /** * Emitted when the Download as XLSX action is triggered on an Answer. * Use start:true to subscribe to when download as XLSX is initiated, or end:true to * subscribe to when download as XLSX is completed. Default is end:true. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * //emit when action starts * searchEmbed.on(EmbedEvent.DownloadAsXlsx, payload => { * console.log('download Xlsx', payload)}, { start: true }) * //emit when action ends * searchEmbed.on(EmbedEvent.DownloadAsXlsx, payload => { * console.log('download Xlsx', payload)}) * ``` */ DownloadAsXlsx = "downloadAsXlsx", /** * Emitted when the Download Liveboard as Continuous PDF action is triggered * on a Liveboard. * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl * @example * ```js * liveboardEmbed.on(EmbedEvent.DownloadLiveboardAsContinuousPDF, payload => { * console.log('download liveboard as continuous PDF', payload)}) * ``` */ DownloadLiveboardAsContinuousPDF = "downloadLiveboardAsContinuousPDF", /** * Emitted when an Answer is deleted in the app * Use start:true to subscribe to when delete is initiated, or end:true to subscribe * to when delete is completed. Default is end:true. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * //emit when action starts * appEmbed.on(EmbedEvent.AnswerDelete, payload => { * console.log('delete answer', payload)}, {start: true }) * //trigger when action is completed * appEmbed.on(EmbedEvent.AnswerDelete, payload => { * console.log('delete answer', payload)}) * ``` */ AnswerDelete = "answerDelete", /** * Emitted when the AI Highlights action is triggered on a Liveboard * @version SDK: 1.44.0 | ThoughtSpot: 10.15.0.cl * @example * ```js * liveboardEmbed.on(EmbedEvent.AIHighlights, (payload) => { * console.log('AI Highlights', payload); * }) * ``` */ AIHighlights = "AIHighlights", /** * Emitted when a user initiates the Pin action to * add an Answer to a Liveboard. * Use start:true to subscribe to when pin is initiated, or end:true to subscribe to * when pin is completed. Default is end:true. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * //emit when action starts * searchEmbed.on(EmbedEvent.Pin, payload => { * console.log('pin', payload) * }, { * start: true * }) * //emit when action ends * searchEmbed.on(EmbedEvent.Pin, payload => { * console.log('pin', payload) * }) * ``` */ Pin = "pin", /** * Emitted when SpotIQ analysis is triggered * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * //emit when action starts * searchEmbed.on(EmbedEvent.SpotIQAnalyze, payload => { * console.log('SpotIQAnalyze', payload) * }, { * start: true * }) * //emit when action ends * searchEmbed.on(EmbedEvent.SpotIQAnalyze, payload => { * console.log('SpotIQ analyze', payload) * }) * ``` */ SpotIQAnalyze = "spotIQAnalyze", /** * Emitted when a user shares an object with another user or group * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * //emit when action starts * searchEmbed.on(EmbedEvent.Share, payload => { * console.log('Share', payload) * }, { * start: true * }) * //emit when action ends * searchEmbed.on(EmbedEvent.Share, payload => { * console.log('Share', payload) * }) * ``` */ Share = "share", /** * Emitted when a user clicks the **Include** action to include a specific value or * data on a chart or table. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * appEmbed.on(EmbedEvent.DrillInclude, payload => { * console.log('Drill include', payload); * }) * ``` */ DrillInclude = "context-menu-item-include", /** * Emitted when a user clicks the **Exclude** action to exclude a specific value or * data on a chart or table * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * appEmbed.on(EmbedEvent.DrillExclude, payload => { * console.log('Drill exclude', payload); * }) * ``` */ DrillExclude = "context-menu-item-exclude", /** * Emitted when a column value is copied in the embedded app. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * searchEmbed.on(EmbedEvent.CopyToClipboard, payload => { * console.log('copy to clipboard', payload); * }) * ``` */ CopyToClipboard = "context-menu-item-copy-to-clipboard", /** * Emitted when a user clicks the **Update TML** action on * embedded Liveboard. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.UpdateTML) * }) * ``` */ UpdateTML = "updateTSL", /** * Emitted when a user clicks the **Edit TML** action * on an embedded Liveboard. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * appEmbed.on(EmbedEvent.EditTML, payload => { * console.log('Edit TML', payload); * }) * ``` */ EditTML = "editTSL", /** * Emitted when the **Export TML** action is triggered on an * an embedded object in the app * Use start:true to subscribe to when export is initiated, or end:true to subscribe * to when export is completed. Default is end:true. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * //emit when action starts * searchEmbed.on(EmbedEvent.ExportTML, payload => { * console.log('Export TML', payload)}, { start: true }) * //emit when action ends * searchEmbed.on(EmbedEvent.ExportTML, payload => { * console.log('Export TML', payload)}) * ``` */ ExportTML = "exportTSL", /** * Emitted when an Answer is saved as a View. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * appEmbed.on(EmbedEvent.SaveAsView, payload => { * console.log('View', payload); * }) * ``` */ SaveAsView = "saveAsView", /** * Emitted when the user creates a copy of an Answer. * Use start:true to subscribe to when copy and edit is initiated, or end:true to * subscribe to when copy and edit is completed. Default is end:true. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * //emit when action starts * appEmbed.on(EmbedEvent.CopyAEdit, payload => { * console.log('Copy and edit', payload)}, {start: true }) * //emit when action ends * appEmbed.on(EmbedEvent.CopyAEdit, payload => { * console.log('Copy and edit', payload)}) * ``` */ CopyAEdit = "copyAEdit", /** * Emitted when a user clicks *Show underlying data* on an Answer. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.ShowUnderlyingData, payload => { * console.log('show data', payload); * }) * ``` */ ShowUnderlyingData = "showUnderlyingData", /** * Emitted when an Answer is switched to a chart or table view. * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @example * ```js * searchEmbed.on(EmbedEvent.AnswerChartSwitcher, payload => { * console.log('switch view', payload); * }) * ``` */ AnswerChartSwitcher = "answerChartSwitcher", /** * Internal event to communicate the initial settings back to the ThoughtSpot app * @hidden */ APP_INIT = "appInit", /** * Internal event to clear the cached info * @hidden */ CLEAR_INFO_CACHE = "clearInfoCache", /** * Emitted when a user clicks **Show Liveboard details** on a Liveboard * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.LiveboardInfo, payload => { * console.log('Liveboard details', payload); * }) * ``` */ LiveboardInfo = "pinboardInfo", /** * Emitted when a user clicks on the Favorite icon on a Liveboard * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.AddToFavorites, payload => { * console.log('favorites', payload); * }) * ``` */ AddToFavorites = "addToFavorites", /** * Emitted when a user clicks **Schedule** on a Liveboard * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.Schedule, payload => { * console.log('Liveboard schedule', payload); * }) * ``` */ Schedule = "subscription", /** * Emitted when a user clicks **Edit** on a Liveboard or visualization * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.Edit, payload => { * console.log('Liveboard edit', payload); * }) * ``` */ Edit = "edit", /** * Emitted when a user clicks *Make a copy* on a Liveboard * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.MakeACopy, payload => { * console.log('Copy', payload); * }) * ``` */ MakeACopy = "makeACopy", /** * Emitted when a user clicks **Present** on a Liveboard or visualization * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.Present) * ``` * @example * ```js * liveboardEmbed.on(EmbedEvent.Present, { * vizId: '730496d6-6903-4601-937e-2c691821af3c'}) * }) * ``` */ Present = "present", /** * Emitted when a user clicks **Delete** on a visualization * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.Delete, * {vizId: '730496d6-6903-4601-937e-2c691821af3c'}) * ``` */ Delete = "delete", /** * Emitted when a user clicks Manage schedules on a Liveboard * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.SchedulesList) * ``` */ SchedulesList = "schedule-list", /** * Emitted when a user clicks **Cancel** in edit mode on a Liveboard * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.Cancel) * ``` */ Cancel = "cancel", /** * Emitted when a user clicks **Explore** on a visualization * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.Explore, { * vizId: '730496d6-6903-4601-937e-2c691821af3c'}) * ``` */ Explore = "explore", /** * Emitted when a user clicks **Copy link** action on a visualization. * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.CopyLink, { * vizId: '730496d6-6903-4601-937e-2c691821af3c'}) * ``` */ CopyLink = "embedDocument", /** * Emitted when a user interacts with cross filters on a * visualization or Liveboard. * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.0.sw * @example * ```js * liveboardEmbed.on(EmbedEvent.CrossFilterChanged, { * vizId: '730496d6-6903-4601-937e-2c691821af3c'}) * ``` */ CrossFilterChanged = "cross-filter-changed", /** * Emitted when a user right clicks on a visualization (chart or table) * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.0.sw * @example * ```js * LiveboardEmbed.on(EmbedEvent.VizPointRightClick, payload => { * console.log('VizPointClick', payload) * }) * ``` */ VizPointRightClick = "vizPointRightClick", /** * Emitted when a user clicks **Insert to slide** on a visualization * @hidden */ InsertIntoSlide = "insertInToSlide", /** * Emitted when a user changes any filter on a Liveboard. * Returns filter type and name, column name and ID, and runtime * filter details. * @example * * ```js * LiveboardEmbed.on(EmbedEvent.FilterChanged, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl, 9.5.0.sw */ FilterChanged = "filterChanged", /** * Emitted when a user updates a connection on the **Data** page * @version SDK: 1.27.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw */ UpdateConnection = "updateConnection", /** * Emitted when a user updates a connection on the **Data** page * @version SDK: 1.27.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw */ CreateConnection = "createConnection", /** * Emitted when name, status (private or public) or filter values of a * Personalised view is updated. * This event is deprecated. Use {@link EmbedEvent.UpdatePersonalizedView} instead. * @returns viewName: string * @returns viewId: string * @returns liveboardId: string * @returns isPublic: boolean * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw * @deprecated SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ UpdatePersonalisedView = "updatePersonalisedView", /** * Emitted when name, status (private or public) or filter values of a * Personalized view is updated. * @returns viewName: string * @returns viewId: string * @returns liveboardId: string * @returns isPublic: boolean * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ UpdatePersonalizedView = "updatePersonalisedView", /** * Emitted when a Personalised view is saved. * This event is deprecated. Use {@link EmbedEvent.SavePersonalizedView} instead. * @returns viewName: string * @returns viewId: string * @returns liveboardId: string * @returns isPublic: boolean * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw * @deprecated SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ SavePersonalisedView = "savePersonalisedView", /** * Emitted when a Personalized view is saved. * @returns viewName: string * @returns viewId: string * @returns liveboardId: string * @returns isPublic: boolean * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ SavePersonalizedView = "savePersonalisedView", /** * Emitted when a Liveboard is reset. * @returns viewName: string * @returns viewId: string * @returns liveboardId: string * @returns isPublic: boolean * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw */ ResetLiveboard = "resetLiveboard", /** * Emitted when a PersonalisedView is deleted. * This event is deprecated. Use {@link EmbedEvent.DeletePersonalizedView} instead. * @returns views: string[] * @returns liveboardId: string * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw * @deprecated SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ DeletePersonalisedView = "deletePersonalisedView", /** * Emitted when a PersonalizedView is deleted. * @returns views: string[] * @returns liveboardId: string * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ DeletePersonalizedView = "deletePersonalisedView", /** * Emitted when a user selects a different Personalized View or * resets to the original/default view on a Liveboard. * @example * ```js * liveboardEmbed.on(EmbedEvent.ChangePersonalizedView, (data) => { * console.log(data.viewName); // 'Q4 Revenue' or 'Original View' * console.log(data.viewId); // '2a021a12-...' or null (default) * console.log(data.liveboardId); // 'abc123...' * console.log(data.isPublic); // true | false * }) * ``` * @returns viewName: string - Name of the selected view, * or 'Original View' when reset to default. * @returns viewId: string | null - GUID of the selected view, * or null when reset to default. * @returns liveboardId: string * @returns isPublic: boolean * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ ChangePersonalizedView = "changePersonalisedView", /** * Emitted when a user creates a Worksheet. * @version SDK: 1.27.0 | ThoughtSpot: 9.8.0.cl, 9.8.0.sw */ CreateWorksheet = "createWorksheet", /** * Emitted when the *Ask Sage* is initialized. * @returns viewName: string * @returns viewId: string * @returns liveboardId: string * @returns isPublic: boolean * @version SDK: 1.29.0 | ThoughtSpot Cloud: 9.12.0.cl */ AskSageInit = "AskSageInit", /** * Emitted when a Liveboard or visualization is renamed. * @version SDK: 1.28.0 | ThoughtSpot: 9.10.5.cl, 10.1.0.sw */ Rename = "rename", /** * * This event allows developers to intercept search execution * and implement logic that decides whether Search Data should return * data or block the search operation. * * **Prerequisite**: Set`isOnBeforeGetVizDataInterceptEnabled` to `true` * to ensure that `EmbedEvent.OnBeforeGetVizDataIntercept` is emitted * when the embedding application user tries to run a search query. * * This framework applies only to `AppEmbed` and `SearchEmbed`. * @param - Includes the following parameters: * - `payload`: The payload received from the embed related to the Data API call. * - `responder`: Contains elements that let developers define whether ThoughtSpot * will run or block the search operation, and if blocked, which error message to * provide. * - `execute` - When `execute` returns `true`, the search is run. * When `execute` returns `false`, the search is not executed. * - `error` - Developers can customize the user-facing error message when `execute` * is `false` by using the `error` parameters in `responder`. * - `errorText` - The error message text shown to the user. * @version SDK: 1.29.0 | ThoughtSpot: 10.3.0.cl * @example * * This example blocks search operation and returns a custom error message: * ```js * embed.on(EmbedEvent.OnBeforeGetVizDataIntercept, (payload, responder) => { * responder({ * data: { * execute: false, * error: { * // Provide a custom error message to explain why the search did not run. * errorText: 'This search query cannot be run. Please contact your administrator for more details.', * }, * }, * }); * }) * ``` * @example * * This example allows the search operation to run * unless the query contains both `sales` and `county`, * and returns a custom error message if the query is rejected: * ```js * embed.on(EmbedEvent.OnBeforeGetVizDataIntercept, (payload, responder) => { * // Record the search query submitted by the end user. * const query = payload.data.data.answer.search_query; * * responder({ * data: { * // Returns true as long as the query does not include both `sales` and `county`. * execute: !(query.includes('sales') && query.includes('county')), * error: { * // Provide a custom error message when the query is blocked by your logic. * errorText: * "You can't use this query: " * + query * + ". The 'sales' measure can never be used at the 'county' level. " * + "Please try another measure or remove 'county' from your search.", * }, * }, * }); * }) * ``` */ OnBeforeGetVizDataIntercept = "onBeforeGetVizDataIntercept", /** * Emitted when parameter changes in an Answer * or Liveboard. * ```js * liveboardEmbed.on(EmbedEvent.ParameterChanged, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.29.0 | ThoughtSpot: 10.3.0.cl */ ParameterChanged = "parameterChanged", /** * Emits when a table visualization is rendered in * the ThoughtSpot embedded app. * * You can also use this event as a hook to trigger host events * such as `HostEvent.TransformTableVizData` on the table visualization. * The event payload contains the data used in the rendered table. * You can extract the relevant data from the payload * stored in `payload.data.data.columnDataLite`. * * `columnDataLite` is a multidimensional array that contains * data values for each column, which was used in the query to * generate the table visualization. To find and modify specific cell data, * you can either loop through the array or directly access a cell if * you know its position and data index. * * In the following code sample, the first cell in the first column * (`columnDataLite[0].dataValue[0]`) is set to `new fob`. * Note that any changes made to the data in the payload will only update the * visual presentation and do not affect the underlying data. * To persist data value modifications after a reload or during chart * interactions such as drill down, ensure that the modified * payload in the `columnDataLite` is passed on to * `HostEvent.TransformTableVizData` and trigger an update to * the table visualization. * * If the Row-Level Security (RLS) rules are applied on the * Model, exercise caution when changing column * or table cell values to maintain data security. * * @example * ```js * searchEmbed.on(EmbedEvent.TableVizRendered, (payload) => { * console.log(payload); * const columnDataLite = payload.data.data.columnDataLite; * columnDataLite[0].dataValue[0]="new fob"; * console.log('>>> new Data', columnDataLite); * searchEmbed.trigger(HostEvent.TransformTableVizData, columnDataLite); * }) * ``` * @version SDK: 1.37.0 | ThoughtSpot: 10.8.0.cl */ TableVizRendered = "TableVizRendered", /** * Emitted when the liveboard is created from pin modal or Liveboard list page. * You can use this event as a hook to trigger * other events on liveboard creation. * * ```js * liveboardEmbed.on(EmbedEvent.CreateLiveboard, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.37.0 | ThoughtSpot: 10.8.0.cl */ CreateLiveboard = "createLiveboard", /** * Emitted when a user creates a Model. * @version SDK: 1.37.0 | ThoughtSpot: 10.8.0.cl */ CreateModel = "createModel", /** * @hidden * Emitted when a user exits present mode. * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ ExitPresentMode = "exitPresentMode", /** * Emitted when a user requests the full height lazy load data. * @version SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl * @hidden */ RequestVisibleEmbedCoordinates = "requestVisibleEmbedCoordinates", /** * Emitted when Spotter response is text data * @example * ```js * spotterEmbed.on(EmbedEvent.SpotterData, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl */ SpotterData = "SpotterData", /** * Emitted when user opens up the data source preview modal in Spotter embed. * @example * ```js * spotterEmbed.on(EmbedEvent.PreviewSpotterData, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl */ PreviewSpotterData = "PreviewSpotterData", /** * Emitted when user opens up the Add to Coaching modal on any visualization in Spotter Embed. * @example * ```js * spotterEmbed.on(EmbedEvent.AddToCoaching, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl */ AddToCoaching = "addToCoaching", /** * Emitted when user opens up the data model instructions modal in Spotter embed. * @example * ```js * spotterEmbed.on(EmbedEvent.DataModelInstructions, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl */ DataModelInstructions = "DataModelInstructions", /** * Emitted when the Spotter query is triggered in Spotter embed. * @example * ```js * spotterEmbed.on(EmbedEvent.SpotterQueryTriggered, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl */ SpotterQueryTriggered = "SpotterQueryTriggered", /** * Emitted when the last Spotter query is edited in Spotter embed. * @example * ```js * spotterEmbed.on(EmbedEvent.LastPromptEdited, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl */ LastPromptEdited = "LastPromptEdited", /** * Emitted when the last Spotter query is deleted in Spotter embed. * @example * ```js * spotterEmbed.on(EmbedEvent.LastPromptDeleted, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl */ LastPromptDeleted = "LastPromptDeleted", /** * Emitted when the conversation is reset in Spotter embed. * @example * ```js * spotterEmbed.on(EmbedEvent.ResetSpotterConversation, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl */ ResetSpotterConversation = "ResetSpotterConversation", /** * Emitted when the *Spotter* is initialized. * @example * ```js * spotterEmbed.on(EmbedEvent.SpotterInit, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.41.0 | ThoughtSpot: 10.12.0.cl */ SpotterInit = "spotterInit", /** * Emitted when a *Spotter* conversation has been successfully created. * @example * ```js * spotterEmbed.on(EmbedEvent.SpotterLoadComplete, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.44.0 | ThoughtSpot: 26.2.0.cl */ SpotterLoadComplete = "spotterLoadComplete", /** * @hidden * Triggers when the embed listener is ready to receive events. * This is used to trigger events after the embed container is loaded. * @example * ```js * liveboardEmbed.on(EmbedEvent.EmbedListenerReady, () => { * console.log('EmbedListenerReady'); * }) * ``` */ EmbedListenerReady = "EmbedListenerReady", /** * Emitted when the organization is switched. * @example * ```js * appEmbed.on(EmbedEvent.OrgSwitched, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.41.0 | ThoughtSpot: 10.12.0.cl */ OrgSwitched = "orgSwitched", /** * Emitted when the user intercepts a URL. * * Supported on all embed types. * * @example * * ```js * embed.on(EmbedEvent.ApiIntercept, (payload, responder) => { * console.log('payload', payload); * responder({ * data: { * execute: false, * error: { * errorText: 'Error Occurred', * } * } * }) * }) * ``` * * ```js * // We can also send a response for the intercepted api * embed.on(EmbedEvent.ApiIntercept, (payload, responder) => { * console.log('payload', payload); * responder({ * data: { * execute: false, * response: { * body: { * data: { * // Some api response * }, * } * } * } * }) * }) * * // here embed will use the response from the responder as the response for the api * ``` * * ```js * // We can also send error in response for the intercepted api * embed.on(EmbedEvent.ApiIntercept, (payload, responder) => { * console.log('payload', payload); * responder({ * data: { * execute: false, * response: { * body: { * errors: [{ * title: 'Error Occurred', * description: 'Error Description', * isUserError: true, * }], * data: {}, * }, * } * } * }) * }) * ``` * @version SDK: 1.43.0 | ThoughtSpot: 10.15.0.cl */ ApiIntercept = "ApiIntercept", /** * Emitted when a Spotter conversation is renamed. * @example * ```js * spotterEmbed.on(EmbedEvent.SpotterConversationRenamed, (payload) => { * console.log('Conversation renamed', payload); * // payload: { convId: string, oldTitle: string, newTitle: string } * }) * ``` * @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl */ SpotterConversationRenamed = "spotterConversationRenamed", /** * Emitted when a Spotter conversation is deleted. * @example * ```js * spotterEmbed.on(EmbedEvent.SpotterConversationDeleted, (payload) => { * console.log('Conversation deleted', payload); * // payload: { convId: string, title: string } * }) * ``` * @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl */ SpotterConversationDeleted = "spotterConversationDeleted", /** * Emitted when a Spotter conversation is selected/clicked. * @example * ```js * spotterEmbed.on(EmbedEvent.SpotterConversationSelected, (payload) => { * console.log('Conversation selected', payload); * // payload: { convId: string, title: string, worksheetId: string } * }) * ``` * @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl */ SpotterConversationSelected = "spotterConversationSelected", /** * @hidden * Emitted when the auth token is about to get expired and needs to be refreshed. * @example * ```js * embed.on(EmbedEvent.RefreshAuthToken, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.45.2 | ThoughtSpot: 26.3.0.cl */ RefreshAuthToken = "RefreshAuthToken", /** * Triggered whenever the page context changes, returning the current context along with the navigation stack. * @example * ```js * embed.on(EmbedEvent.EmbedPageContextChanged, (payload) => { * console.log('payload', payload); * }) * ``` * @version SDK: 1.47.2 | ThoughtSpot: 26.3.0.cl */ EmbedPageContextChanged = "EmbedPageContextChanged", /** * Represents a special embed event that is triggered whenever any host event is subscribed. * * You can listen to this event when you need to dispatch a host event during load or render, * particularly in situations where timing issues may occur. * * @example * ```js * embed.on(`${HostEvent.Save} Subscribed`, () => { * // make action * }); * ``` * * @example * ```js * embed.on(subscribedEvent(HostEvent.Save), () => { * // make action * }); * ``` * @version SDK: 1.48.0 | ThoughtSpot: 26.4.0.cl */ Subscribed = "Subscribed", /** * Emitted when a user clicks the **Send Test Email** button in the * Liveboard schedule modal. Requires `isSendNowLiveboardSchedulingEnabled` * to be enabled. * @example * ```js * liveboardEmbed.on(EmbedEvent.SendTestScheduleEmail, (payload) => { * console.log('Send test email', payload); * // payload: { liveboardId: string, sendToSelf: boolean } * }) * ``` * @version SDK: 1.48.0 | ThoughtSpot Cloud: 26.5.0.cl */ SendTestScheduleEmail = "sendTestScheduleEmail" } /** * Event types that can be triggered by the host application * to the embedded ThoughtSpot app. * * To trigger an event use the corresponding * {@link LiveboardEmbed.trigger} or {@link AppEmbed.trigger} or {@link * SearchEmbed.trigger} method. * @example * ```js * import { HostEvent } from '@thoughtspot/visual-embed-sdk'; * // Or * // const { HostEvent } = window.tsembed; * * // create the liveboard embed. * * liveboardEmbed.trigger(HostEvent.UpdateRuntimeFilters, [ * { columnName: 'state', operator: RuntimeFilterOp.EQ, values: ["california"]} * ]); * ``` * @example * If using React components to embed, use the format shown in this example: * * ```js * const selectVizs = () => { * embedRef.current.trigger(HostEvent.SetVisibleVizs, [ * "715e4613-c891-4884-be44-aa8d13701c06", * "3f84d633-e325-44b2-be25-c6650e5a49cf" * ]); * }; * ``` * * * You can also attach an Embed event to a Host event to trigger * a specific action as shown in this example: * @example * ```js * const EmbeddedComponent = () => { * const embedRef = useRef(null); // import { useRef } from react * const onLiveboardRendered = () => { * embedRef.current.trigger(HostEvent.SetVisibleVizs, ['viz1', 'viz2']); * }; * * return ( * * ); * } * ``` * * **Context Parameter (SDK: 1.45.2+)** * * Starting from SDK version 1.45.2 | ThoughtSpot: 26.3.0.cl, you can optionally pass a * `ContextType` as the third parameter to the `trigger` method to specify the context * from which the event is triggered. This helps ThoughtSpot understand the current page * context (Search, Answer, Liveboard, or Spotter) for better event handling. * * @example * ```js * import { HostEvent, ContextType } from '@thoughtspot/visual-embed-sdk'; * * // Trigger Pin event with Search context * appEmbed.trigger(HostEvent.Pin, { * vizId: "123", * liveboardId: "456" * }, ContextType.Search); * ``` * * @group Events */ export enum HostEvent { /** * Triggers a search operation with the search tokens specified in * the search query string. * Supported in `AppEmbed` and `SearchEmbed` deployments. * Includes the following properties: * @param - Includes the following keys: * - `searchQuery`: Query string with search tokens. * - `dataSources`: Data source GUID to search on. * Although an array, only a single source is supported. * - `execute`: Executes search and updates the existing query. * @example * ```js * searchEmbed.trigger(HostEvent.Search, { searchQuery: "[sales] by [item type]", dataSources: ["cd252e5c-b552-49a8-821d-3eadaa049cca"], execute: true }); * ``` * @example * ```js * // Trigger search from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.Search, { * searchQuery: "[revenue] by [region]", * dataSources: ["cd252e5c-b552-49a8-821d-3eadaa049cca"], * execute: true * }, ContextType.Search); * ``` */ Search = "search", /** * Triggers a drill on certain points of the specified column * Includes the following properties: * @param - Includes the following keys: * - `points`: An object containing `selectedPoints` and/or `clickedPoint` * to drill to. For example, `{ selectedPoints: [] }`. * - `columnGuid`: Optional. GUID of the column to drill by. If not provided, * it will auto drill by the configured column. * - `autoDrillDown`: Optional. If `true`, the drill down will be done automatically * on the most popular column. * - `vizId` (TS >= 9.8.0): Optional. The GUID of the visualization to drill in case * of a Liveboard. In Spotter embed, `vizId` refers to the Answer ID and is * **required**. * @example * ```js * searchEmbed.on(EmbedEvent.VizPointDoubleClick, (payload) => { * console.log(payload); * const clickedPoint = payload.data.clickedPoint; * const selectedPoint = payload.data.selectedPoints; * console.log('>>> called', clickedPoint); * searchEmbed.trigger(HostEvent.DrillDown, { * points: { * clickedPoint, * selectedPoints: selectedPoint * }, * autoDrillDown: true, * }); * }) * ``` * @example * ```js * // Works with TS 9.8.0 and above * * liveboardEmbed.on(EmbedEvent.VizPointDoubleClick, (payload) => { * console.log(payload); * const clickedPoint = payload.data.clickedPoint; * const selectedPoint = payload.data.selectedPoints; * console.log('>>> called', clickedPoint); * liveboardEmbed.trigger(HostEvent.DrillDown, { * points: { * clickedPoint, * selectedPoints: selectedPoint * }, * columnGuid: "", * vizId: payload.data.vizId * }); * }) * ``` * @example * ```js * // Drill down from answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.DrillDown, { * points: { clickedPoint, selectedPoints }, * autoDrillDown: true * }, ContextType.Answer); * ``` * @example * ```js * // Drill down from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * searchEmbed.trigger(HostEvent.DrillDown, { * points: { clickedPoint, selectedPoints }, * columnGuid: "column-guid" * }, ContextType.Search); * ``` * @version SDK: 1.5.0 | ThoughtSpot: ts7.oct.cl, 7.2.1 */ DrillDown = "triggerDrillDown", /** * Apply filters * @hidden */ Filter = "filter", /** * Reload the Answer or visualization * @hidden */ Reload = "reload", /** * Get iframe URL for the current embed view. * @example * ```js * const url = embed.trigger(HostEvent.GetIframeUrl); * console.log("iFrameURL",url); * ``` * @example * ```js * // Get iframe URL from specific context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * const url = await appEmbed.trigger(HostEvent.GetIframeUrl, {}, ContextType.Answer); * console.log("iFrameURL", url); * ``` * @version SDK: 1.35.0 | ThoughtSpot: 10.4.0.cl */ GetIframeUrl = "GetIframeUrl", /** * Display specific visualizations on a Liveboard. * @param - An array of GUIDs of the visualization to show. The visualization IDs not passed * in this parameter will be hidden. * @example * ```js * liveboardEmbed.trigger(HostEvent.SetVisibleVizs, [ * '730496d6-6903-4601-937e-2c691821af3c', * 'd547ec54-2a37-4516-a222-2b06719af726']) * ``` * @example * ```js * // Set visible vizs from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.SetVisibleVizs, [ * '730496d6-6903-4601-937e-2c691821af3c', * 'd547ec54-2a37-4516-a222-2b06719af726' * ], ContextType.Liveboard); * ``` * @version SDK: 1.6.0 | ThoughtSpot: ts8.nov.cl, 8.4.1.sw */ SetVisibleVizs = "SetPinboardVisibleVizs", /** * Set a Liveboard tab as an active tab. * @param - tabId - string of id of Tab to show * @example * ```js * liveboardEmbed.trigger(HostEvent.SetActiveTab,{ * tabId:'730496d6-6903-4601-937e-2c691821af3c' * }) * ``` * @example * ```js * // Set active tab from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.SetActiveTab, { * tabId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @version SDK: 1.24.0 | ThoughtSpot: 9.5.0.cl, 9.5.1-sw */ SetActiveTab = "SetActiveTab", /** * Updates the runtime filters applied on a Liveboard. The filter * attributes passed with this event are appended to the existing runtime * filters applied on a Liveboard. * * **Note**: `HostEvent.UpdateRuntimeFilters` is supported in `LiveboardEmbed` * and `AppEmbed` only. In full application embedding, this event updates * the runtime filters applied on the Liveboard and saved Answer objects. * * @param - Array of {@link RuntimeFilter} objects. Each item includes: * - `columnName`: Name of the column to filter on. * - `operator`: {@link RuntimeFilterOp} to apply. For more information, see * link:https://developers.thoughtspot.com/docs/runtime-filters#rtOperator[Developer Documentation]. * - `values`: List of operands. Some operators such as EQ and LE allow a single * value, whereas BW and IN accept multiple values. * * **Note**: Updating runtime filters resets the ThoughtSpot * object to its original state and applies new filter conditions. * Any user changes (like drilling into a visualization) * will be cleared, restoring the original visualization * with the updated filters. * * @example * ```js * liveboardEmbed.trigger(HostEvent.UpdateRuntimeFilters, [ * {columnName: "state",operator: RuntimeFilterOp.EQ,values: ["michigan"]}, * {columnName: "item type",operator: RuntimeFilterOp.EQ,values: ["Jackets"]} * ]) * ``` * @example * ```js * // Update runtime filters from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.UpdateRuntimeFilters, [ * {columnName: "region", operator: RuntimeFilterOp.EQ, values: ["west"]}, * {columnName: "product", operator: RuntimeFilterOp.IN, values: ["shoes", "boots"]} * ], ContextType.Liveboard); * ``` * @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw * @important */ UpdateRuntimeFilters = "UpdateRuntimeFilters", /** * Navigate to a specific page in the embedded ThoughtSpot application. * This is the same as calling `appEmbed.navigateToPage(path, true)`. * @param - `path` - the path to navigate to go forward or back. The path value can * be a number; for example, `1`, `-1`. * @example * ```js * appEmbed.navigateToPage(-1) * ``` * @version SDK: 1.12.0 | ThoughtSpot: 8.4.0.cl, 8.4.1.sw */ Navigate = "Navigate", /** * Open the filter panel for a particular column. * Works with Search and Liveboard embed. * @param - { columnId: string, * name: string, * type: ATTRIBUTE/MEASURE, * dataType: INT64/CHAR/DATE } * @example * ```js * searchEmbed.trigger(HostEvent.OpenFilter, * {column: { columnId: '', name: 'column name', type: 'ATTRIBUTE', dataType: 'INT64'}}) * ``` * @example * ```js * LiveboardEmbed.trigger(HostEvent.OpenFilter, * { column: {columnId: ''}}) * ``` * @example * ```js * // Open filter from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * searchEmbed.trigger(HostEvent.OpenFilter, { * column: { columnId: '', name: 'region', type: 'ATTRIBUTE', dataType: 'CHAR'} * }, ContextType.Search); * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl */ OpenFilter = "openFilter", /** * Add columns to the current search query. * @param - { columnIds: string[] } * @example * ```js * searchEmbed.trigger(HostEvent.AddColumns, { columnIds: ['',''] }) * ``` * @example * ```js * // Add columns from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * searchEmbed.trigger(HostEvent.AddColumns, { * columnIds: ['col-guid-1', 'col-guid-2'] * }, ContextType.Search); * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl */ AddColumns = "addColumns", /** * Remove a column from the current search query. * @param - { columnId: string } * @example * ```js * searchEmbed.trigger(HostEvent.RemoveColumn, { columnId: '' }) * ``` * @example * ```js * // Remove column from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * searchEmbed.trigger(HostEvent.RemoveColumn, { * columnId: 'column-guid' * }, ContextType.Search); * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl */ RemoveColumn = "removeColumn", /** * Get the transient state of a Liveboard as encoded content. * This includes unsaved and ad hoc changes such as * Liveboard filters, runtime filters applied on visualizations on a * Liveboard, and Liveboard layout, changes to visualizations such as * sorting, toggling of legends, and data drill down. * For more information, see * link:https://developers.thoughtspot.com/docs/fetch-data-and-report-apis#transient-lb-content[Liveboard data with unsaved changes]. * @example * ```js * liveboardEmbed.trigger(HostEvent.getExportRequestForCurrentPinboard).then( * data=>console.log(data)) * ``` * @version SDK: 1.13.0 | ThoughtSpot: 8.5.0.cl, 8.8.1.sw */ getExportRequestForCurrentPinboard = "getExportRequestForCurrentPinboard", /** * Trigger **Pin** action on an embedded object. * If no parameters are defined, the pin action is triggered * for the Answer that the user is currently on * and a modal opens for Liveboard selection. * To add an Answer or visualization to a Liveboard programmatically without * requiring additional user input via the *Pin to Liveboard* modal, define * the following parameters: * * @param - Includes the following keys: * - `vizId`: GUID of the saved Answer or Spotter visualization ID to pin to a * Liveboard. * Optional when pinning a new chart or table generated from a Search query. * **Required** in Spotter Embed. * - `liveboardId`: GUID of the Liveboard to pin an Answer. If there is no Liveboard, * specify the `newLiveboardName` parameter to create a new Liveboard. * - `tabId`: GUID of the Liveboard tab. Adds the Answer to the Liveboard tab * specified in the code. * - `newVizName`: Name string for the Answer or visualization. If defined, * this parameter adds a new visualization object or creates a copy of the * Answer or visualization specified in `vizId`. * Required. * - `newLiveboardName`: Name string for the Liveboard. * Creates a new Liveboard object with the specified name. * - `newTabName`: Name of the tab. Adds a new tab Liveboard specified * in the code. * * @example * ```js * const pinResponse = await appEmbed.trigger(HostEvent.Pin, { * vizId: "123", * newVizName: "Sales by region", * liveboardId: "123", * tabId: "123" * }); * ``` * @example * ```js * const pinResponse = await appEmbed.trigger(HostEvent.Pin, { * newVizName: "Total sales of Jackets", * liveboardId: "123" * }); * ``` * * @example * ```js * const pinResponse = await searchEmbed.trigger(HostEvent.Pin, { * newVizName: "Sales by state", * newLiveboardName: "Sales", * newTabName: "Products" * }); * ``` * @example * ```js * appEmbed.trigger(HostEvent.Pin) * ``` * @example * ```js * // You can use the Data event dispatched on each answer creation to get the vizId and use in Pin host event. * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.Pin, { vizId: latestSpotterVizId }); * ``` * @example * ```js * // Using context parameter to specify the context type (SDK: 1.45.2+) * // Pin from a search answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.Pin, { * vizId: "123", * newVizName: "Sales by region", * liveboardId: "456" * }, ContextType.Search); * ``` * @example * ```js * // Pin from an answer context (explore modal/page) (SDK: 1.45.2+) * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.Pin, { * vizId: "789", * newVizName: "Revenue trends", * liveboardId: "456" * }, ContextType.Answer); * ``` * @example * ```js * // Pin from a spotter context (SDK: 1.45.2+) * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.Pin, { * vizId: latestSpotterVizId, * newVizName: "AI-generated insights", * liveboardId: "456" * }, ContextType.Spotter); * ``` * * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ Pin = "pin", /** * Trigger the **Show Liveboard details** action * on an embedded Liveboard. * @example * ```js * liveboardEmbed.trigger(HostEvent.LiveboardInfo) *``` * @example * ```js * // Show liveboard info from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.LiveboardInfo, {}, ContextType.Liveboard); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ LiveboardInfo = "pinboardInfo", /** * Trigger the **Schedule** action on an embedded Liveboard. * @example * ```js * liveboardEmbed.trigger(HostEvent.Schedule) * ``` * @example * ```js * // Schedule from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.Schedule, {}, ContextType.Liveboard); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ Schedule = "subscription", /** * Trigger the **Manage schedule** action on an embedded Liveboard * @example * ```js * liveboardEmbed.trigger(HostEvent.ScheduleList) * ``` * @example * ```js * // Manage schedules from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.ScheduleList, {}, ContextType.Liveboard); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ SchedulesList = "schedule-list", /** * Trigger the **Export TML** action on an embedded Liveboard or * Answer. * @example * ```js * liveboardEmbed.trigger(HostEvent.ExportTML) * ``` * @example * ```js * // Export TML from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.ExportTML, {}, ContextType.Liveboard); * ``` * @example * ```js * // Export TML from search-answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.ExportTML, {}, ContextType.Search); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ ExportTML = "exportTSL", /** * Trigger the **Edit TML** action on an embedded Liveboard or * saved Answers in the full application embedding. * @example * ```js * liveboardEmbed.trigger(HostEvent.EditTML) * ``` * @example * ```js * // Edit TML from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.EditTML, {}, ContextType.Liveboard); * ``` * @example * ```js * // Edit TML from search-answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.EditTML, {}, ContextType.Search); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ EditTML = "editTSL", /** * Trigger the **Update TML** action on an embedded Liveboard. * @example * ```js * liveboardEmbed.trigger(HostEvent.UpdateTML) * ``` * @example * ```js * // Update TML from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.UpdateTML, {}, ContextType.Liveboard); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ UpdateTML = "updateTSL", /** * Trigger the **Download PDF** action on an embedded Liveboard, * visualization or Answer. * * @param - `vizId` refers to the Answer ID in Spotter embed and is required in Spotter embed. * * **NOTE**: The **Download** > **PDF** action is available on * visualizations and Answers if the data is in tabular format. * @example * ```js * liveboardEmbed.trigger(HostEvent.DownloadAsPdf) * ``` * @example * ```js * // You can use the Data event dispatched on each answer creation to get the vizId and use in DownloadAsPdf host event. * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.DownloadAsPdf, { vizId: latestSpotterVizId }); * ``` * @example * ```js * // Download as PDF from search-answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.DownloadAsPdf, {}, ContextType.Search); * ``` * @example * ```js * // Download as PDF from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.DownloadAsPdf, {}, ContextType.Liveboard); * ``` * * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ DownloadAsPdf = "downloadAsPdf", /** * Trigger the **Download Liveboard as Continuous PDF** action on an * embedded Liveboard. * * @example * ```js * liveboardEmbed.trigger(HostEvent.DownloadLiveboardAsContinuousPDF) * ``` * * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ DownloadLiveboardAsContinuousPDF = "downloadLiveboardAsContinuousPDF", /** * Trigger the **AI Highlights** action on an embedded Liveboard * * @example * ```js * liveboardEmbed.trigger(HostEvent.AIHighlights) * ``` * @version SDK: 1.44.0 | ThoughtSpot: 10.15.0.cl */ AIHighlights = "AIHighlights", /** * Trigger the **Make a copy** action on a Liveboard, * visualization, or Answer page. * @example * ```js * liveboardEmbed.trigger(HostEvent.MakeACopy) * ``` * @example * ```js * liveboardEmbed.trigger(HostEvent.MakeACopy, { * vizId: '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * @example * ```js * vizEmbed.trigger(HostEvent.MakeACopy) * ``` * @example * ```js * searchEmbed.trigger(HostEvent.MakeACopy) * ``` * @example * ```js * // You can use the Data event dispatched on each answer creation to get the vizId and use in MakeACopy host event. * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.MakeACopy, { vizId: latestSpotterVizId }); * ``` * @example * ```js * // Make a copy from answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.MakeACopy, {}, ContextType.Answer); * ``` * @example * ```js * // Make a copy from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.MakeACopy, {}, ContextType.Search); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ MakeACopy = "makeACopy", /** * Trigger the **Delete** action for a Liveboard. * @example * ```js * appEmbed.trigger(HostEvent.Remove) * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw * @example * ```js * liveboardEmbed.trigger(HostEvent.Remove) * ``` * @version SDK: 1.37.0 | ThoughtSpot: 10.8.0.cl, 10.10.0.sw */ Remove = "delete", /** * Trigger the **Explore** action on a visualization. * @param - an object with `vizId` as a key * @example * ```js * liveboardEmbed.trigger(HostEvent.Explore, {vizId: '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * @example * ```js * // Explore from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.Explore, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ Explore = "explore", /** * Trigger the **Create alert** action on a KPI chart * in a Liveboard or saved Answer. * @param - an object with `vizId` as a key * @example * ```js * liveboardEmbed.trigger(HostEvent.CreateMonitor, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }) * ``` * @example * ```js * searchEmbed.trigger(HostEvent.CreateMonitor) * ``` * @example * ```js * // Create monitor from answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.CreateMonitor, {}, ContextType.Answer); * ``` * @example * ```js * // Create monitor from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.CreateMonitor, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ CreateMonitor = "createMonitor", /** * Trigger the **Manage alerts** action on a KPI chart * in a visualization or saved Answer. * @param - an object with `vizId` as a key * @example * ```js * liveboardEmbed.trigger(HostEvent.ManageMonitor, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }) * ``` * @example * ```js * searchEmbed.trigger(HostEvent.ManageMonitor) * ``` * @example * ```js * vizEmbed.trigger(HostEvent.ManageMonitor) * ``` * @example * ```js * // Manage monitor from answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.ManageMonitor, {}, ContextType.Answer); * ``` * @example * ```js * // Manage monitor from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.ManageMonitor, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ ManageMonitor = "manageMonitor", /** * Trigger the **Edit** action on a Liveboard or a visualization * on a Liveboard. * * This event is not supported in visualization embed and search embed. * @param - Object parameter. Includes the following keys: * - `vizId`: To trigger the action for a specific visualization in Liveboard embed, * pass in `vizId` as a key. In Spotter embed, `vizId` refers to the Answer ID and * is **required**. * * @example * ```js * liveboardEmbed.trigger(HostEvent.Edit) * ``` * ```js * liveboardEmbed.trigger(HostEvent.Edit, {vizId: * '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * @example * ```js * spotterEmbed.trigger(HostEvent.Edit); * ``` * @example * ```js * // Using context parameter to edit liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.Edit, {}, ContextType.Liveboard); * ``` * @example * ```js * // Edit from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.Edit, {}, ContextType.Search); * ``` * * @example * ```js * // Edit from spotter context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.Edit, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Spotter); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ Edit = "edit", /** * Trigger the **Copy link** action on a Liveboard or visualization * @param - object - to trigger the action for a * specific visualization in Liveboard embed, pass in `vizId` as a key * @example * ```js * liveboardEmbed.trigger(HostEvent.CopyLink) * ``` * ```js * liveboardEmbed.trigger(HostEvent.CopyLink, {vizId: '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * ```js * vizEmbed.trigger(HostEvent.CopyLink) * ``` * @example * ```js * // Copy link from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.CopyLink, {}, ContextType.Liveboard); * ``` * @example * ```js * // Copy link from liveboard visualization context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.CopyLink, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @example * ```js * // Copy link from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.CopyLink, {}, ContextType.Liveboard); * ``` * @example * ```js * // Copy link from liveboard visualization context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.CopyLink, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ CopyLink = "embedDocument", /** * Trigger the **Present** action on a Liveboard or visualization * @param - object - to trigger the action for a specific visualization * in Liveboard embed, pass in `vizId` as a key * @example * ```js * liveboardEmbed.trigger(HostEvent.Present) * ``` * ```js * liveboardEmbed.trigger(HostEvent.Present, {vizId: '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * ```js * vizEmbed.trigger(HostEvent.Present) * ``` * @example * ```js * // Present from liveboard visualization context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.Present, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @example * ```js * // Present from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.Present, {}, ContextType.Liveboard); * ``` * @example * ```js * // Present from liveboard visualization context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.Present, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @example * ```js * // Present from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.Present, {}, ContextType.Liveboard); * ``` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1.sw */ Present = "present", /** * Get TML for the current search. * @example * ```js * searchEmbed.trigger(HostEvent.GetTML).then((tml) => { * console.log( * tml.answer.search_query // TML representation of the search query * ); * }) * ``` * @example * ```js * // You can use the Data event dispatched on each answer creation to get the vizId and use in GetTML host event. * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.GetTML, { * vizId: latestSpotterVizId * }).then((tml) => { * console.log( * tml.answer.search_query // TML representation of the search query * ); * }) * ``` * @example * ```js * // Get TML from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.GetTML, {}, ContextType.Search).then((tml) => { * console.log(tml.answer.search_query); * }); * ``` * @example * ```js * // Get TML from search-answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.GetTML, {}, ContextType.Search).then((tml) => { * console.log(tml.answer); * }); * ``` * @version SDK: 1.18.0 | ThoughtSpot: 8.10.0.cl, 9.0.1.sw * @important */ GetTML = "getTML", /** * Trigger the **Show underlying data** action on a * chart or table. * * @param - an object with vizId as a key * @example * ```js * liveboardEmbed.trigger(HostEvent.ShowUnderlyingData, {vizId: * '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * ```js * vizEmbed.trigger(HostEvent.ShowUnderlyingData) * ``` * ```js * searchEmbed.trigger(HostEvent.ShowUnderlyingData) * ``` * @example * ```js * // Show underlying data from liveboard visualization context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.ShowUnderlyingData, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @example * ```js * // Show underlying data from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.ShowUnderlyingData, {}, ContextType.Search); * ``` * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw */ ShowUnderlyingData = "showUnderlyingData", /** * Trigger the **Delete** action for a visualization * in an embedded Liveboard, or a chart or table * generated from Search. * @param - Liveboard embed takes an object with `vizId` as a key. * Can be left empty if embedding Search or visualization. * @example * ```js * liveboardEmbed.trigger(HostEvent.Delete, {vizId: * '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * ```js * searchEmbed.trigger(HostEvent.Delete) * ``` * @example * ```js * // Delete from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.Delete, {}, ContextType.Liveboard); * ``` * @example * ```js * // Delete from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.Delete, {}, ContextType.Search); * ``` * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw */ Delete = "onDeleteAnswer", /** * Trigger the **SpotIQ analyze** action on a * chart or table. * @param - Liveboard embed takes `vizId` as a * key. Can be left undefined when embedding Search or * visualization. * @example * ```js * liveboardEmbed.trigger(HostEvent.SpotIQAnalyze, {vizId: * '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * ```js * vizEmbed.trigger(HostEvent.SpotIQAnalyze) * ``` * ```js * searchEmbed.trigger(HostEvent.SpotIQAnalyze) * ``` * @example * ```js * // SpotIQ analyze from search-answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.SpotIQAnalyze, { vizId: '730496d6-6903-4601-937e-2c691821af3c' }, ContextType.Search); * ``` * @example * ```js * // SpotIQ analyze from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.SpotIQAnalyze, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw */ SpotIQAnalyze = "spotIQAnalyze", /** * Trigger the **Download** action on charts in * the embedded view. * Use {@link HostEvent.DownloadAsPng} instead. * * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw * * @deprecated from SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl ,9.4.1.sw * @param - `vizId` refers to the Visualization ID in Spotter embed and is required in Spotter embed. * @example * ```js * liveboardEmbed.trigger(HostEvent.Download, {vizId: * '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * ```js * embed.trigger(HostEvent.Download) * ``` * ```js * // You can use the Data event dispatched on each answer creation to get the vizId and use in Download host event. * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.Download, { vizId: latestSpotterVizId }); * ``` */ Download = "downloadAsPng", /** * Trigger the **Download** > **PNG** action on * charts in the embedded view. * @example * ```js * liveboardEmbed.trigger(HostEvent.DownloadAsPng, * {vizId:'730496d6-6903-4601-937e-2c691821af3c'}) * * vizEmbed.trigger(HostEvent.DownloadAsPng) * * searchEmbed.trigger(HostEvent.DownloadAsPng) * * // You can use the Data event dispatched on each answer creation to get the vizId and use in DownloadAsPng host event. * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.DownloadAsPng, { vizId: latestSpotterVizId }); * ``` * @example * ```js * // Download as PNG from search-answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.DownloadAsPng, {}, ContextType.Search); * ``` * * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.4.1.sw */ DownloadAsPng = "downloadAsPng", /** * Trigger the **Download** > **CSV** action on tables in * the embedded view. * @param - `vizId` refers to the Visualization ID in Spotter embed and is required in Spotter embed. * @example * ```js * liveboardEmbed.trigger(HostEvent.DownloadAsCsv, {vizId: * '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * ```js * vizEmbed.trigger(HostEvent.DownloadAsCsv) * ``` * ```js * searchEmbed.trigger(HostEvent.DownloadAsCsv) * ``` * ```js * // You can use the Data event dispatched on each answer creation to get the vizId and use in DownloadAsCsv host event. * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.DownloadAsCsv, { vizId: latestSpotterVizId }); * ``` * @example * ```js * // Download as CSV from search-answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.DownloadAsCsv, {}, ContextType.Search); * ``` * @example * ```js * // Download as CSV from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * searchEmbed.trigger(HostEvent.DownloadAsCsv, {}, ContextType.Search); * ``` * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw */ DownloadAsCsv = "downloadAsCSV", /** * Trigger the **Download** > **XLSX** action on tables * in the embedded view. * @param - `vizId` refers to the Visualization ID in Spotter embed and is required in Spotter embed. * @example * ```js * liveboardEmbed.trigger(HostEvent.DownloadAsXlsx, {vizId: * '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * ```js * vizEmbed.trigger(HostEvent.DownloadAsXlsx) * ``` * ```js * searchEmbed.trigger(HostEvent.DownloadAsXlsx) * ``` * ```js * // You can use the Data event dispatched on each answer creation to get the vizId and use in DownloadAsXlsx host event. * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.DownloadAsXlsx, { vizId: latestSpotterVizId }); * ``` * @example * ```js * // Download as XLSX from answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.DownloadAsXlsx, {}, ContextType.Answer); * ``` * @example * ```js * // Download as XLSX from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * searchEmbed.trigger(HostEvent.DownloadAsXlsx, {}, ContextType.Search); * ``` * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw */ DownloadAsXlsx = "downloadAsXLSX", /** * Trigger the **Share** action on an embedded * Liveboard or Answer. * @example * ```js * liveboardEmbed.trigger(HostEvent.Share) * ``` * ```js * searchEmbed.trigger(HostEvent.Share) * ``` * @example * ```js * // Share from Liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.Share, {}, ContextType.Liveboard); * ``` * @example * ```js * // Share from search-answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.Share, {}, ContextType.Search); * ``` * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw */ Share = "share", /** * Trigger the **Save** action on a Liveboard, Answer, or Spotter. * Saves the changes. * * @param - `vizId` refers to the Spotter Visualization Id used in Spotter embed. * It is required and can be retrieved from the data embed event. * * @example * ```js * // Save changes in a Liveboard * liveboardEmbed.trigger(HostEvent.Save) * ``` * * ```js * // Save the current Answer in Search embed * searchEmbed.trigger(HostEvent.Save) * ``` * * ```js * // Save a Visualization in Spotter (requires vizId) * spotterEmbed.trigger(HostEvent.Save, { * vizId: "730496d6-6903-4601-937e-2c691821af3c" * }) * ``` * * ```js * // How to get the vizId in Spotter? * * // You can use the Data event dispatched on each answer creation to get the vizId. * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.Save, { vizId: latestSpotterVizId }); * ``` * @example * ```js * // Save from answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.Save, {}, ContextType.Answer); * ``` * @example * ```js * // Save from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * searchEmbed.trigger(HostEvent.Save, {}, ContextType.Search); * ``` * * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw */ Save = "save", /** * Trigger the **Sync to Sheets** action on an embedded visualization or Answer * Sends data from an Answer or Liveboard visualization to a Google sheet. * @param - an object with `vizId` as a key * @example * ```js * liveboardEmbed.trigger(HostEvent.SyncToSheets, {vizId: * '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * ```js * vizEmbed.trigger(HostEvent.SyncToSheets) * ``` * @example * ```js * // Sync to sheets from answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.SyncToSheets, {}, ContextType.Answer); * ``` * @example * ```js * // Sync to sheets from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.SyncToSheets, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw */ SyncToSheets = "sync-to-sheets", /** * Trigger the **Sync to Other Apps** action on an embedded visualization or Answer * Sends data from an Answer or Liveboard visualization to third-party apps such * as Slack, Salesforce, Microsoft Teams, ServiceNow and so on. * @param - an object with vizId as a key * @example * ```js * liveboardEmbed.trigger(HostEvent.SyncToOtherApps, {vizId: * '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * ```js * vizEmbed.trigger(HostEvent.SyncToOtherApps) * ``` * @example * ```js * // Sync to other apps from answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.SyncToOtherApps, {}, ContextType.Answer); * ``` * @example * ```js * // Sync to other apps from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.SyncToOtherApps, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw */ SyncToOtherApps = "sync-to-other-apps", /** * Trigger the **Manage pipelines** action on an embedded * visualization or Answer. * Allows users to manage ThoughtSpot Sync pipelines. * @param - an object with `vizId` as a key * @example * ```js * liveboardEmbed.trigger(HostEvent.ManagePipelines, {vizId: * '730496d6-6903-4601-937e-2c691821af3c'}) * ``` * ```js * vizEmbed.trigger(HostEvent.ManagePipelines) * ``` * @example * ```js * // Manage pipelines from answer context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * appEmbed.trigger(HostEvent.ManagePipelines, {}, ContextType.Answer); * ``` * @example * ```js * // Manage pipelines from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.ManagePipelines, { * vizId: '730496d6-6903-4601-937e-2c691821af3c' * }, ContextType.Liveboard); * ``` * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw */ ManagePipelines = "manage-pipeline", /** * Reset search operation on the Search or Answer page. * @example * ```js * searchEmbed.trigger(HostEvent.ResetSearch) * ``` * ```js * appEmbed.trigger(HostEvent.ResetSearch) * ``` * @example * ```js * // Reset search from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * searchEmbed.trigger(HostEvent.ResetSearch, {}, ContextType.Search); * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.0.1.sw */ ResetSearch = "resetSearch", /** * Get details of filters applied on the Liveboard. * Returns arrays containing Liveboard filter and runtime filter elements. * @example * ```js * const data = await liveboardEmbed.trigger(HostEvent.GetFilters); * console.log('data', data); * ``` * @example * ```js * // Get filters from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * const data = await liveboardEmbed.trigger(HostEvent.GetFilters, {}, ContextType.Liveboard); * console.log('filters', data); * ``` * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl */ GetFilters = "getFilters", /** * Update one or several filters applied on a Liveboard. * @param - Includes the following keys: * - `filter`: A single filter object containing column name, filter operator, and * values. * - `filters`: Multiple filter objects with column name, filter operator, * and values for each. * * Each filter object must include the following attributes: * * `column` - Name of the column to filter on. * * `oper` - Filter operator, for example, EQ, IN, CONTAINS. * For information about the supported filter operators, * see link:https://developers.thoughtspot.com/docs/runtime-filters#rtOperator[Developer Documentation]. * * `values` - An array of one or several values. The value definition on the * data type you choose to filter on. For a complete list of supported data types, * see * link:https://developers.thoughtspot.com/docs/runtime-filters#_supported_data_types[Supported * data types]. * * `type` - To update filters for date time, specify the date format type. * For more information and examples, see link:https://developers.thoughtspot.com/docs/embed-liveboard#_date_filters[Date filters]. * @example * ```js * * liveboardEmbed.trigger(HostEvent.UpdateFilters, { * filter: { * column: "item type", * oper: "IN", * values: ["bags","shirts"] * } * }); * ``` * @example * ```js * * liveboardEmbed.trigger(HostEvent.UpdateFilters, { * filter: { * column: "date", * oper: "EQ", * values: ["JULY","2023"], * type: "MONTH_YEAR" * } * }); * ``` * @example * * ```js * liveboardEmbed.trigger(HostEvent.UpdateFilters, { * filters: [{ * column: "Item Type", * oper: 'IN', * values: ["bags","shirts"] * }, * { * column: "Region", * oper: 'IN', * values: ["West","Midwest"] * }, * { * column: "Date", * oper: 'EQ', * values: ["2023-07-31"], * type: "EXACT_DATE" * }] * }); * ``` * If there are multiple columns with the same name, consider * using `WORKSHEET_NAME::COLUMN_NAME` format. * * @example * * ```js * liveboardEmbed.trigger(HostEvent.UpdateFilters, { * filters: [{ * column: "(Sample) Retail - Apparel::city", * oper: 'IN', * values: ["atlanta"] * }, * { * column: "(Sample) Retail - Apparel::Region", * oper: 'IN', * values: ["West","Midwest"] * }] * }); * ``` * @example * ```js * // Update filters from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.UpdateFilters, { * filter: { * column: "item type", * oper: "IN", * values: ["shoes", "boots"] * } * }, ContextType.Liveboard); * ``` * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl */ UpdateFilters = "updateFilters", /** * Get tab details for the current Liveboard. * @example * ```js * liveboardEmbed.trigger(HostEvent.GetTabs).then((tabDetails) => { * console.log( * tabDetails // TabDetails of current Liveboard * ); * }) * ``` * @example * ```js * // Get tabs from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.GetTabs, {}, ContextType.Liveboard).then((tabDetails) => { * console.log('tabs', tabDetails); * }); * ``` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl */ GetTabs = "getTabs", /** * Set the visible tabs on a Liveboard. * @param - an array of ids of tabs to show, the IDs not passed * will be hidden. * @example * ```js * liveboardEmbed.trigger(HostEvent.SetVisibleTabs, [ * '430496d6-6903-4601-937e-2c691821af3c', * 'f547ec54-2a37-4516-a222-2b06719af726']) * ``` * @example * ```js * // Set visible tabs from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.SetVisibleTabs, [ * '430496d6-6903-4601-937e-2c691821af3c', * 'f547ec54-2a37-4516-a222-2b06719af726' * ], ContextType.Liveboard); * ``` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw */ SetVisibleTabs = "SetPinboardVisibleTabs", /** * Set the hidden tabs on a Liveboard. * @param - an array of the IDs of the tabs to hide. * The IDs not passed will be shown. * @example * ```js * liveboardEmbed.trigger(HostEvent.SetHiddenTabs, [ * '630496d6-6903-4601-937e-2c691821af3c', * 'i547ec54-2a37-4516-a222-2b06719af726']) * ``` * @example * ```js * // Set hidden tabs from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.SetHiddenTabs, [ * '630496d6-6903-4601-937e-2c691821af3c', * 'i547ec54-2a37-4516-a222-2b06719af726' * ], ContextType.Liveboard); * ``` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw */ SetHiddenTabs = "SetPinboardHiddenTabs", /** * Get the Answer session for a Search or * Liveboard visualization. * * Note: This event is not typically used directly. Instead, use the * `getAnswerService()` method on the embed instance to get an AnswerService * object that provides a more convenient interface for working with answers. * * @example * ```js * // Preferred way to get an AnswerService * const service = await embed.getAnswerService(); * * // Alternative direct usage (not recommended) * const {session} = await embed.trigger( * HostEvent.GetAnswerSession, { * vizId: '123', // For Liveboard Visualization. * }) * ``` * @example * ```js * // Preferred way to get an AnswerService * const service = await embed.getAnswerService(); * * // Alternative direct usage (not recommended) * const {session} = await embed.trigger( HostEvent.GetAnswerSession ) * ``` * @version SDK: 1.26.0 | ThoughtSpot: 9.10.0.cl, 10.1.0.sw */ GetAnswerSession = "getAnswerSession", /** * Trigger the *Ask Sage* action for visualizations * @example * ```js * liveboardEmbed.trigger(HostEvent.AskSage, * {vizId:'730496d6-6903-4601-937e-2c691821af3c'}) * ``` * @version SDK: 1.29.0 | ThoughtSpot Cloud: 9.12.0.cl */ AskSage = "AskSage", /** * Trigger cross filter update action on a Liveboard. * * @example * ```js * liveboardEmbed.trigger(HostEvent.UpdateCrossFilter, { * vizId: 'b535c760-8bbe-4e6f-bb26-af56b4129a1e', * conditions: [ * { columnName: 'Category', values: ['mfgr#12','mfgr#14'] }, * { columnName: 'color', values: ['mint','hot'] }, * ], * }); * ``` * @version SDK: 1.29.0 | ThoughtSpot Cloud: 10.0.0.cl, 10.1.0.sw */ UpdateCrossFilter = "UpdateCrossFilter", /** * Trigger reset action for a personalized Liveboard view. * This event is deprecated. Use {@link HostEvent.ResetLiveboardPersonalizedView} instead. * @example * ```js * liveboardEmbed.trigger(HostEvent.ResetLiveboardPersonalisedView); * ``` * @version SDK: 1.29.0 | ThoughtSpot Cloud: 10.1.0.cl, 10.1.0.sw * @deprecated SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ ResetLiveboardPersonalisedView = "ResetLiveboardPersonalisedView", /** * Trigger reset action for a personalized Liveboard view. * @example * ```js * liveboardEmbed.trigger(HostEvent.ResetLiveboardPersonalizedView); * ``` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ ResetLiveboardPersonalizedView = "ResetLiveboardPersonalisedView", /** * Triggers an action to update Parameter values on embedded * Answers, Liveboard, and Spotter answer in Edit mode. * @param - Includes the following keys for each item: * - `name`: Name of the parameter. * - `value`: The value to set for the parameter. * - `isVisibleToUser`: Optional. To control the visibility of the parameter chip. * * @example * ```js * liveboardEmbed.trigger(HostEvent.UpdateParameters, [{ * name: "Integer Range Param", * value: 10, * isVisibleToUser: false * }]) * ``` * @example * ```js * // Update parameters from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.UpdateParameters, [{ * name: "Region Param", * value: "West", * isVisibleToUser: true * }], ContextType.Liveboard); * ``` * @version SDK: 1.29.0 | ThoughtSpot: 10.1.0.cl, 10.1.0.sw */ UpdateParameters = "UpdateParameters", /** * Triggers GetParameters to fetch the runtime Parameters. * @param - `vizId` refers to the Answer ID in Spotter embed and is required in Spotter embed. * ```js * liveboardEmbed.trigger(HostEvent.GetParameters).then((parameter) => { * console.log('parameters', parameter); * }); * ``` * ```js * // You can use the Data event dispatched on each answer creation to get the vizId and use in GetParameters host event. * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.GetParameters, { vizId: latestSpotterVizId }); *``` * @example * ```js * // Get parameters from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.GetParameters, {}, * ContextType.Liveboard).then((parameters) => { * console.log('parameters', parameters); * }); * ``` * @version SDK: 1.29.0 | ThoughtSpot: 10.1.0.cl, 10.1.0.sw */ GetParameters = "GetParameters", /** * Triggers an event to update a personalized view of a Liveboard. * This event is deprecated. Use {@link HostEvent.UpdatePersonalizedView} instead. * ```js * liveboardEmbed.trigger(HostEvent.UpdatePersonalisedView, {viewId: '1234'}) * ``` * @example * ```js * // Update personalized view from liveboard context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * liveboardEmbed.trigger(HostEvent.UpdatePersonalisedView, { * viewId: '1234' * }, ContextType.Liveboard); * ``` * @version SDK: 1.36.0 | ThoughtSpot: 10.6.0.cl * @deprecated SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ UpdatePersonalisedView = "UpdatePersonalisedView", /** * Triggers an event to update a personalized view of a Liveboard. * ```js * liveboardEmbed.trigger(HostEvent.UpdatePersonalisedView, {viewId: '1234'}) * ``` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ UpdatePersonalizedView = "UpdatePersonalisedView", /** * Triggers selection of a specific Personalized View on a * Liveboard without reloading the embed. Pass either a * `viewId` (GUID) or `viewName`. If both are provided, `viewId` takes precedence. * If neither is provided, the Liveboard resets to the original/default view. * When a `viewName` is provided and multiple views share * the same name, the first match is selected. * @example * ```js * liveboardEmbed.trigger( * HostEvent.SelectPersonalizedView, * { viewId: '2a021a12-1aed-425d-984b-141ee916ce72' }, * ) * ``` * @example * ```js * // Select by name * liveboardEmbed.trigger( * HostEvent.SelectPersonalizedView, * { viewName: 'Dr Smith Cardiology' }, * ) * ``` * @example * ```js * // Reset to default view * liveboardEmbed.trigger( * HostEvent.SelectPersonalizedView, * {}, * ) * ``` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ SelectPersonalizedView = "SelectPersonalisedView", /** * @hidden * Notify when info call is completed successfully * ```js * liveboardEmbed.trigger(HostEvent.InfoSuccess, data); * ``` * @version SDK: 1.36.0 | ThoughtSpot: 10.6.0.cl */ InfoSuccess = "InfoSuccess", /** * Trigger the save action for an Answer. * To programmatically save an answer without opening the * *Describe your Answer* modal, define the `name` and `description` * properties. * If no parameters are specified, the save action is * triggered with a modal to prompt users to * add a name and description for the Answer. * @param - Includes the following keys: * - `vizId`: Refers to the Answer ID in Spotter embed and is **required** in Spotter * embed. * - `name`: Optional. Name string for the Answer. * - `description`: Optional. Description text for the Answer. * @example * ```js * const saveAnswerResponse = await searchEmbed.trigger(HostEvent.SaveAnswer, { * name: "Sales by states", * description: "Total sales by states in MidWest" * }); * ``` * @example * ```js * // You can use the Data event dispatched on each answer creation to get the vizId and use in SaveAnswer host event. * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.SaveAnswer, { vizId: latestSpotterVizId }); * ``` * @example * ```js * // Using context parameter to save answer from search context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * const saveAnswerResponse = await appEmbed.trigger(HostEvent.SaveAnswer, { * name: "Regional sales analysis", * description: "Sales breakdown by region" * }, ContextType.Search); * ``` * @example * ```js * // Save answer from answer context (explore modal) * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * const saveAnswerResponse = await appEmbed.trigger(HostEvent.SaveAnswer, { * name: "Modified analysis", * description: "Updated from explore view" * }, ContextType.Answer); * ``` * @example * ```js * // Save answer from spotter context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * const saveAnswerResponse = await appEmbed.trigger(HostEvent.SaveAnswer, { * vizId: latestSpotterVizId, * name: "AI insights", * description: "Generated from Spotter" * }, ContextType.Spotter); * ``` * @version SDK: 1.36.0 | ThoughtSpot: 10.6.0.cl */ SaveAnswer = "saveAnswer", /** * EmbedApi * @hidden */ UIPassthrough = "UiPassthrough", /** * Triggers the table visualization re-render with the updated data. * Includes the following properties: * @param - `columnDataLite` - an array of object containing the * data value modifications retrieved from the `EmbedEvent.TableVizRendered` * payload.For example, { columnDataLite: []}`. * * @example * ```js * searchEmbed.on(EmbedEvent.TableVizRendered, (payload) => { * console.log(payload); * const columnDataLite = payload.data.data.columnDataLite; * columnDataLite[0].dataValue[0]="new fob"; * console.log('>>> new Data', columnDataLite); * searchEmbed.trigger(HostEvent.TransformTableVizData, columnDataLite); * }) * ``` * @version SDK: 1.37.0 | ThoughtSpot: 10.8.0.cl */ TransformTableVizData = "TransformTableVizData", /** * Triggers a search operation with the search tokens specified in * the search query string in spotter embed. * @param - Includes the following keys: * - `query`: Text string in Natural Language format. * - `executeSearch`: Boolean to execute search and update search query. * @example * ```js * spotterEmbed.trigger(HostEvent.SpotterSearch, { * query: 'revenue per year', * executeSearch: true, * }) * ``` * @example * ```js * // Spotter search from spotter context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * spotterEmbed.trigger(HostEvent.SpotterSearch, { * query: 'sales by region', * executeSearch: true * }, ContextType.Spotter); * ``` * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ SpotterSearch = "SpotterSearch", /** * Edits the last prompt in spotter embed. * @param - `query`: Text string * @example * ```js * spotterEmbed.trigger(HostEvent.EditLastPrompt, "revenue per year"); * ``` * @example * ```js * // Edit last prompt from spotter context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * spotterEmbed.trigger(HostEvent.EditLastPrompt, "sales by region", ContextType.Spotter); * ``` * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ EditLastPrompt = "EditLastPrompt", /** * Opens the data source preview modal in Spotter Embed. * @example * ```js * spotterEmbed.trigger(HostEvent.PreviewSpotterData); * ``` * @example * ```js * // Preview spotter data from spotter context * import { ContextType } from '@thoughtspot/visual-embed-sdk'; * spotterEmbed.trigger(HostEvent.PreviewSpotterData, {}, ContextType.Spotter); * ``` * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ PreviewSpotterData = "PreviewSpotterData", /** * Opens the Add to Coaching modal from a visualization in Spotter Embed. * @param - `vizId ` refers to the Visualization ID in Spotter embed and is required. * @example * ```js * spotterEmbed.trigger(HostEvent.AddToCoaching, { vizId: '730496d6-6903-4601-937e-2c691821af3c' }); * * ``` * @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl */ AddToCoaching = "addToCoaching", /** * Opens the data model instructions modal in Spotter Embed. * @example * ```js * spotterEmbed.trigger(HostEvent.DataModelInstructions); * ``` * @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl */ DataModelInstructions = "DataModelInstructions", /** * Resets the Spotter Embed Conversation. * @example * ```js * spotterEmbed.trigger(HostEvent.ResetSpotterConversation); * ``` * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ ResetSpotterConversation = "ResetSpotterConversation", /** * Deletes the last prompt in spotter embed. * @example * ```js * spotterEmbed.trigger(HostEvent.DeleteLastPrompt); * ``` * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ DeleteLastPrompt = "DeleteLastPrompt", /** * Toggle the visualization to chart or table view. * @param - `vizId ` refers to the Visualization ID in Spotter embed and is required. * @example * ```js * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.AnswerChartSwitcher, { vizId: latestSpotterVizId }); * ``` * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ AnswerChartSwitcher = "answerChartSwitcher", /** * @hidden * Trigger exit from presentation mode when user exits fullscreen. * This is automatically triggered by the SDK when fullscreen mode is exited. * ```js * liveboardEmbed.trigger(HostEvent.ExitPresentMode); * ``` * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ ExitPresentMode = "exitPresentMode", /** * Triggers the full height lazy load data. * @example * ```js * liveboardEmbed.on(EmbedEvent.RequestVisibleEmbedCoordinates, (payload) => { * console.log(payload); * }); * ``` * @version SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl * * @hidden */ VisibleEmbedCoordinates = "visibleEmbedCoordinates", /** * Trigger the *Spotter* action for visualizations present on the liveboard's vizzes. * @param - `vizId` refers to the Visualization ID in Spotter embed and is required. * @example * ```js * let latestSpotterVizId = ''; * spotterEmbed.on(EmbedEvent.Data, (payload) => { * latestSpotterVizId = payload.data.id; * }); * * spotterEmbed.trigger(HostEvent.AskSpotter, { vizId: latestSpotterVizId }); * ``` * @version SDK: 1.41.0 | ThoughtSpot: 10.12.0.cl */ AskSpotter = "AskSpotter", /** * @hidden * Triggers the update of the embed params. * * @example * ```js * liveboardEmbed.trigger(HostEvent.UpdateEmbedParams, viewConfig); * ``` */ UpdateEmbedParams = "updateEmbedParams", /** * Triggered when the embed needs to be destroyed. This is used to clean up any embed-related resources internally. * @example * ```js * liveboardEmbed.trigger(HostEvent.DestroyEmbed); * ``` * @version SDK: 1.41.0 | ThoughtSpot: 10.12.0.cl */ DestroyEmbed = "EmbedDestroyed", /** * Triggers a new conversation in Spotter embed. * * This feature is available only when chat history is enabled on your ThoughtSpot * instance. Contact your admin or ThoughtSpot Support to enable chat history on your * instance. * * @example * ```js * spotterEmbed.trigger(HostEvent.StartNewSpotterConversation); * ``` * @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl */ StartNewSpotterConversation = "StartNewSpotterConversation", /** * @hidden * Get the current context of the embedded page. * * @example * ```js * const context = await liveboardEmbed.trigger(HostEvent.GetPageContext); * ``` * @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl */ GetPageContext = "GetPageContext", /** * Trigger the **Send Test Email** action in the Liveboard schedule modal. * Sends a test schedule email to self or all recipients. * Requires `isSendNowLiveboardSchedulingEnabled` to be enabled. * @example * ```js * liveboardEmbed.trigger(HostEvent.SendTestScheduleEmail, { * sendToSelf: true, * }) * ``` * @example * ```js * // Send to all recipients * liveboardEmbed.trigger(HostEvent.SendTestScheduleEmail, { * sendToSelf: false, * }) * ``` * @version SDK: 1.48.0 | ThoughtSpot Cloud: 26.5.0.cl */ SendTestScheduleEmail = "sendTestScheduleEmail" } /** * The different visual modes that the data sources panel within * search could appear in, such as hidden, collapsed, or expanded. */ export enum DataSourceVisualMode { /** * The data source panel is hidden. */ Hidden = "hide", /** * The data source panel is collapsed, but the user can manually expand it. */ Collapsed = "collapse", /** * The data source panel is expanded, but the user can manually collapse it. */ Expanded = "expand" } /** * ThoughtSpot application pages include actions and menu commands * for various user-initiated operations. These actions are represented * as enumeration members in the SDK. To control actions in the embedded view: * - disabledActions — the action is grayed out and still visible, but non-interactive (user can see but not click). * - hiddenActions — the action is completely removed from the UI (user cannot see it at all). * - visibleActions — allowlist, only these actions are shown; all others are hidden. * * Use disabledActions to disable (gray out) an action. * Use hiddenActions to hide (fully remove) an action. * Use visibleActions to show only specific actions. * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * visibleActions: [Action.Save, Action.Edit, Action.Present, Action.Explore], * disabledActions: [Action.Download], * //hiddenActions: [], // Set either this or visibleActions * }) * ``` * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * //visibleActions: [], * disabledActions: [Action.Download], * hiddenActions: [Action.Edit, Action.Explore], * }) * ``` * See also link:https://developers.thoughtspot.com/docs/actions[Developer Documentation]. */ export enum Action { /** * The **Save** action on an Answer or Liveboard. * Allows users to save the changes. * @example * ```js * disabledActions: [Action.Save] * ``` */ Save = "save", /** * @hidden */ Update = "update", /** * @hidden */ SaveUntitled = "saveUntitled", /** * The **Save as View** action on the Answer * page. Saves an Answer as a View object in the full * application embedding mode. * @example * ```js * disabledActions: [Action.SaveAsView] * ``` */ SaveAsView = "saveAsView", /** * The **Make a copy** action on a Liveboard or Answer * page. Creates a copy of the Liveboard. * In LiveboardEmbed, the **Make a copy** action is not available for * visualizations in the embedded Liveboard view. * In AppEmbed, the **Make a copy** action is available on both * Liveboards and visualizations. * @example * ```js * disabledActions: [Action.MakeACopy] * ``` */ MakeACopy = "makeACopy", /** * The **Copy and Edit** action on a Liveboard. * This action is now replaced with `Action.MakeACopy`. * @example * ```js * disabledActions: [Action.EditACopy] * ``` */ EditACopy = "editACopy", /** * The **Copy link** menu action on a Liveboard visualization. * Copies the visualization URL * @example * ```js * disabledActions: [Action.CopyLink] * ``` */ CopyLink = "embedDocument", /** * @hidden */ ResetLayout = "resetLayout", /** * The **Schedule** menu action on a Liveboard. * Allows scheduling a Liveboard job, for example, * sending periodic notifications. * @example * ```js * disabledActions: [Action.Schedule] * ``` */ Schedule = "subscription", /** * The **Manage schedules** menu action on a Liveboard. * Allows users to manage scheduled Liveboard jobs. * @example * ```js * disabledActions: [Action.SchedulesList] * ``` */ SchedulesList = "schedule-list", /** * The **Share** action on a Liveboard, Answer, or Model. * Allows users to share an object with other users and groups. * @example * ```js * disabledActions: [Action.Share] * ``` */ Share = "share", /** * The **Add filter** action on a Liveboard page. * Allows adding filters to visualizations on a Liveboard. * @example * ```js * disabledActions: [Action.AddFilter] * ``` */ AddFilter = "addFilter", /** * The **Add Data Panel Objects** action on the data panel v2. * Allows to show action menu to add different objects (such as * formulas, Parameters) in data panel new experience. * @example * ```js * disabledActions: [Action.AddDataPanelObjects] * ``` * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl, 10.1.0.sw */ AddDataPanelObjects = "addDataPanelObjects", /** * The filter configuration options for a Liveboard. * The configuration options are available when adding * filters on a Liveboard. * * @example * ```js * disabledActions: [Action.ConfigureFilter] * ``` */ ConfigureFilter = "configureFilter", /** * The **Collapse data sources** icon on the Search page. * Collapses the panel showing data sources. * * @example * ```js * disabledActions: [Action.CollapseDataPanel] * ``` * @version SDK: 1.1.0 | ThoughtSpot Cloud: ts7.may.cl, 8.4.1.sw */ CollapseDataSources = "collapseDataSources", /** * The **Collapse data panel** icon on the Search page. * Collapses the data panel view. * * @version SDK: 1.34.0 | ThoughtSpot Cloud: 10.3.0.cl * * @example * ```js * disabledActions: [Action.CollapseDataPanel] * ``` */ CollapseDataPanel = "collapseDataPanel", /** * The **Choose sources** button on Search page. * Allows selecting data sources for search queries. * @example * ```js * disabledActions: [Action.ChooseDataSources] * ``` */ ChooseDataSources = "chooseDataSources", /** * The **Create formula** action on a Search or Answer page. * Allows adding formulas to an Answer. * @example * ```js * disabledActions: [Action.AddFormula] * ``` */ AddFormula = "addFormula", /** * The **Add parameter** action on a Liveboard or Answer. * Allows adding Parameters to a Liveboard or Answer. * @example * ```js * disabledActions: [Action.AddParameter] * ``` */ AddParameter = "addParameter", /** * The **Add Column Set** action on a Answer. * Allows adding column sets to a Answer. * @example * ```js * disabledActions: [Action.AddColumnSet] * ``` * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl, 10.1.0.sw */ AddColumnSet = "addSimpleCohort", /** * The **Add Query Set** action on a Answer. * Allows adding query sets to a Answer. * @example * ```js * disabledActions: [Action.AddQuerySet] * ``` * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl, 10.1.0.sw */ AddQuerySet = "addAdvancedCohort", /** * @hidden */ SearchOnTop = "searchOnTop", /** * The **SpotIQ analyze** menu action on a visualization or * Answer page. * @example * ```js * disabledActions: [Action.SpotIQAnalyze] * ``` */ SpotIQAnalyze = "spotIQAnalyze", /** * @hidden */ ExplainInsight = "explainInsight", /** * @hidden */ SpotIQFollow = "spotIQFollow", /** * The Share action for a Liveboard visualization. */ ShareViz = "shareViz", /** * @hidden */ ReplaySearch = "replaySearch", /** * The **Show underlying data** menu action on a * visualization or Answer page. * Displays detailed information and raw data * for a given visualization. * @example * ```js * disabledActions: [Action.ShowUnderlyingData] * ``` */ ShowUnderlyingData = "showUnderlyingData", /** * The **Download** menu action on Liveboard * visualizations and Answers. * Allows downloading a visualization or Answer. * @example * ```js * disabledActions: [Action.DownloadAsPng] * ``` */ Download = "download", /** * The **Download** > **PNG** menu action for charts on a Liveboard * or Answer page. * Downloads a visualization or Answer as a PNG file. * @example * ```js * disabledActions: [Action.DownloadAsPng] * ``` */ DownloadAsPng = "downloadAsPng", /** * *The **Download PDF** action that downloads a Liveboard, * visualization, or Answer as a PDF file. * * **NOTE**: The **Download** > **PDF** option is available for * tables in visualizations and Answers. * @example * ```js * disabledActions: [Action.DownloadAsPdf] * ``` */ DownloadAsPdf = "downloadAsPdf", /** * The **Download** > **CSV** menu action for tables on a Liveboard * or Answer page. * Downloads a visualization or Answer in the XLSX format. * @example * ```js * disabledActions: [Action.DownloadAsCsv] * ``` */ DownloadAsCsv = "downloadAsCSV", /** * The **Download** > **XLSX** menu action for tables on a Liveboard * or Answer page. * Downloads a visualization or Answer in the XLSX format. * @example * ```js * disabledActions: [Action.DownloadAsXlsx] * ``` */ DownloadAsXlsx = "downloadAsXLSX", /** * The **Download Liveboard** menu action on a Liveboard. * Allows downloading the entire Liveboard. * @example * ```js * disabledActions: [Action.DownloadLiveboard] * ``` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ DownloadLiveboard = "downloadLiveboard", /** * The **Download Liveboard as Continuous PDF** menu action on a Liveboard. * Allows downloading the entire Liveboard as a continuous PDF. * @example * ```js * disabledActions: [Action.DownloadLiveboardAsContinuousPDF] * ``` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ DownloadLiveboardAsContinuousPDF = "downloadLiveboardAsContinuousPDF", /** * The **Download Liveboard as XLSX** menu action on a Liveboard. * Allows downloading the entire Liveboard as an XLSX file. * @example * ```js * disabledActions: [Action.DownloadLiveboardAsXlsx] * ``` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ DownloadLiveboardAsXlsx = "downloadLiveboardAsXlsx", /** * The **Download Liveboard as CSV** menu action on a Liveboard. * Allows downloading the entire Liveboard as a CSV file. * @example * ```js * disabledActions: [Action.DownloadLiveboardAsCsv] * ``` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ DownloadLiveboardAsCsv = "downloadLiveboardAsCsv", /** * @hidden */ DownloadTrace = "downloadTrace", /** * The **Export TML** menu action on a Liveboard, Answer, and * the Data Workspace pages for data objects and connections. * * Allows exporting an object as a TML file. * * @example * ```js * disabledActions: [Action.ExportTML] * ``` */ ExportTML = "exportTSL", /** * The **Import TML** menu action on the * *Data Workspace* > *Utilities* page. * Imports TML representation of ThoughtSpot objects. * @example * ```js * disabledActions: [Action.ImportTML] * ``` */ ImportTML = "importTSL", /** * The **Update TML** menu action for Liveboards and Answers. * Updates TML representation of ThoughtSpot objects. * @example * ```js * disabledActions: [Action.UpdateTML] * ``` */ UpdateTML = "updateTSL", /** * The **Edit TML** menu action for Liveboards and Answers. * Opens the TML editor. * @example * ```js * disabledActions: [Action.EditTML] * ``` */ EditTML = "editTSL", /** * The **Present** menu action for Liveboards and Answers. * Allows presenting a Liveboard or visualization in * slideshow mode. * @example * ```js * disabledActions: [Action.Present] * ``` */ Present = "present", /** * The visualization tile resize option. * Also available via More `...` options menu on a visualization. * Allows resizing visualization tiles and switching * between different preset layout option. * * @example * ```js * disabledActions: [Action.ToggleSize] * ``` */ ToggleSize = "toggleSize", /** * The *Edit* action on the Liveboard page and in the * visualization menu. * Opens a Liveboard or visualization in edit mode. * @example * ```js * disabledActions: [Action.Edit] * ``` */ Edit = "edit", /** * The text edit option for Liveboard and visualization titles. * @example * ```js * disabledActions: [Action.EditTitle] * ``` */ EditTitle = "editTitle", /** * The **Delete** action on a Liveboard, *Liveboards* and * *Answers* list pages in full application embedding. * * @example * ```js * disabledActions: [Action.Remove] * ``` */ Remove = "delete", /** * @hidden */ Ungroup = "ungroup", /** * @hidden */ Describe = "describe", /** * @hidden */ Relate = "relate", /** * @hidden */ CustomizeHeadlines = "customizeHeadlines", /** * @hidden */ PinboardInfo = "pinboardInfo", /** * The **Show Liveboard details** menu action on a Liveboard. * Displays details such as the name, description, and * author of the Liveboard, and timestamp of Liveboard creation * and update. * @example * ```js * disabledActions: [Action.LiveboardInfo] * ``` */ LiveboardInfo = "pinboardInfo", /** * @hidden */ SendAnswerFeedback = "sendFeedback", /** * @hidden */ DownloadEmbraceQueries = "downloadEmbraceQueries", /** * The **Pin** menu action on an Answer or * Search results page. * @example * ```js * disabledActions: [Action.Pin] * ``` */ Pin = "pin", /** * @hidden */ AnalysisInfo = "analysisInfo", /** * The **Schedule** menu action on a Liveboard. * Allows scheduling a Liveboard job. * @example * ```js * disabledActions: [Action.Subscription] * ``` */ Subscription = "subscription", /** * The **Explore** action on Liveboard visualizations * @example * ```js * disabledActions: [Action.Explore] * ``` */ Explore = "explore", /** * The contextual menu action to include a specific data point * when drilling down a table or chart on an Answer. * * @example * ```js * disabledActions: [Action.DrillInclude] * ``` */ DrillInclude = "context-menu-item-include", /** * The contextual menu action to exclude a specific data point * when drilling down a table or chart on an Answer. * @example * ```js * disabledActions: [Action.DrillInclude] * ``` */ DrillExclude = "context-menu-item-exclude", /** * The **Copy to clipboard** menu action on tables in an Answer * or Liveboard. * Copies the selected data point. * @example * ```js * disabledActions: [Action.CopyToClipboard] * ``` */ CopyToClipboard = "context-menu-item-copy-to-clipboard", CopyAndEdit = "context-menu-item-copy-and-edit", /** * @hidden */ DrillEdit = "context-menu-item-edit", EditMeasure = "context-menu-item-edit-measure", Separator = "context-menu-item-separator", /** * The **Drill down** menu action on Answers and Liveboard * visualizations. * Allows drilling down to a specific data point on a chart or table. * @example * ```js * disabledActions: [Action.DrillDown] * ``` */ DrillDown = "DRILL", /** * The request access action on Liveboards. * Allows users with view permissions to request edit access to a Liveboard. * @example * ```js * disabledActions: [Action.RequestAccess] * ``` */ RequestAccess = "requestAccess", /** * Controls the display and availability of the **Query visualizer** and * **Query SQL** buttons in the Query details panel on the Answer page. * * **Query visualizer** - Displays the tables and filters used in the search query. * **Query SQL** - Displays the SQL statements used to retrieve data for the query. * * Note: This action ID only affects the visibility of the buttons within the * Query details panel. It does not control the visibility * of the query details icon on the Answer page. * @example * ```js * disabledActions: [Action.QueryDetailsButtons] * ``` */ QueryDetailsButtons = "queryDetailsButtons", /** * The **Delete** action for Answers in the full application * embedding mode. * @example * ```js * disabledActions: [Action.AnswerDelete] * ``` * @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw */ AnswerDelete = "onDeleteAnswer", /** * The chart switcher icon on Answer page and * visualizations in edit mode. * Allows switching to the table or chart mode * when editing a visualization. * @example * ```js * disabledActions: [Action.AnswerChartSwitcher] * ``` * @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw */ AnswerChartSwitcher = "answerChartSwitcher", /** * The Favorites icon (*) for Answers, * Liveboard, and data objects like Model, * Tables and Views. * Allows adding an object to the user's favorites list. * @example * ```js * disabledActions: [Action.AddToFavorites] * ``` * @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw */ AddToFavorites = "addToFavorites", /** * The edit icon on Liveboards (Classic experience). * @example * ```js * disabledActions: [Action.EditDetails] * ``` * @version SDK: 1.9.0 | ThoughtSpot: 8.1.0.cl, 8.4.1.sw */ EditDetails = "editDetails", /** * The *Create alert* action for KPI charts. * Allows users to schedule threshold-based alerts * for KPI charts. * @example * ```js * disabledActions: [Action.CreateMonitor] * ``` * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw */ CreateMonitor = "createMonitor", /** * @version SDK: 1.11.1 | ThoughtSpot: 8.3.0.cl, 8.4.1.sw * @deprecated This action is deprecated. It was used for reporting errors. * @example * ```js * disabledActions: [Action.ReportError] * ``` */ ReportError = "reportError", /** * The **Sync to sheets** action on Answers and Liveboard visualizations. * Allows sending data to a Google Sheet. * @example * ```js * disabledActions: [Action.SyncToSheets] * ``` * @version SDK: 1.18.0 | ThoughtSpot: 8.10.0.cl, 9.0.1.sw */ SyncToSheets = "sync-to-sheets", /** * The **Sync to other apps** action on Answers and Liveboard visualizations. * Allows sending data to third-party apps like Slack, Salesforce, * Microsoft Teams, and so on. * @example * ```js * disabledActions: [Action.SyncToOtherApps] * ``` * @version SDK: 1.18.0 | ThoughtSpot: 8.10.0.cl, 9.0.1.sw */ SyncToOtherApps = "sync-to-other-apps", /** * The **Manage pipelines** action on Answers and Liveboard visualizations. * Allows users to manage data sync pipelines to third-party apps. * @example * ```js * disabledActions: [Action.ManagePipelines] * ``` * @version SDK: 1.18.0 | ThoughtSpot: 8.10.0.cl, 9.0.1.sw */ ManagePipelines = "manage-pipeline", /** * The **Filter** action on Liveboard visualizations. * Allows users to apply cross-filters on a Liveboard. * @example * ```js * disabledActions: [Action.CrossFilter] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.8.0.sw */ CrossFilter = "context-menu-item-cross-filter", /** * The **Sync to Slack** action on Liveboard visualizations. * Allows sending data to third-party apps like Slack. * @example * ```js * disabledActions: [Action.SyncToSlack] * ``` * @version SDK: 1.32.0 | ThoughtSpot Cloud: 10.1.0.cl */ SyncToSlack = "syncToSlack", /** * The **Sync to Teams** action on Liveboard visualizations. * Allows sending data to third-party apps like Microsoft Teams. * @example * ```js * disabledActions: [Action.SyncToTeams] * ``` * @version SDK: 1.32.0 | ThoughtSpot Cloud: 10.1.0.cl */ SyncToTeams = "syncToTeams", /** * The **Remove** action that appears when cross filters are applied * on a Liveboard. * Removes filters applied to a visualization. * @example * ```js * disabledActions: [Action.RemoveCrossFilter] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ RemoveCrossFilter = "context-menu-item-remove-cross-filter", /** * The **Aggregate** option in the chart axis or the * table column customization menu. * Provides aggregation options to analyze the data on a chart or table. * @example * ```js * disabledActions: [Action.AxisMenuAggregate] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ AxisMenuAggregate = "axisMenuAggregate", /** * The **Time bucket** option in the chart axis or table column * customization menu. * Allows defining time metric for date comparison. * @example * ```js * disabledActions: [Action.AxisMenuTimeBucket] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ AxisMenuTimeBucket = "axisMenuTimeBucket", /** * The **Filter** action in the chart axis or table column * customization menu. * Allows adding, editing, or removing filters. * * @example * ```js * disabledActions: [Action.AxisMenuFilter] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ AxisMenuFilter = "axisMenuFilter", /** * The **Conditional formatting** action on chart or table. * Allows adding rules for conditional formatting of data * points on a chart or table. * @example * ```js * disabledActions: [Action.AxisMenuConditionalFormat] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ AxisMenuConditionalFormat = "axisMenuConditionalFormat", /** * The **Sort** menu action on a table or chart axis * Sorts data in ascending or descending order. * Allows adding, editing, or removing filters. * @example * ```js * disabledActions: [Action.AxisMenuConditionalFormat] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ AxisMenuSort = "axisMenuSort", /** * The **Group** option in the chart axis or table column * customization menu. * Allows grouping data points if the axes use the same * unit of measurement and a similar scale. * @example * ```js * disabledActions: [Action.AxisMenuGroup] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ AxisMenuGroup = "axisMenuGroup", /** * The **Position** option in the axis customization menu. * Allows changing the position of the axis to the * left or right side of the chart. * @example * ```js * disabledActions: [Action.AxisMenuPosition] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ AxisMenuPosition = "axisMenuPosition", /** * The **Rename** option in the chart axis or table column customization menu. * Renames the axis label on a chart or the column header on a table. * @example * ```js * disabledActions: [Action.AxisMenuRename] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ AxisMenuRename = "axisMenuRename", /** * The **Edit** action in the axis customization menu. * Allows editing the axis name, position, minimum and maximum values, * and format of a column. * @example * ```js * disabledActions: [Action.AxisMenuEdit] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ AxisMenuEdit = "axisMenuEdit", /** * The **Number format** action to customize the format of * the data labels on a chart or table. * @example * ```js * disabledActions: [Action.AxisMenuNumberFormat] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ AxisMenuNumberFormat = "axisMenuNumberFormat", /** * The **Text wrapping** action on a table. * Wraps or clips column text on a table. * @example * ```js * disabledActions: [Action.AxisMenuTextWrapping] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ AxisMenuTextWrapping = "axisMenuTextWrapping", /** * The **Remove** action in the chart axis or table column * customization menu. * Removes the data labels from a chart or the column of a * table visualization. * @example * ```js * disabledActions: [Action.AxisMenuRemove] * ``` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.1.sw */ AxisMenuRemove = "axisMenuRemove", /** * The **Compare with** action in the chart axis customization menu. * Allows comparing data across dimensions or measures. * @example * ```js * disabledActions: [Action.AxisMenuCompare] * ``` * @version SDK: 1.50.0 | ThoughtSpot: 26.7.0.cl */ AxisMenuCompare = "axisMenuCompare", /** * The **Merge with** action in the chart axis customization menu. * Allows merging data across dimensions or measures. * @example * ```js * disabledActions: [Action.AxisMenuMerge] * ``` * @version SDK: 1.50.0 | ThoughtSpot: 26.7.0.cl */ AxisMenuMerge = "axisMenuMerge", /** * @hidden */ InsertInToSlide = "insertInToSlide", /** * The **Rename** menu action on Liveboards and visualizations. * Allows renaming a Liveboard or visualization. * @example * ```js * disabledActions: [Action.RenameModalTitleDescription] * ``` * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl, 9.8.0.sw */ RenameModalTitleDescription = "renameModalTitleDescription", /** * The *Request verification* action on a Liveboard. * Initiates a request for Liveboard verification. * @example * ```js * disabledActions: [Action.RequestVerification] * ``` * @version SDK: 1.25.0 | ThoughtSpot: 9.6.0.cl, 10.1.0.sw */ RequestVerification = "requestVerification", /** * * Allows users to mark a Liveboard as verified. * @example * ```js * disabledActions: [Action.MarkAsVerified] * ``` * @version SDK: 1.25.0 | ThoughtSpot: 9.6.0.cl, 10.1.0.sw */ MarkAsVerified = "markAsVerified", /** * The **Add Tab** action on a Liveboard. * Allows adding a new tab to a Liveboard view. * @example * ```js * disabledActions: [Action.AddTab] * ``` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 9.8.0.sw */ AddTab = "addTab", /** * * Initiates contextual change analysis on KPI charts. * @example * ```js * disabledActions: [Action.EnableContextualChangeAnalysis] * ``` * @version SDK: 1.25.0 | ThoughtSpot Cloud: 9.6.0.cl */ EnableContextualChangeAnalysis = "enableContextualChangeAnalysis", /** * Action ID to hide or disable Iterative Change Analysis option * in the contextual change analysis Insight charts context menu. * * @example * ```js * disabledActions: [Action.EnableIterativeChangeAnalysis] * ``` * @version SDK: 1.41.0 | ThoughtSpot Cloud: 9.12.0.cl */ EnableIterativeChangeAnalysis = "enableIterativeChangeAnalysis", /** * Action ID to hide or disable Natural Language Search query. * * @example * ```js * disabledActions: [Action.ShowSageQuery] * ``` * @version SDK: 1.26.0 | ThoughtSpot Cloud: 9.7.0.cl */ ShowSageQuery = "showSageQuery", /** * * Action ID to hide or disable the edit option for the * results generated from the * Natural Language Search query. * * @example * ```js * disabledActions: [Action.EditSageAnswer] * ``` * @version SDK: 1.26.0 | ThoughtSpot Cloud: 9.7.0.cl */ EditSageAnswer = "editSageAnswer", /** * The feedback widget for AI-generated Answers. * Allows users to send feedback on the Answers generated * from a Natural Language Search query. * * @example * ```js * disabledActions: [Action.SageAnswerFeedback] * ``` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl */ SageAnswerFeedback = "sageAnswerFeedback", /** * * @example * ```js * disabledActions: [Action.ModifySageAnswer] * ``` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl */ ModifySageAnswer = "modifySageAnswer", /** * The **Move to Tab** menu action on visualizations in Liveboard edit mode. * Allows moving a visualization to a different tab. * @example * ```js * disabledActions: [Action.MoveToTab] * ``` */ MoveToTab = "onContainerMove", /** * The **Manage Alerts** menu action on KPI visualizations. * Allows creating, viewing, and editing monitor * alerts for a KPI chart. * * @example * ```js * disabledActions: [Action.ManageMonitor] * ``` */ ManageMonitor = "manageMonitor", /** * The Liveboard Personalised Views dropdown. * Allows navigating to a personalized Liveboard View. * This action is deprecated. Use {@link Action.PersonalizedViewsDropdown} instead. * @example * ```js * disabledActions: [Action.PersonalisedViewsDropdown] * ``` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 10.1.0.sw * @deprecated SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ PersonalisedViewsDropdown = "personalisedViewsDropdown", /** * The Liveboard Personalized Views dropdown. * Allows navigating to a personalized Liveboard View. * @example * ```js * disabledActions: [Action.PersonalizedViewsDropdown] * ``` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ PersonalizedViewsDropdown = "personalisedViewsDropdown", /** * Action ID for show or hide the user details on a * Liveboard (Recently visited / social proof) * @example * ```js * disabledActions: [Action.LiveboardUsers] * ``` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 10.1.0.sw */ LiveboardUsers = "liveboardUsers", /** * Action ID for the Parent TML action * The parent action **TML** must be included to access TML-related options * within the cascading menu (specific to the Answer page) * @example * ```js * // to include specific TML actions * visibleActions: [Action.TML, Action.ExportTML, Action.EditTML] * * ``` * @example * ```js * hiddenAction: [Action.TML] // hide all TML actions * disabledActions: [Action.TML] // to disable all TML actions * ``` * @version SDK: 1.28.3 | ThoughtSpot: 9.12.0.cl, 10.1.0.sw */ TML = "tml", /** * The **Create Liveboard* action on * the Liveboards page and the Pin modal. * Allows users to create a Liveboard. * * @example * ```js * hiddenAction: [Action.CreateLiveboard] * disabledActions: [Action.CreateLiveboard] * ``` * @version SDK: 1.32.0 | ThoughtSpot: 10.1.0.cl, 10.1.0.sw */ CreateLiveboard = "createLiveboard", /** * Action ID for to hide or disable the * Verified Liveboard banner. * @example * ```js * hiddenAction: [Action.VerifiedLiveboard] * ``` * @version SDK: 1.29.0 | ThoughtSpot: 9.10.0.cl, 10.1.0.sw */ VerifiedLiveboard = "verifiedLiveboard", /** * Action ID for the *Ask Sage* In Natural Language Search embed, * *Spotter* in Liveboard, full app, and Spotter embed. * * Allows initiating a conversation with ThoughtSpot AI analyst. * * @example * ```js * hiddenAction: [Action.AskAi] * ``` * @version SDK: 1.29.0 | ThoughtSpot Cloud: 9.12.0.cl */ AskAi = "AskAi", /** * The **Add KPI to Watchlist** action on Home page watchlist. * Adds a KPI chart to the watchlist on the Home page. * @example * ```js * disabledActions: [Action.AddToWatchlist] * ``` * @version SDK: 1.27.9 | ThoughtSpot Cloud: 9.12.5.cl */ AddToWatchlist = "addToWatchlist", /** * The **Remove from watchlist** menu action on KPI watchlist. * Removes a KPI chart from the watchlist on the Home page. * @example * ```js * disabledActions: [Action.RemoveFromWatchlist] * ``` * @version SDK: 1.27.9 | ThoughtSpot: 9.12.5.cl */ RemoveFromWatchlist = "removeFromWatchlist", /** * The **Organize Favourites** action on Homepage * *Favorites* module. * This action is deprecated. Use {@link Action.OrganizeFavorites} instead. * * @example * ```js * disabledActions: [Action.OrganiseFavourites] * ``` * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl * @deprecated SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ OrganiseFavourites = "organiseFavourites", /** * The **Organize Favorites** action on Homepage * *Favorites* module. * * @example * ```js * disabledActions: [Action.OrganizeFavorites] * ``` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ OrganizeFavorites = "organiseFavourites", /** * The **AI Highlights** action on a Liveboard. * * @example * ```js * hiddenAction: [Action.AIHighlights] * ``` * @version SDK: 1.27.10 | ThoughtSpot Cloud: 9.12.5.cl */ AIHighlights = "AIHighlights", /** * The *Edit* action on the *Liveboard Schedules* page * (new Homepage experience). * Allows editing Liveboard schedules. * * @example * ```js * disabledActions: [Action.EditScheduleHomepage] * ``` * @version SDK: 1.34.0 | ThoughtSpot Cloud: 10.3.0.cl */ EditScheduleHomepage = "editScheduleHomepage", /** * The *Pause* action on the *Liveboard Schedules* page * Pauses a scheduled Liveboard job. * @example * ```js * disabledActions: [Action.PauseScheduleHomepage] * ``` * @version SDK: 1.34.0 | ThoughtSpot Cloud: 10.3.0.cl */ PauseScheduleHomepage = "pauseScheduleHomepage", /** * The **View run history** action **Liveboard Schedules** page. * Allows viewing schedule run history. * @example * ```js * disabledActions: [Action.ViewScheduleRunHomepage] * ``` * @version SDK: 1.34.0 | ThoughtSpot: 10.3.0.cl */ ViewScheduleRunHomepage = "viewScheduleRunHomepage", /** * Action ID to hide or disable the * unsubscribe option for Liveboard schedules. * @example * ```js * disabledActions: [Action.UnsubscribeScheduleHomepage] * ``` * @version SDK: 1.34.0 | ThoughtSpot: 10.3.0.cl */ UnsubscribeScheduleHomepage = "unsubscribeScheduleHomepage", /** * The **Manage Tags** action on Homepage Favourite Module. * @example * ```js * disabledActions: [Action.ManageTags] * ``` * @version SDK: 1.34.0 | ThoughtSpot Cloud: 10.3.0.cl */ ManageTags = "manageTags", /** * The **Delete** action on the **Liveboard Schedules* page. * Deletes a Liveboard schedule. * @example * ```js * disabledActions: [Action.DeleteScheduleHomepage] * ``` * @version SDK: 1.34.0 | ThoughtSpot: 10.3.0.cl */ DeleteScheduleHomepage = "deleteScheduleHomepage", /** * The **Analyze CTA** action on KPI chart. * @example * ```js * disabledActions: [Action.KPIAnalysisCTA] * ``` * @version SDK: 1.34.0 | ThoughtSpot Cloud: 10.3.0.cl */ KPIAnalysisCTA = "kpiAnalysisCTA", /** * Action ID for disabling chip reorder in Answer and Liveboard * @example * ```js * const disabledActions = [Action.DisableChipReorder] * ``` * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl */ DisableChipReorder = "disableChipReorder", /** * Action ID to show, hide, or disable filters * in a Liveboard tab. * * @example * ```js * hiddenAction: [Action.ChangeFilterVisibilityInTab] * ``` * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl */ ChangeFilterVisibilityInTab = "changeFilterVisibilityInTab", /** * The **Data model instructions** button on the Spotter interface. * Allows opening the data model instructions modal. * * @example * ```js * hiddenAction: [Action.DataModelInstructions] * ``` * @version SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl */ DataModelInstructions = "DataModelInstructions", /** * The **Preview data** button on the Spotter interface. * Allows previewing the data used for Spotter queries. * * @example * ```js * hiddenAction: [Action.PreviewDataSpotter] * ``` * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl */ PreviewDataSpotter = "previewDataSpotter", /** * The **Reset** link on the Spotter interface. * Resets the conversation with Spotter. * * @example * ```js * hiddenAction: [Action.ResetSpotterChat] * ``` * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl */ ResetSpotterChat = "resetSpotterChat", /** * Action ID for hide or disable the * Spotter feedback widget. * * @example * ```js * hiddenAction: [Action.SpotterFeedback] * ``` * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl */ SpotterFeedback = "spotterFeedback", /** * Action ID for hide or disable * the previous prompt edit option in Spotter. * * @example * ```js * hiddenAction: [Action.EditPreviousPrompt] * ``` * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl */ EditPreviousPrompt = "editPreviousPrompt", /** * Action ID for hide or disable * the previous prompt deletion option in Spotter. * * @example * ```js * hiddenAction: [Action.DeletePreviousPrompt] * ``` * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl */ DeletePreviousPrompt = "deletePreviousPrompt", /** * Action ID for hide or disable editing tokens generated from * Spotter results. * @example * ```js * hiddenAction: [Action.EditTokens] * ``` * @version SDK: 1.36.0 | ThoughtSpot Cloud: 10.6.0.cl */ EditTokens = "editTokens", /** * Action ID for hiding rename option for Column rename * @example * ```js * hiddenAction: [Action.ColumnRename] * ``` * @version SDK: 1.37.0 | ThoughtSpot Cloud: 10.8.0.cl */ ColumnRename = "columnRename", /** * Action ID for hide checkboxes for include or exclude * cover and filter pages in the Liveboard PDF * @example * ```js * hiddenAction: [Action.CoverAndFilterOptionInPDF] * ``` * @version SDK: 1.37.0 | ThoughtSpot Cloud: 10.8.0.cl */ CoverAndFilterOptionInPDF = "coverAndFilterOptionInPDF", /** * Action ID to hide or disable the Coaching workflow in Spotter conversations. * When disabled, users cannot access **Add to Coaching** workflow in conversation. * The **Add to Coaching** feature allows adding reference questions and * business terms to improve Spotter’s responses. This feature is generally available * (GA) from version 26.2.0.cl and enabled by default on embed deployments. * @example * ```js * hiddenAction: [Action.InConversationTraining] * disabledActions: [Action.InConversationTraining] * * ``` * @version SDK: 1.39.0 | ThoughtSpot Cloud: 10.10.0.cl */ InConversationTraining = "InConversationTraining", /** * Action ID to hide the warnings banner in * Spotter results. It's an EA feature and * handled by LD. * @example * ```js * hiddenAction: [Action.SpotterWarningsBanner] * ``` * @version SDK: 1.41.0 | ThoughtSpot Cloud: 10.13.0.cl */ SpotterWarningsBanner = "SpotterWarningsBanner", /** * Action ID to hide the warnings border on the knowledge * card in Spotter results. It's an EA feature and * handled by LD. * @example * ```js * hiddenAction: [Action.SpotterWarningsOnTokens] * ``` * @version SDK: 1.41.0 | ThoughtSpot Cloud: 10.13.0.cl */ SpotterWarningsOnTokens = "SpotterWarningsOnTokens", /** * Action ID to disable the click event handler on knowledge * card in Spotter results. It's an EA feature and * handled by LD. * @example * ```js * hiddenAction: [Action.SpotterTokenQuickEdit] * ``` * @version SDK: 1.41.0 | ThoughtSpot Cloud: 10.13.0.cl */ SpotterTokenQuickEdit = "SpotterTokenQuickEdit", /** * The **PNG screenshot in email** option in the schedule email dialog. * Includes a PNG screenshot in the notification email body. * @example * ```js * disabledActions: [Action.PngScreenshotInEmail] * ``` * ``` * @version SDK: 1.42.0 | ThoughtSpot Cloud: 10.14.0.cl */ PngScreenshotInEmail = "pngScreenshotInEmail", /** * The **Remove attachment** action in the schedule email dialog. * Removes an attachment from the email configuration. * @example * ```js * disabledActions: [Action.RemoveAttachment] * ``` * ``` * ``` * @version SDK: 1.42.0 | ThoughtSpot Cloud: 10.14.0.cl */ RemoveAttachment = "removeAttachment", /** * The **Style panel** on a Liveboard. * Controls the visibility of the Liveboard style panel. * @example * ```js * hiddenActions: [Action.LiveboardStylePanel] * ``` * @version SDK: 1.43.0 | ThoughtSpot Cloud: 10.15.0.cl */ LiveboardStylePanel = "liveboardStylePanel", /** * The **Publish** action for Liveboards, Answers and Models. * Opens the publishing modal. It's a parent action for the * **Manage Publishing** and **Unpublish** actions if the object * is already published, otherwise appears standalone. * @example * ```js * hiddenActions: [Action.Publish] * disabledActions: [Action.Publish] * ``` * @version SDK: 1.45.0 | ThoughtSpot Cloud: 26.2.0.cl */ Publish = "publish", /** * The **Manage Publishing** action for Liveboards, Answers and Models. * Opens the same publishing modal as the **Publish** action. * Appears as a child action to the **Publish** action if the * object is already published. * @example * ```js * hiddenActions: [Action.ManagePublishing] * disabledActions: [Action.ManagePublishing] * ``` * @version SDK: 1.45.0 | ThoughtSpot Cloud: 26.2.0.cl */ ManagePublishing = "managePublishing", /** * The **Unpublish** action for Liveboards, Answers and Models. * Opens the unpublishing modal. Appears as a child action to * the **Publish** action if the object is already published. * @example * ```js * hiddenActions: [Action.Unpublish] * disabledActions: [Action.Unpublish] * ``` * @version SDK: 1.45.0 | ThoughtSpot Cloud: 26.2.0.cl */ Unpublish = "unpublish", /** * The **Parameterize** action for Tables and Connections. * Opens the parameterization modal. * @example * ```js * hiddenActions: [Action.Parameterize] * disabledActions: [Action.Parameterize] * ``` * @version SDK: 1.45.0 | ThoughtSpot Cloud: 26.2.0.cl */ Parameterize = "parameterise", /** * The **Move to Group** menu action on a Liveboard. * Allows moving a visualization to a different group. * @example * ```js * disabledActions: [Action.MoveToGroup] * ``` * @version SDK: 1.44.0 | ThoughtSpot Cloud: 26.2.0.cl */ MoveToGroup = "moveToGroup", /** * The **Move out of Group** menu action on a Liveboard. * Allows moving a visualization out of a group. * @example * ```js * disabledActions: [Action.MoveOutOfGroup] * ``` * @version SDK: 1.44.0 | ThoughtSpot Cloud: 26.2.0.cl */ MoveOutOfGroup = "moveOutOfGroup", /** * The **Create Group** menu action on a Liveboard. * Allows creating a new group. * @example * ```js * disabledActions: [Action.CreateGroup] * ``` * @version SDK: 1.44.0 | ThoughtSpot Cloud: 26.2.0.cl */ CreateGroup = "createGroup", /** * The **Ungroup Liveboard Group** menu action on a Liveboard. * Allows ungrouping a liveboard group. * @example * ```js * disabledActions: [Action.UngroupLiveboardGroup] * ``` * @version SDK: 1.44.0 | ThoughtSpot Cloud: 26.2.0.cl */ UngroupLiveboardGroup = "ungroupLiveboardGroup", /** * Controls visibility of the sidebar header (title and toggle button) * in the Spotter past conversations sidebar. * @example * ```js * hiddenActions: [Action.SpotterSidebarHeader] * ``` * @version SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl */ SpotterSidebarHeader = "spotterSidebarHeader", /** * Controls visibility of the sidebar footer (documentation link) * in the Spotter past conversations sidebar. * @example * ```js * hiddenActions: [Action.SpotterSidebarFooter] * ``` * @version SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl */ SpotterSidebarFooter = "spotterSidebarFooter", /** * Controls visibility and disable state of the sidebar toggle/expand button * in the Spotter past conversations sidebar. * @example * ```js * disabledActions: [Action.SpotterSidebarToggle] * ``` * @version SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl */ SpotterSidebarToggle = "spotterSidebarToggle", /** * Controls visibility and disable state of the "New Chat" button * in the Spotter past conversations sidebar. * @example * ```js * disabledActions: [Action.SpotterNewChat] * ``` * @version SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl */ SpotterNewChat = "spotterNewChat", /** * Controls visibility of the past conversation banner alert * in the Spotter interface. * @example * ```js * hiddenActions: [Action.SpotterPastChatBanner] * ``` * @version SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl */ SpotterPastChatBanner = "spotterPastChatBanner", /** * Controls visibility and disable state of the conversation edit menu * (three-dot menu) in the Spotter past conversations sidebar. * @example * ```js * disabledActions: [Action.SpotterChatMenu] * ``` * @version SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl */ SpotterChatMenu = "spotterChatMenu", /** * Controls visibility and disable state of the rename action * in the Spotter conversation edit menu. * @example * ```js * disabledActions: [Action.SpotterChatRename] * ``` * @version SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl */ SpotterChatRename = "spotterChatRename", /** * Controls visibility and disable state of the delete action * in the Spotter conversation edit menu. * @example * ```js * disabledActions: [Action.SpotterChatDelete] * ``` * @version SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl */ SpotterChatDelete = "spotterChatDelete", /** * Controls visibility and disable state of the documentation/best practices * link in the Spotter sidebar footer. * @example * ```js * disabledActions: [Action.SpotterDocs] * ``` * @version SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl */ SpotterDocs = "spotterDocs", /** * Controls visibility and disable state of the connector resources * section in the Spotter chat interface. * @example * ```js * hiddenActions: [Action.SpotterChatConnectorResources] * disabledActions: [Action.SpotterChatConnectorResources] * ``` * @version SDK: 1.48.0 | ThoughtSpot Cloud: 26.5.0.cl */ SpotterChatConnectorResources = "spotterChatConnectorResources", /** * Controls visibility and disable state of the connectors * in the Spotter chat interface. * @example * ```js * hiddenActions: [Action.SpotterChatConnectors] * disabledActions: [Action.SpotterChatConnectors] * ``` * @version SDK: 1.48.0 | ThoughtSpot Cloud: 26.5.0.cl */ SpotterChatConnectors = "spotterChatConnectors", /** * Controls visibility and disable state of the mode switcher * in the Spotter chat interface. * @example * ```js * hiddenActions: [Action.SpotterChatModeSwitcher] * disabledActions: [Action.SpotterChatModeSwitcher] * ``` * @version SDK: 1.48.0 | ThoughtSpot Cloud: 26.5.0.cl */ SpotterChatModeSwitcher = "spotterChatModeSwitcher", /** * The **Include current period** checkbox for date filters. * Controls the visibility and availability of the option to include * the current time period in filter results. * @example * ```js * hiddenActions: [Action.IncludeCurrentPeriod] * disabledActions: [Action.IncludeCurrentPeriod] * ``` * @version SDK: 1.45.0 | ThoughtSpot: 26.4.0.cl */ IncludeCurrentPeriod = "includeCurrentPeriod", /** * The **Send Test Email** button in the Liveboard schedule modal. * Allows sending a test schedule email to self or all recipients. * Requires `isSendNowLiveboardSchedulingEnabled` to be enabled. * @example * ```js * disabledActions: [Action.SendTestScheduleEmail] * hiddenActions: [Action.SendTestScheduleEmail] * ``` * @version SDK: 1.48.0 | ThoughtSpot Cloud: 26.5.0.cl */ SendTestScheduleEmail = "sendTestScheduleEmail" } export enum PrefetchFeatures { FullApp = "FullApp", SearchEmbed = "SearchEmbed", LiveboardEmbed = "LiveboardEmbed", VizEmbed = "VizEmbed" } /** * Enum for options to change context trigger. * The `BOTH_CLICKS` option is available from 10.8.0.cl. */ export enum ContextMenuTriggerOptions { LEFT_CLICK = "left-click", RIGHT_CLICK = "right-click", BOTH_CLICKS = "both-clicks" } export interface ColumnValue { column: { id: string; name: string; dataType: string; [key: string]: any; }; value: string | number | boolean | { v: { s: number; e: number; }; }; } export interface VizPoint { selectedAttributes: ColumnValue[]; selectedMeasures: ColumnValue[]; } /** * @group Events */ export interface CustomActionPayload { contextMenuPoints?: { clickedPoint: VizPoint; selectedPoints: VizPoint[]; }; embedAnswerData: { name: string; id: string; sources: { header: { guid: string; }; }; columns: any[]; data: any[]; [key: string]: any; }; session: SessionInterface; vizId?: string; } export interface CustomAction { name: string; id: string; position: CustomActionsPosition; target: CustomActionTarget; metadataIds?: { answerIds?: string[]; liveboardIds?: string[]; vizIds?: string[]; }; dataModelIds?: { modelIds?: string[]; modelColumnNames?: string[]; }; orgIds?: string[]; groupIds?: string[]; } /** * Enum options to show custom actions at different * positions in the application. */ export enum CustomActionsPosition { /** * Shows the action as a primary button * in the toolbar area of the embed. */ PRIMARY = "PRIMARY", /** * Shows the action inside the "More" menu * (three-dot overflow menu). */ MENU = "MENU", /** * Shows the action in the right-click * context menu. Only supported for * {@link CustomActionTarget.VIZ}, * {@link CustomActionTarget.ANSWER}, and * {@link CustomActionTarget.SPOTTER} targets. */ CONTEXTMENU = "CONTEXTMENU" } /** * Enum options to mention the target of the code-based custom action. * The target determines which type of ThoughtSpot object the action is * associated with, and also controls which positions and scoping options * are available. */ export enum CustomActionTarget { /** * Action applies at the Liveboard level. * Supported positions: * {@link CustomActionsPosition.PRIMARY}, * {@link CustomActionsPosition.MENU}. * Can be scoped with * `metadataIds.liveboardIds`, * `orgIds`, and `groupIds`. */ LIVEBOARD = "LIVEBOARD", /** * Action applies to individual * visualizations (charts/tables). * Supported positions: * {@link CustomActionsPosition.PRIMARY}, * {@link CustomActionsPosition.MENU}, * {@link CustomActionsPosition.CONTEXTMENU}. * Can be scoped with `metadataIds` * (answerIds, liveboardIds, vizIds), * `dataModelIds` (modelIds, * modelColumnNames), `orgIds`, * and `groupIds`. */ VIZ = "VIZ", /** * Action applies to saved or unsaved * Answers. Supported positions: * {@link CustomActionsPosition.PRIMARY}, * {@link CustomActionsPosition.MENU}, * {@link CustomActionsPosition.CONTEXTMENU}. * Can be scoped with * `metadataIds.answerIds`, * `dataModelIds` (modelIds, * modelColumnNames), `orgIds`, * and `groupIds`. */ ANSWER = "ANSWER", /** * Action applies to Spotter * (AI-powered search). * Supported positions: * {@link CustomActionsPosition.MENU}, * {@link CustomActionsPosition.CONTEXTMENU}. * Can be scoped with * `dataModelIds.modelIds`, * `orgIds`, and `groupIds`. */ SPOTTER = "SPOTTER" } /** * Enum options to show or suppress Visual Embed SDK and * ThoughtSpot application logs in the console output. * This attribute doesn't support suppressing * browser warnings or errors. */ export enum LogLevel { /** * No application or SDK-related logs will be logged * in the console output. * @example * ```js * init({ * ... //other embed view config, * logLevel: LogLevel.SILENT, * }) * ``` * @version SDK: 1.26.7 | ThoughtSpot Cloud: 9.10.0.cl */ SILENT = "SILENT", /** * Log only errors in the console output. * @example * ```js * init({ * ... //other embed view config, * logLevel: LogLevel.ERROR, * }) * ``` * @version SDK: 1.26.7 | ThoughtSpot Cloud: 9.10.0.cl */ ERROR = "ERROR", /** * Log only warnings and errors in the console output. * @example * ```js * init({ * ... //other embed view config, * logLevel: LogLevel.WARN, * }) * ``` * @version SDK: 1.26.7 | ThoughtSpot Cloud: 9.10.0.cl */ WARN = "WARN", /** * Log only the information alerts, warnings, and errors * in the console output. * @example * ```js * init({ * ... //other embed view config, * logLevel: LogLevel.INFO, * }) * ``` * @version SDK: 1.26.7 | ThoughtSpot Cloud: 9.10.0.cl */ INFO = "INFO", /** * Log debug messages, warnings, information alerts, * and errors in the console output. * @example * ```js * init({ * ... //other embed view config, * logLevel: LogLevel.DEBUG, * }) * ``` * @version SDK: 1.26.7 | ThoughtSpot Cloud: 9.10.0.cl */ DEBUG = "DEBUG", /** * All logs will be logged in the browser console. * @example * ```js * init({ * ... //other embed view config, * logLevel: LogLevel.TRACE, * }) * ``` * @version SDK: 1.26.7 | ThoughtSpot Cloud: 9.10.0.cl */ TRACE = "TRACE" } /** * Error types emitted by embedded components. * * These enum values categorize different types of errors that can occur during * the lifecycle of an embedded ThoughtSpot component. * Use {@link EmbedErrorDetailsEvent} and {@link EmbedErrorCodes} to handle specific errors. * @version SDK: 1.44.2 | ThoughtSpot: 26.2.0.cl * @group Error Handling * * @example * Handle specific error types * ```js * embed.on(EmbedEvent.Error, (error) => { * switch (error.errorType) { * case ErrorDetailsTypes.API: * console.error('API error:', error.message); * break; * case ErrorDetailsTypes.VALIDATION_ERROR: * console.error('Validation error:', error.message); * break; * case ErrorDetailsTypes.NETWORK: * console.error('Network error:', error.message); * break; * default: * console.error('Unknown error:', error); * } * }); * ``` */ export enum ErrorDetailsTypes { /** API call failure */ API = "API", /** General validation error */ VALIDATION_ERROR = "VALIDATION_ERROR", /** Network connectivity or request error */ NETWORK = "NETWORK" } /** * Error codes for identifying specific issues in embedded ThoughtSpot components. Use * {@link EmbedErrorDetailsEvent} and {@link ErrorDetailsTypes} codes for precise error * handling and debugging. * * @version SDK: 1.44.2 | ThoughtSpot: 26.2.0.cl * @group Error Handling * @example * Handle specific error codes in the error event handler * ```js * embed.on(EmbedEvent.Error, (error) => { * switch (error.code) { * case EmbedErrorCodes.WORKSHEET_ID_NOT_FOUND: * console.error('Worksheet ID not found:', error.message); * break; * case EmbedErrorCodes.LIVEBOARD_ID_MISSING: * console.error('Liveboard ID is missing:', error.message); * break; * case EmbedErrorCodes.CONFLICTING_ACTIONS_CONFIG: * console.error('Conflicting actions configuration:', error.message); * break; * case EmbedErrorCodes.CONFLICTING_TABS_CONFIG: * console.error('Conflicting tabs configuration:', error.message); * break; * default: * console.error('Unknown error:', error); * } * }); * ``` * */ export enum EmbedErrorCodes { /** Worksheet ID not found or does not exist */ WORKSHEET_ID_NOT_FOUND = "WORKSHEET_ID_NOT_FOUND", /** Required Liveboard ID is missing from configuration */ LIVEBOARD_ID_MISSING = "LIVEBOARD_ID_MISSING", /** Conflicting action configuration detected */ CONFLICTING_ACTIONS_CONFIG = "CONFLICTING_ACTIONS_CONFIG", /** Conflicting tab configuration detected */ CONFLICTING_TABS_CONFIG = "CONFLICTING_TABS_CONFIG", /** Error during component initialization */ INIT_ERROR = "INIT_ERROR", /** Network connectivity or request error */ NETWORK_ERROR = "NETWORK_ERROR", /** Custom action validation failed */ CUSTOM_ACTION_VALIDATION = "CUSTOM_ACTION_VALIDATION", /** Authentication/login failed */ LOGIN_FAILED = "LOGIN_FAILED", /** Render method was not called before attempting to use the component */ RENDER_NOT_CALLED = "RENDER_NOT_CALLED", /** Host event type is undefined or invalid */ HOST_EVENT_TYPE_UNDEFINED = "HOST_EVENT_TYPE_UNDEFINED", /** Error parsing api intercept body */ PARSING_API_INTERCEPT_BODY_ERROR = "PARSING_API_INTERCEPT_BODY_ERROR", /** Failed to update embed parameters during pre-render */ UPDATE_PARAMS_FAILED = "UPDATE_PARAMS_FAILED", /** Invalid URL provided in configuration */ INVALID_URL = "INVALID_URL", /** Host event payload validation failed */ HOST_EVENT_VALIDATION = "HOST_EVENT_VALIDATION", /** UpdateFilters payload is invalid - missing or malformed filter/filters */ UPDATEFILTERS_INVALID_PAYLOAD = "UPDATEFILTERS_INVALID_PAYLOAD", /** DrillDown payload is invalid - missing or malformed points */ DRILLDOWN_INVALID_PAYLOAD = "DRILLDOWN_INVALID_PAYLOAD" } /** * Error event object emitted when an error occurs in an embedded component. * * This interface defines the structure of error objects returned by the {@link * EmbedEvent.Error} event. It provides detailed information about what went wrong, * including the error type, a human-readable message, and a machine-readable error code. * * ## Properties * * - **errorType**: One of the predefined {@link ErrorDetailsTypes} values * - **message**: Human-readable error description (string or array of strings for * multiple errors) * - **code**: Machine-readable error identifier {@link EmbedErrorCodes} * values * - **[key: string]**: Additional context-specific for backward compatibility * * ## Usage * * Listen to the {@link EmbedEvent.Error} event to receive instances of this object * and implement appropriate error handling logic based on the `errorType`. * * @version SDK: 1.44.2 | ThoughtSpot: 26.2.0.cl * @group Error Handling * * @example * Handle specific error types * * ```js * embed.on(EmbedEvent.Error, (error) => { * switch (error.code) { * case EmbedErrorCodes.WORKSHEET_ID_NOT_FOUND: * console.error('Worksheet ID not found:', error.message, error.code); * break; * default: * console.error('Unknown error:', error); * } * }); * ``` * @example * Handle multiple error messages * * ```js * embed.on(EmbedEvent.Error, (error) => { * const messages = Array.isArray(error.message) * ? error.message * : [error.message]; * messages.forEach(msg => console.error(msg)); * }); * ``` * */ export interface EmbedErrorDetailsEvent { /** The type of error that occurred */ errorType: ErrorDetailsTypes; /** Human-readable error message(s) describing what went wrong */ message: string | string[]; /** Machine-readable error code for programmatic error handling */ code: EmbedErrorCodes; /** Additional context-specific for backward compatibility */ [key: string]: any; } /** * Context types for specifying the page context when triggering host events. * Used as the third parameter in the `trigger` method to help ThoughtSpot * understand the current page context for better event handling. * * @example * ```js * import { HostEvent, ContextType } from '@thoughtspot/visual-embed-sdk'; * * // Trigger an event with specific context * embed.trigger(HostEvent.Pin, { vizId: "123", liveboardId: "456" }, ContextType.Search); * ``` * * @version SDK: 1.45.2 | ThoughtSpot: 26.3.0.cl * @group Events */ export enum ContextType { /** * Search answer context for search page or edit viz dialog on liveboard page. */ Search = "search-answer", /** * Liveboard context for liveboard page. */ Liveboard = "liveboard", /** * Answer context for explore modal/page on liveboard page. */ Answer = "answer", /** * Spotter context for spotter modal/page. */ Spotter = "spotter", /** * Other context for any other generic page. */ Other = "other" } export interface DefaultAppInitData { customisations: CustomisationsInterface; authToken: string; runtimeFilterParams: string | null; runtimeParameterParams: string | null; hiddenHomepageModules: HomepageModule[]; reorderedHomepageModules: string[]; hostConfig: Record; hiddenHomeLeftNavItems: string[]; customVariablesForThirdPartyTools: Record; hiddenListColumns: ListPageColumns[]; customActions: CustomAction[]; interceptTimeout: number | undefined; interceptUrls: (string | InterceptedApiType)[]; embedExpiryInAuthToken: boolean; shouldBypassPayloadValidation?: boolean; useHostEventsV2?: boolean; } /** * Enum for the type of API intercepted */ export enum InterceptedApiType { /** * The apis that are use to get the data for the embed */ AnswerData = "AnswerData", /** * This will intercept all the apis */ ALL = "ALL", /** * The apis that are use to get the data for the liveboard */ LiveboardData = "LiveboardData" } export type ApiInterceptFlags = { /** * Flag that allows using `EmbedEvent.OnBeforeGetVizDataIntercept`. * * Can be used for Search and App Embed from SDK 1.29.0 * * @version SDK: 1.43.0 | ThoughtSpot: 10.15.0.cl */ isOnBeforeGetVizDataInterceptEnabled?: boolean; /** * This allows to intercept the urls passed, once intercepted the api will only * run based on the response from the responder of ApiIntercept event. * * @example * ```js * const embed = new LiveboardEmbed('#embed', { * ...viewConfig, * enableApiIntercept: true, * interceptUrls: [InterceptedApiType.DATA], * }) * ``` * * @version SDK: 1.43.0 | ThoughtSpot: 10.15.0.cl */ interceptUrls?: (string | InterceptedApiType)[]; /** * The timeout for the intercept, default is 30000ms * the api will error out if the timeout is reached * * @example * ```js * const embed = new LiveboardEmbed('#embed', { * ...viewConfig, * enableApiIntercept: true, * interceptUrls: [InterceptedApiType.ALL], * interceptTimeout: 1000, * }) * ``` * * @version SDK: 1.43.0 | ThoughtSpot: 10.15.0.cl */ interceptTimeout?: number; }; /** * Object IDs for the embedded component. * @version SDK: 1.45.2 | ThoughtSpot: 26.3.0.cl */ export interface ObjectIds { /** * Liveboard ID. */ liveboardId?: string; /** * Answer ID. */ answerId?: string; /** * Viz IDs. */ vizIds?: string[]; /** * Data model IDs. */ dataModelIds?: string[]; /** * Modal title. */ modalTitle?: string; } export interface ContextObject { /** * Stack of context objects. */ stack: Array<{ /** * Name of the context object. */ name: string; /** * Type of the context object. */ type: ContextType; /** * Object IDs of the context object. */ objectIds: ObjectIds; }>; /** * Current context object. */ currentContext: { /** * Name of the current context object. */ name: string; type: ContextType; objectIds: ObjectIds; }; } export interface FontProperties { color?: string; bold?: boolean; italic?: boolean; strikeThrough?: boolean; underline?: boolean; } export interface SolidBackgroundAttrs { color?: string; } export interface GradientBackgroundAttrs { backgroundFormatMidpoint?: number; colors?: string[]; backgroundFormatRange?: number[]; isAutoScaled?: boolean; } /** * Data label filter operators * @group Visual Overrides */ export enum DataLabelFilterOperator { /** Greater than */ GreaterThan = "GREATER_THAN", /** Less than */ LessThan = "LESS_THAN", /** Greater than or equal to */ GreaterThanOrEqualTo = "GREATER_THAN_OR_EQUAL_TO", /** Less than or equal to */ LessThanOrEqualTo = "LESS_THAN_OR_EQUAL_TO", /** Equal to */ EqualTo = "EQUAL_TO", /** Not equal to */ NotEqualTo = "NOT_EQUAL_TO" } /** * Conditional formatting operators * @group Visual Overrides */ export enum ConditionalFormattingOperator { /** Is equal to */ Is = "IS", /** Is not equal to */ IsNot = "IS_NOT", /** Contains */ Contains = "CONTAINS", /** Does not contain */ DoesNotContain = "DOES_NOT_CONTAIN", /** Starts with */ StartsWith = "STARTS_WITH", /** Ends with */ EndsWith = "ENDS_WITH", /** Greater than */ GreaterThan = "GREATER_THAN", /** Less than */ LessThan = "LESS_THAN", /** Greater than or equal to */ GreaterThanEqualTo = "GREATER_THAN_EQUAL_TO", /** Less than or equal to */ LessThanEqualTo = "LESS_THAN_EQUAL_TO", /** Equal to */ EqualTo = "EQUAL_TO", /** Not equal to */ NotEqualTo = "NOT_EQUAL_TO", /** Is between */ IsBetween = "IS_BETWEEN", /** Is null */ IsNull = "IS_NULL", /** Is not null */ IsNotNull = "IS_NOT_NULL" } /** * Background format types for conditional formatting * @group Visual Overrides */ export enum BackgroundFormatType { /** Solid color background */ Solid = "SOLID", /** Gradient background */ Gradient = "GRADIENT" } /** * Comparison types for conditional formatting * @group Visual Overrides */ export enum ConditionalFormattingComparisonType { /** Value-based comparison */ ValueBased = "VALUE_BASED", /** Column-based comparison */ ColumnBased = "COLUMN_BASED", /** Parameter-based comparison */ ParameterBased = "PARAMETER_BASED" } /** * A single conditional formatting rule row * @group Visual Overrides */ export interface ConditionalFormattingRow { /** Comparison operator */ operator: ConditionalFormattingOperator | string; /** Value to compare against */ value?: string; /** Range values for range-based comparisons */ rangeValues?: { min: number; max: number; }; /** Plot the formatting as a band/area */ plotAsBand?: boolean; /** Highlight this row if the condition is met */ isHighlightRow?: boolean; /** Type of comparison: value-based, column-based, or parameter-based */ comparisonType?: ConditionalFormattingComparisonType | string; /** Column ID to apply the formatting to (left-hand side) */ lhsColumnId?: string; /** Column name to compare against (right-hand side) */ columnToCompare?: string; /** Parameter ID to compare against */ comparisonParameterId?: string; /** Font properties to apply (color, bold, italic, etc.) */ fontProperties?: FontProperties; /** Background format type: solid color or gradient */ backgroundFormatType?: BackgroundFormatType | string; /** Solid background color attributes */ solidBackgroundAttrs?: SolidBackgroundAttrs; /** Gradient background attributes */ gradientBackgroundAttrs?: GradientBackgroundAttrs; } /** * Conditional formatting configuration * @group Visual Overrides */ export interface ConditionalFormatting { /** Array of conditional formatting rules */ rows?: ConditionalFormattingRow[]; } /** * Color palette for charts * @group Visual Overrides */ export interface ColorPalette { /** Array of color values (hex codes or color names) */ colors?: string[]; } /** * Legend position options * @group Visual Overrides */ export enum LegendPosition { /** Position legend at the top */ Top = "top", /** Position legend at the bottom */ Bottom = "bottom", /** Position legend on the left */ Left = "left", /** Position legend on the right */ Right = "right" } /** * Table theme options * @group Visual Overrides */ export enum TableTheme { /** Outline theme */ Outline = "OUTLINE", /** Row theme */ Row = "ROW", /** Zebra theme */ Zebra = "ZEBRA" } /** * Table content density options * @group Visual Overrides */ export enum TableContentDensity { /** Regular density */ Regular = "REGULAR", /** Compact density */ Compact = "COMPACT" } /** * Chart legend configuration * @group Visual Overrides */ export interface ChartLegend { /** Show or hide the legend */ show?: boolean; /** Position of the legend */ position?: LegendPosition | string; /** Color palette to use for legend colors */ colorPalette?: ColorPalette; } /** * Filter for data labels * @group Visual Overrides */ export interface DataLabelFilter { /** Filter threshold value */ value?: number; /** Filter operator */ operator?: DataLabelFilterOperator | string; } /** * Data label configuration for a specific column * @group Visual Overrides */ export interface ColumnDataLabel { /** Column name to apply data label overrides to */ name: string; /** Show or hide data labels for this column */ visible?: boolean; /** Filter to apply to data labels */ filter?: DataLabelFilter | null; } /** * Chart data label configuration * @group Visual Overrides */ export interface ChartDataLabel { /** Show labels for all data points */ allLabels?: boolean; /** Show labels for stacked values */ stackLabels?: boolean; /** Per-column data label configurations */ columnDataLabel?: ColumnDataLabel[]; } /** * Chart summaries and totals configuration * @group Visual Overrides */ export interface ChartSummaries { /** Show row totals */ showRowTotals?: boolean; /** Show column totals */ showColumnTotals?: boolean; /** Show row grand totals */ showRowGrandTotals?: boolean; /** Show column grand totals */ showColumnGrandTotals?: boolean; } /** * Gridline configuration * @group Visual Overrides */ export interface GridLine { /** Show vertical gridlines */ x?: boolean; /** Show horizontal gridlines */ y?: boolean; } /** * Chart display configuration * @group Visual Overrides */ export interface ChartDisplay { /** Summary and totals configuration */ summaries?: ChartSummaries; /** Show regression line on chart */ regressionLine?: boolean; /** Gridline visibility configuration */ gridLine?: GridLine; } /** * Y-axis range configuration * @group Visual Overrides */ export interface YAxisRange { /** Minimum value for Y-axis */ min?: number; /** Maximum value for Y-axis */ max?: number; } /** * Chart axis configuration * @group Visual Overrides */ export interface ChartAxis { /** Column names to link to this axis */ linkedColumns?: string[]; /** Show the axis name */ showName?: boolean; /** Show the axis label values */ showLabelValue?: boolean; /** Y-axis range configuration */ yAxisRange?: YAxisRange; } /** * Chart column override configuration * @group Visual Overrides */ export interface ChartColumn { /** Column name to apply overrides to */ name: string; /** Color for the column (hex code) */ color?: string; /** Conditional formatting rules to apply to the column */ conditionalFormatting?: ConditionalFormatting; } /** * Chart visualization overrides * @group Visual Overrides */ export interface ChartOverrides { /** Legend configuration */ legend?: ChartLegend; /** Data label configuration */ dataLabel?: ChartDataLabel; /** Display properties (summaries, regression line, gridlines) */ display?: ChartDisplay; /** Per-axis configurations */ axis?: ChartAxis[]; /** Per-column configurations */ columns?: ChartColumn[]; /** Update mask paths for partial updates */ updateMaskPaths?: string[]; } /** * Table column override configuration * @group Visual Overrides */ export interface TableColumn { /** * Name of the column to apply overrides to */ name: string; /** * Enable or disable text wrapping for the column */ wrapText?: boolean; /** * Show or hide the column */ show?: boolean; /** * Conditional formatting rules to apply to the column */ conditionalFormatting?: ConditionalFormatting; } /** * Table display configuration * @group Visual Overrides */ export interface TableDisplay { /** Table theme */ tableTheme?: TableTheme | string; /** Table content density */ tableContentDensity?: TableContentDensity | string; } /** * Column summary visibility configuration * @group Visual Overrides */ export interface ColumnSummaryVisibility { /** Column ID to control summary visibility for */ columnId: string; /** Show or hide summary for this column */ visible: boolean; } /** * Display summary configuration * @group Visual Overrides */ export interface DisplaySummaryConfig { /** Show all column summaries by default */ showAllSummaries?: boolean; /** Per-column summary visibility overrides */ columnVisibility?: ColumnSummaryVisibility[]; } /** * Table visualization overrides * @group Visual Overrides */ export interface TableOverrides { /** Per-column configurations (properties, conditional formatting) */ columns?: TableColumn[]; /** Table display properties (theme, density) */ display?: TableDisplay; /** Summary/headline column visibility configuration */ displaySummaryConfig?: DisplaySummaryConfig; /** Update mask paths for partial updates */ updateMaskPaths?: string[]; } /** * Visualization overrides to customize chart and table rendering * within embedded ThoughtSpot components. * * @group Visual Overrides * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * visualOverrides: { * chart: { * legend: { show: true, position: 'bottom' }, * columns: [{ name: 'Revenue', color: '#1f77b4' }], * }, * table: { * display: { tableTheme: 'ZEBRA', tableContentDensity: 'COMPACT' }, * }, * }, * }); * ``` */ export interface VisualizationOverrides { /** Chart visualization overrides */ chart?: ChartOverrides; /** Table visualization overrides */ table?: TableOverrides; } export interface LiveboardTab { id: string; name: string; [key: string]: any; } export enum UIPassthroughEvent { PinAnswerToLiveboard = "addVizToPinboard", SaveAnswer = "saveAnswer", GetDiscoverabilityStatus = "getDiscoverabilityStatus", GetAvailableUIPassthroughs = "getAvailableUiPassthroughs", GetAnswerConfig = "getAnswerPageConfig", GetLiveboardConfig = "getPinboardPageConfig", GetUnsavedAnswerTML = "getUnsavedAnswerTML", UpdateFilters = "updateFilters", Drilldown = "drillDown", GetAnswerSession = "getAnswerSession", GetFilters = "getFilters", GetIframeUrl = "getIframeUrl", GetParameters = "getParameters", GetTML = "getTML", GetTabs = "getTabs", GetExportRequestForCurrentPinboard = "getExportRequestForCurrentPinboard" } export type UIPassthroughContractBase = { [UIPassthroughEvent.PinAnswerToLiveboard]: { request: { vizId?: string; newVizName: string; newVizDescription?: string; liveboardId?: string; tabId?: string; newLiveboardName?: string; newTabName?: string; }; response: { liveboardId: string; tabId: string; vizId: string; }; }; [UIPassthroughEvent.SaveAnswer]: { request: { name: string; description: string; vizId?: string; isDiscoverable?: boolean; }; response: { answerId: string; saveResponse?: any; shareResponse?: any; }; }; [UIPassthroughEvent.GetDiscoverabilityStatus]: { request: any; response: { shouldShowDiscoverability: boolean; isDiscoverabilityCheckboxUnselectedPerOrg: boolean; }; }; [UIPassthroughEvent.GetAvailableUIPassthroughs]: { request: any; response: { keys: string[]; }; }; [UIPassthroughEvent.GetAnswerConfig]: { request: { vizId?: string; }; response: any; }; [UIPassthroughEvent.GetLiveboardConfig]: { request: any; response: any; }; [UIPassthroughEvent.GetUnsavedAnswerTML]: { request: { sessionId?: string; vizId?: string; }; response: { tml: string; }; }; [UIPassthroughEvent.GetAnswerSession]: { request: { vizId?: string; }; response: { session: SessionInterface; embedAnswerData?: Record; }; }; [UIPassthroughEvent.GetFilters]: { request: { vizId?: string; }; response: { liveboardFilters: Record[]; runtimeFilters: RuntimeFilter[]; }; }; [UIPassthroughEvent.GetIframeUrl]: { request: Record; response: { iframeUrl: string; }; }; [UIPassthroughEvent.GetParameters]: { request: Record; response: { parameters: Record[]; }; }; [UIPassthroughEvent.GetTML]: { request: { vizId?: string; includeNonExecutedSearchTokens?: boolean; }; response: Record; }; [UIPassthroughEvent.GetTabs]: { request: Record; response: { orderedTabIds: string[]; numberOfTabs: number; Tabs: LiveboardTab[]; }; }; [UIPassthroughEvent.GetExportRequestForCurrentPinboard]: { request: Record; response: { data: { v2Content: string; }; type: UIPassthroughEvent.GetExportRequestForCurrentPinboard; }; }; [UIPassthroughEvent.UpdateFilters]: { request: { filter?: { column: string; oper: string; values: string[]; type?: string; }; filters?: { column: string; oper: string; values: string[]; type?: string; }[]; }; response: unknown; }; [UIPassthroughEvent.Drilldown]: { request: { points: { selectedPoints?: string[]; clickedPoint?: string; }; columnGuid?: string; autoDrillDown?: boolean; vizId?: string; }; response: unknown; }; }; export type UIPassthroughRequest = UIPassthroughContractBase[T]["request"]; export type UIPassthroughResponse = UIPassthroughContractBase[T]["response"]; export type UIPassthroughArrayResponse = Array<{ refId?: string; value?: UIPassthroughResponse; error?: any; }>; export type EmbedApiHostEventMapping = { [HostEvent.Pin]: UIPassthroughEvent.PinAnswerToLiveboard; [HostEvent.SaveAnswer]: UIPassthroughEvent.SaveAnswer; [HostEvent.GetAnswerSession]: UIPassthroughEvent.GetAnswerSession; [HostEvent.GetFilters]: UIPassthroughEvent.GetFilters; [HostEvent.GetIframeUrl]: UIPassthroughEvent.GetIframeUrl; [HostEvent.GetParameters]: UIPassthroughEvent.GetParameters; [HostEvent.GetTML]: UIPassthroughEvent.GetTML; [HostEvent.GetTabs]: UIPassthroughEvent.GetTabs; [HostEvent.getExportRequestForCurrentPinboard]: UIPassthroughEvent.GetExportRequestForCurrentPinboard; }; export type HostEventRequest = HostEventT extends keyof EmbedApiHostEventMapping ? UIPassthroughRequest : any; export type HostEventResponse = HostEventT extends keyof EmbedApiHostEventMapping ? UIPassthroughResponse : any; export type TriggerPayload = PayloadT | HostEventRequest; export type TriggerResponse = PayloadT extends HostEventRequest ? HostEventResponse : any; class HostEventClient { iFrame: HTMLIFrameElement; /** Cached list of available UI passthrough keys from the embedded app */ private availablePassthroughKeysCache; /** Host events with custom handlers * (setters or special logic) - * bound to instance for protected method access */ private readonly customHandlers; constructor(iFrame?: HTMLIFrameElement); /** * A wrapper over process trigger to * @param {HostEvent} message Host event to send * @param {any} data Data to send with the host event * @returns {Promise} - the response from the process trigger */ protected processTrigger(message: HostEvent, data: any, context?: ContextType): Promise; handleHostEventWithParam(apiName: UIPassthroughEventT, parameters: UIPassthroughRequest, context?: ContextType): Promise>; hostEventFallback(hostEvent: HostEvent, data: any, context?: ContextType): Promise; /** * For getter events that return data. Tries UI passthrough first; * if the app doesn't support it (no response data), falls back to * the legacy host event channel. Real errors are thrown as-is. */ private getDataWithPassthroughFallback; /** * Setter for the iframe element used for host events * @param {HTMLIFrameElement} iFrame - the iframe element to set */ setIframeElement(iFrame: HTMLIFrameElement): void; /** * Fetches the list of available UI passthrough keys from the embedded app. * Result is cached for the session. Returns empty array on failure. */ private getAvailableUIPassthroughKeys; triggerUIPassthroughApi(apiName: UIPassthroughEventT, parameters: UIPassthroughRequest, context?: ContextType): Promise>; protected handlePinEvent(payload: HostEventRequest, context?: ContextType): Promise>; protected handleSaveAnswerEvent(payload: HostEventRequest, context?: ContextType): Promise; protected handleUpdateFiltersEvent(payload: HostEventRequest, context?: ContextType): Promise; protected handleDrillDownEvent(payload: HostEventRequest, context?: ContextType): Promise; /** * Dispatches a host event using the appropriate channel: * 1. If the embedded app supports UI passthrough for this event, use it (custom handler or getter). * 2. Otherwise fall back to the legacy host event channel. * * @param hostEvent - The host event to trigger * @param payload - Optional payload for the event * @param context - Optional context (e.g. vizId) for scoped operations */ triggerHostEvent(hostEvent: HostEventT, payload?: TriggerPayload, context?: ContextT): Promise>; } class TsEmbed { /** * The DOM node which was inserted by the SDK to either * render the iframe or display an error message. * This is useful for removing the DOM node when the * embed instance is destroyed. */ protected insertedDomEl: Node; /** * The DOM node where the ThoughtSpot app is to be embedded. */ protected el: HTMLElement; /** * The key to store the embed instance in the DOM node */ protected embedNodeKey: string; protected isAppInitialized: boolean; /** * A reference to the iframe within which the ThoughtSpot app * will be rendered. */ protected iFrame: HTMLIFrameElement; /** * Setter for the iframe element * @param {HTMLIFrameElement} iFrame HTMLIFrameElement */ protected setIframeElement(iFrame: HTMLIFrameElement): void; protected viewConfig: AllEmbedViewConfig & { visibleTabs?: string[]; hiddenTabs?: string[]; showAlerts?: boolean; }; protected embedConfig: EmbedConfig; /** * The ThoughtSpot hostname or IP address */ protected thoughtSpotHost: string; protected thoughtSpotV2Base: string; /** * A map of event handlers for particular message types triggered * by the embedded app; multiple event handlers can be registered * against a particular message type. */ private eventHandlerMap; /** * A flag that is set to true post render. */ protected isRendered: boolean; /** * A flag to mark if an error has occurred. */ private isError; /** * A flag that is set to true post preRender. */ private isPreRendered; /** * Should we encode URL Query Params using base64 encoding which ThoughtSpot * will generate for embedding. This provides additional security to * ThoughtSpot clusters against Cross site scripting attacks. * @default false */ private shouldEncodeUrlQueryParams; private defaultHiddenActions; private resizeObserver; protected hostEventClient: HostEventClient; protected isReadyForRenderPromise: Promise; /** * Handler for fullscreen change events */ private fullscreenChangeHandler; constructor(domSelector: DOMSelector, viewConfig?: AllEmbedViewConfig); /** * Throws error encountered during initialization. */ private throwInitError; /** * Handles errors within the SDK * @param error The error message or object * @param errorDetails The error details */ protected handleError(errorDetails: EmbedErrorDetailsEvent): void; /** * Extracts the type field from the event payload * @param event The window message event */ private getEventType; /** * Extracts the port field from the event payload * @param event The window message event * @returns */ private getEventPort; /** * Checks if preauth cache is enabled * from the view config and embed config * @returns boolean */ private isPreAuthCacheEnabled; /** * Checks if current embed is FullAppEmbed with visible primary navbar * @returns boolean */ private isFullAppEmbedWithVisiblePrimaryNavbar; /** * fix for ts7.sep.cl * will be removed for ts7.oct.cl * @param event * @param eventType * @hidden */ private formatEventData; private subscribedListeners; /** * Subscribe to network events (online/offline) that should * work regardless of auth status */ private subscribeToNetworkEvents; private handleApiInterceptEvent; private messageEventListener; /** * Subscribe to message events that depend on successful iframe setup */ private subscribeToMessageEvents; /** * Adds event listeners for both network and message events. * This maintains backward compatibility with the existing method. * Adds a global event listener to window for "message" events. * ThoughtSpot detects if a particular event is targeted to this * embed instance through an identifier contained in the payload, * and executes the registered callbacks accordingly. */ private subscribeToEvents; private unsubscribeToNetworkEvents; private unsubscribeToMessageEvents; private unsubscribeToEvents; protected getAuthTokenForCookielessInit(): Promise; protected getDefaultAppInitData(): Promise; protected getAppInitData(): Promise; /** * Send Custom style as part of payload of APP_INIT * @param _ * @param responder */ private appInitCb; /** * Helper method to refresh/update auth token for TrustedAuthTokenCookieless auth type * @param responder - Function to send response back * @param eventType - The embed event type to send * @param forceRefresh - Whether to force refresh the token * @returns Promise that resolves if token was refreshed, rejects otherwise */ private refreshAuthTokenForCookieless; private handleAuthFailure; /** * Refresh the auth token if the autoLogin is true and the authType is TrustedAuthTokenCookieless * @param _ * @param responder */ private tokenRefresh; /** * Sends updated auth token to the iFrame to avoid user logout * @param _ * @param responder */ private updateAuthToken; /** * Auto Login and send updated authToken to the iFrame to avoid user session logout * @param _ * @param responder */ private idleSessionTimeout; /** * Register APP_INIT event and sendback init payload */ private registerAppInit; /** * Constructs the base URL string to load the ThoughtSpot app. * @param query */ protected getEmbedBasePath(query: string): string; protected getUpdateEmbedParamsObject(): Promise>; /** * Common query params set for all the embed modes. * @param queryParams * @returns queryParams */ protected getBaseQueryParams(queryParams?: Record): Record; /** * Constructs the base URL string to load v1 of the ThoughtSpot app. * This is used for embedding Liveboards, visualizations, and full application. * @param queryString The query string to append to the URL. * @param isAppEmbed A Boolean parameter to specify if you are embedding * the full application. */ protected getV1EmbedBasePath(queryString: string): string; protected getEmbedParams(): string; protected getEmbedParamsObject(): Record; protected getRootIframeSrc(): string; protected createIframeEl(frameSrc: string): HTMLIFrameElement; protected handleInsertionIntoDOM(child: string | Node): void; /** * Renders the embedded ThoughtSpot app in an iframe and sets up * event listeners. * @param url - The URL of the embedded ThoughtSpot app. */ protected renderIFrame(url: string): Promise; protected createPreRenderWrapper(): HTMLDivElement; protected preRenderWrapper: HTMLElement; protected preRenderChild: HTMLElement; protected connectPreRendered(): boolean; protected isPreRenderAvailable(): boolean; protected createPreRenderChild(child: string | Node): HTMLElement; protected insertIntoDOMForPreRender(child: string | Node): void; private showPreRenderByDefault; protected insertIntoDOM(child: string | Node): void; /** * Sets the height of the iframe * @param height The height in pixels */ protected setIFrameHeight(height: number | string): void; /** * We can process the customer given payload before sending it to the embed port * Embed event handler -> responder -> createEmbedEventResponder -> send response * @param eventPort The event port for a specific MessageChannel * @param eventType The event type * @returns */ protected createEmbedEventResponder: (eventPort: MessagePort | void, eventType: EmbedEvent) => (payload: any) => void; private shouldSkipEvent; /** * Executes all registered event handlers for a particular event type * @param eventType The event type * @param data The payload invoked with the event handler * @param eventPort The event Port for a specific MessageChannel */ protected executeCallbacks(eventType: EmbedEvent, data: any, eventPort?: MessagePort | void): void; /** * Returns the ThoughtSpot hostname or IP address. */ protected getThoughtSpotHost(): string; /** * Gets the v1 event type (if applicable) for the EmbedEvent type * @param eventType The v2 event type * @returns The corresponding v1 event type if one exists * or else the v2 event type itself */ protected getCompatibleEventType(eventType: EmbedEvent): EmbedEvent; /** * Calculates the iframe center for the current visible viewPort * of iframe using Scroll position of Host App, offsetTop for iframe * in Host app. ViewPort height of the tab. * @returns iframe Center in visible viewport, * Iframe height, * View port height. */ protected getIframeCenter(): { iframeCenter: number; iframeScrolled: number; iframeHeight: number; viewPortHeight: number; iframeVisibleViewPort: number; }; /** * Registers an event listener to trigger an alert when the ThoughtSpot app * sends an event of a particular message type to the host application. * @param messageType The message type * @param callback A callback as a function * @param options The message options * @param isSelf * @param isRegisteredBySDK * @example * ```js * tsEmbed.on(EmbedEvent.Error, (data) => { * console.error(data); * }); * ``` * @example * ```js * tsEmbed.on(EmbedEvent.Save, (data) => { * console.log("Answer save clicked", data); * }, { * start: true // This will trigger the callback on start of save * }); * ``` */ on(messageType: EmbedEvent, callback: MessageCallback, options?: MessageOptions, isRegisteredBySDK?: boolean): typeof TsEmbed.prototype; /** * Removes an event listener for a particular event type. * @param messageType The message type * @param callback The callback to remove * @example * ```js * const errorHandler = (data) => { console.error(data); }; * tsEmbed.on(EmbedEvent.Error, errorHandler); * tsEmbed.off(EmbedEvent.Error, errorHandler); * ``` */ off(messageType: EmbedEvent, callback: MessageCallback): typeof TsEmbed.prototype; /** * Triggers an event on specific Port registered against * for the EmbedEvent * @param eventType The message type * @param data The payload to send * @param eventPort * @param payload */ private triggerEventOnPort; /** * @hidden * Internal state to track if the embed container is loaded. * This is used to trigger events after the embed container is loaded. */ isEmbedContainerLoaded: boolean; /** * @hidden * Internal state to track the callbacks to be executed after the embed container * is loaded. * This is used to trigger events after the embed container is loaded. */ private embedContainerReadyCallbacks; protected getPreRenderObj(): T; private checkEmbedContainerLoaded; private executeEmbedContainerReadyCallbacks; /** * Executes a callback after the embed container is loaded. * @param callback The callback to execute */ protected executeAfterEmbedContainerLoaded(callback: () => void): void; protected createEmbedContainerHandler: (source: EmbedEvent.AuthInit | EmbedEvent.EmbedListenerReady) => () => void; /** * Triggers an event to the embedded app * @param {HostEvent} messageType The event type * @param {any} data The payload to send with the message * @param {ContextType} context Optional context type to specify the context from which the event is triggered. * Use ContextType.Search for search answer context, ContextType.Answer for answer/explore context, * ContextType.Liveboard for liveboard context, or ContextType.Spotter for spotter context. * Available from SDK version 1.45.2 | ThoughtSpot: 26.3.0.cl * @returns A promise that resolves with the response from the embedded app * @example * ```js * // Trigger Pin event with context (SDK: 1.45.2+) * import { HostEvent, ContextType } from '@thoughtspot/visual-embed-sdk'; * embed.trigger(HostEvent.Pin, { * vizId: "123", * liveboardId: "456" * }, ContextType.Search); * ``` * @version SDK: 1.45.2 | ThoughtSpot: 26.3.0.cl (for context parameter) */ trigger(messageType: HostEventT, data?: TriggerPayload, context?: ContextT): Promise>; /** * Triggers an event to the embedded app, skipping the UI flow. * @param {UIPassthroughEvent} apiName - The name of the API to be triggered. * @param {UIPassthroughRequest} parameters - The parameters to be passed to the API. * @returns {Promise} - A promise that resolves with the response * from the embedded app. */ triggerUIPassThrough(apiName: UIPassthroughEventT, parameters: UIPassthroughRequest): Promise>; /** * Marks the ThoughtSpot object to have been rendered * Needs to be overridden by subclasses to do the actual * rendering of the iframe. * @param args */ render(): Promise; getIframeSrc(): string; protected handleRenderForPrerender(): Promise; /** * Context object for the embedded component. * @returns {ContextObject} The current context object containing the page type and object ids. * @example * ```js * const context = await embed.getCurrentContext(); * console.log(context); * * // Example output * { * stack: [ * { * name: 'Liveboard', * type: ContextType.Liveboard, * objectIds: { * liveboardId: '123', * }, * }, * ], * currentContext: { * name: 'Liveboard', * type: ContextType.Liveboard, * objectIds: { * liveboardId: '123', * }, * }, * } * ``` * @version SDK: 1.45.2 | ThoughtSpot: 26.3.0.cl */ getCurrentContext(): Promise; /** * Generates the event name for a "Subscribed" embed event. * * This helper appends the "Subscribed" suffix to a given host or action event, * allowing you to listen for subscription lifecycle events in a consistent format. * * @param eventName - The host or action event to generate the subscribed event name for. * @returns The formatted event name (e.g., "Save Subscribed"). * * @version SDK: 1.47.2 | ThoughtSpot: 26.3.0.cl */ subscribedEvent(eventName: HostEvent | Action): string; /** * Creates the preRender shell * @param showPreRenderByDefault - Show the preRender after render, hidden by default */ preRender(showPreRenderByDefault?: boolean, replaceExistingPreRender?: boolean): Promise; /** * Get the Post Url Params for THOUGHTSPOT from the current * host app URL. * THOUGHTSPOT URL params starts with a prefix "ts-" * @version SDK: 1.14.0 | ThoughtSpot: 8.4.0.cl, 8.4.1-sw */ getThoughtSpotPostUrlParams(additionalParams?: { [key: string]: string | number; }): string; /** * Destroys the ThoughtSpot embed, and remove any nodes from the DOM. * @version SDK: 1.19.1 | ThoughtSpot: * */ destroy(): void; getUnderlyingFrameElement(): HTMLIFrameElement; /** * Prerenders a generic instance of the TS component. * This means without the path but with the flags already applied. * This is useful for prerendering the component in the background. * @version SDK: 1.22.0 * @returns */ prerenderGeneric(): Promise; protected beforePrerenderVisible(): void; private validatePreRenderViewConfig; /** * Displays the PreRender component. * If the component is not preRendered, it attempts to create and render it. * Also, synchronizes the style of the PreRender component with the embedding * element. */ showPreRender(): Promise; /** * Synchronizes the style properties of the PreRender component with the embedding * element. This function adjusts the position, width, and height of the PreRender * component * to match the dimensions and position of the embedding element. * @throws {Error} Throws an error if the embedding element (passed as domSelector) * is not defined or not found. */ syncPreRenderStyle(): void; /** * Hides the PreRender component if it is available. * If the component is not preRendered, it issues a warning. */ hidePreRender(): void; /** * Retrieves unique HTML element IDs for PreRender-related elements. * These IDs are constructed based on the provided 'preRenderId' from 'viewConfig'. * @returns {object} An object containing the IDs for the PreRender elements. * @property {string} wrapper - The HTML element ID for the PreRender wrapper. * @property {string} child - The HTML element ID for the PreRender child. */ getPreRenderIds(): { wrapper: string; child: string; }; /** * Returns the answerService which can be used to make arbitrary graphql calls on top * session. * @param vizId [Optional] to get for a specific viz in case of a Liveboard. * @version SDK: 1.25.0 | ThoughtSpot: 9.10.0 */ getAnswerService(vizId?: string): Promise; /** * Set up fullscreen change detection to automatically trigger ExitPresentMode * when user exits fullscreen mode */ private setupFullscreenChangeHandler; /** * Remove fullscreen change handler */ private removeFullscreenChangeHandler; } class V1Embed extends TsEmbed { protected viewConfig: AllEmbedViewConfig; constructor(domSelector: DOMSelector, viewConfig: AllEmbedViewConfig); /** * Render the app in an iframe and set up event handlers * @param iframeSrc */ protected renderV1Embed(iframeSrc: string): Promise; protected getRootIframeSrc(): string; /** * @inheritdoc * @example * ```js * tsEmbed.on(EmbedEvent.Error, (data) => { * console.error(data); * }); * ``` * @example * ```js * tsEmbed.on(EmbedEvent.Save, (data) => { * console.log("Answer save clicked", data); * }, { * start: true // This will trigger the callback on start of save * }); * ``` */ on(messageType: EmbedEvent, callback: MessageCallback, options?: MessageOptions): typeof TsEmbed.prototype; /** * Only for testing purposes. * @hidden */ test__executeCallbacks: (eventType: EmbedEvent, data: any, eventPort?: void | MessagePort) => void; } /** * Configuration for search options */ export interface SearchOptions { /** * The query string to pass to start the Conversation. */ searchQuery: string; } /** * Configuration for the Spotter sidebar. * Can be used in SpotterEmbed and AppEmbed. * @group Embed components * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl */ export interface SpotterSidebarViewConfig { /** * Controls the visibility of the past conversations sidebar. * @default false * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl */ enablePastConversationsSidebar?: boolean; /** * Custom title text for the sidebar header. * Defaults to translated "Spotter" text. * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl */ spotterSidebarTitle?: string; /** * Boolean to set the default expanded state of the sidebar. * @default false * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl */ spotterSidebarDefaultExpanded?: boolean; /** * Custom label text for the rename action in the conversation edit menu. * Defaults to translated "Rename" text. * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl */ spotterChatRenameLabel?: string; /** * Custom label text for the delete action in the conversation edit menu. * Defaults to translated "DELETE" text. * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl */ spotterChatDeleteLabel?: string; /** * Custom title text for the delete conversation confirmation modal. * Defaults to translated "Delete chat" text. * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl */ spotterDeleteConversationModalTitle?: string; /** * Custom message text for the past conversation banner alert. * Defaults to translated alert message. * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl */ spotterPastConversationAlertMessage?: string; /** * Custom URL for the documentation/best practices link. * Defaults to ThoughtSpot docs URL based on release version. * Note: URL must include the protocol (e.g., `https://www.example.com`). * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl */ spotterDocumentationUrl?: string; /** * Custom label text for the best practices button in the footer. * Defaults to translated "Best Practices" text. * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl */ spotterBestPracticesLabel?: string; /** * Number of conversations to fetch per batch when loading conversation history. * @default 30 * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl */ spotterConversationsBatchSize?: number; /** * Custom title text for the "New Chat" button in the sidebar. * Defaults to translated "New Chat" text. * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl */ spotterNewChatButtonTitle?: string; } /** * Configuration for customizing Spotter chat UI branding. * @version SDK: 1.46.0 | ThoughtSpot: 26.4.0.cl * @group Embed components */ export interface SpotterChatViewConfig { /** * Hides the ThoughtSpot logo/icon in tool response * cards. The branding label prefix is controlled * separately via `toolResponseCardBrandingLabel`. * External MCP tool branding is not affected. * @default false */ hideToolResponseCardBranding?: boolean; /** * Custom label to replace the "ThoughtSpot" prefix * in tool response cards. Set to an empty string * `''` to hide the prefix entirely. Works * independently of `hideToolResponseCardBranding`. * External MCP tool branding is not affected. */ toolResponseCardBrandingLabel?: string; } /** * The configuration for the embedded spotterEmbed options. * @group Embed components */ export interface SpotterEmbedViewConfig extends Omit { /** * The ID of the data source object. For example, Model, View, or Table. Spotter uses * this object to query data and generate Answers. */ worksheetId: string; /** * Ability to pass a starting search query to the conversation. */ searchOptions?: SearchOptions; /** * disableSourceSelection : Disables data source selection * but still display the selected data source. * * Supported embed types: `SpotterEmbed` * @version SDK: 1.36.0 | ThoughtSpot: 10.6.0.cl * @example * ```js * const embed = new SpotterEmbed('#tsEmbed', { * ... //other embed view config * disableSourceSelection : true, * }) * ``` */ disableSourceSelection?: boolean; /** * hideSourceSelection : Hide data source selection * * Supported embed types: `SpotterEmbed` * @version SDK: 1.36.0 | ThoughtSpot: 10.6.0.cl * @example * ```js * const embed = new SpotterEmbed('#tsEmbed', { * ... //other embed view config * hideSourceSelection : true, * }) * ``` */ hideSourceSelection?: boolean; /** * Flag to control Data panel experience * * Supported embed types: `SageEmbed`, `AppEmbed`, `SearchBarEmbed`, `LiveboardEmbed`, `SearchEmbed` * @deprecated from SDK: 1.46.0 | ThoughtSpot Cloud: 26.3.0.cl * @default true * @example * ```js * // Replace with embed component name. For example, AppEmbed, or SearchBarEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * dataPanelV2: true, * }) * ``` */ dataPanelV2?: boolean; /** * showSpotterLimitations : show limitation text * of the spotter underneath the chat input. * default is false. * * Supported embed types: `SpotterEmbed` * @version SDK: 1.36.0 | ThoughtSpot: 10.5.0.cl * @example * ```js * const embed = new SpotterEmbed('#tsEmbed', { * ... //other embed view config * showSpotterLimitations : true, * }) * ``` */ showSpotterLimitations?: boolean; /** * hideSampleQuestions : Hide sample questions on * the initial screen of the conversation. * * Supported embed types: `SpotterEmbed` * @version SDK: 1.36.0 | ThoughtSpot: 10.6.0.cl * @example * ```js * const embed = new SpotterEmbed('#tsEmbed', { * ... //other embed view config * hideSampleQuestions : true, * }) * ``` */ hideSampleQuestions?: boolean; /** * The list of runtime filters to apply to a search Answer, * visualization, or Liveboard. * * Supported embed types: `SpotterEmbed` * @version SDK: 1.41.0 | ThoughtSpot: 10.13.0.cl * @example * ```js * const embed = new SpotterEmbed('#tsEmbed', { * // other embed view config * runtimeFilters: [ * { * columnName: 'color', * operator: RuntimeFilterOp.EQ, * values: ['red'], * }, * ], * }) * ``` */ runtimeFilters?: RuntimeFilter[]; /** * Flag to control whether runtime filters should be included in the URL. * If true, filters will be passed via app initialization payload * (default behavior from SDK 1.45.0). * If false/undefined, filters are appended to the iframe URL instead. * (default behavior before SDK 1.45.0). * * Supported embed types: `SpotterEmbed` * @version SDK: 1.41.0 | ThoughtSpot: 10.13.0.cl * @default true */ excludeRuntimeFiltersfromURL?: boolean; /** * The list of runtime parameters to apply to the conversation. * * Supported embed types: `SpotterEmbed` * @version SDK: 1.41.0 | ThoughtSpot: 10.13.0.cl * @example * ```js * const embed = new SpotterEmbed('#tsEmbed', { * // other embed view config * runtimeParameters: [ * { * name: 'Integer Param', * value: 10, * }, * ], * }) * ``` */ runtimeParameters?: RuntimeParameter[]; /** * Flag to control whether runtime parameters should be included in the URL. * If true, parameters will be passed via app * initialization payload (default behavior from SDK 1.45.0). * If false/undefined, parameters are appended to * the iframe URL instead (default behavior before SDK 1.45.0). * * Supported embed types: `SpotterEmbed` * @version SDK: 1.41.0 | ThoughtSpot: 10.13.0.cl * @default true */ excludeRuntimeParametersfromURL?: boolean; /** * updatedSpotterChatPrompt : Controls the updated spotter chat prompt. * * Supported embed types: `SpotterEmbed` * @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl * @default false * @example * ```js * const embed = new SpotterEmbed('#tsEmbed', { * ... //other embed view config * updatedSpotterChatPrompt : true, * }) * ``` */ updatedSpotterChatPrompt?: boolean; /** * Enables the stop answer generation button in the Spotter embed UI, * allowing users to interrupt an ongoing answer generation. * * Supported embed types: `SpotterEmbed` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl * @default false */ enableStopAnswerGenerationEmbed?: boolean; /** * Controls the visibility of the past conversations sidebar. * * Supported embed types: `SpotterEmbed` * @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl * @deprecated from SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl * Use `spotterSidebarConfig.enablePastConversationsSidebar`. * @default false */ enablePastConversationsSidebar?: boolean; /** * Configuration for the Spotter sidebar UI customization. * * Supported embed types: `SpotterEmbed`, `AppEmbed` * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl * @example * ```js * const embed = new SpotterEmbed('#tsEmbed', { * worksheetId: 'worksheet-id', * // Deprecated standalone flag (backward compatibility) * enablePastConversationsSidebar: false, * // Recommended config; this value takes precedence * spotterSidebarConfig: { * enablePastConversationsSidebar: true, * spotterSidebarTitle: 'My Conversations', * spotterSidebarDefaultExpanded: true, * }, * }) * ``` */ spotterSidebarConfig?: SpotterSidebarViewConfig; /** * Configuration for customizing Spotter chat UI * branding in tool response cards. * * Supported embed types: `SpotterEmbed` * @version SDK: 1.46.0 | ThoughtSpot: 26.4.0.cl * @example * ```js * const embed = new SpotterEmbed('#tsEmbed', { * ... //other embed view config * spotterChatConfig: { * hideToolResponseCardBranding: true, * toolResponseCardBrandingLabel: 'MyBrand', * }, * }) * ``` */ spotterChatConfig?: SpotterChatViewConfig; } /** * The configuration for the embedded spotterEmbed options. * Use {@link SpotterEmbedViewConfig} instead * @deprecated from SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl * @group Embed components */ export interface ConversationViewConfig extends SpotterEmbedViewConfig { } /** * APP_INIT data shape for SpotterEmbed. * @internal */ export interface SpotterAppInitData extends DefaultAppInitData { embedParams?: { spotterSidebarConfig?: SpotterSidebarViewConfig; visualOverridesParams?: VisualizationOverrides | null; }; } /** * Embed ThoughtSpot AI Conversation. * @version SDK: 1.37.0 | ThoughtSpot: 10.9.0.cl * @group Embed components * @example * ```js * const conversation = new SpotterEmbed('#tsEmbed', { * worksheetId: 'worksheetId', * searchOptions: { * searchQuery: 'searchQuery', * }, * }); * conversation.render(); * ``` */ export class SpotterEmbed extends TsEmbed { protected viewConfig: SpotterEmbedViewConfig; constructor(container: HTMLElement, viewConfig: SpotterEmbedViewConfig); /** * Extends the default APP_INIT payload with `embedParams.spotterSidebarConfig` * so the conv-assist app can read sidebar configuration on initialisation. * * Precedence for `enablePastConversationsSidebar`: * `spotterSidebarConfig.enablePastConversationsSidebar` wins over the * deprecated top-level `enablePastConversationsSidebar` flag; if the former * is absent the latter is used as a fallback. * * An invalid `spotterDocumentationUrl` triggers a validation error and is * excluded from the payload rather than forwarded to the app. */ protected getAppInitData(): Promise; protected getEmbedParamsObject(): Record; getIframeSrc(): string; render(): Promise; } /** * Embed ThoughtSpot AI Conversation. * Use {@link SpotterEmbed} instead * @version SDK: 1.37.0 | ThoughtSpot: 10.9.0.cl * @deprecated from SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl * @group Embed components * @example * ```js * const conversation = new SpotterEmbed('#tsEmbed', { * worksheetId: 'worksheetId', * searchOptions: { * searchQuery: 'searchQuery', * }, * }); * conversation.render(); * ``` */ export class ConversationEmbed extends SpotterEmbed { protected viewConfig: ConversationViewConfig; constructor(container: HTMLElement, viewConfig: ConversationViewConfig); } /** * Pages within the ThoughtSpot app that can be embedded. */ export enum Page { /** * Home page */ Home = "home", /** * Search page */ Search = "search", /** * Saved answers listing page */ Answers = "answers", /** * Liveboards listing page */ Liveboards = "liveboards", /** * @hidden */ Pinboards = "pinboards", /** * Data management page */ Data = "data", /** * SpotIQ listing page */ SpotIQ = "insights", /** * Monitor Alerts Page */ Monitor = "monitor" } /** * Define the initial state of column custom group accordions * in data panel v2. */ export enum DataPanelCustomColumnGroupsAccordionState { /** * Expand all the accordion initially in data panel v2. */ EXPAND_ALL = "EXPAND_ALL", /** * Collapse all the accordions initially in data panel v2. */ COLLAPSE_ALL = "COLLAPSE_ALL", /** * Expand the first accordion and collapse the rest. */ EXPAND_FIRST = "EXPAND_FIRST" } export enum HomePageSearchBarMode { OBJECT_SEARCH = "objectSearch", AI_ANSWER = "aiAnswer", NONE = "none" } /** * Define the version of the primary navbar * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ export enum PrimaryNavbarVersion { /** * Sliding (v3) introduces a new left-side navigation hub featuring a tab switcher, * along with updates to the top navigation bar. * It serves as the foundational version of the PrimaryNavBar. */ Sliding = "v3" } /** * Define the version of the home page * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ export enum HomePage { /** * Modular (v2) introduces the updated Modular Home Experience. * It serves as the foundational version of the home page. */ Modular = "v2", /** * ModularWithStylingChanges (v3) introduces Modular Home Experience * with styling changes. */ ModularWithStylingChanges = "v3" } /** * Define the version of the list page * @version SDK: 1.40.0 | ThoughtSpot: 10.12.0.cl */ export enum ListPage { /** * List (v2) is the traditional List Experience. * It serves as the foundational version of the list page. */ List = "v2", /** * ListWithUXChanges (v3) introduces the new updated list page with UX changes. */ ListWithUXChanges = "v3" } /** * Define the discovery experience * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl */ export interface DiscoveryExperience { /** * primaryNavbarVersion determines the version of the primary navigation bar. */ primaryNavbarVersion?: PrimaryNavbarVersion; /** * homePage determines the version of the home page. */ homePage?: HomePage; /** * listPageVersion determines the version of the list page. */ listPageVersion?: ListPage; } /** * The view configuration for full app embedding. * @group Embed components */ export interface AppViewConfig extends AllEmbedViewConfig { /** * If true, the top navigation bar within the ThoughtSpot app * is displayed. By default, the navigation bar is hidden. * This flag also controls the homepage left navigation bar. * * Supported embed types: `AppEmbed` * @version SDK: 1.2.0 | ThoughtSpot: 8.4.0.cl * @default true * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * showPrimaryNavbar:true, * }) * ``` */ showPrimaryNavbar?: boolean; /** * Control the visibility of the left navigation panel on the home page * in the V2 and V3 navigation and home page experience. * If `showPrimaryNavbar` is true, that is, if the Global and Homepage * navigation bars are visible, this flag will only hide the left navigation bar * on the home page. * The `showPrimaryNavbar` flag takes precedence over the `hideHomepageLeftNav`. * * **Note**: This attribute is not supported in the classic (V1) experience. * * Supported embed types: `AppEmbed` * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl * @default false * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * hideHomepageLeftNav : true, * }) * ``` */ hideHomepageLeftNav?: boolean; /** * Control the visibility of the help (?) and profile * buttons on the top navigation bar. * These buttons are visible if the * navigation bar is not hidden via `showPrimaryNavbar`. * * Supported embed types: `AppEmbed` * @version SDK: 1.2.0 | ThoughtSpot: 8.4.0.cl * @default false * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * disableProfileAndHelp: true, * }) * ``` */ disableProfileAndHelp?: boolean; /** * Whether the help menu in the top navigation bar should be served * from Pendo or ThoughtSpot's internal help items. * * Supported embed types: `AppEmbed` * @version SDK: 1.36.3 | ThoughtSpot: 10.1.0.cl * @default true * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * enablePendoHelp: false, * }); * ``` */ enablePendoHelp?: boolean; /** * Control the visibility of the hamburger icon on * the top navigation bar in the V3 navigation experience. * * Supported embed types: `AppEmbed` * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl * @default false * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * hideHamburger : true, * }) * ``` */ hideHamburger?: boolean; /** * Control the visibility of the object search * on the top navigation bar in the * V2 and V3 navigation experience. * * **Note**: This attribute is not supported * in the classic (V1) experience. * * Supported embed types: `AppEmbed` * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl * @default true * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * hideObjectSearch: false, * }) * ``` */ hideObjectSearch?: boolean; /** * Control the visibility of the notification icon * on the top navigation bar in V3 navigation experience. * * **Note**: This attribute is not supported * in the classic (V1) and V2 experience modes. * * Supported embed types: `AppEmbed` * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl * @default true * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * hideNotification: false, * }) * ``` */ hideNotification?: boolean; /** * Control the visibility of the application selection menu * in the top navigation bar in the V2 experience. * In the V3 experience, it shows or hides application selection * icons on the left navigation panel. * By default, the application selection menu and icons are * shown in the UI. * * **Note**: This attribute is not supported in the classic (V1) experience. * * Supported embed types: `AppEmbed` * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl * @default false * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * hideApplicationSwitcher : true, * }) * ``` */ hideApplicationSwitcher?: boolean; /** * Control the visibility of the Org switcher button on the nav-bar. * By default, the Org switcher button is shown. * * **Note**: This attribute is not supported in the classic (V1) experience. * * Supported embed types: `AppEmbed` * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl * @default true * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * hideOrgSwitcher : true, * }) * ``` */ hideOrgSwitcher?: boolean; /** * A URL path to the embedded application page * If both path and pageId attributes are defined, the path definition * takes precedence. This is the path post the `#/` in the URL of the standalone * ThoughtSpot app. Use this to open the embedded view to a specific path. * * For example, if you want the component to open to a specific Liveboard * you could set the path to `pinboard//tab/`. * * Supported embed types: `AppEmbed` * @version SDK: 1.1.0 | ThoughtSpot: 9.4.0.cl * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * path:"pinboard/1234/tab/7464", * }) * ``` */ path?: string; /** * The application page to set as the start page * in the embedded view. * * Use this to open to a particular page in the app. To open to a specific * path within the app, use the `path` attribute which is more flexible. * * Supported embed types: `AppEmbed` * @version SDK: 1.1.0 | ThoughtSpot: 9.4.0.cl * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * pageId: Page.Answers, // or Page.Data * }) * ``` */ pageId?: Page; /** * This puts a filter tag on the application. All metadata lists in the * application, such as Liveboards and answers, would be filtered by this * tag. * * Supported embed types: `AppEmbed` * @version SDK: 1.1.0 | ThoughtSpot: 9.4.0.cl * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * tag:'value', * }) * ``` */ tag?: string; /** * Hide tag filter chips that appear when content is filtered by tags. * When enabled, this automatically: * - Hides tag filter indicators/chips from the UI * * This provides a clean interface without tag-related UI elements. * * Supported embed types: `AppEmbed` * @version SDK: 1.44.0 | ThoughtSpot: 10.15.0.cl * @example * ```js * // Simple usage - automatically hides all tag-related UI * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * tag: 'Some Tag', * hideTagFilterChips: true, // This is all you need! * }); * ``` */ hideTagFilterChips?: boolean; /** * The array of GUIDs to be hidden * * Supported embed types: `AppEmbed` * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1-sw * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * hideObjects: [ * '430496d6-6903-4601-937e-2c691821af3c', * 'f547ec54-2a37-4516-a222-2b06719af726' * ] * }) * ``` */ hideObjects?: string[]; /** * Render liveboards using the new v2 rendering mode * This is a transient flag which is primarily meant for internal use * * Supported embed types: `AppEmbed` * @version SDK: 1.11.0 | ThoughtSpot: 8.3.0.cl, 8.4.1-sw * @hidden */ liveboardV2?: boolean; /** * If set to true, the Search Assist feature is enabled. * * Supported embed types: `AppEmbed` * @version SDK: 1.13.0 | ThoughtSpot: 8.5.0.cl, 8.8.1-sw * @default true * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * enableSearchAssist: true, * }) * ``` */ enableSearchAssist?: boolean; /** * If set to true, the Liveboard container dynamically resizes * according to the height of the Liveboard. * * **Note**: Using fullHeight loads all visualizations * on the Liveboard simultaneously, which results in * multiple warehouse queries and potentially a * longer wait for the topmost visualizations to * display on the screen. Setting fullHeight to * `false` fetches visualizations incrementally as * users scroll the page to view the charts and tables. * * Supported embed types: `AppEmbed` * @version SDK: 1.21.0 | ThoughtSpot: 9.4.0.cl, 9.4.0-sw * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * fullHeight: true, * }) * ``` */ fullHeight?: boolean; /** * Enables the V2 navigation and modular home page experience. * For more information, * see link:https://developers.thoughtspot.com/docs/full-app-customize[full app embed documentation]. * Supported embed types: `AppEmbed` * @version SDK: 1.28.0 | ThoughtSpot: 9.12.5.cl * @default false * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * modularHomeExperience : true, * }) * ``` */ modularHomeExperience?: boolean; /** * Configures the V3 navigation and home page experience. * For more information, see * link:https://developers.thoughtspot.com/docs/full-app-customize[full app embed documentation]. * Supported embed types: `AppEmbed` * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl * @default false * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * // Enable V3 navigation and home page experience * discoveryExperience : { * primaryNavbarVersion: PrimaryNavbarVersion.Sliding, // Enable V3 navigation * homePage: HomePage.ModularWithStylingChanges, // Enable V3 modular home page * ... // other embed view config * }, * }) * ``` */ discoveryExperience?: DiscoveryExperience; /** * To set the initial state of the search bar in case of saved-answers. Use {@link collapseSearchBar} instead. * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl * @deprecated This flag is deprecated. * @default false */ collapseSearchBarInitially?: boolean; /** * This controls the initial behaviour of custom column groups accordion. * It takes DataPanelCustomColumnGroupsAccordionState enum values as input. * List of different enum values:- * - EXPAND_ALL: Expand all the accordion initially in data panel v2. * - COLLAPSE_ALL: Collapse all the accordions initially in data panel v2. * - EXPAND_FIRST: Expand the first accordion and collapse the rest. * * Supported embed types: `AppEmbed` * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl * @default DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL * @example * ```js * const embed = new AppEmbed('#embed', { * ... // other app view config * dataPanelCustomGroupsAccordionInitialState: * DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL, * }); * ``` */ dataPanelCustomGroupsAccordionInitialState?: DataPanelCustomColumnGroupsAccordionState; /** * Flag to use home page search bar mode * * Supported embed types: `AppEmbed` * @version SDK: 1.33.0 | ThoughtSpot: 10.3.0.cl */ homePageSearchBarMode?: HomePageSearchBarMode; /** * This flag is used to enable unified search experience for full app embed. * * Supported embed types: `AppEmbed` * @version SDK: 1.34.0 | ThoughtSpot: 10.5.0.cl * @default true * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * isUnifiedSearchExperienceEnabled: true, * }) * ``` */ isUnifiedSearchExperienceEnabled?: boolean; /** * This flag is used to enable/disable the styling and grouping in a Liveboard. Use {@link isLiveboardMasterpiecesEnabled} instead. * @deprecated This flag is deprecated. * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @type {boolean} * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isLiveboardStylingAndGroupingEnabled: true, * }) * ``` */ isLiveboardStylingAndGroupingEnabled?: boolean; /** * This flag is used to enable/disable the png embedding of liveboard in scheduled * mails * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @type {boolean} * @version SDK: 1.42.0 | ThoughtSpot: 10.14.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isPNGInScheduledEmailsEnabled: true, * }) * ``` */ isPNGInScheduledEmailsEnabled?: boolean; /** * Enables the 'what you see is what you get' PDF export for Liveboards. Each tab is rendered on a single page * following the exact UI layout, instead of splitting visualizations across multiple A4 pages. * This feature is GA from version 26.5.0.cl. It is disabled by default in embed deployments. * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @type {boolean} * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isContinuousLiveboardPDFEnabled: true, * }) * ``` */ isContinuousLiveboardPDFEnabled?: boolean; /** * This flag is used to enable/disable the XLSX/CSV download option for Liveboards * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @type {boolean} * @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isLiveboardXLSXCSVDownloadEnabled: true, * }) * ``` */ isLiveboardXLSXCSVDownloadEnabled?: boolean; /** * This flag is used to enable/disable the granular XLSX/CSV schedules feature * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @type {boolean} * @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isGranularXLSXCSVSchedulesEnabled: true, * }) * ``` */ isGranularXLSXCSVSchedulesEnabled?: boolean; /** * This flag is used to enable the full height lazy load data. * * @type {boolean} * @version SDK: 1.40.0 | ThoughtSpot: 10.12.0.cl * @default false * @example * ```js * const embed = new AppEmbed('#embed-container', { * // ...other options * fullHeight: true, * lazyLoadingForFullHeight: true, * }) * ``` */ lazyLoadingForFullHeight?: boolean; /** * The margin to be used for lazy loading. * * For example, if the margin is set to '10px', * the visualization will be loaded 10px before its top edge is visible in the * viewport. * * The format is similar to CSS margin. * * @type {string} * @version SDK: 1.40.0 | ThoughtSpot: 10.12.0.cl * @example * ```js * const embed = new AppEmbed('#embed-container', { * // ...other options * fullHeight: true, * lazyLoadingForFullHeight: true, * // Using 0px, the visualization will be only loaded when it's visible in the viewport. * lazyLoadingMargin: '0px', * }) * ``` */ lazyLoadingMargin?: string; /** * updatedSpotterChatPrompt : Controls the updated spotter chat prompt. * * Supported embed types: `AppEmbed` * @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl * @default false * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... //other embed view config * updatedSpotterChatPrompt : true, * }) * ``` */ updatedSpotterChatPrompt?: boolean; /** * Controls the visibility of the past conversations sidebar. * * Supported embed types: `AppEmbed` * @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl * @deprecated from SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl * Use `spotterSidebarConfig.enablePastConversationsSidebar`. * @default false */ enablePastConversationsSidebar?: boolean; /** * Configuration for the Spotter sidebar UI customization. * Only applicable when navigating to Spotter within the app. * * Supported embed types: `AppEmbed` * @version SDK: 1.47.0 | ThoughtSpot: 26.4.0.cl * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * // Deprecated standalone flag (backward compatibility) * enablePastConversationsSidebar: false, * // Recommended config; this value takes precedence * spotterSidebarConfig: { * enablePastConversationsSidebar: true, * spotterSidebarTitle: 'My Conversations', * }, * }) * ``` */ spotterSidebarConfig?: SpotterSidebarViewConfig; /** * Configuration for customizing Spotter chat UI * branding in tool response cards. * * Supported embed types: `AppEmbed` * @version SDK: 1.46.0 | ThoughtSpot: 26.4.0.cl * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... //other embed view config * spotterChatConfig: { * hideToolResponseCardBranding: true, * toolResponseCardBrandingLabel: 'MyBrand', * }, * }) * ``` */ spotterChatConfig?: SpotterChatViewConfig; /** * Enables the stop answer generation button in the Spotter embed UI, * allowing users to interrupt an ongoing answer generation. * * Supported embed types: `AppEmbed` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl * @default false */ enableStopAnswerGenerationEmbed?: boolean; /** * This is the minimum height (in pixels) for a full-height App. * Setting this height helps resolve issues with empty Apps and * other screens navigable from an App. * * @version SDK: 1.44.2 | ThoughtSpot: 10.15.0.cl * @default 500 * @example * ```js * const embed = new AppEmbed('#embed', { * ... // other app view config * fullHeight: true, * minimumHeight: 600, * }); * ``` */ minimumHeight?: number; /** * To enable the homepage announcement banner. * Controls the visibility of the announcement section * on the homepage. * * Supported embed types: `AppEmbed` * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other embed view config * enableHomepageAnnouncement: true, * }) * ``` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl */ enableHomepageAnnouncement?: boolean; /** * If set to true, enables visualization data caching on the Liveboard. * @type {boolean} * @version SDK: 1.49.0 | ThoughtSpot: 26.6.0.cl * @example * ```js * const embed = new AppEmbed('#tsEmbed', { * ... // other options * enableLiveboardDataCache: true, * }) * ``` */ enableLiveboardDataCache?: boolean; /** * Visual overrides to customize the chart or table properties. * @version SDK: 1.49.0 | ThoughtSpot: 26.6.0.cl */ visualOverrides?: VisualizationOverrides; } /** * APP_INIT data shape for AppEmbed. * @internal */ export interface AppEmbedAppInitData extends DefaultAppInitData { embedParams?: { spotterSidebarConfig?: SpotterSidebarViewConfig; }; } /** * Embeds full ThoughtSpot experience in a host application. * @group Embed components */ export class AppEmbed extends V1Embed { protected viewConfig: AppViewConfig; private defaultHeight; constructor(domSelector: DOMSelector, viewConfig: AppViewConfig); /** * Extends the default APP_INIT payload with `embedParams.spotterSidebarConfig` * so the conv-assist app can read sidebar configuration on initialisation. * * Precedence for `enablePastConversationsSidebar`: * `spotterSidebarConfig.enablePastConversationsSidebar` wins over the * deprecated top-level `enablePastConversationsSidebar` flag; if the former * is absent the latter is used as a fallback. * * An invalid `spotterDocumentationUrl` triggers a validation error and is * excluded from the payload rather than forwarded to the app. */ protected getAppInitData(): Promise; /** * Constructs a map of parameters to be passed on to the * embedded Liveboard or visualization. */ protected getEmbedParams(): string; private sendFullHeightLazyLoadData; /** * This is a handler for the RequestVisibleEmbedCoordinates event. * It is used to send the visible coordinates data to the host application. * @param data The event payload * @param responder The responder function */ private requestVisibleEmbedCoordinatesHandler; /** * Constructs the URL of the ThoughtSpot app page to be rendered. * @param pageId The ID of the page to be embedded. */ getIFrameSrc(): string; /** * Set the iframe height as per the computed height received * from the ThoughtSpot app. * @param data The event payload */ protected updateIFrameHeight: (data: MessagePayload) => void; private embedIframeCenter; private setIframeHeightForNonEmbedLiveboard; /** * Gets the ThoughtSpot route of the page for a particular page ID. * @param pageId The identifier for a page in the ThoughtSpot app. * @param modularHomeExperience */ private getPageRoute; /** * Formats the path provided by the user. * @param path The URL path. * @returns The URL path that the embedded app understands. */ private formatPath; /** * Navigate to particular page for app embed. eg:answers/pinboards/home * This is used for embedding answers, pinboards, visualizations and full application * only. * @param path string | number The string, set to iframe src and navigate to new page * eg: appEmbed.navigateToPage('pinboards') * When used with `noReload` (default: true) this can also be a number * like 1/-1 to go forward/back. * @param noReload boolean Trigger the navigation without reloading the page * @version SDK: 1.12.0 | ThoughtSpot: 8.4.0.cl, 8.4.1-sw */ navigateToPage(path: string | number, noReload?: boolean): void; /** * Destroys the ThoughtSpot embed, and remove any nodes from the DOM. * @version SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl */ destroy(): void; private postRender; private registerLazyLoadEvents; private unregisterLazyLoadEvents; /** * Renders the embedded application pages in the ThoughtSpot app. * @param renderOptions An object containing the page ID * to be embedded. */ render(): Promise; } /** * Enum for auth failure types. * This value is passed to the listener for {@link AuthStatus.FAILURE}. * @group Authentication / Init */ export enum AuthFailureType { /** * Authentication failed in the SDK authentication flow. * * Emitted when `init()` or auto-authentication cannot establish a logged-in session. * For example, this can happen because of an invalid token, an auth request failure, * or an auth promise rejection. */ SDK = "SDK", /** * Browser cookie access is blocked for the embedded app. * * Emitted when the iframe reports that required cookies * cannot be read or sent, commonly due to third-party cookie restrictions. */ NO_COOKIE_ACCESS = "NO_COOKIE_ACCESS", /** * The current authentication token or session has expired. * * Emitted when the embed receives an auth-expiry signal and starts auth refresh * handling. */ EXPIRY = "EXPIRY", /** * A generic authentication failure that does not match a more specific type. * * Emitted as a fallback for app-reported auth failures in standard auth flows. */ OTHER = "OTHER", /** * The user session timed out due to inactivity. * * Emitted when the app reports an idle-session timeout. */ IDLE_SESSION_TIMEOUT = "IDLE_SESSION_TIMEOUT", /** * The app reports that the user is unauthenticated. * * Used primarily to classify unauthenticated failures in Embedded SSO flows. */ UNAUTHENTICATED_FAILURE = "UNAUTHENTICATED_FAILURE" } /** * Enum for auth status emitted by the emitter returned from {@link init}. * @group Authentication / Init */ export enum AuthStatus { /** * Emits when the SDK fails to authenticate. */ FAILURE = "FAILURE", /** * Emits when the SDK authentication step completes * successfully (e.g., token exchange, cookie set). * This fires before any iframe is rendered. Use * this to know that auth passed and it is safe to * proceed with rendering. The callback receives no * arguments. * @example * ```js * const authEE = init({ ... }); * authEE.on(AuthStatus.SDK_SUCCESS, () => { * // Auth done, iframe not loaded yet * }); * ``` */ SDK_SUCCESS = "SDK_SUCCESS", /** * @hidden * Emits when iframe is loaded and session * information is available. */ SESSION_INFO_SUCCESS = "SESSION_INFO_SUCCESS", /** * Emits when the ThoughtSpot app inside the * embedded iframe confirms its session is active. * This fires after the iframe loads and sends back an `AuthInit` event. * @param sessionInfo Information about the user session, with details like `userGUID`. * @see EmbedEvent.AuthInit * @example * ```js * const authEE = init({ ... }); * authEE.on(AuthStatus.SUCCESS, (sessionInfo) => { * // App is loaded and authenticated * console.log(sessionInfo.userGUID); * }); * ``` */ SUCCESS = "SUCCESS", /** * Emits when a user logs out */ LOGOUT = "LOGOUT", /** * Emitted when inPopup is true in the SAMLRedirect flow and the * popup is waiting to be triggered either programmatically * or by the trigger button. * @version SDK: 1.19.0 */ WAITING_FOR_POPUP = "WAITING_FOR_POPUP", /** * Emitted when the SAML popup is closed without authentication */ SAML_POPUP_CLOSED_NO_AUTH = "SAML_POPUP_CLOSED_NO_AUTH" } /** * Event emitter returned from {@link init}. * @group Authentication / Init */ export interface AuthEventEmitter { /** * Register a listener on Auth failure. * @param event * @param listener */ on(event: AuthStatus.FAILURE, listener: (failureType: AuthFailureType) => void): this; /** * Register a listener on Auth SDK success. * @param event * @param listener */ on(event: AuthStatus.SDK_SUCCESS | AuthStatus.LOGOUT | AuthStatus.WAITING_FOR_POPUP | AuthStatus.SAML_POPUP_CLOSED_NO_AUTH, listener: () => void): this; on(event: AuthStatus.SUCCESS, listener: (sessionInfo: any) => void): this; once(event: AuthStatus.FAILURE, listener: (failureType: AuthFailureType) => void): this; once(event: AuthStatus.SDK_SUCCESS | AuthStatus.LOGOUT | AuthStatus.WAITING_FOR_POPUP | AuthStatus.SAML_POPUP_CLOSED_NO_AUTH, listener: () => void): this; once(event: AuthStatus.SUCCESS, listener: (sessionInfo: any) => void): this; /** * Trigger an event on the emitter returned from init. * @param {@link AuthEvent} */ emit(event: AuthEvent, ...args: any[]): boolean; /** * Remove listener from the emitter returned from init. * @param event * @param listener * @param context * @param once */ off(event: AuthStatus, listener: (...args: any[]) => void, context: any, once: boolean): this; /** * Remove all the event listeners * @param event */ removeAllListeners(event: AuthStatus): this; } /** * Events which can be triggered on the emitter returned from {@link init}. * @group Authentication / Init */ export enum AuthEvent { /** * Manually trigger the SSO popup. This is useful when * authStatus is SAMLRedirect/OIDCRedirect and inPopup is set to true */ TRIGGER_SSO_POPUP = "TRIGGER_SSO_POPUP" } export interface executeTMLInput { metadata_tmls: string[]; import_policy?: "PARTIAL" | "ALL_OR_NONE" | "VALIDATE_ONLY"; create_new?: boolean; } export interface exportTMLInput { metadata: { identifier: string; type?: "LIVEBOARD" | "ANSWER" | "LOGICAL_TABLE" | "CONNECTION"; }[]; export_associated?: boolean; export_fqn?: boolean; edoc_format?: "YAML" | "JSON"; } /** * Prefetches static resources from the specified URL. Web browsers can then cache the * prefetched resources and serve them from the user's local disk to provide faster access * to your app. * @param url The URL provided for prefetch * @param prefetchFeatures Specify features which needs to be prefetched. * @param additionalFlags This can be used to add any URL flag. * @version SDK: 1.4.0 | ThoughtSpot: ts7.sep.cl, 7.2.1 * @group Global methods */ export const prefetch: (url?: string, prefetchFeatures?: PrefetchFeatures[], additionalFlags?: { [key: string]: string | number | boolean; }) => void; /** * Initializes the Visual Embed SDK globally and perform * authentication if applicable. This function needs to be called before any ThoughtSpot * component like Liveboard etc can be embedded. But need not wait for AuthEvent.SUCCESS * to actually embed. That is handled internally. * @param embedConfig The configuration object containing ThoughtSpot host, * authentication mechanism and so on. * @example * ```js * const authStatus = init({ * thoughtSpotHost: 'https://my.thoughtspot.cloud', * authType: AuthType.None, * }); * authStatus.on(AuthStatus.FAILURE, (reason) => { // do something here }); * ``` * @returns {@link AuthEventEmitter} event emitter which emits events on authentication success, * failure and logout. See {@link AuthStatus} * @version SDK: 1.0.0 | ThoughtSpot ts7.april.cl, 7.2.1 * @group Authentication / Init */ export const init: (embedConfig: EmbedConfig) => AuthEventEmitter | null; /** * Logs out from ThoughtSpot. This also sets the autoLogin flag to false, to * prevent the SDK from automatically logging in again. * * You can call the `init` method again to re login, if autoLogin is set to * true in this second call it will be honored. * @param doNotDisableAutoLogin This flag when passed will not disable autoLogin * @returns Promise which resolves when logout completes. * @version SDK: 1.10.1 | ThoughtSpot: 8.2.0.cl, 8.4.1-sw * @group Global methods */ export const logout: (doNotDisableAutoLogin?: boolean) => Promise; /** * Imports TML representation of the metadata objects into ThoughtSpot. * @param data * @returns imports TML data into ThoughtSpot * @example * ```js * executeTML({ * //Array of metadata Tmls in string format * metadata_tmls: [ * "'\''{\"guid\":\"9bd202f5-d431-44bf-9a07-b4f7be372125\", * \"liveboard\":{\"name\":\"Parameters Liveboard\"}}'\''" * ], * import_policy: 'PARTIAL', // Specifies the import policy for the TML import. * create_new: false, // If selected, creates TML objects with new GUIDs. * }).then(result => { * console.log(result); * }).catch(error => { * console.error(error); * }); * ``` * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl * @group Global methods */ export const executeTML: (data: executeTMLInput) => Promise; /** * Exports TML representation of the metadata objects from ThoughtSpot in JSON or YAML * format. * @param data * @returns exports TML data * @example * ```js * exportTML({ * metadata: [ * { * type: "LIVEBOARD", //Metadata Type * identifier: "9bd202f5-d431-44bf-9a07-b4f7be372125" //Metadata Id * } * ], * export_associated: false,//indicates whether to export associated metadata objects * export_fqn: false, //Adds FQNs of the referenced objects.For example, if you are * //exporting a Liveboard and its associated objects, the API * //returns the Liveboard TML data with the FQNs of the referenced * //worksheet. If the exported TML data includes FQNs, you don't need * //to manually add FQNs of the referenced objects during TML import. * edoc_format: "JSON" //It takes JSON or YAML value * }).then(result => { * console.log(result); * }).catch(error => { * console.error(error); * }); * ``` * @version SDK: 1.23.0 | ThoughtSpot: 9.4.0.cl * @group Global methods */ export const exportTML: (data: exportTMLInput) => Promise; /** * Reloads the ThoughtSpot iframe. * @version SDK: 1.43.1 * @param iFrame * @group Global methods */ export const reloadIframe: (iFrame: HTMLIFrameElement) => void; /** * The configuration for the embedded Liveboard or visualization page view. * @group Embed components */ export interface LiveboardViewConfig extends BaseViewConfig, SearchLiveboardCommonViewConfig, LiveboardAppEmbedViewConfig { /** * If set to true, the embedded object container dynamically resizes * according to the height of the Liveboard. * * **Note**: Using fullHeight loads all visualizations on the * Liveboard simultaneously, which results in multiple warehouse * queries and potentially a longer wait for the topmost * visualizations to display on the screen. * Setting `fullHeight` to `false` fetches visualizations * incrementally as users scroll the page to view the charts and tables. * * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.1.0 | ThoughtSpot: ts7.may.cl, 7.2.1 * @example * ```js * const embed = new LiveboardEmbed('#embed', { * ... // other liveboard view config * fullHeight: true, * }); * ``` */ fullHeight?: boolean; /** * This is the minimum height (in pixels) for a full-height Liveboard. * Setting this height helps resolve issues with empty Liveboards and * other screens navigable from a Liveboard. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.5.0 | ThoughtSpot: ts7.oct.cl, 7.2.1 * @deprecated Use `minimumHeight` instead. * @default 500 * @example * ```js * const embed = new LiveboardEmbed('#embed', { * ... // other liveboard view config * fullHeight: true, * defaultHeight: 600, * }); * ``` */ defaultHeight?: number; /** * This is the minimum height (in pixels) for a full-height Liveboard. * Setting this height helps resolve issues with empty Liveboards and * other screens navigable from a Liveboard. * * @version SDK: 1.44.2 | ThoughtSpot: 10.15.0.cl * @default 500 * @example * ```js * const embed = new LiveboardEmbed('#embed', { * ... // other liveboard view config * fullHeight: true, * minimumHeight: 600, * }); * ``` */ minimumHeight?: number; /** * If set to true, the context menu in visualizations will be enabled. * @version SDK: 1.1.0 | ThoughtSpot: 8.1.0.sw * @deprecated this option is deprecated. * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * enableVizTransformations:true, * }) * ``` */ enableVizTransformations?: boolean; /** * The Liveboard to display in the embedded view. * Use either liveboardId or pinboardId to reference the Liveboard to embed. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.3.0 | ThoughtSpot ts7.aug.cl, 7.2.1 * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * liveboardId:'id of liveboard', * }) * ``` */ liveboardId?: string; /** * To support backward compatibility * @hidden */ pinboardId?: string; /** * The visualization within the Liveboard to display. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.9.1 | ThoughtSpot: 8.1.0.cl, 8.4.1-sw * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * vizId:'430496d6-6903-4601-937e-2c691821af3c', * }) * ``` */ vizId?: string; /** * If set to true, all filter chips from a * Liveboard page will be read-only (no X buttons) * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.3.0 | ThoughtSpot ts7.aug.cl, 7.2.1.sw * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * preventLiveboardFilterRemoval:true, * }) * ``` */ preventLiveboardFilterRemoval?: boolean; /** * Array of visualization IDs which should be visible when the Liveboard * renders. This can be changed by triggering the `SetVisibleVizs` * event. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.9.1 | ThoughtSpot: 8.1.0.cl, 8.4.1-sw * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * visibleVizs: [ * '430496d6-6903-4601-937e-2c691821af3c', * 'f547ec54-2a37-4516-a222-2b06719af726' * ] * }) * ``` */ visibleVizs?: string[]; /** * To support backward compatibility * @hidden */ preventPinboardFilterRemoval?: boolean; /** * Render embedded Liveboards and visualizations in the * new Liveboard experience mode. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.14.0 | ThoughtSpot: 8.6.0.cl, 8.8.1-sw * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * liveboardV2:true, * }) * ``` */ liveboardV2?: boolean; /** * Set a Liveboard tab as an active tab. * Specify the tab ID. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.15.0 | ThoughtSpot: 8.7.0.cl, 8.8.1-sw * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * activeTabId:'id-1234', * }) * ``` */ activeTabId?: string; /** * The GUID of a saved personalized view to load. * A personalized view is a saved configuration of a Liveboard * that includes specific filter selections. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.46.0 | ThoughtSpot: 26.4.0.cl * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * liveboardId: 'liveboard-guid', * personalizedViewId: 'view-guid', * activeTabId: 'tab-guid', * }) * ``` */ personalizedViewId?: string; /** * Show or hide the tab panel of the embedded Liveboard. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.25.0 | ThoughtSpot: 9.6.0.cl, 9.8.0.sw * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * hideTabPanel:true, * }) * ``` */ hideTabPanel?: boolean; /** * Show a preview image of the visualization before the visualization loads. * Only works for visualizations embeds with a viz id. * * Also, viz snapshot should be enabled in the ThoughtSpot instance. * Contact ThoughtSpot support to enable this feature. * * Since this will show preview images, be careful that it may show * undesired data to the user when using row level security. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * liveboardId: 'liveboard-id', * vizId: 'viz-id', * showPreviewLoader: true, * }); * embed.render(); * ``` */ showPreviewLoader?: boolean; /** * The Liveboard to run on regular intervals to fetch the cdw token. * * Supported embed types: `LiveboardEmbed` * @hidden * @version SDK: 1.35.0 | ThoughtSpot: 10.6.0.cl * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * oAuthPollingInterval: 30000, * }) * ``` */ oAuthPollingInterval?: number; /** * The Liveboard is set to force a token fetch during the initial load. * * Supported embed types: `LiveboardEmbed` * @hidden * @version SDK: 1.35.0 | ThoughtSpot: 10.6.0.cl * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * isForceRedirect: false, * }) * ``` */ isForceRedirect?: boolean; /** * The source connection ID for authentication. * * Supported embed types: `LiveboardEmbed` * @hidden * @version SDK: 1.35.0 | ThoughtSpot: 10.6.0.cl * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * dataSourceId: '', * }) * ``` */ dataSourceId?: string; /** * The list of tab IDs to hide from the embedded Liveboard. * These tabs will be hidden from their respective Liveboards. * Use this to hide a tab ID. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 10.1.0.sw * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... // other embed view config * hiddenTabs: [ * '430496d6-6903-4601-937e-2c691821af3c', * 'f547ec54-2a37-4516-a222-2b06719af726' * ] * }); * ``` */ hiddenTabs?: string[]; /** * The list of tab IDs to show in the embedded Liveboard. * Only the tabs specified in the array will be shown in the Liveboard. * * Use either `visibleTabs` or `hiddenTabs`. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.26.0 | ThoughtSpot: 9.7.0.cl, 10.1.0.sw * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... // other embed view config * visibleTabs: [ * '430496d6-6903-4601-937e-2c691821af3c', * 'f547ec54-2a37-4516-a222-2b06719af726' * ] * }) * ``` */ visibleTabs?: string[]; /** * This flag is used to enable/disable the styling and grouping in a Liveboard. Use {@link isLiveboardMasterpiecesEnabled} instead. * @deprecated This flag is deprecated. * * Supported embed types: `LiveboardEmbed`, `AppEmbed` * @type {boolean} * @version SDK: 1.40.0 | ThoughtSpot: 10.11.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isLiveboardStylingAndGroupingEnabled: true, * }) * ``` */ isLiveboardStylingAndGroupingEnabled?: boolean; /** * This flag is used to enable/disable the png embedding of liveboard in scheduled * mails * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @type {boolean} * @version SDK: 1.42.0 | ThoughtSpot: 10.14.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isPNGInScheduledEmailsEnabled: true, * }) * ``` */ isPNGInScheduledEmailsEnabled?: boolean; /** * Enables the 'what you see is what you get' PDF export for Liveboards. Each tab is rendered on a single page * following the exact UI layout, instead of splitting visualizations across multiple A4 pages. * This feature is GA from version 26.5.0.cl. It is disabled by default in embed deployments. * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @type {boolean} * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isContinuousLiveboardPDFEnabled: true, * }) * ``` */ isContinuousLiveboardPDFEnabled?: boolean; /** * This flag is used to enable/disable the XLSX/CSV download option for Liveboards * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @type {boolean} * @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isLiveboardXLSXCSVDownloadEnabled: true, * }) * ``` */ isLiveboardXLSXCSVDownloadEnabled?: boolean; /** * This flag is used to enable/disable the granular XLSX/CSV schedules feature * * Supported embed types: `AppEmbed`, `LiveboardEmbed` * @type {boolean} * @version SDK: 1.46.0 | ThoughtSpot: 26.3.0.cl * @example * ```js * // Replace with embed component name. For example, AppEmbed or LiveboardEmbed * const embed = new ('#tsEmbed', { * ... // other embed view config * isGranularXLSXCSVSchedulesEnabled: true, * }) * ``` */ isGranularXLSXCSVSchedulesEnabled?: boolean; /** * This flag is used to enable the full height lazy load data. * * @type {boolean} * @version SDK: 1.40.0 | ThoughtSpot: 10.12.0.cl * @default false * @example * ```js * const embed = new LiveboardEmbed('#embed-container', { * // ...other options * fullHeight: true, * lazyLoadingForFullHeight: true, * }) * ``` */ lazyLoadingForFullHeight?: boolean; /** * The margin to be used for lazy loading. * * For example, if the margin is set to '10px', * the visualization will be loaded 10px before its top edge is visible in the * viewport. * * The format is similar to CSS margin. * * @type {string} * @version SDK: 1.40.0 | ThoughtSpot: 10.12.0.cl * @example * ```js * const embed = new LiveboardEmbed('#embed-container', { * // ...other options * fullHeight: true, * lazyLoadingForFullHeight: true, * // Using 0px, the visualization will be only loaded when it's visible in the viewport. * lazyLoadingMargin: '0px', * }) * ``` */ lazyLoadingMargin?: string; /** * showSpotterLimitations : show limitation text * of the spotter underneath the chat input. * default is false. * * @type {boolean} * @version SDK: 1.41.1 | ThoughtSpot: 10.5.0.cl * @example * ```js * const embed = new LiveboardEmbed('#embed-container', { * // ...other options * showSpotterLimitations: true, * }) * ``` */ showSpotterLimitations?: boolean; /** * updatedSpotterChatPrompt : Controls the updated spotter chat prompt. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.45.0 | ThoughtSpot: 26.2.0.cl * @default false * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * updatedSpotterChatPrompt : true, * }) * ``` */ updatedSpotterChatPrompt?: boolean; /** * Enables the stop answer generation button in the Spotter embed UI, * allowing users to interrupt an ongoing answer generation. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.48.0 | ThoughtSpot: 26.5.0.cl * @default false */ enableStopAnswerGenerationEmbed?: boolean; /** * Configuration for customizing Spotter chat UI * branding in tool response cards. * * Supported embed types: `LiveboardEmbed` * @version SDK: 1.46.0 | ThoughtSpot: 26.4.0.cl * @example * ```js * const embed = new LiveboardEmbed('#tsEmbed', { * ... //other embed view config * spotterChatConfig: { * hideToolResponseCardBranding: true, * toolResponseCardBrandingLabel: 'MyBrand', * }, * }) * ``` */ spotterChatConfig?: SpotterChatViewConfig; /** * If set to true, enables visualization data caching on the Liveboard. * @type {boolean} * @version SDK: 1.49.0 | ThoughtSpot: 26.6.0.cl * @example * ```js * const embed = new LiveboardEmbed('#embed-container', { * ... // other options * enableLiveboardDataCache: true, * }) * ``` */ enableLiveboardDataCache?: boolean; } /** * Embed a ThoughtSpot Liveboard or visualization. When rendered it already * waits for the authentication to complete, so you need not wait for * `AuthStatus.SUCCESS`. * @group Embed components * @example * ```js * import { .. } from '@thoughtspot/visual-embed-sdk'; * init({ ... }); * const embed = new LiveboardEmbed("#container", { * liveboardId: , * // .. other params here. * }) * ``` */ export class LiveboardEmbed extends V1Embed { protected viewConfig: LiveboardViewConfig; private defaultHeight; constructor(domSelector: DOMSelector, viewConfig: LiveboardViewConfig); /** * Construct a map of params to be passed on to the * embedded Liveboard or visualization. */ protected getEmbedParams(): string; protected getEmbedParamsObject(): any; private getIframeSuffixSrc; private sendFullHeightLazyLoadData; /** * This is a handler for the RequestVisibleEmbedCoordinates event. * It is used to send the visible coordinates data to the host application. * @param data The event payload * @param responder The responder function */ private requestVisibleEmbedCoordinatesHandler; /** * Construct the URL of the embedded ThoughtSpot Liveboard or visualization * to be loaded within the iFrame. */ private getIFrameSrc; /** * Set the iframe height as per the computed height received * from the ThoughtSpot app. * @param data The event payload */ private updateIFrameHeight; private embedIframeCenter; private setIframeHeightForNonEmbedLiveboard; private setActiveTab; private showPreviewLoader; /** * @hidden * Internal state to track the current liveboard id. * This is used to navigate to the correct liveboard when the prerender is visible. */ currentLiveboardState: { liveboardId: string; vizId: string; activeTabId: string; personalizedViewId: string; }; protected beforePrerenderVisible(): void; protected handleRenderForPrerender(): Promise; /** * Triggers an event to the embedded app * @param {HostEvent} messageType The event type * @param {any} data The payload to send with the message * @returns A promise that resolves with the response from the embedded app */ trigger(messageType: HostEventT, data?: TriggerPayload, context?: ContextT): Promise>; /** * Destroys the ThoughtSpot embed, and remove any nodes from the DOM. * @version SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl */ destroy(): void; private postRender; private registerLazyLoadEvents; private unregisterLazyLoadEvents; /** * Render an embedded ThoughtSpot Liveboard or visualization * @param renderOptions An object specifying the Liveboard ID, * visualization ID and the runtime filters. */ render(): Promise; navigateToLiveboard(liveboardId: string, vizId?: string, activeTabId?: string, personalizedViewId?: string): void; /** * Returns the full url of the Liveboard/visualization which can be used to open * this Liveboard inside the full ThoughtSpot application in a new tab. * @returns url string */ getLiveboardUrl(): string; } /** * @hidden */ export class PinboardEmbed extends LiveboardEmbed { } interface SearchOptions$1 { /** * Search tokens to pass in the query. */ searchTokenString: string; /** * Boolean to define if the search should be executed or not. * If it is executed, the focus is placed on the results. * If it’s not executed, the focus is placed at the end of * the token string in the search bar. */ executeSearch?: boolean; } enum DataPanelCustomColumnGroupsAccordionState$1 { /** * Expand all the accordion initially in data panel v2. */ EXPAND_ALL = "EXPAND_ALL", /** * Collapse all the accordions initially in data panel v2. */ COLLAPSE_ALL = "COLLAPSE_ALL", /** * Expand the first accordion and collapse the rest. */ EXPAND_FIRST = "EXPAND_FIRST" } /** * The configuration attributes for the embedded search view. * @group Embed components */ export interface SearchViewConfig extends SearchLiveboardCommonViewConfig, Omit { /** * If set to true, the data sources panel is collapsed on load, * but can be expanded manually. * * Supported embed types: `SearchEmbed` * @version SDK: 1.1.0 | ThoughtSpot: 8.1.0.sw * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * collapseDataSources:true, * }) * ``` */ collapseDataSources?: boolean; /** * If set to true, the data panel is collapsed on load, * but can be expanded manually. * * Supported embed types: `SearchEmbed` * @version SDK: 1.34.0 | ThoughtSpot: 10.3.0.cl * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * collapseDataPanel:true, * }) * ``` */ collapseDataPanel?: boolean; /** * Show or hide the data sources panel. * * Supported embed types: `SearchEmbed` * @version SDK: 1.2.0 | ThoughtSpot: 9.1.0.sw * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * hideDataSources:true, * }) * ``` */ hideDataSources?: boolean; /** * Show or hide the charts and tables in search answers. * This attribute can be used to create a custom visualization * using raw answer data. * * Supported embed types: `SearchEmbed` * @version SDK: 1.2.0 | ThoughtSpot: 9.1.0.sw * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * hideResults:true, * }) * ``` */ hideResults?: boolean; /** * If set to true, the Search Assist feature is enabled. * * Supported embed types: `SearchEmbed` * @version SDK: 1.13.0 | ThoughtSpot: 8.5.0.cl, 8.8.1-sw * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * enableSearchAssist:true, * }) * ``` */ enableSearchAssist?: boolean; /** * If set to true, the tabular view is set as the default * format for presenting search data. * * Supported embed types: `SearchEmbed` * @version SDK: 1.1.0 | ThoughtSpot: 8.1.0.sw * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * forceTable:true, * }) * ``` */ forceTable?: boolean; /** * The array of data source GUIDs to set on load. * Only a single data source is supported currently. * Use {@link dataSource} instead. * @deprecated Use `dataSource` instead. * * Supported embed types: `SearchEmbed` * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * dataSources:['id-234','id-456'], * }) * ``` */ dataSources?: string[]; /** * The data source GUID to set on load. * * Supported embed types: `SearchEmbed` * @version SDK: 1.19.0 * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * dataSource:'id-234', * }) * ``` */ dataSource?: string; /** * The initial search query to load the answer with. * Use {@link searchOptions} instead. * @deprecated * */ searchQuery?: string; /** * Configuration for search options. * Includes the following properties: * * `searchTokenString`: Search tokens to pass in the query. * * `executeSearch`: Boolean to define if the search should be executed or not. * If it is executed, the focus is placed on the results. * If it’s not executed, the focus is placed at the end of * the token string in the search bar. * * Supported embed types: `SearchEmbed` * @example * ```js * searchOptions: { * searchTokenString: '[quantity purchased] [region]', * executeSearch: true, * } * ``` */ searchOptions?: SearchOptions$1; /** * Exclude the search token string from the URL. * If set to true, the search token string is not appended to the URL. * * Supported embed types: `SearchEmbed` * @version SDK: 1.35.7 | ThoughtSpot: 10.8.0.cl * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * searchOptions: { * searchTokenString: '[quantity purchased] [region]', * executeSearch: true, * }, * excludeSearchTokenStringFromURL: true, * }); * ``` */ excludeSearchTokenStringFromURL?: boolean; /** * The GUID of a saved answer to load initially. * * Supported embed types: `SearchEmbed` * @version SDK: 1.1.0 | ThoughtSpot: 8.1.0.sw * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * answerId:'sed-1234', * }) * ``` */ answerId?: string; /** * If set to true, the search page will render without the Search Bar * The chart/table should still be visible. * * Supported embed types: `SearchEmbed` * @version SDK: 1.21.0 | ThoughtSpot: 9.2.0.cl, 9.5.0.sw * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * hideSearchBar:true, * }) * ``` */ hideSearchBar?: boolean; /** * Flag to set if last selected dataSource should be used * * Supported embed types: `SearchEmbed` * @version SDK: 1.24.0 */ useLastSelectedSources?: boolean; /** * To set the initial state of the search bar in case of saved-answers. * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl * @deprecated Use {@link collapseSearchBar} instead * @default false */ collapseSearchBarInitially?: boolean; /** * This controls the initial behaviour of custom column groups accordion. * It takes DataPanelCustomColumnGroupsAccordionState enum values as input. * List of different enum values:- * - EXPAND_ALL: Expand all the accordion initially in data panel v2. * - COLLAPSE_ALL: Collapse all the accordions initially in data panel v2. * - EXPAND_FIRST: Expand the first accordion and collapse the rest. * * Supported embed types: `SearchEmbed` * @version SDK: 1.32.0 | ThoughtSpot: 10.0.0.cl * @default DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * dataPanelCustomGroupsAccordionInitialState: * DataPanelCustomColumnGroupsAccordionState.EXPAND_ALL, * }); * ``` */ dataPanelCustomGroupsAccordionInitialState?: DataPanelCustomColumnGroupsAccordionState$1; /** * Flag to remove focus from search bar initially when user * lands on search embed page. * * Supported embed types: `SearchEmbed` * @version SDK: 1.32.0 | ThoughtSpot: 10.3.0.cl * @default true * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * focusSearchBarOnRender: false, * }); * ``` */ focusSearchBarOnRender?: boolean; /** * Enable or disable Muze chart phase 1 GA * * Supported embed types: `SearchEmbed` * @version SDK: 1.49.0 | ThoughtSpot Cloud: 26.6.0.cl * @default false * @example * ```js * const embed = new SearchEmbed('#tsEmbed', { * ... // other embed view config * newChartsLibrary: true, * }) * ``` */ newChartsLibrary?: boolean; /** * Visual overrides to customize the chart or table properties. * @version SDK: 1.49.0 | ThoughtSpot: 26.6.0.cl */ visualOverrides?: VisualizationOverrides; } export interface SearchAppInitData extends DefaultAppInitData { searchOptions?: SearchOptions$1; embedParams?: { visualOverridesParams?: VisualizationOverrides | null; }; } /** * Embed ThoughtSpot search * @group Embed components */ export class SearchEmbed extends TsEmbed { /** * The view configuration for the embedded ThoughtSpot search. */ protected viewConfig: SearchViewConfig; constructor(domSelector: DOMSelector, viewConfig: SearchViewConfig); /** * Get the state of the data sources panel that the embedded * ThoughtSpot search will be initialized with. */ private getDataSourceMode; protected getSearchInitData(): { searchOptions?: { searchTokenString: string; }; }; protected getAppInitData(): Promise; protected getEmbedParamsObject(): Record; protected getEmbedParams(): string; /** * Construct the URL of the embedded ThoughtSpot search to be * loaded in the iframe * @param answerId The GUID of a saved answer * @param dataSources A list of data source GUIDs */ getIFrameSrc(): string; /** * Render the embedded ThoughtSpot search */ render(): Promise; } /** * @group Embed components */ export interface SearchBarViewConfig extends BaseViewConfig, SearchLiveboardCommonViewConfig { /** * The array of data source GUIDs to set on load. * Only a single data source is supported currently. * * Supported embed types: `SearchBarEmbed` * @version SDK: 1.1.0 | ThoughtSpot: 8.1.1-sw * @deprecated Use `dataSource` instead * @example * ```js * const embed = new SearchBarEmbed('#tsEmbed', { * ... //other embed view config * dataSources:['id-2345','id-2345'], * }) * ``` */ dataSources?: string[]; /** * Pass the ID of the source to be selected. * * Supported embed types: `SearchBarEmbed` * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw * @example * ```js * const embed = new SearchBarEmbed('#tsEmbed', { * ... //other embed view config * dataSource:'id-2345', * }) * ``` */ dataSource?: string; /** * Boolean to define if the last selected data source should be used * * Supported embed types: `SearchBarEmbed` * @version SDK: 1.24.0 | ThoughtSpot: 9.5.0.cl, 9.5.0.sw * @example * ```js * const embed = new SearchBarEmbed('#tsEmbed', { * ... //other embed view config * useLastSelectedSources:false, * }) * ``` */ useLastSelectedSources?: boolean; /** * Configuration for search options. * Includes the following properties: * * `searchTokenString`: Search tokens to pass in the query. * * `executeSearch`: Boolean to define if the search should be executed or not. * If it is executed, the focus is placed on the results. * If it’s not executed, the focus is placed at the end of * the token string in the search bar. * * Supported embed types: `SearchBarEmbed` * @version SDK: 1.2.0 | ThoughtSpot: 9.4.0.sw * @example * ```js * const embed = new SearchBarEmbed('#tsEmbed', { * ... //other embed view config * searchOptions: { * searchTokenString: '[quantity purchased] [region]', * executeSearch: true, * } * }) * ``` */ searchOptions?: SearchOptions$1; /** * Exclude the search token string from the URL. * If set to true, the search token string is not appended to the URL. * * Supported embed types: `SearchBarEmbed` * @version SDK: 1.35.7 | ThoughtSpot: 10.8.0.cl * @example * ```js * const embed = new SearchBarEmbed('#tsEmbed', { * searchOptions: { * searchTokenString: '[quantity purchased] [region]', * executeSearch: true, * }, * excludeSearchTokenStringFromURL: true, * }); * ``` */ excludeSearchTokenStringFromURL?: boolean; } interface SearchAppInitData$1 extends DefaultAppInitData { searchOptions: SearchOptions$1; } /** * Embed ThoughtSpot search bar * @version SDK: 1.18.0 | ThoughtSpot: 8.10.0.cl, 9.0.1-sw * @group Embed components */ export class SearchBarEmbed extends TsEmbed { /** * The view configuration for the embedded ThoughtSpot search bar. */ protected viewConfig: SearchBarViewConfig; protected embedComponentType: string; constructor(domSelector: string, viewConfig: SearchBarViewConfig); protected getEmbedParamsObject(): Record; /** * Construct the URL of the embedded ThoughtSpot search to be * loaded in the iframe * @param dataSources A list of data source GUIDs */ private getIFrameSrc; /** * Render the embedded ThoughtSpot search */ render(): Promise; protected getSearchInitData(): { searchOptions: SearchOptions$1; }; protected getAppInitData(): Promise; } /** * Configuration for bodyless conversation options. * @group Embed components */ export interface SpotterAgentEmbedViewConfig extends Omit { /** * The ID of the Model to use for the conversation. */ worksheetId: string; } /** * Configuration for conversation options. * Use {@link SpotterAgentEmbedViewConfig} instead * @deprecated from SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl * @group Embed components */ export interface BodylessConversationViewConfig extends SpotterAgentEmbedViewConfig { } export interface SpotterAgentMessageViewConfig extends SpotterAgentEmbedViewConfig { sessionId: string; genNo: number; acSessionId: string; acGenNo: number; convId: string; messageId: string; } class ConversationMessage extends TsEmbed { protected viewConfig: SpotterAgentMessageViewConfig; constructor(container: HTMLElement, viewConfig: SpotterAgentMessageViewConfig); protected getEmbedParamsObject(): Record; getIframeSrc(): string; render(): Promise; } /** * Create a conversation embed, which can be integrated inside * chatbots or other conversational interfaces. * @version SDK: 1.37.0 | ThoughtSpot: 10.9.0.cl * @group Embed components * @example * ```js * import { SpotterAgentEmbed } from '@thoughtspot/visual-embed-sdk'; * * const conversation = new SpotterAgentEmbed({ * worksheetId: 'worksheetId', * }); * * const { container, error } = await conversation.sendMessage('show me sales by region'); * * // append the container to the DOM * document.body.appendChild(container); // or to any other element * ``` */ export class SpotterAgentEmbed { private viewConfig; private conversationService; constructor(viewConfig: SpotterAgentEmbedViewConfig); sendMessage(userMessage: string): Promise<{ error: any; container?: undefined; viz?: undefined; } | { container: HTMLDivElement; viz: ConversationMessage; error?: undefined; }>; /** * Send a message to the conversation service and return only the data. * @param userMessage - The message to send to the conversation service. * @returns The data from the conversation service. */ sendMessageData(userMessage: string): Promise<{ error: any; data?: undefined; } | { data: { convId: any; messageId: any; sessionId: any; genNo: any; acSessionId: any; acGenNo: any; }; error?: undefined; }>; } /** * Create a conversation embed, which can be integrated inside * chatbots or other conversational interfaces. * Use {@link SpotterAgentEmbed} instead * @deprecated from SDK: 1.39.0 | ThoughtSpot: 10.10.0.cl * @group Embed components * @example * ```js * import { SpotterAgentEmbed } from '@thoughtspot/visual-embed-sdk'; * * const conversation = new SpotterAgentEmbed({ * worksheetId: 'worksheetId', * }); * * const { container, error } = await conversation.sendMessage('show me sales by region'); * * // append the container to the DOM * document.body.appendChild(container); // or to any other element * ``` */ export class BodylessConversation extends SpotterAgentEmbed { constructor(viewConfig: BodylessConversationViewConfig); } export type SessionInfo = { releaseVersion: string; userGUID: string; currentOrgId: number; privileges: string[]; mixpanelToken: string; isPublicUser: boolean; clusterId: string; clusterName: string; [key: string]: any; }; /** * Returns the cached session info object and caches it for future use. * Once fetched the session info object is cached and returned from the cache on * subsequent calls. * This cache is cleared when inti is called OR resetCachedSessionInfo is called. * @example ```js * const sessionInfo = await getSessionInfo(); * console.log(sessionInfo); * ``` * @version SDK: 1.28.3 | ThoughtSpot: * * @returns {Promise} The session info object. */ export function getSessionInfo(): Promise; /** * Gets the embed configuration settings that were used to * initialize the SDK. * @returns {@link EmbedConfig} * * @example * ```js * import { getInitConfig } from '@thoughtspot/visual-embed-sdk'; * // Call the getInitConfig method to retrieve the embed configuration * const config = getInitConfig(); * // Log the configuration settings * console.log(config); * ``` * Returns the link:https://developers.thoughtspot.com/docs/Interface_EmbedConfig[EmbedConfig] * object, which contains the configuration settings used to * initialize the SDK, including the following: * * - `thoughtSpotHost` - ThoughtSpot host URL * - `authType`: The authentication method used. For example, * `AuthServerCookieless` for `AuthType.TrustedAuthTokenCookieless` * - `customizations` - Style, text, and icon customization settings * that were applied during the SDK initialization. * * The following JSON output shows the embed configuration * settings returned from the code in the previous example: * * @example * ```json * { * "thoughtSpotHost": "https://{ThoughtSpot-Host}", * "authType": "AuthServerCookieless", * "customizations": { * "style": { * "customCSS": { * "variables": { * "--ts-var-button--secondary-background": "#7492d5", * "--ts-var-button--secondary--hovers-background": "#aac2f8", * "--ts-var-root-background": "#f1f4f8" * } * } * } * }, * "loginFailedMessage": "Login failed, please try again", * "authTriggerText": "Authorize", * "disableTokenVerification": true, * "authTriggerContainer": "#your-own-div" * } * ``` * @version SDK: 1.19.0 | ThoughtSpot: 9.0.0.cl, 9.0.1.sw, and later * @group Global methods */ const getEmbedConfig: () => EmbedConfig; /** * Enum of mixpanel events * @hidden */ export const MIXPANEL_EVENT: { VISUAL_SDK_RENDER_START: string; VISUAL_SDK_CALLED_INIT: string; VISUAL_SDK_RENDER_COMPLETE: string; VISUAL_SDK_RENDER_FAILED: string; VISUAL_SDK_TRIGGER: string; VISUAL_SDK_ON: string; VISUAL_SDK_IFRAME_LOAD_PERFORMANCE: string; VISUAL_SDK_EMBED_CREATE: string; VERCEL_INTEGRATION_COMPLETED: string; }; /** * Pushes the event with its Property key-value map to mixpanel. * @param eventId * @param eventProps */ export function uploadMixpanelEvent(eventId: string, eventProps?: {}): void; /** * Fetch wrapper that adds the authentication token to the request. * Use this to call the ThoughtSpot APIs when using the visual embed sdk. * The interface for this method is the same as Web `Fetch`. * @param input * @param init * @example * ```js * tokenizedFetch("/api/rest/2.0/auth/session/user", { * // .. fetch options .. * }); * ``` * @version SDK: 1.28.0 * @group Global methods */ export const tokenizedFetch: typeof fetch; /** * Get answer from natural language query * @param query string * @param worksheetId string * @returns AnswerService and the suggestion response. * @version SDK: 1.33.1 | ThoughtSpot: 10.3.0.cl * @example * ```js * const { answer } = await getAnswerFromQuery('revenue', 'worksheetId'); * ``` */ export const getAnswerFromQuery: (query: string, worksheetId: string) => Promise<{ answer: AnswerService; suggestion: any; }>; /** * Creates a new Liveboard in ThoughtSpot using the provided AnswerService instances. * * Each answer will be added as a visualization to the newly created Liveboard. * * @param {AnswerService[]} answers - An array of initialized `AnswerService` instances * representing the answers to be added to the Liveboard. * @param {string} name - The name of the Liveboard to create. * @returns result Promise * @version SDK: 1.33.1 | ThoughtSpot: * * @example * ```js * import { EmbedEvent, AnswerService } from "@thoughtspot/visual-embed-sdk"; * * embed.on(EmbedEvent.Data, async () => { * try { * const answerService = await embed.getAnswerService(); * const lb = await createLiveboardWithAnswers( * [answerService], * "My Liveboard" * ); * console.log("Liveboard created:", lb); * } catch (err) { * console.error("Failed to create liveboard:", err); * } * }); * ``` */ export const createLiveboardWithAnswers: (answers: AnswerService[], name: string) => Promise; /** * Resets the auth token and a new token will be fetched on the next request. * @example * ```js * resetCachedAuthToken(); * ``` * @version SDK: 1.28.0 | ThoughtSpot: * * @group Authentication / Init */ export const resetCachedAuthToken: () => void; /** * Starts an automatic renderer that watches the DOM for iframes containing * the `tsmcp=true` query parameter and replaces them with fully configured * ThoughtSpot embed iframes. The query parameter is automatically added by * the ThoughtSpot MCP server. * * A {@link MutationObserver} is set up on `document.body` to detect both * directly added iframes and iframes nested within added container elements. * Each matching iframe is replaced in-place with a new ThoughtSpot embed * iframe that merges the original iframe's query parameters with the SDK * embed parameters. * * Call {@link MutationObserver.disconnect | observer.disconnect()} on the * returned observer to stop monitoring the DOM. * * @param viewConfig - Optional configuration for the auto-rendered embeds. * Accepts all properties from {@link AutoMCPFrameRendererViewConfig}. * Defaults to an empty config. * @returns A {@link MutationObserver} instance that is actively observing * `document.body`. Disconnect it when monitoring is no longer needed. * * @example * ```js * import { startAutoMCPFrameRenderer } from '@thoughtspot/visual-embed-sdk'; * * // Start watching the DOM for tsmcp iframes * const observer = startAutoMCPFrameRenderer({ * // optional view config overrides * }); * * // Later, stop watching * observer.disconnect(); * ``` * * @example * Detailed example of how to use the auto-frame renderer: * [Python React Agent Simple UI](https://github.com/thoughtspot/developer-examples/tree/main/mcp/python-react-agent-simple-ui) */ export function startAutoMCPFrameRenderer(viewConfig?: AutoMCPFrameRendererViewConfig): MutationObserver; export { getEmbedConfig as getInitConfig, }; }