You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Read `docs/dev/PROJECT_INSTRUCTIONS.md` before execution.
7
+
- The active `docs/pr/BUILD_PR.md` did not describe this PR. Used the explicit PR102 user request as the build source of truth.
8
+
- No schema changes were required.
9
+
- No sample JSON files were touched.
10
+
11
+
## Changes
12
+
- Added hover/title help to gesture descriptors with concrete use-case guidance for mouse drag, mouse drag release, wheel, keyboard combo, mouse combo, game controller combo, and cross-device combo.
13
+
- Added a cross-device combo descriptor so Input Mapping V2 can present combo capture across enabled keyboard, mouse, and game controller sources.
14
+
- Refined combo capture copy and flow so keyboard + keyboard, keyboard + mouse, game controller + keyboard, and game controller + mouse combos can add multiple captured inputs to one selected mapping/action.
15
+
- Preserved gamepad capture behavior while improving combo polling so mocked or detected gamepad input can be paired with keyboard/mouse input.
16
+
- Removed click-to-delete behavior from captured mapping tokens. Tokens are now display items, not delete controls.
17
+
- Added Captured Mappings action controls after an `<hr>` separator:
18
+
-`Delete Action`
19
+
-`Delete Mappings`
20
+
- existing `Delete All`
21
+
-`Delete Action` removes the selected action tile.
22
+
-`Delete Mappings` clears mappings from the selected action tile while keeping the action tile.
23
+
- Reduced captured mapping action button border radius so taller buttons read as buttons instead of oval pills.
24
+
25
+
## Playwright Impact
26
+
Playwright impacted: Yes.
27
+
28
+
Behavior validated:
29
+
- Gesture hover/title help exists and includes use-case guidance.
30
+
- Cross-device combo gesture is surfaced when multiple compatible devices are enabled.
31
+
-`Shift + Mouse Right Button` combo can be represented.
32
+
-`Joystick Button 1 + Keyboard Alt` combo can be represented with mocked gamepad plus keyboard input.
33
+
- Clicking captured mapping tokens no longer deletes them.
34
+
-`Delete Action` removes the selected action tile.
35
+
-`Delete Mappings` clears mappings while preserving the selected action tile.
36
+
-`<hr>` appears before the Captured Mappings action buttons.
37
+
- Captured Mappings action buttons use reduced border radius.
38
+
- Existing selected tile, combo display, and gamepad capture behavior remain covered by the Input Mapping V2 workspace tests.
39
+
40
+
Expected pass behavior:
41
+
- All focused Input Mapping V2 assertions pass under `npm run test:workspace-v2`.
42
+
- Gesture help is discoverable via title attributes.
43
+
- Combo mappings show all captured inputs on the same selected action tile.
44
+
45
+
Expected fail behavior:
46
+
- Tests fail if gesture help text is missing, tokens delete on click, combo pairings are not represented, or delete controls do not perform their scoped action.
keyboardGesture('KeyboardPress','Press','Keyboard key press. Use for one-shot actions such as jump, confirm, or fire.','keyboard'),
69
+
keyboardGesture('KeyboardRelease','Release','Keyboard key release. Use for actions that trigger when a key is lifted.','keyboard'),
70
+
keyboardGesture('KeyboardHold','Hold','Keyboard key hold. Use for continuous movement while a key remains down.','keyboard'),
71
+
comboGesture('KeyboardCombo','Keyboard',['keyboard'],'Keyboard Combo. Use for shortcuts such as Ctrl + R. Capture two keyboard inputs for one selected action.'),
72
+
mouseGesture('MouseClick','Click','Mouse click. Use for direct pointing actions such as select, confirm, or fire.','mouse'),
73
+
mouseGesture('MouseDoubleClick','Double Click','Mouse double click. Use for quick repeated pointer actions such as open, focus, or inspect.','mouse'),
74
+
pointerGesture('MousePrimaryDrag','Drag','Mouse Drag. Use for continuous movement while held, such as panning or scrolling a map.','mouse'),
75
+
pointerGesture('MousePrimaryDragRelease','Drag Release','Mouse Drag Release. Use for completed drag gestures, such as box-selecting objects from start/end positions.','mouse'),
76
+
wheelGesture('MouseWheelUp','Wheel Up','Mouse Wheel Up. Use for zoom, scrolling, or cycling selections.'),
77
+
wheelGesture('MouseWheelDown','Wheel Down','Mouse Wheel Down. Use for zoom, scrolling, or cycling selections.'),
78
+
wheelGesture('MouseWheelLeft','Wheel Left','Mouse Wheel Left. Use for horizontal scrolling or cycling selections.'),
79
+
wheelGesture('MouseWheelRight','Wheel Right','Mouse Wheel Right. Use for horizontal scrolling or cycling selections.'),
80
+
comboGesture('MouseCombo','Mouse',['mouse'],'Mouse Combo. Use for combinations such as Shift + Mouse Right Button. Capture keyboard, mouse, wheel, or controller inputs for one selected action.'),
81
+
gameControllerGesture('GameControllerButton','Button','Game controller button. Use for face buttons, shoulder buttons, and digital controller controls.','gameController'),
82
+
gameControllerGesture('GameControllerTrigger','Trigger','Game controller trigger. Use for analog trigger actions such as accelerate, brake, or charge.','gameController'),
83
+
gameControllerGesture('GameControllerStick','Stick','Game controller stick. Use for analog movement, aiming, or steering.','gameController'),
84
+
gameControllerGesture('GameControllerDPad','DPad','Game controller DPad. Use for directional menu or movement actions.','gameController'),
85
+
comboGesture('GameControllerCombo','Game Controller',['gameController'],'Game Controller Combo. Use for controller combinations such as Button 1 + Button 2.'),
86
+
crossDeviceComboGesture()
86
87
]);
87
88
88
89
exportfunctioninputDeviceCapabilities({
@@ -157,6 +158,7 @@ export function inputGestureDescriptors({
title: 'Cross-device Combo. Use for combinations such as Joystick Button 1 + Keyboard Alt. Capture any two keyboard, mouse, wheel, or game controller inputs for one selected action.'
assert(gestures.some((gesture)=>gesture.binding==='MouseWheelUp'),'Input gestures should expose wheel descriptors through Mouse when wheel is available.');
88
+
assert(gestures.some((gesture)=>gesture.binding==='CrossDeviceCombo'),'Input gestures should expose cross-device combos when two combo-capable devices are enabled.');
89
+
assert(
90
+
gestures.find((gesture)=>gesture.binding==='MousePrimaryDrag').title.includes('continuous movement while held'),
91
+
'Gesture descriptors should expose use-case title help.'
assert(!gesturesWithoutWheelSupport.some((gesture)=>gesture.binding==='MouseWheelUp'),'Input gestures should hide wheel descriptors when wheel support is unavailable.');
90
95
assert(!gestures.some((gesture)=>gesture.binding==='MousePrimaryDragRectangle'),'Visible input gestures should not expose Drag Rectangle.');
0 commit comments