@primer/react
Version:
An implementation of GitHub's Primer Design System using React
71 lines (68 loc) • 3.15 kB
JavaScript
import { clsx } from 'clsx';
import styled from 'styled-components';
import React, { forwardRef } from 'react';
import { TYPOGRAPHY, COMMON } from '../constants.js';
import sx from '../sx.js';
import '../FeatureFlags/FeatureFlags.js';
import { useFeatureFlag } from '../FeatureFlags/useFeatureFlag.js';
import '../FeatureFlags/DefaultFeatureFlags.js';
import Box from '../Box/Box.js';
import '@primer/behaviors/utils';
import '@primer/behaviors';
import { useRefObjectAsForwardedRef } from '../hooks/useRefObjectAsForwardedRef.js';
import { includesSystemProps } from '../utils/includeSystemProps.js';
import classes from './Text.module.css.js';
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
const StyledText = styled.span.withConfig({
displayName: "Text__StyledText",
componentId: "sc-17v1xeu-0"
})(["", ";", ";&:where([data-size='small']){font-size:var(--text-body-size-small,0.75rem);line-height:var(--text-body-lineHeight-small,1.6666);}&:where([data-size='medium']){font-size:var(--text-body-size-medium,0.875rem);line-height:var(--text-body-lineHeight-medium,1.4285);}&:where([data-size='large']){font-size:var(--text-body-size-large,1rem);line-height:var(--text-body-lineHeight-large,1.5);}&:where([data-weight='light']){font-weight:var(--base-text-weight-light,300);}&:where([data-weight='normal']){font-weight:var(--base-text-weight-normal,400);}&:where([data-weight='medium']){font-weight:var(--base-text-weight-medium,500);}&:where([data-weight='semibold']){font-weight:var(--base-text-weight-semibold,600);}", ";"], TYPOGRAPHY, COMMON, sx);
const Text = /*#__PURE__*/forwardRef(({
as: Component = 'span',
className,
size,
weight,
...props
}, forwardedRef) => {
const enabled = useFeatureFlag('primer_react_css_modules_ga');
const innerRef = React.useRef(null);
useRefObjectAsForwardedRef(forwardedRef, innerRef);
if (enabled) {
// If props includes TYPOGRAPHY or COMMON props, pass them to the Box component
if (includesSystemProps(props)) {
return (
/*#__PURE__*/
// @ts-ignore shh
React.createElement(Box, _extends({
as: Component,
className: clsx(className, classes.Text),
"data-size": size,
"data-weight": weight
}, props, {
// @ts-ignore shh
ref: innerRef
}))
);
}
return /*#__PURE__*/React.createElement(Component, _extends({
className: clsx(className, classes.Text),
"data-size": size,
"data-weight": weight
}, props, {
// @ts-ignore shh
ref: innerRef
}));
}
return /*#__PURE__*/React.createElement(StyledText, _extends({
as: Component,
className: className,
"data-size": size,
"data-weight": weight
}, props, {
// @ts-ignore shh
ref: innerRef
}));
// eslint-disable-next-line @typescript-eslint/no-explicit-any
});
Text.displayName = 'Text';
export { Text as default };