@atlaskit/popper 6.1.0 → 6.3.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/CHANGELOG.md +21 -0
- package/dist/cjs/max-size.js +94 -0
- package/dist/cjs/popper.js +18 -11
- package/dist/es2019/max-size.js +90 -0
- package/dist/es2019/popper.js +17 -11
- package/dist/esm/max-size.js +87 -0
- package/dist/esm/popper.js +18 -11
- package/dist/types/max-size.d.ts +21 -0
- package/dist/types/popper.d.ts +6 -1
- package/dist/types-ts4.5/max-size.d.ts +28 -0
- package/dist/types-ts4.5/popper.d.ts +6 -1
- package/package.json +4 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @atlaskit/popper
|
|
2
2
|
|
|
3
|
+
## 6.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#138688](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/138688)
|
|
8
|
+
[`961d97994618c`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/961d97994618c) -
|
|
9
|
+
Adds `shouldFitViewport` prop which will apply `max-width` and `max-height` to contain the
|
|
10
|
+
popper/popup within the viewport.
|
|
11
|
+
|
|
12
|
+
## 6.2.0
|
|
13
|
+
|
|
14
|
+
### Minor Changes
|
|
15
|
+
|
|
16
|
+
- [#127511](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/pull-requests/127511)
|
|
17
|
+
[`db30e29344013`](https://stash.atlassian.com/projects/CONFCLOUD/repos/confluence-frontend/commits/db30e29344013) -
|
|
18
|
+
Widening range of `react` and `react-dom` peer dependencies from `^16.8.0 || ^17.0.0 || ~18.2.0`
|
|
19
|
+
to the wider range of ``^16.8.0 || ^17.0.0 || ^18.0.0` (where applicable).
|
|
20
|
+
|
|
21
|
+
This change has been done to enable usage of `react@18.3` as well as to have a consistent peer
|
|
22
|
+
dependency range for `react` and `react-dom` for `/platform` packages.
|
|
23
|
+
|
|
3
24
|
## 6.1.0
|
|
4
25
|
|
|
5
26
|
### Minor Changes
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getMaxSizeModifiers = getMaxSizeModifiers;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
function getMaxSizeModifiers(_ref) {
|
|
10
|
+
var viewportPadding = _ref.viewportPadding;
|
|
11
|
+
return [{
|
|
12
|
+
/**
|
|
13
|
+
* Performing DOM measurements in the 'read' phase,
|
|
14
|
+
* which is the convention for popper modifiers
|
|
15
|
+
*/
|
|
16
|
+
name: 'maxSizeData',
|
|
17
|
+
enabled: true,
|
|
18
|
+
phase: 'read',
|
|
19
|
+
fn: function fn(_ref2) {
|
|
20
|
+
var state = _ref2.state,
|
|
21
|
+
name = _ref2.name;
|
|
22
|
+
if (!window.visualViewport) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
state.modifiersData[name] = {
|
|
26
|
+
viewport: {
|
|
27
|
+
width: window.visualViewport.width,
|
|
28
|
+
height: window.visualViewport.height
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
}, {
|
|
33
|
+
/**
|
|
34
|
+
* Applying max size CSS
|
|
35
|
+
*/
|
|
36
|
+
name: 'maxSize',
|
|
37
|
+
enabled: true,
|
|
38
|
+
phase: 'beforeWrite',
|
|
39
|
+
requiresIfExists: ['offset', 'preventOverflow', 'flip'],
|
|
40
|
+
fn: function fn(_ref3) {
|
|
41
|
+
var _data$viewport, _data$viewport2, _state$modifiersData$2, _state$modifiersData;
|
|
42
|
+
var state = _ref3.state;
|
|
43
|
+
var data = state.modifiersData.maxSizeData;
|
|
44
|
+
if (typeof (data === null || data === void 0 || (_data$viewport = data.viewport) === null || _data$viewport === void 0 ? void 0 : _data$viewport.width) !== 'number' || typeof (data === null || data === void 0 || (_data$viewport2 = data.viewport) === null || _data$viewport2 === void 0 ? void 0 : _data$viewport2.height) !== 'number') {
|
|
45
|
+
// This shouldn't occur in a real browser but might in non-browser test environments
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
var viewport = data.viewport;
|
|
49
|
+
var _state$modifiersData$ = state.modifiersData.popperOffsets,
|
|
50
|
+
popperOffsets = _state$modifiersData$ === void 0 ? {
|
|
51
|
+
x: 0,
|
|
52
|
+
y: 0
|
|
53
|
+
} : _state$modifiersData$;
|
|
54
|
+
var _state$placement$spli = state.placement.split('-'),
|
|
55
|
+
_state$placement$spli2 = (0, _slicedToArray2.default)(_state$placement$spli, 1),
|
|
56
|
+
basePlacement = _state$placement$spli2[0];
|
|
57
|
+
var placementOffset = (_state$modifiersData$2 = (_state$modifiersData = state.modifiersData) === null || _state$modifiersData === void 0 || (_state$modifiersData = _state$modifiersData.offset) === null || _state$modifiersData === void 0 ? void 0 : _state$modifiersData[state.placement]) !== null && _state$modifiersData$2 !== void 0 ? _state$modifiersData$2 : {
|
|
58
|
+
x: 0,
|
|
59
|
+
y: 0
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
// By default we set these to the entire viewport (minus padding)
|
|
63
|
+
// Each placement direction will overwrite one of these
|
|
64
|
+
var maxWidth = viewport.width - 2 * viewportPadding;
|
|
65
|
+
var maxHeight = viewport.height - 2 * viewportPadding;
|
|
66
|
+
if (basePlacement === 'top') {
|
|
67
|
+
maxHeight = state.rects.reference.y +
|
|
68
|
+
// Viewport-relative position of reference element
|
|
69
|
+
placementOffset.y -
|
|
70
|
+
// Space between popper and reference
|
|
71
|
+
viewportPadding;
|
|
72
|
+
}
|
|
73
|
+
if (basePlacement === 'bottom') {
|
|
74
|
+
maxHeight = viewport.height - popperOffsets.y -
|
|
75
|
+
// Viewport-relative position of popper
|
|
76
|
+
viewportPadding;
|
|
77
|
+
}
|
|
78
|
+
if (basePlacement === 'left') {
|
|
79
|
+
maxWidth = state.rects.reference.x +
|
|
80
|
+
// Viewport-relative position of reference element
|
|
81
|
+
placementOffset.x -
|
|
82
|
+
// Space between popper and reference
|
|
83
|
+
viewportPadding;
|
|
84
|
+
}
|
|
85
|
+
if (basePlacement === 'right') {
|
|
86
|
+
maxWidth = viewport.width - popperOffsets.x -
|
|
87
|
+
// Viewport-relative position of popper
|
|
88
|
+
viewportPadding;
|
|
89
|
+
}
|
|
90
|
+
state.styles.popper.maxWidth = "".concat(maxWidth, "px");
|
|
91
|
+
state.styles.popper.maxHeight = "".concat(maxHeight, "px");
|
|
92
|
+
}
|
|
93
|
+
}];
|
|
94
|
+
}
|
package/dist/cjs/popper.js
CHANGED
|
@@ -16,25 +16,21 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
|
|
|
16
16
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
17
|
var _react = _interopRequireWildcard(require("react"));
|
|
18
18
|
var _reactPopper = require("react-popper");
|
|
19
|
+
var _maxSize = require("./max-size");
|
|
19
20
|
var _core = require("@popperjs/core");
|
|
20
21
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
21
22
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
22
23
|
// Export types from PopperJS / React Popper
|
|
23
24
|
|
|
25
|
+
var viewportPadding = 5;
|
|
24
26
|
var constantModifiers = [{
|
|
25
27
|
name: 'flip',
|
|
26
28
|
options: {
|
|
27
29
|
flipVariations: false,
|
|
28
|
-
padding:
|
|
30
|
+
padding: viewportPadding,
|
|
29
31
|
boundary: 'clippingParents',
|
|
30
32
|
rootBoundary: 'viewport'
|
|
31
33
|
}
|
|
32
|
-
}, {
|
|
33
|
-
name: 'preventOverflow',
|
|
34
|
-
options: {
|
|
35
|
-
padding: 5,
|
|
36
|
-
rootBoundary: 'document'
|
|
37
|
-
}
|
|
38
34
|
}];
|
|
39
35
|
function defaultChildrenFn() {
|
|
40
36
|
return null;
|
|
@@ -51,20 +47,31 @@ function Popper(_ref) {
|
|
|
51
47
|
referenceElement = _ref$referenceElement === void 0 ? undefined : _ref$referenceElement,
|
|
52
48
|
modifiers = _ref.modifiers,
|
|
53
49
|
_ref$strategy = _ref.strategy,
|
|
54
|
-
strategy = _ref$strategy === void 0 ? 'fixed' : _ref$strategy
|
|
50
|
+
strategy = _ref$strategy === void 0 ? 'fixed' : _ref$strategy,
|
|
51
|
+
_ref$shouldFitViewpor = _ref.shouldFitViewport,
|
|
52
|
+
shouldFitViewport = _ref$shouldFitViewpor === void 0 ? false : _ref$shouldFitViewpor;
|
|
55
53
|
var _offset = (0, _slicedToArray2.default)(offset, 2),
|
|
56
54
|
offsetX = _offset[0],
|
|
57
55
|
offsetY = _offset[1];
|
|
58
|
-
// Merge a new offset modifier only if new offset values passed in
|
|
59
56
|
var internalModifiers = (0, _react.useMemo)(function () {
|
|
57
|
+
var preventOverflowModifier = {
|
|
58
|
+
name: 'preventOverflow',
|
|
59
|
+
options: {
|
|
60
|
+
padding: viewportPadding,
|
|
61
|
+
rootBoundary: shouldFitViewport ? 'viewport' : 'document'
|
|
62
|
+
}
|
|
63
|
+
};
|
|
60
64
|
var offsetModifier = {
|
|
61
65
|
name: 'offset',
|
|
62
66
|
options: {
|
|
63
67
|
offset: [offsetX, offsetY]
|
|
64
68
|
}
|
|
65
69
|
};
|
|
66
|
-
|
|
67
|
-
|
|
70
|
+
var maxSizeModifiers = shouldFitViewport ? (0, _maxSize.getMaxSizeModifiers)({
|
|
71
|
+
viewportPadding: viewportPadding
|
|
72
|
+
}) : [];
|
|
73
|
+
return [].concat(constantModifiers, [preventOverflowModifier, offsetModifier], (0, _toConsumableArray2.default)(maxSizeModifiers));
|
|
74
|
+
}, [offsetX, offsetY, shouldFitViewport]);
|
|
68
75
|
|
|
69
76
|
// Merge custom props and memoize
|
|
70
77
|
var mergedModifiers = (0, _react.useMemo)(function () {
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
export function getMaxSizeModifiers({
|
|
2
|
+
viewportPadding
|
|
3
|
+
}) {
|
|
4
|
+
return [{
|
|
5
|
+
/**
|
|
6
|
+
* Performing DOM measurements in the 'read' phase,
|
|
7
|
+
* which is the convention for popper modifiers
|
|
8
|
+
*/
|
|
9
|
+
name: 'maxSizeData',
|
|
10
|
+
enabled: true,
|
|
11
|
+
phase: 'read',
|
|
12
|
+
fn({
|
|
13
|
+
state,
|
|
14
|
+
name
|
|
15
|
+
}) {
|
|
16
|
+
if (!window.visualViewport) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
state.modifiersData[name] = {
|
|
20
|
+
viewport: {
|
|
21
|
+
width: window.visualViewport.width,
|
|
22
|
+
height: window.visualViewport.height
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
}, {
|
|
27
|
+
/**
|
|
28
|
+
* Applying max size CSS
|
|
29
|
+
*/
|
|
30
|
+
name: 'maxSize',
|
|
31
|
+
enabled: true,
|
|
32
|
+
phase: 'beforeWrite',
|
|
33
|
+
requiresIfExists: ['offset', 'preventOverflow', 'flip'],
|
|
34
|
+
fn({
|
|
35
|
+
state
|
|
36
|
+
}) {
|
|
37
|
+
var _data$viewport, _data$viewport2, _state$modifiersData$, _state$modifiersData, _state$modifiersData$2;
|
|
38
|
+
const data = state.modifiersData.maxSizeData;
|
|
39
|
+
if (typeof (data === null || data === void 0 ? void 0 : (_data$viewport = data.viewport) === null || _data$viewport === void 0 ? void 0 : _data$viewport.width) !== 'number' || typeof (data === null || data === void 0 ? void 0 : (_data$viewport2 = data.viewport) === null || _data$viewport2 === void 0 ? void 0 : _data$viewport2.height) !== 'number') {
|
|
40
|
+
// This shouldn't occur in a real browser but might in non-browser test environments
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const {
|
|
44
|
+
viewport
|
|
45
|
+
} = data;
|
|
46
|
+
const {
|
|
47
|
+
popperOffsets = {
|
|
48
|
+
x: 0,
|
|
49
|
+
y: 0
|
|
50
|
+
}
|
|
51
|
+
} = state.modifiersData;
|
|
52
|
+
const [basePlacement] = state.placement.split('-');
|
|
53
|
+
const placementOffset = (_state$modifiersData$ = (_state$modifiersData = state.modifiersData) === null || _state$modifiersData === void 0 ? void 0 : (_state$modifiersData$2 = _state$modifiersData.offset) === null || _state$modifiersData$2 === void 0 ? void 0 : _state$modifiersData$2[state.placement]) !== null && _state$modifiersData$ !== void 0 ? _state$modifiersData$ : {
|
|
54
|
+
x: 0,
|
|
55
|
+
y: 0
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// By default we set these to the entire viewport (minus padding)
|
|
59
|
+
// Each placement direction will overwrite one of these
|
|
60
|
+
let maxWidth = viewport.width - 2 * viewportPadding;
|
|
61
|
+
let maxHeight = viewport.height - 2 * viewportPadding;
|
|
62
|
+
if (basePlacement === 'top') {
|
|
63
|
+
maxHeight = state.rects.reference.y +
|
|
64
|
+
// Viewport-relative position of reference element
|
|
65
|
+
placementOffset.y -
|
|
66
|
+
// Space between popper and reference
|
|
67
|
+
viewportPadding;
|
|
68
|
+
}
|
|
69
|
+
if (basePlacement === 'bottom') {
|
|
70
|
+
maxHeight = viewport.height - popperOffsets.y -
|
|
71
|
+
// Viewport-relative position of popper
|
|
72
|
+
viewportPadding;
|
|
73
|
+
}
|
|
74
|
+
if (basePlacement === 'left') {
|
|
75
|
+
maxWidth = state.rects.reference.x +
|
|
76
|
+
// Viewport-relative position of reference element
|
|
77
|
+
placementOffset.x -
|
|
78
|
+
// Space between popper and reference
|
|
79
|
+
viewportPadding;
|
|
80
|
+
}
|
|
81
|
+
if (basePlacement === 'right') {
|
|
82
|
+
maxWidth = viewport.width - popperOffsets.x -
|
|
83
|
+
// Viewport-relative position of popper
|
|
84
|
+
viewportPadding;
|
|
85
|
+
}
|
|
86
|
+
state.styles.popper.maxWidth = `${maxWidth}px`;
|
|
87
|
+
state.styles.popper.maxHeight = `${maxHeight}px`;
|
|
88
|
+
}
|
|
89
|
+
}];
|
|
90
|
+
}
|
package/dist/es2019/popper.js
CHANGED
|
@@ -1,22 +1,18 @@
|
|
|
1
1
|
import React, { useMemo } from 'react';
|
|
2
2
|
import { Popper as ReactPopper } from 'react-popper';
|
|
3
|
+
import { getMaxSizeModifiers } from './max-size';
|
|
3
4
|
export { placements } from '@popperjs/core';
|
|
4
5
|
// Export types from PopperJS / React Popper
|
|
5
6
|
|
|
7
|
+
const viewportPadding = 5;
|
|
6
8
|
const constantModifiers = [{
|
|
7
9
|
name: 'flip',
|
|
8
10
|
options: {
|
|
9
11
|
flipVariations: false,
|
|
10
|
-
padding:
|
|
12
|
+
padding: viewportPadding,
|
|
11
13
|
boundary: 'clippingParents',
|
|
12
14
|
rootBoundary: 'viewport'
|
|
13
15
|
}
|
|
14
|
-
}, {
|
|
15
|
-
name: 'preventOverflow',
|
|
16
|
-
options: {
|
|
17
|
-
padding: 5,
|
|
18
|
-
rootBoundary: 'document'
|
|
19
|
-
}
|
|
20
16
|
}];
|
|
21
17
|
function defaultChildrenFn() {
|
|
22
18
|
return null;
|
|
@@ -28,19 +24,29 @@ export function Popper({
|
|
|
28
24
|
placement = 'bottom-start',
|
|
29
25
|
referenceElement = undefined,
|
|
30
26
|
modifiers,
|
|
31
|
-
strategy = 'fixed'
|
|
27
|
+
strategy = 'fixed',
|
|
28
|
+
shouldFitViewport = false
|
|
32
29
|
}) {
|
|
33
30
|
const [offsetX, offsetY] = offset;
|
|
34
|
-
// Merge a new offset modifier only if new offset values passed in
|
|
35
31
|
const internalModifiers = useMemo(() => {
|
|
32
|
+
const preventOverflowModifier = {
|
|
33
|
+
name: 'preventOverflow',
|
|
34
|
+
options: {
|
|
35
|
+
padding: viewportPadding,
|
|
36
|
+
rootBoundary: shouldFitViewport ? 'viewport' : 'document'
|
|
37
|
+
}
|
|
38
|
+
};
|
|
36
39
|
const offsetModifier = {
|
|
37
40
|
name: 'offset',
|
|
38
41
|
options: {
|
|
39
42
|
offset: [offsetX, offsetY]
|
|
40
43
|
}
|
|
41
44
|
};
|
|
42
|
-
|
|
43
|
-
|
|
45
|
+
const maxSizeModifiers = shouldFitViewport ? getMaxSizeModifiers({
|
|
46
|
+
viewportPadding
|
|
47
|
+
}) : [];
|
|
48
|
+
return [...constantModifiers, preventOverflowModifier, offsetModifier, ...maxSizeModifiers];
|
|
49
|
+
}, [offsetX, offsetY, shouldFitViewport]);
|
|
44
50
|
|
|
45
51
|
// Merge custom props and memoize
|
|
46
52
|
const mergedModifiers = useMemo(() => {
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
export function getMaxSizeModifiers(_ref) {
|
|
3
|
+
var viewportPadding = _ref.viewportPadding;
|
|
4
|
+
return [{
|
|
5
|
+
/**
|
|
6
|
+
* Performing DOM measurements in the 'read' phase,
|
|
7
|
+
* which is the convention for popper modifiers
|
|
8
|
+
*/
|
|
9
|
+
name: 'maxSizeData',
|
|
10
|
+
enabled: true,
|
|
11
|
+
phase: 'read',
|
|
12
|
+
fn: function fn(_ref2) {
|
|
13
|
+
var state = _ref2.state,
|
|
14
|
+
name = _ref2.name;
|
|
15
|
+
if (!window.visualViewport) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
state.modifiersData[name] = {
|
|
19
|
+
viewport: {
|
|
20
|
+
width: window.visualViewport.width,
|
|
21
|
+
height: window.visualViewport.height
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
}, {
|
|
26
|
+
/**
|
|
27
|
+
* Applying max size CSS
|
|
28
|
+
*/
|
|
29
|
+
name: 'maxSize',
|
|
30
|
+
enabled: true,
|
|
31
|
+
phase: 'beforeWrite',
|
|
32
|
+
requiresIfExists: ['offset', 'preventOverflow', 'flip'],
|
|
33
|
+
fn: function fn(_ref3) {
|
|
34
|
+
var _data$viewport, _data$viewport2, _state$modifiersData$2, _state$modifiersData;
|
|
35
|
+
var state = _ref3.state;
|
|
36
|
+
var data = state.modifiersData.maxSizeData;
|
|
37
|
+
if (typeof (data === null || data === void 0 || (_data$viewport = data.viewport) === null || _data$viewport === void 0 ? void 0 : _data$viewport.width) !== 'number' || typeof (data === null || data === void 0 || (_data$viewport2 = data.viewport) === null || _data$viewport2 === void 0 ? void 0 : _data$viewport2.height) !== 'number') {
|
|
38
|
+
// This shouldn't occur in a real browser but might in non-browser test environments
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
var viewport = data.viewport;
|
|
42
|
+
var _state$modifiersData$ = state.modifiersData.popperOffsets,
|
|
43
|
+
popperOffsets = _state$modifiersData$ === void 0 ? {
|
|
44
|
+
x: 0,
|
|
45
|
+
y: 0
|
|
46
|
+
} : _state$modifiersData$;
|
|
47
|
+
var _state$placement$spli = state.placement.split('-'),
|
|
48
|
+
_state$placement$spli2 = _slicedToArray(_state$placement$spli, 1),
|
|
49
|
+
basePlacement = _state$placement$spli2[0];
|
|
50
|
+
var placementOffset = (_state$modifiersData$2 = (_state$modifiersData = state.modifiersData) === null || _state$modifiersData === void 0 || (_state$modifiersData = _state$modifiersData.offset) === null || _state$modifiersData === void 0 ? void 0 : _state$modifiersData[state.placement]) !== null && _state$modifiersData$2 !== void 0 ? _state$modifiersData$2 : {
|
|
51
|
+
x: 0,
|
|
52
|
+
y: 0
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
// By default we set these to the entire viewport (minus padding)
|
|
56
|
+
// Each placement direction will overwrite one of these
|
|
57
|
+
var maxWidth = viewport.width - 2 * viewportPadding;
|
|
58
|
+
var maxHeight = viewport.height - 2 * viewportPadding;
|
|
59
|
+
if (basePlacement === 'top') {
|
|
60
|
+
maxHeight = state.rects.reference.y +
|
|
61
|
+
// Viewport-relative position of reference element
|
|
62
|
+
placementOffset.y -
|
|
63
|
+
// Space between popper and reference
|
|
64
|
+
viewportPadding;
|
|
65
|
+
}
|
|
66
|
+
if (basePlacement === 'bottom') {
|
|
67
|
+
maxHeight = viewport.height - popperOffsets.y -
|
|
68
|
+
// Viewport-relative position of popper
|
|
69
|
+
viewportPadding;
|
|
70
|
+
}
|
|
71
|
+
if (basePlacement === 'left') {
|
|
72
|
+
maxWidth = state.rects.reference.x +
|
|
73
|
+
// Viewport-relative position of reference element
|
|
74
|
+
placementOffset.x -
|
|
75
|
+
// Space between popper and reference
|
|
76
|
+
viewportPadding;
|
|
77
|
+
}
|
|
78
|
+
if (basePlacement === 'right') {
|
|
79
|
+
maxWidth = viewport.width - popperOffsets.x -
|
|
80
|
+
// Viewport-relative position of popper
|
|
81
|
+
viewportPadding;
|
|
82
|
+
}
|
|
83
|
+
state.styles.popper.maxWidth = "".concat(maxWidth, "px");
|
|
84
|
+
state.styles.popper.maxHeight = "".concat(maxHeight, "px");
|
|
85
|
+
}
|
|
86
|
+
}];
|
|
87
|
+
}
|
package/dist/esm/popper.js
CHANGED
|
@@ -2,23 +2,19 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
|
2
2
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
3
|
import React, { useMemo } from 'react';
|
|
4
4
|
import { Popper as ReactPopper } from 'react-popper';
|
|
5
|
+
import { getMaxSizeModifiers } from './max-size';
|
|
5
6
|
export { placements } from '@popperjs/core';
|
|
6
7
|
// Export types from PopperJS / React Popper
|
|
7
8
|
|
|
9
|
+
var viewportPadding = 5;
|
|
8
10
|
var constantModifiers = [{
|
|
9
11
|
name: 'flip',
|
|
10
12
|
options: {
|
|
11
13
|
flipVariations: false,
|
|
12
|
-
padding:
|
|
14
|
+
padding: viewportPadding,
|
|
13
15
|
boundary: 'clippingParents',
|
|
14
16
|
rootBoundary: 'viewport'
|
|
15
17
|
}
|
|
16
|
-
}, {
|
|
17
|
-
name: 'preventOverflow',
|
|
18
|
-
options: {
|
|
19
|
-
padding: 5,
|
|
20
|
-
rootBoundary: 'document'
|
|
21
|
-
}
|
|
22
18
|
}];
|
|
23
19
|
function defaultChildrenFn() {
|
|
24
20
|
return null;
|
|
@@ -35,20 +31,31 @@ export function Popper(_ref) {
|
|
|
35
31
|
referenceElement = _ref$referenceElement === void 0 ? undefined : _ref$referenceElement,
|
|
36
32
|
modifiers = _ref.modifiers,
|
|
37
33
|
_ref$strategy = _ref.strategy,
|
|
38
|
-
strategy = _ref$strategy === void 0 ? 'fixed' : _ref$strategy
|
|
34
|
+
strategy = _ref$strategy === void 0 ? 'fixed' : _ref$strategy,
|
|
35
|
+
_ref$shouldFitViewpor = _ref.shouldFitViewport,
|
|
36
|
+
shouldFitViewport = _ref$shouldFitViewpor === void 0 ? false : _ref$shouldFitViewpor;
|
|
39
37
|
var _offset = _slicedToArray(offset, 2),
|
|
40
38
|
offsetX = _offset[0],
|
|
41
39
|
offsetY = _offset[1];
|
|
42
|
-
// Merge a new offset modifier only if new offset values passed in
|
|
43
40
|
var internalModifiers = useMemo(function () {
|
|
41
|
+
var preventOverflowModifier = {
|
|
42
|
+
name: 'preventOverflow',
|
|
43
|
+
options: {
|
|
44
|
+
padding: viewportPadding,
|
|
45
|
+
rootBoundary: shouldFitViewport ? 'viewport' : 'document'
|
|
46
|
+
}
|
|
47
|
+
};
|
|
44
48
|
var offsetModifier = {
|
|
45
49
|
name: 'offset',
|
|
46
50
|
options: {
|
|
47
51
|
offset: [offsetX, offsetY]
|
|
48
52
|
}
|
|
49
53
|
};
|
|
50
|
-
|
|
51
|
-
|
|
54
|
+
var maxSizeModifiers = shouldFitViewport ? getMaxSizeModifiers({
|
|
55
|
+
viewportPadding: viewportPadding
|
|
56
|
+
}) : [];
|
|
57
|
+
return [].concat(constantModifiers, [preventOverflowModifier, offsetModifier], _toConsumableArray(maxSizeModifiers));
|
|
58
|
+
}, [offsetX, offsetY, shouldFitViewport]);
|
|
52
59
|
|
|
53
60
|
// Merge custom props and memoize
|
|
54
61
|
var mergedModifiers = useMemo(function () {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare function getMaxSizeModifiers({ viewportPadding }: {
|
|
2
|
+
viewportPadding: number;
|
|
3
|
+
}): [{
|
|
4
|
+
/**
|
|
5
|
+
* Performing DOM measurements in the 'read' phase,
|
|
6
|
+
* which is the convention for popper modifiers
|
|
7
|
+
*/
|
|
8
|
+
readonly name: "maxSizeData";
|
|
9
|
+
readonly enabled: true;
|
|
10
|
+
readonly phase: "read";
|
|
11
|
+
readonly fn: ({ state, name }: import("@popperjs/core").ModifierArguments<any>) => void;
|
|
12
|
+
}, {
|
|
13
|
+
/**
|
|
14
|
+
* Applying max size CSS
|
|
15
|
+
*/
|
|
16
|
+
readonly name: "maxSize";
|
|
17
|
+
readonly enabled: true;
|
|
18
|
+
readonly phase: "beforeWrite";
|
|
19
|
+
readonly requiresIfExists: ["offset", "preventOverflow", "flip"];
|
|
20
|
+
readonly fn: ({ state }: import("@popperjs/core").ModifierArguments<any>) => void;
|
|
21
|
+
}];
|
package/dist/types/popper.d.ts
CHANGED
|
@@ -32,5 +32,10 @@ export interface CustomPopperProps<Modifiers> {
|
|
|
32
32
|
* Placement strategy used. Can be 'fixed' or 'absolute'
|
|
33
33
|
*/
|
|
34
34
|
strategy?: PopperProps<Modifiers>['strategy'];
|
|
35
|
+
/**
|
|
36
|
+
* Determines if the popper will have a `max-width` and `max-height` set to
|
|
37
|
+
* constrain it to the viewport.
|
|
38
|
+
*/
|
|
39
|
+
shouldFitViewport?: boolean;
|
|
35
40
|
}
|
|
36
|
-
export declare function Popper<CustomModifiers>({ children, offset, placement, referenceElement, modifiers, strategy, }: CustomPopperProps<CustomModifiers>): JSX.Element;
|
|
41
|
+
export declare function Popper<CustomModifiers>({ children, offset, placement, referenceElement, modifiers, strategy, shouldFitViewport, }: CustomPopperProps<CustomModifiers>): JSX.Element;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export declare function getMaxSizeModifiers({ viewportPadding }: {
|
|
2
|
+
viewportPadding: number;
|
|
3
|
+
}): [
|
|
4
|
+
{
|
|
5
|
+
/**
|
|
6
|
+
* Performing DOM measurements in the 'read' phase,
|
|
7
|
+
* which is the convention for popper modifiers
|
|
8
|
+
*/
|
|
9
|
+
readonly name: "maxSizeData";
|
|
10
|
+
readonly enabled: true;
|
|
11
|
+
readonly phase: "read";
|
|
12
|
+
readonly fn: ({ state, name }: import("@popperjs/core").ModifierArguments<any>) => void;
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
/**
|
|
16
|
+
* Applying max size CSS
|
|
17
|
+
*/
|
|
18
|
+
readonly name: "maxSize";
|
|
19
|
+
readonly enabled: true;
|
|
20
|
+
readonly phase: "beforeWrite";
|
|
21
|
+
readonly requiresIfExists: [
|
|
22
|
+
"offset",
|
|
23
|
+
"preventOverflow",
|
|
24
|
+
"flip"
|
|
25
|
+
];
|
|
26
|
+
readonly fn: ({ state }: import("@popperjs/core").ModifierArguments<any>) => void;
|
|
27
|
+
}
|
|
28
|
+
];
|
|
@@ -35,5 +35,10 @@ export interface CustomPopperProps<Modifiers> {
|
|
|
35
35
|
* Placement strategy used. Can be 'fixed' or 'absolute'
|
|
36
36
|
*/
|
|
37
37
|
strategy?: PopperProps<Modifiers>['strategy'];
|
|
38
|
+
/**
|
|
39
|
+
* Determines if the popper will have a `max-width` and `max-height` set to
|
|
40
|
+
* constrain it to the viewport.
|
|
41
|
+
*/
|
|
42
|
+
shouldFitViewport?: boolean;
|
|
38
43
|
}
|
|
39
|
-
export declare function Popper<CustomModifiers>({ children, offset, placement, referenceElement, modifiers, strategy, }: CustomPopperProps<CustomModifiers>): JSX.Element;
|
|
44
|
+
export declare function Popper<CustomModifiers>({ children, offset, placement, referenceElement, modifiers, strategy, shouldFitViewport, }: CustomPopperProps<CustomModifiers>): JSX.Element;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/popper",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.3.0",
|
|
4
4
|
"description": "A wrapper for React Popper for situations which require a bespoke popup where other ADS components are deemed unsuitable",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -16,10 +16,6 @@
|
|
|
16
16
|
"atlaskit:src": "src/index.tsx",
|
|
17
17
|
"atlassian": {
|
|
18
18
|
"team": "Design System Team",
|
|
19
|
-
"productPushConsumption": [
|
|
20
|
-
"jira"
|
|
21
|
-
],
|
|
22
|
-
"releaseModel": "continuous",
|
|
23
19
|
"website": {
|
|
24
20
|
"name": "Popper",
|
|
25
21
|
"category": "Libraries"
|
|
@@ -32,12 +28,13 @@
|
|
|
32
28
|
"react-popper": "^2.3.0"
|
|
33
29
|
},
|
|
34
30
|
"peerDependencies": {
|
|
35
|
-
"react": "^16.8.0 || ^17.0.0 ||
|
|
31
|
+
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
|
|
36
32
|
},
|
|
37
33
|
"devDependencies": {
|
|
38
34
|
"@af/accessibility-testing": "*",
|
|
35
|
+
"@af/integration-testing": "*",
|
|
39
36
|
"@af/visual-regression": "*",
|
|
40
|
-
"@atlaskit/ds-lib": "^2.
|
|
37
|
+
"@atlaskit/ds-lib": "^2.5.0",
|
|
41
38
|
"@atlaskit/ssr": "*",
|
|
42
39
|
"@atlaskit/visual-regression": "*",
|
|
43
40
|
"@emotion/react": "^11.7.1",
|