nuxt-ui-tools-spreadsheet
Use this skill when importing Excel, CSV, or pasted rows with nuxt-ui-tools as a package consumer.
Skill by ChronicStone
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/chronicstone-nuxt-ui-tools-spreadsheet
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: spreadsheets, design
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/nuxt-ui-tools-spreadsheet
What's inside
- Skill name
nuxt-ui-tools-spreadsheet- Description
- Use this skill when importing Excel, CSV, or pasted rows with nuxt-ui-tools as a package consumer. Covers defineSpreadsheetSchema (typed context, chained text/number/date/boolean/select columns, columns depending on the columns above (options, defaults, rules per row), groups and dynamic groups built from the context, exact matching, option sources shared with forms, unknown-value policies, rules and levels, validate, row identity with duplicates and stored records, output), useSpreadsheetImport (headless models, onSubmit with batches and rejections), the UiSpreadsheetImport* parts, useSpreadsheetSteps with custom steps, and the ready-made UiSpreadsheetImport wizard.
- License
- MIT
- Instructions
- 327 lines in SKILL.md · view on GitHub
Agent Skills spec issues
- name: "nuxt-ui-tools-spreadsheet" does not match folder "spreadsheet"
Files (1)
- SKILL.md
SKILL.md (first lines)
# nuxt-ui-tools Spreadsheet Import
Three layers, each usable without the next:
1. **Schema** (`defineSpreadsheetSchema`): the data contract. Columns, how headers and values
match, rules, row identity, output. No UI.
2. **Runtime** (`useSpreadsheetImport`): headless state and commands, one reactive model per
concern: `file`, `context`, `layout`, `columns`, `values`, `rows`, `review`, `submit`,
`readiness`. Tests, scripts, and fully custom screens stop here.
3. **UI**: `UiSpreadsheetImport*` parts placed wherever you want (one page, a drawer, a wizard),
optional steps (`useSpreadsheetSteps`), and one ready composition (`UiSpreadsheetImport`).
Matching is exact: a header or a value matches a declared name, ignoring case, accents, line
breaks, repeated spaces, and a trailing `*`. Anything else goes to the column's policy or to the
user. The engine never guesses.
Files are read with SheetJS (`xlsx`), an optional peer that must be 0.20.2 or later. npm only
serves 0.18.5, which has known vulnerabilities, so install it from the SheetJS CDN:
`bun add https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz`.
## Schema
Declare the context type first when columns depend on data the page provides. Every callback
receives it as `ctx`. Columns are a chain: each method adds a column, and the callbacks of a column
(`options`, `default`, `rules`, `parse`) receive `row`, typed with the columns declared above it.
Write `columns` before the callbacks that read whole rows (`rows`, `validate`, `output`): they are
typed from it.
```ts
interface AssessmentsContext {
center: TestCenter
products: readonly Product[] // each with its own `scale` and `skills`
}
const productOf = (ctx: AssessmentsContext, id: string) =>
ctx.products.find((product) => product.id === id)
export const assessmentsImport = defineSpreadsheetSchema<AssessmentsContext>()({
key: 'assessments',
file: { accept: ['.xlsx', '.csv'], maxRows: 5000 },
columns: (c) =>
c
.select('testCenterId', {
label: 'Test center',
headers: 'Test center ID',
options: ({ ctx }) => [ctx.center.vtestId],
default: ({ ctx }) => ctx.center.vtestId,
unknown: 'error',
})
.text('secureCode', { label: 'Secure code', required: true })
.text('examName', { label: 'Exam name', required: true })
.select('productId', {
label: 'Product',
from: 'examName',
options: ({ ctx }) =>
ctx.products.map((product) => ({
label: product.name,
value: product.id,
aliases: product.examNames,
})),
required: true,
})
.date('completedAt', {
label: 'Completed at',
formats: ['MMMM d, yyyy h:mm a'],
rules: (v) => [v.notFuture()],
})
.number('score', {
// `row.productId` is typed: the product column is declared above.
rules: (v, { row, ctx }) => [v.max(productOf(ctx, row.productId)?.maxScore ?? 100)],
})
.group('levels', { label: 'CEFR levels' }, (g) =>
g
.select('general', {
label: 'General',
headers: 'General level',
// Each product has its own scale: the options follow the row's product.
options: ({ row, ctx }) => productOf(ctx, row.productId)?.scale ?? CEFR,
})
.select('listening', { label: 'Listening', headers: 'Listening level', options: CEFR }),
)
.dynamic('affiliations', {
label: 'Affiliations',
items: ({ ctx }) => ctx.center.affiliationGroups,
column: (group, c) =>
c.select(group.slug, {
label: group.name,
headers: `${group.name}: PRÉREQUIS CECR`,
options: {
source: toOptions(group.items),
create: { handler: ({ label }) => api.affiliations.create(label) },
},
multiple: true,
unknown: 'create',
}),
}),
rows: {
key: (row) => row.secureCode,
duplicates: 'error',
existing: {
lookup: ({ keys, ctx }) => assessmentsByCodeQuery({ centerId: ctx.center.id, codes: keys }),
action: ({ row, existing }) =>
row.levels.general === existing.levels.general ? 'skip' : 'update',
},
},
validate: ({ row, issue }) => [
!row.levels.general &&
row.status === 'Done' &&
issue('levels.general', 'Required when the test is done'),
],
output: ({ row, mode, existing, ctx }) => ({
...row,
centerId: ctx.center.id,
assessmentId: existing?.id,
}),
})
```
A schema without context skips the type argument: `defineSpreadsheetSchema({ ... })`.From ChronicStone/nuxt-ui-tools, MIT.
More from ChronicStone/nuxt-ui-tools
- 0.603score
nuxt-ui-tools-typescript
ChronicStone
Use this skill for internal TypeScript work in the nuxt-ui-tools repository.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
nuxt-ui-tools-maintainer
ChronicStone
Use this skill for internal maintenance and feature work in the nuxt-ui-tools repository.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
nuxt-ui-tools-config-driven
ChronicStone
Use this skill for internal architecture work around config-driven, registry-driven, and pattern-driven feature design in the nuxt-ui-tools repository.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
nuxt-ui-tools-reactivity
ChronicStone
Use this skill for internal Vue reactivity and state-model work in the nuxt-ui-tools repository.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
nuxt-ui-tools-table-runtime
ChronicStone
Use this skill when implementing, refactoring, or extending the internal table runtime inside this repository.
SkillAFreshness: A★ 2Claude Code +9 - 0.599score
nuxt-ui-tools-table
ChronicStone
Use this skill when building or debugging table usage with nuxt-ui-tools as a package consumer.
SkillAFreshness: A★ 2Claude Code +9 - 0.599score
nuxt-ui-tools
ChronicStone
Use this skill when working with the nuxt-ui-tools package as a consumer or integrator.
SkillAFreshness: A★ 2Claude Code +9 - 0.599score
nuxt-ui-tools-display
ChronicStone
Use this skill when showing read-only content with nuxt-ui-tools display blocks, inside a form (the `info` field with `display` and `props`) or on their own…
SkillAFreshness: A★ 2Claude Code +9 - 0.599score
nuxt-ui-tools-query-state
ChronicStone
Use this skill when building or debugging URL-backed state with nuxt-ui-tools as a package consumer.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
nuxt-ui-tools-i18n
ChronicStone
Use this skill for internal i18n work in this repository.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
nuxt-ui-tools-repo
ChronicStone
Use this skill when implementing or refactoring code inside the nuxt-ui-tools repository itself.
SkillAFreshness: A★ 2Claude Code +9 - 0.598score
nuxt-ui-tools-playground
ChronicStone
Use this skill when adding, restructuring, or validating the nuxt-ui-tools playground examples, shell, navigation, or route-level composition demos.
SkillAFreshness: A★ 2Claude Code +9
Signals
- Stars
- 2
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 30, 2026 (28 days ago)
- Last release
- Oct 23, 2026 (5 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/ChronicStone/nuxt-ui-tools
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from ChronicStone
- 0.603score
nuxt-ui-tools-reactivity
ChronicStone
Use this skill for internal Vue reactivity and state-model work in the nuxt-ui-tools repository.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
nuxt-ui-tools-table-runtime
ChronicStone
Use this skill when implementing, refactoring, or extending the internal table runtime inside this repository.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
nuxt-ui-tools-typescript
ChronicStone
Use this skill for internal TypeScript work in the nuxt-ui-tools repository.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
nuxt-ui-tools-maintainer
ChronicStone
Use this skill for internal maintenance and feature work in the nuxt-ui-tools repository.
SkillAFreshness: A★ 2Claude Code +9 - 0.603score
nuxt-ui-tools-config-driven
ChronicStone
Use this skill for internal architecture work around config-driven, registry-driven, and pattern-driven feature design in the nuxt-ui-tools repository.
SkillAFreshness: A★ 2Claude Code +9 - 0.599score
nuxt-ui-tools-query-state
ChronicStone
Use this skill when building or debugging URL-backed state with nuxt-ui-tools as a package consumer.
SkillAFreshness: A★ 2Claude Code +9
Cite this page
nuxt-ui-tools-spreadsheet skill. Agent Mart. https://agentmart.dev/skills/chronicstone-nuxt-ui-tools-spreadsheet (last updated 2026-10-24)