useTruncation@astryxdesign/core v0.7.14 · useTruncation

Usage

Detects whether an element's text is cut off — single-line overflow or clamped to several lines — and gives back the full text, updating when the size or the content changes. Built on a shared ResizeObserver and a shared MutationObserver, so hundreds of table cells create one observer of each kind, and a first measurement runs batched in a microtask after the commit instead of forcing a layout pass per text during mount. Use it wherever a truncated cell should show its full content only when it is actually truncated: compose a Tooltip off isTruncated and fullText instead of always rendering one. Text and Heading build their truncation tooltips on it; reach for it directly when composing truncation feedback into your own component.

ts
import {useTruncation} from '@astryxdesign/core/Text'

Best practices

GuidancePractices
Do

Render the full-content Tooltip only when isTruncated is true, and read the tooltip text from fullText: a cell that fits shows no tooltip, and the text always matches what was measured.

Do

Apply the matching clamp yourself next to the hook — white-space: nowrap for maxLines 1, -webkit-line-clamp for more — so what the user sees and what the hook measures stay the same shape.

Do

Reuse one useTruncation instance per measured element; the ref callback cleans up its own observers, so swapping elements is safe.

Don't

Compare scrollHeight to offsetHeight yourself for clamped text: with -webkit-line-clamp active browsers report the clamped size, which is exactly the case the Range measurement exists for.

Parameters

ParamTypeDescription
optionsrequired

Configuration object.

options.maxLinesrequired
number

Maximum number of lines before truncation. 1 detects single-line overflow (scrollWidth against offsetWidth); values above 1 detect a -webkit-line-clamp cut by measuring the real content height with a Range, bypassing the clamped scrollHeight. 0 disables detection: isTruncated stays false and fullText stays empty.

Returns

FieldTypeDescription
refRefCallback<HTMLElement>

Ref callback to attach to the text element being measured. Re-attaching to another element re-observes it and cleans up the previous observation.

isTruncatedboolean

Whether the text is currently cut off. Drives composing a Tooltip with the full text: render the tooltip only when this is true, so a cell that fits shows none.

fullTextstring

The element's current text content, captured on every measurement, for the tooltip a truncated cell shows. Follows content changes that resize nothing (a fixed-width status line whose text swaps).

Examples

Common configurations, variations, and states.
useTruncation — Tooltip on Cut-Off Text
Open in Playground

A narrow table column shows the full path in a Tooltip only where useTruncation reports the text is cut off; the short path shows none. One cell clamped to two lines shows the multi-line case.

Use with shadcn

Already using the shadcn registry workflow? Install the real Astryx package and a local public re-export. Component implementation source stays in Astryx.

This install URL expires with the draft preview.
bash
npx shadcn@4.19.0 add https://astryx-4305owzyg-fbopensource.vercel.app/shadcn/hooks/use-truncation.json