@grafana/ui
Version:
Grafana Components Library
106 lines (98 loc) • 3.98 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var jsxRuntime = require('react/jsx-runtime');
var css = require('@emotion/css');
var React = require('react');
var Skeleton = require('react-loading-skeleton');
var tinycolor = require('tinycolor2');
var ThemeContext = require('../../themes/ThemeContext.cjs');
var skeleton = require('../../utils/skeleton.cjs');
var Icon = require('../Icon/Icon.cjs');
var Tooltip = require('../Tooltip/Tooltip.cjs');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
function _interopNamespaceCompat(e) {
if (e && typeof e === 'object' && 'default' in e) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n.default = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/_interopNamespaceCompat(React);
var Skeleton__default = /*#__PURE__*/_interopDefaultCompat(Skeleton);
var tinycolor__default = /*#__PURE__*/_interopDefaultCompat(tinycolor);
;
const BadgeComponent = React__namespace.memo(({ icon, color, text, tooltip, className, ...otherProps }) => {
const styles = ThemeContext.useStyles2(getStyles, color);
const badge = /* @__PURE__ */ jsxRuntime.jsxs("div", { className: css.cx(styles.wrapper, className), ...otherProps, children: [
icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: styles.iconWrap, children: /* @__PURE__ */ jsxRuntime.jsx(Icon.Icon, { name: icon, size: "sm" }) }),
text
] });
return tooltip ? /* @__PURE__ */ jsxRuntime.jsx(Tooltip.Tooltip, { content: tooltip, placement: "auto", children: badge }) : badge;
});
BadgeComponent.displayName = "Badge";
const BadgeSkeleton = ({ rootProps }) => {
const styles = ThemeContext.useStyles2(getSkeletonStyles);
return /* @__PURE__ */ jsxRuntime.jsx(Skeleton__default.default, { width: 60, height: 22, containerClassName: styles.container, ...rootProps });
};
const Badge = skeleton.attachSkeleton(BadgeComponent, BadgeSkeleton);
const getSkeletonStyles = () => ({
container: css.css({
lineHeight: 1
})
});
const getStyles = (theme, color) => {
let sourceColor = theme.visualization.getColorByName(color);
let borderColor = "";
let bgColor = "";
let textColor = "";
if (theme.isDark) {
bgColor = tinycolor__default.default(sourceColor).setAlpha(0.15).toString();
borderColor = tinycolor__default.default(sourceColor).setAlpha(0.25).toString();
textColor = tinycolor__default.default(sourceColor).lighten(15).toString();
} else {
bgColor = tinycolor__default.default(sourceColor).setAlpha(0.15).toString();
borderColor = tinycolor__default.default(sourceColor).setAlpha(0.25).toString();
textColor = tinycolor__default.default(sourceColor).darken(25).toString();
}
if (color === "brand") {
bgColor = theme.colors.gradients.brandHorizontal;
borderColor = "transparent";
textColor = theme.colors.primary.contrastText;
}
return {
wrapper: css.css({
display: "inline-flex",
padding: "1px 4px",
borderRadius: theme.shape.radius.sm,
background: bgColor,
border: `1px solid ${borderColor}`,
color: textColor,
fontWeight: theme.typography.fontWeightRegular,
gap: theme.spacing(0.5),
fontSize: theme.typography.bodySmall.fontSize,
lineHeight: theme.typography.bodySmall.lineHeight,
alignItems: "flex-start",
"&:focus-visible": {
outline: `2px solid ${theme.colors.accent.main}`,
outlineOffset: "-2px"
}
}),
iconWrap: css.css({
display: "inline-flex",
alignItems: "center",
height: "1lh"
})
};
};
exports.Badge = Badge;
//# sourceMappingURL=Badge.cjs.map