import type { JSX } from "keycloakify/tools/JSX"; import { useState, useEffect, useReducer } from "react"; import { kcSanitize } from "keycloakify/lib/kcSanitize"; import { clsx } from "keycloakify/tools/clsx"; import { assert } from "keycloakify/tools/assert"; import { getKcClsx, type KcClsx } from "keycloakify/login/lib/kcClsx"; import type { PageProps } from "keycloakify/login/pages/PageProps"; import type { KcContext } from "../KcContext"; import type { I18n } from "../i18n"; export default function LoginPassword(props: PageProps, I18n>) { const { kcContext, i18n, doUseDefaultCss, Template, classes } = props; const { kcClsx } = getKcClsx({ doUseDefaultCss, classes }); const { realm, url, messagesPerField } = kcContext; const { msg, msgStr } = i18n; const [isLoginButtonDisabled, setIsLoginButtonDisabled] = useState(false); return ( ); } function PasswordWrapper(props: { kcClsx: KcClsx; i18n: I18n; passwordInputId: string; children: JSX.Element }) { const { kcClsx, i18n, passwordInputId, children } = props; const { msgStr } = i18n; const [isPasswordRevealed, toggleIsPasswordRevealed] = useReducer((isPasswordRevealed: boolean) => !isPasswordRevealed, false); useEffect(() => { const passwordInputElement = document.getElementById(passwordInputId); assert(passwordInputElement instanceof HTMLInputElement); passwordInputElement.type = isPasswordRevealed ? "text" : "password"; }, [isPasswordRevealed]); return (
{children}
); }