pub mod app;
pub mod column_tree;
pub mod fonts;
pub mod form;
pub mod form_view;
pub mod palette;
pub mod panels;
pub mod store;
pub mod viewport;
pub mod workbench;
#[cfg(target_arch = "wasm32")]
pub mod worker;
#[cfg(target_arch = "wasm32")]
mod web {
use wasm_bindgen::prelude::*;
use wasm_bindgen::JsCast;
#[wasm_bindgen]
pub async fn start(canvas_id: String) -> Result<(), JsValue> {
console_error_panic_hook::set_once();
crate::store::hydrate_web_store().await;
let document = web_sys::window()
.ok_or_else(|| JsValue::from_str("no window"))?
.document()
.ok_or_else(|| JsValue::from_str("no document"))?;
let canvas = document
.get_element_by_id(&canvas_id)
.ok_or_else(|| JsValue::from_str("canvas element not found"))?
.dyn_into::<web_sys::HtmlCanvasElement>()
.map_err(|_| JsValue::from_str("element is not a <canvas>"))?;
eframe::WebRunner::new()
.start(
canvas,
eframe::WebOptions::default(),
Box::new(|cc| {
crate::fonts::install(&cc.egui_ctx);
crate::app::BrepApp::new(cc)
.map(|app| Box::new(app) as Box<dyn eframe::App>)
.map_err(|e| e.into())
}),
)
.await
}
}