@rerun-io/web-viewer 0.17.0-alpha.1 → 0.17.0-alpha.101
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 +1 -1
- package/index.d.ts +174 -253
- package/index.d.ts.map +1 -28
- package/index.js +354 -417
- package/index.js.map +1 -0
- package/index.ts +582 -0
- package/package.json +6 -4
- package/re_viewer.d.ts +2 -1
- package/re_viewer_bg.js +81 -80
- package/re_viewer_bg.wasm +0 -0
- package/re_viewer_bg.wasm.d.ts +6 -6
- package/tsconfig.json +7 -8
package/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
package/index.ts
ADDED
|
@@ -0,0 +1,582 @@
|
|
|
1
|
+
import type { WebHandle } from "./re_viewer.js";
|
|
2
|
+
|
|
3
|
+
interface AppOptions {
|
|
4
|
+
url?: string;
|
|
5
|
+
manifest_url?: string;
|
|
6
|
+
render_backend?: Backend;
|
|
7
|
+
hide_welcome_screen?: boolean;
|
|
8
|
+
panel_state_overrides?: Partial<{
|
|
9
|
+
[K in Panel]: PanelState;
|
|
10
|
+
}>;
|
|
11
|
+
fullscreen?: FullscreenOptions;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
type WebHandleConstructor = {
|
|
15
|
+
new (app_options?: AppOptions): WebHandle;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
let WebHandleConstructor: WebHandleConstructor | null = null;
|
|
19
|
+
|
|
20
|
+
async function load(): Promise<WebHandleConstructor> {
|
|
21
|
+
if (WebHandleConstructor) {
|
|
22
|
+
return WebHandleConstructor;
|
|
23
|
+
}
|
|
24
|
+
WebHandleConstructor = (await import("./re_viewer.js")).WebHandle;
|
|
25
|
+
return WebHandleConstructor;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
let _minimize_current_fullscreen_viewer: (() => void) | null = null;
|
|
29
|
+
|
|
30
|
+
function randomId(): string {
|
|
31
|
+
const bytes = new Uint8Array(16);
|
|
32
|
+
crypto.getRandomValues(bytes);
|
|
33
|
+
return Array.from(bytes)
|
|
34
|
+
.map((byte) => byte.toString(16).padStart(2, "0"))
|
|
35
|
+
.join("");
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export type Panel = "top" | "blueprint" | "selection" | "time";
|
|
39
|
+
export type PanelState = "hidden" | "collapsed" | "expanded";
|
|
40
|
+
export type Backend = "webgpu" | "webgl";
|
|
41
|
+
export type CanvasRect = {
|
|
42
|
+
width: string;
|
|
43
|
+
height: string;
|
|
44
|
+
top: string;
|
|
45
|
+
left: string;
|
|
46
|
+
bottom: string;
|
|
47
|
+
right: string;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
export type CanvasStyle = {
|
|
51
|
+
canvas: CanvasRect & { position: string; transition: string; zIndex: string };
|
|
52
|
+
document: {
|
|
53
|
+
body: { overflow: string; scrollbarGutter: string };
|
|
54
|
+
root: { overflow: string; scrollbarGutter: string };
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
interface WebViewerOptions {
|
|
59
|
+
manifest_url?: string;
|
|
60
|
+
render_backend?: Backend;
|
|
61
|
+
hide_welcome_screen?: boolean;
|
|
62
|
+
allow_fullscreen?: boolean;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
interface FullscreenOptions {
|
|
66
|
+
get_state: () => boolean;
|
|
67
|
+
on_toggle: () => void;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
interface WebViewerEvents {
|
|
71
|
+
fullscreen: boolean;
|
|
72
|
+
ready: void;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
type EventsWithValue = {
|
|
76
|
+
[K in keyof WebViewerEvents as WebViewerEvents[K] extends void
|
|
77
|
+
? never
|
|
78
|
+
: K]: WebViewerEvents[K];
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
type EventsWithoutValue = {
|
|
82
|
+
[K in keyof WebViewerEvents as WebViewerEvents[K] extends void
|
|
83
|
+
? K
|
|
84
|
+
: never]: WebViewerEvents[K];
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
type WithValue<Events> = {
|
|
88
|
+
[K in keyof Events as Events[K] extends void ? never : K]: Events[K];
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
type WithoutValue<Events> = {
|
|
92
|
+
[K in keyof Events as Events[K] extends void ? K : never]: Events[K];
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
type Cancel = () => void;
|
|
96
|
+
|
|
97
|
+
export class WebViewer {
|
|
98
|
+
#id = randomId();
|
|
99
|
+
|
|
100
|
+
#handle: WebHandle | null = null;
|
|
101
|
+
|
|
102
|
+
#canvas: HTMLCanvasElement | null = null;
|
|
103
|
+
|
|
104
|
+
#state: "ready" | "starting" | "stopped" = "stopped";
|
|
105
|
+
|
|
106
|
+
#fullscreen = false;
|
|
107
|
+
|
|
108
|
+
#allow_fullscreen = false;
|
|
109
|
+
|
|
110
|
+
constructor() {
|
|
111
|
+
injectStyle();
|
|
112
|
+
setupGlobalEventListeners();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Start the viewer.
|
|
117
|
+
*
|
|
118
|
+
* @param rrd URLs to `.rrd` files or WebSocket connections to our SDK.
|
|
119
|
+
* @param parent The element to attach the canvas onto.
|
|
120
|
+
* @param options Whether to hide the welcome screen.
|
|
121
|
+
*/
|
|
122
|
+
async start(
|
|
123
|
+
rrd: string | string[] | null,
|
|
124
|
+
parent: HTMLElement | null,
|
|
125
|
+
options: WebViewerOptions | null,
|
|
126
|
+
): Promise<void> {
|
|
127
|
+
parent ??= document.body;
|
|
128
|
+
options ??= {};
|
|
129
|
+
|
|
130
|
+
this.#allow_fullscreen = options.allow_fullscreen || false;
|
|
131
|
+
|
|
132
|
+
if (this.#state !== "stopped") return;
|
|
133
|
+
this.#state = "starting";
|
|
134
|
+
|
|
135
|
+
this.#canvas = document.createElement("canvas");
|
|
136
|
+
this.#canvas.id = this.#id;
|
|
137
|
+
parent.append(this.#canvas);
|
|
138
|
+
|
|
139
|
+
let WebHandle_class = await load();
|
|
140
|
+
if (this.#state !== "starting") return;
|
|
141
|
+
|
|
142
|
+
const fullscreen = this.#allow_fullscreen
|
|
143
|
+
? {
|
|
144
|
+
get_state: () => this.#fullscreen,
|
|
145
|
+
on_toggle: () => this.toggle_fullscreen(),
|
|
146
|
+
}
|
|
147
|
+
: undefined;
|
|
148
|
+
|
|
149
|
+
this.#handle = new WebHandle_class({ ...options, fullscreen });
|
|
150
|
+
await this.#handle.start(this.#canvas.id);
|
|
151
|
+
if (this.#state !== "starting") return;
|
|
152
|
+
|
|
153
|
+
if (this.#handle.has_panicked()) {
|
|
154
|
+
throw new Error(`Web viewer crashed: ${this.#handle.panic_message()}`);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
this.#state = "ready";
|
|
158
|
+
this.#dispatch_event("ready");
|
|
159
|
+
|
|
160
|
+
if (rrd) {
|
|
161
|
+
this.open(rrd);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
#event_map: Map<
|
|
168
|
+
keyof WebViewerEvents,
|
|
169
|
+
Map<(value: any) => void, { once: boolean }>
|
|
170
|
+
> = new Map();
|
|
171
|
+
|
|
172
|
+
#dispatch_event<E extends keyof EventsWithValue>(
|
|
173
|
+
event: E,
|
|
174
|
+
value: EventsWithValue[E],
|
|
175
|
+
): void;
|
|
176
|
+
#dispatch_event<E extends keyof EventsWithoutValue>(event: E): void;
|
|
177
|
+
#dispatch_event(event: any, value?: any): void {
|
|
178
|
+
const callbacks = this.#event_map.get(event);
|
|
179
|
+
if (callbacks) {
|
|
180
|
+
for (const [callback, { once }] of [...callbacks.entries()]) {
|
|
181
|
+
callback(value);
|
|
182
|
+
if (once) callbacks.delete(callback);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Register an event listener.
|
|
189
|
+
*
|
|
190
|
+
* Returns a function which removes the listener when called.
|
|
191
|
+
*/
|
|
192
|
+
on<E extends keyof WithValue<WebViewerEvents>>(
|
|
193
|
+
event: E,
|
|
194
|
+
callback: (value: WithValue<WebViewerEvents>[E]) => void,
|
|
195
|
+
): Cancel;
|
|
196
|
+
on<E extends keyof WithoutValue<WebViewerEvents>>(
|
|
197
|
+
event: E,
|
|
198
|
+
callback: () => void,
|
|
199
|
+
): Cancel;
|
|
200
|
+
on(event: any, callback: any): Cancel {
|
|
201
|
+
const callbacks = this.#event_map.get(event) ?? new Map();
|
|
202
|
+
callbacks.set(callback, { once: false });
|
|
203
|
+
this.#event_map.set(event, callbacks);
|
|
204
|
+
return () => callbacks.delete(callback);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Register an event listener which runs only once.
|
|
209
|
+
*
|
|
210
|
+
* Returns a function which removes the listener when called.
|
|
211
|
+
*/
|
|
212
|
+
once<E extends keyof WithValue<WebViewerEvents>>(
|
|
213
|
+
event: E,
|
|
214
|
+
callback: (value: WithValue<WebViewerEvents>[E]) => void,
|
|
215
|
+
): Cancel;
|
|
216
|
+
once<E extends keyof WithoutValue<WebViewerEvents>>(
|
|
217
|
+
event: E,
|
|
218
|
+
callback: () => void,
|
|
219
|
+
): Cancel;
|
|
220
|
+
once(event: any, callback: any): Cancel {
|
|
221
|
+
const callbacks = this.#event_map.get(event) ?? new Map();
|
|
222
|
+
callbacks.set(callback, { once: true });
|
|
223
|
+
this.#event_map.set(event, callbacks);
|
|
224
|
+
return () => callbacks.delete(callback);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Unregister an event listener.
|
|
229
|
+
*
|
|
230
|
+
* The event emitter relies on referential equality to store callbacks.
|
|
231
|
+
* The `callback` passed in must be the exact same _instance_ of the function passed in to `on` or `once`.
|
|
232
|
+
*/
|
|
233
|
+
off<E extends keyof WithValue<WebViewerEvents>>(
|
|
234
|
+
event: E,
|
|
235
|
+
callback: (value: WithValue<WebViewerEvents>[E]) => void,
|
|
236
|
+
): void;
|
|
237
|
+
off<E extends keyof WithoutValue<WebViewerEvents>>(
|
|
238
|
+
event: E,
|
|
239
|
+
callback: () => void,
|
|
240
|
+
): void;
|
|
241
|
+
off(event: any, callback: any): void {
|
|
242
|
+
const callbacks = this.#event_map.get(event);
|
|
243
|
+
if (callbacks) {
|
|
244
|
+
callbacks.delete(callback);
|
|
245
|
+
} else {
|
|
246
|
+
console.warn(
|
|
247
|
+
"Attempted to call `WebViewer.off` with an unregistered callback. Are you using ",
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/**
|
|
253
|
+
* Returns `true` if the viewer is ready to connect to data sources.
|
|
254
|
+
*/
|
|
255
|
+
get ready() {
|
|
256
|
+
return this.#state === "ready";
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Open a recording.
|
|
261
|
+
*
|
|
262
|
+
* The viewer must have been started via `WebViewer.start`.
|
|
263
|
+
*
|
|
264
|
+
* @param rrd URLs to `.rrd` files or WebSocket connections to our SDK.
|
|
265
|
+
* @param options
|
|
266
|
+
* - follow_if_http: Whether Rerun should open the resource in "Following" mode when streaming
|
|
267
|
+
* from an HTTP url. Defaults to `false`. Ignored for non-HTTP URLs.
|
|
268
|
+
*/
|
|
269
|
+
open(rrd: string | string[], options: { follow_if_http?: boolean } = {}) {
|
|
270
|
+
if (!this.#handle) {
|
|
271
|
+
throw new Error(`attempted to open \`${rrd}\` in a stopped viewer`);
|
|
272
|
+
}
|
|
273
|
+
const urls = Array.isArray(rrd) ? rrd : [rrd];
|
|
274
|
+
for (const url of urls) {
|
|
275
|
+
this.#handle.add_receiver(url, options.follow_if_http);
|
|
276
|
+
if (this.#handle.has_panicked()) {
|
|
277
|
+
throw new Error(`Web viewer crashed: ${this.#handle.panic_message()}`);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Close a recording.
|
|
284
|
+
*
|
|
285
|
+
* The viewer must have been started via `WebViewer.start`.
|
|
286
|
+
*
|
|
287
|
+
* @param rrd URLs to `.rrd` files or WebSocket connections to our SDK.
|
|
288
|
+
*/
|
|
289
|
+
close(rrd: string | string[]) {
|
|
290
|
+
if (!this.#handle) {
|
|
291
|
+
throw new Error(`attempted to close \`${rrd}\` in a stopped viewer`);
|
|
292
|
+
}
|
|
293
|
+
const urls = Array.isArray(rrd) ? rrd : [rrd];
|
|
294
|
+
for (const url of urls) {
|
|
295
|
+
this.#handle.remove_receiver(url);
|
|
296
|
+
if (this.#handle.has_panicked()) {
|
|
297
|
+
throw new Error(`Web viewer crashed: ${this.#handle.panic_message()}`);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Stop the viewer, freeing all associated memory.
|
|
304
|
+
*
|
|
305
|
+
* The same viewer instance may be started multiple times.
|
|
306
|
+
*/
|
|
307
|
+
stop() {
|
|
308
|
+
if (this.#state === "stopped") return;
|
|
309
|
+
if (this.#allow_fullscreen && this.#canvas && this.#fullscreen) {
|
|
310
|
+
this.#minimize();
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
this.#state = "stopped";
|
|
314
|
+
|
|
315
|
+
this.#canvas?.remove();
|
|
316
|
+
this.#handle?.destroy();
|
|
317
|
+
this.#handle?.free();
|
|
318
|
+
|
|
319
|
+
this.#canvas = null;
|
|
320
|
+
this.#handle = null;
|
|
321
|
+
this.#fullscreen = false;
|
|
322
|
+
this.#allow_fullscreen = false;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Opens a new channel for sending log messages.
|
|
327
|
+
*
|
|
328
|
+
* The channel can be used to incrementally push `rrd` chunks into the viewer.
|
|
329
|
+
*
|
|
330
|
+
* @param channel_name used to identify the channel.
|
|
331
|
+
*/
|
|
332
|
+
open_channel(channel_name: string = "rerun-io/web-viewer"): LogChannel {
|
|
333
|
+
if (!this.#handle) {
|
|
334
|
+
throw new Error(
|
|
335
|
+
`attempted to open channel \"${channel_name}\" in a stopped web viewer`,
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
const id = crypto.randomUUID();
|
|
339
|
+
this.#handle.open_channel(id, channel_name);
|
|
340
|
+
const on_send = (/** @type {Uint8Array} */ data: Uint8Array) => {
|
|
341
|
+
if (!this.#handle) {
|
|
342
|
+
throw new Error(
|
|
343
|
+
`attempted to send data through channel \"${channel_name}\" to a stopped web viewer`,
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
this.#handle.send_rrd_to_channel(id, data);
|
|
347
|
+
};
|
|
348
|
+
const on_close = () => {
|
|
349
|
+
if (!this.#handle) {
|
|
350
|
+
throw new Error(
|
|
351
|
+
`attempted to send data through channel \"${channel_name}\" to a stopped web viewer`,
|
|
352
|
+
);
|
|
353
|
+
}
|
|
354
|
+
this.#handle.close_channel(id);
|
|
355
|
+
};
|
|
356
|
+
const get_state = () => this.#state;
|
|
357
|
+
return new LogChannel(on_send, on_close, get_state);
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Force a panel to a specific state.
|
|
362
|
+
*
|
|
363
|
+
* @param panel
|
|
364
|
+
* @param state
|
|
365
|
+
*/
|
|
366
|
+
override_panel_state(panel: Panel, state: PanelState) {
|
|
367
|
+
if (!this.#handle) {
|
|
368
|
+
throw new Error(
|
|
369
|
+
`attempted to set ${panel} panel to ${state} in a stopped web viewer`,
|
|
370
|
+
);
|
|
371
|
+
}
|
|
372
|
+
this.#handle.override_panel_state(panel, state);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Toggle panel overrides set via `override_panel_state`.
|
|
377
|
+
*
|
|
378
|
+
* @param value - set to a specific value. Toggles the previous value if not provided.
|
|
379
|
+
*/
|
|
380
|
+
toggle_panel_overrides(value?: boolean | null) {
|
|
381
|
+
if (!this.#handle) {
|
|
382
|
+
throw new Error(
|
|
383
|
+
`attempted to toggle panel overrides in a stopped web viewer`,
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
this.#handle.toggle_panel_overrides(value as boolean | undefined);
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
/**
|
|
390
|
+
* Toggle fullscreen mode.
|
|
391
|
+
*
|
|
392
|
+
* This does nothing if `allow_fullscreen` was not set to `true` when starting the viewer.
|
|
393
|
+
*
|
|
394
|
+
* Fullscreen mode works by updating the underlying `<canvas>` element's `style`:
|
|
395
|
+
* - `position` to `fixed`
|
|
396
|
+
* - width/height/top/left to cover the entire viewport
|
|
397
|
+
*
|
|
398
|
+
* When fullscreen mode is toggled off, the style is restored to its previous values.
|
|
399
|
+
*
|
|
400
|
+
* When fullscreen mode is toggled on, any other instance of the viewer on the page
|
|
401
|
+
* which is already in fullscreen mode is toggled off. This means that it doesn't
|
|
402
|
+
* have to be tracked manually.
|
|
403
|
+
*
|
|
404
|
+
* This functionality can also be directly accessed in the viewer:
|
|
405
|
+
* - The maximize/minimize top panel button
|
|
406
|
+
* - The `Toggle fullscreen` UI command (accessible via the command palette, CTRL+P)
|
|
407
|
+
*/
|
|
408
|
+
toggle_fullscreen() {
|
|
409
|
+
if (!this.#allow_fullscreen) return;
|
|
410
|
+
|
|
411
|
+
if (!this.#handle || !this.#canvas) {
|
|
412
|
+
throw new Error(
|
|
413
|
+
`attempted to toggle fullscreen mode in a stopped web viewer`,
|
|
414
|
+
);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
if (this.#fullscreen) {
|
|
418
|
+
this.#minimize();
|
|
419
|
+
} else {
|
|
420
|
+
this.#maximize();
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
#minimize = () => {};
|
|
425
|
+
|
|
426
|
+
#maximize = () => {
|
|
427
|
+
_minimize_current_fullscreen_viewer?.();
|
|
428
|
+
|
|
429
|
+
const canvas = this.#canvas!;
|
|
430
|
+
const rect = canvas.getBoundingClientRect();
|
|
431
|
+
|
|
432
|
+
const sync_style_to_rect = () => {
|
|
433
|
+
canvas.style.left = rect.left + "px";
|
|
434
|
+
canvas.style.top = rect.top + "px";
|
|
435
|
+
canvas.style.width = rect.width + "px";
|
|
436
|
+
canvas.style.height = rect.height + "px";
|
|
437
|
+
};
|
|
438
|
+
const undo_style = () => canvas.removeAttribute("style");
|
|
439
|
+
const transition = (callback: () => void) =>
|
|
440
|
+
setTimeout(() => requestAnimationFrame(callback), transition_delay_ms);
|
|
441
|
+
|
|
442
|
+
canvas.classList.add(classes.fullscreen_base, classes.fullscreen_rect);
|
|
443
|
+
sync_style_to_rect();
|
|
444
|
+
requestAnimationFrame(() => {
|
|
445
|
+
if (!this.#fullscreen) return;
|
|
446
|
+
canvas.classList.add(classes.transition);
|
|
447
|
+
transition(() => {
|
|
448
|
+
if (!this.#fullscreen) return;
|
|
449
|
+
undo_style();
|
|
450
|
+
|
|
451
|
+
document.body.classList.add(classes.hide_scrollbars);
|
|
452
|
+
document.documentElement.classList.add(classes.hide_scrollbars);
|
|
453
|
+
});
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
this.#minimize = () => {
|
|
457
|
+
document.body.classList.remove(classes.hide_scrollbars);
|
|
458
|
+
document.documentElement.classList.remove(classes.hide_scrollbars);
|
|
459
|
+
|
|
460
|
+
sync_style_to_rect();
|
|
461
|
+
canvas.classList.remove(classes.fullscreen_rect);
|
|
462
|
+
transition(() => {
|
|
463
|
+
if (this.#fullscreen) return;
|
|
464
|
+
|
|
465
|
+
undo_style();
|
|
466
|
+
canvas.classList.remove(classes.fullscreen_base, classes.transition);
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
_minimize_current_fullscreen_viewer = null;
|
|
470
|
+
this.#fullscreen = false;
|
|
471
|
+
this.#dispatch_event("fullscreen", false);
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
_minimize_current_fullscreen_viewer = () => this.#minimize();
|
|
475
|
+
this.#fullscreen = true;
|
|
476
|
+
this.#dispatch_event("fullscreen", true);
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
class LogChannel {
|
|
481
|
+
#on_send;
|
|
482
|
+
#on_close;
|
|
483
|
+
#get_state;
|
|
484
|
+
#closed = false;
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* @param on_send
|
|
488
|
+
* @param on_close
|
|
489
|
+
* @param get_state
|
|
490
|
+
*/
|
|
491
|
+
constructor(
|
|
492
|
+
on_send: (data: Uint8Array) => void,
|
|
493
|
+
on_close: () => void,
|
|
494
|
+
get_state: () => "ready" | "starting" | "stopped",
|
|
495
|
+
) {
|
|
496
|
+
this.#on_send = on_send;
|
|
497
|
+
this.#on_close = on_close;
|
|
498
|
+
this.#get_state = get_state;
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
get ready() {
|
|
502
|
+
return !this.#closed && this.#get_state() === "ready";
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
/**
|
|
506
|
+
* Send an `rrd` containing log messages to the viewer.
|
|
507
|
+
*
|
|
508
|
+
* Does nothing if `!this.ready`.
|
|
509
|
+
*
|
|
510
|
+
* @param rrd_bytes Is an rrd file stored in a byte array, received via some other side channel.
|
|
511
|
+
*/
|
|
512
|
+
send_rrd(rrd_bytes: Uint8Array) {
|
|
513
|
+
if (!this.ready) return;
|
|
514
|
+
this.#on_send(rrd_bytes);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/**
|
|
518
|
+
* Close the channel.
|
|
519
|
+
*
|
|
520
|
+
* Does nothing if `!this.ready`.
|
|
521
|
+
*/
|
|
522
|
+
close() {
|
|
523
|
+
if (!this.ready) return;
|
|
524
|
+
this.#on_close();
|
|
525
|
+
this.#closed = true;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
const classes = {
|
|
530
|
+
hide_scrollbars: "rerun-viewer-hide-scrollbars",
|
|
531
|
+
fullscreen_base: "rerun-viewer-fullscreen-base",
|
|
532
|
+
fullscreen_rect: "rerun-viewer-fullscreen-rect",
|
|
533
|
+
transition: "rerun-viewer-transition",
|
|
534
|
+
};
|
|
535
|
+
|
|
536
|
+
const transition_delay_ms = 100;
|
|
537
|
+
|
|
538
|
+
const css = `
|
|
539
|
+
html.${classes.hide_scrollbars},
|
|
540
|
+
body.${classes.hide_scrollbars} {
|
|
541
|
+
scrollbar-gutter: auto !important;
|
|
542
|
+
overflow: hidden !important;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
.${classes.fullscreen_base} {
|
|
546
|
+
position: fixed;
|
|
547
|
+
z-index: 99999;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
.${classes.transition} {
|
|
551
|
+
transition: all ${transition_delay_ms / 1000}s linear;
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
.${classes.fullscreen_rect} {
|
|
555
|
+
left: 0;
|
|
556
|
+
top: 0;
|
|
557
|
+
width: 100%;
|
|
558
|
+
height: 100%;
|
|
559
|
+
}
|
|
560
|
+
`;
|
|
561
|
+
|
|
562
|
+
function injectStyle() {
|
|
563
|
+
const ID = "__rerun_viewer_style";
|
|
564
|
+
|
|
565
|
+
if (document.getElementById(ID)) {
|
|
566
|
+
// already injected
|
|
567
|
+
return;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
const style = document.createElement("style");
|
|
571
|
+
style.id = ID;
|
|
572
|
+
style.appendChild(document.createTextNode(css));
|
|
573
|
+
document.head.appendChild(style);
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
function setupGlobalEventListeners() {
|
|
577
|
+
window.addEventListener("keyup", (e) => {
|
|
578
|
+
if (e.code === "Escape") {
|
|
579
|
+
_minimize_current_fullscreen_viewer?.();
|
|
580
|
+
}
|
|
581
|
+
});
|
|
582
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rerun-io/web-viewer",
|
|
3
|
-
"version": "0.17.0-alpha.
|
|
3
|
+
"version": "0.17.0-alpha.101",
|
|
4
4
|
"description": "Embed the Rerun web viewer in your app",
|
|
5
5
|
"licenses": [
|
|
6
6
|
{
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
],
|
|
13
13
|
"scripts": {
|
|
14
14
|
"build:wasm": "cargo run -p re_dev_tools -- build-web-viewer --release -g --module -o rerun_js/web-viewer",
|
|
15
|
-
"build:
|
|
16
|
-
"build": "npm run build:wasm && npm run build:
|
|
15
|
+
"build:js": "tsc",
|
|
16
|
+
"build": "npm run build:wasm && npm run build:js",
|
|
17
17
|
"build:wasm:debug": "cargo run -p re_dev_tools -- build-web-viewer --debug --module -o rerun_js/web-viewer",
|
|
18
|
-
"build:debug": "npm run build:wasm:debug && npm run build:
|
|
18
|
+
"build:debug": "npm run build:wasm:debug && npm run build:js"
|
|
19
19
|
},
|
|
20
20
|
"repository": {
|
|
21
21
|
"type": "git",
|
|
@@ -39,9 +39,11 @@
|
|
|
39
39
|
}
|
|
40
40
|
},
|
|
41
41
|
"files": [
|
|
42
|
+
"index.ts",
|
|
42
43
|
"index.d.ts",
|
|
43
44
|
"index.d.ts.map",
|
|
44
45
|
"index.js",
|
|
46
|
+
"index.js.map",
|
|
45
47
|
"package.json",
|
|
46
48
|
"re_viewer_bg.js",
|
|
47
49
|
"re_viewer_bg.wasm",
|
package/re_viewer.d.ts
CHANGED
|
@@ -81,8 +81,9 @@ export class WebHandle {
|
|
|
81
81
|
*/
|
|
82
82
|
start(canvas_id: string): Promise<void>;
|
|
83
83
|
/**
|
|
84
|
+
* @param {boolean | undefined} [value]
|
|
84
85
|
*/
|
|
85
|
-
toggle_panel_overrides(): void;
|
|
86
|
+
toggle_panel_overrides(value?: boolean): void;
|
|
86
87
|
/**
|
|
87
88
|
* @param {string} panel
|
|
88
89
|
* @param {string | undefined} [state]
|