Skip to content

Commit 59fc2b1

Browse files
joewinkeclaude
andcommitted
task(jat-9ptks): /open-tasks bulk select
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 98ebea9 commit 59fc2b1

File tree

3 files changed

+33
-25
lines changed

3 files changed

+33
-25
lines changed

ide/src/lib/components/sessions/TasksActive.svelte

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3256,36 +3256,38 @@
32563256
min-height: 0;
32573257
}
32583258
3259-
/* State indicator strip — clickable handle */
3259+
/* State indicator strip */
32603260
.mobile-state-strip {
32613261
width: 28px;
32623262
flex-shrink: 0;
32633263
display: flex;
32643264
align-items: center;
32653265
justify-content: center;
3266-
background: none;
3267-
border: none;
3268-
cursor: pointer;
3269-
padding: 0;
3270-
transition: width 0.22s cubic-bezier(0.25, 0.46, 0.45, 0.94), opacity 0.15s;
3266+
transition: filter 0.2s;
32713267
}
32723268
3273-
.mobile-card-inner.tray-open .mobile-state-strip {
3274-
opacity: 0.7;
3269+
/* Brighten strip on card hover */
3270+
.mobile-session-card:hover .mobile-state-strip {
3271+
filter: brightness(1.8) saturate(1.3);
32753272
}
32763273
3277-
/* Action tray — slides out from strip on click */
3274+
/* Subtle row highlight when tray is active */
3275+
.mobile-session-card:hover {
3276+
background: oklch(0.19 0.015 250);
3277+
}
3278+
3279+
/* Action tray — slides out on hover */
32783280
.mobile-action-tray {
32793281
display: flex;
32803282
align-items: stretch;
32813283
max-width: 0;
32823284
overflow: hidden;
3283-
transition: max-width 0.25s cubic-bezier(0.25, 0.46, 0.45, 0.94);
3285+
transition: max-width 0.28s cubic-bezier(0.25, 0.46, 0.45, 0.94);
32843286
flex-shrink: 0;
32853287
}
32863288
3287-
.mobile-card-inner.tray-open .mobile-action-tray {
3288-
max-width: 240px;
3289+
.mobile-session-card:hover .mobile-action-tray {
3290+
max-width: 320px;
32893291
}
32903292
32913293
/* Tray action buttons */
@@ -3294,23 +3296,27 @@
32943296
flex-direction: column;
32953297
align-items: center;
32963298
justify-content: center;
3297-
gap: 3px;
3298-
padding: 0 10px;
3299-
min-width: 54px;
3299+
gap: 4px;
3300+
padding: 6px 10px;
3301+
min-width: 68px;
33003302
border: none;
3301-
border-right: 1px solid oklch(0 0 0 / 0.15);
3303+
border-right: 1px solid oklch(0 0 0 / 0.18);
33023304
cursor: pointer;
33033305
font-size: 0.5625rem;
33043306
font-weight: 700;
3307+
line-height: 1.25;
33053308
color: oklch(0.95 0 0);
3306-
white-space: nowrap;
33073309
font-family: system-ui, -apple-system, sans-serif;
3308-
letter-spacing: 0.02em;
3310+
letter-spacing: 0.03em;
3311+
text-align: center;
33093312
text-transform: uppercase;
3313+
overflow-wrap: normal;
3314+
hyphens: none;
33103315
transition: filter 0.1s;
33113316
}
33123317
3313-
.mobile-tray-btn:active { filter: brightness(1.15); }
3318+
.mobile-tray-btn:hover { filter: brightness(1.12); }
3319+
.mobile-tray-btn:active { filter: brightness(1.25); }
33143320
.mobile-tray-btn:last-child { border-right: none; }
33153321
33163322
.mobile-tray-btn-success { background: oklch(0.48 0.16 145); }

ide/src/lib/components/work/SuggestedTasksSection.svelte

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -722,12 +722,12 @@
722722
}
723723
724724
/* Elevate the task card containing an open dropdown above its siblings.
725-
The SearchDropdown auto-focuses its search input on open, which triggers
726-
:focus-within and creates a stacking context above sibling cards. */
725+
:has(:global(.sd-panel)) fires the moment the dropdown panel enters the DOM,
726+
creating a stacking context above sibling cards without any focus timing gap. */
727727
.task-card {
728728
position: relative;
729729
}
730-
.task-card:focus-within {
730+
.task-card:has(:global(.sd-panel)) {
731731
z-index: 10;
732732
}
733733

ide/src/routes/open-tasks/+page.svelte

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,8 @@
398398
function formatDueDate(date: string | null | undefined): string {
399399
if (!date) return '';
400400
try {
401-
const d = new Date(date);
401+
// Parse date-only strings as local time (not UTC) by appending T00:00:00
402+
const d = new Date(date.includes('T') ? date : date + 'T00:00:00');
402403
if (isNaN(d.getTime())) return date;
403404
const today = new Date();
404405
today.setHours(0, 0, 0, 0);
@@ -420,7 +421,7 @@
420421
function dueDateClass(date: string | null | undefined): string {
421422
if (!date) return '';
422423
try {
423-
const d = new Date(date);
424+
const d = new Date(date.includes('T') ? date : date + 'T00:00:00');
424425
const today = new Date();
425426
today.setHours(0, 0, 0, 0);
426427
const target = new Date(d);
@@ -483,6 +484,7 @@
483484
if (x + pickerWidth > window.innerWidth) x = window.innerWidth - pickerWidth - 8;
484485
if (y + pickerHeight > window.innerHeight) y = rect.top - pickerHeight - 4;
485486
if (x < 8) x = 8;
487+
if (y < 8) y = 8;
486488
487489
dueDatePickerTaskId = taskId;
488490
dueDatePickerPos = { x, y };
@@ -513,7 +515,7 @@
513515
for (let i = 0; i < 7; i++) {
514516
const d = new Date(today);
515517
d.setDate(d.getDate() + i);
516-
const dateValue = d.toISOString().split('T')[0];
518+
const dateValue = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')}`;
517519
const dayNum = d.getDate();
518520
const label = i === 0 ? 'Today' : i === 1 ? 'Tmrw' : dayNames[d.getDay()];
519521
let badge = '';

0 commit comments

Comments
 (0)