# Text Overflow
Utilities for controlling how text behaves when it overflows its container.
- [Basic Usage](#basic-usage)
- [Quick Reference](#quick-reference)
- [Truncate](#truncate)
- [Ellipsis & Clip](#ellipsis--clip)
- [Line Clamp](#line-clamp)
- [Responsive Design](#responsive-design)
- [Dark Mode](#dark-mode)
- [Arbitrary Values](#arbitrary-values)
- [Related Documentation](#related-documentation)
```dart
// Basic truncation
WText(
'Long text that should be truncated...',
className: 'truncate',
)
// Limit to specific lines
WText(
'Multi-line text block...',
className: 'line-clamp-3',
)
```
## Basic Usage
Use `truncate` to prevent text from wrapping and truncate overflowing text with an ellipsis (...) if needed. This is the most common way to handle overflow for single-line text.
```dart
WDiv(
className: 'w-64',
child: WText(
'The quick brown fox jumps over the lazy dog.',
className: 'truncate',
),
)
```
## Quick Reference
| Class | Properties | Description |
|:------|:-----------|:------------|
| `truncate` | `maxLines: 1`, `softWrap: false`, `overflow: ellipsis` | Truncate text with an ellipsis on a single line. |
| `text-ellipsis` | `overflow: ellipsis` | Use an ellipsis for overflow. |
| `text-clip` | `overflow: clip` | Clip overflowing text (no ellipsis). |
| `line-clamp-{n}` | `maxLines: n`, `overflow: ellipsis` | Limit text to n lines. |
| `line-clamp-none` | `maxLines: null` | Remove line limits. |
## Truncate
The `truncate` utility is a shorthand that sets three properties at once:
1. Sets `maxLines` to 1
2. Disables `softWrap`
3. Sets `overflow` to `TextOverflow.ellipsis`
```dart
WText(
'Long text that will be cut off with an ellipsis if it gets too long',
className: 'truncate',
)
```
## Ellipsis & Clip
Use `text-ellipsis` or `text-clip` to control the visual overflow behavior specifically.
- **text-ellipsis**: Renders an ellipsis (...) when text overflows.
- **text-clip**: Simply cuts off the text at the boundary.
```dart
// Ellipsis (default for truncate/line-clamp)
WText('...', className: 'text-ellipsis')
// Clip (hard cut)
WText('...', className: 'text-clip')
```
## Line Clamp
Use `line-clamp-{n}` to limit text to a specific number of lines. This automatically sets the overflow style to ellipsis.
Supported values are any integer number (e.g., `line-clamp-2`, `line-clamp-5`) and `line-clamp-none`.
```dart
WText(
'This is a long paragraph that needs to be clamped to a specific number of lines...',
className: 'line-clamp-3',
)
// Resetting line clamp
WText(
'...',
className: 'line-clamp-3 lg:line-clamp-none',
)
```
## Responsive Design
Apply different overflow utilities at different breakpoints using standard responsive prefixes.
```dart
// Truncate on mobile, allow wrapping on desktop
WText(
'Responsive text behavior...',
className: 'truncate md:whitespace-normal',
)
// 2 lines on mobile, 4 lines on tablet, unlimited on desktop
WText(
'Responsive line clamping...',
className: 'line-clamp-2 md:line-clamp-4 lg:line-clamp-none',
)
```
## Dark Mode
While overflow utilities don't visually change in dark mode, you can still apply them conditionally using the `dark:` prefix if your design requires different text handling in dark mode.
```dart
WText(
'...',
className: 'truncate dark:line-clamp-2',
)
```
## Arbitrary Values
> [!NOTE]
> Arbitrary values (bracket syntax) are not currently supported for `text-` overflow or `line-clamp-` utilities.
>
> `line-clamp-{n}` supports any integer number directly (e.g., `line-clamp-7`), so bracket syntax is generally not needed.
## Customizing Theme
These utilities do not use theme variables. `line-clamp` accepts numeric values directly, and overflow types are static.
## Related Documentation
- [Word Break & Whitespace](./whitespace.md)
- [Font Size](./font-size.md)