UNPKG

@neo4j-ndl/react

Version:

React implementation of Neo4j Design System

134 lines (133 loc) 5.73 kB
/** * * Copyright (c) "Neo4j" * Neo4j Sweden AB [http://neo4j.com] * * This file is part of Neo4j. * * Neo4j is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; import { forwardRef } from 'react'; import { classNames } from '../_common/defaultImports'; import { CircleIcon, RhombusIcon, SquareIcon, TriangleIcon } from '../icons'; /** * * * Types * * */ export const LabelColors = [ 'info', 'success', 'warning', 'danger', 'default', 'discovery', ]; export const LabelFill = [ 'filled', 'outlined', 'semi-filled', 'clean', ]; export const Label = forwardRef(function Label(_a, ref) { var { as, color = 'default', children, className, style, fill = 'filled', hasIcon = false, htmlAttributes } = _a, restProps = __rest(_a, ["as", "color", "children", "className", "style", "fill", "hasIcon", "htmlAttributes"]); let baseClasses; let icon; // Clean Label without icon is not allowed if (!hasIcon && fill === 'clean') { console.error('Label without icon is not allowed'); } // All colors map to the light-theme palette except the info const mappedColor = color === 'info' ? 'primary' : color; if (hasIcon) { const isFilled = fill === 'filled'; if (mappedColor === 'default') { const fillColor = isFilled ? 'currentColor' : 'rgb(var(--theme-palette-neutral-bg-status))'; icon = _jsx(SquareIcon, { color: fillColor }); } else if (mappedColor === 'primary') { const fillColor = isFilled ? 'currentColor' : 'rgb(var(--theme-palette-primary-bg-status))'; icon = _jsx(CircleIcon, { color: fillColor }); } else if (mappedColor === 'success') { const fillColor = isFilled ? 'currentColor' : 'rgb(var(--theme-palette-success-bg-status))'; icon = _jsx(CircleIcon, { color: fillColor }); } else if (mappedColor === 'danger') { const fillColor = isFilled ? 'currentColor' : 'rgb(var(--theme-palette-danger-bg-status))'; icon = _jsx(RhombusIcon, { color: fillColor }); } else if (mappedColor === 'warning') { const fillColor = isFilled ? 'currentColor' : 'rgb(var(--theme-palette-warning-bg-status))'; icon = _jsx(TriangleIcon, { color: fillColor }); } else if (mappedColor === 'discovery') { const fillColor = isFilled ? 'currentColor' : 'rgb(var(--theme-palette-discovery-bg-status))'; icon = _jsx(CircleIcon, { color: fillColor }); } } if (mappedColor === 'default') { baseClasses = classNames({ [`n-bg-palette-neutral-bg-strongest n-text-palette-neutral-text-inverse`]: fill === 'filled', [` n-text-palette-neutral-text-weak n-border-palette-neutral-border-strong`]: fill === 'outlined', [`n-bg-palette-neutral-bg-default n-text-palette-neutral-text-weak n-border-palette-neutral-border-strong`]: fill === 'semi-filled', [`n-text-palette-neutral-text-weaker`]: fill === 'clean', }); } else { baseClasses = classNames({ [`n-bg-palette-${mappedColor}-bg-strong n-text-palette-neutral-text-inverse`]: fill === 'filled', [`n-text-palette-${mappedColor}-text n-border-palette-${mappedColor}-border-strong`]: fill === 'outlined', [`n-bg-palette-${mappedColor}-bg-weak n-text-palette-${mappedColor}-text n-border-palette-${mappedColor}-border-weak`]: fill === 'semi-filled', [`n-text-palette-neutral-text-default`]: fill === 'clean', }); } const classes = classNames('ndl-label', baseClasses, className, { 'ndl-filled': fill === 'filled', 'ndl-clean': fill === 'clean', 'ndl-outlined': fill === 'outlined', 'ndl-semi-filled': fill === 'semi-filled', }); const Component = as || 'span'; return (_jsx(Component, Object.assign({ role: "status", className: classes, style: style, ref: ref }, htmlAttributes, restProps, { children: _jsxs("div", { className: "ndl-label-content", children: [icon, _jsx("span", { // To enable native tooltip on hover if the children is a string title: typeof children === 'string' ? children : 'label', className: "ndl-label-text", children: children })] }) }))); }); //# sourceMappingURL=Label.js.map