Skip to content
Back to skills

N Page Header

ASecurity

Page header component for page titles with navigation and content slots. Invoke when user needs page headers, breadcrumb navigation, or page title sections in Naive UI.

  • 8 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 11, 2026
datagovueapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 11, 2026

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

Installs into .claude/skills of the current project.

Are you the author of N Page Header?

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

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

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-page-header"
description: "Page header component for page titles with navigation and content slots. Invoke when user needs page headers, breadcrumb navigation, or page title sections in Naive UI."
metadata:
  author: jiaiyan
  version: "1.0.0"
---

# Naive UI Page Header Component

Page header component with title, subtitle, navigation, and content slots.

## When to Use

Use this component when:
- **Page titles**: Display page title with subtitle and navigation
- **Back navigation**: Provide back button for nested pages
- **Page statistics**: Show related statistics in header
- **Page actions**: Add action buttons in header area

## When to Invoke

Invoke this skill when:
- User needs a page header with title
- User wants back navigation functionality
- User needs to display page-level statistics
- User wants to organize page header content

## Features

- **Back Navigation**: Built-in back button with callback
- **Flexible Slots**: Multiple slots for customization
- **Subtitle Support**: Display subtitle text or slot
- **Extra Content**: Add extra content via prop or slot
- **Footer Content**: Add footer content for additional info

## API Reference

### PageHeader Props

| Name | Type | Default | Description |
|------|------|---------|-------------|
| extra | `string` | `undefined` | Extra text information (overwritten by extra slot). |
| subtitle | `string` | `undefined` | Subtitle text. |
| title | `string` | `undefined` | Title text. |
| on-back | `() => void` | `undefined` | Callback when back button is pressed. |

### PageHeader Slots

| Name | Parameters | Description |
|------|------------|-------------|
| avatar | `()` | Avatar/image slot. |
| header | `()` | Header content slot. |
| default | `()` | Main content area. |
| extra | `()` | Extra information slot. |
| footer | `()` | Footer content slot. |
| subtitle | `()` | Subtitle content slot. |
| title | `()` | Title content slot. |
| back | `()` | Custom back icon slot. |

## Basic Usage

### Basic Page Header

```vue
<template>
  <n-page-header title="Page Title" subtitle="Page description">
    <template #extra>
      <n-button type="primary">Action</n-button>
    </template>
  </n-page-header>
</template>
```

### With Back Navigation

```vue
<template>
  <n-page-header 
    title="Detail Page" 
    subtitle="View item details"
    @back="handleBack"
  >
    Content goes here
  </n-page-header>
</template>

<script setup>
import { useRouter } from 'vue-router'

const router = useRouter()

const handleBack = () => {
  router.back()
}
</script>
```

### With Statistics

```vue
<template>
  <n-page-header subtitle="A podcast to improve designs" @back="handleBack">
    <n-grid :cols="5">
      <n-gi>
        <n-statistic label="Episodes" value="125" />
      </n-gi>
      <n-gi>
        <n-statistic label="Guests" value="22" />
      </n-gi>
      <n-gi>
        <n-statistic label="Apologies" value="36" />
      </n-gi>
      <n-gi>
        <n-statistic label="Topics" value="83" />
      </n-gi>
      <n-gi>
        <n-statistic label="Reference Links" value="2,346" />
      </n-gi>
    </n-grid>
    <template #title>
      <a href="https://anyway.fm/" style="text-decoration: none; color: inherit">
        Anyway.FM
      </a>
    </template>
  </n-page-header>
</template>
```

## Common Patterns

### With Avatar

```vue
<template>
  <n-page-header title="User Profile" subtitle="View and edit profile">
    <template #avatar>
      <n-avatar :src="userAvatar" />
    </template>
    <template #extra>
      <n-button type="primary">Edit Profile</n-button>
    </template>
  </n-page-header>
</template>
```

### With Breadcrumb

```vue
<template>
  <n-page-header title="Product Details" @back="handleBack">
    <template #header>
      <n-breadcrumb>
        <n-breadcrumb-item>Home</n-breadcrumb-item>
        <n-breadcrumb-item>Products</n-breadcrumb-item>
        <n-breadcrumb-item>Details</n-breadcrumb-item>
      </n-breadcrumb>
    </template>
  </n-page-header>
</template>
```

### With Actions

```vue
<template>
  <n-page-header title="Document" subtitle="Edit document">
    <template #extra>
      <n-space>
        <n-button>Save Draft</n-button>
        <n-button type="primary">Publish</n-button>
      </n-space>
    </template>
    <template #footer>
      <n-space>
        <n-tag type="info">Draft</n-tag>
        <n-text depth="3">Last edited: 2 hours ago</n-text>
      </n-space>
    </template>
  </n-page-header>
</template>
```

### Custom Back Icon

```vue
<template>
  <n-page-header title="Settings" @back="handleBack">
    <template #back>
      <n-icon :size="20">
        <ArrowLeftIcon />
      </n-icon>
    </template>
  </n-page-header>
</template>
```

### With Tabs

```vue
<template>
  <n-page-header title="User Management" @back="handleBack">
    <template #footer>
      <n-tabs v-model:value="activeTab">
        <n-tab-pane name="list" tab="User List" />
        <n-tab-pane name="roles" tab="Roles" />
        <n-tab-pane name="permissions" tab="Permissions" />
      </n-tabs>
    </template>
  </n-page-header>
</template>

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

const activeTab = ref('list')
</script>
```

### Form Page Header

```vue
<template>
  <n-page-header 
    title="Create New Order" 
    subtitle="Fill in the order details"
    @back="handleBack"
  >
    <template #extra>
      <n-space>
        <n-button @click="handleCancel">Cancel</n-button>
        <n-button type="primary" @click="handleSubmit">Submit</n-button>
      </n-space>
    </template>
    <n-form ref="formRef" :model="formData">
      <!-- Form content -->
    </n-form>
  </n-page-header>
</template>
```

## Best Practices

1. **Provide back handler**: Always implement on-back for navigation
   ```vue
   <n-page-header title="Detail" @back="router.back()">
     Content
   </n-page-header>
   ```

2. **Use slots for rich content**: Use title/subtitle slots for complex content
   ```vue
   <n-page-header>
     <template #title>
       <a href="...">Link Title</a>
     </template>
   </n-page-header>
   ```

3. **Add extra actions**: Use extra slot for page-level actions
   ```vue
   <n-page-header title="Users">
     <template #extra>
       <n-button type="primary">Add User</n-button>
     </template>
   </n-page-header>
   ```

4. **Show context in subtitle**: Provide brief description in subtitle
   ```vue
   <n-page-header 
     title="Settings" 
     subtitle="Configure your application preferences"
   />
   ```

5. **Use footer for tabs or filters**: Footer slot is ideal for navigation tabs
   ```vue
   <n-page-header title="Dashboard">
     <template #footer>
       <n-tabs>...</n-tabs>
     </template>
   </n-page-header>
   ```

6. **Consistent styling**: Keep page header styling consistent across pages

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.