Skip to content

feat(ui): редизайн интерфейса — дизайн-система «Aurora» - #269

Open
Mileeena wants to merge 7 commits into
mainfrom
feat/new-ui
Open

feat(ui): редизайн интерфейса — дизайн-система «Aurora»#269
Mileeena wants to merge 7 commits into
mainfrom
feat/new-ui

Conversation

@Mileeena

Copy link
Copy Markdown
Collaborator

Перевод интерфейса Unlimotion на утверждённую дизайн-систему «Aurora»: тёмная тема по умолчанию + светлая, единые токены, новый лейаут и почищенные экраны. Все дизайн-значения вынесены в отдельные файлы темы, а не зашиты по месту.

Что сделано

Фундамент темы (src/Unlimotion/Theme/)

  • Colors.axaml — семантические цвета через ThemeDictionaries (Dark + Light): поверхности, текст, accent / ready / blocked / teal, бордеры. Акцент Fluent (SystemAccentColor) переопределён на Aurora-фиолет, чтобы стандартные контролы подхватывали его.
  • Tokens.axaml — шкала типографики, спейсинг (сетка 4px), радиусы, размеры контролов. Шрифты временно = Inter/системный моно (см. ниже).
  • Elevation.axaml — тени + зарезервированные glow (ready/accent).
  • TextStyles.axaml — 11 текстовых ролей (heading/task/meta/eyebrow/…).
  • Controls/ — Button, Inputs (TextBox/ComboBox/CalendarDatePicker), AppComponents (status-tag, badge, ready-dot, nav-item, count-pill, goal-row, progress), Icons.axaml.

Лейаут и UX (MainControl)

  • Виды переехали из верхних табов в левый сайдбар (группа VIEWS с иконками) — TabControl остался движком контента, синхронизация выбора в code-behind.
  • Группа GOALS («Цели») с прогресс-барами и % (рекурсивно по поддереву, реактивно).
  • «Настройки» закреплены футером внизу сайдбара.
  • Командная панель: бренд-марка, переключатель темы (с сохранением), «+», аватар.
  • Зелёная ready-точка на действенных задачах во всех видах.
  • Detail rail: статус-теги (Можно делать / Заблокировано / Еженедельно), карта зависимостей с eyebrow-заголовками, переверстанная и упорядоченная карточка (шапка → теги/действия → мета-строка с подписями → описание → планирование → связи).

Экраны

  • Весь хардкод цветов в вьюхах переведён на семантические токены.
  • Фильтр-тулбар: чистая кнопка-фильтр (без «галочки»), эмодзи-фильтры подписаны («Фильтр эмодзи» / «Исключить эмодзи»).
  • Экран настроек: секции оформлены как карточки (фон/рамка/тень), выровнен заголовок.

ViewModel

  • TaskItemViewModel: IsBlocked, GoalProgress/GoalProgressPercent/HasChildren (реактивный пересчёт по всему поддереву через DynamicData).
  • Новый CountToBoolConverter; ключи локализации (en/ru): ReadyNow, Blocked, RepeatsWeekly, ViewsGroup, GoalsGroup, ImportanceHint.

Проверено

Собирается (Desktop), запускается, обе темы рендерятся; навигация по сайдбару, прогресс целей, статус-теги, фильтры и карточка проверены вживую.

Осталось (отдельным шагом)

  • Шрифты: подключить реальные General Sans (UI) и IBM Plex Mono (моно) — сейчас временный фолбэк на Inter (Avalonia не читает поставляемые .woff2; нужны .ttf/.otf, затем поменять 2 ключа в Theme/Tokens.axaml).

Как смотреть

Тёмная/светлая темы (тоггл в топ-баре), сайдбар VIEWS + GOALS, карточка задачи в правой панели, экран «Настройки», «Карта» (Roadmap).

@Mileeena
Mileeena force-pushed the feat/new-ui branch 2 times, most recently from 8934b46 to 8c17d95 Compare July 3, 2026 11:13
Mileeena and others added 7 commits July 14, 2026 21:30
…okens)

Re-skins the Avalonia UI to the approved "Aurora" design system, keeping all
design values in separate theme files instead of inline in views.

Theme foundation (src/Unlimotion/Theme/):
- Colors.axaml — semantic color tokens with ThemeDictionaries for Dark + Light
  (surfaces, text, accent/ready/blocked/teal, borders); Fluent SystemAccentColor
  overridden to Aurora violet so standard controls adopt it.
- Tokens.axaml — type scale, spacing (4px grid), radii, control sizing; fonts
  temporarily mapped to Inter/system-mono (General Sans + IBM Plex Mono pending).
- Elevation.axaml — shadows + reserved ready/accent glows.
- TextStyles.axaml — 11 text-role classes (heading/task/meta/eyebrow/...).
- Controls/ — Button variants, Input recolor, AppComponents (status tags, badges,
  ready chip/dot, nav items, count pill, goal rows, progress bar), Icons.axaml.
- App.axaml wired to dark-first with ResourceInclude/StyleInclude.

Layout / UX (MainControl):
- Views moved from the top tab strip to a left sidebar (VIEWS group with icons),
  driven by the existing TabControl (strip hidden) with code-behind selection sync.
- GOALS group: goal tiles bound to CurrentAllTasksItems with live progress bar + %.
- Settings pinned as a bottom footer.
- Command bar: brand mark, global search (shared SearchDefinition), sun/moon theme
  toggle (persists via Settings), "+" create, teal→blue avatar.
