pub mod app;
pub mod automation;
mod color;
pub mod column_tree;
pub mod diagnostics;
pub mod document;
pub mod document_class;
pub mod family_table;
#[cfg(not(target_arch = "wasm32"))]
pub mod file_association;
pub mod handles;
pub mod fonts;
pub mod form;
pub mod form_view;
pub mod icon_text;
pub mod icons;
pub mod instructions;
mod http;
#[cfg(not(target_arch = "wasm32"))]
pub mod logger;
#[cfg(all(not(target_arch = "wasm32"), feature = "mcp"))]
pub mod mcp;
pub mod delete_selection;
#[cfg(not(target_arch = "wasm32"))]
pub mod desktop_loop;
pub mod offscreen;
#[cfg(feature = "automation")]
pub mod on_demand;
#[cfg(all(target_arch = "wasm32", feature = "automation"))]
pub mod web_pump;
pub mod offsite;
pub mod palette;
pub mod panels;
pub mod perf;
pub mod plm;
pub mod recovery;
pub mod report_followup;
#[cfg(feature = "scripting")]
pub mod scripting;
#[cfg(not(target_arch = "wasm32"))]
pub mod simulation_export;
pub mod store;
pub mod template;
#[cfg(not(target_arch = "wasm32"))]
pub mod update;
pub mod viewport;
#[cfg(feature = "mcp")]
pub mod webmcp;
pub mod workbench;
pub mod plugins;
pub mod javascript;
#[cfg(target_arch = "wasm32")]
pub mod worker;
#[cfg(all(target_arch = "wasm32", feature = "scripting"))]
pub mod code_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> {
brep_render::brep_kernel::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>"))?;
let runner = eframe::WebRunner::new();
#[cfg(feature = "automation")]
crate::web_pump::set_runner(&runner);
runner
.start(
canvas,
eframe::WebOptions::default(),
Box::new(|cc| {
crate::fonts::install(&cc.egui_ctx);
crate::app::BrepApp::new(cc)
.map(|mut app| {
app.start_report_followup(&cc.egui_ctx);
#[cfg(feature = "automation")]
crate::web_pump::install(&cc.egui_ctx, cc.wgpu_render_state.clone(), app.automation());
#[cfg(feature = "mcp")]
crate::webmcp::attach(app.automation().clone(), app.diagnostics().adapter_line());
Box::new(app) as Box<dyn eframe::App>
})
.map_err(|e| e.into())
}),
)
.await
}
}