diff --git a/docs/ai/context/ui-components.md b/docs/ai/context/ui-components.md
index 69b1c6007..547a91029 100644
--- a/docs/ai/context/ui-components.md
+++ b/docs/ai/context/ui-components.md
@@ -74,6 +74,16 @@ Loading placeholder with animation.
**Slots**: `default`
+### Truncatable
+
+Line-clamped content container that expands and collapses when the overflowing content area is clicked.
+
+| Prop | Type | Default | Description |
+|------|------|---------|-------------|
+| `lineClamp` | `number?` | `3` | Maximum visible lines while collapsed |
+
+**Slots**: `default`
+
---
## Misc
diff --git a/packages/ui/src/components/layouts/index.ts b/packages/ui/src/components/layouts/index.ts
index 29ce97449..3a28422b5 100644
--- a/packages/ui/src/components/layouts/index.ts
+++ b/packages/ui/src/components/layouts/index.ts
@@ -1,3 +1,4 @@
export { default as Collapsible } from './collapsible.vue'
export { default as Screen } from './screen.vue'
export { default as Skeleton } from './skeleton.vue'
+export { default as Truncatable } from './truncatable.vue'
diff --git a/packages/ui/src/components/layouts/truncatable.vue b/packages/ui/src/components/layouts/truncatable.vue
new file mode 100644
index 000000000..779f1e5b1
--- /dev/null
+++ b/packages/ui/src/components/layouts/truncatable.vue
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+