leptos-resize

Crates.ioleptos-resize
lib.rsleptos-resize
version0.2.0
created_at2025-01-03 00:33:41.185074+00
updated_at2025-01-06 21:00:34.070416+00
descriptionSimple user-resizable split view for Leptos
homepage
repositoryhttps://github.com/zortax/leptos-resize
max_upload_size
id1502016
size60,331
Leonard Seibold (zortax)

documentation

README

Leptos Resize

Preview

This crate provides a simple user-resizable split container for the Leptos web framework. Horizontal and vertical splits are both supported.

#[component]
fn MyComponent() -> impl IntoView {
  view! {
    <ResizableSplit>
      <div>"First"</div>
      <div>"Second"</div>
    </ResizableSplit>
  }
}

(See examples directory for a full CSR example)

Leptos compatibility

Crate version Compatible Leptos version
0.1 - 0.2 0.7

Features

  • Horizontal and vertical split
  • Split ratio can be bound to RwSignal
  • Works with server-side rendering
  • Arbitrary number of splits
  • Nested splits

Split direction

The split direction can be changed by setting the direction property.

#[component]
fn MyComponent() -> impl IntoView {
  view! {
    // split the container horizontally
    <ResizableSplit direction=SplitDirection::Column>
      <div>"First"</div>
      <div>"Second"</div>
    </ResizableSplit>
  }
}

Bind size percentages to signal

The size percentages can be bound to a RwSignal by setting the percentages property. The RwSignal should contain a Vec with one element less than the amount of children you pass. The last percentage will always be calculated. The values sum should be less than 100.

#[component]
fn MyComponent() -> impl IntoView {
  // the last childs size will be calculated (in this case 40.)
  let percentages = RwSignal::new(vec![20., 40.]);

  view! {
    <ResizableSplit percentages>
      <div>"First"</div>
      <div>"Second"</div>
      <div>"Third"</div>
    </ResizableSplit>
  }
}

Nest multiple split containers

The <ResizableSplit> container can also be nested to create more complex resizable layouts.

#[component]
fn MyComponent() -> impl IntoView {
  view! {
    <ResizableSplit>
      <div>"First"</div>
      <ResizableSplit direction=SplitDirection::Column>
        <div>"Second"</div>
        <div>"Third"</div>
      </ResizableSplit>
    </ResizableSplit>
  }
}
Commit count: 13

cargo fmt