import { useListItemRegister, useOverflowListItemMeasure, } from '@workday/canvas-kit-react/collection'; import { composeHooks, createElemPropsHook, createSubcomponent, useForkRef, useLocalRef, } from '@workday/canvas-kit-react/common'; import {Text, TextProps} from '@workday/canvas-kit-react/text'; import {OverflowTooltip, OverflowTooltipProps} from '@workday/canvas-kit-react/tooltip'; import {createStencil, handleCsProp, px2rem} from '@workday/canvas-kit-styling'; import {system} from '@workday/canvas-tokens-web'; import {useBreadcrumbsModel} from './hooks/useBreadcrumbsModel'; export interface BreadcrumbsCurrentItemProps extends TextProps { maxWidth?: string | number; tooltipProps?: OverflowTooltipProps; } export const breadcrumbsCurrentItemStencil = createStencil({ vars: { maxWidth: '', }, base: ({maxWidth}) => ({ fontFamily: system.fontFamily.default, fontSize: system.legacy.fontSize.subtext.lg, fontWeight: system.fontWeight.normal, letterSpacing: system.legacy.letterSpacing.subtext.lg, lineHeight: system.legacy.lineHeight.subtext.lg, color: system.color.fg.muted.default, display: 'inline-block', whiteSpace: 'nowrap', textOverflow: 'ellipsis', overflow: 'hidden', maxWidth, }), }); export const useBreadcrumbsItem = composeHooks( createElemPropsHook(useBreadcrumbsModel)((_model: any, ref: any) => { const {localRef} = useLocalRef(useForkRef(ref)); let shouldShowTooltip = false; const refCurrent = localRef.current; if (refCurrent) { const {scrollWidth, clientWidth} = refCurrent as {scrollWidth: number; clientWidth: number}; shouldShowTooltip = scrollWidth > clientWidth; } return { tabIndex: shouldShowTooltip ? 0 : undefined, ref: localRef, }; }), useOverflowListItemMeasure, useListItemRegister ); export const BreadcrumbsCurrentItem = createSubcomponent('li')({ displayName: 'Breadcrumbs.Item', modelHook: useBreadcrumbsModel, elemPropsHook: useBreadcrumbsItem, })( ({children, tooltipProps = {}, maxWidth = '350px', ...elemProps}, Element) => { return ( {children} ); } );