@geezee/react-ui
Version:
Modern and minimalist React UI library.
58 lines (53 loc) • 2.9 kB
JavaScript
import _JSXStyle from "styled-jsx/style";
import React, { useMemo } from 'react';
import useTheme from '../styles/use-theme';
import BreadcrumbsSeparator from './breadcrumbs-separator';
import { addColorAlpha } from '../utils/color';
var defaultProps = {
size: 'medium',
separator: '/',
className: ''
};
var getSize = function getSize(size) {
var sizes = {
mini: '.75rem',
small: '.875rem',
medium: '1rem',
large: '1.125rem'
};
return sizes[size];
};
var Breadcrumbs = function Breadcrumbs(_ref) {
var size = _ref.size,
separator = _ref.separator,
children = _ref.children,
className = _ref.className;
var theme = useTheme();
var fontSize = useMemo(function () {
return getSize(size);
}, [size]);
var hoverColor = useMemo(function () {
return addColorAlpha(theme.palette.link, 0.85);
}, [theme.palette.link]);
var childrenArray = React.Children.toArray(children);
var withSeparatorChildren = childrenArray.map(function (item, index) {
if (!React.isValidElement(item)) return item;
var last = childrenArray[index - 1];
var lastIsSeparator = React.isValidElement(last) && last.type === BreadcrumbsSeparator;
var currentIsSeparator = item.type === BreadcrumbsSeparator;
if (!lastIsSeparator && !currentIsSeparator && index > 0) {
return /*#__PURE__*/React.createElement(React.Fragment, {
key: index
}, /*#__PURE__*/React.createElement(BreadcrumbsSeparator, null, separator), item);
}
return item;
});
return /*#__PURE__*/React.createElement("nav", {
className: _JSXStyle.dynamic([["3696119257", [theme.palette.accents_4, fontSize, hoverColor, theme.palette.accents_6]]]) + " " + (className || "")
}, withSeparatorChildren, /*#__PURE__*/React.createElement(_JSXStyle, {
id: "3696119257",
dynamic: [theme.palette.accents_4, fontSize, hoverColor, theme.palette.accents_6]
}, "nav.__jsx-style-dynamic-selector{margin:0;padding:0;line-height:inherit;color:".concat(theme.palette.accents_4, ";font-size:").concat(fontSize, ";box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}nav.__jsx-style-dynamic-selector .link:hover{color:").concat(hoverColor, ";}nav.__jsx-style-dynamic-selector>span:last-of-type{color:").concat(theme.palette.accents_6, ";}nav.__jsx-style-dynamic-selector>.separator:last-child{display:none;}nav.__jsx-style-dynamic-selector svg{width:1em;height:1em;margin:0 4px;}nav.__jsx-style-dynamic-selector .breadcrums-item{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}")));
};
Breadcrumbs.defaultProps = defaultProps;
export default React.memo(Breadcrumbs);