@primer/react
Version:
An implementation of GitHub's Primer Design System using React
100 lines (97 loc) • 3.37 kB
JavaScript
import React from 'react';
import Box from '../Box/Box.js';
import Truncate from '../Truncate/Truncate.js';
import '@styled-system/css';
import merge from 'deepmerge';
import { ItemContext } from './shared.js';
import '../FeatureFlags/FeatureFlags.js';
import { useFeatureFlag } from '../FeatureFlags/useFeatureFlag.js';
import '../FeatureFlags/DefaultFeatureFlags.js';
import classes from './ActionList.module.css.js';
import { clsx } from 'clsx';
import { defaultSxProp } from '../utils/defaultSxProp.js';
import { actionListCssModulesFlag } from './featureflag.js';
const Description = ({
variant = 'inline',
sx = defaultSxProp,
className,
truncate,
...props
}) => {
const styles = {
fontSize: 0,
lineHeight: '16px',
flexGrow: 1,
flexBasis: variant === 'inline' && !truncate ? 'auto' : 0,
minWidth: 0,
marginLeft: variant === 'block' ? 0 : 2,
color: 'fg.muted',
'li[aria-disabled="true"] &[data-component="ActionList.Description"]': {
color: 'inherit'
},
'li[data-variant="danger"]:hover &[data-component="ActionList.Description"], li[data-variant="danger"]:active &[data-component="ActionList.Description"]': {
color: 'inherit'
}
};
const {
blockDescriptionId,
inlineDescriptionId
} = React.useContext(ItemContext);
const enabled = useFeatureFlag(actionListCssModulesFlag);
if (enabled) {
if (sx !== defaultSxProp) {
if (variant === 'block' || !truncate) {
return /*#__PURE__*/React.createElement(Box, {
as: "span",
sx: merge(styles, sx),
id: variant === 'block' ? blockDescriptionId : inlineDescriptionId,
className: className,
"data-component": "ActionList.Description"
}, props.children);
} else {
return /*#__PURE__*/React.createElement(Truncate, {
id: inlineDescriptionId,
className: className,
sx: merge(styles, sx),
title: props.children,
inline: true,
maxWidth: "100%",
"data-component": "ActionList.Description"
}, props.children);
}
}
if (variant === 'block' || !truncate) {
return /*#__PURE__*/React.createElement("span", {
className: clsx(className, classes.Description),
"data-component": "ActionList.Description",
id: variant === 'block' ? blockDescriptionId : inlineDescriptionId
}, props.children);
} else {
return /*#__PURE__*/React.createElement(Truncate, {
id: inlineDescriptionId,
className: clsx(className, classes.Description),
title: props.children,
inline: true,
maxWidth: "100%",
"data-component": "ActionList.Description",
"data-truncate": truncate
}, props.children);
}
}
return variant === 'block' || !truncate ? /*#__PURE__*/React.createElement(Box, {
as: "span",
sx: merge(styles, sx),
id: variant === 'block' ? blockDescriptionId : inlineDescriptionId,
className: className,
"data-component": "ActionList.Description"
}, props.children) : /*#__PURE__*/React.createElement(Truncate, {
id: inlineDescriptionId,
className: className,
sx: merge(styles, sx),
title: props.children,
inline: true,
maxWidth: "100%",
"data-component": "ActionList.Description"
}, props.children);
};
export { Description };