1pub mod app;
8pub mod fonts;
9pub mod form;
10pub mod palette;
11pub mod panels;
12pub mod store;
13pub mod viewport;
14
15#[cfg(target_arch = "wasm32")]
19pub mod worker;
20
21#[cfg(target_arch = "wasm32")]
23mod web {
24 use wasm_bindgen::prelude::*;
25 use wasm_bindgen::JsCast;
26
27 #[wasm_bindgen]
29 pub async fn start(canvas_id: String) -> Result<(), JsValue> {
30 console_error_panic_hook::set_once();
31
32 let document = web_sys::window()
33 .ok_or_else(|| JsValue::from_str("no window"))?
34 .document()
35 .ok_or_else(|| JsValue::from_str("no document"))?;
36 let canvas = document
37 .get_element_by_id(&canvas_id)
38 .ok_or_else(|| JsValue::from_str("canvas element not found"))?
39 .dyn_into::<web_sys::HtmlCanvasElement>()
40 .map_err(|_| JsValue::from_str("element is not a <canvas>"))?;
41
42 eframe::WebRunner::new()
43 .start(
44 canvas,
45 eframe::WebOptions::default(),
46 Box::new(|cc| {
47 crate::fonts::install(&cc.egui_ctx);
48 crate::app::BrepApp::new(cc)
49 .map(|app| Box::new(app) as Box<dyn eframe::App>)
50 .map_err(|e| e.into())
51 }),
52 )
53 .await
54 }
55}