UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

641 lines (640 loc) • 17.2 kB
import { useProvidedRefOrCreate } from "../hooks/useProvidedRefOrCreate.js"; import { warning } from "../utils/warning.js"; import { isResponsiveValue } from "../hooks/useResponsiveValue.js"; import { isSlot } from "../utils/is-slot.js"; import { getResponsiveAttributes } from "../internal/utils/getResponsiveAttributes.js"; import Heading from "../Heading/Heading.js"; import Link from "../Link/Link.js"; import { areAllValuesTheSame, haveRegularAndWideSameValue } from "../utils/getBreakpointDeclarations.js"; import PageHeader_module_css_default from "./PageHeader.module.css.js"; import { c } from "react-compiler-runtime"; import { clsx } from "clsx"; import { Fragment, jsx, jsxs } from "react/jsx-runtime"; import React, { useEffect } from "react"; import { ArrowLeftIcon } from "@primer/octicons-react"; //#region src/PageHeader/PageHeader.tsx const hiddenOnRegularAndWide = { narrow: false, regular: true, wide: true }; const hiddenOnNarrow = { narrow: true, regular: false, wide: false }; const Root = /*#__PURE__*/ React.forwardRef((t0, forwardedRef) => { const $ = c(14); const { children, className, as: t1, "aria-label": ariaLabel, role, hasBorder } = t0; const BaseComponent = t1 === void 0 ? "div" : t1; const rootRef = useProvidedRefOrCreate(forwardedRef); const isInteractive = _temp; let t2; let t3; if ($[0] !== children || $[1] !== rootRef) { t2 = function validateInteractiveElementsInTitle() { let hasContextArea = false; let hasLeadingAction = false; if (!rootRef.current || rootRef.current.children.length <= 0) return; const titleArea = Array.from(rootRef.current.children).find(_temp2); if (!titleArea) return; for (const child_0 of React.Children.toArray(children)) { if (/*#__PURE__*/ React.isValidElement(child_0) && (child_0.type === ContextArea || isSlot(child_0, ContextArea))) hasContextArea = true; if (/*#__PURE__*/ React.isValidElement(child_0) && (child_0.type === LeadingAction || isSlot(child_0, LeadingAction))) hasLeadingAction = true; } warning(Array.from(titleArea.childNodes).some((child_1) => child_1 instanceof HTMLElement && isInteractive(child_1) || Array.from(child_1.childNodes).some((child_2) => child_2 instanceof HTMLElement && isInteractive(child_2))) && (hasContextArea || hasLeadingAction), "When PageHeader.ContextArea or PageHeader.LeadingAction is present, we recommended not to include any interactive items in the PageHeader.TitleArea to make sure the focus order is logical."); }; t3 = [children, rootRef]; $[0] = children; $[1] = rootRef; $[2] = t2; $[3] = t3; } else { t2 = $[2]; t3 = $[3]; } useEffect(t2, t3); let t4; if ($[4] !== className) { t4 = clsx(PageHeader_module_css_default.PageHeader, className); $[4] = className; $[5] = t4; } else t4 = $[5]; const t5 = hasBorder ? "true" : void 0; let t6; if ($[6] !== BaseComponent || $[7] !== ariaLabel || $[8] !== children || $[9] !== role || $[10] !== rootRef || $[11] !== t4 || $[12] !== t5) { t6 = /*#__PURE__*/ jsx(BaseComponent, { ref: rootRef, className: t4, "data-component": "PageHeader", "data-has-border": t5, "aria-label": ariaLabel, role, children }); $[6] = BaseComponent; $[7] = ariaLabel; $[8] = children; $[9] = role; $[10] = rootRef; $[11] = t4; $[12] = t5; $[13] = t6; } else t6 = $[13]; return t6; }); const ContextArea = (t0) => { const $ = c(8); const { children, className, hidden: t1 } = t0; const hidden = t1 === void 0 ? hiddenOnRegularAndWide : t1; let t2; if ($[0] !== className) { t2 = clsx(PageHeader_module_css_default.ContextArea, className); $[0] = className; $[1] = t2; } else t2 = $[1]; let t3; if ($[2] !== hidden) { t3 = getHiddenDataAttributes(hidden); $[2] = hidden; $[3] = t3; } else t3 = $[3]; let t4; if ($[4] !== children || $[5] !== t2 || $[6] !== t3) { t4 = /*#__PURE__*/ jsx("div", { className: t2, "data-component": "PageHeader.ContextArea", ...t3, children }); $[4] = children; $[5] = t2; $[6] = t3; $[7] = t4; } else t4 = $[7]; return t4; }; ContextArea.__SLOT__ = Symbol("PageHeader.ContextArea"); const ParentLink = /*#__PURE__*/ React.forwardRef((t0, ref) => { const $ = c(24); let ariaLabel; let children; let className; let href; let rest; let t1; let t2; if ($[0] !== t0) { ({children, className, href, "aria-label": ariaLabel, as: t1, hidden: t2, ...rest} = t0); $[0] = t0; $[1] = ariaLabel; $[2] = children; $[3] = className; $[4] = href; $[5] = rest; $[6] = t1; $[7] = t2; } else { ariaLabel = $[1]; children = $[2]; className = $[3]; href = $[4]; rest = $[5]; t1 = $[6]; t2 = $[7]; } const as = t1 === void 0 ? "a" : t1; const hidden = t2 === void 0 ? hiddenOnRegularAndWide : t2; let t3; if ($[8] !== className) { t3 = clsx(PageHeader_module_css_default.ParentLink, className); $[8] = className; $[9] = t3; } else t3 = $[9]; let t4; if ($[10] !== hidden) { t4 = getHiddenDataAttributes(hidden); $[10] = hidden; $[11] = t4; } else t4 = $[11]; let t5; if ($[12] === Symbol.for("react.memo_cache_sentinel")) { t5 = /*#__PURE__*/ jsx(ArrowLeftIcon, {}); $[12] = t5; } else t5 = $[12]; let t6; if ($[13] !== children) { t6 = /*#__PURE__*/ jsx("div", { children }); $[13] = children; $[14] = t6; } else t6 = $[14]; let t7; if ($[15] !== ariaLabel || $[16] !== as || $[17] !== href || $[18] !== ref || $[19] !== rest || $[20] !== t3 || $[21] !== t4 || $[22] !== t6) { t7 = /*#__PURE__*/ jsx(Fragment, { children: /*#__PURE__*/ jsxs(Link, { ref, as, "aria-label": ariaLabel, muted: true, className: t3, "data-component": "PageHeader.ParentLink", ...t4, href, ...rest, children: [t5, t6] }) }); $[15] = ariaLabel; $[16] = as; $[17] = href; $[18] = ref; $[19] = rest; $[20] = t3; $[21] = t4; $[22] = t6; $[23] = t7; } else t7 = $[23]; return t7; }); ParentLink.displayName = "ParentLink"; const ContextBar = (t0) => { const $ = c(8); const { children, className, hidden: t1 } = t0; const hidden = t1 === void 0 ? hiddenOnRegularAndWide : t1; let t2; if ($[0] !== className) { t2 = clsx(PageHeader_module_css_default.ContextBar, className); $[0] = className; $[1] = t2; } else t2 = $[1]; let t3; if ($[2] !== hidden) { t3 = getHiddenDataAttributes(hidden); $[2] = hidden; $[3] = t3; } else t3 = $[3]; let t4; if ($[4] !== children || $[5] !== t2 || $[6] !== t3) { t4 = /*#__PURE__*/ jsx("div", { className: t2, "data-component": "PageHeader.ContextBar", ...t3, children }); $[4] = children; $[5] = t2; $[6] = t3; $[7] = t4; } else t4 = $[7]; return t4; }; const ContextAreaActions = (t0) => { const $ = c(8); const { children, className, hidden: t1 } = t0; const hidden = t1 === void 0 ? hiddenOnRegularAndWide : t1; let t2; if ($[0] !== className) { t2 = clsx(PageHeader_module_css_default.ContextAreaActions, className); $[0] = className; $[1] = t2; } else t2 = $[1]; let t3; if ($[2] !== hidden) { t3 = getHiddenDataAttributes(hidden); $[2] = hidden; $[3] = t3; } else t3 = $[3]; let t4; if ($[4] !== children || $[5] !== t2 || $[6] !== t3) { t4 = /*#__PURE__*/ jsx("div", { className: t2, "data-component": "PageHeader.ContextAreaActions", ...t3, children }); $[4] = children; $[5] = t2; $[6] = t3; $[7] = t4; } else t4 = $[7]; return t4; }; const TitleArea = /*#__PURE__*/ React.forwardRef((t0, forwardedRef) => { const $ = c(12); const { children, className, hidden: t1, variant: t2 } = t0; const hidden = t1 === void 0 ? false : t1; const variant = t2 === void 0 ? "medium" : t2; const titleAreaRef = useProvidedRefOrCreate(forwardedRef); let t3; if ($[0] !== className) { t3 = clsx(PageHeader_module_css_default.TitleArea, className); $[0] = className; $[1] = t3; } else t3 = $[1]; let t4; if ($[2] !== variant) { t4 = getResponsiveAttributes("size-variant", variant); $[2] = variant; $[3] = t4; } else t4 = $[3]; let t5; if ($[4] !== hidden) { t5 = getHiddenDataAttributes(hidden); $[4] = hidden; $[5] = t5; } else t5 = $[5]; let t6; if ($[6] !== children || $[7] !== t3 || $[8] !== t4 || $[9] !== t5 || $[10] !== titleAreaRef) { t6 = /*#__PURE__*/ jsx("div", { className: t3, ref: titleAreaRef, "data-component": "TitleArea", ...t4, ...t5, children }); $[6] = children; $[7] = t3; $[8] = t4; $[9] = t5; $[10] = titleAreaRef; $[11] = t6; } else t6 = $[11]; return t6; }); TitleArea.displayName = "TitleArea"; const LeadingAction = (t0) => { const $ = c(8); const { children, className, hidden: t1 } = t0; const hidden = t1 === void 0 ? hiddenOnNarrow : t1; let t2; if ($[0] !== className) { t2 = clsx(PageHeader_module_css_default.LeadingAction, className); $[0] = className; $[1] = t2; } else t2 = $[1]; let t3; if ($[2] !== hidden) { t3 = getHiddenDataAttributes(hidden); $[2] = hidden; $[3] = t3; } else t3 = $[3]; let t4; if ($[4] !== children || $[5] !== t2 || $[6] !== t3) { t4 = /*#__PURE__*/ jsx("div", { className: t2, "data-component": "PH_LeadingAction", ...t3, children }); $[4] = children; $[5] = t2; $[6] = t3; $[7] = t4; } else t4 = $[7]; return t4; }; LeadingAction.__SLOT__ = Symbol("PageHeader.LeadingAction"); const Breadcrumbs = (t0) => { const $ = c(8); const { children, className, hidden: t1 } = t0; const hidden = t1 === void 0 ? false : t1; let t2; if ($[0] !== className) { t2 = clsx(PageHeader_module_css_default.Breadcrumbs, className); $[0] = className; $[1] = t2; } else t2 = $[1]; let t3; if ($[2] !== hidden) { t3 = getHiddenDataAttributes(hidden); $[2] = hidden; $[3] = t3; } else t3 = $[3]; let t4; if ($[4] !== children || $[5] !== t2 || $[6] !== t3) { t4 = /*#__PURE__*/ jsx("div", { className: t2, "data-component": "PH_Breadcrumbs", ...t3, children }); $[4] = children; $[5] = t2; $[6] = t3; $[7] = t4; } else t4 = $[7]; return t4; }; const LeadingVisual = (t0) => { const $ = c(8); const { children, className, hidden: t1 } = t0; const hidden = t1 === void 0 ? false : t1; let t2; if ($[0] !== className) { t2 = clsx(PageHeader_module_css_default.LeadingVisual, className); $[0] = className; $[1] = t2; } else t2 = $[1]; let t3; if ($[2] !== hidden) { t3 = getHiddenDataAttributes(hidden); $[2] = hidden; $[3] = t3; } else t3 = $[3]; let t4; if ($[4] !== children || $[5] !== t2 || $[6] !== t3) { t4 = /*#__PURE__*/ jsx("div", { className: t2, "data-component": "PH_LeadingVisual", ...t3, children }); $[4] = children; $[5] = t2; $[6] = t3; $[7] = t4; } else t4 = $[7]; return t4; }; const Title = (t0) => { const $ = c(10); const { children, className, hidden: t1, as: t2 } = t0; const hidden = t1 === void 0 ? false : t1; const as = t2 === void 0 ? "h2" : t2; let t3; if ($[0] !== className) { t3 = clsx(PageHeader_module_css_default.Title, className); $[0] = className; $[1] = t3; } else t3 = $[1]; let t4; if ($[2] !== hidden) { t4 = getHiddenDataAttributes(hidden); $[2] = hidden; $[3] = t4; } else t4 = $[3]; let t5; if ($[4] !== as || $[5] !== children || $[6] !== hidden || $[7] !== t3 || $[8] !== t4) { t5 = /*#__PURE__*/ jsx(Heading, { className: t3, "data-component": "PH_Title", "data-hidden": hidden, as, ...t4, children }); $[4] = as; $[5] = children; $[6] = hidden; $[7] = t3; $[8] = t4; $[9] = t5; } else t5 = $[9]; return t5; }; const TrailingVisual = (t0) => { const $ = c(8); const { children, className, hidden: t1 } = t0; const hidden = t1 === void 0 ? false : t1; let t2; if ($[0] !== className) { t2 = clsx(PageHeader_module_css_default.TrailingVisual, className); $[0] = className; $[1] = t2; } else t2 = $[1]; let t3; if ($[2] !== hidden) { t3 = getHiddenDataAttributes(hidden); $[2] = hidden; $[3] = t3; } else t3 = $[3]; let t4; if ($[4] !== children || $[5] !== t2 || $[6] !== t3) { t4 = /*#__PURE__*/ jsx("div", { className: t2, "data-component": "PH_TrailingVisual", ...t3, children }); $[4] = children; $[5] = t2; $[6] = t3; $[7] = t4; } else t4 = $[7]; return t4; }; const TrailingAction = (t0) => { const $ = c(8); const { children, className, hidden: t1 } = t0; const hidden = t1 === void 0 ? hiddenOnNarrow : t1; let t2; if ($[0] !== className) { t2 = clsx(PageHeader_module_css_default.TrailingAction, className); $[0] = className; $[1] = t2; } else t2 = $[1]; let t3; if ($[2] !== hidden) { t3 = getHiddenDataAttributes(hidden); $[2] = hidden; $[3] = t3; } else t3 = $[3]; let t4; if ($[4] !== children || $[5] !== t2 || $[6] !== t3) { t4 = /*#__PURE__*/ jsx("div", { className: t2, "data-component": "PH_TrailingAction", ...t3, children }); $[4] = children; $[5] = t2; $[6] = t3; $[7] = t4; } else t4 = $[7]; return t4; }; const Actions = (t0) => { const $ = c(8); const { children, className, hidden: t1 } = t0; const hidden = t1 === void 0 ? false : t1; let t2; if ($[0] !== className) { t2 = clsx(PageHeader_module_css_default.Actions, className); $[0] = className; $[1] = t2; } else t2 = $[1]; let t3; if ($[2] !== hidden) { t3 = getHiddenDataAttributes(hidden); $[2] = hidden; $[3] = t3; } else t3 = $[3]; let t4; if ($[4] !== children || $[5] !== t2 || $[6] !== t3) { t4 = /*#__PURE__*/ jsx("div", { className: t2, "data-component": "PH_Actions", ...t3, children }); $[4] = children; $[5] = t2; $[6] = t3; $[7] = t4; } else t4 = $[7]; return t4; }; const Description = (t0) => { const $ = c(8); const { children, className, hidden: t1 } = t0; const hidden = t1 === void 0 ? false : t1; let t2; if ($[0] !== className) { t2 = clsx(PageHeader_module_css_default.Description, className); $[0] = className; $[1] = t2; } else t2 = $[1]; let t3; if ($[2] !== hidden) { t3 = getHiddenDataAttributes(hidden); $[2] = hidden; $[3] = t3; } else t3 = $[3]; let t4; if ($[4] !== children || $[5] !== t2 || $[6] !== t3) { t4 = /*#__PURE__*/ jsx("div", { className: t2, "data-component": "PageHeader.Description", ...t3, children }); $[4] = children; $[5] = t2; $[6] = t3; $[7] = t4; } else t4 = $[7]; return t4; }; const Navigation = (t0) => { const $ = c(11); const { children, className, hidden: t1, as: t2, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy } = t0; const hidden = t1 === void 0 ? false : t1; const BaseComponent = t2 === void 0 ? "div" : t2; warning(BaseComponent === "nav" && !ariaLabel && !ariaLabelledBy, "Use `aria-label` or `aria-labelledby` prop to provide an accessible label to the `nav` landmark for assistive technology"); const t3 = BaseComponent === "nav" ? ariaLabel : void 0; const t4 = BaseComponent === "nav" ? ariaLabelledBy : void 0; let t5; if ($[0] !== className) { t5 = clsx(PageHeader_module_css_default.Navigation, className); $[0] = className; $[1] = t5; } else t5 = $[1]; let t6; if ($[2] !== hidden) { t6 = getHiddenDataAttributes(hidden); $[2] = hidden; $[3] = t6; } else t6 = $[3]; let t7; if ($[4] !== BaseComponent || $[5] !== children || $[6] !== t3 || $[7] !== t4 || $[8] !== t5 || $[9] !== t6) { t7 = /*#__PURE__*/ jsx(BaseComponent, { "aria-label": t3, "aria-labelledby": t4, className: t5, "data-component": "PH_Navigation", ...t6, children }); $[4] = BaseComponent; $[5] = children; $[6] = t3; $[7] = t4; $[8] = t5; $[9] = t6; $[10] = t7; } else t7 = $[10]; return t7; }; function getHiddenDataAttributes(isHidden) { if (isResponsiveValue(isHidden)) { const responsiveValue = isHidden; const narrowMediaQuery = "narrow" in responsiveValue ? { "data-hidden-narrow": responsiveValue.narrow || void 0 } : {}; const regularMediaQuery = "regular" in responsiveValue ? { "data-hidden-regular": responsiveValue.regular || void 0 } : {}; const wideMediaQuery = "wide" in responsiveValue ? { "data-hidden-wide": responsiveValue.wide || void 0 } : {}; if (areAllValuesTheSame(responsiveValue)) return { "data-hidden-all": responsiveValue.narrow || void 0 }; else if (haveRegularAndWideSameValue(responsiveValue)) return { ...narrowMediaQuery, ...regularMediaQuery }; else return { ...narrowMediaQuery, ...regularMediaQuery, ...wideMediaQuery }; } else return { "data-hidden-all": isHidden || void 0 }; } const PageHeader = Object.assign(Root, { ContextArea, ParentLink, ContextBar, TitleArea, ContextAreaActions, LeadingAction, Breadcrumbs, LeadingVisual, Title, TrailingVisual, TrailingAction, Actions, Description, Navigation }); PageHeader.displayName = "PageHeader"; function _temp(element) { return ["a", "button"].some((selector) => element.matches(selector)) || element.hasAttribute("role") && element.getAttribute("role") === "button" || element.hasAttribute("link") && element.getAttribute("role") === "link" || element.hasAttribute("tabindex"); } function _temp2(child) { return child instanceof HTMLElement && child.getAttribute("data-component") === "TitleArea"; } //#endregion export { PageHeader };