fix(ui): remove TopBar search (final) + add clear X to catalog input

User clarification after MR !91:
- "Search из TopBar убран — все верно" — TopBar search должен быть удалён.
- "TopBar search вернулся. убери его" — MR !91 ошибочно его вернул.
- "два крестика баг в топбаре был а ты и в таблице убрал его" — двойной X
  was в TopBar (native + custom); в catalog был только custom X на
  старом input. После refactor catalog input получился без X совсем —
  fix: добавил кастомный clear button когда q непустой.

Changes:
- TopBar: removed form + SearchInput + handlers (handleSearchInput /
  Submit / Clear / inputRef / useState). Removed useEffect ⌘K shortcut
  (без search input nothing to focus). Right cluster: Docs +
  VersionBadge + NotificationsBell. ml-auto на right cluster чтобы
  push'ить вправо без search в центре.
- Catalog input: добавлен absolute-positioned X (✕) справа input'а
  когда `search.q` непустой. `pr-7` на input чтобы текст не наезжал.
  Clear → `setSearch({ q: undefined })`. Single X confirmed visually.
This commit is contained in:
Zimin A.N.
2026-05-11 22:07:00 +03:00
parent 7e44df3493
commit 7f3241686c
2 changed files with 18 additions and 95 deletions
@@ -232,9 +232,9 @@ function DictionariesPage() {
* Узкая: px-3 py-1.5 (~6px vertical) — per user feedback ("бар поужать"). */}
<div className="flex flex-wrap items-center gap-2 bg-surface-2 border-b border-line px-3 py-1.5">
{/* Catalog search — filter dicts by name/displayName/description.
* type="text" (не "search") чтобы избежать native X — мы рендерим
* свой clear button если нужно. */}
<div className="flex-1 min-w-[200px] max-w-xs">
* type="text" чтобы избежать native browser X — рендерим свой
* custom clear button справа когда есть value. Single X. */}
<div className="flex-1 min-w-[200px] max-w-xs relative">
<input
type="text"
value={search.q ?? ''}
@@ -247,8 +247,18 @@ function DictionariesPage() {
aria-label={t('dict.list.search.placeholder', {
defaultValue: 'Поиск по справочникам…',
})}
className="h-8 w-full px-2.5 rounded-md border border-line bg-surface text-cell text-ink placeholder:text-mute focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent"
className={`h-8 w-full px-2.5 ${search.q ? 'pr-7' : ''} rounded-md border border-line bg-surface text-cell text-ink placeholder:text-mute focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`}
/>
{search.q && (
<button
type="button"
onClick={() => setSearch({ q: undefined })}
aria-label={t('common.clear', { defaultValue: 'Очистить' })}
className="absolute right-1.5 top-1/2 -translate-y-1/2 text-mute hover:text-ink rounded-sm p-0.5 hover:bg-surface-2"
>
</button>
)}
</div>
{/* Scope filter: PUBLIC / INTERNAL / RESTRICTED — pill chips с border */}