UNPKG

@itwin/itwinui-react

Version:

A react component library for iTwinUI

67 lines (66 loc) 2.17 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true, }); Object.defineProperty(exports, 'MiddleTextTruncation', { enumerable: true, get: function () { return MiddleTextTruncation; }, }); const _interop_require_wildcard = require('@swc/helpers/_/_interop_require_wildcard'); const _react = /*#__PURE__*/ _interop_require_wildcard._(require('react')); const _OverflowContainer = require('./OverflowContainer.js'); const _VisuallyHidden = require('../../core/VisuallyHidden/VisuallyHidden.js'); const _ShadowRoot = require('./ShadowRoot.js'); const ELLIPSIS_CHAR = '…'; const MiddleTextTruncation = _react.forwardRef((props, forwardedRef) => { let { text, endCharsCount, textRenderer, style, ...rest } = props; return _react.createElement( _OverflowContainer.OverflowContainer, { as: 'span', style: { display: 'flex', minWidth: 0, flexGrow: 1, whiteSpace: 'nowrap', ...style, }, itemsCount: text.length, ...rest, ref: forwardedRef, }, _react.createElement( _ShadowRoot.ShadowRoot, null, _react.createElement(_VisuallyHidden.VisuallyHidden, null, text), _react.createElement('slot', { 'aria-hidden': true, style: { pointerEvents: 'none', }, }), ), _react.createElement(MiddleTextTruncationContent, { text: text, endCharsCount: endCharsCount, textRenderer: textRenderer, }), ); }); if ('development' === process.env.NODE_ENV) MiddleTextTruncation.displayName = 'MiddleTextTruncation'; const MiddleTextTruncationContent = (props) => { let { text, endCharsCount = 6, textRenderer } = props; let { visibleCount } = _OverflowContainer.OverflowContainer.useContext(); let truncatedText = _react.useMemo(() => { if (visibleCount < text.length) return `${text.substring( 0, visibleCount - endCharsCount - ELLIPSIS_CHAR.length, )}${ELLIPSIS_CHAR}${text.substring(text.length - endCharsCount)}`; return text; }, [endCharsCount, text, visibleCount]); return textRenderer?.(truncatedText, text) ?? truncatedText; };