@mskcc/carbon-react
Version:
Carbon react components for the MSKCC DSM
125 lines (118 loc) • 3.61 kB
JavaScript
/**
* MSKCC 2021, 2024
*/
import { extends as _extends } from '../../_virtual/_rollupPluginBabelHelpers.js';
import cx from 'classnames';
import PropTypes from 'prop-types';
import React__default from 'react';
import { usePrefix } from '../../internal/usePrefix.js';
const sizes = ['xs', 'sm', 'md', 'lg', 'xl', '2xl'];
const densities = ['condensed', 'normal'];
/**
* Density of components within this layout
*/
/**
* Size of components within this layout
*/
const Layout = /*#__PURE__*/React__default.forwardRef(function Layout(_ref, forwardRef) {
let {
as: BaseComponent = 'div',
children,
className,
density,
size,
...rest
} = _ref;
const prefix = usePrefix();
const classes = cx(className, `${prefix}--layout`, {
[`${prefix}--layout--size-${size}`]: size && sizes.includes(size),
[`${prefix}--layout--density-${density}`]: density && densities.includes(density)
});
return /*#__PURE__*/React__default.createElement(BaseComponent, _extends({}, rest, {
ref: forwardRef,
className: classes
}), children);
});
Layout.propTypes = {
/**
* Specify a custom component or element to be rendered as the top-level
* element in the component
*/
as: PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.elementType]),
/**
* Provide child elements to be rendered inside of `Layout`
*/
children: PropTypes.node,
/**
* Provide a custom class name to be used on the outermost element rendered by
* the component
*/
className: PropTypes.string,
/**
* Specify the desired density of components within this layout
*/
density: PropTypes.oneOf(densities),
/**
* Specify the desired size of components within this layout
*/
size: PropTypes.oneOf(sizes)
};
const LayoutConstraint = /*#__PURE__*/React__default.forwardRef(function Layout(_ref2, forwardRef) {
let {
as: BaseComponent = 'div',
children,
className,
density,
size,
...rest
} = _ref2;
const prefix = usePrefix();
const classes = cx(className, Object.entries({
size,
density
}).map(_ref3 => {
let [group, constraints] = _ref3;
return {
[`${prefix}--layout-constraint--${group}__default-${constraints?.default}`]: constraints?.default,
[`${prefix}--layout-constraint--${group}__min-${constraints?.min}`]: constraints?.min,
[`${prefix}--layout-constraint--${group}__max-${constraints?.max}`]: constraints?.max
};
}));
return /*#__PURE__*/React__default.createElement(BaseComponent, _extends({}, rest, {
ref: forwardRef,
className: classes
}), children);
});
LayoutConstraint.propTypes = {
/**
* Specify a custom component or element to be rendered as the top-level
* element in the component
*/
as: PropTypes.oneOfType([PropTypes.func, PropTypes.string, PropTypes.elementType]),
/**
* Provide child elements to be rendered inside of `LayoutConstraint`
*/
children: PropTypes.node,
/**
* Provide a custom class name to be used on the outermost element rendered by
* the component
*/
className: PropTypes.string,
/**
* Specify the desired layout density constraints of this element's children
*/
density: PropTypes.shape({
min: PropTypes.oneOf(densities),
default: PropTypes.oneOf(densities),
max: PropTypes.oneOf(densities)
}),
/**
* Specify the desired layout size constraints of this element's children
*/
size: PropTypes.shape({
min: PropTypes.oneOf(sizes),
default: PropTypes.oneOf(sizes),
max: PropTypes.oneOf(sizes)
})
};
export { Layout, LayoutConstraint };