arrowtab 0.0.5 → 0.1.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.
Files changed (86) hide show
  1. package/README.md +120 -1
  2. package/dist/index.d.ts +5 -1
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/caret.d.ts +5 -0
  6. package/dist/lib/caret.js +136 -0
  7. package/dist/lib/caret.js.map +1 -0
  8. package/dist/lib/changesValueOnArrowKeys.d.ts +3 -0
  9. package/dist/lib/changesValueOnArrowKeys.js +15 -0
  10. package/dist/lib/changesValueOnArrowKeys.js.map +1 -0
  11. package/dist/lib/debugMode.d.ts +5 -5
  12. package/dist/lib/debugMode.js +28 -32
  13. package/dist/lib/debugMode.js.map +1 -1
  14. package/dist/lib/directions.d.ts +13 -0
  15. package/dist/lib/directions.js +17 -0
  16. package/dist/lib/directions.js.map +1 -0
  17. package/dist/lib/dom.d.ts +16 -0
  18. package/dist/lib/dom.js +62 -0
  19. package/dist/lib/dom.js.map +1 -0
  20. package/dist/lib/focusHistory.d.ts +7 -6
  21. package/dist/lib/focusHistory.js +52 -40
  22. package/dist/lib/focusHistory.js.map +1 -1
  23. package/dist/lib/focusTracker.d.ts +12 -0
  24. package/dist/lib/focusTracker.js +43 -0
  25. package/dist/lib/focusTracker.js.map +1 -0
  26. package/dist/lib/focusable.d.ts +8 -0
  27. package/dist/lib/focusable.js +135 -0
  28. package/dist/lib/focusable.js.map +1 -0
  29. package/dist/lib/geometry.d.ts +35 -0
  30. package/dist/lib/geometry.js +70 -0
  31. package/dist/lib/geometry.js.map +1 -0
  32. package/dist/lib/hasDisabledKeys.d.ts +4 -3
  33. package/dist/lib/hasDisabledKeys.js +5 -25
  34. package/dist/lib/hasDisabledKeys.js.map +1 -1
  35. package/dist/lib/initArrowTab.d.ts +11 -2
  36. package/dist/lib/initArrowTab.js +129 -72
  37. package/dist/lib/initArrowTab.js.map +1 -1
  38. package/dist/lib/initArrowTab.test.d.ts +1 -0
  39. package/dist/lib/initArrowTab.test.js +689 -0
  40. package/dist/lib/initArrowTab.test.js.map +1 -0
  41. package/dist/lib/navigateEvent.d.ts +16 -0
  42. package/dist/lib/navigateEvent.js +9 -0
  43. package/dist/lib/navigateEvent.js.map +1 -0
  44. package/dist/lib/rankCandidates.d.ts +11 -0
  45. package/dist/lib/rankCandidates.js +31 -0
  46. package/dist/lib/rankCandidates.js.map +1 -0
  47. package/dist/lib/scope.d.ts +11 -0
  48. package/dist/lib/scope.js +60 -0
  49. package/dist/lib/scope.js.map +1 -0
  50. package/dist/lib/strategies.d.ts +21 -10
  51. package/dist/lib/strategies.js +63 -106
  52. package/dist/lib/strategies.js.map +1 -1
  53. package/dist/lib/strategies.test.d.ts +1 -0
  54. package/dist/lib/strategies.test.js +88 -0
  55. package/dist/lib/strategies.test.js.map +1 -0
  56. package/dist/lib/widgets.d.ts +5 -0
  57. package/dist/lib/widgets.js +50 -0
  58. package/dist/lib/widgets.js.map +1 -0
  59. package/dist/lib/wrap.d.ts +12 -0
  60. package/dist/lib/wrap.js +21 -0
  61. package/dist/lib/wrap.js.map +1 -0
  62. package/package.json +2 -1
  63. package/dist/lib/distances.d.ts +0 -13
  64. package/dist/lib/distances.js +0 -15
  65. package/dist/lib/distances.js.map +0 -1
  66. package/dist/lib/getAngle.d.ts +0 -4
  67. package/dist/lib/getAngle.js +0 -15
  68. package/dist/lib/getAngle.js.map +0 -1
  69. package/dist/lib/getFocusable.d.ts +0 -1
  70. package/dist/lib/getFocusable.js +0 -29
  71. package/dist/lib/getFocusable.js.map +0 -1
  72. package/dist/lib/getXyDistance.d.ts +0 -7
  73. package/dist/lib/getXyDistance.js +0 -12
  74. package/dist/lib/getXyDistance.js.map +0 -1
  75. package/dist/lib/hasTextSelection.d.ts +0 -4
  76. package/dist/lib/hasTextSelection.js +0 -53
  77. package/dist/lib/hasTextSelection.js.map +0 -1
  78. package/dist/lib/positions.d.ts +0 -8
  79. package/dist/lib/positions.js +0 -16
  80. package/dist/lib/positions.js.map +0 -1
  81. package/dist/lib/preventNativeArrowKeyPresses.d.ts +0 -4
  82. package/dist/lib/preventNativeArrowKeyPresses.js +0 -24
  83. package/dist/lib/preventNativeArrowKeyPresses.js.map +0 -1
  84. package/dist/lib/sumBy.d.ts +0 -1
  85. package/dist/lib/sumBy.js +0 -2
  86. package/dist/lib/sumBy.js.map +0 -1