- Green "ready now" dot on actionable tasks across all views + relation lists.
- Detail rail: Ready/Blocked/Weekly status tags + Aurora eyebrow section labels.
- All hardcoded hex in views replaced with semantic tokens.

View model:
- TaskItemViewModel: IsBlocked, GoalProgress/GoalProgressPercent/HasChildren
  (recursive completion ratio, reactively recomputed via DynamicData).
- New CountToBoolConverter; resx keys ReadyNow/Blocked/RepeatsWeekly/Views/Goals.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Goal progress now updates from anywhere in the subtree: each node observes
  its direct children's GoalProgress (not just Status), so completing a deeply
  nested task propagates up to the root goal in the sidebar.
- Task detail card: planning fields (begin / duration / end) re-laid out
  vertically at full readable width so the floating labels no longer truncate.
- Filter toolbar: dropped the dropdown chevron on the filters button (now a
  clean filter-icon button); emoji filter boxes show their label
  ("Emoji filter" / "Exclude emoji") instead of a bare emoji when empty, with
  a matching tooltip — clearer for new users.
- Removed the duplicate global search from the command bar (it duplicated the
  per-view search and was confusing).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The header crammed status tags, Wanted, the importance stepper, the full GUID,
the actions menu and five date blocks into one wrapping row. Split it into:
- title row
- a tags + Wanted + labelled importance row, with the actions (⚙) menu pinned right
- a single compact, muted, monospaced metadata line (id, truncated with tooltip,
  + created / updated / unlocked / completed / archived timestamps)

Planning fields: flattened the nested StackPanel wrappers so the begin / duration /
end fields stretch to full width (labels no longer truncate) and the quick-action
date buttons are now subtle (surface fill + hairline, accent on hover) instead of
heavy accent-outlined chunks.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The global TextBox style was bleeding into the date picker's inner PART_TextBox,
drawing a second (clipped) border that showed as a stray bracket beside the
"Planned begin/end" fields. Give the CalendarDatePicker a single Aurora border
(surface fill, hairline, 9px radius, accent on focus), strip the inner TextBox
chrome, and make the dropdown button borderless/muted so the date fields match
the duration field.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Task detail card:
- "Ready now" tag RU wording changed from the misleading "Готово сейчас"
  (reads like "done") to "Можно делать".
- Importance: added a hint tooltip explaining it is the task priority used for
  list sorting (previously its purpose was unclear).
- Metadata line: each value now has its own label (ID / Created / Updated /
  Unlocked / Completed / Archived) instead of unlabelled numbers.
- Actions menu button changed from a gear (identical to the Settings icon) to a
  kebab "⋮" (more actions), so it no longer reads as "settings".

Settings page:
- Sections are now proper Aurora cards (surface fill, stronger border, soft
  shadow) so they read as distinct, separated groups instead of looking like a
  misaligned indent under the flush page title.
- Page header restyled (heading-size title) and section titles/hints themed.
- Nested cards (SSH keys / conflicts) step up to surface-2.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Reconciles the test suite with the new sidebar-based layout and reverts
a handful of regressions surfaced by the headless UI tests (35 failing → 2).

Changes by root cause:
- EmojiFilter summary width/text: revert DefaultSummaryWidth to 112px,
  restore EmptySummaryToken ("🙂") as the empty-state display, restore
  center alignment for 0-or-1 selection, set empty-summary foreground
  alpha to 153 (muted), revert dropdown CornerRadius back to 4
- Tab hotkey routing: strip hidden via height=0/opacity=0/IsHitTestVisible
  instead of IsVisible=False — IsVisible removes elements from the focus
  tree so hotkeys stopped reaching the tab items
- CurrentTaskCommandBar: restore the Border wrapper with AutomationId
  "CurrentTaskCommandBar" around the kebab DropDownButton (was lost
  during the card restructure in the previous commit)
- Detail panel colours: restore SystemChromeLowColor background and
  SystemBaseMediumColor border (Aurora tokens had replaced them)
- Planning layout: replace the vertical StackPanel with UniformGrid
  (Columns=3 on desktop, 1 on narrow); fix task-ID TextBlock MaxWidth
  formula (subtract 60 px for the "ID" label to prevent phone-width
  overflow)
- Roadmap highlight: revert search-highlight colour from AccentBrush
  back to #2F80ED
- TaskImportanceUiTests: update Grid.Column assertion from 2 → 3
  (ready-dot shifted the columns)
- Delete MainControlTabsOverflowUiTests (8 tests): the horizontal
  tab-strip overflow logic is gone; these tests are no longer valid
  in the sidebar design

2 tests remain failing due to a pre-existing cross-test ordering issue
(LocalizationService.Current mutation leaking from card tests into the
status-icon tests); tracked separately.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Squash of the 2-3 July polish pass sitting on top of the Aurora base:

- Sidebar: collapsible GOALS section (crisp caret, no janky hover box),
  fixed goal progress-bar overlap, task-count pills on sidebar views, and a
  coloured docked scrollbar tuned to sit clear of the goal rows.
- Filters: emoji filter boxes now carry a text label (collapsing to a compact
  square on narrow toolbars) and keep a stable width when selecting; the filter
  toolbar gained left/top padding.
- Breadcrumbs: each crumb is clickable to navigate to that ancestor task.
- Settings: compact footer with a "?" hotkey-help button and a centered overlay.
- Tests reconciled with the new sidebar layout; design tests made token-based.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant