@primer/react
Version:
An implementation of GitHub's Primer Design System using React
135 lines (134 loc) • 4.02 kB
JavaScript
import { UnderlineItem } from "../internal/components/UnderlineTabbedInterface.js";
import { UnderlineNavContext } from "./UnderlineNavContext.js";
import { UnderlineNavItemsRegistry } from "./UnderlineNavItemsRegistry.js";
import UnderlineNavItem_module_css_default from "./UnderlineNavItem.module.css.js";
import { c } from "react-compiler-runtime";
import { jsx } from "react/jsx-runtime";
import { forwardRef, useContext, useRef, useSyncExternalStore } from "react";
//#region src/UnderlineNav/UnderlineNavItem.tsx
const UnderlineNavItem = /*#__PURE__*/ forwardRef((allProps, forwardedRef) => {
var _leadingVisual;
const $ = c(32);
let Icon;
let ariaCurrent;
let children;
let counter;
let leadingVisual;
let onSelect;
let props;
let t0;
let t1;
if ($[0] !== allProps) {
({as: t0, href: t1, children, counter, onSelect, "aria-current": ariaCurrent, icon: Icon, leadingVisual, ...props} = allProps);
$[0] = allProps;
$[1] = Icon;
$[2] = ariaCurrent;
$[3] = children;
$[4] = counter;
$[5] = leadingVisual;
$[6] = onSelect;
$[7] = props;
$[8] = t0;
$[9] = t1;
} else {
Icon = $[1];
ariaCurrent = $[2];
children = $[3];
counter = $[4];
leadingVisual = $[5];
onSelect = $[6];
props = $[7];
t0 = $[8];
t1 = $[9];
}
const Component = t0 === void 0 ? "a" : t0;
const href = t1 === void 0 ? "#" : t1;
const ref = useRef(null);
const { loadingCounters } = useContext(UnderlineNavContext);
let t2;
if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
t2 = (onChange) => {
const observer = new IntersectionObserver(() => onChange(), { threshold: 1 });
if (ref.current) observer.observe(ref.current);
return () => observer.disconnect();
};
$[10] = t2;
} else t2 = $[10];
let t3;
if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
t3 = () => ref.current ? ref.current.offsetTop > 0 : false;
$[11] = t3;
} else t3 = $[11];
const isOverflowing = useSyncExternalStore(t2, t3, _temp);
UnderlineNavItemsRegistry.useRegisterDescendant(isOverflowing ? allProps : null);
let t4;
if ($[12] !== onSelect) {
t4 = (event) => {
if ((event.key === " " || event.key === "Enter") && !event.defaultPrevented && typeof onSelect === "function") onSelect(event);
};
$[12] = onSelect;
$[13] = t4;
} else t4 = $[13];
const keyDownHandler = t4;
let t5;
if ($[14] !== onSelect) {
t5 = (event_0) => {
if (!event_0.defaultPrevented && typeof onSelect === "function") onSelect(event_0);
};
$[14] = onSelect;
$[15] = t5;
} else t5 = $[15];
const clickHandler = t5;
const t6 = isOverflowing ? true : allProps["aria-hidden"];
const t7 = (_leadingVisual = leadingVisual) !== null && _leadingVisual !== void 0 ? _leadingVisual : Icon;
const t8 = isOverflowing ? -1 : allProps.tabIndex;
let t9;
if ($[16] !== Component || $[17] !== ariaCurrent || $[18] !== children || $[19] !== clickHandler || $[20] !== counter || $[21] !== forwardedRef || $[22] !== href || $[23] !== keyDownHandler || $[24] !== loadingCounters || $[25] !== props || $[26] !== t7 || $[27] !== t8) {
t9 = /*#__PURE__*/ jsx(UnderlineItem, {
ref: forwardedRef,
as: Component,
href,
"aria-current": ariaCurrent,
onKeyDown: keyDownHandler,
onClick: clickHandler,
counter,
icon: t7,
loadingCounters,
...props,
tabIndex: t8,
children
});
$[16] = Component;
$[17] = ariaCurrent;
$[18] = children;
$[19] = clickHandler;
$[20] = counter;
$[21] = forwardedRef;
$[22] = href;
$[23] = keyDownHandler;
$[24] = loadingCounters;
$[25] = props;
$[26] = t7;
$[27] = t8;
$[28] = t9;
} else t9 = $[28];
let t10;
if ($[29] !== t6 || $[30] !== t9) {
t10 = /*#__PURE__*/ jsx("li", {
className: UnderlineNavItem_module_css_default.UnderlineNavItem,
ref,
"aria-hidden": t6,
children: t9
});
$[29] = t6;
$[30] = t9;
$[31] = t10;
} else t10 = $[31];
return t10;
});
UnderlineNavItem.displayName = "UnderlineNavItem";
function _temp() {
return false;
}
//#endregion
export { UnderlineNavItem };