@bitbitpress/client 2.0.0-beta.4 → 2.0.0-beta.6
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 +70 -12
- package/dist/react/index.d.ts +25 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +109 -47
- package/dist/react/index.js.map +1 -1
- package/dist/react-native-expo/BitBitPiece.d.ts +11 -3
- package/dist/react-native-expo/BitBitPiece.d.ts.map +1 -1
- package/dist/react-native-expo/BitBitPiece.js +17 -6
- package/dist/react-native-expo/BitBitPiece.js.map +1 -1
- package/dist/react-native-expo/BitBitView.d.ts +23 -2
- package/dist/react-native-expo/BitBitView.d.ts.map +1 -1
- package/dist/react-native-expo/BitBitView.js +68 -6
- package/dist/react-native-expo/BitBitView.js.map +1 -1
- package/dist/studio/BitBitMobilePreview.d.ts +8 -1
- package/dist/studio/BitBitMobilePreview.d.ts.map +1 -1
- package/dist/studio/BitBitMobilePreview.js +12 -1
- package/dist/studio/BitBitMobilePreview.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1135,6 +1135,76 @@ export function Feed({ keyName }: { keyName: string }) {
|
|
|
1135
1135
|
That's enough to render any view whose generated UI uses only the SDK's
|
|
1136
1136
|
built-in primitives, plus your `MyCard`.
|
|
1137
1137
|
|
|
1138
|
+
### Loading and error states
|
|
1139
|
+
|
|
1140
|
+
`BitBitView` and `BitBitPiece` render nothing until the generated UI has
|
|
1141
|
+
been fetched and mounted, so the host owns the loading state. Two lifecycle
|
|
1142
|
+
callbacks tell you when to show and hide it:
|
|
1143
|
+
|
|
1144
|
+
- **`onReady()`** — fires once the view has mounted and painted its first
|
|
1145
|
+
data. This is the point to hide a spinner. It fires again if the view
|
|
1146
|
+
re-mounts (a `keyName` change, or a `remountToken` bump on `BitBitPiece`).
|
|
1147
|
+
- **`onError(message)`** — fires if the view fails to fetch, load, or
|
|
1148
|
+
mount. Hide the spinner here too, or the host is stuck on it forever.
|
|
1149
|
+
|
|
1150
|
+
The SDK never writes to the console on its own. If you don't pass
|
|
1151
|
+
`onError`, a failure is silent — pass `debug` to print it instead:
|
|
1152
|
+
|
|
1153
|
+
```tsx
|
|
1154
|
+
<BitBitView client={client} keyName={keyName} debug />
|
|
1155
|
+
```
|
|
1156
|
+
|
|
1157
|
+
`debug` is independent of `onError`: with both set you get the callback
|
|
1158
|
+
*and* the console output. Leave it off in production.
|
|
1159
|
+
|
|
1160
|
+
```tsx
|
|
1161
|
+
function Feed({ keyName }: { keyName: string }) {
|
|
1162
|
+
const [state, setState] = useState<'loading' | 'ready' | 'error'>('loading');
|
|
1163
|
+
return (
|
|
1164
|
+
<div style={{ position: 'relative' }}>
|
|
1165
|
+
{state === 'loading' && <Spinner />}
|
|
1166
|
+
{state === 'error' && <p>Couldn't load this view.</p>}
|
|
1167
|
+
<BitBitView
|
|
1168
|
+
client={client}
|
|
1169
|
+
keyName={keyName}
|
|
1170
|
+
onReady={() => setState('ready')}
|
|
1171
|
+
onError={() => setState('error')}
|
|
1172
|
+
/>
|
|
1173
|
+
</div>
|
|
1174
|
+
);
|
|
1175
|
+
}
|
|
1176
|
+
```
|
|
1177
|
+
|
|
1178
|
+
Both callbacks are read through a ref internally, so passing inline arrows
|
|
1179
|
+
is safe — unlike `inputs`, a new callback identity will not re-subscribe
|
|
1180
|
+
the stream. Reset your loading state yourself when `keyName` (or any other
|
|
1181
|
+
prop that re-subscribes) changes.
|
|
1182
|
+
|
|
1183
|
+
The same props exist on the `react-native-expo` `BitBitView` and
|
|
1184
|
+
`BitBitPiece`; there `onReady` fires when the WebView's bundle reports its
|
|
1185
|
+
first mount.
|
|
1186
|
+
|
|
1187
|
+
### Sizing a React Native view (`autoHeight`)
|
|
1188
|
+
|
|
1189
|
+
On `react-native-expo` the view is hosted in a `WebView`, which has no
|
|
1190
|
+
intrinsic height: by default `BitBitView` fills its parent (`flex: 1`),
|
|
1191
|
+
which is what a full-screen view wants. Inside a scrolling host — a feed
|
|
1192
|
+
list, where the row must size to the content — set `autoHeight` and the
|
|
1193
|
+
view reports its rendered height back out and sizes to it:
|
|
1194
|
+
|
|
1195
|
+
```tsx
|
|
1196
|
+
<BitBitView client={client} keyName="podcast" autoHeight initialHeight={180} />
|
|
1197
|
+
```
|
|
1198
|
+
|
|
1199
|
+
`initialHeight` (default 240) is the height held until the content reports
|
|
1200
|
+
its own, so the list doesn't jump. `autoHeight` also stops the WebView from
|
|
1201
|
+
scrolling internally, leaving scrolling to the host.
|
|
1202
|
+
|
|
1203
|
+
Passing your own `style` opts out of SDK sizing entirely — it replaces the
|
|
1204
|
+
computed size, so give it a height yourself. `BitBitPiece` has the same
|
|
1205
|
+
behaviour under the inverted `fillHeight` flag, which defaults to
|
|
1206
|
+
auto-height because a piece is usually embedded rather than full-screen.
|
|
1207
|
+
|
|
1138
1208
|
### Registering your own components
|
|
1139
1209
|
|
|
1140
1210
|
In the CMS you can register a component as **"provided by your app"** —
|
|
@@ -1281,18 +1351,6 @@ with no server roundtrip. This is on by default. To disable:
|
|
|
1281
1351
|
<BitBitView client={client} keyName={keyName} preloadNextUi={false} />
|
|
1282
1352
|
```
|
|
1283
1353
|
|
|
1284
|
-
### Dev diagnostics
|
|
1285
|
-
|
|
1286
|
-
In dev mode (or when you pass `dev={true}`), the SDK prints every event
|
|
1287
|
-
to the console, prefixed with `[BB]`:
|
|
1288
|
-
|
|
1289
|
-
```
|
|
1290
|
-
[BB] event MyCard.onClick → AGENT { name: 'open-detail', payload: { id: '…' }, ... }
|
|
1291
|
-
```
|
|
1292
|
-
|
|
1293
|
-
These logs are completely stripped in production builds — no SDK chatter
|
|
1294
|
-
in real user devices.
|
|
1295
|
-
|
|
1296
1354
|
### Custom rendering (advanced)
|
|
1297
1355
|
|
|
1298
1356
|
If you want to render the UI tree yourself but still use the SDK's fetch +
|
package/dist/react/index.d.ts
CHANGED
|
@@ -24,6 +24,18 @@ export interface BitBitViewProps extends SynthesisUiRequestInputs {
|
|
|
24
24
|
onNavigate?: (href: string) => void;
|
|
25
25
|
/** Resolve an on-demand audio URL for a voice player (`ctx.tts`). */
|
|
26
26
|
onTts?: (ref?: BitBitTtsRef) => Promise<string>;
|
|
27
|
+
/** Called once the view has mounted and painted its first streamed data — the
|
|
28
|
+
* point a host loading spinner should be hidden. Fires again if the view
|
|
29
|
+
* re-subscribes (e.g. a `keyName` change) and re-mounts. */
|
|
30
|
+
onReady?: () => void;
|
|
31
|
+
/** Called when the view fails to stream, load, or mount. Pairs with `onReady`
|
|
32
|
+
* so a host spinner is dismissed on the failure path too. Absent a handler the
|
|
33
|
+
* failure is silent unless `debug` is set — the SDK never logs on its own. */
|
|
34
|
+
onError?: (message: string) => void;
|
|
35
|
+
/** Print SDK failures to the console (`console.error`). Opt-in and orthogonal to
|
|
36
|
+
* `onError`: leave it off in production, turn it on to debug a view that won't
|
|
37
|
+
* render without having to wire a handler. */
|
|
38
|
+
debug?: boolean;
|
|
27
39
|
}
|
|
28
40
|
/**
|
|
29
41
|
* Web view for a server-generated SynthesisUI. Streams the UI by `keyName`
|
|
@@ -34,7 +46,7 @@ export interface BitBitViewProps extends SynthesisUiRequestInputs {
|
|
|
34
46
|
* `mobile` preview in the light DOM). Native delivery renders the same mobile
|
|
35
47
|
* bundle in a WebView via the `react-native-expo` entry.
|
|
36
48
|
*/
|
|
37
|
-
export declare function BitBitView({ client: clientProp, keyName, platform, onTrack, onEvent, onNavigate, onTts, inputs, output, searchOptionsOverrides, synthesisHistoryLimit, }: BitBitViewProps): import("react").DetailedReactHTMLElement<{
|
|
49
|
+
export declare function BitBitView({ client: clientProp, keyName, platform, onTrack, onEvent, onNavigate, onTts, onReady, onError, debug, inputs, output, searchOptionsOverrides, synthesisHistoryLimit, }: BitBitViewProps): import("react").DetailedReactHTMLElement<{
|
|
38
50
|
ref: import("react").RefObject<HTMLDivElement>;
|
|
39
51
|
style: {
|
|
40
52
|
height: string;
|
|
@@ -72,6 +84,18 @@ interface BitBitPieceCommonProps {
|
|
|
72
84
|
onNavigate?: (href: string) => void;
|
|
73
85
|
/** Resolve an on-demand audio URL for a voice player (`ctx.tts`). */
|
|
74
86
|
onTts?: (ref?: BitBitTtsRef) => Promise<string>;
|
|
87
|
+
/** Called once the piece has mounted and painted — the point a host loading
|
|
88
|
+
* spinner should be hidden. Fires again on a re-mount (new `code`/`keyName`,
|
|
89
|
+
* or a `remountToken` bump). */
|
|
90
|
+
onReady?: () => void;
|
|
91
|
+
/** Called when the piece fails to resolve, load, or mount. Pairs with `onReady`
|
|
92
|
+
* so a host spinner is dismissed on the failure path too. Absent a handler the
|
|
93
|
+
* failure is silent unless `debug` is set — the SDK never logs on its own. */
|
|
94
|
+
onError?: (message: string) => void;
|
|
95
|
+
/** Print SDK failures to the console (`console.error`). Opt-in and orthogonal to
|
|
96
|
+
* `onError`: leave it off in production, turn it on to debug a piece that won't
|
|
97
|
+
* render without having to wire a handler. */
|
|
98
|
+
debug?: boolean;
|
|
75
99
|
/** Bump to force a clean re-mount (reusing the loaded module) — the editor uses this
|
|
76
100
|
* to recover after a structural in-place edit that would corrupt the framework's
|
|
77
101
|
* own reconciliation. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EAQtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAEjC,YAAY,EACV,qBAAqB,EACrB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,kBAAkB,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACpF,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,GACpB,CAAC;AAEF;;;mCAGmC;AACnC,MAAM,WAAW,eAAgB,SAAQ,wBAAwB;IAC/D;uBACmB;IACnB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB;;2EAEuE;IACvE,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,0CAA0C;IAC1C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,qEAAqE;IACrE,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
|
package/dist/react/index.js
CHANGED
|
@@ -12,10 +12,15 @@ const noop = () => { };
|
|
|
12
12
|
* `mobile` preview in the light DOM). Native delivery renders the same mobile
|
|
13
13
|
* bundle in a WebView via the `react-native-expo` entry.
|
|
14
14
|
*/
|
|
15
|
-
export function BitBitView({ client: clientProp, keyName, platform = 'web', onTrack, onEvent, onNavigate, onTts, inputs, output, searchOptionsOverrides, synthesisHistoryLimit, }) {
|
|
15
|
+
export function BitBitView({ client: clientProp, keyName, platform = 'web', onTrack, onEvent, onNavigate, onTts, onReady, onError, debug = false, inputs, output, searchOptionsOverrides, synthesisHistoryLimit, }) {
|
|
16
16
|
const contextClient = useBitBitContext()?.client;
|
|
17
17
|
const client = clientProp ?? contextClient;
|
|
18
18
|
const hostRef = useRef(null);
|
|
19
|
+
// Read through a ref, never as effect deps: a host passing inline lifecycle
|
|
20
|
+
// arrows must not re-run the effect, which would re-subscribe the stream
|
|
21
|
+
// (i.e. re-synthesize) on every render.
|
|
22
|
+
const lifecycleRef = useRef({ onReady, onError, debug });
|
|
23
|
+
lifecycleRef.current = { onReady, onError, debug };
|
|
19
24
|
useEffect(() => {
|
|
20
25
|
const host = hostRef.current;
|
|
21
26
|
if (!host || !client)
|
|
@@ -105,44 +110,74 @@ export function BitBitView({ client: clientProp, keyName, platform = 'web', onTr
|
|
|
105
110
|
};
|
|
106
111
|
host.addEventListener('click', onHostClick);
|
|
107
112
|
void (async () => {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const props = {
|
|
130
|
-
data: event.data,
|
|
131
|
-
history: event.synthesisHistoryEntries,
|
|
132
|
-
ctx: makeCtx(),
|
|
133
|
-
};
|
|
134
|
-
if (handle) {
|
|
135
|
-
handle.update(props);
|
|
113
|
+
try {
|
|
114
|
+
const stream = await client.user.synthesizeUi({
|
|
115
|
+
keyName,
|
|
116
|
+
platform,
|
|
117
|
+
inputs,
|
|
118
|
+
output,
|
|
119
|
+
searchOptionsOverrides,
|
|
120
|
+
synthesisHistoryLimit,
|
|
121
|
+
});
|
|
122
|
+
for await (const event of stream) {
|
|
123
|
+
if (cancelled)
|
|
124
|
+
break;
|
|
125
|
+
if (event.type === 'manifest') {
|
|
126
|
+
theme = event.theme;
|
|
127
|
+
const src = event.bundleUrl ?? event.bundleSource;
|
|
128
|
+
if (src)
|
|
129
|
+
mod = await loadGeneratedModule(src);
|
|
130
|
+
// Neither field set is a dead end: every later data event hits the
|
|
131
|
+
// `!mod` branch below and the view can never render.
|
|
132
|
+
else if (lifecycleRef.current.debug)
|
|
133
|
+
console.error('[BitBitView] manifest carried no bundleUrl or bundleSource');
|
|
136
134
|
}
|
|
137
|
-
else {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
143
|
-
|
|
135
|
+
else if (event.type === 'data') {
|
|
136
|
+
if (!mod) {
|
|
137
|
+
if (lifecycleRef.current.debug)
|
|
138
|
+
console.warn('[BitBitView] dropped a data event — no bundle loaded yet');
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (event.synthesisOutputId)
|
|
142
|
+
latestOutputId = event.synthesisOutputId;
|
|
143
|
+
// Mount on the first data event (bundle is ready); update thereafter.
|
|
144
|
+
const props = {
|
|
145
|
+
data: event.data,
|
|
146
|
+
history: event.synthesisHistoryEntries,
|
|
147
|
+
ctx: makeCtx(),
|
|
148
|
+
};
|
|
149
|
+
if (handle) {
|
|
150
|
+
handle.update(props);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
// Web isolates styles in a Shadow DOM; the studio's mobile preview
|
|
154
|
+
// mounts in the light DOM.
|
|
155
|
+
handle = mountGeneratedView(host, mod, props, {
|
|
156
|
+
isolateStyles: platform !== 'mobile',
|
|
157
|
+
});
|
|
158
|
+
// First paint — the host can drop its loading state. Runs before the
|
|
159
|
+
// beacon (analytics must never starve it) and isolated from the catch
|
|
160
|
+
// below, so a throwing host handler isn't reported as a view failure.
|
|
161
|
+
try {
|
|
162
|
+
lifecycleRef.current.onReady?.();
|
|
163
|
+
}
|
|
164
|
+
catch { }
|
|
165
|
+
beacon('VIEW');
|
|
166
|
+
}
|
|
144
167
|
}
|
|
145
168
|
}
|
|
169
|
+
// The stream can complete cleanly having never produced a renderable
|
|
170
|
+
// pair (no manifest, no data) — a blank view with nothing thrown.
|
|
171
|
+
if (!cancelled && !handle && lifecycleRef.current.debug)
|
|
172
|
+
console.error('[BitBitView] stream ended without rendering');
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
if (cancelled)
|
|
176
|
+
return;
|
|
177
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
178
|
+
if (lifecycleRef.current.debug)
|
|
179
|
+
console.error(`[BitBitView] ${message}`);
|
|
180
|
+
lifecycleRef.current.onError?.(message);
|
|
146
181
|
}
|
|
147
182
|
})();
|
|
148
183
|
return () => {
|
|
@@ -177,10 +212,19 @@ export function BitBitView({ client: clientProp, keyName, platform = 'web', onTr
|
|
|
177
212
|
* in, re-rendering in place when it changes.
|
|
178
213
|
*/
|
|
179
214
|
export function BitBitPiece(props) {
|
|
180
|
-
const { theme, platform = 'web', colorScheme, onTrack, onEvent, onNavigate, onTts, remountToken, } = props;
|
|
215
|
+
const { theme, platform = 'web', colorScheme, onTrack, onEvent, onNavigate, onTts, onReady, onError, debug = false, remountToken, } = props;
|
|
181
216
|
const keyName = 'keyName' in props ? props.keyName : undefined;
|
|
182
217
|
const contextClient = useBitBitContext()?.client;
|
|
183
218
|
const client = ('client' in props ? props.client : undefined) ?? contextClient;
|
|
219
|
+
// Read through a ref, never as effect deps: a host passing inline lifecycle
|
|
220
|
+
// arrows must not re-run the fetch/mount effects on every render.
|
|
221
|
+
const lifecycleRef = useRef({ onReady, onError, debug });
|
|
222
|
+
lifecycleRef.current = { onReady, onError, debug };
|
|
223
|
+
const reportError = useCallback((message) => {
|
|
224
|
+
if (lifecycleRef.current.debug)
|
|
225
|
+
console.error(`[BitBitPiece] ${message}`);
|
|
226
|
+
lifecycleRef.current.onError?.(message);
|
|
227
|
+
}, []);
|
|
184
228
|
// In embed mode, the resolved bundle/data/theme are fetched by keyName.
|
|
185
229
|
const [fetched, setFetched] = useState(null);
|
|
186
230
|
useEffect(() => {
|
|
@@ -188,15 +232,21 @@ export function BitBitPiece(props) {
|
|
|
188
232
|
return;
|
|
189
233
|
let cancelled = false;
|
|
190
234
|
void (async () => {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
235
|
+
try {
|
|
236
|
+
const payload = await client.user.getSynthesisPiece(keyName);
|
|
237
|
+
if (cancelled)
|
|
238
|
+
return;
|
|
239
|
+
setFetched({ code: payload.uiWebCode, data: payload.fields, theme: payload.theme });
|
|
240
|
+
}
|
|
241
|
+
catch (err) {
|
|
242
|
+
if (!cancelled)
|
|
243
|
+
reportError(err instanceof Error ? err.message : String(err));
|
|
244
|
+
}
|
|
195
245
|
})();
|
|
196
246
|
return () => {
|
|
197
247
|
cancelled = true;
|
|
198
248
|
};
|
|
199
|
-
}, [keyName, client]);
|
|
249
|
+
}, [keyName, client, reportError]);
|
|
200
250
|
const code = keyName != null ? (fetched?.code ?? null) : props.code;
|
|
201
251
|
const data = keyName != null ? fetched?.data : props.data;
|
|
202
252
|
const resolvedTheme = (keyName != null ? fetched?.theme : undefined) ?? theme;
|
|
@@ -285,10 +335,22 @@ export function BitBitPiece(props) {
|
|
|
285
335
|
};
|
|
286
336
|
host.addEventListener('click', onHostClick);
|
|
287
337
|
void (async () => {
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
338
|
+
try {
|
|
339
|
+
const mod = await loadGeneratedModule(code);
|
|
340
|
+
if (cancelled || !hostRef.current)
|
|
341
|
+
return;
|
|
342
|
+
handleRef.current = mountGeneratedView(hostRef.current, mod, { data: propsRef.current.data, ctx: makeCtx() }, { isolateStyles: platform !== 'mobile' });
|
|
343
|
+
// First paint — the host can drop its loading state. Isolated from the catch
|
|
344
|
+
// below so a throwing host handler isn't reported as a mount failure.
|
|
345
|
+
try {
|
|
346
|
+
lifecycleRef.current.onReady?.();
|
|
347
|
+
}
|
|
348
|
+
catch { }
|
|
349
|
+
}
|
|
350
|
+
catch (err) {
|
|
351
|
+
if (!cancelled)
|
|
352
|
+
reportError(err instanceof Error ? err.message : String(err));
|
|
353
|
+
}
|
|
292
354
|
})();
|
|
293
355
|
return () => {
|
|
294
356
|
cancelled = true;
|
|
@@ -297,7 +359,7 @@ export function BitBitPiece(props) {
|
|
|
297
359
|
handleRef.current = undefined;
|
|
298
360
|
};
|
|
299
361
|
// `remountToken` re-runs this to tear down + re-mount cleanly (module is cached).
|
|
300
|
-
}, [code, platform, makeCtx, remountToken]);
|
|
362
|
+
}, [code, platform, makeCtx, remountToken, reportError]);
|
|
301
363
|
// Push fresh data (and ctx) into the mounted view. `colorScheme` is included so a
|
|
302
364
|
// light/dark toggle re-pushes ctx — `makeCtx` reads props from a ref (stable identity),
|
|
303
365
|
// so without it a scheme change would sit unflushed until `data` changed.
|
package/dist/react/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,9 +39,17 @@ export interface BitBitPieceProps {
|
|
|
39
39
|
onEvent?: (name: string, payload?: unknown) => void;
|
|
40
40
|
/** Navigate a link the view requested (the WebView never navigates itself). */
|
|
41
41
|
onNavigate?: (href: string) => void;
|
|
42
|
-
/** Called
|
|
43
|
-
*
|
|
42
|
+
/** Called once the piece has mounted and painted — the point a host loading
|
|
43
|
+
* spinner should be hidden. Fires again on a re-resolve (a `keyName` change
|
|
44
|
+
* reloads the WebView). */
|
|
45
|
+
onReady?: () => void;
|
|
46
|
+
/** Called when the piece fails to resolve, load, or render. Absent a handler the
|
|
47
|
+
* failure is silent unless `debug` is set — the SDK never logs on its own. */
|
|
44
48
|
onError?: (message: string) => void;
|
|
49
|
+
/** Print SDK failures to the console (`console.error`). Opt-in and orthogonal to
|
|
50
|
+
* `onError`: leave it off in production, turn it on to debug a piece that won't
|
|
51
|
+
* render without having to wire a handler. */
|
|
52
|
+
debug?: boolean;
|
|
45
53
|
/** Fill the host's height (`flex: 1`) instead of sizing to the piece's own
|
|
46
54
|
* content height. Use for a full-screen piece; defaults to false so the piece
|
|
47
55
|
* renders at its natural height inside a scrolling host (a feed tile). */
|
|
@@ -66,5 +74,5 @@ export interface BitBitPieceProps {
|
|
|
66
74
|
* Unlike `<BitBitView>` there is no stream — a piece is a single resolved
|
|
67
75
|
* snapshot, so the data is pushed once the WebView signals `ready`.
|
|
68
76
|
*/
|
|
69
|
-
export declare function BitBitPiece({ client: clientProp, keyName, onTrack, onEvent, onNavigate, onError, fillHeight, initialHeight, colorScheme, style, }: BitBitPieceProps): import("react").CElement<import("react-native-webview").WebViewProps, WebView> | null;
|
|
77
|
+
export declare function BitBitPiece({ client: clientProp, keyName, onTrack, onEvent, onNavigate, onReady, onError, debug, fillHeight, initialHeight, colorScheme, style, }: BitBitPieceProps): import("react").CElement<import("react-native-webview").WebViewProps, WebView> | null;
|
|
70
78
|
//# sourceMappingURL=BitBitPiece.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitBitPiece.d.ts","sourceRoot":"","sources":["../../src/react-native-expo/BitBitPiece.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAA4B,MAAM,sBAAsB,CAAC;AAIzE;gFACgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE;QACJ,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;YAC1C,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,OAAO,CAAC;YAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAChC,CAAC,CAAC;QAIH,cAAc,CAAC,CAAC,CAAC,EAAE;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,OAAO,CAAC;SACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACrB;sFAC8E;QAC9E,UAAU,CAAC,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9E;yEACiE;QACjE,oBAAoB,CAAC,CACnB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,GACvC,OAAO,CAAC,MAAM,CAAC,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B;gCAC4B;IAC5B,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,+EAA+E;IAC/E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;
|
|
1
|
+
{"version":3,"file":"BitBitPiece.d.ts","sourceRoot":"","sources":["../../src/react-native-expo/BitBitPiece.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAA4B,MAAM,sBAAsB,CAAC;AAIzE;gFACgF;AAChF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE;QACJ,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;YAC1C,SAAS,EAAE,MAAM,CAAC;YAClB,MAAM,EAAE,OAAO,CAAC;YAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;SAChC,CAAC,CAAC;QAIH,cAAc,CAAC,CAAC,CAAC,EAAE;YACjB,OAAO,EAAE,MAAM,CAAC;YAChB,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;YACvB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,OAAO,CAAC;SACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACrB;sFAC8E;QAC9E,UAAU,CAAC,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9E;yEACiE;QACjE,oBAAoB,CAAC,CACnB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,GACvC,OAAO,CAAC,MAAM,CAAC,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B;gCAC4B;IAC5B,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,+EAA+E;IAC/E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;gCAE4B;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;mFAC+E;IAC/E,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;mDAE+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;+EAE2E;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;4DACwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;oFACgF;IAChF,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAoBD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EAAE,UAAU,EAClB,OAAO,EACP,OAAO,EACP,OAAO,EACP,UAAU,EACV,OAAO,EACP,OAAO,EACP,KAAa,EACb,UAAkB,EAClB,aAAmB,EACnB,WAAW,EACX,KAAK,GACN,EAAE,gBAAgB,yFAoLlB"}
|
|
@@ -14,7 +14,7 @@ import { buildBootstrapHtml } from './bootstrapHtml.js';
|
|
|
14
14
|
* Unlike `<BitBitView>` there is no stream — a piece is a single resolved
|
|
15
15
|
* snapshot, so the data is pushed once the WebView signals `ready`.
|
|
16
16
|
*/
|
|
17
|
-
export function BitBitPiece({ client: clientProp, keyName, onTrack, onEvent, onNavigate, onError, fillHeight = false, initialHeight = 240, colorScheme, style, }) {
|
|
17
|
+
export function BitBitPiece({ client: clientProp, keyName, onTrack, onEvent, onNavigate, onReady, onError, debug = false, fillHeight = false, initialHeight = 240, colorScheme, style, }) {
|
|
18
18
|
const contextClient = useBitBitContext()?.client;
|
|
19
19
|
const client = clientProp ?? contextClient;
|
|
20
20
|
// The WebView can't read the OS appearance, so resolve it here and pass it in.
|
|
@@ -24,12 +24,15 @@ export function BitBitPiece({ client: clientProp, keyName, onTrack, onEvent, onN
|
|
|
24
24
|
// are pushed live below instead of rebuilding (which would reload the WebView).
|
|
25
25
|
const schemeRef = useRef(scheme);
|
|
26
26
|
schemeRef.current = scheme;
|
|
27
|
+
// Read through a ref, never as effect deps: a host passing inline lifecycle
|
|
28
|
+
// arrows must not re-run the resolve effect (which would refetch the piece).
|
|
29
|
+
const lifecycleRef = useRef({ onReady, onError, debug });
|
|
30
|
+
lifecycleRef.current = { onReady, onError, debug };
|
|
27
31
|
const reportError = useCallback((message) => {
|
|
28
|
-
if (
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}, [onError]);
|
|
32
|
+
if (lifecycleRef.current.debug)
|
|
33
|
+
console.error(`[BitBitPiece] ${message}`);
|
|
34
|
+
lifecycleRef.current.onError?.(message);
|
|
35
|
+
}, []);
|
|
33
36
|
const webRef = useRef(null);
|
|
34
37
|
const [html, setHtml] = useState(null);
|
|
35
38
|
// Content height reported by the bundle (auto-height mode); null until first report.
|
|
@@ -95,6 +98,10 @@ export function BitBitPiece({ client: clientProp, keyName, onTrack, onEvent, onN
|
|
|
95
98
|
msg = JSON.parse(e.nativeEvent.data);
|
|
96
99
|
}
|
|
97
100
|
catch {
|
|
101
|
+
// Anything the bundle posts that isn't our JSON — a broken bridge looks
|
|
102
|
+
// identical to an idle one, so surface it rather than dropping silently.
|
|
103
|
+
if (lifecycleRef.current.debug)
|
|
104
|
+
console.warn('[BitBitPiece] ignored an unparseable bridge message');
|
|
98
105
|
return;
|
|
99
106
|
}
|
|
100
107
|
switch (msg.kind) {
|
|
@@ -124,6 +131,10 @@ export function BitBitPiece({ client: clientProp, keyName, onTrack, onEvent, onN
|
|
|
124
131
|
break;
|
|
125
132
|
}
|
|
126
133
|
case 'view':
|
|
134
|
+
// The bundle posts this on its first mount — first paint, so the host
|
|
135
|
+
// can drop its loading state. Runs before the beacon: analytics must
|
|
136
|
+
// never starve the host's readiness signal.
|
|
137
|
+
lifecycleRef.current.onReady?.();
|
|
127
138
|
beacon('VIEW');
|
|
128
139
|
break;
|
|
129
140
|
case 'track':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitBitPiece.js","sourceRoot":"","sources":["../../src/react-native-expo/BitBitPiece.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,OAAO,EAA4B,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"BitBitPiece.js","sourceRoot":"","sources":["../../src/react-native-expo/BitBitPiece.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,28 @@ export interface BitBitViewProps extends SynthesisUiRequestInputs {
|
|
|
18
18
|
onEvent?: (name: string, payload?: unknown) => void;
|
|
19
19
|
/** Navigate a link the view requested (the WebView never navigates itself). */
|
|
20
20
|
onNavigate?: (href: string) => void;
|
|
21
|
-
/**
|
|
21
|
+
/** Called once the bundle has mounted and painted its first streamed data — the
|
|
22
|
+
* point a host loading spinner should be hidden. Fires again if the view
|
|
23
|
+
* re-subscribes (e.g. a `keyName` change) and reloads the WebView. */
|
|
24
|
+
onReady?: () => void;
|
|
25
|
+
/** Called when the view fails to stream, load, or render. Pairs with `onReady`
|
|
26
|
+
* so a host spinner is dismissed on the failure path too. Absent a handler the
|
|
27
|
+
* failure is silent unless `debug` is set — the SDK never logs on its own. */
|
|
28
|
+
onError?: (message: string) => void;
|
|
29
|
+
/** Print SDK failures to the console (`console.error`). Opt-in and orthogonal to
|
|
30
|
+
* `onError`: leave it off in production, turn it on to debug a view that won't
|
|
31
|
+
* render without having to wire a handler. */
|
|
32
|
+
debug?: boolean;
|
|
33
|
+
/** Size to the view's own reported content height instead of filling the host, so it
|
|
34
|
+
* can sit in a scrolling host (a feed tile). Mirrors `BitBitPiece`'s `fillHeight`
|
|
35
|
+
* inverted: this defaults to false, keeping the fill behaviour a full-screen view
|
|
36
|
+
* needs. Ignored when `style` is supplied — that opts out of SDK sizing entirely. */
|
|
37
|
+
autoHeight?: boolean;
|
|
38
|
+
/** Height (px) to reserve before the content reports its own — avoids a layout jump.
|
|
39
|
+
* Only used with `autoHeight`. Defaults to 240. */
|
|
40
|
+
initialHeight?: number;
|
|
41
|
+
/** Style for the hosting WebView. Defaults to `{ flex: 1 }`, or the auto-height size
|
|
42
|
+
* when `autoHeight` is set. */
|
|
22
43
|
style?: Record<string, unknown>;
|
|
23
44
|
}
|
|
24
45
|
/**
|
|
@@ -28,5 +49,5 @@ export interface BitBitViewProps extends SynthesisUiRequestInputs {
|
|
|
28
49
|
* streams, and relays the view's `track`/`onEvent`/`navigate` back out. Mirrors
|
|
29
50
|
* the web `<BitBitView>` API + auto-beaconing.
|
|
30
51
|
*/
|
|
31
|
-
export declare function BitBitView({ client: clientProp, keyName, platform, onTrack, onEvent, onNavigate, style, inputs, output, searchOptionsOverrides, synthesisHistoryLimit, }: BitBitViewProps): import("react").CElement<import("react-native-webview").WebViewProps, WebView> | null;
|
|
52
|
+
export declare function BitBitView({ client: clientProp, keyName, platform, onTrack, onEvent, onNavigate, onReady, onError, debug, autoHeight, initialHeight, style, inputs, output, searchOptionsOverrides, synthesisHistoryLimit, }: BitBitViewProps): import("react").CElement<import("react-native-webview").WebViewProps, WebView> | null;
|
|
32
53
|
//# sourceMappingURL=BitBitView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitBitView.d.ts","sourceRoot":"","sources":["../../src/react-native-expo/BitBitView.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAA4B,MAAM,sBAAsB,CAAC;AAEzE,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAGjC;;;mCAGmC;AACnC,MAAM,WAAW,eAAgB,SAAQ,wBAAwB;IAC/D;uBACmB;IACnB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB;oBACgB;IAChB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,+EAA+E;IAC/E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,
|
|
1
|
+
{"version":3,"file":"BitBitView.d.ts","sourceRoot":"","sources":["../../src/react-native-expo/BitBitView.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAA4B,MAAM,sBAAsB,CAAC;AAEzE,OAAO,KAAK,EACV,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACpB,MAAM,yBAAyB,CAAC;AAGjC;;;mCAGmC;AACnC,MAAM,WAAW,eAAgB,SAAQ,wBAAwB;IAC/D;uBACmB;IACnB,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB;oBACgB;IAChB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,uCAAuC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,+DAA+D;IAC/D,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpD,+EAA+E;IAC/E,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;2EAEuE;IACvE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;mFAE+E;IAC/E,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;mDAE+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;0FAGsF;IACtF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;wDACoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;oCACgC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAqBD;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,MAAM,EAAE,UAAU,EAClB,OAAO,EACP,QAAmB,EACnB,OAAO,EACP,OAAO,EACP,UAAU,EACV,OAAO,EACP,OAAO,EACP,KAAa,EACb,UAAkB,EAClB,aAAmB,EACnB,KAAK,EACL,MAAM,EACN,MAAM,EACN,sBAAsB,EACtB,qBAAqB,GACtB,EAAE,eAAe,yFAyPjB"}
|
|
@@ -9,11 +9,21 @@ import { buildBootstrapHtml } from './bootstrapHtml.js';
|
|
|
9
9
|
* streams, and relays the view's `track`/`onEvent`/`navigate` back out. Mirrors
|
|
10
10
|
* the web `<BitBitView>` API + auto-beaconing.
|
|
11
11
|
*/
|
|
12
|
-
export function BitBitView({ client: clientProp, keyName, platform = 'mobile', onTrack, onEvent, onNavigate, style, inputs, output, searchOptionsOverrides, synthesisHistoryLimit, }) {
|
|
12
|
+
export function BitBitView({ client: clientProp, keyName, platform = 'mobile', onTrack, onEvent, onNavigate, onReady, onError, debug = false, autoHeight = false, initialHeight = 240, style, inputs, output, searchOptionsOverrides, synthesisHistoryLimit, }) {
|
|
13
13
|
const contextClient = useBitBitContext()?.client;
|
|
14
14
|
const client = clientProp ?? contextClient;
|
|
15
|
+
// Read through a ref, never as effect deps: a host passing inline lifecycle
|
|
16
|
+
// arrows must not re-run the stream effect (which would re-synthesize).
|
|
17
|
+
const lifecycleRef = useRef({ onReady, onError, debug });
|
|
18
|
+
lifecycleRef.current = { onReady, onError, debug };
|
|
19
|
+
const reportError = useCallback((message) => {
|
|
20
|
+
if (lifecycleRef.current.debug)
|
|
21
|
+
console.error(`[BitBitView] ${message}`);
|
|
22
|
+
lifecycleRef.current.onError?.(message);
|
|
23
|
+
}, []);
|
|
15
24
|
const webRef = useRef(null);
|
|
16
25
|
const [html, setHtml] = useState(null);
|
|
26
|
+
const [contentHeight, setContentHeight] = useState(null);
|
|
17
27
|
// Latest streamed data + history + whether the WebView has loaded the bundle
|
|
18
28
|
// and can receive it. Refs (not state) so streaming doesn't churn renders.
|
|
19
29
|
const dataRef = useRef(undefined);
|
|
@@ -37,11 +47,15 @@ export function BitBitView({ client: clientProp, keyName, platform = 'mobile', o
|
|
|
37
47
|
if (!client)
|
|
38
48
|
return;
|
|
39
49
|
let cancelled = false;
|
|
50
|
+
// Whether the stream ever yielded a manifest we could build a document from.
|
|
51
|
+
let gotBundle = false;
|
|
40
52
|
readyRef.current = false;
|
|
41
53
|
dataRef.current = undefined;
|
|
42
54
|
historyRef.current = undefined;
|
|
43
55
|
outputIdRef.current = undefined;
|
|
44
56
|
setHtml(null);
|
|
57
|
+
// A re-subscribe reloads the WebView, so the old content height no longer applies.
|
|
58
|
+
setContentHeight(null);
|
|
45
59
|
void (async () => {
|
|
46
60
|
try {
|
|
47
61
|
const stream = await client.user.synthesizeUi({
|
|
@@ -57,8 +71,14 @@ export function BitBitView({ client: clientProp, keyName, platform = 'mobile', o
|
|
|
57
71
|
break;
|
|
58
72
|
if (event.type === 'manifest') {
|
|
59
73
|
const bundle = event.bundleUrl ?? event.bundleSource;
|
|
60
|
-
if (bundle)
|
|
61
|
-
|
|
74
|
+
if (bundle) {
|
|
75
|
+
gotBundle = true;
|
|
76
|
+
setHtml(buildBootstrapHtml({ bundle, theme: event.theme, autoHeight, enableTts: true }));
|
|
77
|
+
// Neither field set is a dead end: no document is ever built, so the
|
|
78
|
+
// component renders null forever.
|
|
79
|
+
}
|
|
80
|
+
else if (lifecycleRef.current.debug)
|
|
81
|
+
console.error('[BitBitView] manifest carried no bundleUrl or bundleSource');
|
|
62
82
|
}
|
|
63
83
|
else if (event.type === 'data') {
|
|
64
84
|
dataRef.current = event.data;
|
|
@@ -69,9 +89,16 @@ export function BitBitView({ client: clientProp, keyName, platform = 'mobile', o
|
|
|
69
89
|
pushData(event.data, event.synthesisHistoryEntries);
|
|
70
90
|
}
|
|
71
91
|
}
|
|
92
|
+
// The stream can complete cleanly having never produced a renderable pair
|
|
93
|
+
// (no manifest, no data) — a blank view with nothing thrown.
|
|
94
|
+
const rendered = gotBundle && dataRef.current !== undefined;
|
|
95
|
+
if (!cancelled && !rendered && lifecycleRef.current.debug)
|
|
96
|
+
console.error('[BitBitView] stream ended without rendering');
|
|
72
97
|
}
|
|
73
|
-
catch {
|
|
98
|
+
catch (err) {
|
|
74
99
|
// A failed stream leaves the view unrendered rather than crashing.
|
|
100
|
+
if (!cancelled)
|
|
101
|
+
reportError(err instanceof Error ? err.message : String(err));
|
|
75
102
|
}
|
|
76
103
|
})();
|
|
77
104
|
return () => {
|
|
@@ -82,6 +109,8 @@ export function BitBitView({ client: clientProp, keyName, platform = 'mobile', o
|
|
|
82
109
|
keyName,
|
|
83
110
|
platform,
|
|
84
111
|
pushData,
|
|
112
|
+
reportError,
|
|
113
|
+
autoHeight,
|
|
85
114
|
inputs,
|
|
86
115
|
output,
|
|
87
116
|
searchOptionsOverrides,
|
|
@@ -93,6 +122,10 @@ export function BitBitView({ client: clientProp, keyName, platform = 'mobile', o
|
|
|
93
122
|
msg = JSON.parse(e.nativeEvent.data);
|
|
94
123
|
}
|
|
95
124
|
catch {
|
|
125
|
+
// Anything the bundle posts that isn't our JSON — a broken bridge looks
|
|
126
|
+
// identical to an idle one, so surface it rather than dropping silently.
|
|
127
|
+
if (lifecycleRef.current.debug)
|
|
128
|
+
console.warn('[BitBitView] ignored an unparseable bridge message');
|
|
96
129
|
return;
|
|
97
130
|
}
|
|
98
131
|
switch (msg.kind) {
|
|
@@ -102,8 +135,19 @@ export function BitBitView({ client: clientProp, keyName, platform = 'mobile', o
|
|
|
102
135
|
pushData(dataRef.current, historyRef.current);
|
|
103
136
|
break;
|
|
104
137
|
case 'view':
|
|
138
|
+
// The bundle posts this on its first mount — first paint, so the host
|
|
139
|
+
// can drop its loading state. Runs before the beacon: analytics must
|
|
140
|
+
// never starve the host's readiness signal.
|
|
141
|
+
lifecycleRef.current.onReady?.();
|
|
105
142
|
beacon('VIEW');
|
|
106
143
|
break;
|
|
144
|
+
case 'height':
|
|
145
|
+
if (autoHeight && msg.px > 0)
|
|
146
|
+
setContentHeight(msg.px);
|
|
147
|
+
break;
|
|
148
|
+
case 'error':
|
|
149
|
+
reportError(msg.message);
|
|
150
|
+
break;
|
|
107
151
|
case 'track':
|
|
108
152
|
onTrack?.(msg.event, msg.payload);
|
|
109
153
|
beacon('CLICK', msg.event, msg.payload);
|
|
@@ -146,21 +190,39 @@ export function BitBitView({ client: clientProp, keyName, platform = 'mobile', o
|
|
|
146
190
|
break;
|
|
147
191
|
}
|
|
148
192
|
}
|
|
149
|
-
}, [
|
|
193
|
+
}, [
|
|
194
|
+
beacon,
|
|
195
|
+
onTrack,
|
|
196
|
+
onEvent,
|
|
197
|
+
onNavigate,
|
|
198
|
+
pushData,
|
|
199
|
+
client,
|
|
200
|
+
keyName,
|
|
201
|
+
trackItem,
|
|
202
|
+
reportError,
|
|
203
|
+
autoHeight,
|
|
204
|
+
]);
|
|
150
205
|
if (!html)
|
|
151
206
|
return null;
|
|
207
|
+
// Auto-height: the host scrolls, so the WebView sizes to the reported content height
|
|
208
|
+
// and never scrolls itself. Otherwise it fills the parent.
|
|
209
|
+
const sizeStyle = autoHeight
|
|
210
|
+
? { width: '100%', height: contentHeight ?? initialHeight }
|
|
211
|
+
: { flex: 1 };
|
|
152
212
|
return createElement(WebView, {
|
|
153
213
|
ref: webRef,
|
|
154
214
|
source: { html, baseUrl: 'https://localhost/' },
|
|
155
215
|
originWhitelist: ['*'],
|
|
156
216
|
onMessage,
|
|
217
|
+
onError: () => reportError('WebView failed to load'),
|
|
218
|
+
scrollEnabled: !autoHeight,
|
|
157
219
|
javaScriptEnabled: true,
|
|
158
220
|
domStorageEnabled: true,
|
|
159
221
|
allowsInlineMediaPlayback: true,
|
|
160
222
|
mediaPlaybackRequiresUserAction: false,
|
|
161
223
|
// Links go to `onNavigate`, never in-WebView navigation.
|
|
162
224
|
onShouldStartLoadWithRequest: (request) => request.url === 'https://localhost/' || request.url.startsWith('about:'),
|
|
163
|
-
style: style ?? {
|
|
225
|
+
style: style ?? { backgroundColor: 'transparent', ...sizeStyle },
|
|
164
226
|
});
|
|
165
227
|
}
|
|
166
228
|
//# sourceMappingURL=BitBitView.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitBitView.js","sourceRoot":"","sources":["../../src/react-native-expo/BitBitView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChF,OAAO,EAAE,OAAO,EAA4B,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAM7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"BitBitView.js","sourceRoot":"","sources":["../../src/react-native-expo/BitBitView.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,13 @@ export interface BitBitMobilePreviewProps {
|
|
|
10
10
|
theme?: Record<string, string>;
|
|
11
11
|
/** Resolve on-demand audio for an `<audio>` player (mint a streaming URL). */
|
|
12
12
|
onTts?: (ref?: BitBitTtsRef) => Promise<string>;
|
|
13
|
+
/** Called once the bundle has mounted and painted its first data — the point a
|
|
14
|
+
* host loading spinner should be hidden. Fires again when a new `code` reloads
|
|
15
|
+
* the iframe and re-mounts. */
|
|
16
|
+
onReady?: () => void;
|
|
17
|
+
/** Called when the bundle fails to load or throws at runtime. Pairs with
|
|
18
|
+
* `onReady` so a host spinner is dismissed on the failure path too. */
|
|
19
|
+
onError?: (message: string) => void;
|
|
13
20
|
/** Emulated device logical size (CSS px). Defaults to iPhone 15 Pro Max (430×932). */
|
|
14
21
|
deviceWidth?: number;
|
|
15
22
|
deviceHeight?: number;
|
|
@@ -21,7 +28,7 @@ export interface BitBitMobilePreviewProps {
|
|
|
21
28
|
* window instead, rendering the UI ~2-3x oversized.) It reuses the native bootstrap HTML +
|
|
22
29
|
* message protocol; only the parent side of the bridge (data/scheme in, tts out) lives here.
|
|
23
30
|
*/
|
|
24
|
-
export declare function BitBitMobilePreview({ code, data, colorScheme, theme, onTts, deviceWidth, deviceHeight, }: BitBitMobilePreviewProps): import("react").DetailedReactHTMLElement<{
|
|
31
|
+
export declare function BitBitMobilePreview({ code, data, colorScheme, theme, onTts, onReady, onError, deviceWidth, deviceHeight, }: BitBitMobilePreviewProps): import("react").DetailedReactHTMLElement<{
|
|
25
32
|
ref: import("react").RefObject<HTMLDivElement>;
|
|
26
33
|
style: {
|
|
27
34
|
position: "relative";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitBitMobilePreview.d.ts","sourceRoot":"","sources":["../../src/studio/BitBitMobilePreview.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,MAAM,WAAW,wBAAwB;IACvC,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,IAAI,EAAE,OAAO,CAAC;IACd,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,KAAK,EACL,KAAK,EACL,WAA0B,EAC1B,YAA4B,GAC7B,EAAE,wBAAwB;;;;;;;;
|
|
1
|
+
{"version":3,"file":"BitBitMobilePreview.d.ts","sourceRoot":"","sources":["../../src/studio/BitBitMobilePreview.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,MAAM,WAAW,wBAAwB;IACvC,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,IAAI,EAAE,OAAO,CAAC;IACd,gDAAgD;IAChD,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,8EAA8E;IAC9E,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD;;oCAEgC;IAChC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;4EACwE;IACxE,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,sFAAsF;IACtF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,IAAI,EACJ,IAAI,EACJ,WAAW,EACX,KAAK,EACL,KAAK,EACL,OAAO,EACP,OAAO,EACP,WAA0B,EAC1B,YAA4B,GAC7B,EAAE,wBAAwB;;;;;;;;mBA2I1B"}
|
|
@@ -12,13 +12,17 @@ const DEVICE_HEIGHT = 932;
|
|
|
12
12
|
* window instead, rendering the UI ~2-3x oversized.) It reuses the native bootstrap HTML +
|
|
13
13
|
* message protocol; only the parent side of the bridge (data/scheme in, tts out) lives here.
|
|
14
14
|
*/
|
|
15
|
-
export function BitBitMobilePreview({ code, data, colorScheme, theme, onTts, deviceWidth = DEVICE_WIDTH, deviceHeight = DEVICE_HEIGHT, }) {
|
|
15
|
+
export function BitBitMobilePreview({ code, data, colorScheme, theme, onTts, onReady, onError, deviceWidth = DEVICE_WIDTH, deviceHeight = DEVICE_HEIGHT, }) {
|
|
16
16
|
const iframeRef = useRef(null);
|
|
17
17
|
const wrapperRef = useRef(null);
|
|
18
18
|
const dataRef = useRef(data);
|
|
19
19
|
dataRef.current = data;
|
|
20
20
|
const onTtsRef = useRef(onTts);
|
|
21
21
|
onTtsRef.current = onTts;
|
|
22
|
+
// Read through a ref so the bridge listener stays mounted for the component's
|
|
23
|
+
// lifetime regardless of the host's callback identities.
|
|
24
|
+
const lifecycleRef = useRef({ onReady, onError });
|
|
25
|
+
lifecycleRef.current = { onReady, onError };
|
|
22
26
|
const readyRef = useRef(false);
|
|
23
27
|
// Fit the fixed-resolution device into whatever space the frame gives us.
|
|
24
28
|
const [scale, setScale] = useState(1);
|
|
@@ -63,6 +67,13 @@ export function BitBitMobilePreview({ code, data, colorScheme, theme, onTts, dev
|
|
|
63
67
|
readyRef.current = true;
|
|
64
68
|
send({ kind: 'update', data: dataRef.current });
|
|
65
69
|
}
|
|
70
|
+
else if (m.kind === 'view') {
|
|
71
|
+
// The bundle posts this on its first mount — first paint.
|
|
72
|
+
lifecycleRef.current.onReady?.();
|
|
73
|
+
}
|
|
74
|
+
else if (m.kind === 'error') {
|
|
75
|
+
lifecycleRef.current.onError?.(m.message ?? 'Preview failed');
|
|
76
|
+
}
|
|
66
77
|
else if (m.kind === 'tts') {
|
|
67
78
|
const fn = onTtsRef.current;
|
|
68
79
|
const id = m.id;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitBitMobilePreview.js","sourceRoot":"","sources":["../../src/studio/BitBitMobilePreview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAG3E;;yFAEyF;AACzF,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,aAAa,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"BitBitMobilePreview.js","sourceRoot":"","sources":["../../src/studio/BitBitMobilePreview.ts"],"names":[],"mappings":"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"}
|