@primer/behaviors 1.3.5-rc.d479f9d → 1.3.6-rc.05850ca
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/CHANGELOG.md +6 -0
- package/dist/cjs/anchored-position.d.ts +2 -2
- package/dist/cjs/anchored-position.js +9 -9
- package/dist/cjs/dimensions.d.ts +2 -2
- package/dist/cjs/dimensions.js +3 -3
- package/dist/cjs/focus-trap.js +1 -1
- package/dist/cjs/focus-zone.d.ts +2 -2
- package/dist/cjs/focus-zone.js +4 -4
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/polyfills/event-listener-signal.js +2 -2
- package/dist/cjs/utils/index.js +5 -1
- package/dist/cjs/utils/iterate-focusable-elements.js +1 -1
- package/dist/esm/anchored-position.d.ts +2 -2
- package/dist/esm/anchored-position.js +9 -9
- package/dist/esm/dimensions.d.ts +2 -2
- package/dist/esm/dimensions.js +3 -3
- package/dist/esm/focus-trap.js +1 -1
- package/dist/esm/focus-zone.d.ts +2 -2
- package/dist/esm/focus-zone.js +3 -3
- package/dist/esm/polyfills/event-listener-signal.js +2 -2
- package/dist/esm/utils/iterate-focusable-elements.js +1 -1
- package/package.json +22 -20
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @primer/behaviors
|
|
2
2
|
|
|
3
|
+
## 1.3.6
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#208](https://github.com/primer/behaviors/pull/208) [`2042afc`](https://github.com/primer/behaviors/commit/2042afcc44ecfa1eee1e3782e4415074b7b18cd2) Thanks [@EnixCoda](https://github.com/EnixCoda)! - Update `anchored-position.ts` to support handling elements outside of `document.body` in `getClippingRect`
|
|
8
|
+
|
|
3
9
|
## 1.3.5
|
|
4
10
|
|
|
5
11
|
### Patch Changes
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export type AnchorAlignment = 'start' | 'center' | 'end';
|
|
2
|
+
export type AnchorSide = 'inside-top' | 'inside-bottom' | 'inside-left' | 'inside-right' | 'inside-center' | 'outside-top' | 'outside-bottom' | 'outside-left' | 'outside-right';
|
|
3
3
|
export interface PositionSettings {
|
|
4
4
|
side: AnchorSide;
|
|
5
5
|
align: AnchorAlignment;
|
|
@@ -5,12 +5,12 @@ const alternateOrders = {
|
|
|
5
5
|
'outside-top': ['outside-bottom', 'outside-right', 'outside-left', 'outside-bottom'],
|
|
6
6
|
'outside-bottom': ['outside-top', 'outside-right', 'outside-left', 'outside-bottom'],
|
|
7
7
|
'outside-left': ['outside-right', 'outside-bottom', 'outside-top', 'outside-bottom'],
|
|
8
|
-
'outside-right': ['outside-left', 'outside-bottom', 'outside-top', 'outside-bottom']
|
|
8
|
+
'outside-right': ['outside-left', 'outside-bottom', 'outside-top', 'outside-bottom'],
|
|
9
9
|
};
|
|
10
10
|
const alternateAlignments = {
|
|
11
11
|
start: ['end', 'center'],
|
|
12
12
|
end: ['start', 'center'],
|
|
13
|
-
center: ['end', 'start']
|
|
13
|
+
center: ['end', 'start'],
|
|
14
14
|
};
|
|
15
15
|
function getAnchoredPosition(floatingElement, anchorElement, settings = {}) {
|
|
16
16
|
const parentElement = getPositionedParent(floatingElement);
|
|
@@ -20,7 +20,7 @@ function getAnchoredPosition(floatingElement, anchorElement, settings = {}) {
|
|
|
20
20
|
const [borderTop, borderLeft] = [parentElementStyle.borderTopWidth, parentElementStyle.borderLeftWidth].map(v => parseInt(v, 10) || 0);
|
|
21
21
|
const relativeRect = {
|
|
22
22
|
top: parentElementRect.top + borderTop,
|
|
23
|
-
left: parentElementRect.left + borderLeft
|
|
23
|
+
left: parentElementRect.left + borderLeft,
|
|
24
24
|
};
|
|
25
25
|
return pureCalculateAnchoredPosition(clippingRect, relativeRect, floatingElement.getBoundingClientRect(), anchorElement instanceof Element ? anchorElement.getBoundingClientRect() : anchorElement, getDefaultSettings(settings));
|
|
26
26
|
}
|
|
@@ -55,7 +55,7 @@ function isOnTopLayer(element) {
|
|
|
55
55
|
function getClippingRect(element) {
|
|
56
56
|
let parentNode = element;
|
|
57
57
|
while (parentNode !== null) {
|
|
58
|
-
if (parentNode
|
|
58
|
+
if (!(parentNode instanceof Element)) {
|
|
59
59
|
break;
|
|
60
60
|
}
|
|
61
61
|
const parentNodeStyle = getComputedStyle(parentNode);
|
|
@@ -71,13 +71,13 @@ function getClippingRect(element) {
|
|
|
71
71
|
elemStyle.borderTopWidth,
|
|
72
72
|
elemStyle.borderLeftWidth,
|
|
73
73
|
elemStyle.borderRightWidth,
|
|
74
|
-
elemStyle.borderBottomWidth
|
|
74
|
+
elemStyle.borderBottomWidth,
|
|
75
75
|
].map(v => parseInt(v, 10) || 0);
|
|
76
76
|
return {
|
|
77
77
|
top: elemRect.top + borderTop,
|
|
78
78
|
left: elemRect.left + borderLeft,
|
|
79
79
|
width: elemRect.width - borderRight - borderLeft,
|
|
80
|
-
height: Math.max(elemRect.height - borderTop - borderBottom, clippingNode === document.body ? window.innerHeight : -Infinity)
|
|
80
|
+
height: Math.max(elemRect.height - borderTop - borderBottom, clippingNode === document.body ? window.innerHeight : -Infinity),
|
|
81
81
|
};
|
|
82
82
|
}
|
|
83
83
|
const positionDefaults = {
|
|
@@ -85,7 +85,7 @@ const positionDefaults = {
|
|
|
85
85
|
align: 'start',
|
|
86
86
|
anchorOffset: 4,
|
|
87
87
|
alignmentOffset: 4,
|
|
88
|
-
allowOutOfBounds: false
|
|
88
|
+
allowOutOfBounds: false,
|
|
89
89
|
};
|
|
90
90
|
function getDefaultSettings(settings = {}) {
|
|
91
91
|
var _a, _b, _c, _d, _e;
|
|
@@ -96,7 +96,7 @@ function getDefaultSettings(settings = {}) {
|
|
|
96
96
|
align,
|
|
97
97
|
anchorOffset: (_c = settings.anchorOffset) !== null && _c !== void 0 ? _c : (side === 'inside-center' ? 0 : positionDefaults.anchorOffset),
|
|
98
98
|
alignmentOffset: (_d = settings.alignmentOffset) !== null && _d !== void 0 ? _d : (align !== 'center' && side.startsWith('inside') ? positionDefaults.alignmentOffset : 0),
|
|
99
|
-
allowOutOfBounds: (_e = settings.allowOutOfBounds) !== null && _e !== void 0 ? _e : positionDefaults.allowOutOfBounds
|
|
99
|
+
allowOutOfBounds: (_e = settings.allowOutOfBounds) !== null && _e !== void 0 ? _e : positionDefaults.allowOutOfBounds,
|
|
100
100
|
};
|
|
101
101
|
}
|
|
102
102
|
function pureCalculateAnchoredPosition(viewportRect, relativePosition, floatingRect, anchorRect, { side, align, allowOutOfBounds, anchorOffset, alignmentOffset }) {
|
|
@@ -104,7 +104,7 @@ function pureCalculateAnchoredPosition(viewportRect, relativePosition, floatingR
|
|
|
104
104
|
top: viewportRect.top - relativePosition.top,
|
|
105
105
|
left: viewportRect.left - relativePosition.left,
|
|
106
106
|
width: viewportRect.width,
|
|
107
|
-
height: viewportRect.height
|
|
107
|
+
height: viewportRect.height,
|
|
108
108
|
};
|
|
109
109
|
let pos = calculatePosition(floatingRect, anchorRect, side, align, anchorOffset, alignmentOffset);
|
|
110
110
|
let anchorSide = side;
|
package/dist/cjs/dimensions.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
type Dimensions = {
|
|
2
2
|
top: number;
|
|
3
3
|
left: number;
|
|
4
4
|
bottom: number;
|
|
@@ -6,7 +6,7 @@ declare type Dimensions = {
|
|
|
6
6
|
height?: number;
|
|
7
7
|
width?: number;
|
|
8
8
|
};
|
|
9
|
-
|
|
9
|
+
type Offset = {
|
|
10
10
|
top: number;
|
|
11
11
|
left: number;
|
|
12
12
|
};
|
package/dist/cjs/dimensions.js
CHANGED
|
@@ -5,7 +5,7 @@ function offset(element) {
|
|
|
5
5
|
const rect = element.getBoundingClientRect();
|
|
6
6
|
return {
|
|
7
7
|
top: rect.top + window.pageYOffset,
|
|
8
|
-
left: rect.left + window.pageXOffset
|
|
8
|
+
left: rect.left + window.pageXOffset,
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
11
|
exports.offset = offset;
|
|
@@ -62,11 +62,11 @@ function overflowOffset(element, targetContainer) {
|
|
|
62
62
|
const scroll = container === document.documentElement && document.defaultView
|
|
63
63
|
? {
|
|
64
64
|
top: document.defaultView.pageYOffset,
|
|
65
|
-
left: document.defaultView.pageXOffset
|
|
65
|
+
left: document.defaultView.pageXOffset,
|
|
66
66
|
}
|
|
67
67
|
: {
|
|
68
68
|
top: container.scrollTop,
|
|
69
|
-
left: container.scrollLeft
|
|
69
|
+
left: container.scrollLeft,
|
|
70
70
|
};
|
|
71
71
|
const top = elementOffset.top - scroll.top;
|
|
72
72
|
const left = elementOffset.left - scroll.left;
|
package/dist/cjs/focus-trap.js
CHANGED
|
@@ -94,7 +94,7 @@ function focusTrap(container, initialFocus, abortSignal) {
|
|
|
94
94
|
container,
|
|
95
95
|
controller: wrappingController,
|
|
96
96
|
initialFocus,
|
|
97
|
-
originalSignal: signal
|
|
97
|
+
originalSignal: signal,
|
|
98
98
|
};
|
|
99
99
|
const suspendedTrapIndex = suspendedTrapStack.findIndex(t => t.container === container);
|
|
100
100
|
if (suspendedTrapIndex >= 0) {
|
package/dist/cjs/focus-zone.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export type Direction = 'previous' | 'next' | 'start' | 'end';
|
|
2
|
+
export type FocusMovementKeys = 'ArrowLeft' | 'ArrowDown' | 'ArrowUp' | 'ArrowRight' | 'h' | 'j' | 'k' | 'l' | 'a' | 's' | 'w' | 'd' | 'Tab' | 'Home' | 'End' | 'PageUp' | 'PageDown' | 'Backspace';
|
|
3
3
|
export declare enum FocusKeys {
|
|
4
4
|
ArrowHorizontal = 1,
|
|
5
5
|
ArrowVertical = 2,
|
package/dist/cjs/focus-zone.js
CHANGED
|
@@ -22,7 +22,7 @@ var FocusKeys;
|
|
|
22
22
|
FocusKeys[FocusKeys["HJKL"] = 12] = "HJKL";
|
|
23
23
|
FocusKeys[FocusKeys["WASD"] = 96] = "WASD";
|
|
24
24
|
FocusKeys[FocusKeys["All"] = 511] = "All";
|
|
25
|
-
})(FocusKeys
|
|
25
|
+
})(FocusKeys || (exports.FocusKeys = FocusKeys = {}));
|
|
26
26
|
const KEY_TO_BIT = {
|
|
27
27
|
ArrowLeft: FocusKeys.ArrowHorizontal,
|
|
28
28
|
ArrowDown: FocusKeys.ArrowVertical,
|
|
@@ -41,7 +41,7 @@ const KEY_TO_BIT = {
|
|
|
41
41
|
End: FocusKeys.HomeAndEnd,
|
|
42
42
|
PageUp: FocusKeys.PageUpDown,
|
|
43
43
|
PageDown: FocusKeys.PageUpDown,
|
|
44
|
-
Backspace: FocusKeys.Backspace
|
|
44
|
+
Backspace: FocusKeys.Backspace,
|
|
45
45
|
};
|
|
46
46
|
const KEY_TO_DIRECTION = {
|
|
47
47
|
ArrowLeft: 'previous',
|
|
@@ -61,7 +61,7 @@ const KEY_TO_DIRECTION = {
|
|
|
61
61
|
End: 'end',
|
|
62
62
|
PageUp: 'start',
|
|
63
63
|
PageDown: 'end',
|
|
64
|
-
Backspace: 'previous'
|
|
64
|
+
Backspace: 'previous',
|
|
65
65
|
};
|
|
66
66
|
function getDirection(keyboardEvent) {
|
|
67
67
|
const direction = KEY_TO_DIRECTION[keyboardEvent.key];
|
|
@@ -265,7 +265,7 @@ function focusZone(container, settings) {
|
|
|
265
265
|
});
|
|
266
266
|
observer.observe(container, {
|
|
267
267
|
subtree: true,
|
|
268
|
-
childList: true
|
|
268
|
+
childList: true,
|
|
269
269
|
});
|
|
270
270
|
const controller = new AbortController();
|
|
271
271
|
const signal = (_e = settings === null || settings === void 0 ? void 0 : settings.abortSignal) !== null && _e !== void 0 ? _e : controller.signal;
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
package/dist/cjs/utils/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
|
@@ -6,7 +6,7 @@ function* iterateFocusableElements(container, options = {}) {
|
|
|
6
6
|
const strict = (_a = options.strict) !== null && _a !== void 0 ? _a : false;
|
|
7
7
|
const acceptFn = ((_b = options.onlyTabbable) !== null && _b !== void 0 ? _b : false) ? isTabbable : isFocusable;
|
|
8
8
|
const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {
|
|
9
|
-
acceptNode: node => node instanceof HTMLElement && acceptFn(node, strict) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP
|
|
9
|
+
acceptNode: node => node instanceof HTMLElement && acceptFn(node, strict) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP,
|
|
10
10
|
});
|
|
11
11
|
let nextNode = null;
|
|
12
12
|
if (!options.reverse && acceptFn(container, strict)) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export type AnchorAlignment = 'start' | 'center' | 'end';
|
|
2
|
+
export type AnchorSide = 'inside-top' | 'inside-bottom' | 'inside-left' | 'inside-right' | 'inside-center' | 'outside-top' | 'outside-bottom' | 'outside-left' | 'outside-right';
|
|
3
3
|
export interface PositionSettings {
|
|
4
4
|
side: AnchorSide;
|
|
5
5
|
align: AnchorAlignment;
|
|
@@ -2,12 +2,12 @@ const alternateOrders = {
|
|
|
2
2
|
'outside-top': ['outside-bottom', 'outside-right', 'outside-left', 'outside-bottom'],
|
|
3
3
|
'outside-bottom': ['outside-top', 'outside-right', 'outside-left', 'outside-bottom'],
|
|
4
4
|
'outside-left': ['outside-right', 'outside-bottom', 'outside-top', 'outside-bottom'],
|
|
5
|
-
'outside-right': ['outside-left', 'outside-bottom', 'outside-top', 'outside-bottom']
|
|
5
|
+
'outside-right': ['outside-left', 'outside-bottom', 'outside-top', 'outside-bottom'],
|
|
6
6
|
};
|
|
7
7
|
const alternateAlignments = {
|
|
8
8
|
start: ['end', 'center'],
|
|
9
9
|
end: ['start', 'center'],
|
|
10
|
-
center: ['end', 'start']
|
|
10
|
+
center: ['end', 'start'],
|
|
11
11
|
};
|
|
12
12
|
export function getAnchoredPosition(floatingElement, anchorElement, settings = {}) {
|
|
13
13
|
const parentElement = getPositionedParent(floatingElement);
|
|
@@ -17,7 +17,7 @@ export function getAnchoredPosition(floatingElement, anchorElement, settings = {
|
|
|
17
17
|
const [borderTop, borderLeft] = [parentElementStyle.borderTopWidth, parentElementStyle.borderLeftWidth].map(v => parseInt(v, 10) || 0);
|
|
18
18
|
const relativeRect = {
|
|
19
19
|
top: parentElementRect.top + borderTop,
|
|
20
|
-
left: parentElementRect.left + borderLeft
|
|
20
|
+
left: parentElementRect.left + borderLeft,
|
|
21
21
|
};
|
|
22
22
|
return pureCalculateAnchoredPosition(clippingRect, relativeRect, floatingElement.getBoundingClientRect(), anchorElement instanceof Element ? anchorElement.getBoundingClientRect() : anchorElement, getDefaultSettings(settings));
|
|
23
23
|
}
|
|
@@ -51,7 +51,7 @@ function isOnTopLayer(element) {
|
|
|
51
51
|
function getClippingRect(element) {
|
|
52
52
|
let parentNode = element;
|
|
53
53
|
while (parentNode !== null) {
|
|
54
|
-
if (parentNode
|
|
54
|
+
if (!(parentNode instanceof Element)) {
|
|
55
55
|
break;
|
|
56
56
|
}
|
|
57
57
|
const parentNodeStyle = getComputedStyle(parentNode);
|
|
@@ -67,13 +67,13 @@ function getClippingRect(element) {
|
|
|
67
67
|
elemStyle.borderTopWidth,
|
|
68
68
|
elemStyle.borderLeftWidth,
|
|
69
69
|
elemStyle.borderRightWidth,
|
|
70
|
-
elemStyle.borderBottomWidth
|
|
70
|
+
elemStyle.borderBottomWidth,
|
|
71
71
|
].map(v => parseInt(v, 10) || 0);
|
|
72
72
|
return {
|
|
73
73
|
top: elemRect.top + borderTop,
|
|
74
74
|
left: elemRect.left + borderLeft,
|
|
75
75
|
width: elemRect.width - borderRight - borderLeft,
|
|
76
|
-
height: Math.max(elemRect.height - borderTop - borderBottom, clippingNode === document.body ? window.innerHeight : -Infinity)
|
|
76
|
+
height: Math.max(elemRect.height - borderTop - borderBottom, clippingNode === document.body ? window.innerHeight : -Infinity),
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
79
|
const positionDefaults = {
|
|
@@ -81,7 +81,7 @@ const positionDefaults = {
|
|
|
81
81
|
align: 'start',
|
|
82
82
|
anchorOffset: 4,
|
|
83
83
|
alignmentOffset: 4,
|
|
84
|
-
allowOutOfBounds: false
|
|
84
|
+
allowOutOfBounds: false,
|
|
85
85
|
};
|
|
86
86
|
function getDefaultSettings(settings = {}) {
|
|
87
87
|
var _a, _b, _c, _d, _e;
|
|
@@ -92,7 +92,7 @@ function getDefaultSettings(settings = {}) {
|
|
|
92
92
|
align,
|
|
93
93
|
anchorOffset: (_c = settings.anchorOffset) !== null && _c !== void 0 ? _c : (side === 'inside-center' ? 0 : positionDefaults.anchorOffset),
|
|
94
94
|
alignmentOffset: (_d = settings.alignmentOffset) !== null && _d !== void 0 ? _d : (align !== 'center' && side.startsWith('inside') ? positionDefaults.alignmentOffset : 0),
|
|
95
|
-
allowOutOfBounds: (_e = settings.allowOutOfBounds) !== null && _e !== void 0 ? _e : positionDefaults.allowOutOfBounds
|
|
95
|
+
allowOutOfBounds: (_e = settings.allowOutOfBounds) !== null && _e !== void 0 ? _e : positionDefaults.allowOutOfBounds,
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
98
|
function pureCalculateAnchoredPosition(viewportRect, relativePosition, floatingRect, anchorRect, { side, align, allowOutOfBounds, anchorOffset, alignmentOffset }) {
|
|
@@ -100,7 +100,7 @@ function pureCalculateAnchoredPosition(viewportRect, relativePosition, floatingR
|
|
|
100
100
|
top: viewportRect.top - relativePosition.top,
|
|
101
101
|
left: viewportRect.left - relativePosition.left,
|
|
102
102
|
width: viewportRect.width,
|
|
103
|
-
height: viewportRect.height
|
|
103
|
+
height: viewportRect.height,
|
|
104
104
|
};
|
|
105
105
|
let pos = calculatePosition(floatingRect, anchorRect, side, align, anchorOffset, alignmentOffset);
|
|
106
106
|
let anchorSide = side;
|
package/dist/esm/dimensions.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
type Dimensions = {
|
|
2
2
|
top: number;
|
|
3
3
|
left: number;
|
|
4
4
|
bottom: number;
|
|
@@ -6,7 +6,7 @@ declare type Dimensions = {
|
|
|
6
6
|
height?: number;
|
|
7
7
|
width?: number;
|
|
8
8
|
};
|
|
9
|
-
|
|
9
|
+
type Offset = {
|
|
10
10
|
top: number;
|
|
11
11
|
left: number;
|
|
12
12
|
};
|
package/dist/esm/dimensions.js
CHANGED
|
@@ -2,7 +2,7 @@ export function offset(element) {
|
|
|
2
2
|
const rect = element.getBoundingClientRect();
|
|
3
3
|
return {
|
|
4
4
|
top: rect.top + window.pageYOffset,
|
|
5
|
-
left: rect.left + window.pageXOffset
|
|
5
|
+
left: rect.left + window.pageXOffset,
|
|
6
6
|
};
|
|
7
7
|
}
|
|
8
8
|
export function overflowParent(targetElement) {
|
|
@@ -57,11 +57,11 @@ export function overflowOffset(element, targetContainer) {
|
|
|
57
57
|
const scroll = container === document.documentElement && document.defaultView
|
|
58
58
|
? {
|
|
59
59
|
top: document.defaultView.pageYOffset,
|
|
60
|
-
left: document.defaultView.pageXOffset
|
|
60
|
+
left: document.defaultView.pageXOffset,
|
|
61
61
|
}
|
|
62
62
|
: {
|
|
63
63
|
top: container.scrollTop,
|
|
64
|
-
left: container.scrollLeft
|
|
64
|
+
left: container.scrollLeft,
|
|
65
65
|
};
|
|
66
66
|
const top = elementOffset.top - scroll.top;
|
|
67
67
|
const left = elementOffset.left - scroll.left;
|
package/dist/esm/focus-trap.js
CHANGED
|
@@ -91,7 +91,7 @@ export function focusTrap(container, initialFocus, abortSignal) {
|
|
|
91
91
|
container,
|
|
92
92
|
controller: wrappingController,
|
|
93
93
|
initialFocus,
|
|
94
|
-
originalSignal: signal
|
|
94
|
+
originalSignal: signal,
|
|
95
95
|
};
|
|
96
96
|
const suspendedTrapIndex = suspendedTrapStack.findIndex(t => t.container === container);
|
|
97
97
|
if (suspendedTrapIndex >= 0) {
|
package/dist/esm/focus-zone.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
1
|
+
export type Direction = 'previous' | 'next' | 'start' | 'end';
|
|
2
|
+
export type FocusMovementKeys = 'ArrowLeft' | 'ArrowDown' | 'ArrowUp' | 'ArrowRight' | 'h' | 'j' | 'k' | 'l' | 'a' | 's' | 'w' | 'd' | 'Tab' | 'Home' | 'End' | 'PageUp' | 'PageDown' | 'Backspace';
|
|
3
3
|
export declare enum FocusKeys {
|
|
4
4
|
ArrowHorizontal = 1,
|
|
5
5
|
ArrowVertical = 2,
|
package/dist/esm/focus-zone.js
CHANGED
|
@@ -38,7 +38,7 @@ const KEY_TO_BIT = {
|
|
|
38
38
|
End: FocusKeys.HomeAndEnd,
|
|
39
39
|
PageUp: FocusKeys.PageUpDown,
|
|
40
40
|
PageDown: FocusKeys.PageUpDown,
|
|
41
|
-
Backspace: FocusKeys.Backspace
|
|
41
|
+
Backspace: FocusKeys.Backspace,
|
|
42
42
|
};
|
|
43
43
|
const KEY_TO_DIRECTION = {
|
|
44
44
|
ArrowLeft: 'previous',
|
|
@@ -58,7 +58,7 @@ const KEY_TO_DIRECTION = {
|
|
|
58
58
|
End: 'end',
|
|
59
59
|
PageUp: 'start',
|
|
60
60
|
PageDown: 'end',
|
|
61
|
-
Backspace: 'previous'
|
|
61
|
+
Backspace: 'previous',
|
|
62
62
|
};
|
|
63
63
|
function getDirection(keyboardEvent) {
|
|
64
64
|
const direction = KEY_TO_DIRECTION[keyboardEvent.key];
|
|
@@ -262,7 +262,7 @@ export function focusZone(container, settings) {
|
|
|
262
262
|
});
|
|
263
263
|
observer.observe(container, {
|
|
264
264
|
subtree: true,
|
|
265
|
-
childList: true
|
|
265
|
+
childList: true,
|
|
266
266
|
});
|
|
267
267
|
const controller = new AbortController();
|
|
268
268
|
const signal = (_e = settings === null || settings === void 0 ? void 0 : settings.abortSignal) !== null && _e !== void 0 ? _e : controller.signal;
|
|
@@ -3,7 +3,7 @@ export function* iterateFocusableElements(container, options = {}) {
|
|
|
3
3
|
const strict = (_a = options.strict) !== null && _a !== void 0 ? _a : false;
|
|
4
4
|
const acceptFn = ((_b = options.onlyTabbable) !== null && _b !== void 0 ? _b : false) ? isTabbable : isFocusable;
|
|
5
5
|
const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {
|
|
6
|
-
acceptNode: node => node instanceof HTMLElement && acceptFn(node, strict) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP
|
|
6
|
+
acceptNode: node => node instanceof HTMLElement && acceptFn(node, strict) ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP,
|
|
7
7
|
});
|
|
8
8
|
let nextNode = null;
|
|
9
9
|
if (!options.reverse && acceptFn(container, strict)) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@primer/behaviors",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.6-rc.05850ca",
|
|
4
4
|
"description": "Shared behaviors for JavaScript components",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -30,17 +30,17 @@
|
|
|
30
30
|
"dist/cjs/focus-trap.js"
|
|
31
31
|
],
|
|
32
32
|
"scripts": {
|
|
33
|
-
"lint": "eslint src/",
|
|
34
|
-
"test": "npm run jest && npm run lint",
|
|
35
|
-
"test:watch": "jest --watch",
|
|
36
|
-
"jest": "jest",
|
|
37
33
|
"clean": "rm -rf dist",
|
|
38
|
-
"prebuild": "npm run clean",
|
|
39
34
|
"build": "npm run build:esm && npm run build:cjs",
|
|
40
35
|
"build:esm": "tsc",
|
|
41
36
|
"build:cjs": "tsc --module commonjs --outDir dist/cjs",
|
|
37
|
+
"lint": "eslint src/",
|
|
38
|
+
"test": "jest",
|
|
39
|
+
"test:watch": "jest --watch",
|
|
40
|
+
"prebuild": "npm run clean",
|
|
41
|
+
"release": "npm run build && changeset publish",
|
|
42
42
|
"size-limit": "npm run build && size-limit",
|
|
43
|
-
"
|
|
43
|
+
"type-check": "tsc --noEmit"
|
|
44
44
|
},
|
|
45
45
|
"repository": {
|
|
46
46
|
"type": "git",
|
|
@@ -68,21 +68,23 @@
|
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@changesets/changelog-github": "^0.4.2",
|
|
70
70
|
"@changesets/cli": "^2.18.1",
|
|
71
|
-
"@github/prettier-config": "0.0.
|
|
72
|
-
"@size-limit/preset-small-lib": "^
|
|
73
|
-
"@testing-library/react": "^
|
|
74
|
-
"@testing-library/user-event": "^
|
|
71
|
+
"@github/prettier-config": "^0.0.6",
|
|
72
|
+
"@size-limit/preset-small-lib": "^8.2.4",
|
|
73
|
+
"@testing-library/react": "^14.0.0",
|
|
74
|
+
"@testing-library/user-event": "^14.5.1",
|
|
75
75
|
"@types/jest": "^27.0.3",
|
|
76
|
-
"@types/
|
|
77
|
-
"
|
|
76
|
+
"@types/node": "^18.18.0",
|
|
77
|
+
"@types/react": "^18.2.23",
|
|
78
|
+
"esbuild": "^0.19.4",
|
|
78
79
|
"esbuild-jest": "^0.5.0",
|
|
79
|
-
"eslint": "^8.
|
|
80
|
-
"eslint-plugin-github": "^4.
|
|
80
|
+
"eslint": "^8.50.0",
|
|
81
|
+
"eslint-plugin-github": "^4.10.0",
|
|
82
|
+
"eslint-plugin-prettier": "^5.0.0",
|
|
81
83
|
"jest": "^27.4.3",
|
|
82
|
-
"prettier": "^
|
|
83
|
-
"react": "^
|
|
84
|
-
"react-dom": "^
|
|
85
|
-
"size-limit": "^
|
|
86
|
-
"typescript": "^
|
|
84
|
+
"prettier": "^3.0.3",
|
|
85
|
+
"react": "^18.2.0",
|
|
86
|
+
"react-dom": "^18.2.0",
|
|
87
|
+
"size-limit": "^8.2.4",
|
|
88
|
+
"typescript": "^5.2.2"
|
|
87
89
|
}
|
|
88
90
|
}
|