Index of every page on this site: llms.txt
All skills
harlan-zw avatar

/nuxt-frontend-design

@9c94eb4
Run it yourself

Build or polish Nuxt UI v4+ pages and design systems. Use for landing pages, dashboards, tokens, motion, or generic-looking UX.

Use this Skill: https://skilld.dev/gh/harlan-zw/harlan-agent-kit/nuxt-frontend-design

Nothing lands on disk. Nothing to clean up.

Fork this Skill

Edit a local copy. It keeps the author and licence.

referencescomponentstables.md

≈882 tokens on demand. Your agent reads this file only when SKILL.md points to it.

Table Patterns

Nuxt UI table component for data display.


Basic Table

<script setup lang="ts">
interface Project {
  id: string
  name: string
  status: 'active' | 'archived' | 'draft'
  updated: string
}

const columns = [
  { key: 'name', label: 'Project' },
  { key: 'status', label: 'Status' },
  { key: 'updated', label: 'Last Updated' },
  { key: 'actions', label: '' }
]

const projects = ref<Project[]>([])
</script>

<template>
  <UTable :columns="columns" :rows="projects">
    <template #status-data="{ row }">
      <UBadge
        :color="row.status === 'active' ? 'success' : 'neutral'"
        variant="subtle"
      >
        {{ row.status }}
      </UBadge>
    </template>

    <template #actions-data>
      <UDropdownMenu
        :items="[
          [{ label: 'Edit', icon: 'i-lucide-pencil' }],
          [{ label: 'Delete', icon: 'i-lucide-trash-2', color: 'error' }],
        ]"
      >
        <UButton icon="i-lucide-ellipsis" variant="ghost" size="sm" />
      </UDropdownMenu>
    </template>
  </UTable>
</template>

Empty State

Never show an empty table. Use UEmpty:

<template>
  <UTable v-if="projects.length" :columns="columns" :rows="projects" />

  <UEmpty
    v-else
    icon="i-lucide-folder-open"
    title="No projects yet"
    description="Create your first project to get started."
    :actions="[{ label: 'New Project', click: createProject }]"
  />
</template>

For filtered or searched tables, the useful empty-state action is "reset filters". Give the empty slot an action button, not just a message.


Sortable Columns

const columns = [
  { key: 'name', label: 'Project', sortable: true },
  { key: 'updated', label: 'Last Updated', sortable: true },
]

Row Actions

  • Use UDropdownMenu with icon button for row actions
  • Group destructive actions in separate section
  • Use color="error" for delete actions

Loading State

<UTable :columns="columns" :rows="projects" :loading="pending" />

Row-level skeleton placeholders (inside a custom cell renderer or a non-table list) need deterministic widths, seeded rather than random, so SSR and client render identically.


Typography in Tables

Use font-variant-numeric: tabular-nums (Tailwind: tabular-nums) on any column with numbers — digits align in columns. Apply to price, count, date, and ID columns.

Right-align numeric columns (text-right on the header and cell). Numbers scan vertically by their magnitude, which only works when the decimal/ones place is in the same x-position down the column. Left-aligned numbers force the eye to re-anchor on every row. Apply to: prices, counts, percentages, quantities, durations, IDs that read as numbers. Keep left-aligned: dates (read as words), formatted strings, status labels.

Tighten table gridlines until they recede: prefer a single thin row separator (border-default) over full row+column grids. Heavy borders compete with the data.


Dashboard Table Principles

From Linear's approach:

  • Data tables over cards — cards waste space for data-heavy views
  • Status indicators > progress bars — "Done" badge beats 100% bar
  • Batch operations — checkbox column + bulk action bar on select
  • Inline editing — click to edit, don't navigate away
  • Relative timestamps — "2h ago" not "2024-01-05 14:32"
  • Responsive: Tables transform to stacked cards on mobile — use UTable's responsive handling or hide low-priority columns

Source: SKILL.md on GitHub

skilld matched fixed text patterns in SKILL.md and file names. Patterns miss obfuscated code.

skilld run checks every file with the same patterns. It asks for approval before it loads a Skill with a behavior marked Needs approval.

1 warning3mo3 checks · Risk MEDIUM
  • Gen Agent Trust Hub3mo

    The skill utilizes dynamic context injection to probe the local environment and executes external CLI tools via npx, including an unverified package for CSS analysis.

  • Socket3mo

    No alerts

  • Snyk3mo

    Risk: LOW · No issues

Signed by skilld at 9c94eb4. This ties the file your Agent reads to that commit on GitHub. It does not review the instructions.

Last checked against GitHub last week.

Activeupdated last month
argument-hint
[component/page/area]
effort
max

README badge

README badge for harlan-zw/harlan-agent-kit/nuxt-frontend-design