@depup/testing-library__user-event 14.6.3-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +20 -0
- package/README.md +25 -0
- package/changes.json +5 -0
- package/dist/cjs/clipboard/copy.js +22 -0
- package/dist/cjs/clipboard/cut.js +22 -0
- package/dist/cjs/clipboard/index.js +11 -0
- package/dist/cjs/clipboard/paste.js +24 -0
- package/dist/cjs/convenience/click.js +35 -0
- package/dist/cjs/convenience/hover.js +19 -0
- package/dist/cjs/convenience/index.js +14 -0
- package/dist/cjs/convenience/tab.js +7 -0
- package/dist/cjs/document/UI.js +90 -0
- package/dist/cjs/document/copySelection.js +29 -0
- package/dist/cjs/document/getValueOrTextContent.js +18 -0
- package/dist/cjs/document/index.js +17 -0
- package/dist/cjs/document/interceptor.js +104 -0
- package/dist/cjs/document/patchFocus.js +106 -0
- package/dist/cjs/document/prepareDocument.js +58 -0
- package/dist/cjs/document/trackValue.js +57 -0
- package/dist/cjs/event/behavior/click.js +32 -0
- package/dist/cjs/event/behavior/cut.js +14 -0
- package/dist/cjs/event/behavior/index.js +13 -0
- package/dist/cjs/event/behavior/keydown.js +128 -0
- package/dist/cjs/event/behavior/keypress.js +51 -0
- package/dist/cjs/event/behavior/keyup.js +17 -0
- package/dist/cjs/event/behavior/paste.js +18 -0
- package/dist/cjs/event/behavior/registry.js +5 -0
- package/dist/cjs/event/createEvent.js +193 -0
- package/dist/cjs/event/dispatchEvent.js +54 -0
- package/dist/cjs/event/eventMap.js +281 -0
- package/dist/cjs/event/focus.js +34 -0
- package/dist/cjs/event/index.js +22 -0
- package/dist/cjs/event/input.js +158 -0
- package/dist/cjs/event/radio.js +27 -0
- package/dist/cjs/event/selection/getInputRange.js +18 -0
- package/dist/cjs/event/selection/getTargetTypeAndSelection.js +31 -0
- package/dist/cjs/event/selection/index.js +24 -0
- package/dist/cjs/event/selection/modifySelection.js +21 -0
- package/dist/cjs/event/selection/modifySelectionPerMouse.js +40 -0
- package/dist/cjs/event/selection/moveSelection.js +38 -0
- package/dist/cjs/event/selection/resolveCaretPosition.js +60 -0
- package/dist/cjs/event/selection/selectAll.js +38 -0
- package/dist/cjs/event/selection/setSelection.js +21 -0
- package/dist/cjs/event/selection/setSelectionPerMouse.js +79 -0
- package/dist/cjs/event/selection/setSelectionRange.js +31 -0
- package/dist/cjs/event/selection/updateSelectionOnFocus.js +40 -0
- package/dist/cjs/event/types.js +2 -0
- package/dist/cjs/event/wrapEvent.js +10 -0
- package/dist/cjs/index.js +12 -0
- package/dist/cjs/keyboard/index.js +40 -0
- package/dist/cjs/keyboard/keyMap.js +178 -0
- package/dist/cjs/keyboard/parseKeyDef.js +45 -0
- package/dist/cjs/options.js +14 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/pointer/index.js +74 -0
- package/dist/cjs/pointer/keyMap.js +33 -0
- package/dist/cjs/pointer/parseKeyDef.js +23 -0
- package/dist/cjs/setup/api.js +35 -0
- package/dist/cjs/setup/directApi.js +75 -0
- package/dist/cjs/setup/index.js +11 -0
- package/dist/cjs/setup/setup.js +125 -0
- package/dist/cjs/setup/wrapAsync.js +11 -0
- package/dist/cjs/system/index.js +42 -0
- package/dist/cjs/system/keyboard.js +165 -0
- package/dist/cjs/system/pointer/buttons.js +80 -0
- package/dist/cjs/system/pointer/device.js +32 -0
- package/dist/cjs/system/pointer/index.js +156 -0
- package/dist/cjs/system/pointer/mouse.js +204 -0
- package/dist/cjs/system/pointer/pointer.js +129 -0
- package/dist/cjs/system/pointer/shared.js +8 -0
- package/dist/cjs/utility/clear.js +32 -0
- package/dist/cjs/utility/index.js +14 -0
- package/dist/cjs/utility/selectOptions.js +114 -0
- package/dist/cjs/utility/type.js +23 -0
- package/dist/cjs/utility/upload.js +62 -0
- package/dist/cjs/utils/click/isClickableInput.js +20 -0
- package/dist/cjs/utils/dataTransfer/Blob.js +16 -0
- package/dist/cjs/utils/dataTransfer/Clipboard.js +174 -0
- package/dist/cjs/utils/dataTransfer/DataTransfer.js +134 -0
- package/dist/cjs/utils/dataTransfer/FileList.js +24 -0
- package/dist/cjs/utils/edit/isContentEditable.js +18 -0
- package/dist/cjs/utils/edit/isEditable.js +29 -0
- package/dist/cjs/utils/edit/maxLength.js +26 -0
- package/dist/cjs/utils/edit/setFiles.js +58 -0
- package/dist/cjs/utils/edit/timeValue.js +40 -0
- package/dist/cjs/utils/focus/cursor.js +126 -0
- package/dist/cjs/utils/focus/getActiveElement.js +25 -0
- package/dist/cjs/utils/focus/getTabDestination.js +80 -0
- package/dist/cjs/utils/focus/isFocusable.js +9 -0
- package/dist/cjs/utils/focus/selection.js +20 -0
- package/dist/cjs/utils/focus/selector.js +15 -0
- package/dist/cjs/utils/index.js +78 -0
- package/dist/cjs/utils/keyDef/readNextDescriptor.js +91 -0
- package/dist/cjs/utils/misc/cloneEvent.js +7 -0
- package/dist/cjs/utils/misc/findClosest.js +14 -0
- package/dist/cjs/utils/misc/getDocumentFromNode.js +10 -0
- package/dist/cjs/utils/misc/getTreeDiff.js +25 -0
- package/dist/cjs/utils/misc/getWindow.js +19 -0
- package/dist/cjs/utils/misc/isDescendantOrSelf.js +14 -0
- package/dist/cjs/utils/misc/isDisabled.js +33 -0
- package/dist/cjs/utils/misc/isElementType.js +20 -0
- package/dist/cjs/utils/misc/isVisible.js +19 -0
- package/dist/cjs/utils/misc/level.js +17 -0
- package/dist/cjs/utils/misc/wait.js +14 -0
- package/dist/cjs/utils/pointer/cssPointerEvents.js +102 -0
- package/dist/esm/clipboard/copy.js +20 -0
- package/dist/esm/clipboard/cut.js +20 -0
- package/dist/esm/clipboard/index.js +3 -0
- package/dist/esm/clipboard/paste.js +22 -0
- package/dist/esm/convenience/click.js +31 -0
- package/dist/esm/convenience/hover.js +16 -0
- package/dist/esm/convenience/index.js +3 -0
- package/dist/esm/convenience/tab.js +5 -0
- package/dist/esm/document/UI.js +77 -0
- package/dist/esm/document/copySelection.js +27 -0
- package/dist/esm/document/getValueOrTextContent.js +16 -0
- package/dist/esm/document/index.js +4 -0
- package/dist/esm/document/interceptor.js +99 -0
- package/dist/esm/document/patchFocus.js +103 -0
- package/dist/esm/document/prepareDocument.js +56 -0
- package/dist/esm/document/trackValue.js +53 -0
- package/dist/esm/event/behavior/click.js +30 -0
- package/dist/esm/event/behavior/cut.js +12 -0
- package/dist/esm/event/behavior/index.js +7 -0
- package/dist/esm/event/behavior/keydown.js +126 -0
- package/dist/esm/event/behavior/keypress.js +49 -0
- package/dist/esm/event/behavior/keyup.js +15 -0
- package/dist/esm/event/behavior/paste.js +16 -0
- package/dist/esm/event/behavior/registry.js +3 -0
- package/dist/esm/event/createEvent.js +191 -0
- package/dist/esm/event/dispatchEvent.js +50 -0
- package/dist/esm/event/eventMap.js +277 -0
- package/dist/esm/event/focus.js +31 -0
- package/dist/esm/event/index.js +7 -0
- package/dist/esm/event/input.js +156 -0
- package/dist/esm/event/radio.js +25 -0
- package/dist/esm/event/selection/getInputRange.js +16 -0
- package/dist/esm/event/selection/getTargetTypeAndSelection.js +29 -0
- package/dist/esm/event/selection/index.js +9 -0
- package/dist/esm/event/selection/modifySelection.js +19 -0
- package/dist/esm/event/selection/modifySelectionPerMouse.js +38 -0
- package/dist/esm/event/selection/moveSelection.js +36 -0
- package/dist/esm/event/selection/resolveCaretPosition.js +58 -0
- package/dist/esm/event/selection/selectAll.js +35 -0
- package/dist/esm/event/selection/setSelection.js +19 -0
- package/dist/esm/event/selection/setSelectionPerMouse.js +77 -0
- package/dist/esm/event/selection/setSelectionRange.js +29 -0
- package/dist/esm/event/selection/updateSelectionOnFocus.js +38 -0
- package/dist/esm/event/types.js +1 -0
- package/dist/esm/event/wrapEvent.js +8 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/keyboard/index.js +37 -0
- package/dist/esm/keyboard/keyMap.js +176 -0
- package/dist/esm/keyboard/parseKeyDef.js +43 -0
- package/dist/esm/options.js +12 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/pointer/index.js +72 -0
- package/dist/esm/pointer/keyMap.js +31 -0
- package/dist/esm/pointer/parseKeyDef.js +21 -0
- package/dist/esm/setup/api.js +33 -0
- package/dist/esm/setup/directApi.js +58 -0
- package/dist/esm/setup/index.js +9 -0
- package/dist/esm/setup/setup.js +119 -0
- package/dist/esm/setup/wrapAsync.js +9 -0
- package/dist/esm/system/index.js +40 -0
- package/dist/esm/system/keyboard.js +162 -0
- package/dist/esm/system/pointer/buttons.js +74 -0
- package/dist/esm/system/pointer/device.js +30 -0
- package/dist/esm/system/pointer/index.js +154 -0
- package/dist/esm/system/pointer/mouse.js +202 -0
- package/dist/esm/system/pointer/pointer.js +127 -0
- package/dist/esm/system/pointer/shared.js +6 -0
- package/dist/esm/utility/clear.js +30 -0
- package/dist/esm/utility/index.js +4 -0
- package/dist/esm/utility/selectOptions.js +111 -0
- package/dist/esm/utility/type.js +21 -0
- package/dist/esm/utility/upload.js +60 -0
- package/dist/esm/utils/click/isClickableInput.js +18 -0
- package/dist/esm/utils/dataTransfer/Blob.js +14 -0
- package/dist/esm/utils/dataTransfer/Clipboard.js +167 -0
- package/dist/esm/utils/dataTransfer/DataTransfer.js +131 -0
- package/dist/esm/utils/dataTransfer/FileList.js +22 -0
- package/dist/esm/utils/edit/isContentEditable.js +15 -0
- package/dist/esm/utils/edit/isEditable.js +26 -0
- package/dist/esm/utils/edit/maxLength.js +23 -0
- package/dist/esm/utils/edit/setFiles.js +56 -0
- package/dist/esm/utils/edit/timeValue.js +37 -0
- package/dist/esm/utils/focus/cursor.js +124 -0
- package/dist/esm/utils/focus/getActiveElement.js +22 -0
- package/dist/esm/utils/focus/getTabDestination.js +78 -0
- package/dist/esm/utils/focus/isFocusable.js +7 -0
- package/dist/esm/utils/focus/selection.js +17 -0
- package/dist/esm/utils/focus/selector.js +13 -0
- package/dist/esm/utils/index.js +29 -0
- package/dist/esm/utils/keyDef/readNextDescriptor.js +89 -0
- package/dist/esm/utils/misc/cloneEvent.js +5 -0
- package/dist/esm/utils/misc/findClosest.js +12 -0
- package/dist/esm/utils/misc/getDocumentFromNode.js +8 -0
- package/dist/esm/utils/misc/getTreeDiff.js +23 -0
- package/dist/esm/utils/misc/getWindow.js +17 -0
- package/dist/esm/utils/misc/isDescendantOrSelf.js +12 -0
- package/dist/esm/utils/misc/isDisabled.js +31 -0
- package/dist/esm/utils/misc/isElementType.js +18 -0
- package/dist/esm/utils/misc/isVisible.js +17 -0
- package/dist/esm/utils/misc/level.js +13 -0
- package/dist/esm/utils/misc/wait.js +12 -0
- package/dist/esm/utils/pointer/cssPointerEvents.js +99 -0
- package/dist/types/clipboard/copy.d.ts +2 -0
- package/dist/types/clipboard/cut.d.ts +2 -0
- package/dist/types/clipboard/index.d.ts +3 -0
- package/dist/types/clipboard/paste.d.ts +2 -0
- package/dist/types/convenience/click.d.ts +4 -0
- package/dist/types/convenience/hover.d.ts +3 -0
- package/dist/types/convenience/index.d.ts +3 -0
- package/dist/types/convenience/tab.d.ts +4 -0
- package/dist/types/document/UI.d.ts +42 -0
- package/dist/types/document/copySelection.d.ts +1 -0
- package/dist/types/document/getValueOrTextContent.d.ts +1 -0
- package/dist/types/document/index.d.ts +5 -0
- package/dist/types/document/interceptor.d.ts +19 -0
- package/dist/types/document/patchFocus.d.ts +9 -0
- package/dist/types/document/prepareDocument.d.ts +8 -0
- package/dist/types/document/trackValue.d.ts +17 -0
- package/dist/types/event/behavior/click.d.ts +1 -0
- package/dist/types/event/behavior/cut.d.ts +1 -0
- package/dist/types/event/behavior/index.d.ts +8 -0
- package/dist/types/event/behavior/keydown.d.ts +1 -0
- package/dist/types/event/behavior/keypress.d.ts +1 -0
- package/dist/types/event/behavior/keyup.d.ts +1 -0
- package/dist/types/event/behavior/paste.d.ts +1 -0
- package/dist/types/event/behavior/registry.d.ts +8 -0
- package/dist/types/event/createEvent.d.ts +2 -0
- package/dist/types/event/dispatchEvent.d.ts +5 -0
- package/dist/types/event/eventMap.d.ts +265 -0
- package/dist/types/event/focus.d.ts +5 -0
- package/dist/types/event/index.d.ts +7 -0
- package/dist/types/event/input.d.ts +2 -0
- package/dist/types/event/radio.d.ts +4 -0
- package/dist/types/event/selection/getInputRange.d.ts +5 -0
- package/dist/types/event/selection/getTargetTypeAndSelection.d.ts +10 -0
- package/dist/types/event/selection/index.d.ts +15 -0
- package/dist/types/event/selection/modifySelection.d.ts +8 -0
- package/dist/types/event/selection/modifySelectionPerMouse.d.ts +7 -0
- package/dist/types/event/selection/moveSelection.d.ts +4 -0
- package/dist/types/event/selection/resolveCaretPosition.d.ts +8 -0
- package/dist/types/event/selection/selectAll.d.ts +5 -0
- package/dist/types/event/selection/setSelection.d.ts +10 -0
- package/dist/types/event/selection/setSelectionPerMouse.d.ts +8 -0
- package/dist/types/event/selection/setSelectionRange.d.ts +6 -0
- package/dist/types/event/selection/updateSelectionOnFocus.d.ts +5 -0
- package/dist/types/event/types.d.ts +20 -0
- package/dist/types/event/wrapEvent.d.ts +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/keyboard/index.d.ts +3 -0
- package/dist/types/keyboard/keyMap.d.ts +5 -0
- package/dist/types/keyboard/parseKeyDef.d.ts +17 -0
- package/dist/types/options.d.ts +115 -0
- package/dist/types/pointer/index.d.ts +28 -0
- package/dist/types/pointer/keyMap.d.ts +2 -0
- package/dist/types/pointer/parseKeyDef.d.ts +6 -0
- package/dist/types/setup/api.d.ts +23 -0
- package/dist/types/setup/directApi.d.ts +24 -0
- package/dist/types/setup/index.d.ts +22 -0
- package/dist/types/setup/setup.d.ts +44 -0
- package/dist/types/setup/wrapAsync.d.ts +4 -0
- package/dist/types/system/index.d.ts +10 -0
- package/dist/types/system/keyboard.d.ts +50 -0
- package/dist/types/system/pointer/buttons.d.ts +23 -0
- package/dist/types/system/pointer/device.d.ts +8 -0
- package/dist/types/system/pointer/index.d.ts +21 -0
- package/dist/types/system/pointer/mouse.d.ts +31 -0
- package/dist/types/system/pointer/pointer.d.ts +32 -0
- package/dist/types/system/pointer/shared.d.ts +20 -0
- package/dist/types/utility/clear.d.ts +2 -0
- package/dist/types/utility/index.d.ts +4 -0
- package/dist/types/utility/selectOptions.d.ts +3 -0
- package/dist/types/utility/type.d.ts +9 -0
- package/dist/types/utility/upload.d.ts +5 -0
- package/dist/types/utils/click/isClickableInput.d.ts +15 -0
- package/dist/types/utils/dataTransfer/Blob.d.ts +3 -0
- package/dist/types/utils/dataTransfer/Clipboard.d.ts +11 -0
- package/dist/types/utils/dataTransfer/DataTransfer.d.ts +2 -0
- package/dist/types/utils/dataTransfer/FileList.d.ts +1 -0
- package/dist/types/utils/edit/isContentEditable.d.ts +7 -0
- package/dist/types/utils/edit/isEditable.d.ts +24 -0
- package/dist/types/utils/edit/maxLength.d.ts +14 -0
- package/dist/types/utils/edit/setFiles.d.ts +12 -0
- package/dist/types/utils/edit/timeValue.d.ts +4 -0
- package/dist/types/utils/focus/cursor.d.ts +9 -0
- package/dist/types/utils/focus/getActiveElement.d.ts +2 -0
- package/dist/types/utils/focus/getTabDestination.d.ts +1 -0
- package/dist/types/utils/focus/isFocusable.d.ts +1 -0
- package/dist/types/utils/focus/selection.d.ts +8 -0
- package/dist/types/utils/focus/selector.d.ts +1 -0
- package/dist/types/utils/index.d.ts +29 -0
- package/dist/types/utils/keyDef/readNextDescriptor.d.ts +21 -0
- package/dist/types/utils/misc/cloneEvent.d.ts +1 -0
- package/dist/types/utils/misc/findClosest.d.ts +1 -0
- package/dist/types/utils/misc/getDocumentFromNode.d.ts +1 -0
- package/dist/types/utils/misc/getTreeDiff.d.ts +1 -0
- package/dist/types/utils/misc/getWindow.d.ts +1 -0
- package/dist/types/utils/misc/isDescendantOrSelf.d.ts +1 -0
- package/dist/types/utils/misc/isDisabled.d.ts +1 -0
- package/dist/types/utils/misc/isElementType.d.ts +5 -0
- package/dist/types/utils/misc/isVisible.d.ts +1 -0
- package/dist/types/utils/misc/level.d.ts +8 -0
- package/dist/types/utils/misc/wait.d.ts +2 -0
- package/dist/types/utils/pointer/cssPointerEvents.d.ts +19 -0
- package/package.json +131 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import './behavior/click.js';
|
|
2
|
+
import './behavior/cut.js';
|
|
3
|
+
import './behavior/keydown.js';
|
|
4
|
+
import './behavior/keypress.js';
|
|
5
|
+
import './behavior/keyup.js';
|
|
6
|
+
import './behavior/paste.js';
|
|
7
|
+
import { behavior } from './behavior/registry.js';
|
|
8
|
+
import { wrapEvent } from './wrapEvent.js';
|
|
9
|
+
import { isMouseEvent, isKeyboardEvent } from './eventMap.js';
|
|
10
|
+
import { createEvent } from './createEvent.js';
|
|
11
|
+
|
|
12
|
+
function dispatchUIEvent(target, type, init, preventDefault = false) {
|
|
13
|
+
if (isMouseEvent(type) || isKeyboardEvent(type)) {
|
|
14
|
+
init = {
|
|
15
|
+
...init,
|
|
16
|
+
...this.system.getUIEventModifiers()
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const event = createEvent(type, target, init);
|
|
20
|
+
return dispatchEvent.call(this, target, event, preventDefault);
|
|
21
|
+
}
|
|
22
|
+
function dispatchEvent(target, event, preventDefault = false) {
|
|
23
|
+
var _behavior_type;
|
|
24
|
+
const type = event.type;
|
|
25
|
+
const behaviorImplementation = preventDefault ? ()=>{} : (_behavior_type = behavior[type]) === null || _behavior_type === void 0 ? void 0 : _behavior_type.call(behavior, event, target, this);
|
|
26
|
+
if (behaviorImplementation) {
|
|
27
|
+
event.preventDefault();
|
|
28
|
+
let defaultPrevented = false;
|
|
29
|
+
Object.defineProperty(event, 'defaultPrevented', {
|
|
30
|
+
get: ()=>defaultPrevented
|
|
31
|
+
});
|
|
32
|
+
Object.defineProperty(event, 'preventDefault', {
|
|
33
|
+
value: ()=>{
|
|
34
|
+
defaultPrevented = event.cancelable;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
wrapEvent(()=>target.dispatchEvent(event));
|
|
38
|
+
if (!defaultPrevented) {
|
|
39
|
+
behaviorImplementation();
|
|
40
|
+
}
|
|
41
|
+
return !defaultPrevented;
|
|
42
|
+
}
|
|
43
|
+
return wrapEvent(()=>target.dispatchEvent(event));
|
|
44
|
+
}
|
|
45
|
+
function dispatchDOMEvent(target, type, init) {
|
|
46
|
+
const event = createEvent(type, target, init);
|
|
47
|
+
wrapEvent(()=>target.dispatchEvent(event));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { dispatchDOMEvent, dispatchEvent, dispatchUIEvent };
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
const eventMap = {
|
|
2
|
+
auxclick: {
|
|
3
|
+
EventType: 'PointerEvent',
|
|
4
|
+
defaultInit: {
|
|
5
|
+
bubbles: true,
|
|
6
|
+
cancelable: true,
|
|
7
|
+
composed: true
|
|
8
|
+
}
|
|
9
|
+
},
|
|
10
|
+
beforeinput: {
|
|
11
|
+
EventType: 'InputEvent',
|
|
12
|
+
defaultInit: {
|
|
13
|
+
bubbles: true,
|
|
14
|
+
cancelable: true,
|
|
15
|
+
composed: true
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
blur: {
|
|
19
|
+
EventType: 'FocusEvent',
|
|
20
|
+
defaultInit: {
|
|
21
|
+
bubbles: false,
|
|
22
|
+
cancelable: false,
|
|
23
|
+
composed: true
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
click: {
|
|
27
|
+
EventType: 'PointerEvent',
|
|
28
|
+
defaultInit: {
|
|
29
|
+
bubbles: true,
|
|
30
|
+
cancelable: true,
|
|
31
|
+
composed: true
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
contextmenu: {
|
|
35
|
+
EventType: 'PointerEvent',
|
|
36
|
+
defaultInit: {
|
|
37
|
+
bubbles: true,
|
|
38
|
+
cancelable: true,
|
|
39
|
+
composed: true
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
copy: {
|
|
43
|
+
EventType: 'ClipboardEvent',
|
|
44
|
+
defaultInit: {
|
|
45
|
+
bubbles: true,
|
|
46
|
+
cancelable: true,
|
|
47
|
+
composed: true
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
change: {
|
|
51
|
+
EventType: 'Event',
|
|
52
|
+
defaultInit: {
|
|
53
|
+
bubbles: true,
|
|
54
|
+
cancelable: false
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
cut: {
|
|
58
|
+
EventType: 'ClipboardEvent',
|
|
59
|
+
defaultInit: {
|
|
60
|
+
bubbles: true,
|
|
61
|
+
cancelable: true,
|
|
62
|
+
composed: true
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
dblclick: {
|
|
66
|
+
EventType: 'MouseEvent',
|
|
67
|
+
defaultInit: {
|
|
68
|
+
bubbles: true,
|
|
69
|
+
cancelable: true,
|
|
70
|
+
composed: true
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
focus: {
|
|
74
|
+
EventType: 'FocusEvent',
|
|
75
|
+
defaultInit: {
|
|
76
|
+
bubbles: false,
|
|
77
|
+
cancelable: false,
|
|
78
|
+
composed: true
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
focusin: {
|
|
82
|
+
EventType: 'FocusEvent',
|
|
83
|
+
defaultInit: {
|
|
84
|
+
bubbles: true,
|
|
85
|
+
cancelable: false,
|
|
86
|
+
composed: true
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
focusout: {
|
|
90
|
+
EventType: 'FocusEvent',
|
|
91
|
+
defaultInit: {
|
|
92
|
+
bubbles: true,
|
|
93
|
+
cancelable: false,
|
|
94
|
+
composed: true
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
keydown: {
|
|
98
|
+
EventType: 'KeyboardEvent',
|
|
99
|
+
defaultInit: {
|
|
100
|
+
bubbles: true,
|
|
101
|
+
cancelable: true,
|
|
102
|
+
composed: true
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
keypress: {
|
|
106
|
+
EventType: 'KeyboardEvent',
|
|
107
|
+
defaultInit: {
|
|
108
|
+
bubbles: true,
|
|
109
|
+
cancelable: true,
|
|
110
|
+
composed: true
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
keyup: {
|
|
114
|
+
EventType: 'KeyboardEvent',
|
|
115
|
+
defaultInit: {
|
|
116
|
+
bubbles: true,
|
|
117
|
+
cancelable: true,
|
|
118
|
+
composed: true
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
paste: {
|
|
122
|
+
EventType: 'ClipboardEvent',
|
|
123
|
+
defaultInit: {
|
|
124
|
+
bubbles: true,
|
|
125
|
+
cancelable: true,
|
|
126
|
+
composed: true
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
input: {
|
|
130
|
+
EventType: 'InputEvent',
|
|
131
|
+
defaultInit: {
|
|
132
|
+
bubbles: true,
|
|
133
|
+
cancelable: false,
|
|
134
|
+
composed: true
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
mousedown: {
|
|
138
|
+
EventType: 'MouseEvent',
|
|
139
|
+
defaultInit: {
|
|
140
|
+
bubbles: true,
|
|
141
|
+
cancelable: true,
|
|
142
|
+
composed: true
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
mouseenter: {
|
|
146
|
+
EventType: 'MouseEvent',
|
|
147
|
+
defaultInit: {
|
|
148
|
+
bubbles: false,
|
|
149
|
+
cancelable: false,
|
|
150
|
+
composed: true
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
mouseleave: {
|
|
154
|
+
EventType: 'MouseEvent',
|
|
155
|
+
defaultInit: {
|
|
156
|
+
bubbles: false,
|
|
157
|
+
cancelable: false,
|
|
158
|
+
composed: true
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
mousemove: {
|
|
162
|
+
EventType: 'MouseEvent',
|
|
163
|
+
defaultInit: {
|
|
164
|
+
bubbles: true,
|
|
165
|
+
cancelable: true,
|
|
166
|
+
composed: true
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
mouseout: {
|
|
170
|
+
EventType: 'MouseEvent',
|
|
171
|
+
defaultInit: {
|
|
172
|
+
bubbles: true,
|
|
173
|
+
cancelable: true,
|
|
174
|
+
composed: true
|
|
175
|
+
}
|
|
176
|
+
},
|
|
177
|
+
mouseover: {
|
|
178
|
+
EventType: 'MouseEvent',
|
|
179
|
+
defaultInit: {
|
|
180
|
+
bubbles: true,
|
|
181
|
+
cancelable: true,
|
|
182
|
+
composed: true
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
mouseup: {
|
|
186
|
+
EventType: 'MouseEvent',
|
|
187
|
+
defaultInit: {
|
|
188
|
+
bubbles: true,
|
|
189
|
+
cancelable: true,
|
|
190
|
+
composed: true
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
pointerover: {
|
|
194
|
+
EventType: 'PointerEvent',
|
|
195
|
+
defaultInit: {
|
|
196
|
+
bubbles: true,
|
|
197
|
+
cancelable: true,
|
|
198
|
+
composed: true
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
pointerenter: {
|
|
202
|
+
EventType: 'PointerEvent',
|
|
203
|
+
defaultInit: {
|
|
204
|
+
bubbles: false,
|
|
205
|
+
cancelable: false
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
pointerdown: {
|
|
209
|
+
EventType: 'PointerEvent',
|
|
210
|
+
defaultInit: {
|
|
211
|
+
bubbles: true,
|
|
212
|
+
cancelable: true,
|
|
213
|
+
composed: true
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
pointermove: {
|
|
217
|
+
EventType: 'PointerEvent',
|
|
218
|
+
defaultInit: {
|
|
219
|
+
bubbles: true,
|
|
220
|
+
cancelable: true,
|
|
221
|
+
composed: true
|
|
222
|
+
}
|
|
223
|
+
},
|
|
224
|
+
pointerup: {
|
|
225
|
+
EventType: 'PointerEvent',
|
|
226
|
+
defaultInit: {
|
|
227
|
+
bubbles: true,
|
|
228
|
+
cancelable: true,
|
|
229
|
+
composed: true
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
pointercancel: {
|
|
233
|
+
EventType: 'PointerEvent',
|
|
234
|
+
defaultInit: {
|
|
235
|
+
bubbles: true,
|
|
236
|
+
cancelable: false,
|
|
237
|
+
composed: true
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
pointerout: {
|
|
241
|
+
EventType: 'PointerEvent',
|
|
242
|
+
defaultInit: {
|
|
243
|
+
bubbles: true,
|
|
244
|
+
cancelable: true,
|
|
245
|
+
composed: true
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
pointerleave: {
|
|
249
|
+
EventType: 'PointerEvent',
|
|
250
|
+
defaultInit: {
|
|
251
|
+
bubbles: false,
|
|
252
|
+
cancelable: false
|
|
253
|
+
}
|
|
254
|
+
},
|
|
255
|
+
submit: {
|
|
256
|
+
EventType: 'Event',
|
|
257
|
+
defaultInit: {
|
|
258
|
+
bubbles: true,
|
|
259
|
+
cancelable: true
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
function getEventClass(type) {
|
|
264
|
+
return eventMap[type].EventType;
|
|
265
|
+
}
|
|
266
|
+
const mouseEvents = [
|
|
267
|
+
'MouseEvent',
|
|
268
|
+
'PointerEvent'
|
|
269
|
+
];
|
|
270
|
+
function isMouseEvent(type) {
|
|
271
|
+
return mouseEvents.includes(getEventClass(type));
|
|
272
|
+
}
|
|
273
|
+
function isKeyboardEvent(type) {
|
|
274
|
+
return getEventClass(type) === 'KeyboardEvent';
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export { eventMap, isKeyboardEvent, isMouseEvent };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import '../utils/dataTransfer/Clipboard.js';
|
|
2
|
+
import { getActiveElement } from '../utils/focus/getActiveElement.js';
|
|
3
|
+
import { isFocusable } from '../utils/focus/isFocusable.js';
|
|
4
|
+
import { findClosest } from '../utils/misc/findClosest.js';
|
|
5
|
+
import { updateSelectionOnFocus } from './selection/updateSelectionOnFocus.js';
|
|
6
|
+
import { wrapEvent } from './wrapEvent.js';
|
|
7
|
+
|
|
8
|
+
// Browsers do not dispatch FocusEvent if the document does not have focus.
|
|
9
|
+
// TODO: simulate FocusEvent in browsers
|
|
10
|
+
/**
|
|
11
|
+
* Focus closest focusable element.
|
|
12
|
+
*/ function focusElement(element) {
|
|
13
|
+
const target = findClosest(element, isFocusable);
|
|
14
|
+
const activeElement = getActiveElement(element.ownerDocument);
|
|
15
|
+
if ((target !== null && target !== void 0 ? target : element.ownerDocument.body) === activeElement) {
|
|
16
|
+
return;
|
|
17
|
+
} else if (target) {
|
|
18
|
+
wrapEvent(()=>target.focus());
|
|
19
|
+
} else {
|
|
20
|
+
wrapEvent(()=>activeElement === null || activeElement === void 0 ? void 0 : activeElement.blur());
|
|
21
|
+
}
|
|
22
|
+
updateSelectionOnFocus(target !== null && target !== void 0 ? target : element.ownerDocument.body);
|
|
23
|
+
}
|
|
24
|
+
function blurElement(element) {
|
|
25
|
+
if (!isFocusable(element)) return;
|
|
26
|
+
const wasActive = getActiveElement(element.ownerDocument) === element;
|
|
27
|
+
if (!wasActive) return;
|
|
28
|
+
wrapEvent(()=>element.blur());
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { blurElement, focusElement };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { dispatchDOMEvent, dispatchEvent, dispatchUIEvent } from './dispatchEvent.js';
|
|
2
|
+
export { blurElement, focusElement } from './focus.js';
|
|
3
|
+
export { input } from './input.js';
|
|
4
|
+
import '../utils/dataTransfer/Clipboard.js';
|
|
5
|
+
export { setSelectionPerMouseDown } from './selection/setSelectionPerMouse.js';
|
|
6
|
+
export { modifySelectionPerMouseMove } from './selection/modifySelectionPerMouse.js';
|
|
7
|
+
export { isAllSelected, selectAll } from './selection/selectAll.js';
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { setUIValue, clearInitialValue, getUIValue } from '../document/UI.js';
|
|
2
|
+
import { isElementType } from '../utils/misc/isElementType.js';
|
|
3
|
+
import '../utils/dataTransfer/Clipboard.js';
|
|
4
|
+
import { isValidDateOrTimeValue, buildTimeValue } from '../utils/edit/timeValue.js';
|
|
5
|
+
import { supportsMaxLength, getMaxLength } from '../utils/edit/maxLength.js';
|
|
6
|
+
import { getNextCursorPosition } from '../utils/focus/cursor.js';
|
|
7
|
+
import { commitValueAfterInput } from '../document/trackValue.js';
|
|
8
|
+
import { getInputRange } from './selection/getInputRange.js';
|
|
9
|
+
import { setSelection } from './selection/setSelection.js';
|
|
10
|
+
|
|
11
|
+
function isDateOrTime(element) {
|
|
12
|
+
return isElementType(element, 'input') && [
|
|
13
|
+
'date',
|
|
14
|
+
'time'
|
|
15
|
+
].includes(element.type);
|
|
16
|
+
}
|
|
17
|
+
function input(instance, element, data, inputType = 'insertText') {
|
|
18
|
+
const inputRange = getInputRange(element);
|
|
19
|
+
/* istanbul ignore if */ if (!inputRange) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
// There is no `beforeinput` event on `date` and `time` input
|
|
23
|
+
if (!isDateOrTime(element)) {
|
|
24
|
+
const unprevented = instance.dispatchUIEvent(element, 'beforeinput', {
|
|
25
|
+
inputType,
|
|
26
|
+
data
|
|
27
|
+
});
|
|
28
|
+
if (!unprevented) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if ('startContainer' in inputRange) {
|
|
33
|
+
editContenteditable(instance, element, inputRange, data, inputType);
|
|
34
|
+
} else {
|
|
35
|
+
editInputElement(instance, element, inputRange, data, inputType);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function editContenteditable(instance, element, inputRange, data, inputType) {
|
|
39
|
+
let del = false;
|
|
40
|
+
if (!inputRange.collapsed) {
|
|
41
|
+
del = true;
|
|
42
|
+
inputRange.deleteContents();
|
|
43
|
+
} else if ([
|
|
44
|
+
'deleteContentBackward',
|
|
45
|
+
'deleteContentForward'
|
|
46
|
+
].includes(inputType)) {
|
|
47
|
+
const nextPosition = getNextCursorPosition(inputRange.startContainer, inputRange.startOffset, inputType === 'deleteContentBackward' ? -1 : 1, inputType);
|
|
48
|
+
if (nextPosition) {
|
|
49
|
+
del = true;
|
|
50
|
+
const delRange = inputRange.cloneRange();
|
|
51
|
+
if (delRange.comparePoint(nextPosition.node, nextPosition.offset) < 0) {
|
|
52
|
+
delRange.setStart(nextPosition.node, nextPosition.offset);
|
|
53
|
+
} else {
|
|
54
|
+
delRange.setEnd(nextPosition.node, nextPosition.offset);
|
|
55
|
+
}
|
|
56
|
+
delRange.deleteContents();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (data) {
|
|
60
|
+
if (inputRange.endContainer.nodeType === 3) {
|
|
61
|
+
const offset = inputRange.endOffset;
|
|
62
|
+
inputRange.endContainer.insertData(offset, data);
|
|
63
|
+
inputRange.setStart(inputRange.endContainer, offset + data.length);
|
|
64
|
+
inputRange.setEnd(inputRange.endContainer, offset + data.length);
|
|
65
|
+
} else {
|
|
66
|
+
const text = element.ownerDocument.createTextNode(data);
|
|
67
|
+
inputRange.insertNode(text);
|
|
68
|
+
inputRange.setStart(text, data.length);
|
|
69
|
+
inputRange.setEnd(text, data.length);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (del || data) {
|
|
73
|
+
instance.dispatchUIEvent(element, 'input', {
|
|
74
|
+
inputType
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function editInputElement(instance, element, inputRange, data, inputType) {
|
|
79
|
+
let dataToInsert = data;
|
|
80
|
+
if (supportsMaxLength(element)) {
|
|
81
|
+
const maxLength = getMaxLength(element);
|
|
82
|
+
if (maxLength !== undefined && data.length > 0) {
|
|
83
|
+
const selectionLength = inputRange.endOffset - inputRange.startOffset;
|
|
84
|
+
const spaceUntilMaxLength = maxLength - element.value.length + selectionLength;
|
|
85
|
+
if (spaceUntilMaxLength > 0) {
|
|
86
|
+
dataToInsert = data.substring(0, spaceUntilMaxLength);
|
|
87
|
+
} else {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
const { newValue, newOffset, oldValue } = calculateNewValue(dataToInsert, element, inputRange, inputType);
|
|
93
|
+
if (newValue === oldValue && newOffset === inputRange.startOffset && newOffset === inputRange.endOffset) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (isElementType(element, 'input', {
|
|
97
|
+
type: 'number'
|
|
98
|
+
}) && !isValidNumberInput(newValue)) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
setUIValue(element, newValue);
|
|
102
|
+
setSelection({
|
|
103
|
+
focusNode: element,
|
|
104
|
+
anchorOffset: newOffset,
|
|
105
|
+
focusOffset: newOffset
|
|
106
|
+
});
|
|
107
|
+
if (isDateOrTime(element)) {
|
|
108
|
+
if (isValidDateOrTimeValue(element, newValue)) {
|
|
109
|
+
commitInput(instance, element, newOffset, {});
|
|
110
|
+
instance.dispatchUIEvent(element, 'change');
|
|
111
|
+
clearInitialValue(element);
|
|
112
|
+
}
|
|
113
|
+
} else {
|
|
114
|
+
commitInput(instance, element, newOffset, {
|
|
115
|
+
data,
|
|
116
|
+
inputType
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function calculateNewValue(inputData, node, { startOffset, endOffset }, inputType) {
|
|
121
|
+
const value = getUIValue(node);
|
|
122
|
+
const prologEnd = Math.max(0, startOffset === endOffset && inputType === 'deleteContentBackward' ? startOffset - 1 : startOffset);
|
|
123
|
+
const prolog = value.substring(0, prologEnd);
|
|
124
|
+
const epilogStart = Math.min(value.length, startOffset === endOffset && inputType === 'deleteContentForward' ? startOffset + 1 : endOffset);
|
|
125
|
+
const epilog = value.substring(epilogStart, value.length);
|
|
126
|
+
let newValue = `${prolog}${inputData}${epilog}`;
|
|
127
|
+
let newOffset = prologEnd + inputData.length;
|
|
128
|
+
if (isElementType(node, 'input', {
|
|
129
|
+
type: 'time'
|
|
130
|
+
})) {
|
|
131
|
+
const builtValue = buildTimeValue(newValue);
|
|
132
|
+
if (builtValue !== '' && isValidDateOrTimeValue(node, builtValue)) {
|
|
133
|
+
newValue = builtValue;
|
|
134
|
+
newOffset = builtValue.length;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
oldValue: value,
|
|
139
|
+
newValue,
|
|
140
|
+
newOffset
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function commitInput(instance, element, newOffset, inputInit) {
|
|
144
|
+
instance.dispatchUIEvent(element, 'input', inputInit);
|
|
145
|
+
commitValueAfterInput(element, newOffset);
|
|
146
|
+
}
|
|
147
|
+
function isValidNumberInput(value) {
|
|
148
|
+
var _value_match, _value_match1;
|
|
149
|
+
// the browser allows some invalid input but not others
|
|
150
|
+
// it allows up to two '-' at any place before any 'e' or one directly following 'e'
|
|
151
|
+
// it allows one '.' at any place before e
|
|
152
|
+
const valueParts = value.split('e', 2);
|
|
153
|
+
return !(/[^\d.\-e]/.test(value) || Number((_value_match = value.match(/-/g)) === null || _value_match === void 0 ? void 0 : _value_match.length) > 2 || Number((_value_match1 = value.match(/\./g)) === null || _value_match1 === void 0 ? void 0 : _value_match1.length) > 1 || valueParts[1] && !/^-?\d*$/.test(valueParts[1]));
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
export { input };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import '../utils/dataTransfer/Clipboard.js';
|
|
2
|
+
import { isDisabled } from '../utils/misc/isDisabled.js';
|
|
3
|
+
import { getWindow } from '../utils/misc/getWindow.js';
|
|
4
|
+
import { focusElement } from './focus.js';
|
|
5
|
+
|
|
6
|
+
function walkRadio(instance, el, direction) {
|
|
7
|
+
const window = getWindow(el);
|
|
8
|
+
const group = Array.from(el.ownerDocument.querySelectorAll(el.name ? `input[type="radio"][name="${window.CSS.escape(el.name)}"]` : `input[type="radio"][name=""], input[type="radio"]:not([name])`));
|
|
9
|
+
for(let i = group.findIndex((e)=>e === el) + direction;; i += direction){
|
|
10
|
+
if (!group[i]) {
|
|
11
|
+
i = direction > 0 ? 0 : group.length - 1;
|
|
12
|
+
}
|
|
13
|
+
if (group[i] === el) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (isDisabled(group[i])) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
focusElement(group[i]);
|
|
20
|
+
instance.dispatchUIEvent(group[i], 'click');
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { walkRadio };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { getTargetTypeAndSelection } from './getTargetTypeAndSelection.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Get the range that would be overwritten by input.
|
|
5
|
+
*/ function getInputRange(focusNode) {
|
|
6
|
+
const typeAndSelection = getTargetTypeAndSelection(focusNode);
|
|
7
|
+
if (typeAndSelection.type === 'input') {
|
|
8
|
+
return typeAndSelection.selection;
|
|
9
|
+
} else if (typeAndSelection.type === 'contenteditable') {
|
|
10
|
+
var _typeAndSelection_selection;
|
|
11
|
+
// Multi-range on contenteditable edits the first selection instead of the last
|
|
12
|
+
return (_typeAndSelection_selection = typeAndSelection.selection) === null || _typeAndSelection_selection === void 0 ? void 0 : _typeAndSelection_selection.getRangeAt(0);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export { getInputRange };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { getUISelection } from '../../document/UI.js';
|
|
2
|
+
import '../../utils/dataTransfer/Clipboard.js';
|
|
3
|
+
import { getContentEditable } from '../../utils/edit/isContentEditable.js';
|
|
4
|
+
import { hasOwnSelection } from '../../utils/focus/selection.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Determine which selection logic and selection ranges to consider.
|
|
8
|
+
*/ function getTargetTypeAndSelection(node) {
|
|
9
|
+
const element = getElement(node);
|
|
10
|
+
if (element && hasOwnSelection(element)) {
|
|
11
|
+
return {
|
|
12
|
+
type: 'input',
|
|
13
|
+
selection: getUISelection(element)
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const selection = element === null || element === void 0 ? void 0 : element.ownerDocument.getSelection();
|
|
17
|
+
// It is possible to extend a single-range selection into a contenteditable.
|
|
18
|
+
// This results in the range acting like a range outside of contenteditable.
|
|
19
|
+
const isCE = getContentEditable(node) && (selection === null || selection === void 0 ? void 0 : selection.anchorNode) && getContentEditable(selection.anchorNode);
|
|
20
|
+
return {
|
|
21
|
+
type: isCE ? 'contenteditable' : 'default',
|
|
22
|
+
selection
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function getElement(node) {
|
|
26
|
+
return node.nodeType === 1 ? node : node.parentElement;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { getTargetTypeAndSelection };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { getInputRange } from './getInputRange.js';
|
|
2
|
+
export { modifySelection } from './modifySelection.js';
|
|
3
|
+
export { moveSelection } from './moveSelection.js';
|
|
4
|
+
export { setSelectionPerMouseDown } from './setSelectionPerMouse.js';
|
|
5
|
+
export { modifySelectionPerMouseMove } from './modifySelectionPerMouse.js';
|
|
6
|
+
export { isAllSelected, selectAll } from './selectAll.js';
|
|
7
|
+
export { setSelectionRange } from './setSelectionRange.js';
|
|
8
|
+
export { setSelection } from './setSelection.js';
|
|
9
|
+
export { updateSelectionOnFocus } from './updateSelectionOnFocus.js';
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { setUISelection } from '../../document/UI.js';
|
|
2
|
+
import '../../utils/dataTransfer/Clipboard.js';
|
|
3
|
+
import { getTargetTypeAndSelection } from './getTargetTypeAndSelection.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Extend/shrink the selection like with Shift+Arrows or Shift+Mouse
|
|
7
|
+
*/ function modifySelection({ focusNode, focusOffset }) {
|
|
8
|
+
var _focusNode_ownerDocument_getSelection, _focusNode_ownerDocument;
|
|
9
|
+
const typeAndSelection = getTargetTypeAndSelection(focusNode);
|
|
10
|
+
if (typeAndSelection.type === 'input') {
|
|
11
|
+
return setUISelection(focusNode, {
|
|
12
|
+
anchorOffset: typeAndSelection.selection.anchorOffset,
|
|
13
|
+
focusOffset
|
|
14
|
+
}, 'modify');
|
|
15
|
+
}
|
|
16
|
+
(_focusNode_ownerDocument = focusNode.ownerDocument) === null || _focusNode_ownerDocument === void 0 ? void 0 : (_focusNode_ownerDocument_getSelection = _focusNode_ownerDocument.getSelection()) === null || _focusNode_ownerDocument_getSelection === void 0 ? void 0 : _focusNode_ownerDocument_getSelection.extend(focusNode, focusOffset);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export { modifySelection };
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { setUISelection } from '../../document/UI.js';
|
|
2
|
+
import '../../utils/dataTransfer/Clipboard.js';
|
|
3
|
+
import { resolveCaretPosition } from './resolveCaretPosition.js';
|
|
4
|
+
|
|
5
|
+
function modifySelectionPerMouseMove(selectionRange, { document, target, node, offset }) {
|
|
6
|
+
const selectionFocus = resolveCaretPosition({
|
|
7
|
+
target,
|
|
8
|
+
node,
|
|
9
|
+
offset
|
|
10
|
+
});
|
|
11
|
+
if ('node' in selectionRange) {
|
|
12
|
+
// When the mouse is dragged outside of an input/textarea,
|
|
13
|
+
// the selection is extended to the beginning or end of the input
|
|
14
|
+
// depending on pointer position.
|
|
15
|
+
// TODO: extend selection according to pointer position
|
|
16
|
+
/* istanbul ignore else */ if (selectionFocus.node === selectionRange.node) {
|
|
17
|
+
const anchorOffset = selectionFocus.offset < selectionRange.start ? selectionRange.end : selectionRange.start;
|
|
18
|
+
const focusOffset = selectionFocus.offset > selectionRange.end || selectionFocus.offset < selectionRange.start ? selectionFocus.offset : selectionRange.end;
|
|
19
|
+
setUISelection(selectionRange.node, {
|
|
20
|
+
anchorOffset,
|
|
21
|
+
focusOffset
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
} else {
|
|
25
|
+
const range = selectionRange.cloneRange();
|
|
26
|
+
const cmp = range.comparePoint(selectionFocus.node, selectionFocus.offset);
|
|
27
|
+
if (cmp < 0) {
|
|
28
|
+
range.setStart(selectionFocus.node, selectionFocus.offset);
|
|
29
|
+
} else if (cmp > 0) {
|
|
30
|
+
range.setEnd(selectionFocus.node, selectionFocus.offset);
|
|
31
|
+
}
|
|
32
|
+
const selection = document.getSelection();
|
|
33
|
+
selection === null || selection === void 0 ? void 0 : selection.removeAllRanges();
|
|
34
|
+
selection === null || selection === void 0 ? void 0 : selection.addRange(range.cloneRange());
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { modifySelectionPerMouseMove };
|