@@ -1,107 +1,164 @@
1
+ import { canMoveCaret } from './caret.js';
2
+ import { changesValueOnArrowKeys } from './changesValueOnArrowKeys.js';
1
3
  import { activateDebugMode, deactivateDebugMode, isInDebugMode, } from './debugMode.js';
2
- import { setHistoryCandidate, startAutoDetectHistory } from './focusHistory.js';
3
- import { getFocusable } from './getFocusable.js';
4
+ import { getDirection, getOpposite } from './directions.js';
5
+ import { containsComposed, getDeepActiveElement } from './dom.js';
6
+ import { startAutoDetectHistory } from './focusHistory.js';
7
+ import { startFocusTracker } from './focusTracker.js';
8
+ import { createClipCheck, getFocusable } from './focusable.js';
9
+ import { getRect } from './geometry.js';
4
10
  import { hasDisabledKeys } from './hasDisabledKeys.js';
5
- import { hasTextSelection } from './hasTextSelection.js';
6
- import { preventNativeArrowKeyPresses } from './preventNativeArrowKeyPresses.js';
7
- import { getByGrid } from './strategies.js';
8
- // TODO: Options
9
- // modifierKey: 'ctrlKey',
10
- // onlyWithModifierKey: false, // TODO: Better name
11
- // strategy: arrowTab.XWalkEuclidean,
12
- // selector: undefined,
13
- // elementFilter: () => boolean,
14
- // getElementPosition: (element) => { x: number, y: number },
15
- // eventTriggerName: 'keydown' | 'keyup',
16
- // earlyReturn: (event) => boolean, // TODO: Better name
17
- // TODO: Check if tab focuses the same elements as arrowTab
18
- // TODO: select, details, summary, iframe
19
- // TODO: Investigate links that don't show focus outline sometimes
20
- export const initArrowTab = ({ debug = false, autoDetectHistory = false, } = {}) => {
11
+ import { dispatchNavigate } from './navigateEvent.js';
12
+ import { rankCandidates } from './rankCandidates.js';
13
+ import { getScope, wrapSelector } from './scope.js';
14
+ import { grid, spatial, } from './strategies.js';
15
+ import { isHandledByWidget } from './widgets.js';
16
+ import { getWrapOrigin } from './wrap.js';
17
+ const strategies = { spatial, grid };
18
+ const getActiveElement = () => {
19
+ const activeElement = getDeepActiveElement();
20
+ return activeElement instanceof HTMLElement && activeElement !== document.body
21
+ ? activeElement
22
+ : null;
23
+ };
24
+ const initializedRoots = new Set();
25
+ const emptyRect = { top: 0, right: 0, bottom: 0, left: 0 };
26
+ export const initArrowTab = ({ debug = false, autoDetectHistory = false, strategy = 'spatial', root, } = {}) => {
27
+ const log = (...args) => {
28
+ if (debug)
29
+ console.log('[arrowtab]', ...args);
30
+ };
31
+ if (initializedRoots.has(root)) {
32
+ console.warn('[arrowtab] initArrowTab was called twice for the same root. Call cleanup() of the first instance before initializing it again.');
33
+ }
34
+ initializedRoots.add(root);
35
+ const rank = typeof strategy === 'function' ? strategy : strategies[strategy];
36
+ const focusTracker = startFocusTracker({ root });
37
+ // The last move, so the opposite direction can return to where focus came from
38
+ let lastMove;
21
39
  const onKeyDown = (event) => {
22
40
  if (event.key === 'Escape' && isInDebugMode()) {
23
41
  deactivateDebugMode();
24
42
  return;
25
43
  }
26
- if (event.key !== 'ArrowLeft' &&
27
- event.key !== 'ArrowRight' &&
28
- event.key !== 'ArrowUp' &&
29
- event.key !== 'ArrowDown') {
44
+ const direction = getDirection({ key: event.key });
45
+ if (!direction)
30
46
  return;
31
- }
32
- // TODO: Use modifierKey
33
- if (event.shiftKey) {
47
+ if (isInDebugMode())
48
+ deactivateDebugMode();
49
+ const showDebugMode = debug && event.ctrlKey;
50
+ // Shift falls back to the native behavior. Alt, Meta and Ctrl belong to the OS / browser (word jumps, history navigation, ...)
51
+ if (event.defaultPrevented ||
52
+ event.isComposing ||
53
+ event.shiftKey ||
54
+ event.altKey ||
55
+ event.metaKey ||
56
+ (event.ctrlKey && !showDebugMode)) {
34
57
  return;
35
58
  }
36
- const activeElement = document.activeElement;
37
- if (!activeElement) {
38
- if (debug) {
39
- console.log('no active element');
40
- }
59
+ const activeElement = getActiveElement();
60
+ const rootElement = root ?? document.body;
61
+ // Without focus, e.g. after the focused element was removed, it counts where focus was last
62
+ const isInRoot = activeElement
63
+ ? containsComposed({ container: rootElement, element: activeElement })
64
+ : focusTracker.isLastInRoot() || !root;
65
+ if (!isInRoot)
41
66
  return;
42
- }
43
- if (hasDisabledKeys({ event, activeElement })) {
44
- if (debug) {
45
- console.log('arrow keys are disabled');
46
- }
67
+ // Without focus, page level opt-outs (e.g. on <body>) still apply
68
+ if (hasDisabledKeys({ element: activeElement ?? rootElement, direction })) {
69
+ log('arrow keys are disabled');
47
70
  return;
48
71
  }
49
- preventNativeArrowKeyPresses({ event, activeElement });
50
- const nothingHasFocus = activeElement === document.body;
51
- if (nothingHasFocus) {
52
- if (debug) {
53
- console.log('nothing has focus. using first focusable');
72
+ const scope = getScope({ activeElement, root: rootElement });
73
+ // Enter the scope if focus is outside of it: nothing is focused or focus is behind a modal
74
+ const isOutsideScope = !activeElement ||
75
+ !containsComposed({ container: scope, element: activeElement });
76
+ // Widgets and text fields behind a modal don't keep the arrow keys
77
+ if (activeElement && !isOutsideScope) {
78
+ if (isHandledByWidget({ activeElement, direction })) {
79
+ log('arrow key is handled by a widget');
80
+ return;
54
81
  }
55
- const firstFocusable = getFocusable()?.[0];
56
- if (firstFocusable instanceof HTMLElement) {
57
- firstFocusable.focus();
82
+ if (!showDebugMode && canMoveCaret({ activeElement, direction })) {
83
+ log('caret can still move');
58
84
  return;
59
85
  }
60
86
  }
61
- if (hasTextSelection({ activeElement, event })) {
62
- if (debug) {
63
- console.log('element has text selection');
64
- }
87
+ const candidates = getFocusable({ root: scope }).filter(({ element }) => element !== activeElement);
88
+ // Without focus, navigate from the last focused position, e.g. after the focused element was removed
89
+ const origin = activeElement
90
+ ? getRect({ element: activeElement })
91
+ : focusTracker.getLastRect();
92
+ const isClipped = createClipCheck();
93
+ const isTarget = (item) => item.withinReach && !isClipped(item);
94
+ const ranked = origin
95
+ ? rankCandidates({
96
+ origin,
97
+ candidates,
98
+ direction,
99
+ strategy: rank,
100
+ activeElement,
101
+ preferred: lastMove?.to === activeElement &&
102
+ direction === getOpposite({ direction: lastMove.direction })
103
+ ? lastMove.from
104
+ : undefined,
105
+ })
106
+ : [];
107
+ if (showDebugMode) {
108
+ event.preventDefault();
109
+ activateDebugMode({
110
+ origin,
111
+ items: ranked.map((item) => ({ ...item, withinReach: isTarget(item) })),
112
+ });
65
113
  return;
66
114
  }
67
- const allFocusable = getFocusable();
68
- const withoutActiveElement = allFocusable.filter((element) => element !== activeElement);
69
- const sorted = getByGrid({
70
- focusableElements: withoutActiveElement,
71
- activeElement,
72
- event,
73
- });
74
- const withinReach = sorted.filter(({ withinReach }) => withinReach);
75
- if (debug && event.ctrlKey) {
76
- if (isInDebugMode()) {
77
- deactivateDebugMode();
115
+ // The first element in document order the strategy keeps
116
+ const getScopeEntry = () => {
117
+ const kept = new Set((origin
118
+ ? ranked
119
+ : rank({ origin: emptyRect, candidates, direction })).map(({ element }) => element));
120
+ return candidates.find((item) => kept.has(item.element) && !isClipped(item));
121
+ };
122
+ const target = ranked.find(isTarget) ??
123
+ (isOutsideScope ? getScopeEntry() : undefined) ??
124
+ (origin && scope.matches(wrapSelector) && candidates.length > 0
125
+ ? rank({
126
+ origin: getWrapOrigin({ origin, candidates, direction }),
127
+ candidates,
128
+ direction,
129
+ }).find(isTarget)
130
+ : undefined);
131
+ if (!target ||
132
+ !dispatchNavigate({ from: activeElement, to: target.element, direction })) {
133
+ log(target ? 'navigation was canceled' : 'nothing within reach');
134
+ if (activeElement &&
135
+ changesValueOnArrowKeys({ element: activeElement })) {
136
+ event.preventDefault();
78
137
  }
79
- activateDebugMode({ focusableElements: sorted });
80
138
  return;
81
139
  }
82
- let nearest = withinReach.at(0);
83
- if (debug) {
84
- console.log('found nearest element to select', nearest);
85
- }
86
- if (!nearest) {
87
- return;
88
- }
89
- if (nearest.element instanceof HTMLElement) {
90
- if (debug) {
91
- console.log('focusing element', nearest);
92
- }
93
- nearest.element.focus();
94
- setHistoryCandidate({ element: nearest.element });
140
+ log('focusing', target);
141
+ event.preventDefault();
142
+ // Scroll as little as possible. Sticky headers are respected via scroll-padding.
143
+ target.element.focus({ preventScroll: true });
144
+ target.element.scrollIntoView({ block: 'nearest', inline: 'nearest' });
145
+ if (activeElement) {
146
+ lastMove = { from: activeElement, to: target.element, direction };
95
147
  }
96
148
  };
97
149
  document.addEventListener('keydown', onKeyDown, { capture: true });
98
150
  const { cleanup: cleanupAutoDetectHistory } = startAutoDetectHistory({
99
151
  active: autoDetectHistory,
152
+ focusTracker,
100
153
  });
101
154
  return {
102
155
  cleanup: () => {
103
156
  document.removeEventListener('keydown', onKeyDown, { capture: true });
104
157
  cleanupAutoDetectHistory();
158
+ focusTracker.cleanup();
159
+ initializedRoots.delete(root);
160
+ if (isInDebugMode())
161
+ deactivateDebugMode();
105
162
  },
106
163
  };
107
164
  };
@@ -1 +1 @@
1
- {"version":3,"file":"initArrowTab.js","sourceRoot":"","sources":["../../src/lib/initArrowTab.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"initArrowTab.js","sourceRoot":"","sources":["../../src/lib/initArrowTab.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};