@vnmfify/core
Version:
```shell npm i @vnmfify/core -S ```
107 lines (90 loc) • 5.35 kB
JavaScript
import _isArray from "lodash/isArray";
import _toNumber from "lodash/toNumber";
import _isString from "lodash/isString";
import _isNumber from "lodash/isNumber";
var _excluded = ["className", "style", "gutter", "direction", "wrap", "justify", "align", "children"];
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
import { View } from "@vnxjs/components";
import classNames from "classnames";
import * as React from "react";
import { forwardRef, useMemo } from "react";
import { prefixClassname } from "../styles";
import { addUnitPx } from "../utils/format/unit";
import FlexContext from "./flex.context";
function useFlexGutter(gutter) {
return useMemo(() => {
if (gutter === undefined) {
return [undefined, undefined];
}
if (_isNumber(gutter)) {
return [gutter, gutter];
}
if (_isString(gutter)) {
var gutterNumber = _toNumber(gutter);
return [gutterNumber, gutterNumber];
}
if (_isArray(gutter)) {
var [horizontalGutter, verticalGutter] = gutter;
return [_toNumber(horizontalGutter), _toNumber(verticalGutter)];
}
return [0, 0];
}, [gutter]);
}
var Flex = /*#__PURE__*/forwardRef((props, ref) => {
var {
className,
style,
gutter: gutterProp,
direction = "row",
wrap = "nowrap",
justify = "start",
align = "start",
children
} = props,
restProps = _objectWithoutProperties(props, _excluded);
var gutter = useFlexGutter(gutterProp);
var [horizontalGutter] = gutter;
var gutterStyle = useMemo(() => {
var gutterStyle = {};
if (horizontalGutter) {
var averagePadding = _toNumber(horizontalGutter) / 2;
gutterStyle.marginLeft = addUnitPx(-averagePadding);
gutterStyle.marginRight = addUnitPx(-averagePadding);
}
return {};
}, [horizontalGutter]);
return /*#__PURE__*/React.createElement(View, _objectSpread({
ref: ref,
className: classNames(prefixClassname("flex"), {
[prefixClassname("flex--row")]: direction === "row",
[prefixClassname("flex--row-reverse")]: direction === "row-reverse",
[prefixClassname("flex--column")]: direction === "column",
[prefixClassname("flex--column-reverse")]: direction === "column-reverse",
[prefixClassname("flex--nowrap")]: wrap === "nowrap",
[prefixClassname("flex--wrap")]: wrap === "wrap",
[prefixClassname("flex--wrap-reverse")]: wrap === "wrap-reverse",
[prefixClassname("flex--justify-start")]: justify === "start",
[prefixClassname("flex--justify-center")]: justify === "center",
[prefixClassname("flex--justify-end")]: justify === "end",
[prefixClassname("flex--justify-space-around")]: justify === "space-around",
[prefixClassname("flex--justify-space-between")]: justify === "space-between",
[prefixClassname("flex--align-start")]: align === "start",
[prefixClassname("flex--align-center")]: align === "center",
[prefixClassname("flex--align-end")]: align === "end",
[prefixClassname("flex--align-baseline")]: align === "baseline",
[prefixClassname("flex--align-stretch")]: align === "stretch"
}, className),
style: _objectSpread(_objectSpread({}, style), gutterStyle)
}, restProps), /*#__PURE__*/React.createElement(FlexContext.Provider, {
value: {
gutter
},
children: children
}));
});
export default Flex;
//# sourceMappingURL=flex.js.map