@thewhateverapp/tile-sdk 0.18.0 → 0.18.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@ npm install @thewhateverapp/tile-sdk
|
|
|
25
25
|
### React Component
|
|
26
26
|
|
|
27
27
|
```tsx
|
|
28
|
-
import { TileProvider, useTile } from '@thewhateverapp/tile-sdk
|
|
28
|
+
import { TileProvider, useTile } from '@thewhateverapp/tile-sdk';
|
|
29
29
|
|
|
30
30
|
function MyTileApp() {
|
|
31
31
|
return (
|
|
@@ -428,7 +428,7 @@ interface UserContext {
|
|
|
428
428
|
### Example: Simple Counter Tile
|
|
429
429
|
|
|
430
430
|
```tsx
|
|
431
|
-
import { TileProvider, useTile } from '@thewhateverapp/tile-sdk
|
|
431
|
+
import { TileProvider, useTile } from '@thewhateverapp/tile-sdk';
|
|
432
432
|
import { useState, useEffect } from 'react';
|
|
433
433
|
|
|
434
434
|
function CounterTile() {
|
|
@@ -477,7 +477,7 @@ function Counter() {
|
|
|
477
477
|
### Example: User Profile Tile
|
|
478
478
|
|
|
479
479
|
```tsx
|
|
480
|
-
import { TileProvider, useTile } from '@thewhateverapp/tile-sdk
|
|
480
|
+
import { TileProvider, useTile } from '@thewhateverapp/tile-sdk';
|
|
481
481
|
import { useState, useEffect } from 'react';
|
|
482
482
|
|
|
483
483
|
function ProfileTile() {
|
|
@@ -58,6 +58,8 @@ export declare class TileBridge {
|
|
|
58
58
|
private currentToken;
|
|
59
59
|
private tokenExpiresAt;
|
|
60
60
|
private keyboardState;
|
|
61
|
+
private lastParentKeyboardAt;
|
|
62
|
+
private hasVisualViewport;
|
|
61
63
|
private visibilityState;
|
|
62
64
|
private receivedVisibilityMessage;
|
|
63
65
|
private mediaOriginalMutedState;
|
|
@@ -107,6 +109,11 @@ export declare class TileBridge {
|
|
|
107
109
|
* Handle keyboard state message from parent (mobile app)
|
|
108
110
|
*/
|
|
109
111
|
private handleKeyboard;
|
|
112
|
+
/**
|
|
113
|
+
* Update keyboard state from internal detection (VisualViewport/focus) as a fallback
|
|
114
|
+
* Only applies in React Native WebView contexts and if parent hasn't sent recent updates
|
|
115
|
+
*/
|
|
116
|
+
private updateKeyboardStateFromInternal;
|
|
110
117
|
/**
|
|
111
118
|
* Handle audio status request from parent
|
|
112
119
|
* Returns actual muted state of all media for verification
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"TileBridge.d.ts","sourceRoot":"","sources":["../../src/bridge/TileBridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,9 @@ export class TileBridge {
|
|
|
15
15
|
this.tokenExpiresAt = null;
|
|
16
16
|
// Keyboard state from parent (mobile app)
|
|
17
17
|
this.keyboardState = { visible: false, height: 0 };
|
|
18
|
+
// Track last keyboard update from native parent to allow fallback in RN WebView
|
|
19
|
+
this.lastParentKeyboardAt = 0;
|
|
20
|
+
this.hasVisualViewport = false;
|
|
18
21
|
// Visibility state from parent (for TikTok-style feeds)
|
|
19
22
|
// Includes muted state for atomic updates to prevent race conditions
|
|
20
23
|
// FAIL-SAFE: Default to muted=true until parent explicitly says otherwise
|
|
@@ -122,6 +125,7 @@ export class TileBridge {
|
|
|
122
125
|
// ==================== PLAN A: VisualViewport Detection ====================
|
|
123
126
|
// Use VisualViewport API to detect keyboard by monitoring viewport height changes
|
|
124
127
|
const vv = window.visualViewport;
|
|
128
|
+
this.hasVisualViewport = !!vv;
|
|
125
129
|
if (vv) {
|
|
126
130
|
// Set baseline height (full viewport without keyboard)
|
|
127
131
|
this.baselineViewportHeight = vv.height;
|
|
@@ -180,6 +184,8 @@ export class TileBridge {
|
|
|
180
184
|
currentHeight,
|
|
181
185
|
});
|
|
182
186
|
}
|
|
187
|
+
// Update local state as a fallback when parent doesn't send updates
|
|
188
|
+
this.updateKeyboardStateFromInternal({ visible: keyboardVisible, height: keyboardHeight }, 'viewport');
|
|
183
189
|
// Send keyboard state to parent (React Native)
|
|
184
190
|
this.sendToParent({
|
|
185
191
|
type: 'tile:keyboard',
|
|
@@ -223,6 +229,10 @@ export class TileBridge {
|
|
|
223
229
|
id: target.id || null,
|
|
224
230
|
},
|
|
225
231
|
});
|
|
232
|
+
// Fallback when VisualViewport isn't available
|
|
233
|
+
if (!this.hasVisualViewport) {
|
|
234
|
+
this.updateKeyboardStateFromInternal({ visible: true, height: 0 }, 'focus');
|
|
235
|
+
}
|
|
226
236
|
}
|
|
227
237
|
}
|
|
228
238
|
/**
|
|
@@ -251,6 +261,10 @@ export class TileBridge {
|
|
|
251
261
|
type: 'tile:input-blurred',
|
|
252
262
|
payload: {},
|
|
253
263
|
});
|
|
264
|
+
// Fallback when VisualViewport isn't available
|
|
265
|
+
if (!this.hasVisualViewport) {
|
|
266
|
+
this.updateKeyboardStateFromInternal({ visible: false, height: 0 }, 'focus');
|
|
267
|
+
}
|
|
254
268
|
}
|
|
255
269
|
}, 10);
|
|
256
270
|
}
|
|
@@ -424,11 +438,39 @@ export class TileBridge {
|
|
|
424
438
|
visible: !!payload.visible,
|
|
425
439
|
height: payload.height || 0,
|
|
426
440
|
};
|
|
441
|
+
this.lastParentKeyboardAt = Date.now();
|
|
427
442
|
// Always log keyboard state changes (helpful for debugging mobile issues)
|
|
428
443
|
console.log('[TileBridge] ⌨️ Received keyboard state', this.keyboardState);
|
|
429
444
|
// Emit keyboard update event for listeners
|
|
430
445
|
this.emitEvent('keyboard:update', this.keyboardState);
|
|
431
446
|
}
|
|
447
|
+
/**
|
|
448
|
+
* Update keyboard state from internal detection (VisualViewport/focus) as a fallback
|
|
449
|
+
* Only applies in React Native WebView contexts and if parent hasn't sent recent updates
|
|
450
|
+
*/
|
|
451
|
+
updateKeyboardStateFromInternal(state, source) {
|
|
452
|
+
if (typeof window === 'undefined')
|
|
453
|
+
return;
|
|
454
|
+
if (!window.ReactNativeWebView)
|
|
455
|
+
return;
|
|
456
|
+
const now = Date.now();
|
|
457
|
+
if (now - this.lastParentKeyboardAt < 500) {
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
const nextState = {
|
|
461
|
+
visible: !!state.visible,
|
|
462
|
+
height: state.visible ? (state.height || 0) : 0,
|
|
463
|
+
};
|
|
464
|
+
if (this.keyboardState.visible === nextState.visible &&
|
|
465
|
+
Math.abs(this.keyboardState.height - nextState.height) <= 10) {
|
|
466
|
+
return;
|
|
467
|
+
}
|
|
468
|
+
this.keyboardState = nextState;
|
|
469
|
+
if (this.isDevelopment() || this.isPreview()) {
|
|
470
|
+
console.log('[TileBridge] ⌨️ Fallback keyboard state', { ...nextState, source });
|
|
471
|
+
}
|
|
472
|
+
this.emitEvent('keyboard:update', this.keyboardState);
|
|
473
|
+
}
|
|
432
474
|
/**
|
|
433
475
|
* Handle audio status request from parent
|
|
434
476
|
* Returns actual muted state of all media for verification
|