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 from '@mui/utils/deepmerge'; import generateUtilityClass from '@mui/utils/generateUtilityClass'; import composeClasses from '@mui/utils/composeClasses'; 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; }