@@ -192,7 +192,7 @@ class Selecto extends EventEmitter<SelectoEvents> {
192
192
const data = { ignoreClick : true } ;
193
193
194
194
this . findSelectableTargets ( data ) ;
195
- const selectedElements = this . hitTest ( rect , data ) ;
195
+ const selectedElements = this . hitTest ( rect , data , true , null ) ;
196
196
const result = this . setSelectedTargets ( selectedElements ) ;
197
197
198
198
return {
@@ -576,7 +576,8 @@ class Selecto extends EventEmitter<SelectoEvents> {
576
576
private hitTest (
577
577
selectRect : Rect ,
578
578
data : any ,
579
- gestoEvent ?: any ,
579
+ isDrag : boolean ,
580
+ gestoEvent : any ,
580
581
) {
581
582
const { hitRate, selectByClick } = this . options ;
582
583
const { left, top, right, bottom } = selectRect ;
@@ -602,7 +603,7 @@ class Selecto extends EventEmitter<SelectoEvents> {
602
603
? false
603
604
: isInside ( [ clientX , clientY ] , points ) ;
604
605
605
- if ( selectByClick && inArea ) {
606
+ if ( ! isDrag && selectByClick && inArea ) {
606
607
return true ;
607
608
}
608
609
const overlapPoints = getOverlapPoints ( rectPoints , points ) ;
@@ -1028,14 +1029,21 @@ class Selecto extends EventEmitter<SelectoEvents> {
1028
1029
} ;
1029
1030
let firstPassedTargets : ElementType [ ] = [ ] ;
1030
1031
1031
- if ( ! selectFromInside || ( selectByClick && ! clickBySelectEnd ) ) {
1032
+ // allow click on select
1033
+ const allowClickBySelectEnd = selectByClick && ! clickBySelectEnd ;
1034
+ let hasInsideTargets = false ;
1035
+
1036
+ if ( ! selectFromInside || allowClickBySelectEnd ) {
1032
1037
const pointTarget = this . _findElement (
1033
1038
clickedTarget || inputEvent . target , // elementFromPoint(clientX, clientY),
1034
1039
data . selectableTargets ,
1035
1040
) ;
1036
- firstPassedTargets = pointTarget ? [ pointTarget ] : [ ] ;
1041
+
1042
+ hasInsideTargets = ! ! pointTarget ;
1043
+ if ( allowClickBySelectEnd ) {
1044
+ firstPassedTargets = pointTarget ? [ pointTarget ] : [ ] ;
1045
+ }
1037
1046
}
1038
- const hasInsideTargets = firstPassedTargets . length > 0 ;
1039
1047
const isPreventSelect = ! selectFromInside && hasInsideTargets ;
1040
1048
1041
1049
// prevent drag from inside when selectByClick is false
@@ -1094,6 +1102,7 @@ class Selecto extends EventEmitter<SelectoEvents> {
1094
1102
} else {
1095
1103
data . startPassedTargets = [ ] ;
1096
1104
}
1105
+
1097
1106
this . _select (
1098
1107
firstPassedTargets ,
1099
1108
hitRect ,
@@ -1171,7 +1180,8 @@ class Selecto extends EventEmitter<SelectoEvents> {
1171
1180
if ( ! isInnerScroll && scrollOptions && scrollOptions . container ) {
1172
1181
this . dragScroll . dragStart ( e , scrollOptions ) ;
1173
1182
}
1174
- if ( clickBySelectEnd ) {
1183
+
1184
+ if ( isPreventSelect && selectByClick && clickBySelectEnd ) {
1175
1185
data . selectFlag = false ;
1176
1186
e . preventDrag ( ) ;
1177
1187
}
@@ -1206,6 +1216,7 @@ class Selecto extends EventEmitter<SelectoEvents> {
1206
1216
const passedTargets = this . hitTest (
1207
1217
rect ,
1208
1218
data ,
1219
+ true ,
1209
1220
e ,
1210
1221
) ;
1211
1222
selectedTargets = passTargets (
0 commit comments