From b83d182f7c309a18deb2b3a9271bab7c858d2622 Mon Sep 17 00:00:00 2001 From: Roman Sandler Date: Wed, 30 Apr 2025 16:45:26 +0300 Subject: [PATCH 1/4] wip --- packages/@react-aria/selection/src/useSelectableItem.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/@react-aria/selection/src/useSelectableItem.ts b/packages/@react-aria/selection/src/useSelectableItem.ts index fe2f556543b..2ac5a39b30d 100644 --- a/packages/@react-aria/selection/src/useSelectableItem.ts +++ b/packages/@react-aria/selection/src/useSelectableItem.ts @@ -150,8 +150,9 @@ export function useSelectableItem(options: SelectableItemOptions): SelectableIte } } else if (e && e.shiftKey) { manager.extendSelection(key); - } else if (manager.selectionBehavior === 'toggle' || (e && (isCtrlKeyPressed(e) || e.pointerType === 'touch' || e.pointerType === 'virtual'))) { + } else if (manager.selectionBehavior === 'toggle' && (e.pointerType === 'touch' || e.pointerType === 'virtual' || !isCtrlKeyPressed(e))) { // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys + // if ctrl is pressed in toggle mode, we want to replace selection manager.toggleSelection(key); } else { manager.replaceSelection(key); From c3c081010ec212ca7ca33f7df99bc011bd2a16e9 Mon Sep 17 00:00:00 2001 From: Roman Sandler Date: Wed, 30 Apr 2025 17:09:56 +0300 Subject: [PATCH 2/4] wip --- .../@react-aria/selection/src/useSelectableItem.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/@react-aria/selection/src/useSelectableItem.ts b/packages/@react-aria/selection/src/useSelectableItem.ts index 2ac5a39b30d..2b23506496b 100644 --- a/packages/@react-aria/selection/src/useSelectableItem.ts +++ b/packages/@react-aria/selection/src/useSelectableItem.ts @@ -150,10 +150,16 @@ export function useSelectableItem(options: SelectableItemOptions): SelectableIte } } else if (e && e.shiftKey) { manager.extendSelection(key); - } else if (manager.selectionBehavior === 'toggle' && (e.pointerType === 'touch' || e.pointerType === 'virtual' || !isCtrlKeyPressed(e))) { + } else if (e && (e.pointerType === 'touch' || e.pointerType === 'virtual')) { // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys - // if ctrl is pressed in toggle mode, we want to replace selection manager.toggleSelection(key); + } else if (manager.selectionBehavior === 'toggle' ) { + // if ctrl is pressed in toggle mode, we want to replace selection + if (isCtrlKeyPressed(e)) { + manager.replaceSelection(key); + } else { + manager.toggleSelection(key); + } } else { manager.replaceSelection(key); } From 6943fd809ca74c86434e6e46ea4588bf8c8417f3 Mon Sep 17 00:00:00 2001 From: Roman Sandler Date: Wed, 30 Apr 2025 17:11:35 +0300 Subject: [PATCH 3/4] wip --- packages/@react-aria/selection/src/useSelectableItem.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/@react-aria/selection/src/useSelectableItem.ts b/packages/@react-aria/selection/src/useSelectableItem.ts index 2b23506496b..ba51c9c6b0d 100644 --- a/packages/@react-aria/selection/src/useSelectableItem.ts +++ b/packages/@react-aria/selection/src/useSelectableItem.ts @@ -161,7 +161,12 @@ export function useSelectableItem(options: SelectableItemOptions): SelectableIte manager.toggleSelection(key); } } else { - manager.replaceSelection(key); + // if ctrl is pressed in replace mode, we want to toggle selection + if (isCtrlKeyPressed(e)) { + manager.toggleSelection(key); + } else { + manager.replaceSelection(key); + } } } }; From 312cc3c8969931c584176144fce32ff6dcdb10f7 Mon Sep 17 00:00:00 2001 From: Roman Sandler Date: Wed, 30 Apr 2025 17:19:49 +0300 Subject: [PATCH 4/4] wip --- packages/@react-aria/selection/src/useSelectableItem.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@react-aria/selection/src/useSelectableItem.ts b/packages/@react-aria/selection/src/useSelectableItem.ts index ba51c9c6b0d..5bcfac6e6ac 100644 --- a/packages/@react-aria/selection/src/useSelectableItem.ts +++ b/packages/@react-aria/selection/src/useSelectableItem.ts @@ -153,7 +153,7 @@ export function useSelectableItem(options: SelectableItemOptions): SelectableIte } else if (e && (e.pointerType === 'touch' || e.pointerType === 'virtual')) { // if touch or virtual (VO) then we just want to toggle, otherwise it's impossible to multi select because they don't have modifier keys manager.toggleSelection(key); - } else if (manager.selectionBehavior === 'toggle' ) { + } else if (manager.selectionBehavior === 'toggle') { // if ctrl is pressed in toggle mode, we want to replace selection if (isCtrlKeyPressed(e)) { manager.replaceSelection(key);