Estamos validando tu inicio de sesión. En unos segundos vuelves al producto.
/auth/callbackVolver al productoPatrón canónico de retorno oidc para cuenta, admin, usaia, firmas y documentos.
Primero el componente, después la variación de marca y finalmente su uso dentro de una página.
Estamos validando tu inicio de sesión. En unos segundos vuelves al producto.
/auth/callbackVolver al productoLa solicitud de acceso venció antes de volver. Inicia sesión otra vez.
/auth/callbackReintentar accesoEstamos validando tu inicio de sesión. En unos segundos vuelves al producto.
/auth/callbackVolver al producto<section class="ui-sample ui-auth-status ui-auth-status--progress" data-auth-source="cis-auth-authentik" data-auth-callback-status="true" role="status"><span class="ui-auth-status__symbol" aria-hidden="true">↻</span><div><strong>Completando el acceso</strong><p>Estamos validando tu inicio de sesión. En unos segundos vuelves al producto.</p><code>/auth/callback</code><a class="btn btn--quiet" href="#reintentar">Volver al producto</a></div></section>Cada cambio visible declara su autoridad; lo que permanece canónico no se vuelve a inventar en el producto.
Estamos validando tu inicio de sesión. En unos segundos vuelves al producto.
/auth/callbackVolver al productoLa solicitud de acceso venció antes de volver. Inicia sesión otra vez.
/auth/callbackReintentar accesoCompara la propuesta con cortes reales del repositorio. La ausencia de una muestra se declara y nunca se reconstruye de memoria.
Preparando comparación histórica…
La comparación convierte una regla abstracta en una diferencia visible y verificable.
Estamos validando tu inicio de sesión. En unos segundos vuelves al producto.
/auth/callbackVolver al productoLa misma anatomía debe conservar lectura, foco y acciones sin cortar contenido ni crear scroll horizontal en la página.
Estamos validando tu inicio de sesión. En unos segundos vuelves al producto.
/auth/callbackVolver al productoLa solicitud de acceso venció antes de volver. Inicia sesión otra vez.
/auth/callbackReintentar acceso| Dimensión | Contrato |
|---|---|
| Propietario canónico | Sistema de diseño CIS y cis-auth · core/core-style |
| Consumidores | Cuenta, Admin, usaia, Firmas y Documentos |
| Dependencias | HTML nativo, validación de servidor |
| Estado | candidato |
Patrón propuesto. 0 implementaciones observadas en 0 repositorios.
La observación demuestra uso existente; la aceptación canónica sigue dependiendo de esta ficha y de su propietario.
| Dato | Resultado |
|---|---|
| Clasificación | Patrón propuesto |
| Implementaciones | 0 implementaciones observadas |
| Repositorios | Ningún repositorio observado |
| Snapshot | kit/componentes/componentes-observados.json |
El inventario conserva repositorio, archivo fuente y criterio de asociación. Observar una implementación no la convierte automáticamente en canónica.
| Estado requerido |
|---|
| vacío |
| completo |
| inválido |
| disabled |
Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
<section class="ui-sample ui-auth-status ui-auth-status--progress" data-auth-source="cis-auth-authentik" data-auth-callback-status="true" role="status"><span class="ui-auth-status__symbol" aria-hidden="true">↻</span><div><strong>Completando el acceso</strong><p>Estamos validando tu inicio de sesión. En unos segundos vuelves al producto.</p><code>/auth/callback</code><a class="btn btn--quiet" href="#reintentar">Volver al producto</a></div></section>Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
<section class="ui-sample ui-auth-status ui-auth-status--progress border border-slate-300 bg-white p-4 text-slate-950 grid gap-3" data-auth-source="cis-auth-authentik" data-auth-callback-status="true" role="status"><span class="ui-auth-status__symbol" aria-hidden="true">↻</span><div><strong>Completando el acceso</strong><p>Estamos validando tu inicio de sesión. En unos segundos vuelves al producto.</p><code>/auth/callback</code><a class="btn btn--quiet underline underline-offset-4" href="#reintentar">Volver al producto</a></div></section>Copia el bloque completo; después cambia contenido y destinos, no su anatomía.
export type AuthCallbackStatusTone = "progress" | "success" | "warning" | "error";
/** Variante de botón del kit para el enlace. */
export type AuthCallbackStatusLinkVariant = "primary" | "secondary" | "quiet";
export interface AuthCallbackStatusProps {
/** Tono del aviso: `progress` mientras se valida la respuesta, `error` si falló. Define el símbolo. */
tone?: AuthCallbackStatusTone;
title?: string;
/** Qué se está haciendo o por qué falló. */
description?: string;
/** Dato técnico en monoespaciado; por defecto, la ruta de retorno de OIDC. */
detail?: string;
/** Texto del enlace: volver al producto o reintentar el acceso. */
linkLabel?: string;
/** Destino del enlace. */
href?: string;
/** Aspecto del enlace: por defecto `quiet` mientras se valida y `primary` en los demás tonos, donde es la acción que sigue. */
linkVariant?: AuthCallbackStatusLinkVariant;
className?: string;
}
const AUTH_CALLBACK_STATUS_SYMBOLS: Record<AuthCallbackStatusTone, string> = {
progress: "↻",
success: "✓",
warning: "i",
error: "!",
};
/**
* Estado del retorno de OIDC desde cis-auth, para la página de callback mientras se valida el acceso o cuando falla.
*
* Usa `role="status"`. El símbolo sigue al tono; el título dice el estado en texto. El enlace es un botón del kit:
* discreto mientras se valida y principal cuando hay que reintentar o continuar.
*
* @example <AuthCallbackStatus />
* @example <AuthCallbackStatus tone="error" title="No pudimos completar el acceso" description="La solicitud de acceso venció antes de volver. Inicia sesión otra vez." linkLabel="Reintentar acceso" href="/auth/login" />
*/
export function AuthCallbackStatus({
tone = "progress",
title = "Completando el acceso",
description = "Estamos validando tu inicio de sesión. En unos segundos vuelves al producto.",
detail = "/auth/callback",
linkLabel = "Volver al producto",
href = "#reintentar",
linkVariant,
className,
}: AuthCallbackStatusProps) {
const variante = linkVariant ?? (tone === "progress" ? "quiet" : "primary");
return (
<section
className={["ui-auth-status", `ui-auth-status--${tone}`, className].filter(Boolean).join(" ")}
data-auth-source="cis-auth-authentik"
data-auth-callback-status
role="status"
>
<span className="ui-auth-status__symbol" aria-hidden="true">{AUTH_CALLBACK_STATUS_SYMBOLS[tone]}</span>
<div>
<strong>{title}</strong>
{description ? <p>{description}</p> : null}
{detail ? <code>{detail}</code> : null}
{linkLabel ? <a className={`btn btn--${variante}`} href={href}>{linkLabel}</a> : null}
</div>
</section>
);
}