UNPKG

@clive-cudi/geist-ui

Version:

Modern and minimalist React UI library.

125 lines (119 loc) 3.98 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; var _excluded = ["h1", "h2", "h3", "h4", "h5", "h6", "p", "b", "small", "i", "span", "del", "em", "blockquote", "children", "className", "type"]; import React, { useMemo } from 'react'; import TextChild from './child'; import { withScale } from '../use-scale'; var defaultProps = { h1: false, h2: false, h3: false, h4: false, h5: false, h6: false, p: false, b: false, small: false, i: false, span: false, del: false, em: false, blockquote: false, className: '', type: 'default' }; var getModifierChild = function getModifierChild(tags, children) { if (!tags.length) return children; var nextTag = tags.slice(1, tags.length); return /*#__PURE__*/React.createElement(TextChild, { tag: tags[0] }, getModifierChild(nextTag, children)); }; var TextComponent = function TextComponent(_ref) { var _ref$h = _ref.h1, h1 = _ref$h === void 0 ? defaultProps.h1 : _ref$h, _ref$h2 = _ref.h2, h2 = _ref$h2 === void 0 ? defaultProps.h2 : _ref$h2, _ref$h3 = _ref.h3, h3 = _ref$h3 === void 0 ? defaultProps.h3 : _ref$h3, _ref$h4 = _ref.h4, h4 = _ref$h4 === void 0 ? defaultProps.h4 : _ref$h4, _ref$h5 = _ref.h5, h5 = _ref$h5 === void 0 ? defaultProps.h5 : _ref$h5, _ref$h6 = _ref.h6, h6 = _ref$h6 === void 0 ? defaultProps.h6 : _ref$h6, _ref$p = _ref.p, p = _ref$p === void 0 ? defaultProps.p : _ref$p, _ref$b = _ref.b, b = _ref$b === void 0 ? defaultProps.b : _ref$b, _ref$small = _ref.small, small = _ref$small === void 0 ? defaultProps.small : _ref$small, _ref$i = _ref.i, i = _ref$i === void 0 ? defaultProps.i : _ref$i, _ref$span = _ref.span, span = _ref$span === void 0 ? defaultProps.span : _ref$span, _ref$del = _ref.del, del = _ref$del === void 0 ? defaultProps.del : _ref$del, _ref$em = _ref.em, em = _ref$em === void 0 ? defaultProps.em : _ref$em, _ref$blockquote = _ref.blockquote, blockquote = _ref$blockquote === void 0 ? defaultProps.blockquote : _ref$blockquote, children = _ref.children, _ref$className = _ref.className, className = _ref$className === void 0 ? defaultProps.className : _ref$className, _ref$type = _ref.type, type = _ref$type === void 0 ? defaultProps.type : _ref$type, props = _objectWithoutProperties(_ref, _excluded); var elements = { h1: h1, h2: h2, h3: h3, h4: h4, h5: h5, h6: h6, p: p, blockquote: blockquote }; var inlineElements = { span: span, small: small, b: b, em: em, i: i, del: del }; var names = Object.keys(elements).filter(function (name) { return elements[name]; }); var inlineNames = Object.keys(inlineElements).filter(function (name) { return inlineElements[name]; }); /** * Render element "p" only if no element is found. * If there is only one modifier, just rendered one modifier element * e.g. * <Text /> => <p /> * <Text em /> => <em /> * <Text p em /> => <p><em>children</em></p> * */ var tag = useMemo(function () { if (names[0]) return names[0]; if (inlineNames[0]) return inlineNames[0]; return 'p'; }, [names, inlineNames]); var renderableChildElements = inlineNames.filter(function (name) { return name !== tag; }); var modifers = useMemo(function () { if (!renderableChildElements.length) return children; return getModifierChild(renderableChildElements, children); }, [renderableChildElements, children]); return /*#__PURE__*/React.createElement(TextChild, _extends({ className: className, tag: tag }, props), modifers); }; // TextComponent.defaultProps = defaultProps TextComponent.displayName = 'GeistText'; var Text = withScale(TextComponent); export default Text;