@primer/behaviors 0.0.0-20230925220411 → 0.0.0-20230925221012
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/dist/cjs/anchored-position.js +8 -8
- package/dist/cjs/dimensions.js +3 -3
- package/dist/cjs/focus-trap.js +1 -1
- package/dist/cjs/focus-zone.js +3 -3
- package/dist/cjs/polyfills/event-listener-signal.js +2 -2
- package/dist/cjs/utils/iterate-focusable-elements.js +1 -1
- package/dist/esm/anchored-position.js +8 -8
- package/dist/esm/dimensions.js +3 -3
- package/dist/esm/focus-trap.js +1 -1
- 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 +12 -11
|
@@ -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
|
}
|
|
@@ -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.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.js
CHANGED
|
@@ -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;
|
|
@@ -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)) {
|
|
@@ -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
|
}
|
|
@@ -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.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.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": "0.0.0-
|
|
3
|
+
"version": "0.0.0-20230925221012",
|
|
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",
|
|
33
37
|
"clean": "rm -rf dist",
|
|
38
|
+
"prebuild": "npm run clean",
|
|
34
39
|
"build": "npm run build:esm && npm run build:cjs",
|
|
35
40
|
"build:esm": "tsc",
|
|
36
41
|
"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
|
+
"release": "npm run build && changeset publish"
|
|
44
44
|
},
|
|
45
45
|
"repository": {
|
|
46
46
|
"type": "git",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@changesets/changelog-github": "^0.4.2",
|
|
70
70
|
"@changesets/cli": "^2.18.1",
|
|
71
|
-
"@github/prettier-config": "0.0.
|
|
71
|
+
"@github/prettier-config": "^0.0.6",
|
|
72
72
|
"@size-limit/preset-small-lib": "^8.2.4",
|
|
73
73
|
"@testing-library/react": "^12.1.2",
|
|
74
74
|
"@testing-library/user-event": "^13.5.0",
|
|
@@ -76,10 +76,11 @@
|
|
|
76
76
|
"@types/react": "^17.0.37",
|
|
77
77
|
"esbuild": "^0.15.16",
|
|
78
78
|
"esbuild-jest": "^0.5.0",
|
|
79
|
-
"eslint": "^8.
|
|
80
|
-
"eslint-plugin-github": "^4.
|
|
79
|
+
"eslint": "^8.50.0",
|
|
80
|
+
"eslint-plugin-github": "^4.10.0",
|
|
81
|
+
"eslint-plugin-prettier": "^5.0.0",
|
|
81
82
|
"jest": "^27.4.3",
|
|
82
|
-
"prettier": "^
|
|
83
|
+
"prettier": "^3.0.3",
|
|
83
84
|
"react": "^17.0.2",
|
|
84
85
|
"react-dom": "^17.0.2",
|
|
85
86
|
"size-limit": "^8.2.4",
|