@thewhateverapp/tile-sdk 0.12.10 → 0.12.11
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.
|
@@ -59,6 +59,8 @@ export declare class TileBridge {
|
|
|
59
59
|
private tokenExpiresAt;
|
|
60
60
|
private keyboardState;
|
|
61
61
|
private visibilityState;
|
|
62
|
+
private autoMuteEnabled;
|
|
63
|
+
private mediaOriginalMutedState;
|
|
62
64
|
private baselineViewportHeight;
|
|
63
65
|
private keyboardDetectionEnabled;
|
|
64
66
|
private lastReportedKeyboardState;
|
|
@@ -109,6 +111,15 @@ export declare class TileBridge {
|
|
|
109
111
|
* Now includes muted state for atomic updates to prevent race conditions
|
|
110
112
|
*/
|
|
111
113
|
private handleVisibility;
|
|
114
|
+
/**
|
|
115
|
+
* Automatically mute all video and audio elements in the document
|
|
116
|
+
* Stores original muted state so we can restore it when unmuting
|
|
117
|
+
*/
|
|
118
|
+
private muteAllMedia;
|
|
119
|
+
/**
|
|
120
|
+
* Unmute all video and audio elements, restoring their original muted state
|
|
121
|
+
*/
|
|
122
|
+
private unmuteAllMedia;
|
|
112
123
|
private sendToParent;
|
|
113
124
|
/**
|
|
114
125
|
* Request to navigate to full page view
|
|
@@ -321,6 +332,31 @@ export declare class TileBridge {
|
|
|
321
332
|
* @returns Unsubscribe function
|
|
322
333
|
*/
|
|
323
334
|
onVisibilityChange(handler: (state: VisibilityState) => void): () => void;
|
|
335
|
+
/**
|
|
336
|
+
* Enable or disable automatic audio muting when visibility changes
|
|
337
|
+
* By default, auto-mute is ENABLED - all <video> and <audio> elements are
|
|
338
|
+
* automatically muted when the tile becomes hidden/offscreen.
|
|
339
|
+
*
|
|
340
|
+
* Tiles with custom audio handling (e.g., using AudioContext, Emscripten/WASM)
|
|
341
|
+
* should disable this and handle audio manually via onVisibilityChange.
|
|
342
|
+
*
|
|
343
|
+
* @param enabled - true to enable auto-mute (default), false to disable
|
|
344
|
+
*/
|
|
345
|
+
setAutoMute(enabled: boolean): void;
|
|
346
|
+
/**
|
|
347
|
+
* Check if automatic audio muting is enabled
|
|
348
|
+
*/
|
|
349
|
+
isAutoMuteEnabled(): boolean;
|
|
350
|
+
/**
|
|
351
|
+
* Manually mute all audio/video elements
|
|
352
|
+
* Useful for tiles that need to mute on demand
|
|
353
|
+
*/
|
|
354
|
+
muteAll(): void;
|
|
355
|
+
/**
|
|
356
|
+
* Manually unmute all audio/video elements
|
|
357
|
+
* Restores original muted state (elements that were muted before stay muted)
|
|
358
|
+
*/
|
|
359
|
+
unmuteAll(): void;
|
|
324
360
|
/**
|
|
325
361
|
* Wait for ready state
|
|
326
362
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TileBridge.d.ts","sourceRoot":"","sources":["../../src/bridge/TileBridge.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,iGAAiG;IACjG,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAGD,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,IAAI,CAAC;CAClB,CAAC;AAEF,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,gBAAgB,CAAmD;IAC3E,OAAO,CAAC,aAAa,CAAoD;IACzE,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAA2B;IAGzC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,cAAc,CAAqB;IAG3C,OAAO,CAAC,aAAa,CAAgD;IAIrE,OAAO,CAAC,eAAe,CAAoD;IAG3E,OAAO,CAAC,sBAAsB,CAAa;IAC3C,OAAO,CAAC,wBAAwB,CAAkB;IAClD,OAAO,CAAC,yBAAyB,CAAuE;IACxG,OAAO,CAAC,qBAAqB,CAA8C;IAC3E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAO;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAO;IAGnC,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,cAAc,CAAwB;gBAElC,cAAc,GAAE,MAAkC,EAAE,MAAM,CAAC,EAAE,UAAU;IA6BnF,OAAO,CAAC,UAAU;IAoClB;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAwDnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0C7B;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,cAAc;IAgCtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,aAAa;IA6DrB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,oBAAoB;IAoB5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAuBnB;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"TileBridge.d.ts","sourceRoot":"","sources":["../../src/bridge/TileBridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,10 @@ export class TileBridge {
|
|
|
18
18
|
// Visibility state from parent (for TikTok-style feeds)
|
|
19
19
|
// Includes muted state for atomic updates to prevent race conditions
|
|
20
20
|
this.visibilityState = { visible: true, muted: false };
|
|
21
|
+
// Automatic audio enforcement - enabled by default
|
|
22
|
+
this.autoMuteEnabled = true;
|
|
23
|
+
// Store original muted state of media elements to restore when unmuting
|
|
24
|
+
this.mediaOriginalMutedState = new WeakMap();
|
|
21
25
|
// VisualViewport tracking for keyboard detection (Plan A)
|
|
22
26
|
this.baselineViewportHeight = 0;
|
|
23
27
|
this.keyboardDetectionEnabled = false;
|
|
@@ -407,11 +411,70 @@ export class TileBridge {
|
|
|
407
411
|
if (this.isDevelopment() || this.isPreview()) {
|
|
408
412
|
console.log('[TileBridge] 👁️ Received visibility state', this.visibilityState);
|
|
409
413
|
}
|
|
414
|
+
// Auto-enforce audio muting if enabled
|
|
415
|
+
if (this.autoMuteEnabled) {
|
|
416
|
+
if (this.visibilityState.muted) {
|
|
417
|
+
this.muteAllMedia();
|
|
418
|
+
}
|
|
419
|
+
else if (wasMuted && !this.visibilityState.muted) {
|
|
420
|
+
this.unmuteAllMedia();
|
|
421
|
+
}
|
|
422
|
+
}
|
|
410
423
|
// Emit if visibility OR muted state changed
|
|
411
424
|
if (wasVisible !== this.visibilityState.visible || wasMuted !== this.visibilityState.muted) {
|
|
412
425
|
this.emitEvent('visibility:update', this.visibilityState);
|
|
413
426
|
}
|
|
414
427
|
}
|
|
428
|
+
/**
|
|
429
|
+
* Automatically mute all video and audio elements in the document
|
|
430
|
+
* Stores original muted state so we can restore it when unmuting
|
|
431
|
+
*/
|
|
432
|
+
muteAllMedia() {
|
|
433
|
+
if (typeof document === 'undefined')
|
|
434
|
+
return;
|
|
435
|
+
const mediaElements = document.querySelectorAll('video, audio');
|
|
436
|
+
let mutedCount = 0;
|
|
437
|
+
mediaElements.forEach((element) => {
|
|
438
|
+
const media = element;
|
|
439
|
+
// Store original muted state if not already stored
|
|
440
|
+
if (!this.mediaOriginalMutedState.has(media)) {
|
|
441
|
+
this.mediaOriginalMutedState.set(media, media.muted);
|
|
442
|
+
}
|
|
443
|
+
if (!media.muted) {
|
|
444
|
+
media.muted = true;
|
|
445
|
+
mutedCount++;
|
|
446
|
+
}
|
|
447
|
+
});
|
|
448
|
+
if (mutedCount > 0) {
|
|
449
|
+
console.log(`[TileBridge] 🔇 Auto-muted ${mutedCount} media element(s)`);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Unmute all video and audio elements, restoring their original muted state
|
|
454
|
+
*/
|
|
455
|
+
unmuteAllMedia() {
|
|
456
|
+
if (typeof document === 'undefined')
|
|
457
|
+
return;
|
|
458
|
+
const mediaElements = document.querySelectorAll('video, audio');
|
|
459
|
+
let unmutedCount = 0;
|
|
460
|
+
mediaElements.forEach((element) => {
|
|
461
|
+
const media = element;
|
|
462
|
+
// Restore original muted state (or unmute if we don't have stored state)
|
|
463
|
+
const originalMuted = this.mediaOriginalMutedState.get(media);
|
|
464
|
+
if (originalMuted === false || originalMuted === undefined) {
|
|
465
|
+
// Only unmute if it wasn't originally muted
|
|
466
|
+
if (media.muted) {
|
|
467
|
+
media.muted = false;
|
|
468
|
+
unmutedCount++;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
// Clear stored state
|
|
472
|
+
this.mediaOriginalMutedState.delete(media);
|
|
473
|
+
});
|
|
474
|
+
if (unmutedCount > 0) {
|
|
475
|
+
console.log(`[TileBridge] 🔊 Auto-unmuted ${unmutedCount} media element(s)`);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
415
478
|
sendToParent(message) {
|
|
416
479
|
if (typeof window === 'undefined' || !window.parent)
|
|
417
480
|
return;
|
|
@@ -1121,6 +1184,41 @@ export class TileBridge {
|
|
|
1121
1184
|
onVisibilityChange(handler) {
|
|
1122
1185
|
return this.on('visibility:update', handler);
|
|
1123
1186
|
}
|
|
1187
|
+
// ============= AUTO-MUTE API =============
|
|
1188
|
+
/**
|
|
1189
|
+
* Enable or disable automatic audio muting when visibility changes
|
|
1190
|
+
* By default, auto-mute is ENABLED - all <video> and <audio> elements are
|
|
1191
|
+
* automatically muted when the tile becomes hidden/offscreen.
|
|
1192
|
+
*
|
|
1193
|
+
* Tiles with custom audio handling (e.g., using AudioContext, Emscripten/WASM)
|
|
1194
|
+
* should disable this and handle audio manually via onVisibilityChange.
|
|
1195
|
+
*
|
|
1196
|
+
* @param enabled - true to enable auto-mute (default), false to disable
|
|
1197
|
+
*/
|
|
1198
|
+
setAutoMute(enabled) {
|
|
1199
|
+
this.autoMuteEnabled = enabled;
|
|
1200
|
+
console.log(`[TileBridge] 🔈 Auto-mute ${enabled ? 'enabled' : 'disabled'}`);
|
|
1201
|
+
}
|
|
1202
|
+
/**
|
|
1203
|
+
* Check if automatic audio muting is enabled
|
|
1204
|
+
*/
|
|
1205
|
+
isAutoMuteEnabled() {
|
|
1206
|
+
return this.autoMuteEnabled;
|
|
1207
|
+
}
|
|
1208
|
+
/**
|
|
1209
|
+
* Manually mute all audio/video elements
|
|
1210
|
+
* Useful for tiles that need to mute on demand
|
|
1211
|
+
*/
|
|
1212
|
+
muteAll() {
|
|
1213
|
+
this.muteAllMedia();
|
|
1214
|
+
}
|
|
1215
|
+
/**
|
|
1216
|
+
* Manually unmute all audio/video elements
|
|
1217
|
+
* Restores original muted state (elements that were muted before stay muted)
|
|
1218
|
+
*/
|
|
1219
|
+
unmuteAll() {
|
|
1220
|
+
this.unmuteAllMedia();
|
|
1221
|
+
}
|
|
1124
1222
|
/**
|
|
1125
1223
|
* Wait for ready state
|
|
1126
1224
|
*
|