UNPKG

@alicloud/console-components-truncate

Version:

React component for Alibaba Cloud.

127 lines (126 loc) 4.69 kB
import { ReactNode, CSSProperties, MutableRefObject } from 'react'; import type { BalloonProps } from '@alicloud/console-components'; export interface ITruncateProps { /** * 需要被截断的内容<br/> * 如果想要通过字符长度来截断,则children必须为string;<br/> * 如果想要通过宽度来截断,则children可以为任意可渲染元素; */ children: string | ReactNode; /** * 如何判断是否需要截断:<br/> * 'length': 内容字符串长度是否大于`threshold` * 'width': 内容渲染后的宽度是否大于`threshold` * @defaultValue 'length' */ type?: 'length' | 'width'; /** * 截断临界值:<br/> * `type`'length' 时,threshold限制字符串长度,必须传入number类型。<br/> * `type`'width' 时,threshold限制内容渲染后的宽度,可以传入number或`'auto'`。<br/> * 其中`'auto'`表示截断宽度自动设置为容器元素的宽度。尤其适用于flex布局下,截断宽度由剩余宽度决定的场景。 * @defaultValue 30 */ threshold?: number | 'auto'; /** * 在被截断时,是否使用气泡展示完整内容 * @defaultValue true */ showTooltip?: boolean; /** * 气泡对齐方式,可选值参见 Balloon(Tooltip)组件文档 * @defaultValue 'r'(右) */ align?: BalloonProps['align']; /** * 省略符号 */ omission?: ReactNode; /** * tooltip的最大宽度限制,`showTooltip`为true时才有效 */ tooltipMaxWidth?: number; /** * 容器的类名 */ className?: string; /** * 容器的样式 */ style?: CSSProperties; /** * 当tooltip展示时,设置弹层组件style,透传给Popup */ popupStyle?: CSSProperties; /** * 当tooltip展示时,设置弹层组件的className,透传给Popup */ popupClassName?: string; /** * 完全控制tooltip的props。比如指定`popupContainer`。<br/> * `BalloonProps`的类型见Balloon组件文档。 */ patchPopupProps?: (originalProps: BalloonProps) => BalloonProps; /** * 【极少使用】如果你绕过React的更新机制来更新子节点(比如直接用js操作DOM,或者加载图片造成子节点变宽),我们无法及时检查子节点是否需要截断。这种情况下,你需要通过这个prop来获取updater来手动调用。见"non-string"这个Demo。<br/> * 仅当`type`'width' 时有效。 */ updaterRef?: MutableRefObject<(() => void) | null>; /** * 【极少使用】方便父组件知道当前是否发生了截断,`type==='width'`时可用(`type==='length'`时你自己就很容易判断是否会截断)。<br/> * 慎用,避免`截断状态->你扩大父容器->非截断状态->你缩小父容器->截断状态->...`这样的无限循环。 */ isOverflowChange?: (newIsOverflow: boolean) => void; /** * 【已废弃】,请使用`threshold` * @deprecated 此prop用于兼容旧的API。以后请使用`threshold` * @internal */ value?: number | string; /** * 在被截断时,是否使用气泡展示完整内容 * <br /> 【已废弃】,请使用`showTooltip` * @defaultValue 'enable' * @deprecated 此prop用于兼容旧的API。以后请使用`showTooltip` * @internal */ tooltip?: boolean | string; } export interface IMultiLinesProps { /** * 展示的行数 */ lines?: number; /** * 如何渲染省略号 */ ellipsis?: string | ReactNode; /** * 在被截断时,是否使用气泡展示完整内容 * @defaultValue true */ showTooltip?: boolean; /** * 完全控制tooltip的props。比如指定`popupContainer`。<br/> * `BalloonProps`的类型见Balloon组件文档。 */ patchPopupProps?: (originalProps: BalloonProps) => BalloonProps; /** * 当tooltip展示时,设置弹层组件的className,透传给Popup */ popupClassName?: string; /** * 当tooltip展示时,设置弹层组件style,透传给Popup */ popupStyle?: CSSProperties; /** * tooltip的最大宽度限制,`showTooltip`为true时才有效 */ tooltipMaxWidth?: number; /** * 气泡对齐方式,可选值参见 Balloon(Tooltip)组件文档 * @defaultValue 'b'(下) */ align?: BalloonProps['align']; children?: ReactNode; }