UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

135 lines (134 loc) 4.02 kB
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 };