UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

86 lines (85 loc) 4.08 kB
import { _ as _define_property } from "@swc/helpers/_/_define_property"; import { _ as _object_spread } from "@swc/helpers/_/_object_spread"; import { _ as _object_spread_props } from "@swc/helpers/_/_object_spread_props"; import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array"; import React, { useState } from "react"; import { Close } from "@nutui/icons-react"; import classNames from "classnames"; import { ComponentDefaults } from "../../utils/typings"; var defaultProps = _object_spread_props(_object_spread({}, ComponentDefaults), { type: 'default', background: '', color: '', plain: false, round: false, mark: false, closeable: false, closeIcon: null, onClose: function(e) {}, onClick: function(e) {} }); export var Tag = function(props) { var _$_object_spread = _object_spread({}, defaultProps, props), className = _$_object_spread.className, style = _$_object_spread.style, background = _$_object_spread.background, plain = _$_object_spread.plain, type = _$_object_spread.type, round = _$_object_spread.round, children = _$_object_spread.children, mark = _$_object_spread.mark, closeable = _$_object_spread.closeable, closeIcon = _$_object_spread.closeIcon, color = _$_object_spread.color, onClick = _$_object_spread.onClick, onClose = _$_object_spread.onClose; var _useState = _sliced_to_array(useState(true), 2), visible = _useState[0], setVisible = _useState[1]; var classPrefix = 'nut-tag'; var _obj; var classes = classNames((_obj = {}, _define_property(_obj, classPrefix, true), _define_property(_obj, "".concat(classPrefix, "-").concat(type), type), _define_property(_obj, "".concat(classPrefix, "-plain"), plain), _define_property(_obj, "".concat(classPrefix, "-round"), round), _define_property(_obj, "".concat(classPrefix, "-mark"), mark), _define_property(_obj, "".concat(classPrefix, "-close"), closeable), _define_property(_obj, "".concat(className), className), _obj)); var handleClick = function(e) { onClick && onClick(e); }; // 综合考虑 color、background、plain 组合使用时的效果 var getStyle = function() { var style = {}; // 标签背景与边框颜色 if (plain) { style.borderColor = background; } else if (background) { style.backgroundColor = background; } return style; }; var getTextStyle = function() { var style = {}; // 标签内字体颜色 if (color) { style.color = color; } else if (background && plain) { style.color = background; } return style; }; var textClasses = classNames("".concat(classPrefix, "-text"), _define_property({}, "".concat(classPrefix, "-text-plain"), plain)); return /*#__PURE__*/ React.createElement(React.Fragment, null, closeable ? visible && /*#__PURE__*/ React.createElement("div", { className: classes, style: _object_spread({}, style, getStyle()), onClick: function(e) { return handleClick(e); } }, children && /*#__PURE__*/ React.createElement("span", { className: textClasses, style: getTextStyle() }, children), /*#__PURE__*/ React.isValidElement(closeIcon) ? /*#__PURE__*/ React.createElement("i", { className: "".concat(classPrefix, "-custom-icon"), onClick: function(e) { setVisible(false); onClose && onClose(e); } }, closeIcon) : /*#__PURE__*/ React.createElement(Close, { width: 8, height: 8, onClick: function(e) { setVisible(false); onClose && onClose(e); } })) : /*#__PURE__*/ React.createElement("div", { className: classes, style: _object_spread({}, style, getStyle()), onClick: function(e) { return handleClick(e); } }, children && /*#__PURE__*/ React.createElement("span", { className: textClasses, style: getTextStyle() }, children))); }; Tag.displayName = 'NutTag';