{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "subvisual", "homepage": "https://ui.subvisual.com", "items": [ { "name": "subvisual-theme", "type": "registry:style", "extends": "none", "title": "Subvisual Theme", "description": "Subvisual brand tokens, fonts, and design system foundation.", "dependencies": ["tailwind-merge", "clsx"], "registryDependencies": ["utils", "subvisual-fonts"], "cssVars": { "theme": { "color-primitive-blue-50": "#f9fcff", "color-primitive-blue-100": "#edf8ff", "color-primitive-blue-300": "#84c4ff", "color-primitive-blue-500": "#2191ff", "color-primitive-blue-600": "#045cfc", "color-primitive-blue-700": "#0a46c3", "color-primitive-purple-50": "#fafaff", "color-primitive-purple-100": "#ece8ff", "color-primitive-purple-300": "#c3b1ff", "color-primitive-purple-500": "#9563ff", "color-primitive-purple-600": "#a685ff", "color-primitive-purple-700": "#7c30f7", "color-primitive-indigo-500": "#2421ab", "color-primitive-indigo-700": "#24248b", "color-primitive-pink-200": "#fbd0d9", "color-primitive-pink-400": "#f3809c", "color-primitive-pink-500": "#e94a75", "color-primitive-pink-600": "#d52960", "color-primitive-pink-700": "#b31d50", "color-primitive-neutral-50": "#f7f7f8", "color-primitive-neutral-100": "#eeedf1", "color-primitive-neutral-600": "#717087", "color-primitive-neutral-900": "#403f4c", "color-primitive-neutral-white": "#ffffff", "color-primitive-teal-900": "#074058", "color-primitive-green-500": "#16a34a", "color-primitive-amber-500": "#d97706", "color-primary": "var(--color-primitive-blue-600)", "color-primary-hover": "var(--color-primitive-blue-700)", "color-primary-light": "var(--color-primitive-blue-100)", "color-primary-subtle": "var(--color-primitive-blue-50)", "color-secondary": "var(--color-primitive-purple-500)", "color-secondary-hover": "var(--color-primitive-purple-700)", "color-secondary-light": "var(--color-primitive-purple-100)", "color-secondary-subtle": "var(--color-primitive-purple-50)", "color-accent": "var(--color-primitive-indigo-500)", "color-accent-hover": "var(--color-primitive-indigo-700)", "color-destructive": "var(--color-primitive-pink-500)", "color-destructive-hover": "var(--color-primitive-pink-600)", "color-destructive-light": "var(--color-primitive-pink-200)", "color-text-primary": "var(--color-primitive-neutral-900)", "color-text-secondary": "var(--color-primitive-neutral-600)", "color-text-inverted": "var(--color-primitive-neutral-white)", "color-surface-page": "var(--color-primitive-neutral-50)", "color-surface-card": "var(--color-primitive-neutral-white)", "color-border-default": "var(--color-primitive-neutral-100)", "color-border-primary": "#d6edff", "color-border-secondary": "var(--color-primitive-purple-100)", "color-success": "var(--color-primitive-green-500)", "color-warning": "var(--color-primitive-amber-500)", "color-error": "var(--color-primitive-pink-500)", "color-info": "var(--color-primitive-blue-600)", "font-heading": "\"Acta\", Georgia, \"Times New Roman\", serif", "font-body": "\"Colfax\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, sans-serif", "text-h1": "4rem", "text-h1--line-height": "1", "text-h2": "3rem", "text-h2--line-height": "3.25rem", "text-h3": "2.25rem", "text-h3--line-height": "2.5rem", "text-h4": "1.5rem", "text-h4--line-height": "1.75rem", "text-body-lg": "1.25rem", "text-body-lg--line-height": "1.5rem", "text-body-md": "1rem", "text-body-md--line-height": "1.25rem", "text-body-sm": "0.875rem", "text-body-sm--line-height": "1.2", "text-body-xsm": "0.75rem", "text-body-xsm--line-height": "0.875rem", "tracking-h1": "-0.08rem", "tracking-h2": "-0.06rem", "tracking-h3": "-0.045rem", "tracking-h4": "-0.03rem", "tracking-body-lg": "-0.025rem", "radius-pill": "2.75rem", "radius-navbar": "12.5rem", "animate-slide-up-in": "slide-up-in 1s ease-out both", "animate-fade-up-in": "fade-up-in 0.6s ease-out both", "animate-scroll": "scroll 20s linear infinite" } }, "css": { "@keyframes slide-up-in": { "from": { "transform": "translateY(100vh)", "opacity": "0" }, "to": { "transform": "translateY(0)", "opacity": "1" } }, "@keyframes fade-up-in": { "from": { "transform": "translateY(20px)", "opacity": "0" }, "to": { "transform": "translateY(0)", "opacity": "1" } }, "@keyframes scroll": { "from": { "transform": "translateX(0)" }, "to": { "transform": "translateX(-50%)" } } } }, { "name": "subvisual-fonts", "type": "registry:file", "title": "Subvisual Fonts", "description": "Acta and Colfax font-face declarations.", "files": [ { "path": "registry/subvisual/lib/subvisual-fonts.css", "type": "registry:lib", "target": "~/styles/subvisual-fonts.css" } ] }, { "name": "utils", "type": "registry:lib", "title": "Utilities", "description": "cn() helper for merging Tailwind classes.", "dependencies": ["clsx", "tailwind-merge"], "files": [ { "path": "registry/subvisual/lib/utils.ts", "type": "registry:lib" } ] }, { "name": "icons", "type": "registry:lib", "title": "Subvisual Icons", "description": "16 SVG icon components and icon registry map.", "files": [ { "path": "registry/subvisual/icons/icons.tsx", "type": "registry:lib" } ] }, { "name": "button", "type": "registry:ui", "title": "Button", "description": "Polymorphic button with filled, outline, and ghost variants in primary, secondary, and destructive colors.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/button.tsx", "type": "registry:component" } ] }, { "name": "input", "type": "registry:ui", "title": "Input", "description": "Text input with label, error, and hint support.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/input.tsx", "type": "registry:component" } ] }, { "name": "textarea", "type": "registry:ui", "title": "Textarea", "description": "Textarea with label, error, and hint support.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/textarea.tsx", "type": "registry:component" } ] }, { "name": "select", "type": "registry:ui", "title": "Select", "description": "Accessible select dropdown built on Radix UI Select.", "dependencies": ["@radix-ui/react-select"], "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/select.tsx", "type": "registry:component" } ] }, { "name": "badge", "type": "registry:ui", "title": "Badge", "description": "Inline badge with 7 semantic color variants.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/badge.tsx", "type": "registry:component" } ] }, { "name": "card", "type": "registry:ui", "title": "Card", "description": "Container card with configurable padding.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/card.tsx", "type": "registry:component" } ] }, { "name": "avatar", "type": "registry:ui", "title": "Avatar", "description": "Avatar with image or initials fallback.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/avatar.tsx", "type": "registry:component" } ] }, { "name": "alert", "type": "registry:ui", "title": "Alert", "description": "Alert box with info, success, warning, and error variants.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/alert.tsx", "type": "registry:component" } ] }, { "name": "toast", "type": "registry:ui", "title": "Toast", "description": "Auto-dismissing toast notification.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/toast.tsx", "type": "registry:component" } ] }, { "name": "tooltip", "type": "registry:ui", "title": "Tooltip", "description": "Accessible tooltip built on Radix UI Tooltip.", "dependencies": ["@radix-ui/react-tooltip"], "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/tooltip.tsx", "type": "registry:component" } ] }, { "name": "modal", "type": "registry:ui", "title": "Modal", "description": "Accessible modal dialog built on Radix UI Dialog.", "dependencies": ["@radix-ui/react-dialog"], "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/modal.tsx", "type": "registry:component" } ] }, { "name": "tabs", "type": "registry:ui", "title": "Tabs", "description": "Tabbed interface built on Radix UI Tabs.", "dependencies": ["@radix-ui/react-tabs"], "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/tabs.tsx", "type": "registry:component" } ] }, { "name": "spinner", "type": "registry:ui", "title": "Spinner", "description": "Animated loading spinner with size and color options.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/spinner.tsx", "type": "registry:component" } ] }, { "name": "skeleton", "type": "registry:ui", "title": "Skeleton", "description": "Loading placeholder with text, circular, and rectangular variants.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/skeleton.tsx", "type": "registry:component" } ] }, { "name": "progress-ring", "type": "registry:ui", "title": "Progress Ring", "description": "Circular SVG progress indicator.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/progress-ring.tsx", "type": "registry:component" } ] }, { "name": "search-input", "type": "registry:ui", "title": "Search Input", "description": "Input with search icon and clear button.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/search-input.tsx", "type": "registry:component" } ] }, { "name": "segmented-control", "type": "registry:ui", "title": "Segmented Control", "description": "Radio-group styled button toggle.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/segmented-control.tsx", "type": "registry:component" } ] }, { "name": "divider", "type": "registry:ui", "title": "Divider", "description": "Horizontal or vertical separator line.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/divider.tsx", "type": "registry:component" } ] }, { "name": "container", "type": "registry:ui", "title": "Container", "description": "Centered max-width layout wrapper.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/container.tsx", "type": "registry:component" } ] }, { "name": "stack", "type": "registry:ui", "title": "Stack", "description": "Flexbox layout utility with direction, gap, align, and justify.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/stack.tsx", "type": "registry:component" } ] }, { "name": "grid", "type": "registry:ui", "title": "Grid", "description": "Responsive CSS grid with column and gap options.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/ui/grid.tsx", "type": "registry:component" } ] }, { "name": "icon", "type": "registry:block", "title": "Icon", "description": "Icon wrapper component with size options.", "registryDependencies": ["utils", "icons"], "files": [ { "path": "registry/subvisual/block/icon.tsx", "type": "registry:component" } ] }, { "name": "navbar", "type": "registry:block", "title": "Navbar", "description": "Responsive navigation bar with mobile menu, logo, links, and CTA.", "registryDependencies": ["utils", "button"], "files": [ { "path": "registry/subvisual/block/navbar.tsx", "type": "registry:component" } ] }, { "name": "sidebar", "type": "registry:block", "title": "Sidebar", "description": "Vertical sidebar with navigation items and user section.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/block/sidebar.tsx", "type": "registry:component" } ] }, { "name": "sub-nav", "type": "registry:block", "title": "Sub Nav", "description": "Secondary vertical navigation with active states.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/block/sub-nav.tsx", "type": "registry:component" } ] }, { "name": "footer", "type": "registry:block", "title": "Footer", "description": "Marketing footer with tagline, social links, link groups, and newsletter.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/block/footer.tsx", "type": "registry:component" } ] }, { "name": "faqs", "type": "registry:block", "title": "FAQs", "description": "FAQ section with numbered questions and answers.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/block/faqs.tsx", "type": "registry:component" } ] }, { "name": "table", "type": "registry:block", "title": "Table", "description": "Generic typed data table with custom renderers and summary row.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/block/table.tsx", "type": "registry:component" } ] }, { "name": "date-navigation", "type": "registry:block", "title": "Date Navigation", "description": "Navigation controls for date-based views with prev/next and today button.", "registryDependencies": ["utils", "icon", "icons"], "files": [ { "path": "registry/subvisual/block/date-navigation.tsx", "type": "registry:component" } ] }, { "name": "week-grid", "type": "registry:block", "title": "Week Grid", "description": "Calendar week grid with day columns and content slots.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/block/week-grid.tsx", "type": "registry:component" } ] }, { "name": "heatmap-grid", "type": "registry:block", "title": "Heatmap Grid", "description": "Data visualization heatmap with grouped columns and color scale.", "registryDependencies": ["utils"], "files": [ { "path": "registry/subvisual/block/heatmap-grid.tsx", "type": "registry:component" } ] } ] }