#yew-component #split #yew #component #wrapper #resizable #web-apps

split-yew

Split.js 库的 Yew 组件:适用于Web应用程序的可调整大小的分割视图

5 个版本

0.2.1 2024年2月5日
0.2.0 2023年10月27日
0.1.2 2023年9月18日
0.1.1 2023年8月3日
0.1.0 2023年7月26日

#170 in GUI

每月下载量 22

MIT 协议

31KB
417

split-yew

crates-badge docsrs-badge yew-badge license-badge

此库为 Split.js 库 添加了 Yew 组件包装器。类似于 react-split 组件。

此库不包括 split-grid 组件。

split-yew 已与 split.js 版本 1.6.5 进行过测试

用法

首先,将 split.js 模块包含在您的 index.html 文件的头标签中,如下所示

<script type="importmap">
    {
        "imports": {
            "split.js": "https://unpkg.com/[email protected]/dist/split.es.js"
        }
    }
</script>

确保其类型为 importmap,并且导入名为 split.js。同时,确保您选择 ES 模块版本,而不是 CommonJS 版本。值得注意的是,split.js 不包含 ES 模块脚本的压缩版本,因此如果您需要,您将不得不自己打包它。之后,该库应无问题地工作。

与它的 React 对应物类似,您只需要将您想要在可调整大小的分割视图中显示的组件包围起来。

html! {
    <Split>
        <Component />
        // ...
        <Component />
    </Split>
}

CSS

split.js 不包含任何样式,并且此组件也不会改变这一点。为了使分割可见,您应该使用显示布局样式来编辑分割根元素的样式。我个人推荐使用 flex 布局。要使边框可见,您应使用 .gutter.gutter-horizontal.gutter-vertical CSS 类来编辑其样式。

split-yew 的实际使用示例是 yew-playground 的前端。分割样式在 应用程序的源代码 中设置,并且它的 CSS 样式表 展示了如何样式化边框。

有关样式更多信息,请查看split.js的文档

文档

您可以使用props自定义split。为了保持与react-split组件的兼容性,因此您还可以参考它的参考以及Split.js的文档,API有一些细微的变化。

所有props

属性 类型 描述 文档
class 应用于split容器元素的类 N/A
大小 Vec<f64> 每个元素的大小 文档
min_size f64 所有元素的最小大小(如果指定了min_sizes,则此值将被忽略) 文档
min_sizes Vec<f64> 每个元素的最小大小 文档
max_size f64 所有元素的最大大小(如果指定了max_sizes,则此值将被忽略) 文档
max_sizes Vec<f64> 每个元素的最大大小 文档
expand_to_min bool 将初始大小扩展到min_size(默认:false) 文档
gutter_size f64 像素单位 Gutters大小(默认:10) 文档
gutter_align GutterAlign 元素之间的Gutter对齐(默认:GutterAlign::Center) 文档
snap_offset f64 以像素为单位的Snap到最小大小偏移量(默认:30) 文档
drag_interval f64 拖动像素数(默认:1) 文档
direction 方向 分割方向:水平或垂直(默认:Direction::Horizontal) 文档
cursor 光标 拖动时显示的光标(默认:Cursor::ColResize) 文档
gutter js_sys::函数 用于创建每个gutter元素 文档
element_style js_sys::函数 用于设置每个元素的风格 文档
gutter_style js_sys::函数 用于设置gutter的风格 文档
on_drag js_sys::函数 拖动时调用 文档
on_drag_start js_sys::函数 拖动开始时调用 文档
on_drag_end js_sys::函数 拖动结束时调用 文档
collapsed usize 此prop替代了对collapse(index)的方法调用 文档

附加详情

class prop

Split组件包括一个class prop,您可以用来指定包裹所有内部组件的div的类。这有助于设置split的样式,尤其是在使用像TailwindCSS这样的工具时。

min_sizemax_size prop

这两个prop最初接受两种不同类型的值,可以是单个数字,指定所有组件的最小/最大大小,或者是一个数字数组,指定每个组件的单独的最小/最大大小。

在Rust中,split-yew有四个不同的props来模拟这种行为

  • min_size/max_size:其中您可以指定一个值应用于所有组件。
  • min_sizes/max_sizes:其中您可以指定一个值数组,每个值对应一个组件。

虽然您可以同时指定一个min_size和一个min_sizes,但向量变体会始终具有优先级,如下面的示例所示

html! {
    <Split min_size={500.0} min_sizes={vec![100.0, 200.0]}>
        <ComponentA />
        <ComponentB />
    </Split>
}

在这个例子中,两个组件将具有100和200的最小大小,而min_size={500.0}将被忽略。

函数props

属性 gutterelement_stylegutter_styleon_dragon_drag_starton_drag_end 应该接受一个函数或闭包。不幸的是,我无法用 yew::Callbackwasm_bindgen::Closure 类型来表示它们。目前我能做的最好的事是使用 js_sys::Function 类型,这仍然可以作为属性传递,也可以传递给 split.js 库本身。

这使得传递这些属性有些不方便,因为 js_sys::Function 类型不包含任何有关函数参数或返回类型的类型信息,然而所有这些信息已经在 split.js 的官方文档中提供,因此如果你需要实现这些函数之一,请参考该文档。

对于实现本身,你可以简单地实现一个 wasm_bindgen::Closure 并将其转换为 js_sys::Function。以下示例展示了如何为 gutter 属性创建这样的函数。

let my_gutter: js_sys::Function = Closure::<dyn Fn(js_sys::BigInt, String, web_sys::Element) -> web_sys::Element>::new(
        |index, direction, pair_element| {
            // Do something with the arugments and return a value of type web_sys::Element
        },
    )
    .into_js_value()
    .into()

如示例所示,my_gutter 的最终类型将是 js_sys::Function。虽然我没有太多将函数从 Rust 传递到 JavaScript 的经验,但我发现的一个问题是,在数字方面,我无法使用普通的 Rust 原始类型,而应使用 js_sys::BigInt

许可协议

本项目遵循 MIT 许可协议

依赖关系

~12–17MB
~307K SLoC