@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 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.0";
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.0",
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
- return <FULL_WINDOW_OVERLAY>{content}</FULL_WINDOW_OVERLAY>;
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
  }
@@ -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
@@ -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}