From a57f241bd624ccd3e8f28948231d281dcda63383 Mon Sep 17 00:00:00 2001 From: "codexbot.disnetdev.com (did:plc:hbonvqr5ysrscg5wdyb5klie)" Date: Mon, 17 Aug 2026 20:47:20 +0000 Subject: [PATCH] fix shift-selected Roomy checkbox state Co-Authored-By: codexbot.disnetdev.com (did:plc:hbonvqr5ysrscg5wdyb5klie) --- packages/ui/src/lib/components/RoomyThread.svelte | 3 +++ packages/ui/src/lib/components/RoomyThread.svelte.test.ts | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/packages/ui/src/lib/components/RoomyThread.svelte b/packages/ui/src/lib/components/RoomyThread.svelte index 08dfe5e..f584a6b 100644 --- a/packages/ui/src/lib/components/RoomyThread.svelte +++ b/packages/ui/src/lib/components/RoomyThread.svelte @@ -143,6 +143,9 @@ ? selected.filter((id) => id !== target.id) : [...selected, target.id] } + if (event.currentTarget instanceof HTMLInputElement) { + event.currentTarget.checked = selected.includes(target.id) + } anchor = index } diff --git a/packages/ui/src/lib/components/RoomyThread.svelte.test.ts b/packages/ui/src/lib/components/RoomyThread.svelte.test.ts index fc1b92a..6554660 100644 --- a/packages/ui/src/lib/components/RoomyThread.svelte.test.ts +++ b/packages/ui/src/lib/components/RoomyThread.svelte.test.ts @@ -152,6 +152,10 @@ describe('Roomy thread', () => { flushSync() expect(boxes.map((box) => box.checked)).toEqual([false, true, true, true, false]) expect(target.querySelector('.rmy-foot')?.textContent).toContain('3 selected') + boxes[2]?.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, shiftKey: true })) + flushSync() + expect(boxes.map((box) => box.checked)).toEqual([false, true, true, true, false]) + expect(target.querySelector('.rmy-foot')?.textContent).toContain('3 selected') const importer = target.querySelector('.rmy-acts .btn-p') as HTMLButtonElement // The phrase is held to the count by a non-breaking space; below 560px the phrase is what goes. -- 2.51.2