@blario/react-native 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -0
- package/dist/version.d.ts +1 -1
- package/package.json +4 -1
- package/src/agent-mode/ui/AgentLayerHost.tsx +3 -1
- package/src/chat/ChatSheet.tsx +2 -0
- package/src/chat/ChatView.tsx +6 -0
- package/src/chat/widget-bundle.generated.ts +2 -2
- package/src/chat/widget-shell.ts +1 -1
- package/src/snapshot/modals.ts +9 -1
- package/src/version.ts +1 -1
package/README.md
CHANGED
|
@@ -264,6 +264,29 @@ npx expo start --clear # open it in Expo Go
|
|
|
264
264
|
`EXPO_PUBLIC_*` values are inlined when Metro bundles, so restart it with `--clear` after editing `.env.local`. Without a
|
|
265
265
|
publishable key the provider talks to the dev relay instead.
|
|
266
266
|
|
|
267
|
+
### On the iOS simulator
|
|
268
|
+
|
|
269
|
+
Keyboard and WebView behaviour only shows on iOS. With Xcode 27, `npx expo run:ios` cannot be used as is: Xcode ships
|
|
270
|
+
`DeviceHub.app` instead of the `Simulator.app` Expo 51 looks for, it builds nothing below iOS 15, and the iOS 27 runtime
|
|
271
|
+
kills React Native 0.74 at launch (no `UIScene` lifecycle). Use an iOS 26 runtime and build with `xcodebuild`:
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
xcodebuild -downloadPlatform iOS -buildVersion 26.0
|
|
275
|
+
xcrun simctl create "iPhone 17 iOS 26" com.apple.CoreSimulator.SimDeviceType.iPhone-17 com.apple.CoreSimulator.SimRuntime.iOS-26-0
|
|
276
|
+
npx expo prebuild -p ios
|
|
277
|
+
# ios/ is generated: set "ios.deploymentTarget": "15.1" in ios/Podfile.properties.json, and in the Podfile's
|
|
278
|
+
# post_install force IPHONEOS_DEPLOYMENT_TARGET = '15.1' on every installer.pods_project target, then:
|
|
279
|
+
(cd ios && pod install)
|
|
280
|
+
xcodebuild -workspace ios/agendaproexample.xcworkspace -scheme agendaproexample -sdk iphonesimulator \
|
|
281
|
+
-destination 'platform=iOS Simulator,name=iPhone 17 iOS 26' -derivedDataPath ios/build build
|
|
282
|
+
xcrun simctl install "iPhone 17 iOS 26" ios/build/Build/Products/Debug-iphonesimulator/agendaproexample.app
|
|
283
|
+
npx expo start --clear # Metro; the simulator reaches 127.0.0.1 without adb reverse
|
|
284
|
+
xcrun simctl launch "iPhone 17 iOS 26" io.blar.example
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
`.maestro/` holds [Maestro](https://maestro.dev) flows that tap through the app, chat WebView included
|
|
288
|
+
(`brew install mobile-dev-inc/tap/maestro`, needs Java 17): `maestro test .maestro/chat-keyboard.yaml`.
|
|
289
|
+
|
|
267
290
|
## Run the dev relay
|
|
268
291
|
|
|
269
292
|
```bash
|
package/dist/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const SDK_VERSION = "0.1.
|
|
1
|
+
export declare const SDK_VERSION = "0.1.2";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blario/react-native",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Blar agent SDK for React Native",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -83,5 +83,8 @@
|
|
|
83
83
|
"react-native-webview": "^13.8.6",
|
|
84
84
|
"typescript": "^5.3.3",
|
|
85
85
|
"ws": "^8.18.0"
|
|
86
|
+
},
|
|
87
|
+
"overrides": {
|
|
88
|
+
"fast-xml-parser": "^5.7.0"
|
|
86
89
|
}
|
|
87
90
|
}
|
|
@@ -31,7 +31,9 @@ export function AgentLayerHost({ visible, generation, onRequestClose, children }
|
|
|
31
31
|
</View>
|
|
32
32
|
);
|
|
33
33
|
if (HOST === 'full-window-overlay' && FULL_WINDOW_OVERLAY !== null) {
|
|
34
|
-
|
|
34
|
+
// The overlay joins the window when it mounts, so a host sheet presented later sits above it and takes every
|
|
35
|
+
// tap; mounting it again puts it back on top.
|
|
36
|
+
return <FULL_WINDOW_OVERLAY key={generation}>{content}</FULL_WINDOW_OVERLAY>;
|
|
35
37
|
}
|
|
36
38
|
return content;
|
|
37
39
|
}
|
package/src/chat/ChatSheet.tsx
CHANGED
|
@@ -51,6 +51,8 @@ export function ChatSheet({ mode, mounted, strings, onClose, children }: ChatShe
|
|
|
51
51
|
<KeyboardAvoidingView
|
|
52
52
|
style={[styles.container, { paddingTop: insets.top + TOP_GAP }]}
|
|
53
53
|
behavior={Platform.OS === 'ios' ? 'padding' : undefined}
|
|
54
|
+
// The keyboard covers the home-indicator inset, so the sheet's bottom padding sits under it, not above it.
|
|
55
|
+
keyboardVerticalOffset={-insets.bottom}
|
|
54
56
|
pointerEvents="box-none"
|
|
55
57
|
>
|
|
56
58
|
<Animated.View
|
package/src/chat/ChatView.tsx
CHANGED
|
@@ -107,6 +107,12 @@ export function ChatView({ shell, unavailableText, getMetadata, getProof, onClos
|
|
|
107
107
|
mixedContentMode="always"
|
|
108
108
|
setSupportMultipleWindows={false}
|
|
109
109
|
keyboardDisplayRequiresUserAction={false}
|
|
110
|
+
// The sheet's KeyboardAvoidingView already lifts the chat above the keyboard. WKWebView would also scroll its
|
|
111
|
+
// own page up to reveal the composer, pushing the widget out of the sheet; with scrolling off it resets that
|
|
112
|
+
// offset (the message list is an overflow container and keeps scrolling). The form bar (^ v Done) is for
|
|
113
|
+
// multi-field forms, not a one-field composer.
|
|
114
|
+
scrollEnabled={false}
|
|
115
|
+
hideKeyboardAccessoryView
|
|
110
116
|
automaticallyAdjustContentInsets={false}
|
|
111
117
|
overScrollMode="never"
|
|
112
118
|
onMessage={onMessage}
|