UNPKG

@primer/react

Version:

An implementation of GitHub's Primer Design System using React

65 lines (57 loc) 2.36 kB
'use strict'; var React = require('react'); var getColorFromHex = require('./getColorFromHex.js'); var ThemeProvider = require('../../ThemeProvider.js'); var clsx = require('clsx'); var IssueLabel_module = require('./IssueLabel.module.css.js'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var React__default = /*#__PURE__*/_interopDefault(React); 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); } function IssueLabel({ className, fillColor, variant = 'gray', href, onClick, onFocus, text, as, id, ...rest }) { // Error handling: `href` and `onClick` should not be set simultaneously if (href && onClick) { throw new Error('`href` and `onClick` cannot both be set. Choose either a link (`<a>`) or a button (`<button>`).'); } const { resolvedColorScheme } = ThemeProvider.useTheme(); const mode = resolvedColorScheme !== null && resolvedColorScheme !== undefined && resolvedColorScheme.startsWith('dark') ? 'dark' : 'light'; // TODO: get the bgColor, getting it from theme.colorScheme seems a bit sketchy const bgColors = { light: '#ffffff', dark: '#0d1117' }; // Determine the component type: Prioritize `as`, then fallback to `href` or `onClick` logic let Component = 'span'; // Default to <span> if (as) { Component = as; // use 'as' prop if provided } else if (href) { Component = 'a'; // render as <a> if `href` is provided } else if (onClick) { Component = 'button'; // render as <button> if `onClick` is provided } const anchorProps = href ? { href } : {}; return /*#__PURE__*/React__default.default.createElement(Component, _extends({}, rest, anchorProps, { onClick: onClick, onFocus: onFocus, id: id === null || id === undefined ? undefined : id.toString(), className: clsx.clsx(IssueLabel_module.IssueLabel, className), "data-variant": fillColor ? undefined : variant, style: fillColor ? getColorFromHex.getColorsFromHex(fillColor, resolvedColorScheme, bgColors[mode]) : undefined }), text); } IssueLabel.displayName = "IssueLabel"; exports.IssueLabel = IssueLabel;