@thewhateverapp/tile-sdk 0.8.7 → 0.8.9
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 +52 -0
- package/dist/bridge/TileBridge.d.ts.map +1 -1
- package/dist/bridge/TileBridge.js +113 -0
- package/dist/react/TileProvider.d.ts +6 -0
- package/dist/react/TileProvider.d.ts.map +1 -1
- package/dist/react/TileProvider.js +5 -0
- package/dist/types.d.ts +67 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -7
|
@@ -103,6 +103,58 @@ export declare class TileBridge {
|
|
|
103
103
|
* Get current authenticated user (if available)
|
|
104
104
|
*/
|
|
105
105
|
getCurrentUser(): Promise<any>;
|
|
106
|
+
/**
|
|
107
|
+
* Capture a photo from camera or device library
|
|
108
|
+
* @param options - Capture options (quality, maxSize, source, etc.)
|
|
109
|
+
* @returns Promise resolving to MediaFile with base64 data
|
|
110
|
+
*/
|
|
111
|
+
capturePhoto(options?: {
|
|
112
|
+
quality?: number;
|
|
113
|
+
maxSize?: number;
|
|
114
|
+
maxWidth?: number;
|
|
115
|
+
maxHeight?: number;
|
|
116
|
+
source?: 'camera' | 'library' | 'any';
|
|
117
|
+
}): Promise<{
|
|
118
|
+
base64: string;
|
|
119
|
+
mimeType: string;
|
|
120
|
+
filename: string;
|
|
121
|
+
size: number;
|
|
122
|
+
width?: number;
|
|
123
|
+
height?: number;
|
|
124
|
+
}>;
|
|
125
|
+
/**
|
|
126
|
+
* Select a file from device
|
|
127
|
+
* @param options - File selection options (accept, maxSize, etc.)
|
|
128
|
+
* @returns Promise resolving to MediaFile with base64 data
|
|
129
|
+
*/
|
|
130
|
+
selectFile(options?: {
|
|
131
|
+
accept?: string;
|
|
132
|
+
maxSize?: number;
|
|
133
|
+
}): Promise<{
|
|
134
|
+
base64: string;
|
|
135
|
+
mimeType: string;
|
|
136
|
+
filename: string;
|
|
137
|
+
size: number;
|
|
138
|
+
width?: number;
|
|
139
|
+
height?: number;
|
|
140
|
+
}>;
|
|
141
|
+
/**
|
|
142
|
+
* Select multiple files from device
|
|
143
|
+
* @param options - File selection options (accept, maxSize, maxFiles, etc.)
|
|
144
|
+
* @returns Promise resolving to array of MediaFile with base64 data
|
|
145
|
+
*/
|
|
146
|
+
selectFiles(options?: {
|
|
147
|
+
accept?: string;
|
|
148
|
+
maxSize?: number;
|
|
149
|
+
maxFiles?: number;
|
|
150
|
+
}): Promise<Array<{
|
|
151
|
+
base64: string;
|
|
152
|
+
mimeType: string;
|
|
153
|
+
filename: string;
|
|
154
|
+
size: number;
|
|
155
|
+
width?: number;
|
|
156
|
+
height?: number;
|
|
157
|
+
}>>;
|
|
106
158
|
/**
|
|
107
159
|
* Subscribe to events from parent
|
|
108
160
|
*/
|
|
@@ -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;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;gBAE7B,cAAc,GAAE,MAAkC,EAAE,MAAM,CAAC,EAAE,UAAU;IA6BnF,OAAO,CAAC,UAAU;IAiClB,OAAO,CAAC,aAAa;IAiDrB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,oBAAoB;IAqB5B,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;
|
|
1
|
+
{"version":3,"file":"TileBridge.d.ts","sourceRoot":"","sources":["../../src/bridge/TileBridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -496,6 +496,119 @@ export class TileBridge {
|
|
|
496
496
|
}, 5000);
|
|
497
497
|
});
|
|
498
498
|
}
|
|
499
|
+
// ============= MEDIA CAPTURE API =============
|
|
500
|
+
/**
|
|
501
|
+
* Capture a photo from camera or device library
|
|
502
|
+
* @param options - Capture options (quality, maxSize, source, etc.)
|
|
503
|
+
* @returns Promise resolving to MediaFile with base64 data
|
|
504
|
+
*/
|
|
505
|
+
async capturePhoto(options) {
|
|
506
|
+
return new Promise((resolve, reject) => {
|
|
507
|
+
const id = this.generateId();
|
|
508
|
+
this.responseHandlers.set(id, (response) => {
|
|
509
|
+
if (response.success && response.file) {
|
|
510
|
+
resolve(response.file);
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
reject(new Error(response.error || 'Photo capture failed'));
|
|
514
|
+
}
|
|
515
|
+
});
|
|
516
|
+
this.sendToParent({
|
|
517
|
+
type: 'tile:media-capture',
|
|
518
|
+
payload: {
|
|
519
|
+
mediaType: 'photo',
|
|
520
|
+
options: {
|
|
521
|
+
quality: options?.quality ?? 0.8,
|
|
522
|
+
maxSize: options?.maxSize ?? 5 * 1024 * 1024, // 5MB default
|
|
523
|
+
maxWidth: options?.maxWidth ?? 1920,
|
|
524
|
+
maxHeight: options?.maxHeight ?? 1080,
|
|
525
|
+
source: options?.source ?? 'any',
|
|
526
|
+
},
|
|
527
|
+
},
|
|
528
|
+
id,
|
|
529
|
+
});
|
|
530
|
+
// Timeout after 60 seconds (user might be slow)
|
|
531
|
+
setTimeout(() => {
|
|
532
|
+
if (this.responseHandlers.has(id)) {
|
|
533
|
+
this.responseHandlers.delete(id);
|
|
534
|
+
reject(new Error('Photo capture timeout'));
|
|
535
|
+
}
|
|
536
|
+
}, 60000);
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Select a file from device
|
|
541
|
+
* @param options - File selection options (accept, maxSize, etc.)
|
|
542
|
+
* @returns Promise resolving to MediaFile with base64 data
|
|
543
|
+
*/
|
|
544
|
+
async selectFile(options) {
|
|
545
|
+
return new Promise((resolve, reject) => {
|
|
546
|
+
const id = this.generateId();
|
|
547
|
+
this.responseHandlers.set(id, (response) => {
|
|
548
|
+
if (response.success && response.file) {
|
|
549
|
+
resolve(response.file);
|
|
550
|
+
}
|
|
551
|
+
else {
|
|
552
|
+
reject(new Error(response.error || 'File selection failed'));
|
|
553
|
+
}
|
|
554
|
+
});
|
|
555
|
+
this.sendToParent({
|
|
556
|
+
type: 'tile:media-select',
|
|
557
|
+
payload: {
|
|
558
|
+
options: {
|
|
559
|
+
accept: options?.accept ?? '*/*',
|
|
560
|
+
maxSize: options?.maxSize ?? 10 * 1024 * 1024, // 10MB default
|
|
561
|
+
multiple: false,
|
|
562
|
+
},
|
|
563
|
+
},
|
|
564
|
+
id,
|
|
565
|
+
});
|
|
566
|
+
// Timeout after 60 seconds
|
|
567
|
+
setTimeout(() => {
|
|
568
|
+
if (this.responseHandlers.has(id)) {
|
|
569
|
+
this.responseHandlers.delete(id);
|
|
570
|
+
reject(new Error('File selection timeout'));
|
|
571
|
+
}
|
|
572
|
+
}, 60000);
|
|
573
|
+
});
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Select multiple files from device
|
|
577
|
+
* @param options - File selection options (accept, maxSize, maxFiles, etc.)
|
|
578
|
+
* @returns Promise resolving to array of MediaFile with base64 data
|
|
579
|
+
*/
|
|
580
|
+
async selectFiles(options) {
|
|
581
|
+
return new Promise((resolve, reject) => {
|
|
582
|
+
const id = this.generateId();
|
|
583
|
+
this.responseHandlers.set(id, (response) => {
|
|
584
|
+
if (response.success && response.files) {
|
|
585
|
+
resolve(response.files);
|
|
586
|
+
}
|
|
587
|
+
else {
|
|
588
|
+
reject(new Error(response.error || 'File selection failed'));
|
|
589
|
+
}
|
|
590
|
+
});
|
|
591
|
+
this.sendToParent({
|
|
592
|
+
type: 'tile:media-select',
|
|
593
|
+
payload: {
|
|
594
|
+
options: {
|
|
595
|
+
accept: options?.accept ?? '*/*',
|
|
596
|
+
maxSize: options?.maxSize ?? 10 * 1024 * 1024, // 10MB default
|
|
597
|
+
multiple: true,
|
|
598
|
+
maxFiles: options?.maxFiles ?? 5,
|
|
599
|
+
},
|
|
600
|
+
},
|
|
601
|
+
id,
|
|
602
|
+
});
|
|
603
|
+
// Timeout after 120 seconds (selecting multiple files takes time)
|
|
604
|
+
setTimeout(() => {
|
|
605
|
+
if (this.responseHandlers.has(id)) {
|
|
606
|
+
this.responseHandlers.delete(id);
|
|
607
|
+
reject(new Error('File selection timeout'));
|
|
608
|
+
}
|
|
609
|
+
}, 120000);
|
|
610
|
+
});
|
|
611
|
+
}
|
|
499
612
|
/**
|
|
500
613
|
* Subscribe to events from parent
|
|
501
614
|
*/
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { TileBridge } from '../bridge/TileBridge';
|
|
3
3
|
import { StateClient } from '../state/StateClient';
|
|
4
|
+
import type { MediaFile, CapturePhotoOptions, SelectFileOptions } from '../types';
|
|
4
5
|
export interface TileContextValue {
|
|
5
6
|
tileId: string | null;
|
|
6
7
|
bridge: TileBridge;
|
|
@@ -26,6 +27,11 @@ export interface TileContextValue {
|
|
|
26
27
|
requestScopes: (scopes: string[]) => Promise<boolean>;
|
|
27
28
|
getCurrentUser: () => Promise<any>;
|
|
28
29
|
};
|
|
30
|
+
media: {
|
|
31
|
+
capturePhoto: (options?: CapturePhotoOptions) => Promise<MediaFile>;
|
|
32
|
+
selectFile: (options?: SelectFileOptions) => Promise<MediaFile>;
|
|
33
|
+
selectFiles: (options?: SelectFileOptions) => Promise<MediaFile[]>;
|
|
34
|
+
};
|
|
29
35
|
}
|
|
30
36
|
export declare const TileContext: React.Context<TileContextValue | null>;
|
|
31
37
|
interface TileProviderProps {
|
|
@@ -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;
|
|
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,qBA+DnE"}
|
|
@@ -45,6 +45,11 @@ export function TileProvider({ children, router }) {
|
|
|
45
45
|
requestScopes: (scopes) => bridge.requestScopes(scopes),
|
|
46
46
|
getCurrentUser: () => bridge.getCurrentUser(),
|
|
47
47
|
},
|
|
48
|
+
media: {
|
|
49
|
+
capturePhoto: (options) => bridge.capturePhoto(options),
|
|
50
|
+
selectFile: (options) => bridge.selectFile(options),
|
|
51
|
+
selectFiles: (options) => bridge.selectFiles(options),
|
|
52
|
+
},
|
|
48
53
|
};
|
|
49
54
|
// Always render children immediately - don't wait for config
|
|
50
55
|
// This eliminates the delay before animations start
|
package/dist/types.d.ts
CHANGED
|
@@ -59,4 +59,71 @@ export interface TileConfig {
|
|
|
59
59
|
permissions?: string[];
|
|
60
60
|
capabilities?: string[];
|
|
61
61
|
}
|
|
62
|
+
/**
|
|
63
|
+
* Result from media capture operations
|
|
64
|
+
*/
|
|
65
|
+
export interface MediaFile {
|
|
66
|
+
/** Base64-encoded file content */
|
|
67
|
+
base64: string;
|
|
68
|
+
/** MIME type (e.g., 'image/jpeg', 'image/png') */
|
|
69
|
+
mimeType: string;
|
|
70
|
+
/** Original filename */
|
|
71
|
+
filename: string;
|
|
72
|
+
/** File size in bytes */
|
|
73
|
+
size: number;
|
|
74
|
+
/** Width in pixels (for images) */
|
|
75
|
+
width?: number;
|
|
76
|
+
/** Height in pixels (for images) */
|
|
77
|
+
height?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Options for capturing a photo
|
|
81
|
+
*/
|
|
82
|
+
export interface CapturePhotoOptions {
|
|
83
|
+
/** Compression quality 0-1 (default: 0.8) */
|
|
84
|
+
quality?: number;
|
|
85
|
+
/** Max file size in bytes (default: 5MB) */
|
|
86
|
+
maxSize?: number;
|
|
87
|
+
/** Max width in pixels (default: 1920) */
|
|
88
|
+
maxWidth?: number;
|
|
89
|
+
/** Max height in pixels (default: 1080) */
|
|
90
|
+
maxHeight?: number;
|
|
91
|
+
/** Source: 'camera', 'library', or 'any' (default: 'any') */
|
|
92
|
+
source?: 'camera' | 'library' | 'any';
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Options for selecting a file
|
|
96
|
+
*/
|
|
97
|
+
export interface SelectFileOptions {
|
|
98
|
+
/** MIME types to accept (default: all types) */
|
|
99
|
+
accept?: string;
|
|
100
|
+
/** Max file size in bytes (default: 10MB) */
|
|
101
|
+
maxSize?: number;
|
|
102
|
+
/** Allow multiple files (default: false) */
|
|
103
|
+
multiple?: boolean;
|
|
104
|
+
/** Max number of files if multiple (default: 5) */
|
|
105
|
+
maxFiles?: number;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Media capture error codes
|
|
109
|
+
*/
|
|
110
|
+
export type MediaErrorCode = 'permission_denied' | 'size_exceeded' | 'type_not_allowed' | 'cancelled' | 'unsupported' | 'processing_failed' | 'timeout';
|
|
111
|
+
/**
|
|
112
|
+
* Media capture error
|
|
113
|
+
*/
|
|
114
|
+
export interface MediaError {
|
|
115
|
+
code: MediaErrorCode;
|
|
116
|
+
message: string;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Media API for tiles
|
|
120
|
+
*/
|
|
121
|
+
export interface MediaAPI {
|
|
122
|
+
/** Capture a photo from camera or library */
|
|
123
|
+
capturePhoto(options?: CapturePhotoOptions): Promise<MediaFile>;
|
|
124
|
+
/** Select a file from device */
|
|
125
|
+
selectFile(options?: SelectFileOptions): Promise<MediaFile>;
|
|
126
|
+
/** Select multiple files from device */
|
|
127
|
+
selectFiles(options?: SelectFileOptions): Promise<MediaFile[]>;
|
|
128
|
+
}
|
|
62
129
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,UAAU,EAAE,MAAM,CAAC;YACnB,MAAM,EAAE,MAAM,EAAE,CAAC;SAClB,CAAC;QACF,IAAI,CAAC,EAAE;YACL,UAAU,EAAE,MAAM,CAAC;YACnB,MAAM,EAAE,MAAM,EAAE,CAAC;SAClB,CAAC;QACF,MAAM,CAAC,EAAE;YACP,UAAU,EAAE,MAAM,CAAC;YACnB,MAAM,EAAE,MAAM,EAAE,CAAC;SAClB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/C,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,KAAK,IAAI,CAAC;IAChE,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;QAChD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACxC,CAAC;IACF,GAAG,EAAE;QACH,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;KACtE,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@thewhateverapp/tile-sdk",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.9",
|
|
4
4
|
"description": "SDK for building interactive tiles on The Whatever App platform",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -23,6 +23,12 @@
|
|
|
23
23
|
"README.md",
|
|
24
24
|
"LICENSE"
|
|
25
25
|
],
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc",
|
|
28
|
+
"lint": "eslint src/",
|
|
29
|
+
"typecheck": "tsc --noEmit",
|
|
30
|
+
"prepublishOnly": "npm run build"
|
|
31
|
+
},
|
|
26
32
|
"repository": {
|
|
27
33
|
"type": "git",
|
|
28
34
|
"url": "https://github.com/oJshua/whatever.git",
|
|
@@ -41,14 +47,10 @@
|
|
|
41
47
|
"react": "^18.0.0"
|
|
42
48
|
},
|
|
43
49
|
"devDependencies": {
|
|
50
|
+
"@types/node": "^20.0.0",
|
|
44
51
|
"@types/react": "^18.2.48",
|
|
45
52
|
"eslint": "^9.39.1",
|
|
46
53
|
"next": "^14.2.0",
|
|
47
54
|
"typescript": "^5.3.3"
|
|
48
|
-
},
|
|
49
|
-
"scripts": {
|
|
50
|
-
"build": "tsc",
|
|
51
|
-
"lint": "eslint src/",
|
|
52
|
-
"typecheck": "tsc --noEmit"
|
|
53
55
|
}
|
|
54
|
-
}
|
|
56
|
+
}
|