@primer/react
Version:
An implementation of GitHub's Primer Design System using React
600 lines (595 loc) • 13.6 kB
JavaScript
import { c } from 'react-compiler-runtime';
import { clsx } from 'clsx';
import React, { forwardRef, useContext, createContext } from 'react';
import classes from './Card.module.css.js';
import { fixedForwardRef } from '../utils/modern-polymorphic.js';
import { useId } from '../hooks/useId.js';
import { jsx, jsxs } from 'react/jsx-runtime';
const CardContext = /*#__PURE__*/createContext({});
function CardComponent(props, ref) {
const $ = c(67);
const {
children,
className,
padding: t0,
borderRadius: t1,
as: t2,
...rest
} = props;
const padding = t0 === undefined ? "normal" : t0;
const borderRadius = t1 === undefined ? "large" : t1;
const as = t2 === undefined ? "div" : t2;
const Component = as;
const generatedId = useId();
const titleId = as === "section" ? generatedId : undefined;
if (as === "section" && !("aria-label" in props) && !("aria-labelledby" in props)) {
rest["aria-labelledby"] = titleId;
}
let T0;
let T1;
let description;
let heading;
let menu;
let metadata;
let t10;
let t11;
let t3;
let t4;
let t5;
let t6;
let t7;
let t8;
let t9;
if ($[0] !== Component || $[1] !== borderRadius || $[2] !== children || $[3] !== className || $[4] !== padding || $[5] !== ref || $[6] !== rest || $[7] !== titleId) {
t11 = Symbol.for("react.early_return_sentinel");
bb0: {
let icon = null;
let image = null;
heading = null;
description = null;
metadata = null;
menu = null;
const childArray = React.Children.toArray(children);
for (const child of childArray) {
if (! /*#__PURE__*/React.isValidElement(child)) {
continue;
}
if (child.type === CardIcon) {
icon = child;
} else {
if (child.type === CardImage) {
image = child;
} else {
if (child.type === CardHeading) {
heading = child;
} else {
if (child.type === CardDescription) {
description = child;
} else {
if (child.type === CardMetadata) {
metadata = child;
} else {
if (child.type === CardAction) {
menu = child;
}
}
}
}
}
}
}
const hasSlotChildren = icon || image || heading || description || metadata || menu;
const isEmpty = !hasSlotChildren && childArray.length === 0;
if (isEmpty) {
t11 = null;
break bb0;
}
if (!hasSlotChildren) {
let t12;
if ($[23] !== titleId) {
t12 = {
titleId
};
$[23] = titleId;
$[24] = t12;
} else {
t12 = $[24];
}
let t13;
if ($[25] !== className) {
t13 = clsx(classes.Card, className);
$[25] = className;
$[26] = t13;
} else {
t13 = $[26];
}
let t14;
if ($[27] !== Component || $[28] !== borderRadius || $[29] !== children || $[30] !== padding || $[31] !== ref || $[32] !== rest || $[33] !== t13) {
t14 = /*#__PURE__*/jsx(Component, {
ref: ref,
className: t13,
"data-component": "Card",
"data-padding": padding,
"data-border-radius": borderRadius,
...rest,
children: children
});
$[27] = Component;
$[28] = borderRadius;
$[29] = children;
$[30] = padding;
$[31] = ref;
$[32] = rest;
$[33] = t13;
$[34] = t14;
} else {
t14 = $[34];
}
let t15;
if ($[35] !== t12 || $[36] !== t14) {
t15 = /*#__PURE__*/jsx(CardContext.Provider, {
value: t12,
children: t14
});
$[35] = t12;
$[36] = t14;
$[37] = t15;
} else {
t15 = $[37];
}
t11 = t15;
break bb0;
}
T1 = CardContext.Provider;
if ($[38] !== titleId) {
t10 = {
titleId
};
$[38] = titleId;
$[39] = t10;
} else {
t10 = $[39];
}
T0 = Component;
t3 = ref;
if ($[40] !== className) {
t4 = clsx(classes.Card, className);
$[40] = className;
$[41] = t4;
} else {
t4 = $[41];
}
t5 = "Card";
t6 = padding;
t7 = borderRadius;
t8 = rest;
t9 = (image || icon) && /*#__PURE__*/jsx("div", {
className: clsx(classes.CardHeader, image && classes.CardHeaderEdgeToEdge),
children: image || icon
});
}
$[0] = Component;
$[1] = borderRadius;
$[2] = children;
$[3] = className;
$[4] = padding;
$[5] = ref;
$[6] = rest;
$[7] = titleId;
$[8] = T0;
$[9] = T1;
$[10] = description;
$[11] = heading;
$[12] = menu;
$[13] = metadata;
$[14] = t10;
$[15] = t11;
$[16] = t3;
$[17] = t4;
$[18] = t5;
$[19] = t6;
$[20] = t7;
$[21] = t8;
$[22] = t9;
} else {
T0 = $[8];
T1 = $[9];
description = $[10];
heading = $[11];
menu = $[12];
metadata = $[13];
t10 = $[14];
t11 = $[15];
t3 = $[16];
t4 = $[17];
t5 = $[18];
t6 = $[19];
t7 = $[20];
t8 = $[21];
t9 = $[22];
}
if (t11 !== Symbol.for("react.early_return_sentinel")) {
return t11;
}
let t12;
if ($[42] !== description || $[43] !== heading) {
t12 = /*#__PURE__*/jsxs("div", {
className: classes.CardContent,
children: [heading, description]
});
$[42] = description;
$[43] = heading;
$[44] = t12;
} else {
t12 = $[44];
}
let t13;
if ($[45] !== metadata) {
t13 = metadata ? /*#__PURE__*/jsx("div", {
className: classes.CardMetadataContainer,
children: metadata
}) : null;
$[45] = metadata;
$[46] = t13;
} else {
t13 = $[46];
}
let t14;
if ($[47] !== t12 || $[48] !== t13) {
t14 = /*#__PURE__*/jsxs("div", {
className: classes.CardBody,
children: [t12, t13]
});
$[47] = t12;
$[48] = t13;
$[49] = t14;
} else {
t14 = $[49];
}
let t15;
if ($[50] !== menu) {
t15 = menu ? /*#__PURE__*/jsx("div", {
className: classes.CardAction,
children: menu
}) : null;
$[50] = menu;
$[51] = t15;
} else {
t15 = $[51];
}
let t16;
if ($[52] !== T0 || $[53] !== t14 || $[54] !== t15 || $[55] !== t3 || $[56] !== t4 || $[57] !== t5 || $[58] !== t6 || $[59] !== t7 || $[60] !== t8 || $[61] !== t9) {
t16 = /*#__PURE__*/jsxs(T0, {
ref: t3,
className: t4,
"data-component": t5,
"data-padding": t6,
"data-border-radius": t7,
...t8,
children: [t9, t14, t15]
});
$[52] = T0;
$[53] = t14;
$[54] = t15;
$[55] = t3;
$[56] = t4;
$[57] = t5;
$[58] = t6;
$[59] = t7;
$[60] = t8;
$[61] = t9;
$[62] = t16;
} else {
t16 = $[62];
}
let t17;
if ($[63] !== T1 || $[64] !== t10 || $[65] !== t16) {
t17 = /*#__PURE__*/jsx(T1, {
value: t10,
children: t16
});
$[63] = T1;
$[64] = t10;
$[65] = t16;
$[66] = t17;
} else {
t17 = $[66];
}
return t17;
}
CardComponent.displayName = 'Card';
const CardImpl = fixedForwardRef(CardComponent);
function CardIcon(t0) {
const $ = c(10);
const {
icon: IconComponent,
"aria-label": ariaLabel,
className
} = t0;
let t1;
if ($[0] !== className) {
t1 = clsx(classes.CardIcon, className);
$[0] = className;
$[1] = t1;
} else {
t1 = $[1];
}
const t2 = ariaLabel ? "img" : undefined;
const t3 = !ariaLabel;
let t4;
if ($[2] !== IconComponent) {
t4 = /*#__PURE__*/jsx(IconComponent, {});
$[2] = IconComponent;
$[3] = t4;
} else {
t4 = $[3];
}
let t5;
if ($[4] !== ariaLabel || $[5] !== t1 || $[6] !== t2 || $[7] !== t3 || $[8] !== t4) {
t5 = /*#__PURE__*/jsx("span", {
className: t1,
"data-component": "Card.Icon",
role: t2,
"aria-label": ariaLabel,
"aria-hidden": t3,
children: t4
});
$[4] = ariaLabel;
$[5] = t1;
$[6] = t2;
$[7] = t3;
$[8] = t4;
$[9] = t5;
} else {
t5 = $[9];
}
return t5;
}
CardIcon.displayName = 'Card.Icon';
function CardImage(t0) {
const $ = c(12);
let className;
let rest;
let src;
let t1;
if ($[0] !== t0) {
({
src,
alt: t1,
className,
...rest
} = t0);
$[0] = t0;
$[1] = className;
$[2] = rest;
$[3] = src;
$[4] = t1;
} else {
className = $[1];
rest = $[2];
src = $[3];
t1 = $[4];
}
const alt = t1 === undefined ? "" : t1;
let t2;
if ($[5] !== className) {
t2 = clsx(classes.CardImage, className);
$[5] = className;
$[6] = t2;
} else {
t2 = $[6];
}
let t3;
if ($[7] !== alt || $[8] !== rest || $[9] !== src || $[10] !== t2) {
t3 = /*#__PURE__*/jsx("img", {
...rest,
src: src,
alt: alt,
className: t2,
"data-component": "Card.Image"
});
$[7] = alt;
$[8] = rest;
$[9] = src;
$[10] = t2;
$[11] = t3;
} else {
t3 = $[11];
}
return t3;
}
CardImage.displayName = 'Card.Image';
/**
* Heading shown at the top of a Card.
*
* When the parent Card uses `as="section"`, the heading's `id` is
* automatically wired to the section's `aria-labelledby`.
*/
const CardHeading = /*#__PURE__*/forwardRef(function CardHeading(t0, ref) {
var _id;
const $ = c(15);
let children;
let className;
let id;
let rest;
let t1;
if ($[0] !== t0) {
({
as: t1,
children,
className,
id,
...rest
} = t0);
$[0] = t0;
$[1] = children;
$[2] = className;
$[3] = id;
$[4] = rest;
$[5] = t1;
} else {
children = $[1];
className = $[2];
id = $[3];
rest = $[4];
t1 = $[5];
}
const Component = t1 === undefined ? "h3" : t1;
const {
titleId
} = useContext(CardContext);
const t2 = (_id = id) !== null && _id !== void 0 ? _id : titleId;
let t3;
if ($[6] !== className) {
t3 = clsx(classes.CardHeading, className);
$[6] = className;
$[7] = t3;
} else {
t3 = $[7];
}
let t4;
if ($[8] !== Component || $[9] !== children || $[10] !== ref || $[11] !== rest || $[12] !== t2 || $[13] !== t3) {
t4 = /*#__PURE__*/jsx(Component, {
...rest,
ref: ref,
id: t2,
className: t3,
"data-component": "Card.Heading",
children: children
});
$[8] = Component;
$[9] = children;
$[10] = ref;
$[11] = rest;
$[12] = t2;
$[13] = t3;
$[14] = t4;
} else {
t4 = $[14];
}
return t4;
});
CardHeading.displayName = 'Card.Heading';
const CardDescription = /*#__PURE__*/forwardRef(function CardDescription(t0, ref) {
const $ = c(11);
let children;
let className;
let rest;
if ($[0] !== t0) {
({
children,
className,
...rest
} = t0);
$[0] = t0;
$[1] = children;
$[2] = className;
$[3] = rest;
} else {
children = $[1];
className = $[2];
rest = $[3];
}
let t1;
if ($[4] !== className) {
t1 = clsx(classes.CardDescription, className);
$[4] = className;
$[5] = t1;
} else {
t1 = $[5];
}
let t2;
if ($[6] !== children || $[7] !== ref || $[8] !== rest || $[9] !== t1) {
t2 = /*#__PURE__*/jsx("p", {
...rest,
ref: ref,
className: t1,
"data-component": "Card.Description",
children: children
});
$[6] = children;
$[7] = ref;
$[8] = rest;
$[9] = t1;
$[10] = t2;
} else {
t2 = $[10];
}
return t2;
});
CardDescription.displayName = 'Card.Description';
/**
* Top-right slot for a single interactive control.
*
* Give the control a label that names the card (e.g. `"More options for
* Project Alpha"`, not just `"More options"`) so users can tell which card
* the action applies to when several cards are visible.
*/
function CardAction(t0) {
const $ = c(2);
const {
children
} = t0;
let t1;
if ($[0] !== children) {
t1 = /*#__PURE__*/jsx("div", {
"data-component": "Card.Action",
children: children
});
$[0] = children;
$[1] = t1;
} else {
t1 = $[1];
}
return t1;
}
CardAction.displayName = 'Card.Action';
const CardMetadata = /*#__PURE__*/forwardRef(function CardMetadata(t0, ref) {
const $ = c(11);
let children;
let className;
let rest;
if ($[0] !== t0) {
({
children,
className,
...rest
} = t0);
$[0] = t0;
$[1] = children;
$[2] = className;
$[3] = rest;
} else {
children = $[1];
className = $[2];
rest = $[3];
}
let t1;
if ($[4] !== className) {
t1 = clsx(classes.CardMetadataItem, className);
$[4] = className;
$[5] = t1;
} else {
t1 = $[5];
}
let t2;
if ($[6] !== children || $[7] !== ref || $[8] !== rest || $[9] !== t1) {
t2 = /*#__PURE__*/jsx("div", {
...rest,
ref: ref,
className: t1,
"data-component": "Card.Metadata",
children: children
});
$[6] = children;
$[7] = ref;
$[8] = rest;
$[9] = t1;
$[10] = t2;
} else {
t2 = $[10];
}
return t2;
});
CardMetadata.displayName = 'Card.Metadata';
export { CardAction, CardDescription, CardHeading, CardIcon, CardImage, CardImpl, CardMetadata };