Skip to content

Redesign task create/edit modals with desktop sidebar layout and mobile bottom sheet#2118

Open
christenbc wants to merge 1 commit into
callumalpass:mainfrom
christenbc:feat/enhance-ux
Open

Redesign task create/edit modals with desktop sidebar layout and mobile bottom sheet#2118
christenbc wants to merge 1 commit into
callumalpass:mainfrom
christenbc:feat/enhance-ux

Conversation

@christenbc

@christenbc christenbc commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Summary

This PR overhauls the task create and edit modal experience on both desktop and mobile. The goal is to make writing and editing tasks feel faster, clearer, and more platform-appropriate—without changing task data model or save behavior.

What users get

Desktop

  • Two-pane layout for create (expanded) and edit: title + description in the main column; properties and organization (projects, subtasks, dependencies) in a right sidebar.
  • Labeled action chips and a cleaner property row pattern (Todoist-inspired).
  • Footer actions stay pinned; main content scrolls independently.
  • Contexts/tags open a compact chip editor instead of an intermediate menu.

Mobile

  • Create/edit opens as a bottom sheet with drag-to-resize and swipe-down-to-dismiss.
  • Grouped, native-style card sections on a recessed background.
  • Keyboard-safe sheet displacement (sheet moves up with the keyboard without resizing awkwardly).
  • Icon-only footer actions on a single row; property labels simplified for touch.

Create flow

  • Natural-language quick create is preserved; expanding switches to the same title/description layout as edit.
  • Property chips wrap instead of scrolling horizontally; scheduled date is a chip alongside other properties.

Why this approach

The previous modal mixed legacy split-layout rules with newer mobile patterns. That caused real bugs (duplicate fields, clipped titles, wrong section order, footer wrapping, sidebar clipping). Rather than patching CSS on top of conflicting layouts, this PR:

  1. Separates layout modes explicitly — desktop sidebar vs. mobile sheet vs. legacy split — via shouldUseEditSidebarLayout() and related guards in taskModalLayout.ts.
  2. Extracts UI into focused modules — e.g. taskModalSidebar, taskModalSheetGestures, taskModalChipListEditor, taskModalPropertyMenus — so modal classes stay orchestration-only.
  3. Adds targeted CSStask-modal-sheet.css for sheet behavior; incremental BEM updates in task-modal.css for desktop sidebar and grouped sections.

Scope & non-goals

  • In scope: modal layout, interaction patterns, styling, i18n strings for new labels/placeholders, regression fixes tied to the redesign.
  • Out of scope: task persistence logic, field validation rules, Bases integration, settings changes.
  • Behavior preserved: save/cancel flows, natural-language create entry point, existing field types and metadata handling.

Testing

Review notes

This is a large diff (~7.4k lines) but mostly mechanical extraction + styling. Suggested review order:

  1. taskModalLayout.ts — layout mode decisions (highest risk)
  2. taskModalSidebar.ts + taskModalOrganizationFields.ts — desktop/mobile field ordering
  3. taskModalSheetGestures.ts + taskModalSheetKeyboard.ts — mobile sheet behavior
  4. styles/task-modal-sheet.css — sheet-specific rules isolated from desktop
  5. docs/releases/unreleased.md — user-facing changelog

Happy to split follow-up PRs if preferred (e.g. sheet gestures vs. desktop sidebar), but I kept it together because many fixes only make sense once both layouts land.

Screenshots / recordings

Screenshot 2026-07-14 at 17 27 50 Screenshot 2026-07-14 at 17 37 46 Screenshot 2026-07-14 at 17 28 00 Screenshot 2026-07-14 at 17 28 07 Screenshot 2026-07-14 at 17 27 20 Screenshot 2026-07-14 at 17 27 01 Screenshot 2026-07-14 at 17 27 27 Screenshot 2026-07-14 at 17 28 32

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