refresh: stack al día (vello 0.7 / wgpu 27 / parley 0.6) + motor 3D voxel
Re-sincroniza las fuentes desde el monorepo (estaba en vello 0.5/wgpu 24 y con la estructura vieja de eventloop) y suma el 3D: - bump del workspace a vello 0.7 / wgpu 27 / parley 0.6, + accesskit 0.24 / accesskit_winit 0.33 / vello_hybrid 0.0.9. - nuevos crates: llimphi-3d (voxels ray-march + mallas en un depth compartido, montable dentro de un View 2D vía set_viewport+scissor) y llimphi-voxel (world-gen, personajes, director de escenas) + shared/foreign-vox (puente .vox). - README: sección "Not just 2D — a 3D voxel engine" + GIF (docs/llimphi_voxel.gif). - excluido modules/allichay (arrastra deps fuera del alcance del front-door). - cargo check --workspace: verde. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
[package]
|
||||
name = "llimphi-widget-wrap"
|
||||
version.workspace = true
|
||||
edition.workspace = true
|
||||
license.workspace = true
|
||||
authors.workspace = true
|
||||
publish.workspace = true
|
||||
description = "llimphi-widget-wrap — contenedor flex que envuelve a la siguiente línea (FlexWrap::Wrap) con gap horizontal+vertical. Para chips, tags, galerías fluidas, toolbars que respiran."
|
||||
|
||||
[dependencies]
|
||||
llimphi-ui = { workspace = true }
|
||||
@@ -0,0 +1,59 @@
|
||||
//! `llimphi-widget-wrap` — contenedor con `flex-wrap: wrap` y gap.
|
||||
//!
|
||||
//! Lo que en Flutter es `Wrap` y en Compose `FlowRow`: items que fluyen
|
||||
//! horizontalmente y saltan a la siguiente línea cuando se acaba el
|
||||
//! ancho. Usalo para chips, tags, galerías fluidas, toolbars que
|
||||
//! respiran. taffy ya soporta `flex-wrap`; este crate es el azúcar
|
||||
//! mínima para no repetir el `Style` boilerplate.
|
||||
|
||||
#![forbid(unsafe_code)]
|
||||
|
||||
use llimphi_ui::llimphi_layout::taffy::{
|
||||
prelude::{length, percent, FlexDirection, FlexWrap, Size, Style},
|
||||
AlignItems,
|
||||
};
|
||||
use llimphi_ui::View;
|
||||
|
||||
/// Eje principal del wrap.
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
pub enum WrapAxis {
|
||||
Row,
|
||||
Column,
|
||||
}
|
||||
|
||||
/// Wrap container.
|
||||
///
|
||||
/// - `axis` decide eje principal (row = horizontal, column = vertical).
|
||||
/// - `h_gap` es el gap **entre items en la misma línea**.
|
||||
/// - `v_gap` es el gap **entre líneas**.
|
||||
pub fn wrap_view<Msg: Clone + 'static>(
|
||||
children: Vec<View<Msg>>,
|
||||
axis: WrapAxis,
|
||||
h_gap: f32,
|
||||
v_gap: f32,
|
||||
) -> View<Msg> {
|
||||
let dir = match axis {
|
||||
WrapAxis::Row => FlexDirection::Row,
|
||||
WrapAxis::Column => FlexDirection::Column,
|
||||
};
|
||||
View::new(Style {
|
||||
flex_direction: dir,
|
||||
flex_wrap: FlexWrap::Wrap,
|
||||
size: Size {
|
||||
width: percent(1.0_f32),
|
||||
height: llimphi_ui::llimphi_layout::taffy::prelude::Dimension::auto(),
|
||||
},
|
||||
gap: Size {
|
||||
width: length(h_gap),
|
||||
height: length(v_gap),
|
||||
},
|
||||
align_items: Some(AlignItems::FlexStart),
|
||||
..Default::default()
|
||||
})
|
||||
.children(children)
|
||||
}
|
||||
|
||||
/// Atajo: row de chips con gap parejo 6px.
|
||||
pub fn chip_row<Msg: Clone + 'static>(children: Vec<View<Msg>>) -> View<Msg> {
|
||||
wrap_view(children, WrapAxis::Row, 6.0, 6.0)
|
||||
}
|
||||
Reference in New Issue
Block a user