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:
Sergio
2026-06-18 14:40:00 +00:00
parent e74800d9da
commit ccab39f140
202 changed files with 44034 additions and 1811 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ edition.workspace = true
license.workspace = true
authors.workspace = true
publish.workspace = true
description = "llimphi-icons — set mínimo de iconos vectoriales (BezPath en grid 24×24) renderizables vía paint_with. Stroke-based, escalables. Cubre las acciones canónicas de cualquier UI gioser."
description = "llimphi-icons — set mínimo de iconos vectoriales (BezPath en grid 24×24) renderizables vía paint_with. Stroke-based, escalables. Cubre las acciones canónicas de cualquier UI tawasuyu."
[dependencies]
llimphi-ui = { workspace = true }
+1 -1
View File
@@ -1,4 +1,4 @@
//! Galería de los iconos de marca de todas las apps de gioser.
//! Galería de los iconos de marca de todas las apps de tawasuyu.
//!
//! Pinta los 29 [`AppIcon`] en una grilla, cada uno en su color de marca
//! con su nombre debajo. Sirve para eyeballear de un vistazo que el set
+2 -2
View File
@@ -1,4 +1,4 @@
//! `app_icons` — iconos de marca, uno por dominio/app de gioser.
//! `app_icons` — iconos de marca, uno por dominio/app de tawasuyu.
//!
//! A diferencia del set canónico de [`crate::Icon`] (glifos genéricos de
//! acción: file, save, search…), acá vive **un glifo distintivo por app**.
@@ -31,7 +31,7 @@ use llimphi_ui::llimphi_raster::kurbo::{Affine, BezPath, Cap, Join, Stroke};
use llimphi_ui::llimphi_raster::peniko::Color;
use llimphi_ui::View;
/// Una app de gioser con icono de marca. El identificador (`name`) coincide
/// Una app de tawasuyu con icono de marca. El identificador (`name`) coincide
/// con el `id` del `AppEntry` en `app-bus`.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum AppIcon {
+75 -2
View File
@@ -1,4 +1,4 @@
//! `llimphi-icons` — set canónico de iconos vectoriales para apps gioser.
//! `llimphi-icons` — set canónico de iconos vectoriales para apps tawasuyu.
//!
//! Cada icono es una función pura que devuelve un `BezPath` definido en
//! un grid lógico de **24×24 unidades**. El renderer escala al rect que
@@ -16,7 +16,7 @@
//! no "marca registrada". Cada uno debe ser reconocible al primer
//! vistazo aún en 12×12.
//! - **Set acotado**: suficientes para cubrir el grueso de acciones y
//! tipos que aparecen en cualquier UI gioser. Si una app necesita uno
//! tipos que aparecen en cualquier UI tawasuyu. Si una app necesita uno
//! más, lo agrega aquí (no en su propio crate) — la consistencia
//! visual importa más que el aislamiento.
//!
@@ -115,6 +115,15 @@ pub enum Icon {
FileText,
Link,
Font,
// --- Vistas / layout (toolbars de file manager) ---
/// Grilla 2×2 (vista iconos / galería).
Grid,
/// Tres filas horizontales (vista lista).
Rows,
/// Tabla: marco + fila de encabezado + columnas (vista detalle).
Table,
/// Dos paneles verticales lado a lado (modo dual).
Columns,
}
impl Icon {
@@ -169,6 +178,10 @@ impl Icon {
Icon::FileText => "file_text",
Icon::Link => "link",
Icon::Font => "font",
Icon::Grid => "grid",
Icon::Rows => "rows",
Icon::Table => "table",
Icon::Columns => "columns",
}
}
@@ -223,6 +236,10 @@ impl Icon {
Icon::FileText => path_file_text(),
Icon::Link => path_link(),
Icon::Font => path_font(),
Icon::Grid => path_grid(),
Icon::Rows => path_rows(),
Icon::Table => path_table(),
Icon::Columns => path_columns(),
}
}
}
@@ -952,6 +969,62 @@ fn path_font() -> BezPath {
p
}
fn path_grid() -> BezPath {
let mut p = BezPath::new();
// Cuatro celdas 2x2.
for (x, y) in [(4.0, 4.0), (13.0, 4.0), (4.0, 13.0), (13.0, 13.0)] {
p.move_to((x, y));
p.line_to((x + 7.0, y));
p.line_to((x + 7.0, y + 7.0));
p.line_to((x, y + 7.0));
p.close_path();
}
p
}
fn path_rows() -> BezPath {
let mut p = BezPath::new();
// Tres filas (vista lista).
for y in [6.0, 12.0, 18.0] {
p.move_to((4.0, y));
p.line_to((20.0, y));
}
p
}
fn path_table() -> BezPath {
let mut p = BezPath::new();
// Marco.
p.move_to((4.0, 5.0));
p.line_to((20.0, 5.0));
p.line_to((20.0, 19.0));
p.line_to((4.0, 19.0));
p.close_path();
// Fila de encabezado.
p.move_to((4.0, 9.5));
p.line_to((20.0, 9.5));
// Separador de columnas (debajo del encabezado).
p.move_to((11.0, 9.5));
p.line_to((11.0, 19.0));
p
}
fn path_columns() -> BezPath {
let mut p = BezPath::new();
// Dos paneles verticales lado a lado (modo dual).
p.move_to((4.0, 4.0));
p.line_to((11.0, 4.0));
p.line_to((11.0, 20.0));
p.line_to((4.0, 20.0));
p.close_path();
p.move_to((13.0, 4.0));
p.line_to((20.0, 4.0));
p.line_to((20.0, 20.0));
p.line_to((13.0, 20.0));
p.close_path();
p
}
#[cfg(test)]
mod tests {
use super::*;