From 855a4d5c29545edbace31f643c31ff800e3b0545 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 6 Jul 2026 13:21:08 +0000 Subject: [PATCH] feat(tasks): wrap add-task-bar actions onto multiple rows on small screens On mobile / narrow screens the action bar hid buttons behind a horizontal scroll, making it easy to miss actions like repeat or estimate. Below the `xs` breakpoint the action bar now wraps onto multiple rows so every button stays reachable. Each action button and its optional "clear" button are grouped in an `.action-item` wrapper so a clear button never wraps away from the button it belongs to. Larger screens keep the existing single-row scroll behaviour. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_018pcXtnrrfVNFAHgPFEpAF2 --- .../add-task-bar-actions.component.html | 280 +++++++++--------- .../add-task-bar-actions.component.scss | 16 + 2 files changed, 161 insertions(+), 135 deletions(-) diff --git a/src/app/features/tasks/add-task-bar/add-task-bar-actions/add-task-bar-actions.component.html b/src/app/features/tasks/add-task-bar/add-task-bar-actions/add-task-bar-actions.component.html index 9c1761062c..a201f72da8 100644 --- a/src/app/features/tasks/add-task-bar/add-task-bar-actions/add-task-bar-actions.component.html +++ b/src/app/features/tasks/add-task-bar/add-task-bar-actions/add-task-bar-actions.component.html @@ -42,164 +42,174 @@ @if (!isHideDueBtn()) { - - - @if (state().date) { +
- } + + @if (state().date) { + + } +
} @if (state().deadlineDate) { - - - - } - - @if (!isHideTagBtn() && allTags().length) { - - @if (!hasTagsSelected() && state().newTagTitles.length === 0) { - - {{ T.F.TASK.ADD_TASK_BAR.TAGS_BUTTON | translate }} - - } @else { -
- @for (tag of selectedTags(); track tag.id) { -
- - {{ tag.icon || 'label' }} - - {{ tag.title }} -
- } - @for (newTag of state().newTagTitles; track newTag) { -
- new_releases - {{ newTag }} -
- } -
- } - - - @if (hasTagsSelected() || hasNewTags()) { + + } + + @if (!isHideTagBtn() && allTags().length) { +
+ + + @if (hasTagsSelected() || hasNewTags()) { + + } +
+ } + +
+ + + @if (state().estimate) { + } - } +
- - - @if (state().estimate) { +
- } - - - @if (state().repeatQuickSetting) { - - } + @if (state().repeatQuickSetting) { + + } +
diff --git a/src/app/features/tasks/add-task-bar/add-task-bar-actions/add-task-bar-actions.component.scss b/src/app/features/tasks/add-task-bar/add-task-bar-actions/add-task-bar-actions.component.scss index 99f8059b46..a6bd8095d5 100644 --- a/src/app/features/tasks/add-task-bar/add-task-bar-actions/add-task-bar-actions.component.scss +++ b/src/app/features/tasks/add-task-bar/add-task-bar-actions/add-task-bar-actions.component.scss @@ -64,6 +64,22 @@ gap: var(--s-quarter); } + // On smaller screens, wrap the actions onto multiple rows instead of hiding + // them behind a horizontal scroll, so every button stays reachable. + @include mq(xs, max) { + flex-wrap: wrap; + overflow-x: visible; + gap: var(--s-quarter); + } + + // Keeps an action button and its "clear" button together so a paired button + // never wraps away from the button it belongs to. + .action-item { + display: flex; + flex-shrink: 0; + align-items: center; + } + .action-btn { cursor: pointer; opacity: 0.4;