Skip to content

UI: дизайн-система для QueryaDropdown (триггер, меню, hover, selected) #89

Description

@ZhuchkaTriplesix

Контекст

Продолжение #87 / PR #88: базовый QueryaDropdown на MenuAnchor внедрён. Следующий шаг — единая дизайн-система для триггеров и панелей меню, чтобы интерфейс ощущался дорогим и проработанным в рамках clean, dark UI (спокойный контраст, выверенные отступы).

Точка входа в код: lib/shared/widgets/querya_dropdown.dart

Цель

Привести все выпадающие списки (dropdowns) и кнопки их вызова (triggers) к единому визуальному стандарту на всех экранах. Консистентность размеров, типографики, отступов и hover-анимаций — премиальность десктопного UI.

Единые метрики и токены (Design System)

Зафиксировать константы в общих стилях (предпочтительно рядом с QueryaDropdown или в lib/core/theme/ / shared tokens), значения по умолчанию:

Элемент UI Свойство Значение
Trigger Height 32.0
Trigger Padding horizontal: 12.0, vertical: 8.0
Menu panel Shadow мягкая тень (blurRadius: 8.0, color: Colors.black26 или токен)
Menu panel Offset от trigger Y: 4.0
Menu item Height 28.0
Menu item Padding horizontal: 8.0, vertical: 4.0
Typography Font size 13.0 или 14.0
Border radius Panel + items 6.0

Цвета, hover и selected — через Theme.of(context).colorScheme (shadcn): muted, accent, popover, border, foreground.

Требования к анатомии компонентов

Trigger

  • Иконка chevron-down справа у каждого trigger
  • Фиксированный зазор текст ↔ иконка: SizedBox(width: 8)
  • Раскладка: текст слева, chevron у правого края (MainAxisAlignment.spaceBetween или эквивалент)
  • Высота и padding по таблице выше

Menu items

  • Hover: плавная смена фона на muted / accent; курсор SystemMouseCursors.click
  • Selected: галочка (check) слева или жирное начертание — активная опция видна сразу
  • Высота и padding по таблице

Панель меню

  • alignmentOffset строго (0, 4) под trigger
  • При > 8–10 пунктах: maxHeight300.0, внутренний скролл со аккуратным scrollbar
  • Скругление 6.0, мягкая тень

Зоны покрытия рефакторинга

Применить стандарт через обновление QueryaDropdown (и при необходимости тонких обёрток), затем проверить/подтянуть:

Зона Путь
Новое подключение lib/features/connections/ — селектор драйвера (PostgreSQL, MySQL, Redis, MongoDB)
Workspaces lib/features/postgresql/, mysql/ и др. — лимит строк, текущая БД/схема
Глобальные настройки lib/features/settings/ — тема (Light/Dark/System), пресеты, таймауты, max rows

Acceptance criteria

  • Константы дизайн-системы вынесены в одно место и используются в QueryaDropdown
  • Trigger: 32px, padding, chevron, space-between
  • Menu: offset Y=4, radius 6, shadow, scroll при длинных списках
  • Items: 28px, hover + selected (check или bold)
  • Визуально одинаково в connections, workspaces, preferences (smoke на Win/macOS/Linux)
  • Widget-тесты на ключевые метрики / selected state (по аналогии с test/shared/querya_dropdown_test.dart)
  • flutter analyze и flutter test зелёные

Вне scope (отдельные issues)

  • Замена ContextMenu / MenuButton в connections panel и menubar
  • Тема «Cyberpunk» как отдельный пресет (в ТЗ упомянута — только если пресет уже есть в roadmap)

Связанные issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions