UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

127 lines (121 loc) 3.87 kB
import React from 'react'; import Link from '../Link/Link.js'; import '@styled-system/css'; import merge from 'deepmerge'; import { Item } from './Item.js'; import Box from '../Box/Box.js'; import { defaultSxProp } from '../utils/defaultSxProp.js'; import '../FeatureFlags/FeatureFlags.js'; import { useFeatureFlag } from '../FeatureFlags/useFeatureFlag.js'; import '../FeatureFlags/DefaultFeatureFlags.js'; import { actionListCssModulesFlag } from './featureflag.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); } // adopted from React.AnchorHTMLAttributes // LinkItem does not support selected, loading, variants, etc. const LinkItem = /*#__PURE__*/React.forwardRef(({ sx = defaultSxProp, active, inactiveText, variant, as: Component, className, ...props }, forwardedRef) => { const styles = { // occupy full size of Item paddingX: 2, paddingY: '6px', // custom value off the scale display: 'flex', flexGrow: 1, // full width borderRadius: 2, // inherit Item styles color: 'inherit', '&:hover': { color: 'inherit', textDecoration: 'none' } }; const enabled = useFeatureFlag(actionListCssModulesFlag); if (enabled) { if (sx !== defaultSxProp) { return /*#__PURE__*/React.createElement(Item, { className: className, active: active, inactiveText: inactiveText, "data-inactive": inactiveText ? true : undefined, variant: variant, _PrivateItemWrapper: ({ children, onClick, ...rest }) => { const clickHandler = event => { onClick && onClick(event); props.onClick && props.onClick(event); }; return inactiveText ? /*#__PURE__*/React.createElement("span", rest, children) : /*#__PURE__*/React.createElement(Link, _extends({ as: Component }, rest, props, { onClick: clickHandler, ref: forwardedRef }), children); } }, props.children); } return /*#__PURE__*/React.createElement(Item, { className: className, active: active, inactiveText: inactiveText, "data-inactive": inactiveText ? true : undefined, variant: variant, _PrivateItemWrapper: ({ children, onClick, ...rest }) => { const clickHandler = event => { onClick && onClick(event); props.onClick && props.onClick(event); }; return inactiveText ? /*#__PURE__*/React.createElement("span", rest, children) : /*#__PURE__*/React.createElement(Link, _extends({ as: Component }, rest, props, { onClick: clickHandler, ref: forwardedRef }), children); } }, props.children); } return /*#__PURE__*/React.createElement(Item, { className: className, active: active, sx: { paddingY: 0, paddingX: 0 }, inactiveText: inactiveText, "data-inactive": inactiveText ? true : undefined, _PrivateItemWrapper: ({ children, onClick, ...rest }) => { const clickHandler = event => { onClick && onClick(event); props.onClick && props.onClick(event); }; return inactiveText ? /*#__PURE__*/React.createElement(Box, _extends({ sx: merge(styles, sx) }, rest), children) : /*#__PURE__*/React.createElement(Link, _extends({ as: Component, sx: merge(styles, sx) }, rest, props, { onClick: clickHandler, ref: forwardedRef }), children); } }, props.children); }); export { LinkItem };