@alfadocs/ui-kit-debug 1.112.2 → 1.113.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/{calendar-appointment-editor-dialog-FvdoKZ54.js → calendar-appointment-editor-dialog-CaZm5wGR.js} +2 -2
- package/dist/_chunks/{calendar-appointment-editor-dialog-FvdoKZ54.js.map → calendar-appointment-editor-dialog-CaZm5wGR.js.map} +1 -1
- package/dist/_chunks/email-input-DxwbREpx.js +156 -0
- package/dist/_chunks/email-input-DxwbREpx.js.map +1 -0
- package/dist/_chunks/{forgot-password-form-vfCO2-Tt.js → forgot-password-form-YQVzSskq.js} +8 -7
- package/dist/_chunks/{forgot-password-form-vfCO2-Tt.js.map → forgot-password-form-YQVzSskq.js.map} +1 -1
- package/dist/_chunks/isEmail-BfVspSvV.js +248 -0
- package/dist/_chunks/isEmail-BfVspSvV.js.map +1 -0
- package/dist/_chunks/{login-dev-card-Cz1Clugq.js → login-dev-card-B6-zCFq3.js} +47 -46
- package/dist/_chunks/{login-dev-card-Cz1Clugq.js.map → login-dev-card-B6-zCFq3.js.map} +1 -1
- package/dist/_chunks/{patient-details-BwkDIm4D.js → patient-details-RsT3SaYh.js} +2 -2
- package/dist/_chunks/{patient-details-BwkDIm4D.js.map → patient-details-RsT3SaYh.js.map} +1 -1
- package/dist/_chunks/{patient-field-row-CBba7w9V.js → patient-field-row-D9rb-QJH.js} +2 -2
- package/dist/_chunks/{patient-field-row-CBba7w9V.js.map → patient-field-row-D9rb-QJH.js.map} +1 -1
- package/dist/_chunks/{patient-summary-card-DtYTo9w_.js → patient-summary-card-BjZErlbt.js} +2 -2
- package/dist/_chunks/{patient-summary-card-DtYTo9w_.js.map → patient-summary-card-BjZErlbt.js.map} +1 -1
- package/dist/_chunks/{practice-results-BOpaPaav.js → practice-results-BByRCIuR.js} +620 -566
- package/dist/_chunks/practice-results-BByRCIuR.js.map +1 -0
- package/dist/_chunks/{registration-form-DEyUFysm.js → registration-form-Cq5_OSIL.js} +7 -6
- package/dist/_chunks/{registration-form-DEyUFysm.js.map → registration-form-Cq5_OSIL.js.map} +1 -1
- package/dist/_chunks/{reserved.agent-W_Zgj564.js → reserved.agent-BMkapgom.js} +2 -2
- package/dist/_chunks/{reserved.agent-W_Zgj564.js.map → reserved.agent-BMkapgom.js.map} +1 -1
- package/dist/_chunks/{reset-password-form-B0acanDD.js → reset-password-form-BVsL2fOJ.js} +2 -2
- package/dist/_chunks/{reset-password-form-B0acanDD.js.map → reset-password-form-BVsL2fOJ.js.map} +1 -1
- package/dist/_chunks/{send-registration-link-form-Nn0jf65G.js → send-registration-link-form-OgPomrZN.js} +8 -7
- package/dist/_chunks/{send-registration-link-form-Nn0jf65G.js.map → send-registration-link-form-OgPomrZN.js.map} +1 -1
- package/dist/_chunks/{use-appointment-details-read-DYyCYI9f.js → use-appointment-details-read-DvK7Looa.js} +2 -2
- package/dist/_chunks/{use-appointment-details-read-DYyCYI9f.js.map → use-appointment-details-read-DvK7Looa.js.map} +1 -1
- package/dist/_chunks/verify-identity-types-C85EXNzy.js +707 -0
- package/dist/_chunks/verify-identity-types-C85EXNzy.js.map +1 -0
- package/dist/agent-catalog.json +106 -2
- package/dist/agent-i18n/en.json +11 -0
- package/dist/components/appointment-details-panel/index.js +1 -1
- package/dist/components/booking/index.js +1 -1
- package/dist/components/email-input/index.js +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/patient-details/index.js +1 -1
- package/dist/components/patient-summary-card/index.js +1 -1
- package/dist/components/practice-results/index.js +1 -1
- package/dist/components/practice-results/practice-results.d.ts +28 -0
- package/dist/components/practice-results/practice-results.d.ts.map +1 -1
- package/dist/core.css +1 -1
- package/dist/i18n/locales/ar.d.ts +67 -0
- package/dist/i18n/locales/ar.d.ts.map +1 -1
- package/dist/i18n/locales/ar.js +68 -1
- package/dist/i18n/locales/ar.js.map +1 -1
- package/dist/i18n/locales/de.d.ts +67 -0
- package/dist/i18n/locales/de.d.ts.map +1 -1
- package/dist/i18n/locales/de.js +68 -1
- package/dist/i18n/locales/de.js.map +1 -1
- package/dist/i18n/locales/el.d.ts +67 -0
- package/dist/i18n/locales/el.d.ts.map +1 -1
- package/dist/i18n/locales/el.js +68 -1
- package/dist/i18n/locales/el.js.map +1 -1
- package/dist/i18n/locales/en.d.ts +67 -0
- package/dist/i18n/locales/en.d.ts.map +1 -1
- package/dist/i18n/locales/en.js +67 -0
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +67 -0
- package/dist/i18n/locales/es.d.ts.map +1 -1
- package/dist/i18n/locales/es.js +68 -1
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +67 -0
- package/dist/i18n/locales/fr.d.ts.map +1 -1
- package/dist/i18n/locales/fr.js +68 -1
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hi.d.ts +67 -0
- package/dist/i18n/locales/hi.d.ts.map +1 -1
- package/dist/i18n/locales/hi.js +68 -1
- package/dist/i18n/locales/hi.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +67 -0
- package/dist/i18n/locales/it.d.ts.map +1 -1
- package/dist/i18n/locales/it.js +68 -1
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/ja.d.ts +67 -0
- package/dist/i18n/locales/ja.d.ts.map +1 -1
- package/dist/i18n/locales/ja.js +68 -1
- package/dist/i18n/locales/ja.js.map +1 -1
- package/dist/i18n/locales/nl.d.ts +67 -0
- package/dist/i18n/locales/nl.d.ts.map +1 -1
- package/dist/i18n/locales/nl.js +68 -1
- package/dist/i18n/locales/nl.js.map +1 -1
- package/dist/i18n/locales/pl.d.ts +67 -0
- package/dist/i18n/locales/pl.d.ts.map +1 -1
- package/dist/i18n/locales/pl.js +68 -1
- package/dist/i18n/locales/pl.js.map +1 -1
- package/dist/i18n/locales/pt.d.ts +67 -0
- package/dist/i18n/locales/pt.d.ts.map +1 -1
- package/dist/i18n/locales/pt.js +68 -1
- package/dist/i18n/locales/pt.js.map +1 -1
- package/dist/i18n/locales/ro.d.ts +67 -0
- package/dist/i18n/locales/ro.d.ts.map +1 -1
- package/dist/i18n/locales/ro.js +68 -1
- package/dist/i18n/locales/ro.js.map +1 -1
- package/dist/i18n/locales/ru.d.ts +67 -0
- package/dist/i18n/locales/ru.d.ts.map +1 -1
- package/dist/i18n/locales/ru.js +68 -1
- package/dist/i18n/locales/ru.js.map +1 -1
- package/dist/i18n/locales/sq.d.ts +67 -0
- package/dist/i18n/locales/sq.d.ts.map +1 -1
- package/dist/i18n/locales/sq.js +68 -1
- package/dist/i18n/locales/sq.js.map +1 -1
- package/dist/i18n/locales/sv.d.ts +67 -0
- package/dist/i18n/locales/sv.d.ts.map +1 -1
- package/dist/i18n/locales/sv.js +68 -1
- package/dist/i18n/locales/sv.js.map +1 -1
- package/dist/i18n/locales/tr.d.ts +67 -0
- package/dist/i18n/locales/tr.d.ts.map +1 -1
- package/dist/i18n/locales/tr.js +68 -1
- package/dist/i18n/locales/tr.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +67 -0
- package/dist/i18n/locales/zh.d.ts.map +1 -1
- package/dist/i18n/locales/zh.js +68 -1
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/index.js +345 -340
- package/dist/index.js.map +1 -1
- package/dist/locales/ar.json +68 -1
- package/dist/locales/de.json +68 -1
- package/dist/locales/el.json +68 -1
- package/dist/locales/en.json +67 -0
- package/dist/locales/es.json +68 -1
- package/dist/locales/fr.json +68 -1
- package/dist/locales/hi.json +68 -1
- package/dist/locales/it.json +68 -1
- package/dist/locales/ja.json +68 -1
- package/dist/locales/nl.json +68 -1
- package/dist/locales/pl.json +68 -1
- package/dist/locales/pt.json +68 -1
- package/dist/locales/ro.json +68 -1
- package/dist/locales/ru.json +68 -1
- package/dist/locales/sq.json +68 -1
- package/dist/locales/sv.json +68 -1
- package/dist/locales/tr.json +68 -1
- package/dist/locales/zh.json +68 -1
- package/dist/patterns/calendar/index.js +1 -1
- package/dist/patterns/forgot-password-form/index.js +1 -1
- package/dist/patterns/login-form/index.js +1 -1
- package/dist/patterns/registration-form/index.js +1 -1
- package/dist/patterns/reset-password-form/index.js +1 -1
- package/dist/patterns/send-registration-link-form/index.js +1 -1
- package/dist/patterns/verify-identity/change-email-dialog.d.ts +26 -0
- package/dist/patterns/verify-identity/change-email-dialog.d.ts.map +1 -0
- package/dist/patterns/verify-identity/index.d.ts +7 -0
- package/dist/patterns/verify-identity/index.d.ts.map +1 -0
- package/dist/patterns/verify-identity/index.js +8 -0
- package/dist/patterns/verify-identity/index.js.map +1 -0
- package/dist/patterns/verify-identity/use-countdown.d.ts +12 -0
- package/dist/patterns/verify-identity/use-countdown.d.ts.map +1 -0
- package/dist/patterns/verify-identity/verify-identity-steps.d.ts +21 -0
- package/dist/patterns/verify-identity/verify-identity-steps.d.ts.map +1 -0
- package/dist/patterns/verify-identity/verify-identity-types.d.ts +47 -0
- package/dist/patterns/verify-identity/verify-identity-types.d.ts.map +1 -0
- package/dist/patterns/verify-identity/verify-identity.d.ts +54 -0
- package/dist/patterns/verify-identity/verify-identity.d.ts.map +1 -0
- package/dist/tokens.css +1 -1
- package/package.json +5 -1
- package/dist/_chunks/email-input-BEO3vonE.js +0 -399
- package/dist/_chunks/email-input-BEO3vonE.js.map +0 -1
- package/dist/_chunks/practice-results-BOpaPaav.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-identity-types-C85EXNzy.js","sources":["../../src/patterns/verify-identity/use-countdown.ts","../../src/patterns/verify-identity/verify-identity-steps.tsx","../../src/patterns/verify-identity/verify-identity.tsx","../../src/patterns/verify-identity/change-email-dialog.tsx","../../src/patterns/verify-identity/verify-identity-types.ts"],"sourcesContent":["/* A whole-second countdown that follows the clock, not the ticks, so a */\n/* throttled background tab does not run slow. */\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface Countdown {\n /** Whole seconds left. 0 when idle or finished. */\n remaining: number;\n /** True once a countdown has run to zero since the last `start`. */\n finished: boolean;\n start: (seconds: number) => void;\n stop: () => void;\n}\n\nexport function useCountdown(): Countdown {\n const [deadline, setDeadline] = useState<number | null>(null);\n const [remaining, setRemaining] = useState(0);\n const [finished, setFinished] = useState(false);\n const timer = useRef<number | undefined>(undefined);\n\n useEffect(() => {\n if (deadline === null) return;\n const tick = () => {\n const left = Math.max(0, Math.ceil((deadline - Date.now()) / 1000));\n setRemaining(left);\n if (left === 0) {\n setDeadline(null);\n setFinished(true);\n }\n };\n tick();\n timer.current = window.setInterval(tick, 1000);\n return () => window.clearInterval(timer.current);\n }, [deadline]);\n\n const start = useCallback((seconds: number) => {\n const whole = Math.max(0, Math.ceil(seconds));\n setFinished(false);\n if (whole === 0) {\n setDeadline(null);\n setRemaining(0);\n return;\n }\n setRemaining(whole);\n setDeadline(Date.now() + whole * 1000);\n }, []);\n\n const stop = useCallback(() => {\n setDeadline(null);\n setRemaining(0);\n setFinished(false);\n }, []);\n\n return { remaining, finished, start, stop };\n}\n\n/** 272 -> \"4:32\". */\nexport function formatClock(seconds: number): string {\n const m = Math.floor(seconds / 60);\n const s = seconds % 60;\n return `${m}:${String(s).padStart(2, '0')}`;\n}\n","/* -------------------------------------------------------------------- */\n/* The three kinds of step inside VerifyIdentity: a password, a code */\n/* from the authenticator app, and a code the host sends by SMS or */\n/* email. Each asks the host through a callback and shows its answer. */\n/* */\n/* Nothing here logs, stores or puts a password, a code, a number or an */\n/* address in a `data-*` attribute. Shipped with VerifyIdentity; not an */\n/* export of its own. */\n/* -------------------------------------------------------------------- */\n\nimport {\n useCallback,\n useEffect,\n useRef,\n useState,\n type FormEvent,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Alert } from '../../components/alert';\nimport { Button } from '../../components/button';\nimport { FormField } from '../../components/form-field';\nimport { OTPInput } from '../../components/otp-input';\nimport { PasswordInput } from '../../components/password-input';\nimport { formatClock, useCountdown } from './use-countdown';\nimport type { SendCodeResult, VerifyResult } from './verify-identity-types';\n\n/* -------------------------------------------------------------------- */\n/* Shared */\n/* -------------------------------------------------------------------- */\n\ntype FailureKind = 'invalid' | 'expired' | 'rate-limited' | 'error';\n\ninterface Failure {\n kind: FailureKind;\n /** The host's own line, already translated. */\n message?: string;\n}\n\nconst failureFrom = (result: Exclude<VerifyResult, { status: 'ok' }>) =>\n result.status === 'error'\n ? ({ kind: 'error', message: result.message } as const)\n : ({ kind: result.status } as const);\n\n/** Calls the host. A throw or a rejection is an error: it is never\n * logged, because it may carry what the user typed. */\nasync function ask<T>(\n call: (() => Promise<T>) | undefined,\n fallback: T,\n): Promise<T> {\n if (!call) return fallback;\n try {\n return await call();\n } catch {\n return fallback;\n }\n}\n\nconst ERROR_RESULT = { status: 'error' } as const;\n\nfunction useMounted() {\n const mounted = useRef(true);\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n return mounted;\n}\n\nfunction useFailureText(passwordStep = false) {\n const { t } = useTranslation('ui');\n return (failure: Failure | null, waitSeconds: number): string | undefined => {\n if (!failure) return undefined;\n if (failure.message) return failure.message;\n switch (failure.kind) {\n case 'invalid':\n return passwordStep\n ? t('verifyIdentity.password.invalid')\n : t('verifyIdentity.invalidCode');\n case 'expired':\n return t('verifyIdentity.expiredCode');\n case 'rate-limited':\n return t('verifyIdentity.verifyRateLimited', { seconds: waitSeconds });\n default:\n return t('verifyIdentity.genericError');\n }\n };\n}\n\ninterface StepProps {\n /** Called once the host says the proof is good. */\n onDone: () => void;\n /** Reports whether a call to the host is out, for `data-submitting`. */\n onBusyChange: (busy: boolean) => void;\n}\n\n/* -------------------------------------------------------------------- */\n/* Password */\n/* -------------------------------------------------------------------- */\n\ninterface PasswordStepProps extends StepProps {\n verify?: (password: string) => Promise<VerifyResult>;\n}\n\nexport function PasswordStep({\n verify,\n onDone,\n onBusyChange,\n}: PasswordStepProps) {\n const { t } = useTranslation('ui');\n const mounted = useMounted();\n const input = useRef<HTMLInputElement>(null);\n const [busy, setBusy] = useState(false);\n const [failure, setFailure] = useState<Failure | null>(null);\n const wait = useCountdown();\n const text = useFailureText(true);\n\n const locked = failure?.kind === 'rate-limited' && wait.remaining > 0;\n useEffect(() => {\n if (wait.finished) setFailure(null);\n }, [wait.finished]);\n\n const submit = async (event: FormEvent) => {\n event.preventDefault();\n // Read from the input, not state: the value stays out of the DOM\n // and out of React.\n const password = input.current?.value ?? '';\n if (busy || locked) return;\n if (password === '') {\n setFailure({\n kind: 'invalid',\n message: t('verifyIdentity.password.required'),\n });\n input.current?.focus();\n return;\n }\n setBusy(true);\n onBusyChange(true);\n setFailure(null);\n const result = await ask(() => verify!(password), ERROR_RESULT);\n if (!mounted.current) return;\n setBusy(false);\n onBusyChange(false);\n if (result.status === 'ok') {\n onDone();\n return;\n }\n if (input.current) input.current.value = '';\n if (result.status === 'rate-limited') wait.start(result.waitSeconds);\n setFailure(failureFrom(result));\n input.current?.focus();\n };\n\n return (\n <form\n noValidate\n onSubmit={submit}\n aria-busy={busy || undefined}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n >\n <FormField\n label={t('verifyIdentity.password.label')}\n required\n error={text(failure, wait.remaining)}\n >\n <PasswordInput\n ref={input}\n name=\"password\"\n autoComplete=\"current-password\"\n disabled={busy}\n />\n </FormField>\n <Button\n type=\"submit\"\n intent=\"primary\"\n size=\"lg\"\n loading={busy}\n aria-disabled={locked || undefined}\n data-action=\"verify\"\n className=\"ds:self-start\"\n >\n {t('verifyIdentity.continue')}\n </Button>\n </form>\n );\n}\n\n/* -------------------------------------------------------------------- */\n/* A code: from the authenticator app, or sent by SMS or email */\n/* -------------------------------------------------------------------- */\n\ntype SendPhase = 'sending' | 'ready' | 'failed' | 'limited';\n\ninterface CodeStepProps extends StepProps {\n kind: 'authenticator' | 'sms' | 'email';\n codeLength: number;\n /** Absent for the authenticator: the app makes its own codes. */\n send?: () => Promise<SendCodeResult>;\n verify?: (code: string) => Promise<VerifyResult>;\n}\n\nconst DEFAULT_RESEND_SECONDS = 30;\n\nexport function CodeStep({\n kind,\n codeLength,\n send,\n verify,\n onDone,\n onBusyChange,\n}: CodeStepProps) {\n const { t } = useTranslation('ui');\n const mounted = useMounted();\n const panel = useRef<HTMLDivElement>(null);\n const sends = kind !== 'authenticator';\n\n const [phase, setPhase] = useState<SendPhase>(sends ? 'sending' : 'ready');\n const [sendMessage, setSendMessage] = useState<string | undefined>();\n const [hasCode, setHasCode] = useState(!sends);\n const [code, setCode] = useState('');\n const [verifying, setVerifying] = useState(false);\n const [failure, setFailure] = useState<Failure | null>(null);\n const resend = useCountdown();\n const expiry = useCountdown();\n const wait = useCountdown();\n const text = useFailureText();\n\n const focusFirstBox = useCallback(() => {\n panel.current?.querySelector<HTMLInputElement>('input')?.focus();\n }, []);\n\n const sendCount = useRef(0);\n const sendCode = useCallback(async () => {\n sendCount.current += 1;\n setPhase('sending');\n setFailure(null);\n setCode('');\n onBusyChange(true);\n const result = await ask(send, ERROR_RESULT);\n if (!mounted.current) return;\n onBusyChange(false);\n if (result.status === 'sent') {\n setPhase('ready');\n setHasCode(true);\n resend.start(result.resendAfterSeconds ?? DEFAULT_RESEND_SECONDS);\n if (result.expiresInSeconds) expiry.start(result.expiresInSeconds);\n else expiry.stop();\n return;\n }\n if (result.status === 'rate-limited') {\n setPhase('limited');\n resend.start(result.waitSeconds);\n return;\n }\n setSendMessage(result.message);\n setPhase('failed');\n // eslint-disable-next-line react-hooks/exhaustive-deps -- the countdown objects are stable enough, and `send` is read fresh\n }, [send, onBusyChange]);\n\n // The code goes out when the step opens. The ref keeps a development\n // double mount from sending two.\n const started = useRef(false);\n useEffect(() => {\n if (!sends || started.current) return;\n started.current = true;\n void sendCode();\n }, [sends, sendCode]);\n\n // Focus follows the box when a new code arrives.\n const lastPhase = useRef(phase);\n useEffect(() => {\n // The first code leaves focus on the step heading; a new one moves\n // it to the box.\n if (\n phase === 'ready' &&\n lastPhase.current === 'sending' &&\n hasCode &&\n sendCount.current > 1\n ) {\n focusFirstBox();\n }\n lastPhase.current = phase;\n }, [phase, hasCode, focusFirstBox]);\n\n const locked = failure?.kind === 'rate-limited' && wait.remaining > 0;\n useEffect(() => {\n if (wait.finished) setFailure(null);\n }, [wait.finished]);\n\n // The code timed out in the browser: say so, the server still decides.\n const expiredHere = expiry.finished && !failure;\n const shown: Failure | null =\n failure ?? (expiredHere ? { kind: 'expired' } : null);\n\n const verifyCode = async (value: string) => {\n if (verifying || locked || value.length !== codeLength) return;\n setVerifying(true);\n onBusyChange(true);\n setFailure(null);\n const result = await ask(() => verify!(value), ERROR_RESULT);\n if (!mounted.current) return;\n setVerifying(false);\n onBusyChange(false);\n if (result.status === 'ok') {\n onDone();\n return;\n }\n if (result.status === 'rate-limited') wait.start(result.waitSeconds);\n setFailure(failureFrom(result));\n setCode('');\n // After the box is enabled again.\n window.setTimeout(focusFirstBox, 0);\n };\n\n const waiting = resend.remaining > 0;\n const showBox = hasCode;\n const canResend = sends && phase !== 'sending';\n\n return (\n <div\n ref={panel}\n data-slot=\"code-step\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n >\n {/* Always mounted: a live region announces a change, not its first\n content. */}\n <div\n role=\"status\"\n className=\"type-body-sm ds:text-[var(--muted-foreground)]\"\n >\n {phase === 'sending' ? t('verifyIdentity.sending') : null}\n </div>\n\n {phase === 'failed' && (\n <Alert variant=\"error\" data-slot=\"send-failed\">\n <Alert.Description>\n {sendMessage ?? t('verifyIdentity.sendFailed')}\n </Alert.Description>\n </Alert>\n )}\n {phase === 'limited' && (\n <Alert variant=\"warning\" data-slot=\"send-limited\">\n <Alert.Description>\n {resend.remaining > 0\n ? t('verifyIdentity.sendRateLimited', {\n seconds: resend.remaining,\n })\n : t('verifyIdentity.sendRateLimitedOver')}\n </Alert.Description>\n </Alert>\n )}\n\n {showBox && (\n <FormField\n label={t('verifyIdentity.codeLabel')}\n error={text(shown, wait.remaining)}\n >\n <OTPInput\n length={codeLength}\n mode=\"numeric\"\n // SMS autofill where the browser offers it; the first box\n // always carries `autocomplete=\"one-time-code\"`.\n webOtp={kind === 'sms'}\n value={code}\n onChange={setCode}\n onComplete={(value) => void verifyCode(value)}\n disabled={verifying}\n />\n </FormField>\n )}\n\n {showBox && expiry.remaining > 0 && (\n <p\n className=\"type-body-sm ds:text-[var(--muted-foreground)]\"\n data-slot=\"expiry\"\n >\n {t('verifyIdentity.expiresIn', {\n time: formatClock(expiry.remaining),\n })}\n </p>\n )}\n\n <div className=\"ds:flex ds:flex-wrap ds:items-center ds:gap-[var(--spacing-sm)]\">\n {showBox && (\n <Button\n type=\"button\"\n intent=\"primary\"\n size=\"lg\"\n loading={verifying}\n aria-disabled={code.length !== codeLength || locked || undefined}\n data-action=\"verify\"\n onClick={() => void verifyCode(code)}\n >\n {t('verifyIdentity.verify')}\n </Button>\n )}\n {canResend && (\n <Button\n type=\"button\"\n intent={showBox ? 'outline' : 'primary'}\n size=\"lg\"\n disabled={verifying}\n // Not native `disabled` for the wait: focus stays on the button.\n aria-disabled={waiting || undefined}\n data-action={phase === 'failed' ? 'retry-send' : 'resend-code'}\n onClick={() => {\n if (!waiting) void sendCode();\n }}\n >\n {waiting\n ? t('verifyIdentity.resendIn', { seconds: resend.remaining })\n : phase === 'failed'\n ? t('verifyIdentity.tryAgain')\n : t('verifyIdentity.resend')}\n </Button>\n )}\n </div>\n </div>\n );\n}\n","/* -------------------------------------------------------------------- */\n/* VerifyIdentity: the \"Verify it's you\" step-up flow. */\n/* */\n/* The host passes an ordered list of steps. The server decides which */\n/* steps a user needs and in which order; the UI only renders them one */\n/* after another, and calls `onVerified` after the last. Every check is */\n/* a callback the host owns: the kit makes no request and never builds */\n/* or reveals a full phone number or address, it shows the masked text */\n/* it is given. */\n/* -------------------------------------------------------------------- */\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n type HTMLAttributes,\n} from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { CircleCheck } from 'lucide-react';\nimport { cva } from 'class-variance-authority';\nimport { Alert } from '../../components/alert';\nimport { Button } from '../../components/button';\nimport { Dialog } from '../../components/dialog';\nimport { isSafeHref } from '../../components/_shared/safe-href';\nimport { CodeStep, PasswordStep } from './verify-identity-steps';\nimport type {\n VerifyIdentityCallbacks,\n VerifyIdentityStep,\n} from './verify-identity-types';\n\n/* -------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------- */\n\nexport interface VerifyIdentityProps\n extends\n VerifyIdentityCallbacks,\n Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /**\n * The proofs to ask for, in order. The server decides both; the UI\n * renders them as given.\n */\n steps: readonly VerifyIdentityStep[];\n /** What the user is about to do, such as \"Change login email\". Pass it\n * translated. Default \"Verify it's you\". */\n title?: string;\n /** The line under the title, such as \"Confirm it is you before you change\n * your login email.\" Pass it translated. */\n description?: string;\n /** Level of the title. Default 2; each step heading is one deeper. */\n headingLevel?: 2 | 3;\n /** The phone the SMS goes to, already masked: \"+39 ••• ••• 4567\". The kit\n * never builds a masked number itself. */\n maskedPhone?: string;\n /** The current login email, already masked: \"m••••@example.com\". */\n maskedEmail?: string;\n /** Digits in a code. Default 6. */\n codeLength?: number;\n /**\n * True when the user has no confirmed mobile. The steps do not run:\n * the card explains why one is needed and offers to set it up.\n */\n missingMobile?: boolean;\n /** Called by the set-up button of the missing-mobile card. */\n onSetUpMobile?: () => void;\n /** Where the set-up button leads instead. A path on the same site, or an\n * address written in full. */\n setUpMobileHref?: string;\n /** Called after the last step is right. */\n onVerified: () => void;\n /** Adds a Cancel button. */\n onCancel?: () => void;\n /** Hides the title and description, for a host that draws its own, such as\n * a dialog. */\n hideHeader?: boolean;\n}\n\n/* -------------------------------------------------------------------- */\n/* Styles */\n/* -------------------------------------------------------------------- */\n\nconst rootVariants = cva(\n 'ds:flex ds:flex-col ds:gap-[var(--spacing-md)] ds:text-start ds:text-[var(--foreground)]',\n);\n\nconst headingVariants = cva(\n 'type-h4 ds:m-0 ds:focus-visible:outline-solid ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-[var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:forced-colors:focus-visible:outline-[CanvasText]',\n);\n\nconst HEADINGS = { 2: 'h2', 3: 'h3', 4: 'h4' } as const;\n\n/* -------------------------------------------------------------------- */\n/* Component */\n/* -------------------------------------------------------------------- */\n\ntype Position = number | 'verified';\n\nfunction VerifyIdentityInner({\n steps,\n title,\n description,\n headingLevel = 2,\n maskedPhone,\n maskedEmail,\n codeLength = 6,\n missingMobile = false,\n onSetUpMobile,\n setUpMobileHref,\n onVerified,\n onCancel,\n hideHeader = false,\n onVerifyPassword,\n onVerifyAuthenticator,\n onSendSmsCode,\n onVerifySmsCode,\n onSendEmailCode,\n onVerifyEmailCode,\n className,\n forwardedRef,\n ...rest\n}: VerifyIdentityProps & { forwardedRef: React.Ref<HTMLDivElement> }) {\n const { t } = useTranslation('ui');\n const titleId = useId();\n const stepTitleId = useId();\n const [position, setPosition] = useState<Position>(0);\n const [busy, setBusy] = useState(false);\n const stepHeading = useRef<HTMLHeadingElement>(null);\n\n const index = typeof position === 'number' ? position : steps.length - 1;\n const step = steps[index];\n const state = missingMobile\n ? 'missing-factor'\n : position === 'verified'\n ? 'verified'\n : (step ?? 'empty');\n\n // Focus goes to the new step's heading when the step changes, not when\n // the flow first opens: a dialog places focus itself.\n const first = useRef(true);\n useEffect(() => {\n if (first.current) {\n first.current = false;\n return;\n }\n stepHeading.current?.focus();\n }, [position]);\n\n const onBusyChange = useCallback((value: boolean) => setBusy(value), []);\n\n const next = useCallback(() => {\n setBusy(false);\n if (index + 1 < steps.length) {\n setPosition(index + 1);\n } else {\n setPosition('verified');\n onVerified();\n }\n }, [index, steps.length, onVerified]);\n\n const phone = maskedPhone;\n const email = maskedEmail;\n const stepText = useMemo(\n () => ({\n password: {\n title: t('verifyIdentity.password.title'),\n description: t('verifyIdentity.password.description'),\n },\n authenticator: {\n title: t('verifyIdentity.authenticator.title'),\n description: t('verifyIdentity.authenticator.description'),\n },\n sms: {\n title: t('verifyIdentity.sms.title'),\n description: phone\n ? t('verifyIdentity.sms.description', { phone })\n : t('verifyIdentity.sms.descriptionNoPhone'),\n },\n email: {\n title: t('verifyIdentity.email.title'),\n description: email\n ? t('verifyIdentity.email.description', { email })\n : t('verifyIdentity.email.descriptionNoEmail'),\n },\n }),\n [t, phone, email],\n );\n\n const Title = HEADINGS[headingLevel];\n const StepTitle = HEADINGS[(headingLevel + 1) as 3 | 4];\n const setUpLink =\n setUpMobileHref && isSafeHref(setUpMobileHref)\n ? setUpMobileHref\n : undefined;\n\n let body: React.ReactNode = null;\n let heading: string | undefined;\n let lead: string | undefined;\n\n if (missingMobile) {\n heading = t('verifyIdentity.missingMobile.title');\n lead = t('verifyIdentity.missingMobile.description');\n body = (\n <div\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n data-slot=\"missing-factor\"\n >\n <Alert variant=\"warning\" announce=\"off\">\n <Alert.Description>\n {t('verifyIdentity.missingMobile.reason')}\n </Alert.Description>\n </Alert>\n {(onSetUpMobile || setUpLink) &&\n (setUpLink ? (\n <Button\n asChild\n intent=\"primary\"\n size=\"lg\"\n className=\"ds:self-start\"\n >\n <a href={setUpLink} data-action=\"set-up-mobile\">\n {t('verifyIdentity.missingMobile.action')}\n </a>\n </Button>\n ) : (\n <Button\n type=\"button\"\n intent=\"primary\"\n size=\"lg\"\n data-action=\"set-up-mobile\"\n className=\"ds:self-start\"\n onClick={onSetUpMobile}\n >\n {t('verifyIdentity.missingMobile.action')}\n </Button>\n ))}\n </div>\n );\n } else if (position === 'verified') {\n heading = t('verifyIdentity.verified');\n body = (\n <p className=\"ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)] type-body-sm ds:text-success ds:m-0\">\n <CircleCheck aria-hidden=\"true\" className=\"ds:size-4 ds:shrink-0\" />\n <span>{t('verifyIdentity.verifiedDescription')}</span>\n </p>\n );\n } else if (step) {\n heading = stepText[step].title;\n lead = stepText[step].description;\n body = (\n <div key={`${step}-${index}`} data-step={step}>\n {step === 'password' ? (\n <PasswordStep\n verify={onVerifyPassword}\n onDone={next}\n onBusyChange={onBusyChange}\n />\n ) : step === 'authenticator' ? (\n <CodeStep\n kind=\"authenticator\"\n codeLength={codeLength}\n verify={onVerifyAuthenticator}\n onDone={next}\n onBusyChange={onBusyChange}\n />\n ) : step === 'sms' ? (\n <CodeStep\n kind=\"sms\"\n codeLength={codeLength}\n send={onSendSmsCode}\n verify={onVerifySmsCode}\n onDone={next}\n onBusyChange={onBusyChange}\n />\n ) : (\n <CodeStep\n kind=\"email\"\n codeLength={codeLength}\n send={onSendEmailCode}\n verify={onVerifyEmailCode}\n onDone={next}\n onBusyChange={onBusyChange}\n />\n )}\n </div>\n );\n }\n\n return (\n <div\n ref={forwardedRef}\n {...rest}\n data-component=\"verify-identity\"\n data-state={state}\n data-step-index={missingMobile ? undefined : index}\n data-step-count={steps.length}\n data-submitting={busy ? 'true' : 'false'}\n className={rootVariants({ className })}\n >\n {!hideHeader && (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <Title id={titleId} className=\"type-h3 ds:m-0\">\n {title ?? t('verifyIdentity.title')}\n </Title>\n <p className=\"type-body-sm ds:m-0 ds:text-[var(--muted-foreground)]\">\n {description ?? t('verifyIdentity.description')}\n </p>\n </div>\n )}\n\n <div\n role=\"group\"\n aria-labelledby={stepTitleId}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n {steps.length > 1 && !missingMobile && position !== 'verified' && (\n <p\n className=\"type-body-sm ds:m-0 ds:text-[var(--muted-foreground)]\"\n data-slot=\"progress\"\n >\n {t('verifyIdentity.progress', {\n current: index + 1,\n total: steps.length,\n })}\n </p>\n )}\n <StepTitle\n ref={stepHeading}\n id={stepTitleId}\n tabIndex={-1}\n className={headingVariants()}\n >\n {heading}\n </StepTitle>\n {lead && (\n <p className=\"type-body-sm ds:m-0 ds:text-[var(--muted-foreground)]\">\n {lead}\n </p>\n )}\n </div>\n {body}\n </div>\n\n {onCancel && position !== 'verified' && (\n <Button\n type=\"button\"\n intent=\"ghost\"\n data-action=\"cancel\"\n className=\"ds:self-start\"\n onClick={onCancel}\n >\n {t('verifyIdentity.cancel')}\n </Button>\n )}\n </div>\n );\n}\n\n/**\n * The \"Verify it's you\" step-up flow, inline. Use `VerifyIdentityDialog`\n * for a dialog. The server decides the steps and checks every answer: this\n * only renders them.\n */\nexport const VerifyIdentity = forwardRef<HTMLDivElement, VerifyIdentityProps>(\n (props, ref) => (\n // A new list of steps starts the flow again.\n <VerifyIdentityInner\n key={`${props.steps.join(',')}|${props.missingMobile ? 'm' : ''}`}\n {...props}\n forwardedRef={ref}\n />\n ),\n);\nVerifyIdentity.displayName = 'VerifyIdentity';\n\n/* -------------------------------------------------------------------- */\n/* Dialog */\n/* -------------------------------------------------------------------- */\n\nexport interface VerifyIdentityDialogProps extends Omit<\n VerifyIdentityProps,\n 'hideHeader' | 'headingLevel' | 'onCancel'\n> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n}\n\n/** `VerifyIdentity` in a dialog. Closing it starts the flow again next time. */\nexport function VerifyIdentityDialog({\n open,\n onOpenChange,\n title,\n description,\n ...flow\n}: VerifyIdentityDialogProps) {\n const { t } = useTranslation('ui');\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Content size=\"md\">\n <Dialog.Header>\n <Dialog.Title>{title ?? t('verifyIdentity.title')}</Dialog.Title>\n <Dialog.Description>\n {description ?? t('verifyIdentity.description')}\n </Dialog.Description>\n </Dialog.Header>\n <Dialog.Body>\n <VerifyIdentity\n {...flow}\n hideHeader\n onCancel={() => onOpenChange(false)}\n />\n </Dialog.Body>\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n","/* -------------------------------------------------------------------- */\n/* ChangeEmailDialog: verify it is you, then ask for the new login email */\n/* twice, then say what happens next. */\n/* */\n/* The host owns the rules. `onSubmitNewEmail` answers with a typed */\n/* result; the dialog shows it. The final message never repeats the new */\n/* address. */\n/* -------------------------------------------------------------------- */\n\nimport { useEffect, useId, useRef, useState, type FormEvent } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport isEmail from 'validator/lib/isEmail';\nimport { Alert } from '../../components/alert';\nimport { Button } from '../../components/button';\nimport { Dialog } from '../../components/dialog';\nimport { FormField } from '../../components/form-field';\nimport { TextInput } from '../../components/text-input';\nimport { VerifyIdentity, type VerifyIdentityProps } from './verify-identity';\n\n/** What the host answers once it has tried to change the email. */\nexport type ChangeEmailResult =\n | { status: 'ok' }\n | { status: 'already-in-use' }\n | { status: 'invalid' }\n | {\n status: 'error';\n /** Already translated. Shown in place of the kit's own line. */\n message?: string;\n };\n\nexport interface ChangeEmailDialogProps extends Omit<\n VerifyIdentityProps,\n 'hideHeader' | 'headingLevel' | 'onCancel' | 'onVerified'\n> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Called with the new address once both entries match and look like an\n * email. The host checks it for real. */\n onSubmitNewEmail: (email: string) => Promise<ChangeEmailResult>;\n}\n\ntype Phase = 'verify' | 'new-email' | 'done';\n\nconst headingClass =\n 'type-h4 ds:m-0 ds:focus-visible:outline-solid ds:focus-visible:outline-[length:var(--focus-ring-width)] ds:focus-visible:outline-[var(--ring)] ds:focus-visible:outline-offset-[length:var(--focus-ring-offset)] ds:forced-colors:focus-visible:outline-[CanvasText]';\n\nfunction ChangeEmailBody({\n onOpenChange,\n onSubmitNewEmail,\n ...flow\n}: Omit<ChangeEmailDialogProps, 'open' | 'title' | 'description'>) {\n const { t } = useTranslation('ui');\n const [phase, setPhase] = useState<Phase>('verify');\n const [email, setEmail] = useState('');\n const [again, setAgain] = useState('');\n const [errors, setErrors] = useState<{ email?: string; again?: string }>({});\n const [formError, setFormError] = useState<string | undefined>();\n const [submitting, setSubmitting] = useState(false);\n const heading = useRef<HTMLHeadingElement>(null);\n const doneBox = useRef<HTMLDivElement>(null);\n const emailInput = useRef<HTMLInputElement>(null);\n const againInput = useRef<HTMLInputElement>(null);\n const headingId = useId();\n const mounted = useRef(true);\n useEffect(() => {\n mounted.current = true;\n return () => {\n mounted.current = false;\n };\n }, []);\n\n // Focus goes to the heading of the new phase.\n useEffect(() => {\n if (phase === 'new-email') heading.current?.focus();\n if (phase === 'done') doneBox.current?.focus();\n }, [phase]);\n\n if (phase === 'verify') {\n return (\n <VerifyIdentity\n {...flow}\n hideHeader\n onCancel={() => onOpenChange(false)}\n onVerified={() => setPhase('new-email')}\n />\n );\n }\n\n if (phase === 'done') {\n return (\n <div\n data-component=\"change-email-dialog\"\n data-state=\"done\"\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n >\n <Alert\n ref={doneBox}\n variant=\"success\"\n tabIndex={-1}\n aria-labelledby={headingId}\n >\n <Alert.Title as=\"h3\" id={headingId}>\n {t('verifyIdentity.changeEmail.doneTitle')}\n </Alert.Title>\n <Alert.Description>\n {t('verifyIdentity.changeEmail.doneDescription')}\n </Alert.Description>\n </Alert>\n <Button\n type=\"button\"\n intent=\"primary\"\n size=\"lg\"\n data-action=\"close\"\n className=\"ds:self-start\"\n onClick={() => onOpenChange(false)}\n >\n {t('verifyIdentity.changeEmail.close')}\n </Button>\n </div>\n );\n }\n\n const submit = async (event: FormEvent) => {\n event.preventDefault();\n if (submitting) return;\n const next: { email?: string; again?: string } = {};\n const value = email.trim();\n if (value === '') next.email = t('verifyIdentity.changeEmail.required');\n else if (!isEmail(value)) next.email = t('inputs.email.invalid');\n else if (again.trim() !== value) {\n next.again = t('verifyIdentity.changeEmail.mismatch');\n }\n setErrors(next);\n setFormError(undefined);\n if (next.email || next.again) {\n (next.email ? emailInput : againInput).current?.focus();\n return;\n }\n setSubmitting(true);\n let result: ChangeEmailResult;\n try {\n result = await onSubmitNewEmail(value);\n } catch {\n result = { status: 'error' };\n }\n if (!mounted.current) return;\n setSubmitting(false);\n if (result.status === 'ok') {\n setPhase('done');\n return;\n }\n if (result.status === 'already-in-use') {\n setErrors({ email: t('verifyIdentity.changeEmail.alreadyInUse') });\n emailInput.current?.focus();\n } else if (result.status === 'invalid') {\n setErrors({ email: t('verifyIdentity.changeEmail.invalid') });\n emailInput.current?.focus();\n } else {\n setFormError(result.message ?? t('verifyIdentity.genericError'));\n }\n };\n\n return (\n <form\n noValidate\n onSubmit={submit}\n aria-busy={submitting || undefined}\n data-component=\"change-email-dialog\"\n data-state=\"new-email\"\n data-submitting={submitting ? 'true' : 'false'}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <h3 ref={heading} tabIndex={-1} className={headingClass}>\n {t('verifyIdentity.changeEmail.newTitle')}\n </h3>\n <p className=\"type-body-sm ds:m-0 ds:text-[var(--muted-foreground)]\">\n {t('verifyIdentity.changeEmail.newDescription')}\n </p>\n </div>\n {formError && (\n <Alert variant=\"error\">\n <Alert.Description>{formError}</Alert.Description>\n </Alert>\n )}\n <FormField\n label={t('verifyIdentity.changeEmail.newLabel')}\n required\n error={errors.email}\n >\n <TextInput\n ref={emailInput}\n type=\"email\"\n inputMode=\"email\"\n name=\"newEmail\"\n autoComplete=\"off\"\n value={email}\n disabled={submitting}\n onChange={(event) => {\n setEmail(event.target.value);\n setErrors((previous) => ({ ...previous, email: undefined }));\n }}\n />\n </FormField>\n <FormField\n label={t('verifyIdentity.changeEmail.confirmLabel')}\n required\n error={errors.again}\n >\n <TextInput\n ref={againInput}\n type=\"email\"\n inputMode=\"email\"\n name=\"newEmailConfirm\"\n autoComplete=\"off\"\n value={again}\n disabled={submitting}\n onChange={(event) => {\n setAgain(event.target.value);\n setErrors((previous) => ({ ...previous, again: undefined }));\n }}\n />\n </FormField>\n <div className=\"ds:flex ds:flex-wrap ds:gap-[var(--spacing-sm)]\">\n <Button\n type=\"submit\"\n intent=\"primary\"\n size=\"lg\"\n loading={submitting}\n data-action=\"submit\"\n >\n {t('verifyIdentity.changeEmail.submit')}\n </Button>\n <Button\n type=\"button\"\n intent=\"ghost\"\n size=\"lg\"\n disabled={submitting}\n data-action=\"cancel\"\n onClick={() => onOpenChange(false)}\n >\n {t('verifyIdentity.cancel')}\n </Button>\n </div>\n </form>\n );\n}\n\n/**\n * Change the login email: the \"Verify it's you\" steps, then the new\n * address twice, then a confirmation. Closing the dialog starts again.\n */\nexport function ChangeEmailDialog({\n open,\n onOpenChange,\n title,\n description,\n ...body\n}: ChangeEmailDialogProps) {\n const { t } = useTranslation('ui');\n return (\n <Dialog.Root open={open} onOpenChange={onOpenChange}>\n <Dialog.Content size=\"md\">\n <Dialog.Header>\n <Dialog.Title>\n {title ?? t('verifyIdentity.changeEmail.title')}\n </Dialog.Title>\n <Dialog.Description>\n {description ?? t('verifyIdentity.changeEmail.description')}\n </Dialog.Description>\n </Dialog.Header>\n <Dialog.Body>\n <ChangeEmailBody onOpenChange={onOpenChange} {...body} />\n </Dialog.Body>\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n","/* -------------------------------------------------------------------- */\n/* The contract between VerifyIdentity and its host. */\n/* */\n/* The host owns every rule: which steps a user needs, in which order, */\n/* whether a code is right, how often one may be sent. The UI renders */\n/* the answers. Results are a discriminated union on `status`, so a host */\n/* cannot forget a case. */\n/* -------------------------------------------------------------------- */\n\n/** One proof the user gives. The server decides the order. */\nexport const VERIFY_IDENTITY_STEPS = [\n 'password',\n 'authenticator',\n 'sms',\n 'email',\n] as const;\n\nexport type VerifyIdentityStep = (typeof VERIFY_IDENTITY_STEPS)[number];\n\n/** What a check of a password or a code answers. */\nexport type VerifyResult =\n | { status: 'ok' }\n | { status: 'invalid' }\n | { status: 'expired' }\n | { status: 'rate-limited'; waitSeconds: number }\n | {\n status: 'error';\n /** Already translated. Shown in place of the kit's own line. */\n message?: string;\n };\n\n/** What sending an SMS or email code answers. */\nexport type SendCodeResult =\n | {\n status: 'sent';\n /** How long the code lives. Shown as a countdown when given. */\n expiresInSeconds?: number;\n /** How long until the user may ask for another. Default 30. */\n resendAfterSeconds?: number;\n }\n | { status: 'rate-limited'; waitSeconds: number }\n | {\n status: 'error';\n /** Already translated. Shown in place of the kit's own line. */\n message?: string;\n };\n\n/** The host's checks. Each one is called by the UI, never by the kit\n * itself: the kit makes no request. The password and the codes are\n * passed to these and nowhere else; the kit never logs or stores them. */\nexport interface VerifyIdentityCallbacks {\n onVerifyPassword?: (password: string) => Promise<VerifyResult>;\n onVerifyAuthenticator?: (code: string) => Promise<VerifyResult>;\n /** Called once when the SMS step opens, and again on resend. */\n onSendSmsCode?: () => Promise<SendCodeResult>;\n onVerifySmsCode?: (code: string) => Promise<VerifyResult>;\n /** Called once when the email step opens, and again on resend. */\n onSendEmailCode?: () => Promise<SendCodeResult>;\n onVerifyEmailCode?: (code: string) => Promise<VerifyResult>;\n}\n"],"names":["useCountdown","deadline","setDeadline","useState","remaining","setRemaining","finished","setFinished","timer","useRef","useEffect","tick","left","start","useCallback","seconds","whole","stop","formatClock","m","s","failureFrom","result","ask","call","fallback","ERROR_RESULT","useMounted","mounted","useFailureText","passwordStep","t","useTranslation","failure","waitSeconds","PasswordStep","verify","onDone","onBusyChange","input","busy","setBusy","setFailure","wait","text","locked","jsxs","event","password","_a","_b","_c","jsx","FormField","PasswordInput","Button","DEFAULT_RESEND_SECONDS","CodeStep","kind","codeLength","send","panel","sends","phase","setPhase","sendMessage","setSendMessage","hasCode","setHasCode","code","setCode","verifying","setVerifying","resend","expiry","focusFirstBox","sendCount","sendCode","started","lastPhase","expiredHere","shown","verifyCode","value","waiting","showBox","canResend","Alert","OTPInput","rootVariants","cva","headingVariants","HEADINGS","VerifyIdentityInner","steps","title","description","headingLevel","maskedPhone","maskedEmail","missingMobile","onSetUpMobile","setUpMobileHref","onVerified","onCancel","hideHeader","onVerifyPassword","onVerifyAuthenticator","onSendSmsCode","onVerifySmsCode","onSendEmailCode","onVerifyEmailCode","className","forwardedRef","rest","titleId","useId","stepTitleId","position","setPosition","stepHeading","index","step","state","first","next","phone","email","stepText","useMemo","Title","StepTitle","setUpLink","isSafeHref","body","heading","lead","CircleCheck","VerifyIdentity","forwardRef","props","ref","VerifyIdentityDialog","open","onOpenChange","flow","Dialog","headingClass","ChangeEmailBody","onSubmitNewEmail","setEmail","again","setAgain","errors","setErrors","formError","setFormError","submitting","setSubmitting","doneBox","emailInput","againInput","headingId","isEmail","TextInput","previous","ChangeEmailDialog","VERIFY_IDENTITY_STEPS"],"mappings":"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"}
|
package/dist/agent-catalog.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"packageVersion": "1.
|
|
3
|
+
"packageVersion": "1.113.0",
|
|
4
4
|
"components": [
|
|
5
5
|
{
|
|
6
6
|
"kind": "component",
|
|
@@ -11259,7 +11259,7 @@
|
|
|
11259
11259
|
},
|
|
11260
11260
|
"item": {
|
|
11261
11261
|
"attr": "data-result-id",
|
|
11262
|
-
"description": "Stable result id emitted on each rendered result card. Used by scroll_to_result / focus_pin to address a single result. The non-focusable card group is labelled by the practice-result-{id}-name heading, which contains data-component=\"practice-result-name-link\": a visible link to result.href that navigates without firing onResultSelect or click telemetry. Each card also carries up to two CTA anchors: data-component=\"practice-result-open-cta\" (practice page; absent when the consumer sets showCardOpenButton=false) and data-component=\"practice-result-book-cta\" (booking flow; data-slot-aware=\"true\" when it deep-links to a next slot). Card content carries its own read-only hooks: data-component=\"practice-result-tagline\", data-component=\"practice-result-description\", and data-component=\"practice-result-price\" (the kit-formatted first-visit cost: firstVisitPrice supports fixed, from and range amounts plus an optional practice-written label; it takes precedence over the older firstVisitPriceCents fixed-price field. Absent when neither price is set)."
|
|
11262
|
+
"description": "Stable result id emitted on each rendered result card. Used by scroll_to_result / focus_pin to address a single result. The non-focusable card group is labelled by the practice-result-{id}-name heading, which contains data-component=\"practice-result-name-link\": a visible link to result.href that navigates without firing onResultSelect or click telemetry. Each card also carries up to two CTA anchors: data-component=\"practice-result-open-cta\" (practice page; absent when the consumer sets showCardOpenButton=false) and data-component=\"practice-result-book-cta\" (booking flow; data-slot-aware=\"true\" when it deep-links to a next slot). Card content carries its own read-only hooks: data-component=\"practice-result-tagline\", data-component=\"practice-result-description\", data-component=\"practice-result-latest-review\" (the newest approved review as one truncated line under the rating, from latestReview; its text span carries the language of the review as lang; absent without latestReview), and data-component=\"practice-result-price\" (the kit-formatted first-visit cost: firstVisitPrice supports fixed, from and range amounts plus an optional practice-written label; it takes precedence over the older firstVisitPriceCents fixed-price field. Absent when neither price is set)."
|
|
11263
11263
|
}
|
|
11264
11264
|
}
|
|
11265
11265
|
},
|
|
@@ -24245,6 +24245,110 @@
|
|
|
24245
24245
|
}
|
|
24246
24246
|
]
|
|
24247
24247
|
},
|
|
24248
|
+
{
|
|
24249
|
+
"kind": "pattern",
|
|
24250
|
+
"id": "verify-identity",
|
|
24251
|
+
"composes": [
|
|
24252
|
+
{
|
|
24253
|
+
"component": "dialog",
|
|
24254
|
+
"as": "dialog"
|
|
24255
|
+
},
|
|
24256
|
+
{
|
|
24257
|
+
"component": "form-field",
|
|
24258
|
+
"as": "field"
|
|
24259
|
+
},
|
|
24260
|
+
{
|
|
24261
|
+
"component": "password-input",
|
|
24262
|
+
"as": "password"
|
|
24263
|
+
},
|
|
24264
|
+
{
|
|
24265
|
+
"component": "otp-input",
|
|
24266
|
+
"as": "code"
|
|
24267
|
+
},
|
|
24268
|
+
{
|
|
24269
|
+
"component": "text-input",
|
|
24270
|
+
"as": "newEmail"
|
|
24271
|
+
},
|
|
24272
|
+
{
|
|
24273
|
+
"component": "alert",
|
|
24274
|
+
"as": "notice"
|
|
24275
|
+
},
|
|
24276
|
+
{
|
|
24277
|
+
"component": "button",
|
|
24278
|
+
"as": "action"
|
|
24279
|
+
}
|
|
24280
|
+
],
|
|
24281
|
+
"workflows": [
|
|
24282
|
+
{
|
|
24283
|
+
"name": "read_flow",
|
|
24284
|
+
"safety": "read",
|
|
24285
|
+
"description": "Read where the flow stands. The root (`data-component=\"verify-identity\"`) carries `data-state`: the current step (`password`, `authenticator`, `sms` or `email`), `missing-factor` when the user has no confirmed mobile, or `verified` after the last step. `data-step-index` and `data-step-count` give the position, and `data-submitting` is `true` while a check or a send is out. In the change-email dialog (`data-component=\"change-email-dialog\"`) `data-state` is `new-email` or `done`. A wrong, expired or rate-limited answer shows inline under the field (`data-slot=\"error\"`); a failed send shows `data-slot=\"send-failed\"` or `data-slot=\"send-limited\"`.",
|
|
24286
|
+
"descriptionKey": "ui.agent.verifyIdentity.workflows.readFlow",
|
|
24287
|
+
"uiActions": [],
|
|
24288
|
+
"apiActions": []
|
|
24289
|
+
},
|
|
24290
|
+
{
|
|
24291
|
+
"name": "verify_password",
|
|
24292
|
+
"safety": "write",
|
|
24293
|
+
"description": "Confirm the password (`data-step=\"password\"`, `data-action=\"verify\"`). The person types it themselves; it is passed only to the host, which checks it.",
|
|
24294
|
+
"descriptionKey": "ui.agent.verifyIdentity.workflows.verifyPassword",
|
|
24295
|
+
"uiActions": [],
|
|
24296
|
+
"apiActions": [
|
|
24297
|
+
"user.verifyPassword"
|
|
24298
|
+
]
|
|
24299
|
+
},
|
|
24300
|
+
{
|
|
24301
|
+
"name": "verify_authenticator_code",
|
|
24302
|
+
"safety": "write",
|
|
24303
|
+
"description": "Confirm the code from the authenticator app (`data-step=\"authenticator\"`, `data-action=\"verify\"`). The person reads it from their app and types it.",
|
|
24304
|
+
"descriptionKey": "ui.agent.verifyIdentity.workflows.verifyAuthenticatorCode",
|
|
24305
|
+
"uiActions": [],
|
|
24306
|
+
"apiActions": [
|
|
24307
|
+
"user.verifyAuthenticatorCode"
|
|
24308
|
+
]
|
|
24309
|
+
},
|
|
24310
|
+
{
|
|
24311
|
+
"name": "verify_sms_code",
|
|
24312
|
+
"safety": "write",
|
|
24313
|
+
"description": "Send a code by SMS to the confirmed mobile when the step opens, and check it (`data-step=\"sms\"`, `data-action=\"verify\"`). Resend (`data-action=\"resend-code\"`) waits for a countdown. The code reaches only the person.",
|
|
24314
|
+
"descriptionKey": "ui.agent.verifyIdentity.workflows.verifySmsCode",
|
|
24315
|
+
"uiActions": [],
|
|
24316
|
+
"apiActions": [
|
|
24317
|
+
"user.sendSmsCode",
|
|
24318
|
+
"user.verifySmsCode"
|
|
24319
|
+
]
|
|
24320
|
+
},
|
|
24321
|
+
{
|
|
24322
|
+
"name": "verify_email_code",
|
|
24323
|
+
"safety": "write",
|
|
24324
|
+
"description": "Send a code to the current login email when the step opens, and check it (`data-step=\"email\"`, `data-action=\"verify\"`). Needed before turning on the authenticator app or confirming or replacing the mobile. Resend (`data-action=\"resend-code\"`) waits for a countdown.",
|
|
24325
|
+
"descriptionKey": "ui.agent.verifyIdentity.workflows.verifyEmailCode",
|
|
24326
|
+
"uiActions": [],
|
|
24327
|
+
"apiActions": [
|
|
24328
|
+
"user.sendEmailCode",
|
|
24329
|
+
"user.verifyEmailCode"
|
|
24330
|
+
]
|
|
24331
|
+
},
|
|
24332
|
+
{
|
|
24333
|
+
"name": "set_up_mobile",
|
|
24334
|
+
"safety": "read",
|
|
24335
|
+
"description": "Start confirming a mobile, offered when the user has none (`data-state=\"missing-factor\"`, `data-action=\"set-up-mobile\"`). It opens the host's own mobile set-up.",
|
|
24336
|
+
"descriptionKey": "ui.agent.verifyIdentity.workflows.setUpMobile",
|
|
24337
|
+
"uiActions": [],
|
|
24338
|
+
"apiActions": []
|
|
24339
|
+
},
|
|
24340
|
+
{
|
|
24341
|
+
"name": "change_email",
|
|
24342
|
+
"safety": "write",
|
|
24343
|
+
"description": "Submit the new login email, typed twice (`data-component=\"change-email-dialog\"`, `data-action=\"submit\"`), once the person has verified. The host checks it, then sends a warning to the current address with a link to cancel the change.",
|
|
24344
|
+
"descriptionKey": "ui.agent.verifyIdentity.workflows.changeEmail",
|
|
24345
|
+
"uiActions": [],
|
|
24346
|
+
"apiActions": [
|
|
24347
|
+
"user.changeEmail"
|
|
24348
|
+
]
|
|
24349
|
+
}
|
|
24350
|
+
]
|
|
24351
|
+
},
|
|
24248
24352
|
{
|
|
24249
24353
|
"kind": "pattern",
|
|
24250
24354
|
"id": "warehouse",
|
package/dist/agent-i18n/en.json
CHANGED
|
@@ -2161,6 +2161,17 @@
|
|
|
2161
2161
|
"confirmUpgrade": "Confirm the upgrade — add the configured package to the practice subscription and bill the prorated partial period. Persists a billing change."
|
|
2162
2162
|
}
|
|
2163
2163
|
},
|
|
2164
|
+
"verifyIdentity": {
|
|
2165
|
+
"workflows": {
|
|
2166
|
+
"readFlow": "Read where the flow stands. The root (`data-component=\"verify-identity\"`) carries `data-state`: the current step (`password`, `authenticator`, `sms` or `email`), `missing-factor` when the user has no confirmed mobile, or `verified` after the last step. `data-step-index` and `data-step-count` give the position, and `data-submitting` is `true` while a check or a send is out. In the change-email dialog (`data-component=\"change-email-dialog\"`) `data-state` is `new-email` or `done`. A wrong, expired or rate-limited answer shows inline under the field (`data-slot=\"error\"`); a failed send shows `data-slot=\"send-failed\"` or `data-slot=\"send-limited\"`.",
|
|
2167
|
+
"verifyPassword": "Confirm the password (`data-step=\"password\"`, `data-action=\"verify\"`). The person types it themselves; it is passed only to the host, which checks it.",
|
|
2168
|
+
"verifyAuthenticatorCode": "Confirm the code from the authenticator app (`data-step=\"authenticator\"`, `data-action=\"verify\"`). The person reads it from their app and types it.",
|
|
2169
|
+
"verifySmsCode": "Send a code by SMS to the confirmed mobile when the step opens, and check it (`data-step=\"sms\"`, `data-action=\"verify\"`). Resend (`data-action=\"resend-code\"`) waits for a countdown. The code reaches only the person.",
|
|
2170
|
+
"verifyEmailCode": "Send a code to the current login email when the step opens, and check it (`data-step=\"email\"`, `data-action=\"verify\"`). Needed before turning on the authenticator app or confirming or replacing the mobile. Resend (`data-action=\"resend-code\"`) waits for a countdown.",
|
|
2171
|
+
"setUpMobile": "Start confirming a mobile, offered when the user has none (`data-state=\"missing-factor\"`, `data-action=\"set-up-mobile\"`). It opens the host's own mobile set-up.",
|
|
2172
|
+
"changeEmail": "Submit the new login email, typed twice (`data-component=\"change-email-dialog\"`, `data-action=\"submit\"`), once the person has verified. The host checks it, then sends a warning to the current address with a link to cancel the change."
|
|
2173
|
+
}
|
|
2174
|
+
},
|
|
2164
2175
|
"warehouse": {
|
|
2165
2176
|
"workflows": {
|
|
2166
2177
|
"filterInventory": "Narrow the inventory by product, SKU, category, supplier or stock status using the per-column filters.",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as e, a as n, p, u as s } from "../../_chunks/use-appointment-details-read-
|
|
1
|
+
import { A as e, a as n, p, u as s } from "../../_chunks/use-appointment-details-read-DvK7Looa.js";
|
|
2
2
|
export {
|
|
3
3
|
e as AppointmentDetailsPanel,
|
|
4
4
|
n as appointmentDetailsPanelAgent,
|
|
@@ -243,6 +243,7 @@ export * from '../patterns/reset-password-form';
|
|
|
243
243
|
export * from '../patterns/send-registration-link-form';
|
|
244
244
|
export * from '../patterns/signature-request';
|
|
245
245
|
export * from '../patterns/signed-out-frame';
|
|
246
|
+
export * from '../patterns/verify-identity';
|
|
246
247
|
export * from '../patterns/workflow-webhook-action';
|
|
247
248
|
export * from './dependent-selector';
|
|
248
249
|
export * from './document-preview';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,6 +87,18 @@ export interface PracticeResult {
|
|
|
87
87
|
value: number;
|
|
88
88
|
count: number;
|
|
89
89
|
};
|
|
90
|
+
/**
|
|
91
|
+
* Newest approved review that has text, shown as one line under the
|
|
92
|
+
* rating: "Latest review: {text}". Pass only text that passed moderation.
|
|
93
|
+
* `lang` is the language the review was written in (BCP 47); it is set on
|
|
94
|
+
* the text only, never the label. The text is cut to one line with an
|
|
95
|
+
* ellipsis by CSS, and the full text stays in the DOM. Leave it out, or
|
|
96
|
+
* pass empty text, and no line is drawn.
|
|
97
|
+
*/
|
|
98
|
+
latestReview?: {
|
|
99
|
+
text: string;
|
|
100
|
+
lang?: string;
|
|
101
|
+
};
|
|
90
102
|
/** ISO 639-1 codes. Rendered as chips by rich-cards. */
|
|
91
103
|
languages?: string[];
|
|
92
104
|
/** Short brand names. Rendered as chips by rich-cards. */
|
|
@@ -259,6 +271,22 @@ export interface PracticeResultsProps extends Omit<ComponentPropsWithoutRef<'div
|
|
|
259
271
|
loadingMore?: boolean;
|
|
260
272
|
value: PracticeResultsValue;
|
|
261
273
|
onChange: (next: PracticeResultsValue) => void;
|
|
274
|
+
/**
|
|
275
|
+
* Sort choices to offer, shown in the kit's own order. Default (left out):
|
|
276
|
+
* all of them. Leave out `'price'` to hide the first-visit price sort.
|
|
277
|
+
*
|
|
278
|
+
* - An empty list, or one with no known sort, fails closed: no sort chip
|
|
279
|
+
* is rendered and the list uses the default sort.
|
|
280
|
+
* - An active sort that is not offered falls back to the default sort
|
|
281
|
+
* (Distance with `searchCentre`, otherwise Relevance), or to the first
|
|
282
|
+
* offered sort when the default is not offered. This also applies to an
|
|
283
|
+
* unknown `value.sort`, with or without `sortOptions`.
|
|
284
|
+
* - The fallback fires no `onChange` and no `serp_sort_changed`. The next
|
|
285
|
+
* `onChange` (for example a filter change) carries the resolved sort.
|
|
286
|
+
* - Drop a hidden sort from your own state (for example an old
|
|
287
|
+
* `?sort=price` URL) so your resolved sort matches the kit's.
|
|
288
|
+
*/
|
|
289
|
+
sortOptions?: readonly PracticeResultsSort[];
|
|
262
290
|
onResultSelect: (result: PracticeResult, source: PracticeResultsSelectSource) => void;
|
|
263
291
|
/**
|
|
264
292
|
* Initial loading skeletons. Per SSR-first design, skeletons render
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"practice-results.d.ts","sourceRoot":"","sources":["../../../src/components/practice-results/practice-results.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"practice-results.d.ts","sourceRoot":"","sources":["../../../src/components/practice-results/practice-results.tsx"],"names":[],"mappings":"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"}
|