@atlaskit/editor-common
Version:
A package that contains common classes and components for editor and renderer
146 lines (141 loc) • 6 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.calcBreakoutWidth = exports.breakoutConsts = exports.absoluteBreakoutWidth = void 0;
exports.calcBreakoutWidthPx = calcBreakoutWidthPx;
exports.calcWideWidth = void 0;
exports.calculateBreakoutStyles = calculateBreakoutStyles;
exports.getTitle = exports.getNextBreakoutMode = void 0;
var _editorSharedStyles = require("@atlaskit/editor-shared-styles");
var _messages = _interopRequireDefault(require("../messages"));
var _BaseTheme = require("../ui/BaseTheme");
var _WidthProvider = require("../ui/WidthProvider");
var _dom = require("./dom");
/**
* Variables required to construct a context for breakout ssr inline script.
*
* TODO: Clean this up after: https://product-fabric.atlassian.net/browse/ED-8942
*
*/
var breakoutConsts = exports.breakoutConsts = {
padding: _editorSharedStyles.akEditorBreakoutPadding,
defaultLayoutWidth: _editorSharedStyles.akEditorDefaultLayoutWidth,
wideScaleRatio: _editorSharedStyles.breakoutWideScaleRatio,
fullWidthLayoutWidth: _editorSharedStyles.akEditorFullWidthLayoutWidth,
wideLayoutWidth: _editorSharedStyles.akEditorWideLayoutWidth,
mapBreakpointToLayoutMaxWidth: _BaseTheme.mapBreakpointToLayoutMaxWidth,
getBreakpoint: _WidthProvider.getBreakpoint,
/**
* This function can return percentage value or px value depending upon the inputs
*/
calcBreakoutWidth: function calcBreakoutWidth(layout, containerWidth) {
var effectiveFullWidth = containerWidth - breakoutConsts.padding;
switch (layout) {
case 'full-width':
return "".concat(Math.min(effectiveFullWidth, breakoutConsts.fullWidthLayoutWidth), "px");
case 'wide':
if (effectiveFullWidth <= 0) {
return '100%';
}
var wideWidth = breakoutConsts.calcWideWidth(containerWidth);
if (wideWidth.endsWith('%')) {
return "".concat(Math.min(effectiveFullWidth, breakoutConsts.fullWidthLayoutWidth), "px");
}
return wideWidth;
default:
return '100%';
}
},
calcLineLength: function calcLineLength() {
return breakoutConsts.defaultLayoutWidth;
},
calcWideWidth: function calcWideWidth() {
var containerWidth = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : breakoutConsts.defaultLayoutWidth;
var maxWidth = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Infinity;
var fallback = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '100%';
var effectiveFullWidth = containerWidth - breakoutConsts.padding;
var layoutMaxWidth = breakoutConsts.mapBreakpointToLayoutMaxWidth(breakoutConsts.getBreakpoint(containerWidth));
var wideWidth = Math.min(Math.ceil(layoutMaxWidth * breakoutConsts.wideScaleRatio), effectiveFullWidth);
return layoutMaxWidth > wideWidth ? fallback : "".concat(Math.min(maxWidth, wideWidth), "px");
}
};
var absoluteBreakoutWidth = exports.absoluteBreakoutWidth = function absoluteBreakoutWidth(layout, containerWidth) {
var breakoutWidth = breakoutConsts.calcBreakoutWidth(layout, containerWidth);
// If it's percent, map to max layout size
if (breakoutWidth.endsWith('%')) {
switch (layout) {
case 'full-width':
return _editorSharedStyles.akEditorFullWidthLayoutWidth;
case 'wide':
return _editorSharedStyles.akEditorWideLayoutWidth;
default:
return breakoutConsts.mapBreakpointToLayoutMaxWidth(breakoutConsts.getBreakpoint(containerWidth));
}
}
return parseInt(breakoutWidth, 10);
};
var calcWideWidth = exports.calcWideWidth = breakoutConsts.calcWideWidth;
var calcBreakoutWidth = exports.calcBreakoutWidth = breakoutConsts.calcBreakoutWidth;
function calculateBreakoutStyles(_ref) {
var mode = _ref.mode,
widthStateLineLength = _ref.widthStateLineLength,
widthStateWidth = _ref.widthStateWidth;
var breakoutWidth = calcBreakoutWidth(mode, widthStateWidth);
var breakoutWidthPx = (0, _dom.parsePx)(breakoutWidth);
if (!widthStateLineLength) {
// lineLength is not normally undefined when this is run for,
// consumers but can be in SSR, initial render or test (jsdom)
// environments.
//
// this approach doesn't work well with position: fixed, so
// it breaks things like sticky headers.
//
// It can also cause bluriness for some child content (such as iframes)
return {
type: 'line-length-unknown',
width: breakoutWidth,
minWidth: breakoutWidthPx,
display: 'flex',
justifyContent: 'center',
transform: 'none',
transition: "min-width 0.5s ".concat(_editorSharedStyles.akEditorSwoopCubicBezier)
};
}
// NOTE
// At time of writing -- when toggling between full-width and
// full-page appearance modes. There is a slight delay before
// the widthState is updated.
// During this period -- the marginLeftPx will be incorrect.
// const marginLeftPx = -(breakoutWidthPx - widthStateLineLength) / 2;
return {
type: 'line-length-known',
width: breakoutWidth,
minWidth: breakoutWidthPx,
transition: "min-width 0.5s ".concat(_editorSharedStyles.akEditorSwoopCubicBezier),
transform: "translateX(-50%)",
marginLeft: "50%"
};
}
function calcBreakoutWidthPx(mode, widthStateWidth) {
return (0, _dom.parsePx)(calcBreakoutWidth(mode, widthStateWidth));
}
var getNextBreakoutMode = exports.getNextBreakoutMode = function getNextBreakoutMode(currentMode) {
if (currentMode === 'full-width') {
return 'center';
} else if (currentMode === 'wide') {
return 'full-width';
}
return 'wide';
};
var getTitle = exports.getTitle = function getTitle(layout) {
switch (layout) {
case 'full-width':
return _messages.default.layoutFixedWidth;
case 'wide':
return _messages.default.layoutFullWidth;
default:
return _messages.default.layoutWide;
}
};