A Vue 3 component library for intelligently rendering complex data structures. Automatically detects and beautifully displays HTTP responses, file objects, errors, arrays, nested objects, and primitive types with built-in search, copy, and navigation.
- Smart Type Detection - Automatically identifies and renders HTTP responses, file objects, errors, dates, URLs, emails, colors, and more
- Pluggable Renderer System - Register custom renderers for domain-specific data types
- Built-in Search - Search across keys, values, and paths with jump-to navigation
- Collapsible Structures - Expand/collapse nested objects and arrays with configurable default depth
- File Downloads - Built-in file renderer with customizable download handler for cloud storage (GCS, S3, SFTP)
- Copy Support - One-click copy for individual values or entire structures
- Quasar Integration - Built with Quasar components for a polished UI
npm install @quickflo/quickview
# or
pnpm add @quickflo/quickview
# or
yarn add @quickflo/quickviewQuickView requires Vue 3 and Quasar:
npm install vue quasar @quasar/extras<script setup>
import { QuickView } from '@quickflo/quickview'
import '@quickflo/quickview/styles'
const data = {
status: 200,
statusText: 'OK',
headers: { 'content-type': 'application/json' },
body: {
users: [
{ id: 1, name: 'Alice', email: 'alice@example.com' },
{ id: 2, name: 'Bob', email: 'bob@example.com' },
]
}
}
</script>
<template>
<QuickView :value="data" />
</template>null/undefined- Styled null indicatorsboolean- Color-coded true/false chipsnumber- Formatted numbersstring- With smart detection for URLs, emails, dates, colors, JSON, base64
- URLs - Clickable links with external icon
- Emails - Mailto links
- Dates - Formatted with relative time
- Colors - Hex/RGB preview swatches
- JSON Strings - Parsed and rendered as objects
- Base64 - Decoded preview with copy support
- Long Text - Truncated with expand option
- Objects - Collapsible with key-value display
- Arrays - Collapsible with item count, table view for homogeneous data
- Empty - Styled empty object/array indicators
- HTTP Response - Status badge, collapsible headers, body preview
- File Object - Icon, mime type, size, download button, image preview
- Error Object - Error styling, stack trace, details expansion
interface QuickViewOptions {
// Default depth to auto-expand (default: 2)
maxAutoExpandDepth?: number
// Max string length before truncation (default: 500)
maxStringLength?: number
// Max array items in collapsed preview (default: 5)
maxArrayPreview?: number
// Show copy buttons on hover (default: true)
showCopyButtons?: boolean
// Custom renderers to add/override
renderers?: RegisteredRenderer[]
// Handler for file downloads (cloud storage support)
onDownload?: (file: FileObject) => void | Promise<void>
}<template>
<QuickView
:value="workflowOutput"
:options="{
maxAutoExpandDepth: 3,
onDownload: handleFileDownload
}"
/>
</template>
<script setup>
async function handleFileDownload(file) {
// Call your API to get a signed URL for cloud storage files
const signedUrl = await api.getSignedUrl(file.url)
window.open(signedUrl, '_blank')
}
</script>Register custom renderers for your domain types:
import {
QuickView,
RendererRegistry,
createDefaultRegistry
} from '@quickflo/quickview'
// Create a registry with default renderers
const registry = createDefaultRegistry()
// Add a custom renderer
registry.register({
name: 'user-avatar',
priority: 100,
tester: (value) => {
return (
typeof value === 'object' &&
value !== null &&
'avatarUrl' in value &&
'displayName' in value
)
},
component: UserAvatarRenderer
})<template>
<QuickView :value="data" :registry="registry" />
</template>The file renderer detects objects with this shape:
interface FileObject {
url?: string // gs://, s3://, sftp://, or https://
content?: string // File content (base64 or text)
filename?: string // Display name
mimeType?: string // MIME type for icon/preview
size?: number // Size in bytes
isBase64?: boolean // Whether content is base64 encoded
metadata?: Record<string, unknown>
}QuickView uses CSS custom properties for theming:
.quickview {
--qv-bg: #ffffff;
--qv-bg-hover: #f8fafc;
--qv-bg-selected: #e0e7ff;
--qv-border: #e2e8f0;
--qv-text: #1e293b;
--qv-text-muted: #64748b;
--qv-text-subtle: #94a3b8;
--qv-info: #6366f1;
--qv-success: #22c55e;
--qv-warning: #f59e0b;
--qv-error: #ef4444;
--qv-mono: 'SF Mono', Menlo, Monaco, monospace;
}# Install dependencies
pnpm install
# Start dev server with demo
pnpm dev
# Build library
pnpm build
# Type check
pnpm typecheckMIT