Skip to content
Back to skills

N Timeline

ASecurity

A component for displaying a timeline of events with customizable items, icons, and layout options including horizontal and vertical orientations.

  • 8 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 11, 2026
designvueapi

Works with

  • api

Security analysis

A100/100

Scanned September 11, 2026

npx -y skills add jiaiyan/naive-ui-skills --skill n-timeline --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of N Timeline?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for N Timeline
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jiaiyan-n-timeline/badge)](https://www.skillsdirectory.com/skills/jiaiyan-n-timeline)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: n-timeline
description: A component for displaying a timeline of events with customizable items, icons, and layout options including horizontal and vertical orientations.
author: jiaiyan
version: 1.0.0
---

# n-timeline Component

The `n-timeline` component is Naive UI's solution for displaying a sequence of events or activities in chronological order. It supports both vertical and horizontal layouts with customizable styling.

## When to Use

Use `n-timeline` when you need to:

- Display chronological events or activities
- Show process steps or progress
- Create activity logs or history views
- Visualize project milestones

## Basic Usage

### Simple Timeline

```vue
<template>
  <n-timeline>
    <n-timeline-item content="Event 1" />
    <n-timeline-item
      type="success"
      title="Success"
      content="Operation completed"
      time="2024-01-15 10:00"
    />
    <n-timeline-item
      type="error"
      content="Error occurred"
      time="2024-01-15 11:00"
    />
    <n-timeline-item
      type="warning"
      title="Warning"
      content="Please check"
      time="2024-01-15 12:00"
    />
  </n-timeline>
</template>
```

### Different Sizes

```vue
<template>
  <n-timeline size="large">
    <n-timeline-item content="Large size item" />
    <n-timeline-item
      type="success"
      title="Success"
      content="Success content"
      time="2024-01-15 10:00"
    />
  </n-timeline>
</template>
```

### Right Placement

```vue
<template>
  <n-timeline item-placement="right">
    <n-timeline-item content="Item on the right" />
    <n-timeline-item
      type="success"
      title="Success"
      content="Success content"
      time="2024-01-15 10:00"
    />
  </n-timeline>
</template>
```

### Horizontal Timeline

```vue
<template>
  <div style="overflow: auto">
    <n-timeline horizontal>
      <n-timeline-item content="Step 1" />
      <n-timeline-item
        type="success"
        title="Step 2"
        content="Completed"
        time="2024-01-15"
      />
      <n-timeline-item
        type="error"
        content="Step 3"
        time="2024-01-16"
      />
      <n-timeline-item content="Step 4" />
    </n-timeline>
  </div>
</template>
```

### Custom Icon

```vue
<template>
  <n-timeline>
    <n-timeline-item color="grey" content="Custom icon">
      <template #icon>
        <n-icon>
          <CheckCircleIcon />
        </n-icon>
      </template>
    </n-timeline-item>
    <n-timeline-item type="success" content="Default icon" />
  </n-timeline>
</template>
```

## API Reference

### Timeline Props

| Name | Type | Default | Description |
|------|------|---------|-------------|
| `horizontal` | `boolean` | `false` | Whether to display horizontally |
| `icon-size` | `number` | `undefined` | Size of the icon part |
| `item-placement` | `'left' \| 'right'` | `'left'` | Direction of item placement |
| `size` | `'medium' \| 'large'` | `'medium'` | Size of the timeline |

### TimelineItem Props

| Name | Type | Default | Description |
|------|------|---------|-------------|
| `color` | `string` | `undefined` | Item color |
| `content` | `string` | `undefined` | Item content |
| `line-type` | `'default' \| 'dashed'` | `'default'` | Line type |
| `time` | `string` | `undefined` | Item time |
| `title` | `string` | `undefined` | Item title |
| `type` | `'default' \| 'success' \| 'info' \| 'warning' \| 'error'` | `'default'` | Item type |

### Timeline Slots

| Name | Parameters | Description |
|------|------------|-------------|
| `default` | `()` | Timeline content |

### TimelineItem Slots

| Name | Parameters | Description |
|------|------------|-------------|
| `default` | `()` | Timeline item content |
| `icon` | `()` | Custom timeline icon |
| `footer` | `()` | Content at the bottom |
| `header` | `()` | Content at the top |

## Common Patterns

### Process Steps

```vue
<template>
  <n-timeline>
    <n-timeline-item
      type="success"
      title="Order Placed"
      content="Your order has been placed successfully"
      time="2024-01-15 09:00"
    />
    <n-timeline-item
      type="success"
      title="Payment Confirmed"
      content="Payment received"
      time="2024-01-15 09:05"
    />
    <n-timeline-item
      type="info"
      title="Processing"
      content="Order is being processed"
      time="2024-01-15 10:00"
    />
    <n-timeline-item
      type="warning"
      title="Shipping"
      content="Order is on the way"
      time="2024-01-15 14:00"
    />
    <n-timeline-item
      title="Delivered"
      content="Order delivered"
      time="2024-01-16 10:00"
    />
  </n-timeline>
</template>
```

### Activity Log

```vue
<template>
  <n-timeline>
    <n-timeline-item
      v-for="log in activityLogs"
      :key="log.id"
      :type="log.type"
      :title="log.title"
      :content="log.description"
      :time="log.timestamp"
    >
      <template #icon>
        <n-icon>
          <component :is="getIcon(log.type)" />
        </n-icon>
      </template>
    </n-timeline-item>
  </n-timeline>
</template>

<script setup>
import { CheckCircleIcon, AlertIcon, InfoIcon } from '@vicons/ionicons5'

const activityLogs = [
  { id: 1, type: 'success', title: 'Task Completed', description: 'All items processed', timestamp: '10:00' },
  { id: 2, type: 'warning', title: 'Warning', description: 'Low disk space', timestamp: '11:00' },
  { id: 3, type: 'error', title: 'Error', description: 'Connection failed', timestamp: '12:00' }
]

const getIcon = (type) => {
  const icons = {
    success: CheckCircleIcon,
    warning: AlertIcon,
    error: AlertIcon,
    info: InfoIcon
  }
  return icons[type] || InfoIcon
}
</script>
```

### Horizontal Progress

```vue
<template>
  <n-timeline horizontal>
    <n-timeline-item
      v-for="(step, index) in steps"
      :key="index"
      :type="step.completed ? 'success' : 'default'"
      :title="step.title"
    >
      <template #icon>
        <n-icon v-if="step.completed">
          <CheckIcon />
        </n-icon>
        <span v-else>{{ index + 1 }}</span>
      </template>
    </n-timeline-item>
  </n-timeline>
</template>

<script setup>
import { ref } from 'vue'

const steps = ref([
  { title: 'Cart', completed: true },
  { title: 'Shipping', completed: true },
  { title: 'Payment', completed: false },
  { title: 'Confirm', completed: false }
])
</script>
```

### Dashed Line Style

```vue
<template>
  <n-timeline>
    <n-timeline-item
      type="info"
      title="Upcoming Event"
      content="This event is in the future"
      line-type="dashed"
    />
    <n-timeline-item
      type="success"
      title="Completed"
      content="This event is done"
    />
  </n-timeline>
</template>
```

### Rich Content

```vue
<template>
  <n-timeline>
    <n-timeline-item>
      <template #header>
        <n-space align="center">
          <n-avatar :size="24">JD</n-avatar>
          <span>John Doe</span>
        </n-space>
      </template>
      
      <template #default>
        <n-card size="small">
          <p>Posted a new article about Vue.js best practices</p>
        </n-card>
      </template>
      
      <template #footer>
        <n-space>
          <n-button text size="small">Like</n-button>
          <n-button text size="small">Comment</n-button>
        </n-space>
      </template>
    </n-timeline-item>
  </n-timeline>
</template>
```

## Best Practices

### 1. Use Appropriate Types

Match the timeline item type with the event status:

```vue
<n-timeline-item type="success" content="Completed" />
<n-timeline-item type="error" content="Failed" />
<n-timeline-item type="warning" content="Attention needed" />
<n-timeline-item type="info" content="Information" />
```

### 2. Use Horizontal for Process Steps

```vue
<n-timeline horizontal>
  <!-- Step items -->
</n-timeline>
```

### 3. Add Context with Time

```vue
<n-timeline-item
  title="Event"
  content="Description"
  time="2024-01-15 10:00"
/>
```

### 4. Use Custom Icons for Visual Clarity

```vue
<template #icon>
  <n-icon :color="statusColor">
    <StatusIcon />
  </n-icon>
</template>
```

### 5. Combine with Cards for Rich Content

```vue
<n-timeline-item>
  <n-card>
    <!-- Rich content -->
  </n-card>
</n-timeline-item>
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.