-
- ();
- let TabOption { key, label, label_view } = option;
- create_effect({
- let key = key.clone();
- move |_| {
- let Some(label) = label_ref.get() else {
- return;
- };
- let Some(label_list) = label_list_ref.get() else {
- return;
- };
- if key.clone() == value.get() {
- request_animation_frame(move || {
- let list_rect = label_list.get_bounding_client_rect();
- let rect = label.get_bounding_client_rect();
- label_line
- .set(
- Some(TabsLabelLine {
- width: rect.width(),
- left: rect.left() - list_rect.left(),
- }),
- );
- });
- }
- }
- });
- let is_active = create_memo({
- let key = key.clone();
- move |_| key == value.get()
- });
- if let Some(label_view) = label_view {
- let TabLabelView { class, children } = label_view;
- view! {
-
-
- {children}
-
- }
- } else {
- view! {
-
-
- {if label.is_empty() { key } else { label }}
-
- }
- }
- }
- />
-
-
-
-
{children}
-
- }
-}
-
#[derive(Clone)]
-pub(crate) struct TabsLabelLine {
- width: f64,
- left: f64,
+pub(crate) struct TabListInjection {
+ pub selected_value: Model