UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

206 lines (205 loc) 5.72 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true, }); Object.defineProperty(exports, 'Breadcrumbs', { enumerable: true, get: function () { return Breadcrumbs; }, }); const _interop_require_default = require('@swc/helpers/_/_interop_require_default'); const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard'); const _react = /*#__PURE__*/ _interop_require_wildcard._(require('react')); const _classnames = /*#__PURE__*/ _interop_require_default._( require('classnames'), ); const _index = require('../../utils/index.js'); const _Button = require('../Buttons/Button.js'); const _Anchor = require('../Typography/Anchor.js'); const BreadcrumbsComponent = _react.forwardRef((props, forwardedRef) => { let { children: childrenProp, currentIndex = _react.Children.count(childrenProp) - 1, separator, overflowButton, className, ...rest } = props; let items = _react.useMemo( () => _react.Children.toArray(childrenProp), [childrenProp], ); return _react.createElement( _index.Box, { as: 'nav', className: (0, _classnames.default)('iui-breadcrumbs', className), ref: forwardedRef, 'aria-label': 'Breadcrumb', ...rest, }, _react.createElement( _index.OverflowContainer, { as: 'ol', itemsCount: items.length, className: 'iui-breadcrumbs-list', }, _react.createElement( BreadcrumbContent, { currentIndex: currentIndex, overflowButton: overflowButton, separator: separator, }, items, ), ), ); }); if ('development' === process.env.NODE_ENV) BreadcrumbsComponent.displayName = 'Breadcrumbs'; const BreadcrumbContent = (props) => { let { children: items, currentIndex, overflowButton, separator } = props; let { visibleCount } = _index.OverflowContainer.useContext(); return _react.createElement( _react.Fragment, null, visibleCount > 1 && _react.createElement( _react.Fragment, null, _react.createElement(ListItem, { item: items[0], isActive: 0 === currentIndex, }), _react.createElement(Separator, { separator: separator, }), ), items.length - visibleCount > 0 && _react.createElement( _react.Fragment, null, _react.createElement( _index.Box, { as: 'li', className: 'iui-breadcrumbs-item', }, overflowButton ? overflowButton(visibleCount) : _react.createElement( _index.Box, { as: 'span', className: 'iui-breadcrumbs-content', }, '…', ), ), _react.createElement(Separator, { separator: separator, }), ), items .slice( visibleCount > 1 ? items.length - visibleCount + 1 : items.length - 1, ) .map((_, _index) => { let index = visibleCount > 1 ? 1 + (items.length - visibleCount) + _index : items.length - 1; return _react.createElement( _react.Fragment, { key: index, }, _react.createElement(ListItem, { item: items[index], isActive: currentIndex === index, }), index < items.length - 1 && _react.createElement(Separator, { separator: separator, }), ); }), ); }; const ListItem = ({ item, isActive }) => { let children = item; let logWarning = (0, _index.useWarningLogger)(); if ( children?.type === 'span' || children?.type === 'a' || children?.type === _Button.Button ) { if ('development' === process.env.NODE_ENV) logWarning( 'Directly using Button/a/span as Breadcrumbs children is deprecated, please use `Breadcrumbs.Item` instead.', ); children = _react.createElement(BreadcrumbsItem, children.props); } let getProps = _react.useCallback( (children) => { let defaultAriaCurrent = isActive ? 'location' : void 0; return { 'aria-current': children.props['aria-current'] ?? defaultAriaCurrent, }; }, [isActive], ); return _react.createElement( _index.Box, { as: 'li', className: 'iui-breadcrumbs-item', }, children ? (0, _index.cloneElementWithRef)(children, getProps) : null, ); }; const Separator = ({ separator }) => _react.createElement( _index.Box, { as: 'li', className: 'iui-breadcrumbs-separator', 'aria-hidden': true, }, separator ?? _react.createElement(_index.SvgChevronRight, null), ); const BreadcrumbsItem = _react.forwardRef((props, forwardedRef) => { let { as: asProp, ...rest } = props; let commonProps = { ...rest, className: (0, _classnames.default)( 'iui-breadcrumbs-content', props.className, ), ref: forwardedRef, }; if ( 'span' === String(asProp) || (null == props.href && null == props.onClick && null == asProp) ) return _react.createElement(_index.Box, { as: 'span', ...commonProps, }); return _react.createElement(_Button.Button, { as: 'a' === asProp || (null == asProp && props.href) ? _Anchor.Anchor : asProp, styleType: 'borderless', ...commonProps, }); }); if ('development' === process.env.NODE_ENV) BreadcrumbsItem.displayName = 'Breadcrumbs.Item'; const Breadcrumbs = Object.assign(BreadcrumbsComponent, { Item: BreadcrumbsItem, });