@flighthq/host-capacitor 0.1.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/capacitorApp.d.ts +4 -0
- package/dist/capacitorApp.d.ts.map +1 -0
- package/dist/capacitorApp.js +172 -0
- package/dist/capacitorApp.js.map +1 -0
- package/dist/capacitorClipboard.d.ts +4 -0
- package/dist/capacitorClipboard.d.ts.map +1 -0
- package/dist/capacitorClipboard.js +127 -0
- package/dist/capacitorClipboard.js.map +1 -0
- package/dist/capacitorConnectivity.d.ts +4 -0
- package/dist/capacitorConnectivity.d.ts.map +1 -0
- package/dist/capacitorConnectivity.js +69 -0
- package/dist/capacitorConnectivity.js.map +1 -0
- package/dist/capacitorDevice.d.ts +4 -0
- package/dist/capacitorDevice.d.ts.map +1 -0
- package/dist/capacitorDevice.js +100 -0
- package/dist/capacitorDevice.js.map +1 -0
- package/dist/capacitorDialog.d.ts +4 -0
- package/dist/capacitorDialog.d.ts.map +1 -0
- package/dist/capacitorDialog.js +39 -0
- package/dist/capacitorDialog.js.map +1 -0
- package/dist/capacitorFileSystem.d.ts +4 -0
- package/dist/capacitorFileSystem.d.ts.map +1 -0
- package/dist/capacitorFileSystem.js +216 -0
- package/dist/capacitorFileSystem.js.map +1 -0
- package/dist/capacitorGeolocation.d.ts +4 -0
- package/dist/capacitorGeolocation.d.ts.map +1 -0
- package/dist/capacitorGeolocation.js +104 -0
- package/dist/capacitorGeolocation.js.map +1 -0
- package/dist/capacitorHaptics.d.ts +4 -0
- package/dist/capacitorHaptics.d.ts.map +1 -0
- package/dist/capacitorHaptics.js +56 -0
- package/dist/capacitorHaptics.js.map +1 -0
- package/dist/capacitorKeyboard.d.ts +4 -0
- package/dist/capacitorKeyboard.d.ts.map +1 -0
- package/dist/capacitorKeyboard.js +89 -0
- package/dist/capacitorKeyboard.js.map +1 -0
- package/dist/capacitorModule.d.ts +310 -0
- package/dist/capacitorModule.d.ts.map +1 -0
- package/dist/capacitorModule.js +31 -0
- package/dist/capacitorModule.js.map +1 -0
- package/dist/capacitorNotification.d.ts +4 -0
- package/dist/capacitorNotification.d.ts.map +1 -0
- package/dist/capacitorNotification.js +172 -0
- package/dist/capacitorNotification.js.map +1 -0
- package/dist/capacitorRegister.d.ts +3 -0
- package/dist/capacitorRegister.d.ts.map +1 -0
- package/dist/capacitorRegister.js +52 -0
- package/dist/capacitorRegister.js.map +1 -0
- package/dist/capacitorShare.d.ts +4 -0
- package/dist/capacitorShare.d.ts.map +1 -0
- package/dist/capacitorShare.js +66 -0
- package/dist/capacitorShare.js.map +1 -0
- package/dist/capacitorStatusBar.d.ts +4 -0
- package/dist/capacitorStatusBar.d.ts.map +1 -0
- package/dist/capacitorStatusBar.js +80 -0
- package/dist/capacitorStatusBar.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/package.json +49 -0
- package/src/capacitorApp.test.ts +81 -0
- package/src/capacitorClipboard.test.ts +71 -0
- package/src/capacitorConnectivity.test.ts +64 -0
- package/src/capacitorDevice.test.ts +99 -0
- package/src/capacitorDialog.test.ts +50 -0
- package/src/capacitorFileSystem.test.ts +88 -0
- package/src/capacitorGeolocation.test.ts +75 -0
- package/src/capacitorHaptics.test.ts +75 -0
- package/src/capacitorKeyboard.test.ts +89 -0
- package/src/capacitorNotification.test.ts +95 -0
- package/src/capacitorRegister.test.ts +104 -0
- package/src/capacitorShare.test.ts +68 -0
- package/src/capacitorStatusBar.test.ts +66 -0
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
// Maps Flight's FileSystemBackend onto Capacitor's async `@capacitor/filesystem`. Both sides are
|
|
2
|
+
// Promise-based, so the core surface maps cleanly: text via the `utf8` encoding, binary via Base64
|
|
3
|
+
// (Capacitor omits `encoding` for binary and crosses bytes as a Base64 string), plus
|
|
4
|
+
// exists/remove/mkdir/readdir/stat/rename/copy/append. Reads resolve to null / [] and writes to false on
|
|
5
|
+
// failure instead of throwing, per the contract. Paths are forwarded as-is: the caller supplies a
|
|
6
|
+
// Capacitor-resolvable path (a `file://` URI, or a path the host's default Directory resolves).
|
|
7
|
+
//
|
|
8
|
+
// Capacitor has no call for streams, symlinks, POSIX permissions, real-path resolution, filesystem
|
|
9
|
+
// usage, byte-range reads, atomic writes, watching, or well-known path lookup, so those methods report
|
|
10
|
+
// the contract sentinels (null / false / '' / [] / inert unsubscribe).
|
|
11
|
+
export function createCapacitorFileSystemBackend(capacitor) {
|
|
12
|
+
const filesystem = capacitor.filesystem;
|
|
13
|
+
return {
|
|
14
|
+
async readTextFile(path) {
|
|
15
|
+
try {
|
|
16
|
+
return (await filesystem.readFile({ path, encoding: 'utf8' })).data;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
async writeTextFile(path, data) {
|
|
23
|
+
try {
|
|
24
|
+
await filesystem.writeFile({ path, data, encoding: 'utf8', recursive: true });
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
async readBinaryFile(path) {
|
|
32
|
+
try {
|
|
33
|
+
return base64ToBytes((await filesystem.readFile({ path })).data);
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
async readBinaryFileRange() {
|
|
40
|
+
// Capacitor has no byte-range read; report unsupported via the null sentinel.
|
|
41
|
+
return null;
|
|
42
|
+
},
|
|
43
|
+
async writeBinaryFile(path, data) {
|
|
44
|
+
try {
|
|
45
|
+
await filesystem.writeFile({ path, data: bytesToBase64(data), recursive: true });
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
async writeFileAtomic(path, data) {
|
|
53
|
+
// No atomic-write primitive; best-effort direct write (text or binary).
|
|
54
|
+
try {
|
|
55
|
+
if (typeof data === 'string')
|
|
56
|
+
await filesystem.writeFile({ path, data, encoding: 'utf8', recursive: true });
|
|
57
|
+
else
|
|
58
|
+
await filesystem.writeFile({ path, data: bytesToBase64(data), recursive: true });
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
async fileExists(path) {
|
|
66
|
+
try {
|
|
67
|
+
return (await filesystem.stat({ path })).type !== 'directory';
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
async directoryExists(path) {
|
|
74
|
+
try {
|
|
75
|
+
return (await filesystem.stat({ path })).type === 'directory';
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
async removeFile(path) {
|
|
82
|
+
try {
|
|
83
|
+
await filesystem.deleteFile({ path });
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
},
|
|
90
|
+
async removeDirectory(path, recursive) {
|
|
91
|
+
try {
|
|
92
|
+
await filesystem.rmdir({ path, recursive: recursive ?? false });
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
async makeDirectory(path) {
|
|
100
|
+
try {
|
|
101
|
+
await filesystem.mkdir({ path, recursive: true });
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
async readDirectory(path) {
|
|
109
|
+
try {
|
|
110
|
+
return (await filesystem.readdir({ path })).files.map((file) => toFileEntry(file.name, file.uri, file.type));
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
async readDirectoryRecursive() {
|
|
117
|
+
// Capacitor's readdir is non-recursive; a from-scratch walk is out of this adapter's scope.
|
|
118
|
+
return [];
|
|
119
|
+
},
|
|
120
|
+
async statFile(path) {
|
|
121
|
+
try {
|
|
122
|
+
const stat = await filesystem.stat({ path });
|
|
123
|
+
const out = {
|
|
124
|
+
size: stat.size,
|
|
125
|
+
isDirectory: stat.type === 'directory',
|
|
126
|
+
modifiedTime: stat.mtime,
|
|
127
|
+
createdTime: stat.ctime ?? stat.mtime,
|
|
128
|
+
isSymlink: false,
|
|
129
|
+
};
|
|
130
|
+
return out;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
async rename(from, to) {
|
|
137
|
+
try {
|
|
138
|
+
await filesystem.rename({ from, to });
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
async copy(from, to) {
|
|
146
|
+
try {
|
|
147
|
+
await filesystem.copy({ from, to });
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
},
|
|
154
|
+
async appendTextFile(path, data) {
|
|
155
|
+
try {
|
|
156
|
+
await filesystem.appendFile({ path, data, encoding: 'utf8' });
|
|
157
|
+
return true;
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
async openFileReadStream() {
|
|
164
|
+
return null;
|
|
165
|
+
},
|
|
166
|
+
async openFileWriteStream() {
|
|
167
|
+
return null;
|
|
168
|
+
},
|
|
169
|
+
async createFileSymlink() {
|
|
170
|
+
return false;
|
|
171
|
+
},
|
|
172
|
+
async readFileSymlink() {
|
|
173
|
+
return null;
|
|
174
|
+
},
|
|
175
|
+
async getFileRealPath() {
|
|
176
|
+
return null;
|
|
177
|
+
},
|
|
178
|
+
async getFilePermissions() {
|
|
179
|
+
return null;
|
|
180
|
+
},
|
|
181
|
+
async setFilePermissions() {
|
|
182
|
+
return false;
|
|
183
|
+
},
|
|
184
|
+
async canAccessFile() {
|
|
185
|
+
return false;
|
|
186
|
+
},
|
|
187
|
+
async getFileSystemUsage() {
|
|
188
|
+
return null;
|
|
189
|
+
},
|
|
190
|
+
watch() {
|
|
191
|
+
// Capacitor Filesystem emits no change events; inert unsubscribe.
|
|
192
|
+
return () => { };
|
|
193
|
+
},
|
|
194
|
+
getPath() {
|
|
195
|
+
// Well-known directory paths come from Capacitor's Directory enum, resolved host-side, not a call.
|
|
196
|
+
return '';
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
function toFileEntry(name, path, type) {
|
|
201
|
+
return { name, path, isDirectory: type === 'directory' };
|
|
202
|
+
}
|
|
203
|
+
function base64ToBytes(base64) {
|
|
204
|
+
const binary = atob(base64);
|
|
205
|
+
const bytes = new Uint8Array(binary.length);
|
|
206
|
+
for (let i = 0; i < binary.length; i++)
|
|
207
|
+
bytes[i] = binary.charCodeAt(i);
|
|
208
|
+
return bytes;
|
|
209
|
+
}
|
|
210
|
+
function bytesToBase64(bytes) {
|
|
211
|
+
let binary = '';
|
|
212
|
+
for (let i = 0; i < bytes.length; i++)
|
|
213
|
+
binary += String.fromCharCode(bytes[i]);
|
|
214
|
+
return btoa(binary);
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=capacitorFileSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacitorFileSystem.js","sourceRoot":"","sources":["../src/capacitorFileSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { GeolocationBackend } from '@flighthq/types';
|
|
2
|
+
import type { CapacitorApi } from './capacitorModule';
|
|
3
|
+
export declare function createCapacitorGeolocationBackend(capacitor: CapacitorApi): GeolocationBackend;
|
|
4
|
+
//# sourceMappingURL=capacitorGeolocation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacitorGeolocation.d.ts","sourceRoot":"","sources":["../src/capacitorGeolocation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAA8D,MAAM,iBAAiB,CAAC;AAEtH,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,mBAAmB,CAAC;AASzE,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,YAAY,GAAG,kBAAkB,CAgE7F"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// Maps Flight's GeolocationBackend onto Capacitor's `@capacitor/geolocation`. getCurrentPosition and the
|
|
2
|
+
// permission calls are async and map directly. `watchPosition` is the one sync/async seam: the backend
|
|
3
|
+
// returns a numeric watch id synchronously, whereas Capacitor resolves a string callback id, so the
|
|
4
|
+
// adapter mints a local numeric id, kicks off the async watch (fire-and-forget), and records the string
|
|
5
|
+
// id against the number once it resolves; clearWatch resolves the number back to that string (and cancels
|
|
6
|
+
// a watch that was cleared before it even started). Capacitor has no permission-change event, so
|
|
7
|
+
// subscribePermission is inert.
|
|
8
|
+
export function createCapacitorGeolocationBackend(capacitor) {
|
|
9
|
+
const geolocation = capacitor.geolocation;
|
|
10
|
+
let nextWatchId = 1;
|
|
11
|
+
// The Capacitor string callback id keyed by the numeric id handed to the caller; null while the async
|
|
12
|
+
// watch registration is still in flight. A cleared-early entry is removed so its late id self-cancels.
|
|
13
|
+
const watchIds = new Map();
|
|
14
|
+
return {
|
|
15
|
+
async getCurrentPosition(options) {
|
|
16
|
+
try {
|
|
17
|
+
return toGeoPosition(await geolocation.getCurrentPosition(options));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
async getCurrentPositionResult(options) {
|
|
24
|
+
try {
|
|
25
|
+
return { position: toGeoPosition(await geolocation.getCurrentPosition(options)), reason: null };
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
const out = { position: null, reason: 'unavailable' };
|
|
29
|
+
return out;
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
async getPermission() {
|
|
33
|
+
try {
|
|
34
|
+
return toPermissionState((await geolocation.checkPermissions()).location);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return 'prompt';
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
watchPosition(listener, options, onError) {
|
|
41
|
+
const numericId = nextWatchId++;
|
|
42
|
+
watchIds.set(numericId, null);
|
|
43
|
+
geolocation
|
|
44
|
+
.watchPosition(options, (position, err) => {
|
|
45
|
+
if (position !== null && position !== undefined)
|
|
46
|
+
listener(toGeoPosition(position));
|
|
47
|
+
else if (err !== undefined && onError !== undefined)
|
|
48
|
+
onError('unavailable');
|
|
49
|
+
})
|
|
50
|
+
.then((stringId) => {
|
|
51
|
+
if (watchIds.has(numericId))
|
|
52
|
+
watchIds.set(numericId, stringId);
|
|
53
|
+
// Cleared before the registration resolved: cancel the now-live watch immediately.
|
|
54
|
+
else
|
|
55
|
+
geolocation.clearWatch({ id: stringId }).catch(() => { });
|
|
56
|
+
})
|
|
57
|
+
.catch(() => {
|
|
58
|
+
watchIds.delete(numericId);
|
|
59
|
+
});
|
|
60
|
+
return numericId;
|
|
61
|
+
},
|
|
62
|
+
clearWatch(id) {
|
|
63
|
+
const stringId = watchIds.get(id);
|
|
64
|
+
watchIds.delete(id);
|
|
65
|
+
if (stringId !== undefined && stringId !== null)
|
|
66
|
+
geolocation.clearWatch({ id: stringId }).catch(() => { });
|
|
67
|
+
},
|
|
68
|
+
async requestPermission() {
|
|
69
|
+
try {
|
|
70
|
+
return (await geolocation.requestPermissions()).location === 'granted';
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
subscribePermission() {
|
|
77
|
+
// Capacitor emits no permission-change event; inert unsubscribe.
|
|
78
|
+
return () => { };
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function toGeoPosition(position) {
|
|
83
|
+
const coords = position.coords;
|
|
84
|
+
return {
|
|
85
|
+
latitude: coords.latitude,
|
|
86
|
+
longitude: coords.longitude,
|
|
87
|
+
accuracy: coords.accuracy,
|
|
88
|
+
altitude: coords.altitude ?? 0,
|
|
89
|
+
altitudeAccuracy: coords.altitudeAccuracy ?? 0,
|
|
90
|
+
floorLevel: 0,
|
|
91
|
+
heading: coords.heading ?? 0,
|
|
92
|
+
speed: coords.speed ?? 0,
|
|
93
|
+
timestamp: position.timestamp,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Capacitor reports 'granted' | 'denied' | 'prompt' | 'prompt-with-rationale'; the last folds to 'prompt'.
|
|
97
|
+
function toPermissionState(location) {
|
|
98
|
+
if (location === 'granted')
|
|
99
|
+
return 'granted';
|
|
100
|
+
if (location === 'denied')
|
|
101
|
+
return 'denied';
|
|
102
|
+
return 'prompt';
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=capacitorGeolocation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacitorGeolocation.js","sourceRoot":"","sources":["../src/capacitorGeolocation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacitorHaptics.d.ts","sourceRoot":"","sources":["../src/capacitorHaptics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAqB,cAAc,EAA+C,MAAM,iBAAiB,CAAC;AAEtH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAStD,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,YAAY,GAAG,cAAc,CAuCrF"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// Maps Flight's HapticsBackend onto Capacitor's `@capacitor/haptics`. Every Capacitor call is an async
|
|
2
|
+
// void, whereas the HapticsBackend triggers are synchronous booleans, so each adapter method fires the
|
|
3
|
+
// async call and forgets, reporting `true` (the request was issued). Flight's five impact styles fold
|
|
4
|
+
// onto Capacitor's three ('soft' → LIGHT, 'rigid' → HEAVY); notification types uppercase directly.
|
|
5
|
+
// `selection` maps to `selectionChanged`. Capacitor has no cancel, no arbitrary vibration pattern, and
|
|
6
|
+
// no amplitude waveform, so cancel/vibratePattern report false and the optional vibrateWaveform is
|
|
7
|
+
// omitted; the intensity argument to `impact` is not expressible and is ignored.
|
|
8
|
+
export function createCapacitorHapticsBackend(capacitor) {
|
|
9
|
+
const haptics = capacitor.haptics;
|
|
10
|
+
return {
|
|
11
|
+
cancel() {
|
|
12
|
+
// Capacitor exposes no cancel-vibration call.
|
|
13
|
+
return false;
|
|
14
|
+
},
|
|
15
|
+
capabilities(out) {
|
|
16
|
+
out.supported = true;
|
|
17
|
+
out.intensity = false;
|
|
18
|
+
out.patterns = false;
|
|
19
|
+
out.amplitudeControl = false;
|
|
20
|
+
out.customEvents = false;
|
|
21
|
+
return out;
|
|
22
|
+
},
|
|
23
|
+
impact(style) {
|
|
24
|
+
haptics.impact({ style: toCapacitorImpactStyle(style) }).catch(() => { });
|
|
25
|
+
return true;
|
|
26
|
+
},
|
|
27
|
+
isSupported() {
|
|
28
|
+
return true;
|
|
29
|
+
},
|
|
30
|
+
notification(type) {
|
|
31
|
+
haptics.notification({ type: type.toUpperCase() }).catch(() => { });
|
|
32
|
+
return true;
|
|
33
|
+
},
|
|
34
|
+
selection() {
|
|
35
|
+
haptics.selectionChanged().catch(() => { });
|
|
36
|
+
return true;
|
|
37
|
+
},
|
|
38
|
+
vibrate(durationMs) {
|
|
39
|
+
haptics.vibrate({ duration: durationMs }).catch(() => { });
|
|
40
|
+
return true;
|
|
41
|
+
},
|
|
42
|
+
vibratePattern() {
|
|
43
|
+
// Capacitor's vibrate takes a single duration, not an on/off pattern; report unsupported.
|
|
44
|
+
return false;
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Capacitor's ImpactStyle is HEAVY/MEDIUM/LIGHT; Flight's extra 'soft'/'rigid' fold onto the nearest.
|
|
49
|
+
function toCapacitorImpactStyle(style) {
|
|
50
|
+
if (style === 'heavy' || style === 'rigid')
|
|
51
|
+
return 'HEAVY';
|
|
52
|
+
if (style === 'light' || style === 'soft')
|
|
53
|
+
return 'LIGHT';
|
|
54
|
+
return 'MEDIUM';
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=capacitorHaptics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacitorHaptics.js","sourceRoot":"","sources":["../src/capacitorHaptics.ts"],"names":[],"mappings":"AAIA,uGAAuG;AACvG,uGAAuG;AACvG,sGAAsG;AACtG,mGAAmG;AACnG,uGAAuG;AACvG,mGAAmG;AACnG,iFAAiF;AACjF,MAAM,UAAU,6BAA6B,CAAC,SAAuB;IACnE,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;IAClC,OAAO;QACL,MAAM;YACJ,8CAA8C;YAC9C,OAAO,KAAK,CAAC;QACf,CAAC;QACD,YAAY,CAAC,GAAwB;YACnC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;YACrB,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;YACtB,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC;YACrB,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC7B,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;YACzB,OAAO,GAAG,CAAC;QACb,CAAC;QACD,MAAM,CAAC,KAAwB;YAC7B,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,WAAW;YACT,OAAO,IAAI,CAAC;QACd,CAAC;QACD,YAAY,CAAC,IAA4B;YACvC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,SAAS;YACP,OAAO,CAAC,gBAAgB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,UAAkB;YACxB,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,cAAc;YACZ,0FAA0F;YAC1F,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AAED,sGAAsG;AACtG,SAAS,sBAAsB,CAAC,KAAwB;IACtD,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAC3D,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM;QAAE,OAAO,OAAO,CAAC;IAC1D,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacitorKeyboard.d.ts","sourceRoot":"","sources":["../src/capacitorKeyboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EAIpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,KAAK,EAAE,YAAY,EAAiC,MAAM,mBAAmB,CAAC;AASrF,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,YAAY,GAAG,mBAAmB,CA2D3F"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { SoftKeyboardResizeBodyKind, SoftKeyboardResizeNoneKind, SoftKeyboardStyleDarkKind } from '@flighthq/types';
|
|
2
|
+
// Maps Flight's SoftKeyboardBackend onto Capacitor's `@capacitor/keyboard`. show/hide and the setters are
|
|
3
|
+
// async fire-and-forget. Capacitor has no getInfo call, so the sync SoftKeyboardBackend.getInfo reads a
|
|
4
|
+
// local mirror that internal will-show/will-hide listeners (registered at construction) keep current — it
|
|
5
|
+
// reports height 0 / not-visible until the first keyboard event fires. `subscribe` wires the caller's
|
|
6
|
+
// listener behind the will-show/will-hide events, mapping them to Flight's 'will' phase + transition.
|
|
7
|
+
// setResizeMode/setStyle/setAccessoryBarVisible/setScrollAssistEnabled map to their Capacitor setters;
|
|
8
|
+
// the corresponding getters have no Capacitor call and are omitted (they are optional on the seam).
|
|
9
|
+
export function createCapacitorKeyboardBackend(capacitor) {
|
|
10
|
+
const keyboard = capacitor.keyboard;
|
|
11
|
+
// Local mirror kept current by internal listeners, filled into the caller's `out` on getInfo.
|
|
12
|
+
let mirrorVisible = false;
|
|
13
|
+
let mirrorHeight = 0;
|
|
14
|
+
keyboard
|
|
15
|
+
.addListener('keyboardWillShow', (info) => {
|
|
16
|
+
mirrorVisible = true;
|
|
17
|
+
mirrorHeight = info.keyboardHeight;
|
|
18
|
+
})
|
|
19
|
+
.catch(() => { });
|
|
20
|
+
keyboard
|
|
21
|
+
.addListener('keyboardWillHide', () => {
|
|
22
|
+
mirrorVisible = false;
|
|
23
|
+
mirrorHeight = 0;
|
|
24
|
+
})
|
|
25
|
+
.catch(() => { });
|
|
26
|
+
return {
|
|
27
|
+
getInfo(out) {
|
|
28
|
+
out.visible = mirrorVisible;
|
|
29
|
+
out.height = mirrorHeight;
|
|
30
|
+
out.x = 0;
|
|
31
|
+
out.y = 0;
|
|
32
|
+
out.width = 0;
|
|
33
|
+
return out;
|
|
34
|
+
},
|
|
35
|
+
hide() {
|
|
36
|
+
keyboard.hide().catch(() => { });
|
|
37
|
+
},
|
|
38
|
+
setAccessoryBarVisible(visible) {
|
|
39
|
+
keyboard.setAccessoryBarVisible({ isVisible: visible }).catch(() => { });
|
|
40
|
+
},
|
|
41
|
+
setResizeMode(mode) {
|
|
42
|
+
keyboard.setResizeMode({ mode: toCapacitorResizeMode(mode) }).catch(() => { });
|
|
43
|
+
},
|
|
44
|
+
setScrollAssistEnabled(enabled) {
|
|
45
|
+
keyboard.setScroll({ isDisabled: !enabled }).catch(() => { });
|
|
46
|
+
},
|
|
47
|
+
setStyle(style) {
|
|
48
|
+
keyboard.setStyle({ style: style === SoftKeyboardStyleDarkKind ? 'DARK' : 'DEFAULT' }).catch(() => { });
|
|
49
|
+
},
|
|
50
|
+
show() {
|
|
51
|
+
keyboard.show().catch(() => { });
|
|
52
|
+
},
|
|
53
|
+
subscribe(listener) {
|
|
54
|
+
const unsubShow = toUnsubscribe(keyboard.addListener('keyboardWillShow', (info) => listener('will', { durationSeconds: 0, height: info.keyboardHeight })));
|
|
55
|
+
const unsubHide = toUnsubscribe(keyboard.addListener('keyboardWillHide', () => listener('will', { durationSeconds: 0, height: 0 })));
|
|
56
|
+
return () => {
|
|
57
|
+
unsubShow();
|
|
58
|
+
unsubHide();
|
|
59
|
+
};
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
// Flight resize mode ('None' | 'Body') → Capacitor KeyboardResize ('none' | 'body').
|
|
64
|
+
function toCapacitorResizeMode(mode) {
|
|
65
|
+
if (mode === SoftKeyboardResizeNoneKind)
|
|
66
|
+
return 'none';
|
|
67
|
+
if (mode === SoftKeyboardResizeBodyKind)
|
|
68
|
+
return 'body';
|
|
69
|
+
return mode;
|
|
70
|
+
}
|
|
71
|
+
// Bridges Capacitor's Promise<PluginListenerHandle> to Flight's synchronous unsubscribe: fire the
|
|
72
|
+
// registration, adopt the handle when it resolves, and remove it (immediately if already resolved).
|
|
73
|
+
function toUnsubscribe(handlePromise) {
|
|
74
|
+
let removed = false;
|
|
75
|
+
let handle = null;
|
|
76
|
+
handlePromise
|
|
77
|
+
.then((resolved) => {
|
|
78
|
+
handle = resolved;
|
|
79
|
+
if (removed)
|
|
80
|
+
handle.remove().catch(() => { });
|
|
81
|
+
})
|
|
82
|
+
.catch(() => { });
|
|
83
|
+
return () => {
|
|
84
|
+
removed = true;
|
|
85
|
+
if (handle !== null)
|
|
86
|
+
handle.remove().catch(() => { });
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=capacitorKeyboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capacitorKeyboard.js","sourceRoot":"","sources":["../src/capacitorKeyboard.ts"],"names":[],"mappings":"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"}
|