@thoughtspot/visual-embed-sdk 1.53.0 → 1.53.2-beta
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/package.json +1 -1
- package/cjs/src/auth.d.ts.map +1 -1
- package/cjs/src/auth.js +25 -6
- package/cjs/src/auth.js.map +1 -1
- package/cjs/src/auth.spec.js +40 -8
- package/cjs/src/auth.spec.js.map +1 -1
- package/cjs/src/contracts/contracts.spec.js +169 -2
- package/cjs/src/contracts/contracts.spec.js.map +1 -1
- package/cjs/src/contracts/embed-event-payloads.d.ts +212 -14
- package/cjs/src/contracts/embed-event-payloads.d.ts.map +1 -1
- package/cjs/src/contracts/host-event-contracts.d.ts +11 -0
- package/cjs/src/contracts/host-event-contracts.d.ts.map +1 -1
- package/cjs/src/css-variables.d.ts +140 -0
- package/cjs/src/css-variables.d.ts.map +1 -1
- package/cjs/src/embed/app.d.ts +1 -0
- package/cjs/src/embed/app.d.ts.map +1 -1
- package/cjs/src/embed/app.js.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.d.ts +14 -1
- package/cjs/src/embed/auto-frame-renderer.d.ts.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.js +91 -2
- package/cjs/src/embed/auto-frame-renderer.js.map +1 -1
- package/cjs/src/embed/auto-frame-renderer.spec.js +112 -7
- package/cjs/src/embed/auto-frame-renderer.spec.js.map +1 -1
- package/cjs/src/embed/conversation.d.ts +14 -0
- package/cjs/src/embed/conversation.d.ts.map +1 -1
- package/cjs/src/embed/conversation.js.map +1 -1
- package/cjs/src/embed/conversation.spec.js +22 -0
- package/cjs/src/embed/conversation.spec.js.map +1 -1
- package/cjs/src/embed/host-events.spec.js +50 -0
- package/cjs/src/embed/host-events.spec.js.map +1 -1
- package/cjs/src/embed/liveboard.d.ts +2 -16
- package/cjs/src/embed/liveboard.d.ts.map +1 -1
- package/cjs/src/embed/liveboard.js +29 -10
- package/cjs/src/embed/liveboard.js.map +1 -1
- package/cjs/src/embed/liveboard.spec.js +139 -0
- package/cjs/src/embed/liveboard.spec.js.map +1 -1
- package/cjs/src/embed/spotter-utils.d.ts +1 -0
- package/cjs/src/embed/spotter-utils.d.ts.map +1 -1
- package/cjs/src/embed/spotter-utils.js +7 -1
- package/cjs/src/embed/spotter-utils.js.map +1 -1
- package/cjs/src/embed/spotter-utils.spec.js +19 -0
- package/cjs/src/embed/spotter-utils.spec.js.map +1 -1
- package/cjs/src/embed/ts-embed.d.ts +21 -16
- package/cjs/src/embed/ts-embed.d.ts.map +1 -1
- package/cjs/src/embed/ts-embed.js +77 -63
- package/cjs/src/embed/ts-embed.js.map +1 -1
- package/cjs/src/embed/ts-embed.spec.js +240 -7
- package/cjs/src/embed/ts-embed.spec.js.map +1 -1
- package/cjs/src/index.d.ts +2 -2
- package/cjs/src/index.d.ts.map +1 -1
- package/cjs/src/index.js.map +1 -1
- package/cjs/src/react/all-types-export.d.ts +1 -1
- package/cjs/src/react/all-types-export.d.ts.map +1 -1
- package/cjs/src/react/all-types-export.js.map +1 -1
- package/cjs/src/react/util.d.ts +8 -1
- package/cjs/src/react/util.d.ts.map +1 -1
- package/cjs/src/react/util.js.map +1 -1
- package/cjs/src/types.d.ts +249 -2
- package/cjs/src/types.d.ts.map +1 -1
- package/cjs/src/types.js +247 -0
- package/cjs/src/types.js.map +1 -1
- package/cjs/src/utils/runtimeTelemetry.d.ts +11 -0
- package/cjs/src/utils/runtimeTelemetry.d.ts.map +1 -0
- package/cjs/src/utils/runtimeTelemetry.js +34 -0
- package/cjs/src/utils/runtimeTelemetry.js.map +1 -0
- package/cjs/src/utils/runtimeTelemetry.spec.d.ts +2 -0
- package/cjs/src/utils/runtimeTelemetry.spec.d.ts.map +1 -0
- package/cjs/src/utils/runtimeTelemetry.spec.js +124 -0
- package/cjs/src/utils/runtimeTelemetry.spec.js.map +1 -0
- package/dist/{index-CyDR8j_0.js → index-DQ7r5f1z.js} +1 -1
- package/dist/src/auth.d.ts.map +1 -1
- package/dist/src/contracts/embed-event-payloads.d.ts +212 -14
- package/dist/src/contracts/embed-event-payloads.d.ts.map +1 -1
- package/dist/src/contracts/host-event-contracts.d.ts +11 -0
- package/dist/src/contracts/host-event-contracts.d.ts.map +1 -1
- package/dist/src/css-variables.d.ts +140 -0
- package/dist/src/css-variables.d.ts.map +1 -1
- package/dist/src/embed/app.d.ts +1 -0
- package/dist/src/embed/app.d.ts.map +1 -1
- package/dist/src/embed/auto-frame-renderer.d.ts +14 -1
- package/dist/src/embed/auto-frame-renderer.d.ts.map +1 -1
- package/dist/src/embed/conversation.d.ts +14 -0
- package/dist/src/embed/conversation.d.ts.map +1 -1
- package/dist/src/embed/liveboard.d.ts +2 -16
- package/dist/src/embed/liveboard.d.ts.map +1 -1
- package/dist/src/embed/spotter-utils.d.ts +1 -0
- package/dist/src/embed/spotter-utils.d.ts.map +1 -1
- package/dist/src/embed/ts-embed.d.ts +21 -16
- package/dist/src/embed/ts-embed.d.ts.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/react/all-types-export.d.ts +1 -1
- package/dist/src/react/all-types-export.d.ts.map +1 -1
- package/dist/src/react/util.d.ts +8 -1
- package/dist/src/react/util.d.ts.map +1 -1
- package/dist/src/types.d.ts +249 -2
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/runtimeTelemetry.d.ts +11 -0
- package/dist/src/utils/runtimeTelemetry.d.ts.map +1 -0
- package/dist/src/utils/runtimeTelemetry.spec.d.ts +2 -0
- package/dist/src/utils/runtimeTelemetry.spec.d.ts.map +1 -0
- package/dist/tsembed-react.es.js +474 -84
- package/dist/tsembed-react.js +473 -83
- package/dist/tsembed.es.js +542 -85
- package/dist/tsembed.js +541 -84
- package/dist/visual-embed-sdk-react-full.d.ts +649 -30
- package/dist/visual-embed-sdk-react.d.ts +646 -28
- package/dist/visual-embed-sdk.d.ts +642 -44
- package/lib/package.json +1 -1
- package/lib/src/auth.d.ts.map +1 -1
- package/lib/src/auth.js +25 -6
- package/lib/src/auth.js.map +1 -1
- package/lib/src/auth.spec.js +40 -8
- package/lib/src/auth.spec.js.map +1 -1
- package/lib/src/contracts/contracts.spec.js +169 -2
- package/lib/src/contracts/contracts.spec.js.map +1 -1
- package/lib/src/contracts/embed-event-payloads.d.ts +212 -14
- package/lib/src/contracts/embed-event-payloads.d.ts.map +1 -1
- package/lib/src/contracts/host-event-contracts.d.ts +11 -0
- package/lib/src/contracts/host-event-contracts.d.ts.map +1 -1
- package/lib/src/css-variables.d.ts +140 -0
- package/lib/src/css-variables.d.ts.map +1 -1
- package/lib/src/embed/app.d.ts +1 -0
- package/lib/src/embed/app.d.ts.map +1 -1
- package/lib/src/embed/app.js.map +1 -1
- package/lib/src/embed/auto-frame-renderer.d.ts +14 -1
- package/lib/src/embed/auto-frame-renderer.d.ts.map +1 -1
- package/lib/src/embed/auto-frame-renderer.js +91 -2
- package/lib/src/embed/auto-frame-renderer.js.map +1 -1
- package/lib/src/embed/auto-frame-renderer.spec.js +113 -8
- package/lib/src/embed/auto-frame-renderer.spec.js.map +1 -1
- package/lib/src/embed/conversation.d.ts +14 -0
- package/lib/src/embed/conversation.d.ts.map +1 -1
- package/lib/src/embed/conversation.js.map +1 -1
- package/lib/src/embed/conversation.spec.js +22 -0
- package/lib/src/embed/conversation.spec.js.map +1 -1
- package/lib/src/embed/host-events.spec.js +50 -0
- package/lib/src/embed/host-events.spec.js.map +1 -1
- package/lib/src/embed/liveboard.d.ts +2 -16
- package/lib/src/embed/liveboard.d.ts.map +1 -1
- package/lib/src/embed/liveboard.js +28 -10
- package/lib/src/embed/liveboard.js.map +1 -1
- package/lib/src/embed/liveboard.spec.js +139 -0
- package/lib/src/embed/liveboard.spec.js.map +1 -1
- package/lib/src/embed/spotter-utils.d.ts +1 -0
- package/lib/src/embed/spotter-utils.d.ts.map +1 -1
- package/lib/src/embed/spotter-utils.js +7 -1
- package/lib/src/embed/spotter-utils.js.map +1 -1
- package/lib/src/embed/spotter-utils.spec.js +19 -0
- package/lib/src/embed/spotter-utils.spec.js.map +1 -1
- package/lib/src/embed/ts-embed.d.ts +21 -16
- package/lib/src/embed/ts-embed.d.ts.map +1 -1
- package/lib/src/embed/ts-embed.js +78 -64
- package/lib/src/embed/ts-embed.js.map +1 -1
- package/lib/src/embed/ts-embed.spec.js +240 -7
- package/lib/src/embed/ts-embed.spec.js.map +1 -1
- package/lib/src/index.d.ts +2 -2
- package/lib/src/index.d.ts.map +1 -1
- package/lib/src/index.js.map +1 -1
- package/lib/src/react/all-types-export.d.ts +1 -1
- package/lib/src/react/all-types-export.d.ts.map +1 -1
- package/lib/src/react/all-types-export.js.map +1 -1
- package/lib/src/react/util.d.ts +8 -1
- package/lib/src/react/util.d.ts.map +1 -1
- package/lib/src/react/util.js.map +1 -1
- package/lib/src/types.d.ts +249 -2
- package/lib/src/types.d.ts.map +1 -1
- package/lib/src/types.js +247 -0
- package/lib/src/types.js.map +1 -1
- package/lib/src/utils/runtimeTelemetry.d.ts +11 -0
- package/lib/src/utils/runtimeTelemetry.d.ts.map +1 -0
- package/lib/src/utils/runtimeTelemetry.js +28 -0
- package/lib/src/utils/runtimeTelemetry.js.map +1 -0
- package/lib/src/utils/runtimeTelemetry.spec.d.ts +2 -0
- package/lib/src/utils/runtimeTelemetry.spec.d.ts.map +1 -0
- package/lib/src/utils/runtimeTelemetry.spec.js +122 -0
- package/lib/src/utils/runtimeTelemetry.spec.js.map +1 -0
- package/lib/src/visual-embed-sdk.d.ts +642 -44
- package/package.json +1 -1
- package/src/auth.spec.ts +47 -11
- package/src/auth.ts +35 -6
- package/src/contracts/contracts.spec.ts +186 -3
- package/src/contracts/embed-event-payloads.ts +281 -14
- package/src/contracts/host-event-contracts.ts +14 -0
- package/src/css-variables.ts +168 -0
- package/src/embed/app.ts +1 -0
- package/src/embed/auto-frame-renderer.spec.ts +134 -8
- package/src/embed/auto-frame-renderer.ts +103 -2
- package/src/embed/conversation.spec.ts +24 -0
- package/src/embed/conversation.ts +14 -0
- package/src/embed/host-events.spec.ts +68 -0
- package/src/embed/liveboard.spec.ts +156 -0
- package/src/embed/liveboard.ts +34 -10
- package/src/embed/spotter-utils.spec.ts +20 -0
- package/src/embed/spotter-utils.ts +12 -1
- package/src/embed/ts-embed.spec.ts +297 -8
- package/src/embed/ts-embed.ts +79 -64
- package/src/index.ts +2 -0
- package/src/react/all-types-export.ts +1 -0
- package/src/react/util.ts +13 -1
- package/src/types.ts +249 -0
- package/src/utils/runtimeTelemetry.spec.ts +148 -0
- package/src/utils/runtimeTelemetry.ts +50 -0
package/src/embed/ts-embed.ts
CHANGED
|
@@ -45,6 +45,7 @@ import {
|
|
|
45
45
|
getHostEventsConfig,
|
|
46
46
|
getValueFromWindow,
|
|
47
47
|
deserializeParam,
|
|
48
|
+
getScrollableAncestors,
|
|
48
49
|
setParamIfDefined,
|
|
49
50
|
} from '../utils';
|
|
50
51
|
import { getCustomActions } from '../utils/custom-actions';
|
|
@@ -80,6 +81,7 @@ import {
|
|
|
80
81
|
BaseViewConfig,
|
|
81
82
|
} from '../types';
|
|
82
83
|
import { uploadMixpanelEvent, MIXPANEL_EVENT } from '../mixpanel-service';
|
|
84
|
+
import { summarizeRuntimeDataForTelemetry } from '../utils/runtimeTelemetry';
|
|
83
85
|
import { processEventData, processAuthFailure } from '../utils/processData';
|
|
84
86
|
import { version } from '../utils/sdk-version';
|
|
85
87
|
import {
|
|
@@ -116,6 +118,9 @@ const TS_EMBED_ID = '_thoughtspot-embed';
|
|
|
116
118
|
*/
|
|
117
119
|
const PRERENDER_CONTAINER_ORIGINAL_POSITION_KEY = 'tsEmbedOriginalPosition';
|
|
118
120
|
const PRERENDER_WRAPPER_ID_PREFIX = 'tsEmbed-pre-render-wrapper-';
|
|
121
|
+
const PRERENDER_PARKED_TRANSFORM = 'translateY(-100%)';
|
|
122
|
+
/** The height createPreRenderWrapper() seeds before anything is measured. */
|
|
123
|
+
const UNMEASURED_WRAPPER_HEIGHT = '100vh';
|
|
119
124
|
|
|
120
125
|
// The container applies UpdateEmbedParams through React state, so a delivered
|
|
121
126
|
// post is not the same as the params being in effect.
|
|
@@ -325,8 +330,7 @@ export class TsEmbed {
|
|
|
325
330
|
|
|
326
331
|
private preRenderContainerEl: HTMLElement = document.body;
|
|
327
332
|
|
|
328
|
-
|
|
329
|
-
|
|
333
|
+
/** Last height the embedded app reported, once fullHeight has measured one. */
|
|
330
334
|
protected hostEventClient: HostEventClient;
|
|
331
335
|
|
|
332
336
|
protected isReadyForRenderPromise;
|
|
@@ -347,9 +351,10 @@ export class TsEmbed {
|
|
|
347
351
|
...viewConfig,
|
|
348
352
|
};
|
|
349
353
|
this.registerAppInit();
|
|
350
|
-
uploadMixpanelEvent(
|
|
351
|
-
|
|
352
|
-
|
|
354
|
+
uploadMixpanelEvent(
|
|
355
|
+
MIXPANEL_EVENT.VISUAL_SDK_EMBED_CREATE,
|
|
356
|
+
summarizeRuntimeDataForTelemetry(viewConfig),
|
|
357
|
+
);
|
|
353
358
|
const embedConfig = getEmbedConfig();
|
|
354
359
|
if (embedConfig) {
|
|
355
360
|
this.embedConfig = embedConfig;
|
|
@@ -1283,7 +1288,7 @@ export class TsEmbed {
|
|
|
1283
1288
|
top: '0',
|
|
1284
1289
|
left: '0',
|
|
1285
1290
|
width: '100vw',
|
|
1286
|
-
height:
|
|
1291
|
+
height: UNMEASURED_WRAPPER_HEIGHT,
|
|
1287
1292
|
};
|
|
1288
1293
|
setStyleProperties(preRenderWrapper, initialPreRenderWrapperStyle);
|
|
1289
1294
|
|
|
@@ -1369,10 +1374,12 @@ export class TsEmbed {
|
|
|
1369
1374
|
}
|
|
1370
1375
|
|
|
1371
1376
|
/**
|
|
1372
|
-
* Resolves the configured preRenderContainer
|
|
1373
|
-
*
|
|
1374
|
-
*
|
|
1375
|
-
*
|
|
1377
|
+
* Resolves the configured preRenderContainer, or defaults to the host's
|
|
1378
|
+
* nearest scrolling ancestor (document.body if none). The absolutely
|
|
1379
|
+
* positioned wrapper only follows the page while it sits inside what
|
|
1380
|
+
* scrolls, so body is right only when the document itself scrolls — an inner
|
|
1381
|
+
* scroller left the frame pinned to the viewport (SCAL-338563). A string
|
|
1382
|
+
* selector is re-queried each call so a remounted container resolves fresh.
|
|
1376
1383
|
*/
|
|
1377
1384
|
private resolvePreRenderContainerTarget(): HTMLElement {
|
|
1378
1385
|
const containerConfig = this.getPreRenderConfig().containerSelector;
|
|
@@ -1389,7 +1396,13 @@ export class TsEmbed {
|
|
|
1389
1396
|
} else if (containerConfig) {
|
|
1390
1397
|
container = containerConfig;
|
|
1391
1398
|
}
|
|
1392
|
-
|
|
1399
|
+
if (container) {
|
|
1400
|
+
return container as HTMLElement;
|
|
1401
|
+
}
|
|
1402
|
+
if (!this.hostElement) {
|
|
1403
|
+
return document.body;
|
|
1404
|
+
}
|
|
1405
|
+
return getScrollableAncestors(this.hostElement)[0] ?? document.body;
|
|
1393
1406
|
}
|
|
1394
1407
|
|
|
1395
1408
|
private inheritPreRenderContainer(): void {
|
|
@@ -1443,8 +1456,9 @@ export class TsEmbed {
|
|
|
1443
1456
|
* Re-attaches the wrapper to a live container when the previously resolved
|
|
1444
1457
|
* one has been detached or no longer holds the wrapper — e.g. the host app
|
|
1445
1458
|
* remounted a custom preRenderContainer, which would otherwise leave a stale
|
|
1446
|
-
* reference and collapse the wrapper.
|
|
1447
|
-
* re-resolved; a container passed as an element
|
|
1459
|
+
* reference and collapse the wrapper. Selectors and the auto-resolved
|
|
1460
|
+
* scrolling ancestor are both re-resolved; a container passed as an element
|
|
1461
|
+
* is left untouched, as there is nothing to re-query.
|
|
1448
1462
|
*/
|
|
1449
1463
|
private reconcilePreRenderContainer(): void {
|
|
1450
1464
|
const wrapper = this.preRenderWrapper;
|
|
@@ -1463,14 +1477,6 @@ export class TsEmbed {
|
|
|
1463
1477
|
if (resolved === stored && stored.contains(wrapper)) {
|
|
1464
1478
|
return;
|
|
1465
1479
|
}
|
|
1466
|
-
if (this.containerScrollListener && stored !== resolved) {
|
|
1467
|
-
if (stored !== document.body) {
|
|
1468
|
-
stored.removeEventListener('scroll', this.containerScrollListener);
|
|
1469
|
-
}
|
|
1470
|
-
if (resolved !== document.body) {
|
|
1471
|
-
resolved.addEventListener('scroll', this.containerScrollListener);
|
|
1472
|
-
}
|
|
1473
|
-
}
|
|
1474
1480
|
this.preRenderContainerEl = resolved;
|
|
1475
1481
|
this.applyPreRenderContainerPositioning();
|
|
1476
1482
|
if (wrapper.parentNode !== resolved) {
|
|
@@ -1539,10 +1545,11 @@ export class TsEmbed {
|
|
|
1539
1545
|
*/
|
|
1540
1546
|
protected setIFrameHeight(height: number | string): void {
|
|
1541
1547
|
if (this.isPreRendered) {
|
|
1548
|
+
const next = getCssDimension(height);
|
|
1542
1549
|
if (this.insertedDomEl) {
|
|
1543
|
-
(this.insertedDomEl as HTMLElement).style.height =
|
|
1550
|
+
(this.insertedDomEl as HTMLElement).style.height = next;
|
|
1544
1551
|
} else if (this.preRenderWrapper) {
|
|
1545
|
-
this.preRenderWrapper.style.height =
|
|
1552
|
+
this.preRenderWrapper.style.height = next;
|
|
1546
1553
|
}
|
|
1547
1554
|
} else {
|
|
1548
1555
|
// normal (non-preRender) mode: size the iframe directly
|
|
@@ -2113,15 +2120,27 @@ export class TsEmbed {
|
|
|
2113
2120
|
}
|
|
2114
2121
|
|
|
2115
2122
|
/**
|
|
2116
|
-
*
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2123
|
+
* Re-sizes the wrapper when its placeholder changes size.
|
|
2124
|
+
*
|
|
2125
|
+
* Position deliberately has no equivalent. An absolutely positioned wrapper
|
|
2126
|
+
* follows its containing block for free, so a correctly placed frame is the
|
|
2127
|
+
* browser's job and costs nothing; repositioning it on scroll would mean a
|
|
2128
|
+
* layout read and a style write per frame to compensate for placing it in
|
|
2129
|
+
* the wrong box. Size is the one thing the browser will not do for us: the
|
|
2130
|
+
* placeholder grows when the embedded app reports a new height, and the
|
|
2131
|
+
* wrapper has to be told.
|
|
2132
|
+
*/
|
|
2133
|
+
private observePreRenderSize(): void {
|
|
2134
|
+
if (this.getPreRenderConfig().doNotTrackSize || typeof ResizeObserver === 'undefined') {
|
|
2135
|
+
return;
|
|
2136
|
+
}
|
|
2137
|
+
const placeholder = this.getPreRenderPlaceHolderElement();
|
|
2138
|
+
if (!placeholder) {
|
|
2120
2139
|
return;
|
|
2121
2140
|
}
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
this.
|
|
2141
|
+
this.resizeObserver?.disconnect();
|
|
2142
|
+
this.resizeObserver = new ResizeObserver(() => this.syncPreRenderStyle());
|
|
2143
|
+
this.resizeObserver.observe(placeholder);
|
|
2125
2144
|
}
|
|
2126
2145
|
|
|
2127
2146
|
/**
|
|
@@ -2131,7 +2150,7 @@ export class TsEmbed {
|
|
|
2131
2150
|
public destroy(): void {
|
|
2132
2151
|
try {
|
|
2133
2152
|
this.removeFullscreenChangeHandler();
|
|
2134
|
-
this.
|
|
2153
|
+
this.resizeObserver?.disconnect();
|
|
2135
2154
|
this.unsubscribeToEvents();
|
|
2136
2155
|
this.preRenderWrapper?.remove();
|
|
2137
2156
|
this.restorePreRenderContainerPosition();
|
|
@@ -2258,14 +2277,18 @@ export class TsEmbed {
|
|
|
2258
2277
|
|
|
2259
2278
|
if (this.hostElement) {
|
|
2260
2279
|
this.insertedDomEl = this.createPreRenderPlaceholder();
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
}
|
|
2280
|
+
// Carry a height fullHeight has already measured onto the fresh
|
|
2281
|
+
// placeholder, so a re-show does not flash at frameParams height.
|
|
2282
|
+
// UNMEASURED_WRAPPER_HEIGHT is what createPreRenderWrapper() seeds
|
|
2283
|
+
// before anything has been measured; treating that as a measurement
|
|
2284
|
+
// is what made a first reveal overshoot to a full viewport.
|
|
2285
|
+
const wrapperHeight = this.preRenderWrapper.style.height;
|
|
2286
|
+
if (
|
|
2287
|
+
(this.viewConfig as { fullHeight: boolean }).fullHeight
|
|
2288
|
+
&& wrapperHeight
|
|
2289
|
+
&& wrapperHeight !== UNMEASURED_WRAPPER_HEIGHT
|
|
2290
|
+
) {
|
|
2291
|
+
(this.insertedDomEl as HTMLDivElement).style.height = wrapperHeight;
|
|
2269
2292
|
}
|
|
2270
2293
|
|
|
2271
2294
|
const placeHolderId = this.getPreRenderIds().placeHolder;
|
|
@@ -2282,32 +2305,20 @@ export class TsEmbed {
|
|
|
2282
2305
|
this.hostElement.appendChild(this.insertedDomEl);
|
|
2283
2306
|
|
|
2284
2307
|
this.syncPreRenderStyle();
|
|
2285
|
-
|
|
2286
|
-
const customContainer = this.getCustomPreRenderContainer();
|
|
2287
|
-
if (customContainer && !this.containerScrollListener) {
|
|
2288
|
-
this.containerScrollListener = () => this.syncPreRenderStyle();
|
|
2289
|
-
customContainer.addEventListener('scroll', this.containerScrollListener);
|
|
2290
|
-
}
|
|
2291
|
-
|
|
2292
|
-
if (!this.getPreRenderConfig().doNotTrackSize) {
|
|
2293
|
-
const observeTarget = (this.insertedDomEl as HTMLElement) ?? this.hostElement;
|
|
2294
|
-
this.resizeObserver = new ResizeObserver((entries) => {
|
|
2295
|
-
entries.forEach((entry) => {
|
|
2296
|
-
if (entry.target === observeTarget) {
|
|
2297
|
-
this.syncPreRenderStyle();
|
|
2298
|
-
}
|
|
2299
|
-
});
|
|
2300
|
-
});
|
|
2301
|
-
this.resizeObserver.observe(observeTarget);
|
|
2302
|
-
}
|
|
2308
|
+
this.observePreRenderSize();
|
|
2303
2309
|
}
|
|
2304
2310
|
|
|
2305
2311
|
removeStyleProperties(this.preRenderWrapper, [
|
|
2306
2312
|
'z-index',
|
|
2307
2313
|
'opacity',
|
|
2308
|
-
'pointer-events',
|
|
2309
2314
|
'overflow',
|
|
2315
|
+
'transform',
|
|
2310
2316
|
]);
|
|
2317
|
+
// Set rather than removed: a container that carries `pointer-events:
|
|
2318
|
+
// none` — the usual styling for a parking root that must not swallow
|
|
2319
|
+
// clicks — passes it down, and dropping the property here would leave
|
|
2320
|
+
// the inherited `none` in force and the frame dead to input.
|
|
2321
|
+
setStyleProperties(this.preRenderWrapper, { pointerEvents: 'auto' });
|
|
2311
2322
|
this.subscribeToEvents();
|
|
2312
2323
|
|
|
2313
2324
|
// Setup fullscreen change handler for prerendered components
|
|
@@ -2379,22 +2390,26 @@ export class TsEmbed {
|
|
|
2379
2390
|
return;
|
|
2380
2391
|
}
|
|
2381
2392
|
const { zIndex } = this.getPreRenderConfig();
|
|
2393
|
+
// A hidden pre-render frame must add no scroll space to the host page.
|
|
2382
2394
|
const preRenderHideStyles = {
|
|
2383
2395
|
opacity: '0',
|
|
2384
2396
|
pointerEvents: 'none',
|
|
2385
2397
|
zIndex: zIndex !== undefined ? String(zIndex) : '-1000',
|
|
2386
|
-
|
|
2398
|
+
// Resolves to the viewport, so the hidden frame belongs to no
|
|
2399
|
+
// scroll container's overflow; syncPreRenderStyle restores absolute
|
|
2400
|
+
// on show.
|
|
2401
|
+
position: 'fixed',
|
|
2387
2402
|
top: '0',
|
|
2388
2403
|
left: '0',
|
|
2389
2404
|
overflow: 'hidden',
|
|
2405
|
+
// The one exception: a transformed or contained ancestor captures
|
|
2406
|
+
// `fixed`; parking above the top edge keeps it out of that
|
|
2407
|
+
// overflow.
|
|
2408
|
+
transform: PRERENDER_PARKED_TRANSFORM,
|
|
2390
2409
|
};
|
|
2391
2410
|
setStyleProperties(this.preRenderWrapper, preRenderHideStyles);
|
|
2392
2411
|
|
|
2393
|
-
this.
|
|
2394
|
-
|
|
2395
|
-
if (this.resizeObserver) {
|
|
2396
|
-
this.resizeObserver.disconnect();
|
|
2397
|
-
}
|
|
2412
|
+
this.resizeObserver?.disconnect();
|
|
2398
2413
|
|
|
2399
2414
|
const placeHolderEle = this.getPreRenderPlaceHolderElement();
|
|
2400
2415
|
if (placeHolderEle) {
|
package/src/index.ts
CHANGED
|
@@ -159,6 +159,7 @@ import {
|
|
|
159
159
|
ScheduleEmailRequest,
|
|
160
160
|
NavigateRequest,
|
|
161
161
|
SetActiveTabRequest,
|
|
162
|
+
UpdateThemeRequest,
|
|
162
163
|
} from './contracts/host-event-contracts';
|
|
163
164
|
import {
|
|
164
165
|
convertFilterChangedToUpdateFiltersPayload,
|
|
@@ -292,6 +293,7 @@ export {
|
|
|
292
293
|
ScheduleEmailRequest,
|
|
293
294
|
NavigateRequest,
|
|
294
295
|
SetActiveTabRequest,
|
|
296
|
+
UpdateThemeRequest,
|
|
295
297
|
LiveboardTab,
|
|
296
298
|
LiveboardGroup,
|
|
297
299
|
ApplicabilityLevel,
|
package/src/react/util.ts
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import { EmbedEvent, MessageCallback, AllEmbedViewConfig } from '../types';
|
|
2
|
+
import { EmbedEventPayload } from '../contracts/embed-event-payloads';
|
|
2
3
|
|
|
3
4
|
interface EmbedViewConfig extends AllEmbedViewConfig, EmbedEventHandlers {}
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
/**
|
|
7
|
+
* `on{Event}` handler props for the React components. Each handler receives the
|
|
8
|
+
* payload typed for its event (the same {@link EmbedEventPayload} the imperative
|
|
9
|
+
* `embed.on()` delivers), so `onData`, `onVizPointClick`, etc. are per-event
|
|
10
|
+
* typed rather than the loose {@link MessageCallback}.
|
|
11
|
+
*/
|
|
12
|
+
export type EmbedEventHandlers = {
|
|
13
|
+
[K in keyof typeof EmbedEvent as `on${Capitalize<K>}`]?: (
|
|
14
|
+
payload: EmbedEventPayload<(typeof EmbedEvent)[K]>,
|
|
15
|
+
responder?: (data: any) => void,
|
|
16
|
+
) => void;
|
|
17
|
+
};
|
|
6
18
|
|
|
7
19
|
export interface EmbedProps extends EmbedViewConfig {
|
|
8
20
|
className?: string;
|