nuxt-ui-tools-file-preview
Use this skill when previewing files 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-file-preview
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: documents, 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-file-preview
What's inside
- Skill name
nuxt-ui-tools-file-preview- Description
- Use this skill when previewing files with nuxt-ui-tools as a package consumer. Covers mounting UiFilePreviewProvider, opening one file or a gallery with useFilePreview() or useNuxtApp().$filePreview, file descriptors (URL, File/Blob, or a function that returns a signed URL), options (index, mode, gallery, loop, pdf page, callbacks), the returned handle, the built-in renderers (image, video, audio, PDF, text/JSON, CSV, Markdown, Office and archive fallbacks), renditions, download and custom header actions, the markdown render hook, custom renderers with defineFilePreviewRenderer and UiFilePreviewTools, theming tokens, and how the upload field uses the preview.
- License
- MIT
- Instructions
- 212 lines in SKILL.md · view on GitHub
Before installing
- Instructions call the network
Agent Skills spec issues
- name: "nuxt-ui-tools-file-preview" does not match folder "file-preview"
Files (1)
- SKILL.md
SKILL.md (first lines)
# nuxt-ui-tools File Preview
One call opens any file in an overlay with a renderer made for its kind. Media opens in a modal,
documents in a right drawer, and phones get fullscreen. Renderers load on first use, so an app only
downloads the code for the kinds it actually shows.
## Mount the provider once
The module creates one API for the whole app. Mount the provider next to the form provider; it
renders the previews:
```vue
<template>
<UApp>
<UiToolsProvider :locale="uiToolsLocale">
<UiFormProvider>
<UiFilePreviewProvider :markdown="renderMarkdown">
<NuxtPage />
</UiFilePreviewProvider>
</UiFormProvider>
</UiToolsProvider>
</UApp>
</template>
```
The component prefix follows the module `prefix` option (`Ui` by default).
`markdown` is optional. It receives the file text and must return sanitized HTML (or a promise of
it). Without it, Markdown files show their source.
## Open files
Components use `useFilePreview()`. Code outside setup, such as entity actions or stores, uses
`useNuxtApp().$filePreview`:
```ts
export function previewAccountFile(account: { id: string; name: string }, file: 'kbis' | 'logo') {
const { $filePreview } = useNuxtApp()
return $filePreview.open({
name: `${file.toUpperCase()} — ${account.name}.pdf`,
src: `/v1/accounts/${account.id}/files/${file}`,
})
}
```
`open()` accepts one input or an array (a gallery). Each input is a URL string, a `File` or `Blob`,
or a descriptor:
```ts
const preview = $filePreview.open(
contract.files.map((file) => ({
id: file.id,
name: file.label,
mime: file.mimeType,
size: file.size,
updatedAt: file.createdAt,
// Runs only when this file is shown, and again when the user presses Retry.
src: () => $api.contracts.fileUrl({ params: { fileId: file.id } }).then((res) => res.url),
download: () => downloadContractFile(file),
actions: [{ icon: 'i-lucide-folder-open', label: 'Open in registry', to: registryPath(file) }],
})),
{ index: 2 },
)
preview.next()
await preview.closed
```
### Descriptor fields
| Field | Meaning |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `src` | URL, `File`/`Blob`, or `() => MaybePromise<string \| Blob>`. Functions resolve once per file and again on Retry. |
| `name` | Display name. Defaults to `File.name`, then the last URL segment. |
| `mime` | Wins over the extension to pick a renderer. |
| `kind` | Forces a renderer (`'image'`, `'pdf'`, …, or a custom kind). |
| `size`, `updatedAt` | Shown in the meta line and the details panel. `File` inputs fill them. |
| `thumbnail`, `poster` | Gallery strip image; video poster or audio cover. |
| `rendition` | A preview made by your server for files browsers cannot render (DOCX → PDF, HEIC → JPEG). The preview shows it with a "Converted preview" notice; download keeps the original. |
| `details` | Extra `{ label, value }` rows in the details panel. |
| `download` | `false` hides it, a string downloads that URL, a function replaces the download. Default: the resolved source under `name`. |
| `actions` | Extra header buttons: `{ label, icon?, to?, onSelect? }`. External `to` opens a new tab; internal `to` closes the preview and navigates. |
| `tracks` | Video captions: `{ src, srcLang, label, kind?, default? }`. |
Text values (`label`, `value`) accept a getter such as `() => t('files.uploadedBy')` so they follow
the language.
### Options
| Option | Meaning |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `index` | File shown first. |
| `mode` | `'modal' \| 'drawer' \| 'fullscreen'` or a responsive value like `'fullscreen md:drawer'`. Responsive values start at `sm`, so the first value covers phones. |
| `id` | Opening the same id again updates that preview instead of stacking another. |
| `gallery` | `'strip'` (default, thumbnails) or `'counter'`. Phones always show the counter. |
| `loop` | Wraps from the last file to the first. |
| `pdf.page` | Page PDFs open at. |
| `onChange(file, index)`, `onClose()` | Callbacks. |
Without `mode`, each file's renderer suggests a container and the largest wins, so a gallery keeps
one container while navigating: images and video use `fullscreen md:modal`, documents
`fullscreen md:drawer`. A single audio file or fallback card uses a narrow modal.
### Handle
`open()` returns right away: `{ id, index (readonly ref), next(), previous(), goTo(i), update(input), close(), closed }`.
`closed` resolves once the overlay has left the screen. The API also has `close(id?)` (top-most
preview when omitted), `closeAll()`, `isOpen(id?)`, `instances`, and `mounted` (a provider is
rendering).
## Built-in renderers
| Kind | Matches | Rendering |
| ---------------------------- | ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `image` | `image/*`, png jpg webp gif avif svg heic… | Fits without upscaling; wheel/pinch/double-click zoom, drag to pan, rotate. Transparent formats sit on a checkerboard. SVG renders through `<img>`, so its scripts never run. |
| `video` | `video/*`, mp4 webm mov… | `<video>` with custom controls (play, seek, volume, speed, captions, picture-in-picture, fullscreen). |
| `audio` | `audio/*`, mp3 m4a wav… | Card with cover and the same controls. |
| `pdf` | `application/pdf` | The browser's own viewer in an iframe (`#view=FitH`). Blob sources are re-typed as PDF. When `navigator.pdfViewerEnabled` is `false` (Android), it shows Open and Download instead. |
| `text` | `text/*`, json, xml, yaml, log, code files | Line numbers, wrap, copy. JSON is formatted and tinted. |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-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.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-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.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-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 - 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
Signals
- Stars
- 2
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 23, 2026 (5 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-file-preview skill. Agent Mart. https://agentmart.dev/skills/chronicstone-nuxt-ui-tools-file-preview (last updated 2026-10-24)