calculate-position
Advanced tools
Comparing version 1.0.1 to 1.0.2
@@ -20,5 +20,6 @@ import { Dimensions, Direction, DirectionPoint, Rectangle } from './types'; | ||
*/ | ||
export declare const getDirections: ({ anchor, dimensions, }: { | ||
export declare const getDirections: ({ anchor, dimensions, viewport, }: { | ||
anchor: Rectangle; | ||
dimensions: Dimensions; | ||
viewport?: Dimensions | undefined; | ||
}) => DirectionPoint; | ||
@@ -25,0 +26,0 @@ /** |
@@ -24,3 +24,4 @@ "use strict"; | ||
*/ | ||
const getDirections = ({ anchor, dimensions, }) => { | ||
const getDirections = ({ anchor, dimensions, viewport, }) => { | ||
var _a, _b; | ||
return { | ||
@@ -35,2 +36,6 @@ [types_1.Direction.BottomRight]: { | ||
}, | ||
[types_1.Direction.BottomCenter]: { | ||
left: Math.round((((_a = viewport === null || viewport === void 0 ? void 0 : viewport.width) !== null && _a !== void 0 ? _a : 0) - dimensions.width) / 2), | ||
top: anchor.top + anchor.height, | ||
}, | ||
[types_1.Direction.TopRight]: { | ||
@@ -44,2 +49,6 @@ left: anchor.left + anchor.width, | ||
}, | ||
[types_1.Direction.TopCenter]: { | ||
left: Math.round((((_b = viewport === null || viewport === void 0 ? void 0 : viewport.width) !== null && _b !== void 0 ? _b : 0) - dimensions.width) / 2), | ||
top: anchor.top - anchor.height, | ||
}, | ||
}; | ||
@@ -94,2 +103,3 @@ }; | ||
dimensions, | ||
viewport, | ||
}), }) => { | ||
@@ -115,2 +125,2 @@ const viewportRectangle = { | ||
exports.calculateBestDirection = calculateBestDirection; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kaXJlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQWtEO0FBQ2xELG1DQUEyRTtBQUUzRTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSSxNQUFNLGFBQWEsR0FBRyxDQUFDLEVBQzVCLE1BQU0sRUFDTixVQUFVLEdBSVgsRUFBa0IsRUFBRTtJQUNuQixPQUFPO1FBQ0wsQ0FBQyxpQkFBUyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3ZCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLO1lBQ2hDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNO1NBQ2hDO1FBQ0QsQ0FBQyxpQkFBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLO1lBQ3BDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNO1NBQ2hDO1FBQ0QsQ0FBQyxpQkFBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLO1lBQ2hDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNO1NBQ3BDO1FBQ0QsQ0FBQyxpQkFBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ25CLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLO1lBQ3BDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNO1NBQ3BDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQXpCVyxRQUFBLGFBQWEsaUJBeUJ4QjtBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSSxNQUFNLG1CQUFtQixHQUFHLEdBQWUsRUFBRTtJQUNsRCxJQUFJLE9BQU8sTUFBTSxJQUFJLFdBQVcsRUFBRTtRQUNoQyxPQUFPO1lBQ0wsS0FBSyxFQUFFLENBQUM7WUFDUixNQUFNLEVBQUUsQ0FBQztTQUNWLENBQUM7S0FDSDtJQUVELE9BQU87UUFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDeEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXO0tBQzNCLENBQUM7QUFDSixDQUFDLENBQUM7QUFaVyxRQUFBLG1CQUFtQix1QkFZOUI7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0ksTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEVBQ3JDLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxHQUFHLDJCQUFtQixFQUFFLEVBQ2hDLFVBQVUsR0FBRyxxQkFBYSxDQUFDO0lBQ3pCLE1BQU07SUFDTixVQUFVO0NBQ1gsQ0FBQyxHQU1ILEVBQUUsRUFBRTtJQUNILE1BQU0saUJBQWlCLEdBQWM7UUFDbkMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1FBQ3JCLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtRQUN2QixJQUFJLEVBQUUsQ0FBQztRQUNQLEdBQUcsRUFBRSxDQUFDO0tBQ1AsQ0FBQztJQUVGLElBQUksYUFBYSxHQUFjLGlCQUFTLENBQUMsVUFBVSxDQUFDO0lBQ3BELElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztJQUVqQixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtRQUNsQyxNQUFNLGtCQUFrQixtQ0FDbkIsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUNyQixVQUFVLENBQ2QsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFHLCtCQUFtQixDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFFeEUsSUFBSSxJQUFJLEdBQUcsUUFBUSxFQUFFO1lBQ25CLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDaEIsYUFBYSxHQUFHLFNBQXNCLENBQUM7U0FDeEM7S0FDRjtJQUVELE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQXZDVyxRQUFBLHNCQUFzQiwwQkF1Q2pDIn0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kaXJlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQWtEO0FBQ2xELG1DQUEyRTtBQUUzRTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSSxNQUFNLGFBQWEsR0FBRyxDQUFDLEVBQzVCLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxHQUtULEVBQWtCLEVBQUU7O0lBQ25CLE9BQU87UUFDTCxDQUFDLGlCQUFTLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUs7WUFDaEMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU07U0FDaEM7UUFDRCxDQUFDLGlCQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDdEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUs7WUFDcEMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU07U0FDaEM7UUFDRCxDQUFDLGlCQUFTLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLEtBQUssbUNBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTTtTQUNoQztRQUNELENBQUMsaUJBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNwQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSztZQUNoQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTTtTQUNwQztRQUNELENBQUMsaUJBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNuQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSztZQUNwQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsTUFBTTtTQUNwQztRQUNELENBQUMsaUJBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsS0FBSyxtQ0FBSSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNO1NBQ2hDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQW5DVyxRQUFBLGFBQWEsaUJBbUN4QjtBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSSxNQUFNLG1CQUFtQixHQUFHLEdBQWUsRUFBRTtJQUNsRCxJQUFJLE9BQU8sTUFBTSxJQUFJLFdBQVcsRUFBRTtRQUNoQyxPQUFPO1lBQ0wsS0FBSyxFQUFFLENBQUM7WUFDUixNQUFNLEVBQUUsQ0FBQztTQUNWLENBQUM7S0FDSDtJQUVELE9BQU87UUFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDeEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXO0tBQzNCLENBQUM7QUFDSixDQUFDLENBQUM7QUFaVyxRQUFBLG1CQUFtQix1QkFZOUI7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0ksTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEVBQ3JDLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxHQUFHLDJCQUFtQixFQUFFLEVBQ2hDLFVBQVUsR0FBRyxxQkFBYSxDQUFDO0lBQ3pCLE1BQU07SUFDTixVQUFVO0lBQ1YsUUFBUTtDQUNULENBQUMsR0FNSCxFQUFFLEVBQUU7SUFDSCxNQUFNLGlCQUFpQixHQUFjO1FBQ25DLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztRQUNyQixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07UUFDdkIsSUFBSSxFQUFFLENBQUM7UUFDUCxHQUFHLEVBQUUsQ0FBQztLQUNQLENBQUM7SUFFRixJQUFJLGFBQWEsR0FBYyxpQkFBUyxDQUFDLFVBQVUsQ0FBQztJQUNwRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFakIsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUU7UUFDbEMsTUFBTSxrQkFBa0IsbUNBQ25CLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FDckIsVUFBVSxDQUNkLENBQUM7UUFFRixNQUFNLElBQUksR0FBRywrQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRXhFLElBQUksSUFBSSxHQUFHLFFBQVEsRUFBRTtZQUNuQixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLGFBQWEsR0FBRyxTQUFzQixDQUFDO1NBQ3hDO0tBQ0Y7SUFFRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDLENBQUM7QUF4Q1csUUFBQSxzQkFBc0IsMEJBd0NqQyJ9 |
@@ -25,3 +25,3 @@ "use strict"; | ||
const calculateBestPosition = ({ anchor, dimensions, viewport = direction_1.getWindowDimensions(), }) => { | ||
const directions = direction_1.getDirections({ anchor, dimensions }); | ||
const directions = direction_1.getDirections({ anchor, dimensions, viewport }); | ||
const direction = direction_1.calculateBestDirection({ | ||
@@ -36,2 +36,2 @@ anchor, | ||
exports.calculateBestPosition = calculateBestPosition; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Bvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUlxQjtBQUdyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0ksTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEVBQ3BDLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxHQUFHLCtCQUFtQixFQUFFLEdBS2pDLEVBQVMsRUFBRTtJQUNWLE1BQU0sVUFBVSxHQUFHLHlCQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUV6RCxNQUFNLFNBQVMsR0FBRyxrQ0FBc0IsQ0FBQztRQUN2QyxNQUFNO1FBQ04sVUFBVTtRQUNWLFFBQVE7UUFDUixVQUFVO0tBQ1gsQ0FBQyxDQUFDO0lBRUgsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBbkJXLFFBQUEscUJBQXFCLHlCQW1CaEMifQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Bvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUlxQjtBQUdyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0ksTUFBTSxxQkFBcUIsR0FBRyxDQUFDLEVBQ3BDLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxHQUFHLCtCQUFtQixFQUFFLEdBS2pDLEVBQVMsRUFBRTtJQUNWLE1BQU0sVUFBVSxHQUFHLHlCQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFFbkUsTUFBTSxTQUFTLEdBQUcsa0NBQXNCLENBQUM7UUFDdkMsTUFBTTtRQUNOLFVBQVU7UUFDVixRQUFRO1FBQ1IsVUFBVTtLQUNYLENBQUMsQ0FBQztJQUVILE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQW5CVyxRQUFBLHFCQUFxQix5QkFtQmhDIn0= |
@@ -12,4 +12,6 @@ export interface Dimensions { | ||
BottomLeft = "BottomLeft", | ||
BottomCenter = "BottomCenter", | ||
TopRight = "TopRight", | ||
TopLeft = "TopLeft" | ||
TopLeft = "TopLeft", | ||
TopCenter = "TopCenter" | ||
} | ||
@@ -16,0 +18,0 @@ export interface Rectangle { |
@@ -8,5 +8,7 @@ "use strict"; | ||
Direction["BottomLeft"] = "BottomLeft"; | ||
Direction["BottomCenter"] = "BottomCenter"; | ||
Direction["TopRight"] = "TopRight"; | ||
Direction["TopLeft"] = "TopLeft"; | ||
Direction["TopCenter"] = "TopCenter"; | ||
})(Direction = exports.Direction || (exports.Direction = {})); | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVVBLElBQVksU0FLWDtBQUxELFdBQVksU0FBUztJQUNuQix3Q0FBMkIsQ0FBQTtJQUMzQixzQ0FBeUIsQ0FBQTtJQUN6QixrQ0FBcUIsQ0FBQTtJQUNyQixnQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUFLcEIifQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVVBLElBQVksU0FPWDtBQVBELFdBQVksU0FBUztJQUNuQix3Q0FBMkIsQ0FBQTtJQUMzQixzQ0FBeUIsQ0FBQTtJQUN6QiwwQ0FBNkIsQ0FBQTtJQUM3QixrQ0FBcUIsQ0FBQTtJQUNyQixnQ0FBbUIsQ0FBQTtJQUNuQixvQ0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBUFcsU0FBUyxHQUFULGlCQUFTLEtBQVQsaUJBQVMsUUFPcEIifQ== |
@@ -20,5 +20,6 @@ import { Dimensions, Direction, DirectionPoint, Rectangle } from './types'; | ||
*/ | ||
export declare const getDirections: ({ anchor, dimensions, }: { | ||
export declare const getDirections: ({ anchor, dimensions, viewport, }: { | ||
anchor: Rectangle; | ||
dimensions: Dimensions; | ||
viewport?: Dimensions | undefined; | ||
}) => DirectionPoint; | ||
@@ -25,0 +26,0 @@ /** |
@@ -21,3 +21,4 @@ import { getRectangleOverlap } from './rectangle'; | ||
*/ | ||
export const getDirections = ({ anchor, dimensions, }) => { | ||
export const getDirections = ({ anchor, dimensions, viewport, }) => { | ||
var _a, _b; | ||
return { | ||
@@ -32,2 +33,6 @@ [Direction.BottomRight]: { | ||
}, | ||
[Direction.BottomCenter]: { | ||
left: Math.round((((_a = viewport === null || viewport === void 0 ? void 0 : viewport.width) !== null && _a !== void 0 ? _a : 0) - dimensions.width) / 2), | ||
top: anchor.top + anchor.height, | ||
}, | ||
[Direction.TopRight]: { | ||
@@ -41,2 +46,6 @@ left: anchor.left + anchor.width, | ||
}, | ||
[Direction.TopCenter]: { | ||
left: Math.round((((_b = viewport === null || viewport === void 0 ? void 0 : viewport.width) !== null && _b !== void 0 ? _b : 0) - dimensions.width) / 2), | ||
top: anchor.top - anchor.height, | ||
}, | ||
}; | ||
@@ -89,2 +98,3 @@ }; | ||
dimensions, | ||
viewport, | ||
}), }) => { | ||
@@ -100,6 +110,3 @@ const viewportRectangle = { | ||
for (const direction in directions) { | ||
const directionRectangle = { | ||
...directions[direction], | ||
...dimensions, | ||
}; | ||
const directionRectangle = Object.assign(Object.assign({}, directions[direction]), dimensions); | ||
const area = getRectangleOverlap(directionRectangle, viewportRectangle); | ||
@@ -113,2 +120,2 @@ if (area > bestArea) { | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kaXJlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xELE9BQU8sRUFBYyxTQUFTLEVBQTZCLE1BQU0sU0FBUyxDQUFDO0FBRTNFOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEVBQzVCLE1BQU0sRUFDTixVQUFVLEdBSVgsRUFBa0IsRUFBRTtJQUNuQixPQUFPO1FBQ0wsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUs7WUFDaEMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU07U0FDaEM7UUFDRCxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUN0QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSztZQUNwQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTTtTQUNoQztRQUNELENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLO1lBQ2hDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNO1NBQ3BDO1FBQ0QsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUs7WUFDcEMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU07U0FDcEM7S0FDRixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLEdBQWUsRUFBRTtJQUNsRCxJQUFJLE9BQU8sTUFBTSxJQUFJLFdBQVcsRUFBRTtRQUNoQyxPQUFPO1lBQ0wsS0FBSyxFQUFFLENBQUM7WUFDUixNQUFNLEVBQUUsQ0FBQztTQUNWLENBQUM7S0FDSDtJQUVELE9BQU87UUFDTCxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVU7UUFDeEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXO0tBQzNCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxFQUNyQyxNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsR0FBRyxtQkFBbUIsRUFBRSxFQUNoQyxVQUFVLEdBQUcsYUFBYSxDQUFDO0lBQ3pCLE1BQU07SUFDTixVQUFVO0NBQ1gsQ0FBQyxHQU1ILEVBQUUsRUFBRTtJQUNILE1BQU0saUJBQWlCLEdBQWM7UUFDbkMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO1FBQ3JCLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTtRQUN2QixJQUFJLEVBQUUsQ0FBQztRQUNQLEdBQUcsRUFBRSxDQUFDO0tBQ1AsQ0FBQztJQUVGLElBQUksYUFBYSxHQUFjLFNBQVMsQ0FBQyxVQUFVLENBQUM7SUFDcEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0lBRWpCLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFO1FBQ2xDLE1BQU0sa0JBQWtCLEdBQWM7WUFDcEMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQ3hCLEdBQUcsVUFBVTtTQUNkLENBQUM7UUFFRixNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRXhFLElBQUksSUFBSSxHQUFHLFFBQVEsRUFBRTtZQUNuQixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLGFBQWEsR0FBRyxTQUFzQixDQUFDO1NBQ3hDO0tBQ0Y7SUFFRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDLENBQUMifQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kaXJlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2xELE9BQU8sRUFBYyxTQUFTLEVBQTZCLE1BQU0sU0FBUyxDQUFDO0FBRTNFOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEVBQzVCLE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxHQUtULEVBQWtCLEVBQUU7O0lBQ25CLE9BQU87UUFDTCxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN2QixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSztZQUNoQyxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTTtTQUNoQztRQUNELENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3RCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLO1lBQ3BDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNO1NBQ2hDO1FBQ0QsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLEtBQUssbUNBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTTtTQUNoQztRQUNELENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3BCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLO1lBQ2hDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNO1NBQ3BDO1FBQ0QsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLEtBQUs7WUFDcEMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU07U0FDcEM7UUFDRCxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsS0FBSyxtQ0FBSSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pFLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNO1NBQ2hDO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxHQUFlLEVBQUU7SUFDbEQsSUFBSSxPQUFPLE1BQU0sSUFBSSxXQUFXLEVBQUU7UUFDaEMsT0FBTztZQUNMLEtBQUssRUFBRSxDQUFDO1lBQ1IsTUFBTSxFQUFFLENBQUM7U0FDVixDQUFDO0tBQ0g7SUFFRCxPQUFPO1FBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQ3hCLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVztLQUMzQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsRUFDckMsTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEdBQUcsbUJBQW1CLEVBQUUsRUFDaEMsVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUN6QixNQUFNO0lBQ04sVUFBVTtJQUNWLFFBQVE7Q0FDVCxDQUFDLEdBTUgsRUFBRSxFQUFFO0lBQ0gsTUFBTSxpQkFBaUIsR0FBYztRQUNuQyxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7UUFDckIsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO1FBQ3ZCLElBQUksRUFBRSxDQUFDO1FBQ1AsR0FBRyxFQUFFLENBQUM7S0FDUCxDQUFDO0lBRUYsSUFBSSxhQUFhLEdBQWMsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUNwRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFFakIsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUU7UUFDbEMsTUFBTSxrQkFBa0IsbUNBQ25CLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FDckIsVUFBVSxDQUNkLENBQUM7UUFFRixNQUFNLElBQUksR0FBRyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBRXhFLElBQUksSUFBSSxHQUFHLFFBQVEsRUFBRTtZQUNuQixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLGFBQWEsR0FBRyxTQUFzQixDQUFDO1NBQ3hDO0tBQ0Y7SUFFRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDLENBQUMifQ== |
@@ -22,3 +22,3 @@ import { calculateBestDirection, getDirections, getWindowDimensions, } from './direction'; | ||
export const calculateBestPosition = ({ anchor, dimensions, viewport = getWindowDimensions(), }) => { | ||
const directions = getDirections({ anchor, dimensions }); | ||
const directions = getDirections({ anchor, dimensions, viewport }); | ||
const direction = calculateBestDirection({ | ||
@@ -32,2 +32,2 @@ anchor, | ||
}; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Bvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLG1CQUFtQixHQUNwQixNQUFNLGFBQWEsQ0FBQztBQUdyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxFQUNwQyxNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsR0FBRyxtQkFBbUIsRUFBRSxHQUtqQyxFQUFTLEVBQUU7SUFDVixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUV6RCxNQUFNLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQztRQUN2QyxNQUFNO1FBQ04sVUFBVTtRQUNWLFFBQVE7UUFDUixVQUFVO0tBQ1gsQ0FBQyxDQUFDO0lBRUgsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDIn0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3Bvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsYUFBYSxFQUNiLG1CQUFtQixHQUNwQixNQUFNLGFBQWEsQ0FBQztBQUdyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxFQUNwQyxNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsR0FBRyxtQkFBbUIsRUFBRSxHQUtqQyxFQUFTLEVBQUU7SUFDVixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFFbkUsTUFBTSxTQUFTLEdBQUcsc0JBQXNCLENBQUM7UUFDdkMsTUFBTTtRQUNOLFVBQVU7UUFDVixRQUFRO1FBQ1IsVUFBVTtLQUNYLENBQUMsQ0FBQztJQUVILE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyJ9 |
@@ -12,4 +12,6 @@ export interface Dimensions { | ||
BottomLeft = "BottomLeft", | ||
BottomCenter = "BottomCenter", | ||
TopRight = "TopRight", | ||
TopLeft = "TopLeft" | ||
TopLeft = "TopLeft", | ||
TopCenter = "TopCenter" | ||
} | ||
@@ -16,0 +18,0 @@ export interface Rectangle { |
@@ -5,5 +5,7 @@ export var Direction; | ||
Direction["BottomLeft"] = "BottomLeft"; | ||
Direction["BottomCenter"] = "BottomCenter"; | ||
Direction["TopRight"] = "TopRight"; | ||
Direction["TopLeft"] = "TopLeft"; | ||
Direction["TopCenter"] = "TopCenter"; | ||
})(Direction || (Direction = {})); | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE1BQU0sQ0FBTixJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDbkIsd0NBQTJCLENBQUE7SUFDM0Isc0NBQXlCLENBQUE7SUFDekIsa0NBQXFCLENBQUE7SUFDckIsZ0NBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLFNBQVMsS0FBVCxTQUFTLFFBS3BCIn0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVVBLE1BQU0sQ0FBTixJQUFZLFNBT1g7QUFQRCxXQUFZLFNBQVM7SUFDbkIsd0NBQTJCLENBQUE7SUFDM0Isc0NBQXlCLENBQUE7SUFDekIsMENBQTZCLENBQUE7SUFDN0Isa0NBQXFCLENBQUE7SUFDckIsZ0NBQW1CLENBQUE7SUFDbkIsb0NBQXVCLENBQUE7QUFDekIsQ0FBQyxFQVBXLFNBQVMsS0FBVCxTQUFTLFFBT3BCIn0= |
{ | ||
"name": "calculate-position", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"description": "Calculate the optimum position for an element relative to another.", | ||
@@ -13,4 +13,4 @@ "main": "build/main/index.js", | ||
"build": "run-p build:*", | ||
"build:main": "tsc -p tsconfig.json", | ||
"build:module": "tsc -p tsconfig.module.json", | ||
"build:main": "tsc --build tsconfig.json", | ||
"build:module": "tsc --build tsconfig.module.json", | ||
"fix": "run-s fix:*", | ||
@@ -17,0 +17,0 @@ "fix:prettier": "prettier \"src/**/*.ts\" --write", |
# calculate-position | ||
Calculates the best position (left/top coords) for a given anchor and dimensions. | ||
### Example (es module) | ||
Mostly useful for placing popups and tooltips correctly in the viewports. | ||
Behind the scenes we calculate all the position positions for the popup element (TopLeft, TopRight etc) and then choose the one that has the largest overlap with the viewport (normal the window). | ||
### calculateBestDirection | ||
Calculates the best direction (e.g. BottomLeft) for a given anchor and dimensions. | ||
Valid directions are: | ||
- `TopLeft` | ||
- `TopRight` | ||
- `TopCenter` | ||
- `BottomLeft` | ||
- `BottomRight` | ||
- `BottomCenter` | ||
`BottomRight` is the default direction. | ||
Valid arguments: | ||
``` | ||
@param anchor - anchor position that calculations will be based of | ||
@param dimensions - width/height dimensions of popup element | ||
@param viewport - (optional) viewport rectangle (defaults to window) | ||
``` | ||
Example: | ||
```js | ||
import calculateBestPosition from 'calculate-position' | ||
import {calculateBestDirection} from 'calculate-position' | ||
const anchor = popupAnchorElement.getBoundingClientRect() | ||
const dimensions = {width: popupWidth, height: popupHeight} | ||
console.log(calculateBestPosition({anchor, dimensions})) | ||
// => {left: 200, top: 100} | ||
console.log(calculateBestDirection({anchor, dimensions})) | ||
// => Direction.TopLeft | ||
``` | ||
### calculateBestPosition | ||
Returns coordinates (i.e. `top` and `left`) for a given anchor and dimensions. | ||
Valid arguments: | ||
``` | ||
@param anchor - anchor position that calculations will be based of. Typically an element being hovered over. | ||
@param dimensions - width/height dimensions of popup element | ||
@param viewport - optional viewport rectangle (defaults to window) | ||
``` | ||
Example: | ||
```js | ||
import {calculateBestPosition} from 'calculate-position' | ||
const anchor = anchorElement.getBoundingClientRect() | ||
const dimensions = {width: popupWidth, height: popupHeight} | ||
console.log(calculateBestPosition({anchor, dimensions})) | ||
// => {left: 200, top: 100} | ||
``` | ||
40213
699
63