feat(todo): quick add's keys, sub-projects' colours, a task's menu on a right click, and the completed tasks deleted at once

The developer's list of 9 Nov 2026, Todo's part:

- Quick add: the down arrow and Tab move into the description, with its
  cursor (halkyon_editor's fix); Escape closes the projects or labels
  suggested first, then closes quick add, what was typed discarded; the
  project's chip shows the project's colour.
- A project without a colour of its own shows its parent's, the nearest
  ancestor's with one (colorOfProject, TodoCubit.colorOf), wherever a
  project's colour shows; the project editor's "Same colour as its parent"
  keeps it so, and the parent picker shows each project in its colour. A
  project of its own always has one.
- The task pane's x closes it, always; Close left the ⋮ menu.
- A task's row opens its menu on a right click: Mark as done, Date, Move
  to, Labels, Priority, Deadline, Duplicate and Delete, the selection's
  actions for that one task.
- Delete completed tasks, in the ⋮ of the Inbox, Today, Upcoming and a
  project, with Undo: the tasks leave the list at once and are deleted
  once the snack bar goes without its Undo (halkyon_ui's showUndoSnackBar
  gains onKept).

Whats-New: Quick add: the arrow keys and Tab reach the description, and Escape closes it without saving.
Whats-New-De: Schnell hinzufügen: Pfeiltasten und Tab erreichen die Beschreibung, und Escape schließt es, ohne zu speichern.
Whats-New: Sub-projects take their parent's colour unless they have their own.
Whats-New-De: Unterprojekte übernehmen die Farbe ihres übergeordneten Projekts, wenn sie keine eigene haben.
Whats-New: A right click on a task opens its menu, with Move to and more; Delete completed tasks clears a list, with Undo.
Whats-New-De: Ein Rechtsklick auf eine Aufgabe öffnet ihr Menü, mit Verschieben nach und mehr; Erledigte Aufgaben löschen räumt eine Liste auf, mit Rückgängig.
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-09 23:12:43 +01:00
commit 9e1442d89e
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64
6 changed files with 810 additions and 78 deletions

View file

@ -132,6 +132,7 @@
"projectDelete": "Projekt löschen",
"projectDeleteTitle": "Projekt löschen?",
"projectDeleteMessage": "„{name}“ wird mit seinen Abschnitten und Aufgaben auf all deinen Geräten gelöscht.",
"projectInheritColor": "Gleiche Farbe wie das übergeordnete Projekt",
"projectParent": "Übergeordnetes Projekt",
"projectNoParent": "Kein übergeordnetes Projekt",
"projectFavorite": "Favorit",
@ -231,7 +232,6 @@
"taskDuplicated": "Aufgabe dupliziert",
"subTasksHideDone": "Erledigte Unteraufgaben ausblenden",
"subTasksShowDone": "Erledigte Unteraufgaben zeigen",
"taskClose": "Schließen",
"taskPath": "Wo die Aufgabe liegt",
"weekToday": "Zurück zu heute",
"monthPrevious": "Voriger Monat",
@ -402,5 +402,7 @@
"locationOffTitle": "Standort ist für Erinnerungen aus",
"locationOffHint": "Erinnerungen an einem Ort brauchen „Immer zulassen“.",
"locationArrived": "Du bist bei {name}",
"locationLeft": "Du hast {name} verlassen"
"locationLeft": "Du hast {name} verlassen",
"tasksDeleteCompleted": "Erledigte Aufgaben löschen",
"tasksCompletedDeleted": "{count, plural, =1{1 erledigte Aufgabe gelöscht} other{{count} erledigte Aufgaben gelöscht}}"
}

View file

@ -282,6 +282,10 @@
}
}
},
"projectInheritColor": "Same colour as its parent",
"@projectInheritColor": {
"description": "In a sub-project's editor: whether it shows in its parent's colour rather than one of its own (the developer's review, 9 Nov 2026)."
},
"projectParent": "Parent project",
"@projectParent": {
"description": "A project's editor (ADR 0033, D28), as Todoist's Add project."
@ -598,7 +602,6 @@
"taskDuplicated": "Task duplicated",
"subTasksHideDone": "Hide done sub-tasks",
"subTasksShowDone": "Show done sub-tasks",
"taskClose": "Close",
"taskPath": "Where the task is",
"weekToday": "Back to today",
"monthPrevious": "Previous month",
@ -1246,5 +1249,18 @@
"type": "String"
}
}
},
"tasksDeleteCompleted": "Delete completed tasks",
"@tasksDeleteCompleted": {
"description": "A list's menu: deletes its done tasks, with an Undo (the developer's review, 9 Nov 2026)."
},
"tasksCompletedDeleted": "{count, plural, =1{1 completed task deleted} other{{count} completed tasks deleted}}",
"@tasksCompletedDeleted": {
"description": "The snack bar after Delete completed tasks, with its Undo.",
"placeholders": {
"count": {
"type": "int"
}
}
}
}

