@greg-md/ng-flex-css-layout
Version:
Flex-CSS-Layout is an alternative behaviour of Flex-Layout directives, that will still work with Angular Universal and App Shell.
103 lines (102 loc) • 9.18 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
export var /** @type {?} */ INLINE = 'inline';
export var /** @type {?} */ LAYOUT_VALUES = ['row', 'column', 'row-reverse', 'column-reverse'];
/**
* Validate the direction|'direction wrap' value and then update the host's inline flexbox styles
* @param {?} value
* @return {?}
*/
export function buildLayoutCSS(value) {
var _a = tslib_1.__read(validateValue(value), 3), direction = _a[0], wrap = _a[1], isInline = _a[2];
return buildCSS(direction, wrap, isInline);
}
/**
* Validate the value to be one of the acceptable value options
* Use default fallback of 'row'
* @param {?} value
* @return {?}
*/
export function validateValue(value) {
value = value ? value.toLowerCase() : '';
var _a = tslib_1.__read(value.split(' '), 3), direction = _a[0], wrap = _a[1], inline = _a[2];
// First value must be the `flex-direction`
if (!LAYOUT_VALUES.find(function (x) { return x === direction; })) {
direction = LAYOUT_VALUES[0];
}
if (wrap === INLINE) {
wrap = (inline !== INLINE) ? inline : '';
inline = INLINE;
}
return [direction, validateWrapValue(wrap), !!inline];
}
/**
* Determine if the validated, flex-direction value specifies
* a horizontal/row flow.
* @param {?} value
* @return {?}
*/
export function isFlowHorizontal(value) {
var _a = tslib_1.__read(validateValue(value), 1), flow = _a[0];
return flow.indexOf('row') > -1;
}
/**
* Convert layout-wrap='<value>' to expected flex-wrap style
* @param {?} value
* @return {?}
*/
export function validateWrapValue(value) {
if (!!value) {
switch (value.toLowerCase()) {
case 'reverse':
case 'wrap-reverse':
case 'reverse-wrap':
value = 'wrap-reverse';
break;
case 'no':
case 'none':
case 'nowrap':
value = 'nowrap';
break;
// All other values fallback to 'wrap'
default:
value = 'wrap';
break;
}
}
return value;
}
/**
* Build the CSS that should be assigned to the element instance
* BUG:
* 1) min-height on a column flex container won’t apply to its flex item children in IE 10-11.
* Use height instead if possible; height : <xxx>vh;
*
* This way any padding or border specified on the child elements are
* laid out and drawn inside that element's specified width and height.
* @param {?} direction
* @param {?=} wrap
* @param {?=} inline
* @return {?}
*/
export function buildCSS(direction, wrap, inline) {
if (wrap === void 0) { wrap = null; }
if (inline === void 0) { inline = false; }
return {
'display': inline ? 'inline-flex' : 'flex',
'box-sizing': 'border-box',
'flex-direction': direction,
'flex-wrap': !!wrap ? wrap : null
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BncmVnLW1kL25nLWZsZXgtY3NzLWxheW91dC8iLCJzb3VyY2VzIjpbImxpYi9sYXlvdXQtdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQU9BLE1BQU0sQ0FBQyxxQkFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sQ0FBQyxxQkFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDOzs7Ozs7QUFLaEYsTUFBTSx5QkFBeUIsS0FBYTtJQUMxQyxrREFBTyxpQkFBUyxFQUFFLFlBQUksRUFBRSxnQkFBUSxDQUF5QjtJQUN6RCxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7Q0FDNUM7Ozs7Ozs7QUFNRCxNQUFNLHdCQUF3QixLQUFhO0lBQ3pDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3pDLDhDQUFLLGlCQUFTLEVBQUUsWUFBSSxFQUFFLGNBQU0sQ0FBcUI7O0lBR2pELEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFBLENBQUMsSUFBSSxPQUFBLENBQUMsS0FBSyxTQUFTLEVBQWYsQ0FBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLFNBQVMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDOUI7SUFFRCxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNwQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sR0FBRyxNQUFNLENBQUM7S0FDakI7SUFFRCxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQ3ZEOzs7Ozs7O0FBTUQsTUFBTSwyQkFBMkIsS0FBYTtJQUM1QyxrREFBTyxZQUFJLENBQTJCO0lBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0NBQ2pDOzs7Ozs7QUFLRCxNQUFNLDRCQUE0QixLQUFLO0lBQ3JDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ1osTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1QixLQUFLLFNBQVMsQ0FBQztZQUNmLEtBQUssY0FBYyxDQUFDO1lBQ3BCLEtBQUssY0FBYztnQkFDakIsS0FBSyxHQUFHLGNBQWMsQ0FBQztnQkFDdkIsS0FBSyxDQUFDO1lBRVIsS0FBSyxJQUFJLENBQUM7WUFDVixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssUUFBUTtnQkFDWCxLQUFLLEdBQUcsUUFBUSxDQUFDO2dCQUNqQixLQUFLLENBQUM7O1lBR1I7Z0JBQ0UsS0FBSyxHQUFHLE1BQU0sQ0FBQztnQkFDZixLQUFLLENBQUM7U0FDVDtLQUNGO0lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztDQUNkOzs7Ozs7Ozs7Ozs7OztBQVdELE1BQU0sbUJBQW1CLFNBQVMsRUFBRSxJQUFXLEVBQUUsTUFBYztJQUEzQixxQkFBQSxFQUFBLFdBQVc7SUFBRSx1QkFBQSxFQUFBLGNBQWM7SUFDN0QsTUFBTSxDQUFDO1FBQ0wsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNO1FBQzFDLFlBQVksRUFBRSxZQUFZO1FBQzFCLGdCQUFnQixFQUFFLFNBQVM7UUFDM0IsV0FBVyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSTtLQUNsQyxDQUFDO0NBQ0giLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmV4cG9ydCBjb25zdCBJTkxJTkUgPSAnaW5saW5lJztcbmV4cG9ydCBjb25zdCBMQVlPVVRfVkFMVUVTID0gWydyb3cnLCAnY29sdW1uJywgJ3Jvdy1yZXZlcnNlJywgJ2NvbHVtbi1yZXZlcnNlJ107XG5cbi8qKlxuICogVmFsaWRhdGUgdGhlIGRpcmVjdGlvbnwnZGlyZWN0aW9uIHdyYXAnIHZhbHVlIGFuZCB0aGVuIHVwZGF0ZSB0aGUgaG9zdCdzIGlubGluZSBmbGV4Ym94IHN0eWxlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRMYXlvdXRDU1ModmFsdWU6IHN0cmluZykge1xuICBjb25zdCBbZGlyZWN0aW9uLCB3cmFwLCBpc0lubGluZV0gPSB2YWxpZGF0ZVZhbHVlKHZhbHVlKTtcbiAgcmV0dXJuIGJ1aWxkQ1NTKGRpcmVjdGlvbiwgd3JhcCwgaXNJbmxpbmUpO1xufVxuXG4vKipcbiAqIFZhbGlkYXRlIHRoZSB2YWx1ZSB0byBiZSBvbmUgb2YgdGhlIGFjY2VwdGFibGUgdmFsdWUgb3B0aW9uc1xuICogVXNlIGRlZmF1bHQgZmFsbGJhY2sgb2YgJ3JvdydcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVmFsdWUodmFsdWU6IHN0cmluZykge1xuICB2YWx1ZSA9IHZhbHVlID8gdmFsdWUudG9Mb3dlckNhc2UoKSA6ICcnO1xuICBsZXQgW2RpcmVjdGlvbiwgd3JhcCwgaW5saW5lXSA9IHZhbHVlLnNwbGl0KCcgJyk7XG5cbiAgLy8gRmlyc3QgdmFsdWUgbXVzdCBiZSB0aGUgYGZsZXgtZGlyZWN0aW9uYFxuICBpZiAoIUxBWU9VVF9WQUxVRVMuZmluZCh4ID0+IHggPT09IGRpcmVjdGlvbikpIHtcbiAgICBkaXJlY3Rpb24gPSBMQVlPVVRfVkFMVUVTWzBdO1xuICB9XG5cbiAgaWYgKHdyYXAgPT09IElOTElORSkge1xuICAgIHdyYXAgPSAoaW5saW5lICE9PSBJTkxJTkUpID8gaW5saW5lIDogJyc7XG4gICAgaW5saW5lID0gSU5MSU5FO1xuICB9XG5cbiAgcmV0dXJuIFtkaXJlY3Rpb24sIHZhbGlkYXRlV3JhcFZhbHVlKHdyYXApLCAhIWlubGluZV07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIHRoZSB2YWxpZGF0ZWQsIGZsZXgtZGlyZWN0aW9uIHZhbHVlIHNwZWNpZmllc1xuICogYSBob3Jpem9udGFsL3JvdyBmbG93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGbG93SG9yaXpvbnRhbCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IFtmbG93LCBdID0gdmFsaWRhdGVWYWx1ZSh2YWx1ZSk7XG4gIHJldHVybiBmbG93LmluZGV4T2YoJ3JvdycpID4gLTE7XG59XG5cbi8qKlxuICogQ29udmVydCBsYXlvdXQtd3JhcD0nPHZhbHVlPicgdG8gZXhwZWN0ZWQgZmxleC13cmFwIHN0eWxlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVdyYXBWYWx1ZSh2YWx1ZSkge1xuICBpZiAoISF2YWx1ZSkge1xuICAgIHN3aXRjaCAodmFsdWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgY2FzZSAncmV2ZXJzZSc6XG4gICAgICBjYXNlICd3cmFwLXJldmVyc2UnOlxuICAgICAgY2FzZSAncmV2ZXJzZS13cmFwJzpcbiAgICAgICAgdmFsdWUgPSAnd3JhcC1yZXZlcnNlJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ25vJzpcbiAgICAgIGNhc2UgJ25vbmUnOlxuICAgICAgY2FzZSAnbm93cmFwJzpcbiAgICAgICAgdmFsdWUgPSAnbm93cmFwJztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIEFsbCBvdGhlciB2YWx1ZXMgZmFsbGJhY2sgdG8gJ3dyYXAnXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB2YWx1ZSA9ICd3cmFwJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgQ1NTIHRoYXQgc2hvdWxkIGJlIGFzc2lnbmVkIHRvIHRoZSBlbGVtZW50IGluc3RhbmNlXG4gKiBCVUc6XG4gKiAgIDEpIG1pbi1oZWlnaHQgb24gYSBjb2x1bW4gZmxleCBjb250YWluZXIgd29u4oCZdCBhcHBseSB0byBpdHMgZmxleCBpdGVtIGNoaWxkcmVuIGluIElFIDEwLTExLlxuICogICAgICBVc2UgaGVpZ2h0IGluc3RlYWQgaWYgcG9zc2libGU7IGhlaWdodCA6IDx4eHg+dmg7XG4gKlxuICogIFRoaXMgd2F5IGFueSBwYWRkaW5nIG9yIGJvcmRlciBzcGVjaWZpZWQgb24gdGhlIGNoaWxkIGVsZW1lbnRzIGFyZVxuICogIGxhaWQgb3V0IGFuZCBkcmF3biBpbnNpZGUgdGhhdCBlbGVtZW50J3Mgc3BlY2lmaWVkIHdpZHRoIGFuZCBoZWlnaHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENTUyhkaXJlY3Rpb24sIHdyYXAgPSBudWxsLCBpbmxpbmUgPSBmYWxzZSkge1xuICByZXR1cm4ge1xuICAgICdkaXNwbGF5JzogaW5saW5lID8gJ2lubGluZS1mbGV4JyA6ICdmbGV4JyxcbiAgICAnYm94LXNpemluZyc6ICdib3JkZXItYm94JyxcbiAgICAnZmxleC1kaXJlY3Rpb24nOiBkaXJlY3Rpb24sXG4gICAgJ2ZsZXgtd3JhcCc6ICEhd3JhcCA/IHdyYXAgOiBudWxsXG4gIH07XG59XG4iXX0=