← All repositories

listless

A simple list app for Apple platforms

git clone https://code.inqk.net/listless.git


commit 9d90ad7f51919dda67cf35e5d4baac80b930a1e8
parent c5e368a69436a651a3b06fb5768b59daafeed3b5
Author: Michael Camilleri <[email protected]>
Date:   Wed, 18 Feb 2026 12:56:39 +0900

Improve pull-to-clear affordance

Co-Authored-By: Codex GPT 5.3 <[email protected]>

Diffstat

MListlessiOS/Views/PullToClear.swift | 38++++++++++----------------------------

1 file changed, 10 insertions(+), 28 deletions(-)

diff --git a/ListlessiOS/Views/PullToClear.swift b/ListlessiOS/Views/PullToClear.swift

@@ -9,37 +9,19 @@ struct PullToClearIndicator: View {
     private var progress: CGFloat { min(1, pullOffset / pullClearThreshold) }
     private var isReady: Bool { pullOffset >= pullClearThreshold }
 
-    // Matches the "bottom" gradient stop used for the last active task row
-    private let accentColor = Color(hue: 0.72, saturation: 0.65, brightness: 0.85)
-
     var body: some View {
-        HStack(spacing: 0) {
-            Rectangle()
-                .fill(accentColor)
-                .frame(width: 8)
-            HStack(spacing: 6) {
-                Image(systemName: isReady ? "checkmark" : "trash")
-                    .foregroundStyle(.secondary)
-                    .fontWeight(.semibold)
-                    .animation(.easeInOut(duration: 0.15), value: isReady)
-                Text(isReady ? "Release to clear" : "Clear completed")
-                    .foregroundStyle(.secondary)
-                    .font(.body)
-                    .animation(.easeInOut(duration: 0.15), value: isReady)
-                Spacer()
-            }
-            .padding(.horizontal, 16)
-            .frame(maxHeight: .infinity)
-            .background(Color.taskCard)
+        HStack(spacing: 6) {
+            Image(systemName: isReady ? "checkmark" : "trash")
+                .foregroundStyle(.secondary)
+                .fontWeight(.semibold)
+                .animation(.easeInOut(duration: 0.15), value: isReady)
+            Text(isReady ? "Release to clear" : "Clear completed")
+                .foregroundStyle(.secondary)
+                .font(.body)
+                .animation(.easeInOut(duration: 0.15), value: isReady)
         }
+        .frame(maxWidth: .infinity)
         .frame(height: 56)
-        .clipShape(
-            UnevenRoundedRectangle(
-                topLeadingRadius: 0, bottomLeadingRadius: 0,
-                bottomTrailingRadius: 14, topTrailingRadius: 14
-            )
-        )
-        .padding(.trailing, 16)
         // Reveal from the bottom upward as the user pulls
         .frame(height: min(pullOffset, 56), alignment: .bottom)
         .clipped()