feat(todo): dialogs on the desktop, the tabs reordered, a task's path and menu (ADR 0033, D11 to D14)

- halkyon_ui: showAdaptiveSheet shows a dialog on Linux, macOS and Windows
  at every width (bottom sheets stay on phones and tablets below expanded
  windows), so Learn and Train follow; SheetScaffold takes a heading in
  the title's place and may leave out its close button.
- Todo: the tabs are Inbox, Today, Upcoming, Browse, Today still opening;
  `serverpod start` launches the app on Linux, as it has no web build.
- A task's sheet shows where the task is (its project, an icon once tasks
  are above it, and the tasks above it, each opening what it names) and a
  ⋮ menu in place of its close button: when it was added (its UUID v7),
  Duplicate with its sub-tasks, hiding its done sub-tasks (synced in its
  payload), Close in the pane, Delete after asking. The description's icon
  stays by its first line.
- A row names its project and section at the end of its date's line; every
  menu entry has its icon.
- Learn: a studyset's path starts at the Library tab's icon, named by its
  tooltip.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-01 16:53:38 +01:00
commit b908019969
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -160,6 +160,52 @@ the rail, a wash of strawberry, settings grouped as theirs. What the screenshots
related (ADR 0031, D1). The agent made no recommendation; this is the default the
decision of 1 Nov left in place, to be asked again if the screens look wrong beside it.
## Decisions after trying it (1 Nov 2026, the developer's)
The developer used the first build beside Todoist's and asked for these; where an
alternative was put to them, the choice is theirs.
- **D11 Sheets are dialogs on the desktop, at every width** (over the window's size
alone, and over Todo alone): halkyon_ui's `showAdaptiveSheet` shows a centred dialog
(Material's term) on Linux, macOS and Windows however narrow the window, and on phones
and tablets a bottom sheet below expanded windows as before, so Learn and Train follow.
A bottom sheet is a touch surface; rising from the foot of a desktop window it reads
as a phone's screen. In a narrow window the dialog keeps a smaller margin.
- **D12 The tabs are Inbox, Today, Upcoming, Browse; Today still opens** (amends D2's
order, not what opens).
- **D13 A task's sheet** names where the task is on top (its project, an icon once tasks
are above it, then each task above it; the project goes to its list, a task opens in
the sheet's place), as Learn's path through a studyset, and has a ⋮ menu in place of
its close button (`SheetScaffold`'s `heading` and `closeButton`): when it was added
(from its UUID v7, so the payload needn't say it), Duplicate (with its sub-tasks, right
after it), hiding or showing its done sub-tasks (`hideDoneSubTasks` in its payload,
so every device hides them, schema 1 as nothing is released), Close in the pane, and
Delete after asking. Copy link, View activity, Email to the task, Print and Open in a
new window wait for what they need (deep links, an activity log; mailing in is ruled
out by D5). The description's icon stays by its first line.
- **D14 Rows and menus**: a row shows its project and section ("Inbox / Errands" with the
project's icon) at the end of the line of its date, not beside the whole row; every
menu entry has its icon, a destructive one in the error colour (`MenuEntry`).
- **D15 Typed tokens in quick add** (amends D7's later step; recommended, the developer
asking whether the keyboard's language could choose): `#project`, `@label`,
`{deadline}`, `!!1` and `p1` to `p4`, `!30m`, dates and times (`9am`, `Mon 18:00`,
`ev Tue 7pm`) and recurrences (`every day`, `every 2 days`, `every second day`), each
highlighted as it is recognised and undone with a tap. The words are data, a table per
language (weekdays, months, *tomorrow*, *every*, *next*, times), read in the app's
language and English, so a new app language adds a table, not a parser. Not the
keyboard's language: Flutter tells nothing of it, Android doesn't reliably, and it
changes as the person switches keyboards while typing. Symbols hold in every language.
- **To come, in this order**: section headings that stay atop the list as it scrolls;
Upcoming's month opening inline beneath its strip (a handle dragged down, or the
month's name) with a way back to today beside it once another week shows, and its ⋮
with *Select tasks*; a row swiped left picks its date, swiped right selects it, a tap
then selecting more, with a bar of date, move, labels, priority and ⋮ (delete,
duplicate, complete, deadline); rows dragged into another order, and a little to the
right to become the sub-task of the row above, with Undo; the add button dragged onto
the list to add a task there, dropped back on its place (an ×) to give up, wherever
it shows; and quick add showing its fields as typing starts, its + opening the rest
(D15 with it).
## Steps
1. **The frame**: go_router and `NavigationFrame` with the four tabs (empty screens that