Changelog

Historial de actualizaciones del design system, por sync desde el repo fuente.

  1. 23f38f6
    Nuevo
    Corrección

    Paletas independientes y diez categorías

    Las paletas fijas se separan de los roles configurables del theme y la escala categórica crece de siete a diez colores. Los componentes afectados usan tokens semánticos y los ejes de IndexBar reciben su tamaño tipográfico desde el token correspondiente.

  2. dca8e8a
    Nuevo
    Corrección
    Documentación

    Tokens categóricos, capas y gráficas adaptables

    El WDS incorpora colores categóricos y foregrounds para series de gráficas, lectura de tokens para canvas y tamaños tipográficos en ejes. Las iniciales de Avatar escalan con su tamaño; las superficies y portales usan la escala de capas compartida, conservando la profundidad histórica de SideCanvas.

  3. a665905
    Nuevo
    Corrección
    Documentación

    Avatares uniformes, tarjetas y filtros accesibles

    El portal adopta workbeat-ia-2.1@a665905 (anterior: bb72dd2): 5 archivos nuevos y 36 modificados del WDS, con skills y guardas de agentes sincronizadas.

    • Identidad: Avatar hereda una sola forma desde componentDefaults.avatar.shape (square por defecto), también en foto fallida y preview de recorte. Conserva fondos oklch y fallback primario. El laboratorio permite probar square/circle sin cambiar la forma del portal; los prompts usan la API real, sin AvatarImage/AvatarFallback.
    • Tarjetas y estados: MetricCard aporta acento primario al icono; las nuevas guías explican contexto y lectura clave–valor de SectionCard y mapeo canónico de StatusBadge. El registro enlaza las cuatro guías nuevas para personas y agentes.
    • Formularios e identidad tabular: showAvatar={false} evita iniciales de identificadores; ReadOnlyInfo.layout="compact" mantiene el par junto. Los campos asocian los errores a sus controles de forma accesible.
    • FullTable: el aviso de un filtro deshabilitado permanece visible. Limpiar todo/Restablecer filtros pertenece al pie del panel WDS, incluso cuando el host aporta advancedFilterEditor; no dupliques esa acción en el editor.
    • Layouts y mapas: CompactTable consulta y pagina el endpoint declarado y recupera Ver todos; las respuestas 204/205 se tratan como ausencia de datos. Los mapas recalculan su tamaño al mostrarse o cambiar su contenedor. El expediente aprovecha el ancho útil, también embebido.
    • Portal: API regenerada, ejemplo de integración con defaults globales, ejemplos de identidad, tarjetas, estados y paneles revisados, prompts actualizados y escenario de expediente sin límite artificial de ancho. La política de tokens cubre también el host y las apps aisladas.

    El sync prepara el snapshot del dueño del release; publicar este cambio en Git no publica un release de Lovable.

  4. bb72dd2
    Corrección

    persistQueryState repite la página guardada y CalendarLayout conserva su diálogo

    Correcciones sin cambios de API ni de configuración: los consumidores no tienen que ajustar nada.

    • FullTable · persistQueryState. La tabla avisa búsqueda y filtros al montar aunque lo guardado sea sólo la página, y también cuando initialFilterRules gana a los filtros guardados. En esos casos no repetía la página restaurada, así que un consumidor remoto que vuelve a la página 1 con cada aviso quedaba desfasado: la tabla mostraba la página restaurada con las filas de la 1. Ahora la repite siempre que la página guardada sea mayor a 1; el consumidor recibe un onPaginationChange adicional con esa página.
    • Guía de FullTable. La tabla de props de FullTableWithSideNav vuelve a mostrar def y navSearch; el párrafo de route-mode va debajo de ella.
    • WDS Layouts · CalendarLayout. El diálogo de detalle conserva su contenido durante la animación de cierre; al autorizar, muestra «Autorizada» sin el botón mientras se cierra.
  5. 5df64f9
    Nuevo
    Corrección
    Documentación

    FullTable para tablas remotas y CalendarLayout de equipo

    FullTable suma opt-ins para consumidores remotos y WDS Layouts soporta el layout raíz Calendar. Sin los campos nuevos, las tablas se ven y se comportan igual.

    • Consulta guardada. persistQueryState (requiere storageKey) recuerda búsqueda, filtros, página y tamaño en ft:{storageKey}:queryState y los restaura al volver. search.initialQuery e initialFilterRules ganan sobre lo guardado; un valor ilegible o de otra versión se descarta. Con consumidor remoto, la tabla repite la página restaurada después de avisar búsqueda y filtros.
    • Estado vacío decidido por el patrón. emptyState.kind: "auto" pinta «sin resultados» si hay búsqueda, filtros fuera del baseline o un segmento distinto del inicial; si no, el vacío declarado.
    • Filtros para APIs remotas. advancedFilterConnectors: "and" fija «y» entre reglas; hideQuickFilterColumnsInAdvanced saca del constructor las columnas que ya tienen quick filter. FilterRule.valueLabels conserva el texto visible de cada valor y SearchableTableLayout lo usa como description del filtro de Shell.
    • Quick filters dependientes. Limpiar un quick filter también vacía sus dependentKeys, en la misma emisión de onFiltersChange.
    • Botón de columnas. columnsLabel fija su texto en FullTable y HierarchyTable; para todo el host, componentDefaults.fullTable.columnsLabel y el nuevo componentDefaults.hierarchyTable.columnsLabel.
    • Franja de filtros. Sin chips, acción de limpiar ni segmentación en pestañas, la franja ya no deja un hueco entre el encabezado y la tabla (AB#85247).
    • FullTableWithSideNav route-mode. activeNavValue y onNavChange son opcionales cuando los items del rail llevan to.
    • EmployeeIdentityCell. subtitle reemplaza la sublínea (p. ej. número · NSS); un texto vacío la oculta.
    • CalendarLayout. Calendario de equipo de Vacaciones: personas por fila, vistas Semana/Mes, detalle y autorización de solicitudes pendientes por el transporte HTTP del host. Los transforms de un layout Calendar se normalizan como descriptores inertes; CalendarEmpleado sigue sin soporte.

    Migración: ninguna obligatoria. Quien tenga tests que fijen la franja de filtros vacía o el texto del botón de columnas debe revisarlos. Los hosts que montan layouts por runtime deben enrutar pattern: "Calendar" a CalendarLayout.

  6. a79e802
    Corrección
    Documentación

    CatalogGrid jerárquico con paginación y selección coherentes

    El CatalogGrid jerárquico usa la misma colección para renderizar, paginar y seleccionar. La guía y la referencia API del portal reflejan este contrato.

    • Paginación local por raíces. Cada página incluye las raíces indicadas por el tamaño de página y sus subárboles visibles, sin partirlos. El subtítulo distingue raíces de registros; subtitleFormatter recibe unit: "roots". La paginación remota conserva la página entregada por el servidor y remoteTotal.
    • Búsqueda y filtros con contexto. Las coincidencias conservan sus ancestros y éstos se expanden al cambiar la consulta. Los ancestros que no coinciden muestran la etiqueta «contexto» y no cuentan como resultados. Un padre ausente sigue marcado como «huérfano».
    • Selección de la página visible. «Seleccionar todo» excluye filas de contexto y descendientes colapsados; conserva la selección de otras páginas. Las filas de contexto pueden seleccionarse individualmente.
    • Carga diferida. La expansión inicial se aplica al llegar las primeras filas, aunque el catálogo estuviera vacío al montar.
    • API pública. Se agregan ancestorIdsOf, collectTreeContext, paginateTreeRows, togglePageSelection y el tipo TreePage. El drag & drop conserva sus restricciones: entre hermanos y sin búsqueda, filtros ni orden personalizado.

    Los catálogos planos conservan su paginación por filas. Los hosts que personalizan el subtítulo de un árbol deben interpretar unit para distinguir raíces de filas.

  7. b7488b3
    Nuevo
    Corrección
    Refactor
    Documentación

    componentDefaults, TonePill, correcciones por default y Cerbos v2

    Sync grande desde el 12 de octubre: consolida los cambios de paridad con CoreRH y Nómina, pasa a default las correcciones que antes eran opt-in y agrupa la configuración de componentes del host en una sola prop.

    Lo más relevante

    • componentDefaults en WDSProvider. Una sola prop con una llave por componente (datePicker, fullTable, operationFeedback) reemplaza las props y contextos sueltos. Cada componente la lee con useComponentDefaults("<llave>") y la prop de la instancia sigue ganando. Ver Defaults de componentes.
    • Toasts de error de operación: 8000 ms por default. Antes eran persistentes. Se cambia con componentDefaults.operationFeedback.errorToastDuration; Infinity los deja persistentes. Ver Mensajería de feedback.
    • Correcciones que pasan a default para todos los hosts:
      • DatePicker lee y emite YYYY-MM-DD en hora local (antes UTC mostraba el día anterior en México) y trae selectores de mes y año (monthYearSelect={false} vuelve a la navegación mes a mes). minDate/maxDate reemplazan dateOnlyMode, captionLayout, startMonth y endMonth.
      • FullTable no recorta la página mientras carga; SchemaForm valida el formato de los campos email; DataGrid oculta «Guardar borrador» sin onSaveDraft; los inputs del panel de catálogo llevan aria-label.
      • Se retiran los opt-ins que quedaron redundantes (CatalogSidePanelDefaults, fullTableDefaults.stickyHeader, retainPageWhileLoading, advancedDateRangePresentation, validateEmailFormat, hideUnavailableSaveDraft, entre otros). Siguen como opt-in quickFilterSelectionMode, showRemoteReloadSkeleton y los defaults de DatePicker.
    • TonePill (nuevo): pill de estado de negocio por tono semántico, con icono o punto. Reemplaza los mapas locales de clases de paleta.
    • KpiCard clicable: con onClick (y ariaLabel) se pinta como botón con foco visible, para drill-down. PageHeader suma chipPlain y titleAs; PageSubHeader acepta icon y titleAs.
    • Permission sets (Cerbos): el endpoint por default es /api/v2/cerbos/{host}/permission-sets/{set}, configurable con env.securityPathTemplate (VITE_SECURITY_PATH_TEMPLATE); un set puede evaluarse contra un servidor de seguridad propio (resolveSecurityHost), y VITE_PERMISSION_DISABLED=true omite los sets sin apagar OIDC. Ver Permission sets.
    • Mega menú y AppSidebar: los ítems sin destino válido se ocultan o deshabilitan (una ruta vacía ya no enlaza a la raíz del sitio; la página principal se pide con /), y Admin Apps se muestra a todo rol asignado salvo empleado/norole.
    • Mapas: el proveedor de tiles se elige con VITE_MAP_TILE_URL y VITE_MAP_TILE_MAX_ZOOM (OSM estándar como respaldo); LeafletMap ya no recentra al hacer clic y suma focusZoom.
    • Correcciones: el chevron de fila de FullTable abre la fila; CatalogGrid sólo emite búsqueda, filtros y página remotos cuando cambian (y regresa a la página 1); countsPending ya no muestra conteos locales; VerticalTimeline puede expandir detalles al montar (opt-in).
    • Docs del DS como fuente única: las skills wds-* dejan de empaquetar copias y remiten a src/design-system/docs. Guías nuevas en el sitio: Tokens · referencia rápida y Mensajería de feedback.

    Para hosts

    • Los genéricos de FieldDef, ColumnDef, ActionDef, TableDef y TableDataSource pasan de any a unknown: un validate o render que compara el valor sin estrecharlo deja de compilar.
    • osmStandardTileLayerOptions ya no se exporta; usa getOsmTileLayerConfig().
    • Un API de seguridad que siga en /api/cerbos/… declara VITE_SECURITY_PATH_TEMPLATE.

    Sync de workbeat-ia-2.1@b7488b3 (anterior: 67f7d9b).

  8. 67f7d9b
    Refactor
    Documentación

    DS portable · imports relativos y hosts con el DS adjunto en Lovable

    • Imports relativos dentro del DS. Los 644 imports internos @/design-system/... ahora son relativos. Cada import apunta al mismo módulo y la API pública no cambia. El DS funciona igual en src/design-system/ y adjunto como design system de Lovable en src/design-system/<slug>/design-system/. El código del host no cambia: sigue importando el DS por alias.
    • Hosts con el DS adjunto en Lovable. La copia adjunta llega sin el arranque de Tailwind: el src/styles.css del host declara @import "tailwindcss" source("./") y @plugin "@tailwindcss/typography" antes de importar el DS. Ver Integración en aplicaciones host §2.5 y el checklist de integración.
    • AGENTS.md del DS: la regla de sólo lectura aplica igual en la ruta del slug, y dentro del DS los imports son relativos.

    Sync de workbeat-ia-2.1@67f7d9b (anterior: a5349b3).

  9. a5349b3
    Nuevo

    FullTable · filtros de contexto con initialFilterRules

    • FullTableDef.initialFilterRules (opt-in): siembra un filtro de contexto, por ejemplo uno que llega por la URL (?movimiento=) o desde un enlace de dashboard, sin volverlo baseline. Al quitarlo, la recuperación ofrece Limpiar filtros, no Restablecer.
    • Se aplica al montar y al cambiar storageKey. Si su contenido cambia con la tabla montada, vuelve a sembrar los filtros; una identidad nueva con las mismas reglas no pisa lo que el usuario ajustó.
    • Con defaultFilterRules a la vez, initialFilterRules gana para la semilla y defaultFilterRules sigue siendo el destino de Restablecer. Si el contexto desaparece (undefined), la tabla vuelve al baseline.
    • Sin el prop, el comportamiento de las tablas existentes no cambia.

    Ejemplo en vivo: FullTable · Filtros de contexto vs por default.

  10. 0394a8a
  11. 04b5636
    Nuevo
    Corrección
    Refactor
    Documentación

    Tokens semánticos y themes por claim Theme

    • Capa de tokens semánticos y themes: precedencia default → theme → host con cascade layers (wds-default, wds-theme). El theme se resuelve por prop theme, claim Theme del usuario o default, y se aplica como data-wds-theme en <html> sin flash. Primer theme registrado: Soriana.
    • Componentes sin colores ni medidas hardcodeadas: todo consume tokens, así que cambian solos con el theme y con el modo oscuro.
    • KpiCard con valueClassName y tooltip; Progress con clases; SectionTableCard con headerControls.
    • FullTable con segmentación tipo select, ajustes de encabezado y fitContent.
    • PageHeader acepta cualquier icono con className; nuevos iconos en iconMap.
    • Correcciones: TabNav respeta disabled, SearchableCatalogSelect ya no filtra por el nombre de la opción elegida, OpenStreetMap en LeafletMap.
  12. 598f61a
    Nuevo

    Barrel público, contrato de dependencias y Open Sans empaquetada

    • Barrel público src/design-system/index.ts: toda la superficie pública (provider, contextos, UI, patrones, layout, hooks, utilidades) se importa desde un solo punto. El release de Lovable lo reexporta desde src/index.ts.
    • dependencies.json: contrato de dependencias externas del DS, generado por script.
    • WB Open Sans empaquetada en assets/branding/fonts/: el host ya no carga la fuente por su cuenta.
  13. 2bd4fe1
    Nuevo
    Corrección
    Refactor
    Documentación

    Línea base del WDS local: embed, ActionButton, IA por workflow y permission sets

    Primer sync registrado con manifest (.wds-sync/manifest.json): a partir de aquí cada archivo del DS tiene un hash y el changelog se genera por diferencia entre syncs. Es la línea base del snapshot local en este proyecto.

    Lo más relevante

    • SearchableTable sobre FullTable con Buscar, Filtrar y Columnas.
    • SideCanvas: contentPadding opt-in y tamaños xwide / xwide-capped (90vw, tope 1124px).
    • Modo embebido (embedMode): el bootstrap del iframe vive dentro del WDS y decide api/mock.
    • ActionButton declarativo con registro de handlers y conversaciones de IA por workflow (useStartAiWorkflowConversation).
    • Destinos y useWDSNavigate para navegar sin acoplarse al router del host.
    • Permission sets (Cerbos) montados dentro de WDSProvider, con target de seguridad propio para hosts con BFF.
    • Correcciones: header fijo de FullTable en scrollers con padding, bucle de feature toggles ante 5xx, OIDC propio como cliente público seguro.
  14. Nuevo
    Refactor
    Corrección
    Documentación

    Histórico previo al manifest de sync (julio–agosto 2026)

    Resumen de la evolución del DS en este repositorio antes de que existiera .wds-sync/manifest.json, reconstruido desde git log -- src/design-system.

    • Nace src/design-system (julio 2026): las carpetas /ui, /patterns y layout se mueven de src/components al DS, con sus docs en src/design-system/docs y assets de marca propios.
    • Patrones migrados al DS: CatalogGrid (con CatalogColumnsPopover y toolbar), CatalogExplorerSidebar, side panels, FieldLabelWithHelp, IndexBar, SideCanvasContext y use-mobile.
    • TreeNav extraído de OrgTreeNavigation como componente de navegación del DS; IconBtn nuevo.
    • EditableCard edita en side panel (inline sólo con alwaysEditing).
    • Colores semánticos en todos los componentes y theming de charts.
    • Autenticación: OIDC manejado por el WDS, WDSAuthAdapter y httpClient inyectable desde el host en WDSProvider.
    • MegaMenuModal y AppSidebar con service objects, endpoint PLA, mock del host y correcciones de cierre al navegar.
    • SideCanvas: tamaño full, altura mínima y overscroll-contain.
    • Patrón de mensajería de feedback documentado.
    • Module Federation (luego reemplazado por el snapshot local sincronizado).