@q9labsai/chalk-react-native 5.0.0 → 5.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/CHANGELOG.md +25 -0
- package/android/build.gradle +38 -0
- package/android/compatibility/ModuleApiCompatibility.java +215 -0
- package/android/src/main/kotlin/ai/q9labs/chalk/reactnative/ChalkAudioRouteModule.kt +5 -6
- package/android/src/main/kotlin/ai/q9labs/chalk/reactnative/CommunicationDeviceListener.kt +23 -0
- package/dist/android/call-service.d.ts +0 -1
- package/dist/android/connection-service.d.ts +0 -1
- package/dist/avatar/FaceAvatar.d.ts +0 -1
- package/dist/avatar/tile-avatar-size.d.ts +0 -1
- package/dist/callkit/callkit.d.ts +0 -1
- package/dist/callkit/resolve-space-callkit-options.d.ts +0 -1
- package/dist/{chunk-OIBT2FNM.js → chunk-MBZRE4US.js} +2 -3
- package/dist/client.d.ts +0 -1
- package/dist/client.js +8 -5
- package/dist/clipboard-store.d.ts +0 -1
- package/dist/clipboard.d.ts +0 -1
- package/dist/components/EmbeddedWhiteboard.d.ts +0 -1
- package/dist/components/RtcVideoView.d.ts +0 -1
- package/dist/components/android-connection-service-controller.d.ts +0 -1
- package/dist/components/native-media-visibility.d.ts +0 -1
- package/dist/components/native-space-callkit-controller.d.ts +0 -1
- package/dist/components/native-space-view/screen-share-availability.d.ts +0 -1
- package/dist/components/rtc-video-view-availability.d.ts +0 -1
- package/dist/components/space-lifecycle.d.ts +0 -1
- package/dist/components/useAndroidCallService.d.ts +0 -1
- package/dist/components/useAndroidConnectionService.d.ts +0 -1
- package/dist/context/space-client-context.d.ts +0 -1
- package/dist/dev.d.ts +0 -1
- package/dist/diagnostics.d.ts +0 -1
- package/dist/dock/Dock.d.ts +0 -1
- package/dist/dock/LeaveMenu.d.ts +0 -1
- package/dist/dock/MoreSheet.d.ts +0 -1
- package/dist/dock/ReactionBurst.d.ts +0 -1
- package/dist/dock/RoutePicker.d.ts +0 -1
- package/dist/dock/audio-route.d.ts +0 -1
- package/dist/frame/CallFrame.d.ts +0 -1
- package/dist/frame/Chalk.d.ts +0 -1
- package/dist/frame/back-handler.d.ts +0 -1
- package/dist/frame/dev-scenario.d.ts +0 -1
- package/dist/frame/device-layout.d.ts +0 -1
- package/dist/frame/measurement.d.ts +0 -1
- package/dist/frame/portal.d.ts +0 -1
- package/dist/frame/preferences.d.ts +0 -1
- package/dist/frame/regions.d.ts +0 -1
- package/dist/haptics/haptics.d.ts +0 -1
- package/dist/header/CallDetailsSheet.d.ts +0 -1
- package/dist/header/Header.d.ts +0 -1
- package/dist/header/QrCode.d.ts +0 -1
- package/dist/hooks/external-store.d.ts +0 -1
- package/dist/hooks/space-hooks.d.ts +0 -1
- package/dist/icons/Icon.d.ts +0 -1
- package/dist/icons/icon-element.d.ts +0 -1
- package/dist/icons/icon-paths.d.ts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +45 -17
- package/dist/invites.d.ts +0 -1
- package/dist/limbo/Limbo.d.ts +0 -1
- package/dist/limbo/Veil.d.ts +0 -1
- package/dist/media/native-capture-error.d.ts +0 -1
- package/dist/media/native-webrtc.d.ts +0 -1
- package/dist/motion/MovingFrame.d.ts +0 -1
- package/dist/motion/motion.d.ts +0 -1
- package/dist/motion/presence.d.ts +0 -1
- package/dist/motion/press.d.ts +0 -1
- package/dist/platform/platform.d.ts +0 -1
- package/dist/primitives/BottomSheet.d.ts +0 -1
- package/dist/primitives/ChalkText.d.ts +0 -1
- package/dist/primitives/CopyButton.d.ts +0 -1
- package/dist/primitives/IconButton.d.ts +0 -1
- package/dist/primitives/Menu.d.ts +0 -1
- package/dist/primitives/NameTag.d.ts +0 -1
- package/dist/primitives/PillButton.d.ts +0 -1
- package/dist/primitives/SegmentedControl.d.ts +0 -1
- package/dist/primitives/SheetGroup.d.ts +0 -1
- package/dist/primitives/Switch.d.ts +0 -1
- package/dist/primitives/TileShell.d.ts +0 -1
- package/dist/primitives/announce.d.ts +0 -1
- package/dist/primitives/menu-placement.d.ts +0 -1
- package/dist/primitives/toast/Toast.d.ts +0 -1
- package/dist/primitives/toast/ToastStack.d.ts +0 -1
- package/dist/primitives/toast/toast-store.d.ts +0 -1
- package/dist/runtime.d.ts +0 -1
- package/dist/sheets/people-chat/ChatNotices.d.ts +0 -1
- package/dist/sheets/people-chat/ChatTab.d.ts +0 -1
- package/dist/sheets/people-chat/Composer.d.ts +0 -1
- package/dist/sheets/people-chat/PeopleChatSheet.d.ts +0 -1
- package/dist/sheets/people-chat/PeopleTab.d.ts +0 -1
- package/dist/sheets/people-chat/PhotoViewer.d.ts +0 -1
- package/dist/sheets/people-chat/TextField.d.ts +0 -1
- package/dist/sheets/people-chat/attachments.d.ts +0 -1
- package/dist/sheets/people-chat/chat-model.d.ts +0 -1
- package/dist/sheets/people-chat/people-model.d.ts +0 -1
- package/dist/sounds/sounds.d.ts +0 -1
- package/dist/space-client/create-native-space-client.d.ts +0 -1
- package/dist/space-client/random-uuid.d.ts +0 -1
- package/dist/stage/ContentTile.d.ts +0 -1
- package/dist/stage/ParticipantTile.d.ts +0 -1
- package/dist/stage/Stage.d.ts +0 -1
- package/dist/stage/TileSheet.d.ts +0 -1
- package/dist/stage/camera.d.ts +0 -1
- package/dist/stage/layout.d.ts +0 -1
- package/dist/stage/space-selector.d.ts +0 -1
- package/dist/stage/stage-view.d.ts +0 -1
- package/dist/status/CallOverlays.d.ts +1 -2
- package/dist/status/ChalkArrival.d.ts +0 -1
- package/dist/status/StatusPage.d.ts +0 -1
- package/dist/status/call-screen.d.ts +0 -1
- package/dist/theme/theme.d.ts +0 -1
- package/dist/theme/tokens.d.ts +0 -1
- package/dist/toasts/CallEventToasts.d.ts +1 -2
- package/dist/toasts/media-failure-copy.d.ts +2 -0
- package/dist/toasts/notices.d.ts +0 -1
- package/dist/ui/ChalkUI.d.ts +0 -1
- package/dist/ui.d.ts +0 -1
- package/dist/ui.js +1 -1
- package/dist/utils/build-chalk-invite-link.d.ts +0 -1
- package/dist/utils/ios-simulator.d.ts +0 -1
- package/dist/whiteboard/embedded-whiteboard-assets.d.ts +0 -1
- package/dist/whiteboard/embedded-whiteboard-viewport.d.ts +0 -1
- package/embedded/chalk-whiteboard/asset-manifest.json +2 -2
- package/embedded/chalk-whiteboard/renderer.js +579 -579
- package/package.json +8 -4
- package/src/components/rtc-video-view-availability.ts +1 -1
- package/src/dock/Dock.tsx +4 -2
- package/src/dock/MoreSheet.tsx +3 -2
- package/src/frame/CallFrame.tsx +4 -4
- package/src/frame/device-layout.tsx +2 -3
- package/src/space-client/create-native-space-client.ts +8 -5
- package/src/stage/TileSheet.tsx +5 -1
- package/src/status/CallOverlays.tsx +18 -3
- package/src/toasts/CallEventToasts.tsx +16 -7
- package/src/toasts/media-failure-copy.ts +10 -0
- package/dist/android/call-service.d.ts.map +0 -1
- package/dist/android/connection-service.d.ts.map +0 -1
- package/dist/avatar/FaceAvatar.d.ts.map +0 -1
- package/dist/avatar/tile-avatar-size.d.ts.map +0 -1
- package/dist/callkit/callkit.d.ts.map +0 -1
- package/dist/callkit/resolve-space-callkit-options.d.ts.map +0 -1
- package/dist/client.d.ts.map +0 -1
- package/dist/clipboard-store.d.ts.map +0 -1
- package/dist/clipboard.d.ts.map +0 -1
- package/dist/components/EmbeddedWhiteboard.d.ts.map +0 -1
- package/dist/components/RtcVideoView.d.ts.map +0 -1
- package/dist/components/android-connection-service-controller.d.ts.map +0 -1
- package/dist/components/native-media-visibility.d.ts.map +0 -1
- package/dist/components/native-space-callkit-controller.d.ts.map +0 -1
- package/dist/components/native-space-view/screen-share-availability.d.ts.map +0 -1
- package/dist/components/rtc-video-view-availability.d.ts.map +0 -1
- package/dist/components/space-lifecycle.d.ts.map +0 -1
- package/dist/components/useAndroidCallService.d.ts.map +0 -1
- package/dist/components/useAndroidConnectionService.d.ts.map +0 -1
- package/dist/context/space-client-context.d.ts.map +0 -1
- package/dist/dev.d.ts.map +0 -1
- package/dist/diagnostics.d.ts.map +0 -1
- package/dist/dock/Dock.d.ts.map +0 -1
- package/dist/dock/LeaveMenu.d.ts.map +0 -1
- package/dist/dock/MoreSheet.d.ts.map +0 -1
- package/dist/dock/ReactionBurst.d.ts.map +0 -1
- package/dist/dock/RoutePicker.d.ts.map +0 -1
- package/dist/dock/audio-route.d.ts.map +0 -1
- package/dist/frame/CallFrame.d.ts.map +0 -1
- package/dist/frame/Chalk.d.ts.map +0 -1
- package/dist/frame/back-handler.d.ts.map +0 -1
- package/dist/frame/dev-scenario.d.ts.map +0 -1
- package/dist/frame/device-layout.d.ts.map +0 -1
- package/dist/frame/measurement.d.ts.map +0 -1
- package/dist/frame/portal.d.ts.map +0 -1
- package/dist/frame/preferences.d.ts.map +0 -1
- package/dist/frame/regions.d.ts.map +0 -1
- package/dist/haptics/haptics.d.ts.map +0 -1
- package/dist/header/CallDetailsSheet.d.ts.map +0 -1
- package/dist/header/Header.d.ts.map +0 -1
- package/dist/header/QrCode.d.ts.map +0 -1
- package/dist/hooks/external-store.d.ts.map +0 -1
- package/dist/hooks/space-hooks.d.ts.map +0 -1
- package/dist/icons/Icon.d.ts.map +0 -1
- package/dist/icons/icon-element.d.ts.map +0 -1
- package/dist/icons/icon-paths.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/invites.d.ts.map +0 -1
- package/dist/limbo/Limbo.d.ts.map +0 -1
- package/dist/limbo/Veil.d.ts.map +0 -1
- package/dist/media/native-capture-error.d.ts.map +0 -1
- package/dist/media/native-webrtc.d.ts.map +0 -1
- package/dist/motion/MovingFrame.d.ts.map +0 -1
- package/dist/motion/motion.d.ts.map +0 -1
- package/dist/motion/presence.d.ts.map +0 -1
- package/dist/motion/press.d.ts.map +0 -1
- package/dist/platform/platform.d.ts.map +0 -1
- package/dist/primitives/BottomSheet.d.ts.map +0 -1
- package/dist/primitives/ChalkText.d.ts.map +0 -1
- package/dist/primitives/CopyButton.d.ts.map +0 -1
- package/dist/primitives/IconButton.d.ts.map +0 -1
- package/dist/primitives/Menu.d.ts.map +0 -1
- package/dist/primitives/NameTag.d.ts.map +0 -1
- package/dist/primitives/PillButton.d.ts.map +0 -1
- package/dist/primitives/SegmentedControl.d.ts.map +0 -1
- package/dist/primitives/SheetGroup.d.ts.map +0 -1
- package/dist/primitives/Switch.d.ts.map +0 -1
- package/dist/primitives/TileShell.d.ts.map +0 -1
- package/dist/primitives/announce.d.ts.map +0 -1
- package/dist/primitives/menu-placement.d.ts.map +0 -1
- package/dist/primitives/toast/Toast.d.ts.map +0 -1
- package/dist/primitives/toast/ToastStack.d.ts.map +0 -1
- package/dist/primitives/toast/toast-store.d.ts.map +0 -1
- package/dist/runtime.d.ts.map +0 -1
- package/dist/sheets/people-chat/ChatNotices.d.ts.map +0 -1
- package/dist/sheets/people-chat/ChatTab.d.ts.map +0 -1
- package/dist/sheets/people-chat/Composer.d.ts.map +0 -1
- package/dist/sheets/people-chat/PeopleChatSheet.d.ts.map +0 -1
- package/dist/sheets/people-chat/PeopleTab.d.ts.map +0 -1
- package/dist/sheets/people-chat/PhotoViewer.d.ts.map +0 -1
- package/dist/sheets/people-chat/TextField.d.ts.map +0 -1
- package/dist/sheets/people-chat/attachments.d.ts.map +0 -1
- package/dist/sheets/people-chat/chat-model.d.ts.map +0 -1
- package/dist/sheets/people-chat/people-model.d.ts.map +0 -1
- package/dist/sounds/sounds.d.ts.map +0 -1
- package/dist/space-client/create-native-space-client.d.ts.map +0 -1
- package/dist/space-client/random-uuid.d.ts.map +0 -1
- package/dist/stage/ContentTile.d.ts.map +0 -1
- package/dist/stage/ParticipantTile.d.ts.map +0 -1
- package/dist/stage/Stage.d.ts.map +0 -1
- package/dist/stage/TileSheet.d.ts.map +0 -1
- package/dist/stage/camera.d.ts.map +0 -1
- package/dist/stage/layout.d.ts.map +0 -1
- package/dist/stage/space-selector.d.ts.map +0 -1
- package/dist/stage/stage-view.d.ts.map +0 -1
- package/dist/status/CallOverlays.d.ts.map +0 -1
- package/dist/status/ChalkArrival.d.ts.map +0 -1
- package/dist/status/StatusPage.d.ts.map +0 -1
- package/dist/status/call-screen.d.ts.map +0 -1
- package/dist/theme/theme.d.ts.map +0 -1
- package/dist/theme/tokens.d.ts.map +0 -1
- package/dist/toasts/CallEventToasts.d.ts.map +0 -1
- package/dist/toasts/notices.d.ts.map +0 -1
- package/dist/ui/ChalkUI.d.ts.map +0 -1
- package/dist/ui.d.ts.map +0 -1
- package/dist/utils/build-chalk-invite-link.d.ts.map +0 -1
- package/dist/utils/ios-simulator.d.ts.map +0 -1
- package/dist/whiteboard/embedded-whiteboard-assets.d.ts.map +0 -1
- package/dist/whiteboard/embedded-whiteboard-viewport.d.ts.map +0 -1
- package/src/callkit/callkit.test.ts +0 -97
- package/src/components/native-space-view/screen-share-availability.test.ts +0 -16
- package/src/frame/regions.test.ts +0 -38
- package/src/media/native-capture-error.test.ts +0 -19
- package/src/primitives/menu-placement.test.ts +0 -50
- package/src/sheets/people-chat/people-chat-model.test.ts +0 -98
- package/src/space-client/whiteboard-watchdog.test.ts +0 -23
- package/src/stage/layout.test.ts +0 -77
- package/src/status/call-screen.test.ts +0 -42
- package/src/toasts/notices.test.ts +0 -92
- package/src/whiteboard/embedded-whiteboard-viewport.test.ts +0 -13
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 5.1.0
|
|
4
|
+
|
|
5
|
+
- Bound each Sync and whiteboard WebSocket opening attempt to the existing 30-second startup allowance, or to `syncStartupTimeoutMs` when set. `syncStartupTimeoutMs` accepts 1 to 60,000 ms, and each attempt gets at least 10 seconds. The whiteboard retries a timed-out attempt through the existing reconnect backoff, and so does Sync once the call is live, such as after a drop or a return to the foreground. A first join does not retry a Sync socket that never opens: the join fails when its startup wait of `syncStartupTimeoutMs` ends, and a setting below 10 seconds ends the join before the attempt's own 10-second minimum. The client's 10-second default does not apply to React Native.
|
|
6
|
+
- Size the call from the enclosing safe-area frame instead of the global window size. Orientation and call-region arrangement now follow the space `Chalk` is given, so a call rendered inside a smaller container, split view or modal lays out for that container rather than the whole screen. Full-screen calls look the same.
|
|
7
|
+
- Render registered native WebRTC host components so remote screen shares and camera video no longer disappear when React Native exports the video view as a string.
|
|
8
|
+
- Disable reaction sending and media enable controls until Sync is live, and keep recovery notices non-blocking.
|
|
9
|
+
- Show plain connection-not-ready and confirmation-timeout media feedback without exposing raw internal exception messages.
|
|
10
|
+
- Run the Android module API compatibility check only in the Chalk repository, so an app's `./gradlew check` no longer needs Chalk's test fixtures or the API 30 platform.
|
|
11
|
+
|
|
12
|
+
## 5.0.1
|
|
13
|
+
|
|
14
|
+
- Fix the Android 11 crash when joining a call by isolating API 31 audio listeners from React Native module signatures.
|
|
15
|
+
|
|
16
|
+
## 5.0.0
|
|
17
|
+
|
|
18
|
+
- Rebuild `Chalk` with a call header, Spotlight and Grid layouts, a dock, People and Chat sheets, and status pages.
|
|
19
|
+
- Add `ChalkArrival`, light and dark color schemes, call sounds and haptics, and permission recovery callbacks.
|
|
20
|
+
- BREAKING: replace the old layout and theme exports with `ChalkProps`, `ColorScheme`, and `Palette`. Remove the `/appearance` and platform-specific entry points.
|
|
21
|
+
- BREAKING: call `onLeave` when the user chooses Home on the post-call page, not immediately after leaving.
|
|
22
|
+
- BREAKING: add Expo audio, haptics, clipboard, document picker, file system, and `expo-crypto` peers. Add Reanimated, Worklets, Gesture Handler, and Safe Area Context peers.
|
|
23
|
+
- Use the v5 client, whiteboard, and facehash packages.
|
|
24
|
+
|
|
25
|
+
See the [project changelog](../../../CHANGELOG.md) for the full export removals and migration details.
|
package/android/build.gradle
CHANGED
|
@@ -41,3 +41,41 @@ dependencies {
|
|
|
41
41
|
implementation("com.facebook.react:react-android")
|
|
42
42
|
implementation("androidx.core:core:1.16.0")
|
|
43
43
|
}
|
|
44
|
+
|
|
45
|
+
def compatibilityClasses = layout.buildDirectory.dir("compatibility/classes")
|
|
46
|
+
def compileCompatibility = tasks.register("compileModuleApiCompatibility", JavaCompile) {
|
|
47
|
+
source fileTree("compatibility") { include "*.java" }
|
|
48
|
+
classpath = files()
|
|
49
|
+
destinationDirectory = compatibilityClasses
|
|
50
|
+
sourceCompatibility = "17"
|
|
51
|
+
targetCompatibility = "17"
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Check the bytecode RN actually reflects, including inferred/private/synthetic getters.
|
|
55
|
+
tasks.register("checkModuleApiCompatibility", JavaExec) {
|
|
56
|
+
dependsOn compileCompatibility, "compileDebugKotlin", "compileDebugJavaWithJavac",
|
|
57
|
+
"compileDebugUnitTestKotlin"
|
|
58
|
+
classpath = files(compatibilityClasses)
|
|
59
|
+
mainClass = "ModuleApiCompatibility"
|
|
60
|
+
doFirst {
|
|
61
|
+
def manifest = layout.buildDirectory.file("compatibility/classpath.txt").get().asFile
|
|
62
|
+
def paths = [android.bootClasspath.first(),
|
|
63
|
+
tasks.named("compileDebugUnitTestKotlin").get().destinationDirectory.get().asFile,
|
|
64
|
+
tasks.named("compileDebugKotlin").get().destinationDirectory.get().asFile,
|
|
65
|
+
tasks.named("compileDebugJavaWithJavac").get().destinationDirectory.get().asFile]
|
|
66
|
+
paths.addAll(configurations.debugCompileClasspath.files)
|
|
67
|
+
manifest.text = paths.collect { it.absolutePath }.join("\n")
|
|
68
|
+
def platforms = [android.defaultConfig.minSdkVersion.apiLevel, 30].unique().collect {
|
|
69
|
+
new File(android.sdkDirectory, "platforms/android-${it}/android.jar")
|
|
70
|
+
}
|
|
71
|
+
platforms.each {
|
|
72
|
+
if (!it.isFile()) throw new GradleException("Install compatibility platform: sdkmanager 'platforms;${it.parentFile.name}'")
|
|
73
|
+
}
|
|
74
|
+
args = [manifest.absolutePath, layout.buildDirectory.dir("compatibility/dependencies").get().asFile.absolutePath] + platforms*.absolutePath
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// The published package leaves out src/test and its fixtures, so only the Chalk repo runs this check.
|
|
79
|
+
if (file("src/test").isDirectory()) {
|
|
80
|
+
tasks.named("check").configure { dependsOn "checkModuleApiCompatibility" }
|
|
81
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import java.io.*;
|
|
2
|
+
import java.net.*;
|
|
3
|
+
import java.nio.file.*;
|
|
4
|
+
import java.util.*;
|
|
5
|
+
import java.util.jar.JarFile;
|
|
6
|
+
import java.util.regex.Pattern;
|
|
7
|
+
import java.util.zip.ZipFile;
|
|
8
|
+
|
|
9
|
+
/** Runs without Android initialization: RN reflects private and synthetic members too. */
|
|
10
|
+
public final class ModuleApiCompatibility {
|
|
11
|
+
private static final Set<String> ROOTS = Set.of(
|
|
12
|
+
"com/facebook/react/bridge/NativeModule", "com/facebook/react/uimanager/ViewManager");
|
|
13
|
+
private static final Pattern TYPE = Pattern.compile("L([^;]+);");
|
|
14
|
+
|
|
15
|
+
record Member(String name, String descriptor) {}
|
|
16
|
+
record ClassInfo(String name, List<String> parents, List<Member> members) {}
|
|
17
|
+
|
|
18
|
+
private static ClassInfo readClass(InputStream stream) throws IOException {
|
|
19
|
+
try (var in = new DataInputStream(stream)) {
|
|
20
|
+
if (in.readInt() != 0xcafebabe) throw new IOException("Not a class file");
|
|
21
|
+
in.skipNBytes(4);
|
|
22
|
+
Object[] pool = new Object[in.readUnsignedShort()];
|
|
23
|
+
for (int i = 1; i < pool.length; i++) {
|
|
24
|
+
switch (in.readUnsignedByte()) {
|
|
25
|
+
case 1 -> pool[i] = in.readUTF();
|
|
26
|
+
case 7 -> pool[i] = in.readUnsignedShort();
|
|
27
|
+
case 3, 4, 9, 10, 11, 12, 17, 18 -> in.skipNBytes(4);
|
|
28
|
+
case 5, 6 -> { in.skipNBytes(8); i++; }
|
|
29
|
+
case 8, 16, 19, 20 -> in.skipNBytes(2);
|
|
30
|
+
case 15 -> in.skipNBytes(3);
|
|
31
|
+
default -> throw new IOException("Unknown constant pool entry");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
in.readUnsignedShort();
|
|
35
|
+
String name = (String) pool[(int) pool[in.readUnsignedShort()]];
|
|
36
|
+
var parents = new ArrayList<String>();
|
|
37
|
+
int superclass = in.readUnsignedShort();
|
|
38
|
+
if (superclass != 0) parents.add((String) pool[(int) pool[superclass]]);
|
|
39
|
+
int interfaces = in.readUnsignedShort();
|
|
40
|
+
for (int i = 0; i < interfaces; i++) {
|
|
41
|
+
parents.add((String) pool[(int) pool[in.readUnsignedShort()]]);
|
|
42
|
+
}
|
|
43
|
+
var members = new ArrayList<Member>();
|
|
44
|
+
// Both field_info and method_info have the same layout.
|
|
45
|
+
for (int kind = 0; kind < 2; kind++) {
|
|
46
|
+
int count = in.readUnsignedShort();
|
|
47
|
+
for (int i = 0; i < count; i++) {
|
|
48
|
+
in.readUnsignedShort();
|
|
49
|
+
members.add(new Member((String) pool[in.readUnsignedShort()],
|
|
50
|
+
(String) pool[in.readUnsignedShort()]));
|
|
51
|
+
int attributes = in.readUnsignedShort();
|
|
52
|
+
for (int j = 0; j < attributes; j++) {
|
|
53
|
+
in.readUnsignedShort();
|
|
54
|
+
in.skipNBytes(Integer.toUnsignedLong(in.readInt()));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return new ClassInfo(name, parents, members);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
private static boolean reflected(String name, ClassLoader classes, Map<String, Boolean> cache)
|
|
63
|
+
throws IOException {
|
|
64
|
+
if (ROOTS.contains(name)) return true;
|
|
65
|
+
if (cache.containsKey(name)) return cache.get(name);
|
|
66
|
+
var stream = classes.getResourceAsStream(name + ".class");
|
|
67
|
+
if (stream == null) throw new IOException("Missing hierarchy class: " + name);
|
|
68
|
+
var info = readClass(stream);
|
|
69
|
+
for (String parent : info.parents()) {
|
|
70
|
+
if (reflected(parent, classes, cache)) {
|
|
71
|
+
cache.put(name, true);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
cache.put(name, false);
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
private static Set<String> platformTypes(Path jar) throws IOException {
|
|
80
|
+
try (var zip = new JarFile(jar.toFile())) {
|
|
81
|
+
var types = new HashSet<String>();
|
|
82
|
+
zip.stream().filter(e -> e.getName().endsWith(".class"))
|
|
83
|
+
.forEach(e -> types.add(e.getName().replaceFirst("\\.class$", "")));
|
|
84
|
+
return types;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
private static List<String> check(ClassInfo info, ClassLoader runtime,
|
|
89
|
+
Set<String> compileTypes, Set<String> supportedTypes) throws ClassNotFoundException {
|
|
90
|
+
var errors = new ArrayList<String>();
|
|
91
|
+
for (var member : info.members()) {
|
|
92
|
+
var types = TYPE.matcher(member.descriptor());
|
|
93
|
+
while (types.find()) {
|
|
94
|
+
String type = types.group(1);
|
|
95
|
+
// Also covers Java platform types that the host JDK could otherwise mask.
|
|
96
|
+
if (compileTypes.contains(type) && !supportedTypes.contains(type)) {
|
|
97
|
+
errors.add(member.name() + member.descriptor() + " missing " + type);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
Class<?> module = Class.forName(info.name().replace('/', '.'), false, runtime);
|
|
103
|
+
try { module.getDeclaredMethods(); }
|
|
104
|
+
catch (LinkageError e) { errors.add("getDeclaredMethods: " + e); }
|
|
105
|
+
try { module.getDeclaredFields(); }
|
|
106
|
+
catch (LinkageError e) { errors.add("getDeclaredFields: " + e); }
|
|
107
|
+
} catch (LinkageError e) {
|
|
108
|
+
errors.add("class loading: " + e);
|
|
109
|
+
}
|
|
110
|
+
return errors;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
private static List<ClassInfo> classes(Path directory) throws IOException {
|
|
114
|
+
try (var files = Files.walk(directory)) {
|
|
115
|
+
var result = new ArrayList<ClassInfo>();
|
|
116
|
+
for (Path file : files.filter(p -> p.toString().endsWith(".class")).sorted().toList()) {
|
|
117
|
+
result.add(readClass(Files.newInputStream(file)));
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
private static URLClassLoader loader(List<Path> paths) throws MalformedURLException {
|
|
124
|
+
var urls = new ArrayList<URL>();
|
|
125
|
+
for (Path path : paths) urls.add(path.toUri().toURL());
|
|
126
|
+
return new URLClassLoader(urls.toArray(URL[]::new), ClassLoader.getPlatformClassLoader());
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
public static void main(String[] args) throws Exception {
|
|
130
|
+
// Gradle writes paths one per line, avoiding command-line length limits.
|
|
131
|
+
List<Path> paths = Files.readAllLines(Path.of(args[0])).stream().map(Path::of).toList();
|
|
132
|
+
Path compilePlatform = paths.get(0);
|
|
133
|
+
Path fixtureDirectory = paths.get(1);
|
|
134
|
+
List<Path> moduleDirectories = paths.subList(2, 4);
|
|
135
|
+
var dependencies = new ArrayList<Path>();
|
|
136
|
+
Path extracted = Path.of(args[1]);
|
|
137
|
+
Files.createDirectories(extracted);
|
|
138
|
+
for (Path path : paths.subList(4, paths.size())) {
|
|
139
|
+
if (!path.toString().endsWith(".aar")) { dependencies.add(path); continue; }
|
|
140
|
+
try (var aar = new ZipFile(path.toFile())) {
|
|
141
|
+
for (var entry : aar.stream().filter(e -> e.getName().endsWith(".jar")).toList()) {
|
|
142
|
+
Path jar = extracted.resolve(dependencies.size() + ".jar");
|
|
143
|
+
try (var stream = aar.getInputStream(entry)) {
|
|
144
|
+
Files.copy(stream, jar, StandardCopyOption.REPLACE_EXISTING);
|
|
145
|
+
}
|
|
146
|
+
dependencies.add(jar);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
var ownClasses = new ArrayList<ClassInfo>();
|
|
151
|
+
for (Path directory : moduleDirectories) {
|
|
152
|
+
if (Files.isDirectory(directory)) ownClasses.addAll(classes(directory));
|
|
153
|
+
}
|
|
154
|
+
if (ownClasses.isEmpty()) throw new AssertionError("No compiled SDK classes");
|
|
155
|
+
var classpath = new ArrayList<Path>(moduleDirectories);
|
|
156
|
+
classpath.add(fixtureDirectory);
|
|
157
|
+
classpath.addAll(dependencies);
|
|
158
|
+
var hierarchyPath = new ArrayList<Path>(classpath);
|
|
159
|
+
hierarchyPath.add(compilePlatform);
|
|
160
|
+
Set<String> compileTypes = platformTypes(compilePlatform);
|
|
161
|
+
try (var hierarchy = loader(hierarchyPath)) {
|
|
162
|
+
var cache = new HashMap<String, Boolean>();
|
|
163
|
+
var modules = new ArrayList<ClassInfo>();
|
|
164
|
+
for (var info : ownClasses) {
|
|
165
|
+
if (reflected(info.name(), hierarchy, cache)) modules.add(info);
|
|
166
|
+
}
|
|
167
|
+
if (modules.isEmpty()) throw new AssertionError("No React Native modules/view managers");
|
|
168
|
+
var fixtures = classes(fixtureDirectory);
|
|
169
|
+
var expected = Map.of(
|
|
170
|
+
"OriginalListenerModule", "AudioManager$OnCommunicationDeviceChangedListener",
|
|
171
|
+
"FactoryInferredModule", "AudioManager$OnCommunicationDeviceChangedListener",
|
|
172
|
+
"ModeListenerViewManager", "AudioManager$OnModeChangedListener");
|
|
173
|
+
int failures = 0;
|
|
174
|
+
for (int index = 2; index < args.length; index++) {
|
|
175
|
+
Path platform = Path.of(args[index]);
|
|
176
|
+
Set<String> supportedTypes = platformTypes(platform);
|
|
177
|
+
var runtimePath = new ArrayList<Path>();
|
|
178
|
+
runtimePath.add(platform);
|
|
179
|
+
runtimePath.addAll(classpath);
|
|
180
|
+
try (var runtime = loader(runtimePath)) {
|
|
181
|
+
for (var module : modules) {
|
|
182
|
+
var errors = check(module, runtime, compileTypes, supportedTypes);
|
|
183
|
+
for (String error : errors) System.err.println(platform + ": " + module.name() + ": " + error);
|
|
184
|
+
if (!errors.isEmpty()) failures++;
|
|
185
|
+
}
|
|
186
|
+
int rejected = 0;
|
|
187
|
+
for (var fixture : fixtures) {
|
|
188
|
+
String simpleName = fixture.name().substring(fixture.name().lastIndexOf('/') + 1);
|
|
189
|
+
if (!expected.containsKey(simpleName)) continue;
|
|
190
|
+
if (!reflected(fixture.name(), hierarchy, cache)) {
|
|
191
|
+
throw new AssertionError("Fixture is not a module/view manager: " + simpleName);
|
|
192
|
+
}
|
|
193
|
+
var errors = check(fixture, runtime, compileTypes, supportedTypes);
|
|
194
|
+
String missing = expected.get(simpleName);
|
|
195
|
+
if (supportedTypes.contains("android/media/" + missing)) {
|
|
196
|
+
if (!errors.isEmpty()) throw new AssertionError("Supported fixture failed: " + simpleName + ": " + errors);
|
|
197
|
+
rejected++;
|
|
198
|
+
System.out.println("EXPECTED PASS " + platform.getParent().getFileName() + " " + simpleName);
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (errors.stream().noneMatch(e -> e.contains("missing android/media/" + missing))
|
|
202
|
+
|| errors.stream().noneMatch(e -> e.contains("getDeclaredMethods: java.lang.NoClassDefFoundError"))) {
|
|
203
|
+
throw new AssertionError("Unsafe fixture escaped: " + simpleName + ": " + errors);
|
|
204
|
+
}
|
|
205
|
+
rejected++;
|
|
206
|
+
System.out.println("EXPECTED FAIL " + platform.getParent().getFileName() + " " + simpleName + ": " + errors);
|
|
207
|
+
}
|
|
208
|
+
if (rejected != expected.size()) throw new AssertionError("Missing negative fixtures");
|
|
209
|
+
System.out.println("Checked " + modules.size() + " SDK modules/view managers against " + platform);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (args.length < 3 || failures != 0) throw new AssertionError("Incompatible SDK classes: " + failures);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
@@ -31,8 +31,8 @@ class ChalkAudioRouteModule(
|
|
|
31
31
|
override fun onAudioDevicesAdded(addedDevices: Array<out AudioDeviceInfo>) = emit()
|
|
32
32
|
override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>) = emit()
|
|
33
33
|
}
|
|
34
|
-
//
|
|
35
|
-
private
|
|
34
|
+
// React Native reflects private methods too, so their types must exist on every supported API.
|
|
35
|
+
private var communicationListener: AutoCloseable? = null
|
|
36
36
|
|
|
37
37
|
override fun getName(): String = "ChalkAudioRouteModule"
|
|
38
38
|
|
|
@@ -44,7 +44,7 @@ class ChalkAudioRouteModule(
|
|
|
44
44
|
listening = true
|
|
45
45
|
audioManager.registerAudioDeviceCallback(deviceCallback, handler)
|
|
46
46
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
|
47
|
-
audioManager
|
|
47
|
+
communicationListener = CommunicationDeviceListener(audioManager, reactContext.mainExecutor) { emit() }
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
|
|
@@ -56,9 +56,8 @@ class ChalkAudioRouteModule(
|
|
|
56
56
|
override fun invalidate() {
|
|
57
57
|
if (listening) {
|
|
58
58
|
audioManager.unregisterAudioDeviceCallback(deviceCallback)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
59
|
+
communicationListener?.close()
|
|
60
|
+
communicationListener = null
|
|
62
61
|
}
|
|
63
62
|
super.invalidate()
|
|
64
63
|
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
package ai.q9labs.chalk.reactnative
|
|
2
|
+
|
|
3
|
+
import android.media.AudioManager
|
|
4
|
+
import android.os.Build
|
|
5
|
+
import androidx.annotation.RequiresApi
|
|
6
|
+
import java.util.concurrent.Executor
|
|
7
|
+
|
|
8
|
+
@RequiresApi(Build.VERSION_CODES.S)
|
|
9
|
+
internal class CommunicationDeviceListener(
|
|
10
|
+
private val audioManager: AudioManager,
|
|
11
|
+
executor: Executor,
|
|
12
|
+
onChanged: () -> Unit,
|
|
13
|
+
) : AutoCloseable {
|
|
14
|
+
private val listener = AudioManager.OnCommunicationDeviceChangedListener { onChanged() }
|
|
15
|
+
|
|
16
|
+
init {
|
|
17
|
+
audioManager.addOnCommunicationDeviceChangedListener(executor, listener)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
override fun close() {
|
|
21
|
+
audioManager.removeOnCommunicationDeviceChangedListener(listener)
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
/** Starts the Android foreground service for the call. Resolves false when there's nothing to keep running (no microphone or camera permission) or Android refused the start. */
|
|
2
2
|
export declare function startAndroidCallService(): Promise<boolean>;
|
|
3
3
|
export declare function stopAndroidCallService(): Promise<void>;
|
|
4
|
-
//# sourceMappingURL=call-service.d.ts.map
|
|
@@ -23,4 +23,3 @@ export declare function setAndroidConnectionServiceActive(callId: string): Promi
|
|
|
23
23
|
export declare function endAndroidConnectionServiceCall(callId: string, options?: AndroidConnectionServiceEndCallOptions): Promise<boolean>;
|
|
24
24
|
export declare function addAndroidConnectionServiceListener(listener: (event: AndroidConnectionServiceEvent) => void): () => void;
|
|
25
25
|
export {};
|
|
26
|
-
//# sourceMappingURL=connection-service.d.ts.map
|
|
@@ -16,4 +16,3 @@ export type FaceAvatarProps = {
|
|
|
16
16
|
* stops with reduced motion. Decorative: the parent names the person.
|
|
17
17
|
*/
|
|
18
18
|
export declare const FaceAvatar: import("react").MemoExoticComponent<({ name, size, style, level, lookAround, testID }: FaceAvatarProps) => React.JSX.Element>;
|
|
19
|
-
//# sourceMappingURL=FaceAvatar.d.ts.map
|
|
@@ -4,8 +4,7 @@ import {
|
|
|
4
4
|
|
|
5
5
|
// src/frame/device-layout.tsx
|
|
6
6
|
import { createContext, useContext, useMemo } from "react";
|
|
7
|
-
import {
|
|
8
|
-
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|
7
|
+
import { useSafeAreaFrame, useSafeAreaInsets } from "react-native-safe-area-context";
|
|
9
8
|
|
|
10
9
|
// src/frame/regions.ts
|
|
11
10
|
function arrangementFor(width, height) {
|
|
@@ -46,7 +45,7 @@ function frameRegions(arrangement, width, height, insets, cardOpen = false) {
|
|
|
46
45
|
import { jsx } from "react/jsx-runtime";
|
|
47
46
|
var DeviceLayoutContext = createContext(null);
|
|
48
47
|
function DeviceLayoutProvider({ children }) {
|
|
49
|
-
const { width, height } =
|
|
48
|
+
const { width, height } = useSafeAreaFrame();
|
|
50
49
|
const insets = useSafeAreaInsets();
|
|
51
50
|
const value = useMemo(() => {
|
|
52
51
|
const arrangement = arrangementFor(width, height);
|
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
/** Native client construction for applications that own the call lifecycle. */
|
|
2
2
|
export { createNativeSpaceClient } from "./space-client/create-native-space-client";
|
|
3
3
|
export type { NativeSpaceClientOptions } from "./space-client/create-native-space-client";
|
|
4
|
-
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.js
CHANGED
|
@@ -39,6 +39,7 @@ function ensureRandomUUID() {
|
|
|
39
39
|
function createNativeSpaceClient(options) {
|
|
40
40
|
ensureRandomUUID();
|
|
41
41
|
const { storage } = options;
|
|
42
|
+
const syncStartupTimeoutMs = options.syncStartupTimeoutMs ?? 3e4;
|
|
42
43
|
const apiBaseURL = options.baseUrl ?? "https://api.chalkmeet.com";
|
|
43
44
|
const syncURL = options.syncUrl ?? defaultSyncURL(apiBaseURL);
|
|
44
45
|
const fetch = globalThis.fetch;
|
|
@@ -61,9 +62,9 @@ function createNativeSpaceClient(options) {
|
|
|
61
62
|
getDisplayMedia: async () => await mediaDevices.getDisplayMedia()
|
|
62
63
|
},
|
|
63
64
|
createMediaClient: (input) => createMediaClient(apiBaseURL, input, fetch),
|
|
64
|
-
createSyncClient: (input) => createSyncClient(syncURL, input, lifecycle, webSocket, storage),
|
|
65
|
+
createSyncClient: (input) => createSyncClient(syncURL, input, lifecycle, webSocket, storage, syncStartupTimeoutMs),
|
|
65
66
|
createChatFileTransport: (input) => createChatFileTransport(apiBaseURL, input, fetch),
|
|
66
|
-
createWhiteboardClient: options.whiteboardURL === null ? void 0 : (input) => createWhiteboardClient(apiBaseURL, options.whiteboardURL ?? whiteboardURL(syncURL), input, fetch, lifecycle, webSocket),
|
|
67
|
+
createWhiteboardClient: options.whiteboardURL === null ? void 0 : (input) => createWhiteboardClient(apiBaseURL, options.whiteboardURL ?? whiteboardURL(syncURL), input, fetch, lifecycle, webSocket, syncStartupTimeoutMs),
|
|
67
68
|
subscribeForeground: (listener) => {
|
|
68
69
|
const subscription = AppState.addEventListener("change", (state) => {
|
|
69
70
|
if (state === "active") listener();
|
|
@@ -79,7 +80,7 @@ function createNativeSpaceClient(options) {
|
|
|
79
80
|
whiteboardUrl: options.whiteboardURL,
|
|
80
81
|
dependencies,
|
|
81
82
|
fetch,
|
|
82
|
-
syncStartupTimeoutMs
|
|
83
|
+
syncStartupTimeoutMs,
|
|
83
84
|
initialMicrophoneEnabled: options.microphone,
|
|
84
85
|
initialCameraEnabled: options.camera
|
|
85
86
|
}
|
|
@@ -135,7 +136,7 @@ function createSFUConnectionMediaClient(client) {
|
|
|
135
136
|
subscribe: client.subscribe.bind(client)
|
|
136
137
|
};
|
|
137
138
|
}
|
|
138
|
-
function createSyncClient(syncURL, input, lifecycle, webSocket, storage) {
|
|
139
|
+
function createSyncClient(syncURL, input, lifecycle, webSocket, storage, dialTimeoutMs) {
|
|
139
140
|
const subject = input.access.subject;
|
|
140
141
|
const scope = `${subject.tenantId}:${subject.episodeId}:${subject.participantId}`;
|
|
141
142
|
return createV1SyncClient({
|
|
@@ -144,13 +145,14 @@ function createSyncClient(syncURL, input, lifecycle, webSocket, storage) {
|
|
|
144
145
|
mediaPlane: input.media,
|
|
145
146
|
lifecycle,
|
|
146
147
|
webSocket,
|
|
148
|
+
dialTimeoutMs,
|
|
147
149
|
...storage ? { pendingStore: new AsyncStorageV1PendingTargetStore({ scope, storage }) } : {}
|
|
148
150
|
});
|
|
149
151
|
}
|
|
150
152
|
function createChatFileTransport(apiBaseURL, input, fetch) {
|
|
151
153
|
return createChalkChatFileHttpTransport({ baseUrl: apiBaseURL, token: input.token, fetch });
|
|
152
154
|
}
|
|
153
|
-
function createWhiteboardClient(apiBaseURL, url, input, fetch, lifecycle, webSocket) {
|
|
155
|
+
function createWhiteboardClient(apiBaseURL, url, input, fetch, lifecycle, webSocket, dialTimeoutMs) {
|
|
154
156
|
const files = createChalkWhiteboardV1FileDownloadTransport({
|
|
155
157
|
baseUrl: apiBaseURL,
|
|
156
158
|
token: input.token,
|
|
@@ -162,6 +164,7 @@ function createWhiteboardClient(apiBaseURL, url, input, fetch, lifecycle, webSoc
|
|
|
162
164
|
files,
|
|
163
165
|
lifecycle,
|
|
164
166
|
webSocket,
|
|
167
|
+
dialTimeoutMs,
|
|
165
168
|
onWatchdogReplacement: input.onWatchdogReplacement,
|
|
166
169
|
onSummary: (summary) => {
|
|
167
170
|
input.onSummary(summary);
|
|
@@ -14,4 +14,3 @@ export interface ClipboardTextStore {
|
|
|
14
14
|
subscribe(listener: () => void): () => void;
|
|
15
15
|
}
|
|
16
16
|
export declare function createClipboardTextStore({ clipboard, shouldReadClipboard, subscribeToAppState }: ClipboardTextStoreOptions): ClipboardTextStore;
|
|
17
|
-
//# sourceMappingURL=clipboard-store.d.ts.map
|
package/dist/clipboard.d.ts
CHANGED
|
@@ -7,4 +7,3 @@ export interface UseClipboardInviteSuggestionOptions {
|
|
|
7
7
|
getSuggestion: (clipboardText: string | null | undefined, currentInput: string) => string | null;
|
|
8
8
|
}
|
|
9
9
|
export declare function useClipboardInviteSuggestion(currentInput: string, { clipboard, getSuggestion }: UseClipboardInviteSuggestionOptions): string | null;
|
|
10
|
-
//# sourceMappingURL=clipboard.d.ts.map
|
|
@@ -43,4 +43,3 @@ export declare const embeddedWhiteboardWebViewSecurityPolicy: Readonly<{
|
|
|
43
43
|
thirdPartyCookiesEnabled: false;
|
|
44
44
|
}>;
|
|
45
45
|
export declare function EmbeddedWhiteboard({ transport, journeyId, traceparent, tracestate, canDraw, canClear, theme: themeOverride, localParticipantColor, rendererURL: rendererURLOverride, style, testID, onMetric, onError, onUserExport }: EmbeddedWhiteboardProps): React.JSX.Element;
|
|
46
|
-
//# sourceMappingURL=EmbeddedWhiteboard.d.ts.map
|
|
@@ -30,4 +30,3 @@ export declare class AndroidConnectionServiceController {
|
|
|
30
30
|
readonly subscribe: (listener: () => void) => (() => void);
|
|
31
31
|
readonly update: (input: AndroidConnectionServiceControllerInput) => void;
|
|
32
32
|
}
|
|
33
|
-
//# sourceMappingURL=android-connection-service-controller.d.ts.map
|
|
@@ -10,4 +10,3 @@ export interface RtcVideoViewProps extends ViewProps {
|
|
|
10
10
|
type RtcVideoViewComponent = ComponentType<RtcVideoViewProps>;
|
|
11
11
|
export declare function canRenderRtcVideoView(component: unknown): component is RtcVideoViewComponent;
|
|
12
12
|
export {};
|
|
13
|
-
//# sourceMappingURL=rtc-video-view-availability.d.ts.map
|
|
@@ -11,4 +11,3 @@ interface UseAndroidConnectionServiceOptions {
|
|
|
11
11
|
}
|
|
12
12
|
export declare function useAndroidConnectionService({ displayName, enabled, hasVideo, joinNonce, onDisconnectRequest, phase, spaceId, spaceName }: UseAndroidConnectionServiceOptions): void;
|
|
13
13
|
export {};
|
|
14
|
-
//# sourceMappingURL=useAndroidConnectionService.d.ts.map
|
package/dist/dev.d.ts
CHANGED
|
@@ -7,4 +7,3 @@ export type { DevScenario } from "./frame/dev-scenario";
|
|
|
7
7
|
export type { AudioRoute, AudioRouteKind, AudioRoutes } from "./dock/audio-route";
|
|
8
8
|
export { setMeasurementRegistry } from "./frame/measurement";
|
|
9
9
|
export type { MeasuredFrame, Measurement, MeasurementRegistry } from "./frame/measurement";
|
|
10
|
-
//# sourceMappingURL=dev.d.ts.map
|
package/dist/diagnostics.d.ts
CHANGED
|
@@ -47,4 +47,3 @@ export declare function recordDiagnosticsFailure(source: string, message: string
|
|
|
47
47
|
export declare function clearDevDiagnosticsLogs(): void;
|
|
48
48
|
export declare function resetDevDiagnosticsState(): void;
|
|
49
49
|
export declare function buildDevDiagnosticsCopyText(): string;
|
|
50
|
-
//# sourceMappingURL=diagnostics.d.ts.map
|
package/dist/dock/Dock.d.ts
CHANGED
|
@@ -20,4 +20,3 @@ export type DockProps = {
|
|
|
20
20
|
* More and Leave. Spread across the phone in portrait, centred with 14 pt gaps in landscape.
|
|
21
21
|
*/
|
|
22
22
|
export declare const Dock: import("react").MemoExoticComponent<({ arrangement, microphoneOn, cameraOn, onToggleMicrophone, onToggleCamera, onOpenMore, onLeave, moreOpen, leaveOpen, moreRef, leaveRef }: DockProps) => import("react").JSX.Element>;
|
|
23
|
-
//# sourceMappingURL=Dock.d.ts.map
|
package/dist/dock/LeaveMenu.d.ts
CHANGED
|
@@ -9,4 +9,3 @@ export type LeaveMenuProps = {
|
|
|
9
9
|
};
|
|
10
10
|
/** A host's Leave button asks whether to leave alone or end the call for everyone. */
|
|
11
11
|
export declare function LeaveMenu({ open, onClose, anchorRef, onLeave, onEnd }: LeaveMenuProps): React.JSX.Element | null;
|
|
12
|
-
//# sourceMappingURL=LeaveMenu.d.ts.map
|
package/dist/dock/MoreSheet.d.ts
CHANGED
|
@@ -14,4 +14,3 @@ export type MoreSheetProps = {
|
|
|
14
14
|
* Chat, People and the stage layout. Actions that change the call close the sheet; copying keeps it open.
|
|
15
15
|
*/
|
|
16
16
|
export declare function MoreSheet({ open, onClose, onOpenPeople, onOpenChat, inviteLink, returnFocusRef }: MoreSheetProps): React.JSX.Element;
|
|
17
|
-
//# sourceMappingURL=MoreSheet.d.ts.map
|
|
@@ -13,4 +13,3 @@ export type RoutePickerProps = {
|
|
|
13
13
|
* button on iOS, where the mockup draws the system route menu, and a sheet on Android.
|
|
14
14
|
*/
|
|
15
15
|
export declare function RoutePicker({ open, onClose, onSelect, output, anchorRef }: RoutePickerProps): React.JSX.Element | null;
|
|
16
|
-
//# sourceMappingURL=RoutePicker.d.ts.map
|
|
@@ -14,4 +14,3 @@ export type CallFrameProps = {
|
|
|
14
14
|
* arrangement. Each region lives in its own folder so the part lanes can work in parallel.
|
|
15
15
|
*/
|
|
16
16
|
export declare function CallFrame({ displayName, callName, inviteLink, onLeave, onOpenSettings, onRejoin, resumedAfterSettings }: CallFrameProps): React.JSX.Element;
|
|
17
|
-
//# sourceMappingURL=CallFrame.d.ts.map
|
package/dist/frame/Chalk.d.ts
CHANGED
|
@@ -37,4 +37,3 @@ export type ChalkProps = {
|
|
|
37
37
|
* off, and draws everything inside the safe area in portrait, landscape and on iPad.
|
|
38
38
|
*/
|
|
39
39
|
export declare function Chalk({ client, colorScheme, onColorSchemeChange, soundsEnabled, onSoundsEnabledChange, ...frame }: ChalkProps): React.JSX.Element;
|
|
40
|
-
//# sourceMappingURL=Chalk.d.ts.map
|
|
@@ -25,4 +25,3 @@ export declare function setMeasurementRegistry(next: MeasurementRegistry | null)
|
|
|
25
25
|
/** A ref for the host view that carries `testID`; attach it to that view. */
|
|
26
26
|
export declare function useMeasuredRef<TNode extends MeasurableNode>(testID: string | undefined, style: StyleProp<ViewStyle | TextStyle>): RefObject<TNode | null>;
|
|
27
27
|
export {};
|
|
28
|
-
//# sourceMappingURL=measurement.d.ts.map
|