@atlaskit/spotlight
Version:
A spotlight introduces users to points of interest, from focused messages to multi-step tours.
105 lines (103 loc) • 4.15 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getPlacementWithOffset = getPlacementWithOffset;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _placementMap = require("./placement-map");
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var DEFAULT_GAP = "var(--ds-space-050, 4px)";
function normalizeOffsetMember(_ref) {
var value = _ref.value;
return value !== null && value !== void 0 ? value : 0;
}
function addCssLength(_ref2) {
var base = _ref2.base,
delta = _ref2.delta;
if (delta === 0) {
return base;
}
if (typeof base === 'number') {
return base + delta;
}
var operator = delta > 0 ? '+' : '-';
return "calc(".concat(base, " ").concat(operator, " ").concat(Math.abs(delta), "px)");
}
function toSignedCrossAxisShiftValue(_ref3) {
var _crossAxisShift$value;
var crossAxisShift = _ref3.crossAxisShift;
var baseValue = (_crossAxisShift$value = crossAxisShift.value) !== null && _crossAxisShift$value !== void 0 ? _crossAxisShift$value : 0;
if (crossAxisShift.direction === 'forwards') {
return baseValue;
}
if (typeof baseValue === 'number') {
return -baseValue;
}
return "calc(-1 * ".concat(baseValue, ")");
}
function getCrossAxisShiftWithOffset(_ref4) {
var baseCrossAxisShift = _ref4.baseCrossAxisShift,
along = _ref4.along;
if (!baseCrossAxisShift) {
if (along === 0) {
return undefined;
}
return {
value: along,
direction: 'forwards'
};
}
if (along === 0) {
return baseCrossAxisShift;
}
// Collapse sign into the CSS length so additive composition works even
// when the existing shift is already expressed as a `calc(...)` string.
return {
value: addCssLength({
base: toSignedCrossAxisShiftValue({
crossAxisShift: baseCrossAxisShift
}),
delta: along
}),
direction: 'forwards'
};
}
function getPlacementWithOffset(_ref5) {
var _basePlacement$offset, _basePlacement$offset2, _basePlacement$offset3;
var placement = _ref5.placement,
offset = _ref5.offset;
var basePlacement = _placementMap.placementMap[placement];
if (!offset) {
return basePlacement;
}
var _offset = (0, _slicedToArray2.default)(offset, 2),
alongRaw = _offset[0],
awayRaw = _offset[1];
var along = normalizeOffsetMember({
value: alongRaw
});
var away = normalizeOffsetMember({
value: awayRaw
});
if (along === 0 && away === 0) {
return basePlacement;
}
var gap = addCssLength({
base: (_basePlacement$offset = (_basePlacement$offset2 = basePlacement.offset) === null || _basePlacement$offset2 === void 0 ? void 0 : _basePlacement$offset2.gap) !== null && _basePlacement$offset !== void 0 ? _basePlacement$offset : DEFAULT_GAP,
delta: away
});
var crossAxisShift = getCrossAxisShiftWithOffset({
baseCrossAxisShift: (_basePlacement$offset3 = basePlacement.offset) === null || _basePlacement$offset3 === void 0 ? void 0 : _basePlacement$offset3.crossAxisShift,
along: along
});
return _objectSpread(_objectSpread({}, basePlacement), {}, {
offset: _objectSpread(_objectSpread({}, basePlacement.offset), {}, {
gap: gap
}, crossAxisShift ? {
crossAxisShift: crossAxisShift
} : {})
});
}