View file

@ -1,5 +1,6 @@
{
"@@locale": "en_US",
"projectFavorite": "Favorite",
"favoritesTitle": "Favorites"
"favoritesTitle": "Favorites",
"projectInheritColor": "Same color as its parent"
}

View file

@ -892,6 +892,12 @@ abstract class AppLocalizations {
/// **'\"{name}\" is deleted with its sections and tasks, on all your devices.'**
String projectDeleteMessage(String name);
/// In a sub-project's editor: whether it shows in its parent's colour rather than one of its own (the developer's review, 9 Nov 2026).
///
/// In en, this message translates to:
/// **'Same colour as its parent'**
String get projectInheritColor;
/// A project's editor (ADR 0033, D28), as Todoist's Add project.
///
/// In en, this message translates to:
@ -1486,12 +1492,6 @@ abstract class AppLocalizations {
/// **'Show done sub-tasks'**
String get subTasksShowDone;
/// No description provided for @taskClose.
///
/// In en, this message translates to:
/// **'Close'**
String get taskClose;
/// No description provided for @taskPath.
///
/// In en, this message translates to:
@ -2517,6 +2517,18 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'You\'ve left {name}'**
String locationLeft(String name);
/// A list's menu: deletes its done tasks, with an Undo (the developer's review, 9 Nov 2026).
///
/// In en, this message translates to:
/// **'Delete completed tasks'**
String get tasksDeleteCompleted;
/// The snack bar after Delete completed tasks, with its Undo.
///
/// In en, this message translates to:
/// **'{count, plural, =1{1 completed task deleted} other{{count} completed tasks deleted}}'**
String tasksCompletedDeleted(int count);
}
class _AppLocalizationsDelegate

View file

@ -487,6 +487,10 @@ class AppLocalizationsDe extends AppLocalizations {
return '„$name“ wird mit seinen Abschnitten und Aufgaben auf all deinen Geräten gelöscht.';
}
@override
String get projectInheritColor =>
'Gleiche Farbe wie das übergeordnete Projekt';
@override
String get projectParent => 'Übergeordnetes Projekt';
@ -921,9 +925,6 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get subTasksShowDone => 'Erledigte Unteraufgaben zeigen';
@override
String get taskClose => 'Schließen';
@override
String get taskPath => 'Wo die Aufgabe liegt';
@ -1574,4 +1575,18 @@ class AppLocalizationsDe extends AppLocalizations {
String locationLeft(String name) {
return 'Du hast $name verlassen';
}
@override
String get tasksDeleteCompleted => 'Erledigte Aufgaben löschen';
@override
String tasksCompletedDeleted(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count erledigte Aufgaben gelöscht',
one: '1 erledigte Aufgabe gelöscht',
);
return '$_temp0';
}
}

View file

@ -487,6 +487,9 @@ class AppLocalizationsEn extends AppLocalizations {
return '\"$name\" is deleted with its sections and tasks, on all your devices.';
}
@override
String get projectInheritColor => 'Same colour as its parent';
@override
String get projectParent => 'Parent project';
@ -921,9 +924,6 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get subTasksShowDone => 'Show done sub-tasks';
@override
String get taskClose => 'Close';
@override
String get taskPath => 'Where the task is';
@ -1572,6 +1572,20 @@ class AppLocalizationsEn extends AppLocalizations {
String locationLeft(String name) {
return 'You\'ve left $name';
}
@override
String get tasksDeleteCompleted => 'Delete completed tasks';
@override
String tasksCompletedDeleted(int count) {
String _temp0 = intl.Intl.pluralLogic(
count,
locale: localeName,
other: '$count completed tasks deleted',
one: '1 completed task deleted',
);
return '$_temp0';
}
}
/// The translations for English, as used in the United Kingdom (`en_GB`).
@ -1583,6 +1597,9 @@ class AppLocalizationsEnGb extends AppLocalizationsEn {
class AppLocalizationsEnUs extends AppLocalizationsEn {
AppLocalizationsEnUs() : super('en_US');
@override
String get projectInheritColor => 'Same color as its parent';
@override
String get projectFavorite => 'Favorite';