@thewhateverapp/tile-sdk 0.9.1 → 0.10.0
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/dist/bridge/TileBridge.d.ts +32 -0
- package/dist/bridge/TileBridge.d.ts.map +1 -1
- package/dist/bridge/TileBridge.js +52 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/react/TileProvider.d.ts +1 -0
- package/dist/react/TileProvider.d.ts.map +1 -1
- package/dist/react/TileProvider.js +1 -0
- package/dist/react/index.d.ts +1 -0
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +1 -0
- package/dist/react/useKeyboard.d.ts +26 -0
- package/dist/react/useKeyboard.d.ts.map +1 -0
- package/dist/react/useKeyboard.js +44 -0
- package/package.json +1 -1
|
@@ -26,6 +26,13 @@ export interface TileTokenData {
|
|
|
26
26
|
token: string;
|
|
27
27
|
expiresAt: string;
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Keyboard state from parent (mobile app)
|
|
31
|
+
*/
|
|
32
|
+
export interface KeyboardState {
|
|
33
|
+
visible: boolean;
|
|
34
|
+
height: number;
|
|
35
|
+
}
|
|
29
36
|
type NextRouter = {
|
|
30
37
|
push: (href: string) => void;
|
|
31
38
|
replace: (href: string) => void;
|
|
@@ -41,6 +48,7 @@ export declare class TileBridge {
|
|
|
41
48
|
private router;
|
|
42
49
|
private currentToken;
|
|
43
50
|
private tokenExpiresAt;
|
|
51
|
+
private keyboardState;
|
|
44
52
|
constructor(expectedOrigin?: string, router?: NextRouter);
|
|
45
53
|
private initialize;
|
|
46
54
|
private handleMessage;
|
|
@@ -52,6 +60,10 @@ export declare class TileBridge {
|
|
|
52
60
|
* Handle token message from parent
|
|
53
61
|
*/
|
|
54
62
|
private handleToken;
|
|
63
|
+
/**
|
|
64
|
+
* Handle keyboard state message from parent (mobile app)
|
|
65
|
+
*/
|
|
66
|
+
private handleKeyboard;
|
|
55
67
|
private sendToParent;
|
|
56
68
|
/**
|
|
57
69
|
* Request to navigate to full page view
|
|
@@ -220,6 +232,26 @@ export declare class TileBridge {
|
|
|
220
232
|
token: string;
|
|
221
233
|
expiresAt: Date;
|
|
222
234
|
}) => void): () => void;
|
|
235
|
+
/**
|
|
236
|
+
* Get the current keyboard state from parent (mobile app)
|
|
237
|
+
* Returns { visible: false, height: 0 } on web/non-mobile platforms
|
|
238
|
+
*/
|
|
239
|
+
getKeyboardState(): KeyboardState;
|
|
240
|
+
/**
|
|
241
|
+
* Check if the keyboard is currently visible
|
|
242
|
+
*/
|
|
243
|
+
isKeyboardVisible(): boolean;
|
|
244
|
+
/**
|
|
245
|
+
* Get the current keyboard height in pixels (0 if not visible)
|
|
246
|
+
*/
|
|
247
|
+
getKeyboardHeight(): number;
|
|
248
|
+
/**
|
|
249
|
+
* Subscribe to keyboard state changes
|
|
250
|
+
* Called when parent sends keyboard show/hide events
|
|
251
|
+
* @param handler Callback receiving { visible: boolean, height: number }
|
|
252
|
+
* @returns Unsubscribe function
|
|
253
|
+
*/
|
|
254
|
+
onKeyboardChange(handler: (state: KeyboardState) => void): () => void;
|
|
223
255
|
/**
|
|
224
256
|
* Wait for ready state
|
|
225
257
|
*
|
|
@@ -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;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;
|
|
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;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;gBAEzD,cAAc,GAAE,MAAkC,EAAE,MAAM,CAAC,EAAE,UAAU;IA6BnF,OAAO,CAAC,UAAU;IAiClB,OAAO,CAAC,aAAa;IAyDrB,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,OAAO,CAAC,YAAY;IAmCpB;;;;;OAKG;IACI,cAAc,IAAI,IAAI;IAuD7B;;;;;OAKG;IACI,cAAc,IAAI,IAAI;IAmD7B;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAI1C;;OAEG;IACI,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,QAAQ,GAAG,OAAkB,GAAG,IAAI;IAOxE;;OAEG;IACI,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI;IAOtD;;;OAGG;IACI,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOpD;;OAEG;IACU,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B1D;;OAEG;IACU,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B/D;;OAEG;IACU,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAoBlD;;OAEG;IACI,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAWzD;;OAEG;IACU,OAAO,CAAC,OAAO,CAAC,EAAE;QAC7B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG,OAAO,CAAC,GAAG,CAAC;IAiChB;;OAEG;IACU,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA8B9D;;OAEG;IACU,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;IAyB3C;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;;;;OAKG;IACU,YAAY,CAAC,OAAO,CAAC,EAAE;QAClC,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,KAAK,CAAC;KACvC,GAAG,OAAO,CAAC;QACV,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IA+CF;;;;;OAKG;IACU,UAAU,CAAC,OAAO,CAAC,EAAE;QAChC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC;QACV,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IAwCF;;;;;OAKG;IACU,WAAW,CAAC,OAAO,CAAC,EAAE;QACjC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,KAAK,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IA6CH;;OAEG;IACI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,MAAM,IAAI;IAgBlE;;OAEG;IACI,SAAS,IAAI,UAAU,GAAG,IAAI;IAIrC;;OAEG;IACI,OAAO,IAAI,OAAO;IAMzB;;;OAGG;IACI,QAAQ,IAAI,MAAM,GAAG,IAAI;IAWhC;;;OAGG;IACI,YAAY,IAAI,aAAa,GAAG,IAAI;IAU3C;;OAEG;IACI,aAAa,IAAI,OAAO;IAO/B;;;;OAIG;IACU,YAAY,CAAC,SAAS,GAAE,MAAc,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAyC5E;;;OAGG;IACI,aAAa,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,IAAI,CAAA;KAAE,KAAK,IAAI,GAAG,MAAM,IAAI;IAM7F;;;OAGG;IACI,gBAAgB,IAAI,aAAa;IAIxC;;OAEG;IACI,iBAAiB,IAAI,OAAO;IAInC;;OAEG;IACI,iBAAiB,IAAI,MAAM;IAIlC;;;;;OAKG;IACI,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI;IAI5E;;;;;OAKG;IACU,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC;IAuBhD,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,aAAa;CAgCtB;AAKD,wBAAgB,aAAa,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,CAQ7D"}
|
|
@@ -13,6 +13,8 @@ export class TileBridge {
|
|
|
13
13
|
// Tile-scoped token state
|
|
14
14
|
this.currentToken = null;
|
|
15
15
|
this.tokenExpiresAt = null;
|
|
16
|
+
// Keyboard state from parent (mobile app)
|
|
17
|
+
this.keyboardState = { visible: false, height: 0 };
|
|
16
18
|
this.parentOrigin = expectedOrigin;
|
|
17
19
|
this.router = router || null;
|
|
18
20
|
// Auto-detect parent origin based on environment
|
|
@@ -96,6 +98,9 @@ export class TileBridge {
|
|
|
96
98
|
case 'parent:token':
|
|
97
99
|
this.handleToken(message.payload);
|
|
98
100
|
break;
|
|
101
|
+
case 'parent:keyboard':
|
|
102
|
+
this.handleKeyboard(message.payload);
|
|
103
|
+
break;
|
|
99
104
|
case 'parent:navigateToPage':
|
|
100
105
|
this.handleParentNavigate({ target: 'page' });
|
|
101
106
|
break;
|
|
@@ -172,6 +177,24 @@ export class TileBridge {
|
|
|
172
177
|
expiresAt: this.tokenExpiresAt,
|
|
173
178
|
});
|
|
174
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Handle keyboard state message from parent (mobile app)
|
|
182
|
+
*/
|
|
183
|
+
handleKeyboard(payload) {
|
|
184
|
+
if (payload?.visible === undefined) {
|
|
185
|
+
console.warn('[TileBridge] Invalid keyboard payload received');
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
this.keyboardState = {
|
|
189
|
+
visible: !!payload.visible,
|
|
190
|
+
height: payload.height || 0,
|
|
191
|
+
};
|
|
192
|
+
if (this.isDevelopment() || this.isPreview()) {
|
|
193
|
+
console.log('[TileBridge] ⌨️ Received keyboard state', this.keyboardState);
|
|
194
|
+
}
|
|
195
|
+
// Emit keyboard update event for listeners
|
|
196
|
+
this.emitEvent('keyboard:update', this.keyboardState);
|
|
197
|
+
}
|
|
175
198
|
sendToParent(message) {
|
|
176
199
|
if (typeof window === 'undefined' || !window.parent)
|
|
177
200
|
return;
|
|
@@ -822,6 +845,35 @@ export class TileBridge {
|
|
|
822
845
|
onTokenUpdate(handler) {
|
|
823
846
|
return this.on('token:update', handler);
|
|
824
847
|
}
|
|
848
|
+
// ============= KEYBOARD API =============
|
|
849
|
+
/**
|
|
850
|
+
* Get the current keyboard state from parent (mobile app)
|
|
851
|
+
* Returns { visible: false, height: 0 } on web/non-mobile platforms
|
|
852
|
+
*/
|
|
853
|
+
getKeyboardState() {
|
|
854
|
+
return { ...this.keyboardState };
|
|
855
|
+
}
|
|
856
|
+
/**
|
|
857
|
+
* Check if the keyboard is currently visible
|
|
858
|
+
*/
|
|
859
|
+
isKeyboardVisible() {
|
|
860
|
+
return this.keyboardState.visible;
|
|
861
|
+
}
|
|
862
|
+
/**
|
|
863
|
+
* Get the current keyboard height in pixels (0 if not visible)
|
|
864
|
+
*/
|
|
865
|
+
getKeyboardHeight() {
|
|
866
|
+
return this.keyboardState.height;
|
|
867
|
+
}
|
|
868
|
+
/**
|
|
869
|
+
* Subscribe to keyboard state changes
|
|
870
|
+
* Called when parent sends keyboard show/hide events
|
|
871
|
+
* @param handler Callback receiving { visible: boolean, height: number }
|
|
872
|
+
* @returns Unsubscribe function
|
|
873
|
+
*/
|
|
874
|
+
onKeyboardChange(handler) {
|
|
875
|
+
return this.on('keyboard:update', handler);
|
|
876
|
+
}
|
|
825
877
|
/**
|
|
826
878
|
* Wait for ready state
|
|
827
879
|
*
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export { TileProvider } from './react/TileProvider';
|
|
2
2
|
export { useTile } from './react/useTile';
|
|
3
3
|
export { useTileNavigation } from './react/useTileNavigation';
|
|
4
|
+
export { useKeyboard } from './react/useKeyboard';
|
|
4
5
|
export { TileContainer } from './react/TileContainer';
|
|
5
6
|
export { withTile } from './react/withTile';
|
|
6
7
|
export { getTileBridge, TileBridge } from './bridge/TileBridge';
|
|
7
|
-
export type { TileMessage, TileConfig, TileTokenData } from './bridge/TileBridge';
|
|
8
|
+
export type { TileMessage, TileConfig, TileTokenData, KeyboardState } from './bridge/TileBridge';
|
|
8
9
|
export { StateClient } from './state/StateClient';
|
|
9
10
|
export type { TileStats, ViewResponse } from './state/StateClient';
|
|
10
11
|
export * from './tools';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGjG,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnE,cAAc,SAAS,CAAC;AAGxB,cAAc,SAAS,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
export { TileProvider } from './react/TileProvider';
|
|
3
3
|
export { useTile } from './react/useTile';
|
|
4
4
|
export { useTileNavigation } from './react/useTileNavigation';
|
|
5
|
+
export { useKeyboard } from './react/useKeyboard';
|
|
5
6
|
export { TileContainer } from './react/TileContainer';
|
|
6
7
|
export { withTile } from './react/withTile';
|
|
7
8
|
// Bridge for secure communication
|
|
@@ -12,6 +12,7 @@ export interface TileContextValue {
|
|
|
12
12
|
openUrl: (url: string, target?: '_blank' | '_self') => void;
|
|
13
13
|
trackEvent: (eventName: string, data?: any) => void;
|
|
14
14
|
setAttributionVisible: (visible: boolean) => void;
|
|
15
|
+
getToken: () => string | null;
|
|
15
16
|
storage: {
|
|
16
17
|
get: (key: string) => Promise<any>;
|
|
17
18
|
set: (key: string, value: any) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TileProvider.d.ts","sourceRoot":"","sources":["../../src/react/TileProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0D,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAiB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EACV,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAC;IAC5D,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACpD,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,OAAO,EAAE;QACP,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACjD,CAAC;IACF,SAAS,EAAE;QACT,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACxC,CAAC;IACF,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5E,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,cAAc,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;KACpC,CAAC;IACF,KAAK,EAAE;QACL,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;QACpE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;QAChE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;KACpE,CAAC;CACH;AAED,eAAO,MAAM,WAAW,wCAA+C,CAAC;AAExE,UAAU,iBAAiB;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"TileProvider.d.ts","sourceRoot":"","sources":["../../src/react/TileProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0D,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAiB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,KAAK,EACV,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,KAAK,IAAI,CAAC;IAC5D,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IACpD,qBAAqB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAClD,QAAQ,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE;QACP,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACjD,CAAC;IACF,SAAS,EAAE;QACT,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACxC,CAAC;IACF,IAAI,EAAE;QACJ,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5E,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,cAAc,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;KACpC,CAAC;IACF,KAAK,EAAE;QACL,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;QACpE,UAAU,EAAE,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;QAChE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;KACpE,CAAC;CACH;AAED,eAAO,MAAM,WAAW,wCAA+C,CAAC;AAExE,UAAU,iBAAiB;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,GAAG,CAAC;CACd;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,iBAAiB,qBAgEnE"}
|
|
@@ -33,6 +33,7 @@ export function TileProvider({ children, router }) {
|
|
|
33
33
|
openUrl: (url, target) => bridge.openUrl(url, target),
|
|
34
34
|
trackEvent: (eventName, data) => bridge.trackEvent(eventName, data),
|
|
35
35
|
setAttributionVisible: (visible) => bridge.setAttributionVisible(visible),
|
|
36
|
+
getToken: () => bridge.getToken(),
|
|
36
37
|
storage: {
|
|
37
38
|
get: (key) => bridge.getStorage(key),
|
|
38
39
|
set: (key, value) => bridge.setStorage(key, value),
|
package/dist/react/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/react/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { TileProvider } from './TileProvider';
|
|
2
2
|
export { useTile } from './useTile';
|
|
3
|
+
export { useKeyboard } from './useKeyboard';
|
|
3
4
|
export { TileContainer } from './TileContainer';
|
|
4
5
|
export { withTile } from './withTile';
|
|
5
6
|
// TileInitializer removed - router should be injected directly into TileProvider
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { KeyboardState } from '../bridge/TileBridge';
|
|
2
|
+
/**
|
|
3
|
+
* React hook for keyboard awareness in tiles
|
|
4
|
+
*
|
|
5
|
+
* This hook listens for keyboard state changes from the parent app (mobile)
|
|
6
|
+
* and returns the current keyboard state. Use this to adjust your tile's UI
|
|
7
|
+
* when the keyboard appears (e.g., scroll content, resize inputs, etc.)
|
|
8
|
+
*
|
|
9
|
+
* On web/non-mobile platforms, keyboard will always be { visible: false, height: 0 }
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```tsx
|
|
13
|
+
* function MyTile() {
|
|
14
|
+
* const { visible, height } = useKeyboard();
|
|
15
|
+
*
|
|
16
|
+
* return (
|
|
17
|
+
* <div style={{ paddingBottom: visible ? height : 0 }}>
|
|
18
|
+
* <input type="text" placeholder="Type something..." />
|
|
19
|
+
* {visible && <p>Keyboard is open! Height: {height}px</p>}
|
|
20
|
+
* </div>
|
|
21
|
+
* );
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function useKeyboard(): KeyboardState;
|
|
26
|
+
//# sourceMappingURL=useKeyboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useKeyboard.d.ts","sourceRoot":"","sources":["../../src/react/useKeyboard.ts"],"names":[],"mappings":"AACA,OAAO,EAAiB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,WAAW,IAAI,aAAa,CAuB3C"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { useEffect, useState } from 'react';
|
|
2
|
+
import { getTileBridge } from '../bridge/TileBridge';
|
|
3
|
+
/**
|
|
4
|
+
* React hook for keyboard awareness in tiles
|
|
5
|
+
*
|
|
6
|
+
* This hook listens for keyboard state changes from the parent app (mobile)
|
|
7
|
+
* and returns the current keyboard state. Use this to adjust your tile's UI
|
|
8
|
+
* when the keyboard appears (e.g., scroll content, resize inputs, etc.)
|
|
9
|
+
*
|
|
10
|
+
* On web/non-mobile platforms, keyboard will always be { visible: false, height: 0 }
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* function MyTile() {
|
|
15
|
+
* const { visible, height } = useKeyboard();
|
|
16
|
+
*
|
|
17
|
+
* return (
|
|
18
|
+
* <div style={{ paddingBottom: visible ? height : 0 }}>
|
|
19
|
+
* <input type="text" placeholder="Type something..." />
|
|
20
|
+
* {visible && <p>Keyboard is open! Height: {height}px</p>}
|
|
21
|
+
* </div>
|
|
22
|
+
* );
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function useKeyboard() {
|
|
27
|
+
const [keyboardState, setKeyboardState] = useState({
|
|
28
|
+
visible: false,
|
|
29
|
+
height: 0,
|
|
30
|
+
});
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
const bridge = getTileBridge();
|
|
33
|
+
// Get initial state
|
|
34
|
+
setKeyboardState(bridge.getKeyboardState());
|
|
35
|
+
// Subscribe to keyboard changes
|
|
36
|
+
const unsubscribe = bridge.onKeyboardChange((state) => {
|
|
37
|
+
setKeyboardState(state);
|
|
38
|
+
});
|
|
39
|
+
return () => {
|
|
40
|
+
unsubscribe();
|
|
41
|
+
};
|
|
42
|
+
}, []);
|
|
43
|
+
return keyboardState;
|
|
44
|
+
}
|