@fruits-chain/react-native-xiaoshu
Version:
🌈 React Native UI library
153 lines (122 loc) • 5.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _color = _interopRequireDefault(require("color"));
var _isNil = _interopRequireDefault(require("lodash/isNil"));
var _react = _interopRequireWildcard(require("react"));
var _reactNative = require("react-native");
var _cross = _interopRequireDefault(require("../icon/cross"));
var _theme = _interopRequireDefault(require("../theme"));
var _style = require("./style");
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Tag 标签
*/
const Tag = _ref => {
let {
children,
style,
innerStyle,
closable = false,
onClose,
size = 'm',
type = 'primary',
visible = true,
closeIcon,
icon,
color,
textColor
} = _ref;
const TOKENS = _theme.default.useThemeTokens();
const CV = _theme.default.createVar(TOKENS, _style.varCreator);
const STYLES = _theme.default.createStyle(CV, _style.styleCreator);
const mainColor = !(0, _isNil.default)(color) ? color : CV.tag_primary_color;
const {
innerTypeStyle,
textTypeStyle
} = (0, _react.useMemo)(() => {
const tempInnerStyle = {};
const tempTextStyle = {};
switch (type) {
case 'primary':
{
tempInnerStyle.backgroundColor = mainColor;
tempInnerStyle.borderColor = mainColor;
tempTextStyle.color = CV.tag_text_color;
break;
}
case 'ghost':
{
tempInnerStyle.backgroundColor = CV.tag_ghost_background_color;
tempInnerStyle.borderColor = mainColor;
tempInnerStyle.borderWidth = _reactNative.StyleSheet.hairlineWidth;
tempTextStyle.color = mainColor;
break;
}
case 'hazy':
{
const hazyColor = (0, _color.default)(mainColor).lightness(CV.tag_hazy_lightness).hex();
tempInnerStyle.backgroundColor = hazyColor;
tempInnerStyle.borderColor = hazyColor;
tempTextStyle.color = mainColor;
break;
}
default:
break;
}
return {
innerTypeStyle: tempInnerStyle,
textTypeStyle: tempTextStyle
};
}, [type, mainColor, CV.tag_text_color, CV.tag_ghost_background_color, CV.tag_hazy_lightness]);
const {
innerSizeStyle,
textSizeStyle
} = (0, _react.useMemo)(() => {
const tempInnerStyle = STYLES[`tag_inner_${size}`];
const tempTextStyle = STYLES[`tag_text_${size}`];
return {
innerSizeStyle: tempInnerStyle,
textSizeStyle: tempTextStyle
};
}, [STYLES, size]);
const textStyle = _reactNative.StyleSheet.flatten([
/** 类型样式 */
textTypeStyle, textSizeStyle,
/** 外部样式 */
!(0, _isNil.default)(textColor) && {
color: textColor
}]); // 关闭的图标
const renderChildren = () => {
const childJSX = /*#__PURE__*/_react.default.createElement(_reactNative.Text, {
style: textStyle
}, children);
return childJSX;
}; // 关闭的图标
const renderCloseIcon = () => {
if (closable) {
return closeIcon ? /*#__PURE__*/_react.default.createElement(_reactNative.TouchableOpacity, {
onPress: onClose
}, closeIcon) : /*#__PURE__*/_react.default.createElement(_cross.default, {
onPress: onClose,
size: CV[`tag_${size}_close_icon`],
color: textStyle.color
});
}
return null;
};
return visible ? /*#__PURE__*/_react.default.createElement(_reactNative.View, {
style: [STYLES.tag, style]
}, /*#__PURE__*/_react.default.createElement(_reactNative.View, {
style: [
/** 类型样式 */
STYLES.tag_inner, innerTypeStyle, innerSizeStyle, innerStyle]
}, icon, renderChildren(), renderCloseIcon())) : null;
};
var _default = /*#__PURE__*/(0, _react.memo)(Tag);
exports.default = _default;
//# sourceMappingURL=index.js.map