use std::{
cell::{Ref, RefCell, RefMut},
fmt::{Debug, Formatter},
rc::Rc,
sync::Arc,
};
use dioxus::prelude::*;
use dioxus_elements::GlobalAttributes;
use katex_wasmbind::KaTeXOptions;
pub mod builder;
pub struct UseKatex {
katex: Rc<RefCell<KaTeXOptions>>,
updater: Arc<dyn Fn() + 'static>,
}
impl UseKatex {
pub fn get_config(&self) -> Ref<'_, KaTeXOptions> {
self.katex.borrow()
}
pub fn get_config_mut(&self) -> RefMut<'_, KaTeXOptions> {
self.katex.borrow_mut()
}
pub fn set_inline_mode(&self) {
self.get_config_mut().display_mode = false;
self.needs_update();
}
pub fn set_display_mode(&self) {
self.get_config_mut().display_mode = true;
self.needs_update();
}
pub fn needs_update(&self) {
(self.updater)();
}
}
impl UseKatex {
pub fn compile(&self, input: &str) -> LazyNodes {
let config = self.katex.borrow_mut();
let out = config.render(input);
rsx! {
div {
dangerous_inner_html: "{out}"
}
}
}
}