diff --git a/demo/src/components/syntect-css.css b/demo/src/components/syntect-css.css index fee86b7..ad18e2d 100644 --- a/demo/src/components/syntect-css.css +++ b/demo/src/components/syntect-css.css @@ -1,5 +1,10 @@ /** https://github.com/AmjadHD/sublime_one_theme */ +.syntect-comment { + font-style: italic; + color: hsl(220, 10%, 40%); +} + /** light */ .color-scheme--light .syntect-support.syntect-function, diff --git a/demo_markdown/docs/drawer/mod.md b/demo_markdown/docs/drawer/mod.md index ec0a447..3594d79 100644 --- a/demo_markdown/docs/drawer/mod.md +++ b/demo_markdown/docs/drawer/mod.md @@ -5,6 +5,8 @@ let show = create_rw_signal(false); let placement = create_rw_signal(DrawerPlacement::Top); let open = Callback::new(move |new_placement: DrawerPlacement| { + // Note: Since `show` changes are made in real time, + // please put it in front of `show.set(true)` when changing `placement`. placement.set(new_placement); show.set(true); }); diff --git a/thaw/src/components/css_transition/mod.rs b/thaw/src/components/css_transition/mod.rs index 7f79a72..508cd77 100644 --- a/thaw/src/components/css_transition/mod.rs +++ b/thaw/src/components/css_transition/mod.rs @@ -7,6 +7,7 @@ pub fn CSSTransition( #[prop(into)] show: MaybeSignal, #[prop(into)] name: MaybeSignal, #[prop(optional, into)] on_enter: Option>, + #[prop(optional, into)] on_after_enter: Option>, #[prop(optional, into)] on_after_leave: Option>, children: CF, ) -> impl IntoView @@ -28,6 +29,9 @@ where match class { RemoveClassName::Enter(active, to) => { let _ = class_list.remove_2(&active, &to); + if let Some(on_after_enter) = on_after_enter { + on_after_enter.call(()); + } } RemoveClassName::Leave(active, to) => { let _ = class_list.remove_2(&active, &to); diff --git a/thaw/src/drawer/mod.rs b/thaw/src/drawer/mod.rs index a219b65..0b0ae98 100644 --- a/thaw/src/drawer/mod.rs +++ b/thaw/src/drawer/mod.rs @@ -40,15 +40,29 @@ pub fn Drawer( let mask_ref = NodeRef::::new(); let drawer_ref = NodeRef::::new(); + let is_css_transition = RwSignal::new(false); + let placement = Memo::new(move |_| { + if is_css_transition.get() { + placement.get_untracked().as_str() + } else { + placement.get_untracked().as_str() + } + }); + let on_after_enter = move |_| { + is_css_transition.set(false); + }; + let is_lock = RwSignal::new(show.get_untracked()); Effect::new(move |_| { if show.get() { is_lock.set(true); + is_css_transition.set(true); } }); use_lock_html_scroll(is_lock.into()); let on_after_leave = move |_| { is_lock.set(false); + is_css_transition.set(false); }; view! { @@ -70,15 +84,17 @@ pub fn Drawer( node_ref=drawer_ref show=show.signal() name=Memo::new(move |_| { - format!("slide-in-from-{}-transition", placement.get().as_str()) + format!("slide-in-from-{}-transition", placement.get()) }) + + on_after_enter on_after_leave let:display >