diff --git a/app/javascript/packages/document-capture/components/_file-input.scss b/app/javascript/packages/document-capture/components/_file-input.scss index 5288954a675..1b40bc4e61e 100644 --- a/app/javascript/packages/document-capture/components/_file-input.scss +++ b/app/javascript/packages/document-capture/components/_file-input.scss @@ -17,22 +17,11 @@ border-width: 3px; } -.usa-file-input:not( - .usa-file-input--has-value, - .usa-file-input--value-pending, - .usa-file-input--is-id-capture - ) - .usa-file-input__target, -.usa-form-group--error .usa-file-input .usa-file-input__target, -.usa-form-group--success .usa-file-input .usa-file-input__target { - height: 21rem; - width: 12rem; -} - .usa-file-input:not(.usa-file-input--has-value, .usa-file-input--value-pending) { .usa-file-input__target { border-color: color('primary'); border-radius: 0.375rem; + &:hover { border-color: color('primary-dark'); } @@ -63,7 +52,6 @@ display: block; letter-spacing: 0.4px; line-height: 1.5; - // For content to appear as vertically centered, offset the larger line-height of the banner to // match the space below the drag text. margin-top: ((1.5rem - size('body', '2xs')) - ((1.625rem * 1.5) - 1.625rem)) * 0.5; @@ -87,17 +75,7 @@ width: 100%; } } -.usa-file-input.usa-file-input--single-value:not(.usa-file-input--is-id-capture) { - .usa-file-input__preview { - width: 12rem; - } - .usa-file-input__target { - width: 12rem; - } - .usa-file-input__preview-image { - width: 12rem; - } -} + .usa-file-input__input:not([disabled]):focus { outline: 3px solid color('primary'); outline-offset: 6px; diff --git a/app/javascript/packages/document-capture/components/document-capture.tsx b/app/javascript/packages/document-capture/components/document-capture.tsx index 0f63e720588..cdba4f534e2 100644 --- a/app/javascript/packages/document-capture/components/document-capture.tsx +++ b/app/javascript/packages/document-capture/components/document-capture.tsx @@ -70,7 +70,7 @@ function DocumentCapture({ onStepChange = () => {} }: DocumentCaptureProps) { title: t('doc_auth.headings.selfie_capture'), }; const documentsFormSteps: FormStep[] = - docAuthSeparatePagesEnabled && isSelfieCaptureEnabled && submissionError === undefined + isSelfieCaptureEnabled && docAuthSeparatePagesEnabled && submissionError === undefined ? [documentFormStep, selfieFormStep] : [documentAndSelfieFormStep]; const reviewFormStep: FormStep = { diff --git a/app/javascript/packages/document-capture/components/documents-step.tsx b/app/javascript/packages/document-capture/components/documents-step.tsx index 5833f7d515a..c9d32c596ff 100644 --- a/app/javascript/packages/document-capture/components/documents-step.tsx +++ b/app/javascript/packages/document-capture/components/documents-step.tsx @@ -1,10 +1,11 @@ import { useContext } from 'react'; import { useI18n } from '@18f/identity-react-i18n'; import { FormStepComponentProps, FormStepsButton } from '@18f/identity-form-steps'; +import { PageHeading } from '@18f/identity-components'; import { Cancel } from '@18f/identity-verify-flow'; import HybridDocCaptureWarning from './hybrid-doc-capture-warning'; import TipList from './tip-list'; -import { DeviceContext, UploadContext } from '../context'; +import { DeviceContext, SelfieCaptureContext, UploadContext } from '../context'; import { ImageValue, DefaultSideProps, @@ -37,7 +38,13 @@ export function DocumentsCaptureStep({ export function DocumentCaptureSubheaderOne() { const { t } = useI18n(); - return

{t('doc_auth.headings.document_capture')}

; + return ( +

+
+ {'1. '} + {t('doc_auth.headings.document_capture_subheader_id')} +

+ ); } export default function DocumentsStep({ @@ -50,6 +57,10 @@ export default function DocumentsStep({ const { t } = useI18n(); const { isMobile } = useContext(DeviceContext); const { flowPath } = useContext(UploadContext); + const { isSelfieCaptureEnabled } = useContext(SelfieCaptureContext); + const pageHeaderText = isSelfieCaptureEnabled + ? t('doc_auth.headings.document_capture_with_selfie') + : t('doc_auth.headings.document_capture'); const defaultSideProps: DefaultSideProps = { registerField, onChange, @@ -59,6 +70,7 @@ export default function DocumentsStep({ return ( <> {flowPath === 'hybrid' && } + {pageHeaderText} ) { // they don't have a preview. This shows the name of the file in the upload // box (using the existing preview) when the file name ends with .yml const isYAMLFile: boolean = value instanceof window.File && value.name.endsWith('.yml'); - const isIdCapture: boolean = !(label === t('doc_auth.headings.document_capture_selfie')); + /** * In response to a file input change event, confirms that the file is valid before calling * `onChange`. @@ -387,7 +387,6 @@ function FileInput(props: FileInputProps, ref: ForwardedRef) { isDraggingOver && 'usa-file-input--drag', value && !isValuePending && 'usa-file-input--has-value', isValuePending && 'usa-file-input--value-pending', - isIdCapture && 'usa-file-input--is-id-capture', ] .filter(Boolean) .join(' ')} diff --git a/app/javascript/packages/document-capture/components/selfie-step.tsx b/app/javascript/packages/document-capture/components/selfie-step.tsx index 2842a9c093e..0cecb7e3c91 100644 --- a/app/javascript/packages/document-capture/components/selfie-step.tsx +++ b/app/javascript/packages/document-capture/components/selfie-step.tsx @@ -5,6 +5,7 @@ import { FormStepsButton, FormStepsContext, } from '@18f/identity-form-steps'; +import { PageHeading } from '@18f/identity-components'; import { Cancel } from '@18f/identity-verify-flow'; import HybridDocCaptureWarning from './hybrid-doc-capture-warning'; import DocumentSideAcuantCapture from './document-side-acuant-capture'; @@ -26,7 +27,8 @@ export function SelfieCaptureStep({ const { t } = useI18n(); return ( <> -

{t('doc_auth.headings.document_capture_subheader_selfie')}

+
+

2. {t('doc_auth.headings.document_capture_subheader_selfie')}

{t('doc_auth.info.selfie_capture_content')}

{}, registerField = () => undefined, }: FormStepComponentProps) { + const { t } = useI18n(); const { isLastStep } = useContext(FormStepsContext); const { flowPath } = useContext(UploadContext); + const pageHeaderText = t('doc_auth.headings.document_capture_with_selfie'); const defaultSideProps: DefaultSideProps = { registerField, @@ -67,6 +71,7 @@ export default function SelfieStep({ return ( <> {flowPath === 'hybrid' && } + {pageHeaderText} {isLastStep ? : } diff --git a/config/application.yml.default.docker b/config/application.yml.default.docker index 2e8344dd1fa..4aa054a39ba 100644 --- a/config/application.yml.default.docker +++ b/config/application.yml.default.docker @@ -40,6 +40,3 @@ production: lexisnexis_threatmetrix_mock_enabled: true enable_usps_verification: true seed_agreements_data: false - doc_auth_separate_pages_enabled: true - doc_auth_selfie_capture_enabled: true - biometric_ial_enabled: true \ No newline at end of file diff --git a/config/locales/en.yml b/config/locales/en.yml index 7f69539c5e5..a94e96cf5fb 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -579,7 +579,7 @@ doc_auth.headings.document_capture_back: Back of your ID doc_auth.headings.document_capture_front: Front of your ID doc_auth.headings.document_capture_selfie: Photo of your face doc_auth.headings.document_capture_subheader_id: Driver’s license or state ID card -doc_auth.headings.document_capture_subheader_selfie: Add a photo of your face +doc_auth.headings.document_capture_subheader_selfie: Photo of your face doc_auth.headings.document_capture_with_selfie: Add photos of your ID and a photo of yourself doc_auth.headings.front: Front of your driver’s license or state ID doc_auth.headings.how_to_verify: Choose how you want to verify your identity @@ -679,16 +679,16 @@ doc_auth.instructions.text2: You will not need your physical SSN card. doc_auth.instructions.text3: We match your phone number with your personal information and send a one-time code to your phone. doc_auth.instructions.text4: Your password saves and encrypts your personal information. doc_auth.tips.document_capture_hint: Must be a JPG or PNG -doc_auth.tips.document_capture_id_text1: Use a flat and dark surface -doc_auth.tips.document_capture_id_text2: Take photos in a well-lit place -doc_auth.tips.document_capture_id_text3: Avoid glare or shadows +doc_auth.tips.document_capture_id_text1: Place your ID on a flat and dark surface. +doc_auth.tips.document_capture_id_text2: Take your photo in a well-lit place. +doc_auth.tips.document_capture_id_text3: Avoid glare or shadows on your ID. doc_auth.tips.document_capture_id_text4: File size should be at least 2 MB. -doc_auth.tips.document_capture_selfie_id_header_text: How to take clear photos +doc_auth.tips.document_capture_selfie_id_header_text: How to take clear photos of your ID doc_auth.tips.document_capture_selfie_selfie_text: How to prepare for your photo -doc_auth.tips.document_capture_selfie_text1: Remove any items covering your face, like glasses or a hat -doc_auth.tips.document_capture_selfie_text2: Take photo in a well-lit place -doc_auth.tips.document_capture_selfie_text3: Keep your expression neutral -doc_auth.tips.document_capture_selfie_text4: Make sure your whole face is visible within the green circle +doc_auth.tips.document_capture_selfie_text1: Remove any clothing items or accessories that might cover your face. We suggest removing your glasses or hat. +doc_auth.tips.document_capture_selfie_text2: Take your photo in a well-lit place. +doc_auth.tips.document_capture_selfie_text3: Keep your expression neutral. +doc_auth.tips.document_capture_selfie_text4: Make sure your whole face is visible within the green circle. doc_auth.tips.mobile_phone_required: Mobile Phone Required doc_auth.tips.review_issues_id_header_text: 'Review the images of your state‑issued ID:' doc_auth.tips.review_issues_id_text1: Did you use a dark background? diff --git a/config/locales/es.yml b/config/locales/es.yml index 6b6f6cb2df9..6833ee083d8 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -590,7 +590,7 @@ doc_auth.headings.document_capture_back: Reverso de su identificación doc_auth.headings.document_capture_front: Frente de su identificación doc_auth.headings.document_capture_selfie: Fotografía de su cara doc_auth.headings.document_capture_subheader_id: Licencia de conducir o identificación estatal -doc_auth.headings.document_capture_subheader_selfie: Añada una foto de su cara +doc_auth.headings.document_capture_subheader_selfie: Fotografía de su cara doc_auth.headings.document_capture_with_selfie: Agregue fotos de su identificación y una foto de usted doc_auth.headings.front: Frente de su licencia de conducir o identificación estatal doc_auth.headings.how_to_verify: Elija cómo desea verificar su identidad @@ -690,15 +690,15 @@ doc_auth.instructions.text2: No necesita la tarjeta física del Seguro Social. doc_auth.instructions.text3: Revisamos que su número de teléfono coincida con su información personal y enviamos un código de un solo uso a su teléfono. doc_auth.instructions.text4: Su contraseña guarda y cifra su información personal. doc_auth.tips.document_capture_hint: Debe ser un archivo JPG o PNG -doc_auth.tips.document_capture_id_text1: Use una superficie plana y de color oscuro. -doc_auth.tips.document_capture_id_text2: Tome fotos en un lugar bien iluminado -doc_auth.tips.document_capture_id_text3: Evite que se vean reflejos o sombras +doc_auth.tips.document_capture_id_text1: Coloque su identificación en una superficie plana y de color oscuro. +doc_auth.tips.document_capture_id_text2: Tómese la foto en un lugar bien iluminado. +doc_auth.tips.document_capture_id_text3: Evite que se vean reflejos o sombras en su identificación. doc_auth.tips.document_capture_id_text4: El tamaño del archivo debe ser de al menos 2 MB. -doc_auth.tips.document_capture_selfie_id_header_text: Cómo tomar fotos nítidas +doc_auth.tips.document_capture_selfie_id_header_text: Cómo tomar fotos nítidas de su identificación doc_auth.tips.document_capture_selfie_selfie_text: Cómo prepararse para tomar su foto -doc_auth.tips.document_capture_selfie_text1: Quite cualquier prenda o accesorio que pueda cubrirle la cara, como anteojos o un sombrero. -doc_auth.tips.document_capture_selfie_text2: Tómese la foto en un lugar bien iluminado -doc_auth.tips.document_capture_selfie_text3: Mantenga una expresión neutral +doc_auth.tips.document_capture_selfie_text1: Quite cualquier prenda o accesorio que pueda cubrirle la cara. Sugerimos que se quite los anteojos o el sombrero. +doc_auth.tips.document_capture_selfie_text2: Tómese la foto en un lugar bien iluminado. +doc_auth.tips.document_capture_selfie_text3: Mantenga una expresión neutral. doc_auth.tips.document_capture_selfie_text4: Revise que se vea su rostro completo dentro del círculo verde. doc_auth.tips.mobile_phone_required: Se necesita un teléfono móvil doc_auth.tips.review_issues_id_header_text: 'Revise las imágenes de su identificación emitida por el estado:' diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 89c9f0bc371..2bf5eaeb887 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -579,7 +579,7 @@ doc_auth.headings.document_capture_back: Verso de votre pièce d’identité doc_auth.headings.document_capture_front: Recto de votre carte d’identité doc_auth.headings.document_capture_selfie: Photo de votre visage doc_auth.headings.document_capture_subheader_id: Permis de conduire ou carte d’identité d’un État -doc_auth.headings.document_capture_subheader_selfie: Ajouter une photo de votre visage +doc_auth.headings.document_capture_subheader_selfie: Photo de votre visage doc_auth.headings.document_capture_with_selfie: Ajouter des photos de votre pièce d’identité et une photo de vous-même doc_auth.headings.front: Recto de votre permis de conduire ou de votre carte d’identité d’un État doc_auth.headings.how_to_verify: Choisir la manière dont vous souhaitez confirmer votre identité @@ -679,16 +679,16 @@ doc_auth.instructions.text2: Vous n’aurez pas besoin de votre carte de sécuri doc_auth.instructions.text3: Nous comparons votre numéro de téléphone à vos informations personnelles et vous envoyons un code à usage unique sur votre téléphone. doc_auth.instructions.text4: Votre mot de passe s’enregistre et chiffre vos informations personnelles. doc_auth.tips.document_capture_hint: Doit être au format JPG ou PNG -doc_auth.tips.document_capture_id_text1: Utilisez une surface plane et foncée -doc_auth.tips.document_capture_id_text2: Prenez vos photos dans un endroit bien éclairé -doc_auth.tips.document_capture_id_text3: Évitez les reflets ou les ombres +doc_auth.tips.document_capture_id_text1: Placez votre pièce d’identité sur une surface plane et sombre. +doc_auth.tips.document_capture_id_text2: Prenez votre photo dans un endroit bien éclairé. +doc_auth.tips.document_capture_id_text3: Évitez les reflets et les ombres sur votre pièce d’identité. doc_auth.tips.document_capture_id_text4: La taille du fichier doit être d’au moins 2 Mo. -doc_auth.tips.document_capture_selfie_id_header_text: Comment prendre des photos nettes +doc_auth.tips.document_capture_selfie_id_header_text: Comment prendre des photos nettes de votre pièce d’identité doc_auth.tips.document_capture_selfie_selfie_text: Comment vous préparer pour prendre la photo de vous-même -doc_auth.tips.document_capture_selfie_text1: Enlevez tout ce qui cache votre visage (lunettes, couvre-chef, etc.) -doc_auth.tips.document_capture_selfie_text2: Prenez votre photo dans un endroit bien éclairé -doc_auth.tips.document_capture_selfie_text3: Gardez une expression neutre -doc_auth.tips.document_capture_selfie_text4: Assurez-vous que l’ensemble de votre visage est visible dans le cercle vert +doc_auth.tips.document_capture_selfie_text1: Retirez tous articles ou accessoires vestimentaires susceptibles de cacher votre visage. Nous vous conseillons de retirer vos lunettes ou votre couvre-chef. +doc_auth.tips.document_capture_selfie_text2: Prenez votre photo dans un endroit bien éclairé. +doc_auth.tips.document_capture_selfie_text3: Gardez une expression neutre. +doc_auth.tips.document_capture_selfie_text4: Assurez-vous que l’ensemble de votre visage soit visible à l’intérieur du cercle vert. doc_auth.tips.mobile_phone_required: Téléphone mobile nécessaire doc_auth.tips.review_issues_id_header_text: 'Examinez les images de votre carte d’identité délivrée par l’État :' doc_auth.tips.review_issues_id_text1: Avez-vous utilisé un arrière-plan de couleur sombre ? diff --git a/config/locales/zh.yml b/config/locales/zh.yml index 6a2a2c788f9..97ddc9d565a 100644 --- a/config/locales/zh.yml +++ b/config/locales/zh.yml @@ -590,7 +590,7 @@ doc_auth.headings.document_capture_back: 你身份证件的背面 doc_auth.headings.document_capture_front: 你身份证件的正面 doc_auth.headings.document_capture_selfie: 你面部照片 doc_auth.headings.document_capture_subheader_id: 驾照或州政府颁发的身份证件 -doc_auth.headings.document_capture_subheader_selfie: 添加您面部照片 +doc_auth.headings.document_capture_subheader_selfie: 你本人照片 doc_auth.headings.document_capture_with_selfie: 添加你身份证件和本人的照片 doc_auth.headings.front: 驾照或州政府颁发身份证件的正面 doc_auth.headings.how_to_verify: 选择你想如何验证身份 @@ -690,16 +690,16 @@ doc_auth.instructions.text2: 不需要你社会保障卡实体。 doc_auth.instructions.text3: 我们把你的电话号码与个人信息匹配,并向你的电话发送一个一次性代码。 doc_auth.instructions.text4: 你的密码对你个人信息进行存储并加密。 doc_auth.tips.document_capture_hint: 必须是 JPG 或 PNG -doc_auth.tips.document_capture_id_text1: 使用水平和深色表面 -doc_auth.tips.document_capture_id_text2: 在光线明亮的地方拍照 -doc_auth.tips.document_capture_id_text3: 避免炫光或阴影 +doc_auth.tips.document_capture_id_text1: 把你身份证件放在一个平坦、暗色的表面上。 +doc_auth.tips.document_capture_id_text2: 在光线明亮的地方拍照。 +doc_auth.tips.document_capture_id_text3: 避免身份证件上有炫光或阴影。 doc_auth.tips.document_capture_id_text4: 文件大小应当至少 2 兆。 -doc_auth.tips.document_capture_selfie_id_header_text: 如何拍摄清晰照片 +doc_auth.tips.document_capture_selfie_id_header_text: 如何拍摄你身份证件的清晰照片 doc_auth.tips.document_capture_selfie_selfie_text: 如何准备拍照 -doc_auth.tips.document_capture_selfie_text1: 摘掉任何遮盖您面孔的东西,比如眼镜或帽子 -doc_auth.tips.document_capture_selfie_text2: 在光线明亮的地方拍照 -doc_auth.tips.document_capture_selfie_text3: 保持中性表情 -doc_auth.tips.document_capture_selfie_text4: 确保您整个面孔都可以在绿色圆圈里看到 +doc_auth.tips.document_capture_selfie_text1: 摘掉可能盖住你面部的任何服饰。我们建议你摘掉眼镜和帽子。 +doc_auth.tips.document_capture_selfie_text2: 在光线明亮的地方拍照。 +doc_auth.tips.document_capture_selfie_text3: 面部表情保持中性。 +doc_auth.tips.document_capture_selfie_text4: 确保你整个面部都可以在绿色圆圈中看到。 doc_auth.tips.mobile_phone_required: 要求有手机 doc_auth.tips.review_issues_id_header_text: 请仔细查看你州政府颁发身份证件的图像: doc_auth.tips.review_issues_id_text1: 你是否使用了暗色背景? diff --git a/spec/javascript/packages/document-capture/components/documents-and-selfie-step-spec.tsx b/spec/javascript/packages/document-capture/components/documents-and-selfie-step-spec.tsx index a344d3198be..482ad5ca2be 100644 --- a/spec/javascript/packages/document-capture/components/documents-and-selfie-step-spec.tsx +++ b/spec/javascript/packages/document-capture/components/documents-and-selfie-step-spec.tsx @@ -172,8 +172,8 @@ describe('document-capture/components/documents-and-selfie-step', () => { level: 2, }); const selfieHeader = getByRole('heading', { - name: 'doc_auth.headings.document_capture_subheader_selfie', - level: 1, + name: '2. doc_auth.headings.document_capture_subheader_selfie', + level: 2, }); expect(front).to.be.ok(); expect(back).to.be.ok();