@@ -192,7 +192,7 @@ class Selecto extends EventEmitter<SelectoEvents> {
192192 const data = { ignoreClick : true } ;
193193
194194 this . findSelectableTargets ( data ) ;
195- const selectedElements = this . hitTest ( rect , data ) ;
195+ const selectedElements = this . hitTest ( rect , data , true , null ) ;
196196 const result = this . setSelectedTargets ( selectedElements ) ;
197197
198198 return {
@@ -576,7 +576,8 @@ class Selecto extends EventEmitter<SelectoEvents> {
576576 private hitTest (
577577 selectRect : Rect ,
578578 data : any ,
579- gestoEvent ?: any ,
579+ isDrag : boolean ,
580+ gestoEvent : any ,
580581 ) {
581582 const { hitRate, selectByClick } = this . options ;
582583 const { left, top, right, bottom } = selectRect ;
@@ -602,7 +603,7 @@ class Selecto extends EventEmitter<SelectoEvents> {
602603 ? false
603604 : isInside ( [ clientX , clientY ] , points ) ;
604605
605- if ( selectByClick && inArea ) {
606+ if ( ! isDrag && selectByClick && inArea ) {
606607 return true ;
607608 }
608609 const overlapPoints = getOverlapPoints ( rectPoints , points ) ;
@@ -1028,14 +1029,21 @@ class Selecto extends EventEmitter<SelectoEvents> {
10281029 } ;
10291030 let firstPassedTargets : ElementType [ ] = [ ] ;
10301031
1031- if ( ! selectFromInside || ( selectByClick && ! clickBySelectEnd ) ) {
1032+ // allow click on select
1033+ const allowClickBySelectEnd = selectByClick && ! clickBySelectEnd ;
1034+ let hasInsideTargets = false ;
1035+
1036+ if ( ! selectFromInside || allowClickBySelectEnd ) {
10321037 const pointTarget = this . _findElement (
10331038 clickedTarget || inputEvent . target , // elementFromPoint(clientX, clientY),
10341039 data . selectableTargets ,
10351040 ) ;
1036- firstPassedTargets = pointTarget ? [ pointTarget ] : [ ] ;
1041+
1042+ hasInsideTargets = ! ! pointTarget ;
1043+ if ( allowClickBySelectEnd ) {
1044+ firstPassedTargets = pointTarget ? [ pointTarget ] : [ ] ;
1045+ }
10371046 }
1038- const hasInsideTargets = firstPassedTargets . length > 0 ;
10391047 const isPreventSelect = ! selectFromInside && hasInsideTargets ;
10401048
10411049 // prevent drag from inside when selectByClick is false
@@ -1094,6 +1102,7 @@ class Selecto extends EventEmitter<SelectoEvents> {
10941102 } else {
10951103 data . startPassedTargets = [ ] ;
10961104 }
1105+
10971106 this . _select (
10981107 firstPassedTargets ,
10991108 hitRect ,
@@ -1171,7 +1180,8 @@ class Selecto extends EventEmitter<SelectoEvents> {
11711180 if ( ! isInnerScroll && scrollOptions && scrollOptions . container ) {
11721181 this . dragScroll . dragStart ( e , scrollOptions ) ;
11731182 }
1174- if ( clickBySelectEnd ) {
1183+
1184+ if ( isPreventSelect && selectByClick && clickBySelectEnd ) {
11751185 data . selectFlag = false ;
11761186 e . preventDrag ( ) ;
11771187 }
@@ -1206,6 +1216,7 @@ class Selecto extends EventEmitter<SelectoEvents> {
12061216 const passedTargets = this . hitTest (
12071217 rect ,
12081218 data ,
1219+ true ,
12091220 e ,
12101221 ) ;
12111222 selectedTargets = passTargets (
0 commit comments