Skip to content

[UI] Убрать артефакт автозаполнения (светло-голубой фон) в InputPassword #66

@kapitulin24

Description

@kapitulin24

Контекст

После автозаполнения пароля менеджером паролей / браузером поле InputPassword отображается с светло-голубым фоном (:-webkit-autofill), который не совпадает с дизайном InputGroup (прозрачный InputGroupInput, общая рамка и фон группы). Визуально фон «заливает» только область <input>, из‑за чего ломается цельный вид компонента: контраст с бордером InputGroup, рассинхрон с кнопкой «глаз» справа.

Воспроизведение (по скриншоту):

  1. Открыть форму регистрации (SignupForm, /signup).
  2. Сохранить пароль в браузере или вызвать autofill для полей «Пароль» / «Повторите пароль» (autoComplete="new-password").
  3. Обновить страницу или снова сфокусировать поле — в поле «Пароль» появляется голубой фон autofill, маскированные символы (••••), иконка скрытия пароля остаётся на месте.

Скриншот: приложен (голубой фон внутри InputGroup, фокус с синей обводкой).
Image

Затронутые места:

  • src/shared/ui/input-password/InputPassword.tsx
  • src/shared/ui/InputGroup.tsxInputGroupInput
  • src/pages/auth/signup/ui/SignupForm.tsx (основной кейс на скрине)
  • src/pages/auth/signin/ui/SigninForm.tsx
  • src/pages/auth/forgot-password/ui/PasswordForm.tsx

В кодовой базе нет переопределения :-webkit-autofill — браузерные стили применяются «как есть».


Технические требования

  • Локация логики: централизованно в shared UI — InputGroupInput и/или InputPassword, при необходимости утилита в src/app/styles/global.css (только для [data-slot="input-group-control"] / password inputs)
  • Инструменты: CSS (:-webkit-autofill, hover/focus/active), CSS-переменные темы (--background, --foreground, --input), Tailwind v4, Storybook (input-password.stories.ts)
  • Логика работы:
    1. Переопределить фон и цвет текста autofill через design tokens (light + .dark), чтобы поле визуально совпадало с обычным состоянием InputGroup (без отдельного голубого «пятна»).
    2. Использовать устойчивый паттерн подавления браузерного фона: inset box-shadow с цветом фона темы + при необходимости transition: background-color 9999s (или эквивалент без мигания жёлтого/голубого при снятии autofill).
    3. Сохранить прозрачность input внутри группы: autofill не должен рисовать свой background-color поверх/вместо фона InputGroup.
    4. Проверить оба поля на /signupshowEyeIcon и без — confirmPassword), переключение видимости пароля, focus/hover, aria-invalid.
    5. Не отключать autofill (autocomplete="off" не использовать) — только визуальная коррекция.

Цель и критерии приемки (Definition of Done)

  • Функционал: После autofill поле «Пароль» на /signup не имеет светло-голубого фона браузера; вид совпадает с незаполненным полем в той же теме.
  • Функционал: InputGroup: единая рамка, фон группы и input без «внутреннего прямоугольника» другого цвета; иконка «глаз» визуально на одном уровне с полем.
  • Темы: Корректно в light и dark (если autofill на тёмной теме даёт другой оттенок — тоже выровнять).
  • Регрессия: /signin, /forgot-password — то же поведение; обычные Input без autofill-правок не ломаются (если стили узкие — только password / input-group-control).
  • Интеграция: Ручная проверка Chrome + Safari; Firefox — по возможности.
  • Документация: В PR — до/после (скрин из задачи + исправленный вариант).

Важные указания

  • Производительность: только CSS, без JS.
  • Ошибки: Красный лейбл/ошибки валидации (Field, FieldError) — отдельная логика форм; в scope задачи только autofill-стили, не менять правила Zod/React Hook Form.
  • Безопасность: не логировать значения пароля; autoComplete оставить (new-password, current-password).
  • Доступность: контраст текста и focus-visible после правок ≥ WCAG AA.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions