AstrolUI AstrolUI
Amarillo Naranja Rojo Verde Azul Morado Color propio
Modo claro
Novedades

Esta versión de AstrolUI para .NET 10 es una revisión completa de Astrol.Component.Basic y sus dependencias, centrada en rendimiento, peso, experiencia de usuario y accesibilidad. Los nombres de los iconos astrol-* no cambian. Algunos cambios rompen la API anterior: al final de esta página tiene los pasos para migrar sus proyectos.

1. Más ligero y más rápido

  • CSS global: de 220 KB en 4 archivos encadenados (con bootstrap) a 68 KB en un solo archivo (15 KB comprimido).
  • interact.js (126 KB) ya no se carga: arrastrar y redimensionar es nativo y se descarga solo si se usa.
  • Iconos: un núcleo de 24 KB con los iconos de los componentes y los más comunes; el resto (145 KB) solo se descarga si la página usa alguno.
  • JavaScript bajo demanda: cada componente (modal, combo, editor…) carga su módulo solo cuando aparece.
  • Paquete NuGet de Basic: de 1.921 KB a 347 KB, ya con los componentes nuevos (pestañas, checkbox, radio, dropdown, tooltip, alertas y etiquetas). Detalle de cada paquete en Instalación.
  • Grid: ya no copia los datos ni usa un componente por celda. Con 2.000 filas, volver a pintar la página pasa de 16 ms a 0,9 ms, ordenar de 476 ms a 47 ms y filtrar de 379 ms a 36 ms.

2. Nuevo

  • IAstrolToast: notificaciones desde código (Toast.Success("Guardado")), renderizadas en Blazor, que se pausan al pasar el ratón y siguen el tema. Ver Notification.
  • IAstrolModal: await Modal.ConfirmAsync(...) y await Modal.ShowAsync<Componente>(...) con resultado, sin @ref. Ver Confirm.
  • Modo automático: el tema sigue al modo claro u oscuro del sistema operativo y cambia en vivo; las notificaciones y los controles del navegador también siguen el tema. Ver Layout menu.
  • Grid: Field tipado y rutas anidadas, Format, Virtualize y el ancho de columna se conserva al paginar. Ver Grid.
  • ComboBox: Display="p => p.Name" y @bind-Value; se abre hacia arriba si no hay espacio y funciona dentro de grids y modales. Ver ComboBox.
  • Modal como <dialog> nativo: siempre por encima, Esc y foco gestionados por el navegador.
  • Textos en el idioma de la aplicación (español o inglés) y AstrolText.Resolver para traducir a otros idiomas.
  • GetColorContrast(): elige el color de texto con mejor contraste sobre un fondo.
// Program.cs
builder.Services.AddAstrolBasic();
// Page or component
@inject IAstrolToast Toast
@inject IAstrolModal Modal
if (await Modal.ConfirmAsync("Are you sure?", "The item will be deleted."))
{
 await Delete(item);
 Toast.Success("Deleted");
}
var result = await Modal.ShowAsync<EditUser>("Edit", new Dictionary<string, object?> { ["Id"] = 5 });
if (!result.Cancelled) { var user = result.GetData<User>(); }

3. Accesibilidad y experiencia de usuario

  • Todos los controles se pueden usar con teclado: botones reales en modales, menú, paginación, cabeceras ordenables y filtros; el menú usa enlaces reales (Ctrl+clic abre otra pestaña).
  • Foco visible con el color del tema al navegar con Tab.
  • Etiquetas para lectores de pantalla (aria-label, aria-sort, aria-expanded, roles de tabla, alertas).
  • Respeta reducir movimiento del sistema operativo.
  • Seguridad: notificaciones y nombres de menú en texto plano por defecto (sin inyección de HTML).

4. Cómo migrar un proyecto

  1. Program.cs: cambie services.AddScoped<AstrolJSInterop>() por services.AddAstrolBasic() (using Astrol.Component.Basic;).
  2. index.html / _Host.cshtml:
    • Quite _content/Astrol.Component.Basic/js/interact.min.js (si usa Board, cámbielo por _content/Astrol.Component.Board/js/interact.min.js).
    • Las rutas de RichText pasan de Astrol.Component.Basic a Astrol.Component.RichText.
    • Si su aplicación usa clases de bootstrap, enlace bootstrap usted mismo.
    • Quite los enlaces sueltos a fontello.min.css y animation.min.css: ya van dentro de astrol-basic.min.css.
  3. Notificaciones con HTML: ahora son texto plano. Cambie <br /> por \n o use AllowHtml = true con contenido de confianza. Igual con MenuItem.Name (NameIsHtml = true).
  4. ConvertByteToMB() ahora devuelve MB (antes KB); para KB use ConvertBytesToKB().
  5. Grid: si usaba <Columns Context="x">, mueva Context a cada <Column>; el parámetro Load desaparece.
  6. Temas sin AstrolLayoutMenu: añada data-aui-color y data-aui-mode donde ponía la clase (p. ej. green-dark-mode).
  7. CSS propio sobre elementos internos (.head-astrol-modal i, .page-item a, #_pageInput…): ahora son botones con clase; revise los selectores.
  8. Opcional: pase de jsI.Notification(...) a IAstrolToast y de <AstrolConfirm @ref> a IAstrolModal.ConfirmAsync.

La guía completa, con cada cambio, cómo detectarlo (expresiones regulares) y ejemplos antes/después, está en el repositorio en docs/refactor/MIGRATION.md; está escrita para que también la pueda aplicar una IA sobre su proyecto.

// ---- before ----
services.AddScoped<AstrolJSInterop>();
await jsI.Notification("Saved <br/> successfully".NotificationSuccess());
var ok = await _conf.Confirmation("Are you sure?", "Message"); // <AstrolConfirm @ref="_conf" />
// ---- now ----
services.AddAstrolBasic();
Toast.Success("Saved\nsuccessfully");
var ok = await Modal.ConfirmAsync("Are you sure?", "Message");
<!-- before -->
<script src="_content/Astrol.Component.Basic/js/interact.min.js"></script>
<script src="_content/Astrol.Component.Basic/js/astrol-rich-text.min.js"></script>
<!-- now: interact is no longer needed (except with Board); RichText in its own package -->
<script src="_content/Astrol.Component.RichText/js/astrol-rich-text.min.js"></script>
Markdown para IA © 2026 AstrolUI v10.0.13