You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
7.2 KiB
JavaScript
178 lines
7.2 KiB
JavaScript
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
import * as React from 'react';
|
|
import PropTypes from 'prop-types';
|
|
import clsx from 'clsx';
|
|
import { deepmerge, unstable_composeClasses as composeClasses, unstable_generateUtilityClass as generateUtilityClass } from '@mui/utils';
|
|
import systemStyled from '../styled';
|
|
import useThemePropsSystem from '../useThemeProps';
|
|
import { extendSxProp } from '../styleFunctionSx';
|
|
import createTheme from '../createTheme';
|
|
import { handleBreakpoints, mergeBreakpointsInOrder, resolveBreakpointValues } from '../breakpoints';
|
|
import { createUnarySpacing, getValue } from '../spacing';
|
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
var defaultTheme = createTheme();
|
|
// widening Theme to any so that the consumer can own the theme structure.
|
|
var defaultCreateStyledComponent = systemStyled('div', {
|
|
name: 'MuiStack',
|
|
slot: 'Root',
|
|
overridesResolver: function overridesResolver(props, styles) {
|
|
return styles.root;
|
|
}
|
|
});
|
|
function useThemePropsDefault(props) {
|
|
return useThemePropsSystem({
|
|
props: props,
|
|
name: 'MuiStack',
|
|
defaultTheme: defaultTheme
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Return an array with the separator React element interspersed between
|
|
* each React node of the input children.
|
|
*
|
|
* > joinChildren([1,2,3], 0)
|
|
* [1,0,2,0,3]
|
|
*/
|
|
function joinChildren(children, separator) {
|
|
var childrenArray = React.Children.toArray(children).filter(Boolean);
|
|
return childrenArray.reduce(function (output, child, index) {
|
|
output.push(child);
|
|
if (index < childrenArray.length - 1) {
|
|
output.push( /*#__PURE__*/React.cloneElement(separator, {
|
|
key: "separator-".concat(index)
|
|
}));
|
|
}
|
|
return output;
|
|
}, []);
|
|
}
|
|
var getSideFromDirection = function getSideFromDirection(direction) {
|
|
return {
|
|
row: 'Left',
|
|
'row-reverse': 'Right',
|
|
column: 'Top',
|
|
'column-reverse': 'Bottom'
|
|
}[direction];
|
|
};
|
|
export var style = function style(_ref) {
|
|
var ownerState = _ref.ownerState,
|
|
theme = _ref.theme;
|
|
var styles = _extends({
|
|
display: 'flex',
|
|
flexDirection: 'column'
|
|
}, handleBreakpoints({
|
|
theme: theme
|
|
}, resolveBreakpointValues({
|
|
values: ownerState.direction,
|
|
breakpoints: theme.breakpoints.values
|
|
}), function (propValue) {
|
|
return {
|
|
flexDirection: propValue
|
|
};
|
|
}));
|
|
if (ownerState.spacing) {
|
|
var transformer = createUnarySpacing(theme);
|
|
var base = Object.keys(theme.breakpoints.values).reduce(function (acc, breakpoint) {
|
|
if (_typeof(ownerState.spacing) === 'object' && ownerState.spacing[breakpoint] != null || _typeof(ownerState.direction) === 'object' && ownerState.direction[breakpoint] != null) {
|
|
acc[breakpoint] = true;
|
|
}
|
|
return acc;
|
|
}, {});
|
|
var directionValues = resolveBreakpointValues({
|
|
values: ownerState.direction,
|
|
base: base
|
|
});
|
|
var spacingValues = resolveBreakpointValues({
|
|
values: ownerState.spacing,
|
|
base: base
|
|
});
|
|
if (_typeof(directionValues) === 'object') {
|
|
Object.keys(directionValues).forEach(function (breakpoint, index, breakpoints) {
|
|
var directionValue = directionValues[breakpoint];
|
|
if (!directionValue) {
|
|
var previousDirectionValue = index > 0 ? directionValues[breakpoints[index - 1]] : 'column';
|
|
directionValues[breakpoint] = previousDirectionValue;
|
|
}
|
|
});
|
|
}
|
|
var styleFromPropValue = function styleFromPropValue(propValue, breakpoint) {
|
|
if (ownerState.useFlexGap) {
|
|
return {
|
|
gap: getValue(transformer, propValue)
|
|
};
|
|
}
|
|
return {
|
|
// The useFlexGap={false} implement relies on each child to give up control of the margin.
|
|
// We need to reset the margin to avoid double spacing.
|
|
'& > :not(style):not(style)': {
|
|
margin: 0
|
|
},
|
|
'& > :not(style) ~ :not(style)': _defineProperty({}, "margin".concat(getSideFromDirection(breakpoint ? directionValues[breakpoint] : ownerState.direction)), getValue(transformer, propValue))
|
|
};
|
|
};
|
|
styles = deepmerge(styles, handleBreakpoints({
|
|
theme: theme
|
|
}, spacingValues, styleFromPropValue));
|
|
}
|
|
styles = mergeBreakpointsInOrder(theme.breakpoints, styles);
|
|
return styles;
|
|
};
|
|
export default function createStack() {
|
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
var _options$createStyled = options.createStyledComponent,
|
|
createStyledComponent = _options$createStyled === void 0 ? defaultCreateStyledComponent : _options$createStyled,
|
|
_options$useThemeProp = options.useThemeProps,
|
|
useThemeProps = _options$useThemeProp === void 0 ? useThemePropsDefault : _options$useThemeProp,
|
|
_options$componentNam = options.componentName,
|
|
componentName = _options$componentNam === void 0 ? 'MuiStack' : _options$componentNam;
|
|
var useUtilityClasses = function useUtilityClasses() {
|
|
var slots = {
|
|
root: ['root']
|
|
};
|
|
return composeClasses(slots, function (slot) {
|
|
return generateUtilityClass(componentName, slot);
|
|
}, {});
|
|
};
|
|
var StackRoot = createStyledComponent(style);
|
|
var Stack = /*#__PURE__*/React.forwardRef(function Grid(inProps, ref) {
|
|
var themeProps = useThemeProps(inProps);
|
|
var props = extendSxProp(themeProps); // `color` type conflicts with html color attribute.
|
|
var _props$component = props.component,
|
|
component = _props$component === void 0 ? 'div' : _props$component,
|
|
_props$direction = props.direction,
|
|
direction = _props$direction === void 0 ? 'column' : _props$direction,
|
|
_props$spacing = props.spacing,
|
|
spacing = _props$spacing === void 0 ? 0 : _props$spacing,
|
|
divider = props.divider,
|
|
children = props.children,
|
|
className = props.className,
|
|
_props$useFlexGap = props.useFlexGap,
|
|
useFlexGap = _props$useFlexGap === void 0 ? false : _props$useFlexGap,
|
|
other = _objectWithoutProperties(props, ["component", "direction", "spacing", "divider", "children", "className", "useFlexGap"]);
|
|
var ownerState = {
|
|
direction: direction,
|
|
spacing: spacing,
|
|
useFlexGap: useFlexGap
|
|
};
|
|
var classes = useUtilityClasses();
|
|
return /*#__PURE__*/_jsx(StackRoot, _extends({
|
|
as: component,
|
|
ownerState: ownerState,
|
|
ref: ref,
|
|
className: clsx(classes.root, className)
|
|
}, other, {
|
|
children: divider ? joinChildren(children, divider) : children
|
|
}));
|
|
});
|
|
process.env.NODE_ENV !== "production" ? Stack.propTypes /* remove-proptypes */ = {
|
|
children: PropTypes.node,
|
|
direction: PropTypes.oneOfType([PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row']), PropTypes.arrayOf(PropTypes.oneOf(['column-reverse', 'column', 'row-reverse', 'row'])), PropTypes.object]),
|
|
divider: PropTypes.node,
|
|
spacing: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.number, PropTypes.string])), PropTypes.number, PropTypes.object, PropTypes.string]),
|
|
sx: PropTypes.oneOfType([PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool])), PropTypes.func, PropTypes.object])
|
|
} : void 0;
|
|
return Stack;
|
|
} |