@alifd/next
Version:
A configurable component library for web built on React.
222 lines (221 loc) • 8.64 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.getGridChildProps = exports.filterHelperStyle = exports.filterOuterStyle = exports.filterInnerStyle = exports.getSpacingHelperMargin = exports.getSpacingMargin = exports.getChildMargin = exports.getMargin = void 0;
var tslib_1 = require("tslib");
var util_1 = require("./util");
var util_2 = require("../util");
var ieVersion = util_2.env.ieVersion;
var getPadding = function (padding) {
if (!Array.isArray(padding)) {
return {
padding: padding,
};
}
var attrs = ['paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'];
var paddings = {};
var value;
attrs.forEach(function (attr, index) {
switch (padding.length) {
case 1:
value = padding[0] || 0;
break;
case 2:
value = padding[index] || padding[index - 2] || 0;
break;
case 3:
value = index === 2 ? padding[2] : padding[index] || padding[index - 2] || 0;
break;
case 4:
default:
value = padding[index] || 0;
break;
}
paddings[attr] = value;
});
return paddings;
};
var getMargin = function (size, _a) {
var _b = _a === void 0 ? { isNegative: false, half: false } : _a, isNegative = _b.isNegative, half = _b.half;
if (!size) {
return {};
}
var attrs = ['marginTop', 'marginRight', 'marginBottom', 'marginLeft'];
var margins = {};
var param = 1 * (isNegative ? -1 : 1) * (half ? 0.5 : 1);
var value;
attrs.forEach(function (attr, index) {
if (!Array.isArray(size)) {
value = param * size;
}
else {
switch (size.length) {
case 1:
value = param * (size[0] || 0);
break;
case 2:
value = param * (size[index] || size[index - 2] || 0);
break;
case 3:
value = param * (index === 2 ? size[2] : size[index] || size[index - 2] || 0);
break;
case 4:
default:
value = param * (size[index] || 0);
break;
}
}
margins[attr] = value;
});
return margins;
};
exports.getMargin = getMargin;
var getChildMargin = function (spacing) {
return getMargin(spacing, { isNegative: false, half: true });
};
exports.getChildMargin = getChildMargin;
var getSpacingMargin = function (spacing) {
return getMargin(spacing, { isNegative: false, half: true });
};
exports.getSpacingMargin = getSpacingMargin;
var getSpacingHelperMargin = function (spacing) {
return getMargin(spacing, { isNegative: true, half: true });
};
exports.getSpacingHelperMargin = getSpacingHelperMargin;
var getFlexs = function (flex) {
if (!Array.isArray(flex)) {
return {
flex: flex,
};
}
var attrs = ['flexGrow', 'flexShrink', 'flexBasis'];
var flexs = {};
flex.forEach(function (val, index) {
flexs[attrs[index]] = val;
});
return flexs;
};
var getGridGap = function (gap) {
if (!Array.isArray(gap)) {
return {
gap: gap,
};
}
var attrs = ['rowGap', 'columnGap'];
var gaps = {};
gap.forEach(function (val, index) {
gaps[attrs[index]] = val;
});
return gaps;
};
var getTemplateCount = function (counts) {
if (!isNaN(counts) || typeof counts === 'string') {
return "repeat(".concat(counts, ", minmax(0,1fr))");
}
return counts;
};
var helperProps = ['margin', 'marginTop', 'marginLeft', 'marginRight', 'marginBottom'];
var innerProps = ['flexDirection', 'flexWrap', 'alignContent', 'alignItems', 'display'];
var filterOuterStyle = function (style) {
var props = {};
tslib_1.__spreadArray([], tslib_1.__read(innerProps), false).forEach(function (key) {
props[key] = style[key];
});
return (0, util_1.filterUndefinedValue)((0, util_1.stripObject)(style, props));
};
exports.filterOuterStyle = filterOuterStyle;
var filterHelperStyle = function (style) {
var props = {};
helperProps.forEach(function (key) {
props[key] = style[key];
});
return (0, util_1.filterUndefinedValue)(tslib_1.__assign(tslib_1.__assign({}, props), { overflow: 'hidden' }));
};
exports.filterHelperStyle = filterHelperStyle;
var filterInnerStyle = function (style) {
var props = {};
innerProps.forEach(function (key) {
props[key] = style[key];
});
return (0, util_1.filterUndefinedValue)(props);
};
exports.filterInnerStyle = filterInnerStyle;
var getGridChildProps = function (props, device, gap) {
var _a = props.row, row = _a === void 0 ? 'initial' : _a, _b = props.col, col = _b === void 0 ? 'initial' : _b, _c = props.rowSpan, rowSpan = _c === void 0 ? 1 : _c, _d = props.colSpan, colSpan = _d === void 0 ? 1 : _d;
var totalSpan = 12;
var newColSpan = typeof colSpan === 'object' && 'desktop' in colSpan ? colSpan.desktop : colSpan;
['tablet', 'phone'].forEach(function (deviceKey) {
if (deviceKey === device) {
if (typeof colSpan === 'object' && device in colSpan) {
newColSpan = colSpan[device];
}
else {
switch (deviceKey) {
case 'tablet':
totalSpan = 8;
newColSpan = colSpan > 5 ? 8 : colSpan > 2 ? 4 : 2;
break;
case 'phone':
totalSpan = 4;
newColSpan = colSpan > 2 ? 4 : 2;
break;
}
}
}
});
var gapLeft = gap;
if (Array.isArray(gap)) {
gapLeft = gap[1];
}
var ieChildFix = ieVersion && !(rowSpan === 1 && colSpan === 1)
? {
display: 'inline-block',
width: gapLeft
? "calc(".concat((newColSpan / totalSpan) * 100, "% - ").concat(gapLeft, "px)")
: "".concat((newColSpan / totalSpan) * 100, "%"),
}
: {};
return (0, util_1.filterUndefinedValue)(tslib_1.__assign({ gridRowStart: row, gridRowEnd: "span ".concat(rowSpan), gridColumnStart: col, gridColumnEnd: "span ".concat(newColSpan) }, ieChildFix));
};
exports.getGridChildProps = getGridChildProps;
var getBoxChildProps = function (props) {
var alignSelf = props.alignSelf, flex = props.flex;
return (0, util_1.filterUndefinedValue)(tslib_1.__assign({ alignSelf: alignSelf }, getFlexs(flex)));
};
exports.default = (function (_a) {
var device = _a.device, display = _a.display, gap = _a.gap, direction = _a.direction, dense = _a.dense, rowSpan = _a.rowSpan, colSpan = _a.colSpan, row = _a.row, col = _a.col, rows = _a.rows, columns = _a.columns, justify = _a.justify, align = _a.align, alignSelf = _a.alignSelf, wrap = _a.wrap, flex = _a.flex, padding = _a.padding, margin = _a.margin;
var style = tslib_1.__assign({}, getPadding(padding));
var deviceColumns = 'auto';
switch (device) {
case 'phone':
deviceColumns = 4;
break;
case 'tablet':
deviceColumns = 8;
break;
case 'desktop':
deviceColumns = 12;
break;
default:
break;
}
var newColumns = !isNaN(columns) || typeof columns === 'string' ? columns : deviceColumns;
switch (display) {
case 'grid':
style = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, getGridGap(gap)), { gridTemplateRows: getTemplateCount(rows), gridTemplateColumns: getTemplateCount(newColumns), gridAutoFlow: "".concat(direction || '').concat(dense && " dense") }), getGridChildProps({
row: row,
rowSpan: rowSpan,
col: col,
colSpan: colSpan,
}, device)), style);
break;
case 'flex':
style = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({ msFlexDirection: direction, flexDirection: direction, msFlexWrap: wrap ? 'wrap' : 'none', flexWrap: wrap ? 'wrap' : 'nowrap', msFlexPack: justify, justifyContent: justify, msFlexAlign: align, alignItems: align }, getMargin(margin)), getBoxChildProps({
alignSelf: alignSelf,
flex: flex,
})), style);
break;
default:
break;
}
return (0, util_1.filterUndefinedValue)(style);
});
;