{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "signalframeux", "homepage": "https://signalframeux.com", "items": [ { "name": "sf-button", "type": "registry:ui", "title": "SF Button", "description": "Brutalist button with signal/ghost/signal intents, 2px borders, invert-on-hover", "dependencies": ["class-variance-authority"], "registryDependencies": ["button"], "files": [ { "path": "components/sf/sf-button.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-card", "type": "registry:ui", "title": "SF Card", "description": "Industrial card with 2px borders, hover border highlight", "registryDependencies": ["card"], "files": [ { "path": "components/sf/sf-card.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-input", "type": "registry:ui", "title": "SF Input", "description": "Brutalist text input with 2px border-bottom, mono uppercase placeholder", "registryDependencies": ["input"], "files": [ { "path": "components/sf/sf-input.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-badge", "type": "registry:ui", "title": "SF Badge", "description": "Flat badge with default/primary/outline/signal intents", "dependencies": ["class-variance-authority"], "registryDependencies": ["badge"], "files": [ { "path": "components/sf/sf-badge.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-tabs", "type": "registry:ui", "title": "SF Tabs", "description": "Industrial tabs with 2px borders, invert active state", "registryDependencies": ["tabs"], "files": [ { "path": "components/sf/sf-tabs.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-table", "type": "registry:ui", "title": "SF Table", "description": "Brutalist data table with inverted header, mono text", "registryDependencies": ["table"], "files": [ { "path": "components/sf/sf-table.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-separator", "type": "registry:ui", "title": "SF Separator", "description": "2px foreground-colored divider", "registryDependencies": ["separator"], "files": [ { "path": "components/sf/sf-separator.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-tooltip", "type": "registry:ui", "title": "SF Tooltip", "description": "Industrial tooltip with inverted colors, no radius", "registryDependencies": ["tooltip"], "files": [ { "path": "components/sf/sf-tooltip.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-dialog", "type": "registry:ui", "title": "SF Dialog", "description": "Brutalist modal dialog with 2px borders, no radius, no shadow", "registryDependencies": ["dialog"], "files": [ { "path": "components/sf/sf-dialog.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-sheet", "type": "registry:ui", "title": "SF Sheet", "description": "Industrial slide-out panel with 2px borders", "registryDependencies": ["sheet"], "files": [ { "path": "components/sf/sf-sheet.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-dropdown-menu", "type": "registry:ui", "title": "SF Dropdown Menu", "description": "Brutalist dropdown with inverted focus state, mono text", "registryDependencies": ["dropdown-menu"], "files": [ { "path": "components/sf/sf-dropdown-menu.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-toggle", "type": "registry:ui", "title": "SF Toggle", "description": "Industrial toggle button with invert-on-press", "dependencies": ["class-variance-authority"], "registryDependencies": ["toggle"], "files": [ { "path": "components/sf/sf-toggle.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-slider", "type": "registry:ui", "title": "SF Slider", "description": "Flat slider with square thumb, 3px track, no radius", "registryDependencies": ["slider"], "files": [ { "path": "components/sf/sf-slider.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-command", "type": "registry:ui", "title": "SF Command", "description": "Industrial command palette with inverted selection, mono text", "registryDependencies": ["command"], "files": [ { "path": "components/sf/sf-command.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-skeleton", "type": "registry:ui", "title": "SF Skeleton", "description": "Flat skeleton with scanline sweep animation", "registryDependencies": ["skeleton"], "files": [ { "path": "components/sf/sf-skeleton.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-popover", "type": "registry:ui", "title": "SF Popover", "description": "Brutalist popover with 2px borders, no radius, no shadow", "registryDependencies": ["popover"], "files": [ { "path": "components/sf/sf-popover.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-scroll-area", "type": "registry:ui", "title": "SF Scroll Area", "description": "Scroll area with flat square scrollbar thumb", "registryDependencies": ["scroll-area"], "files": [ { "path": "components/sf/sf-scroll-area.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "circuit-divider", "type": "registry:ui", "title": "Circuit Divider", "description": "DrawSVG circuit-board divider with animated paths and junction dots", "dependencies": ["gsap"], "files": [ { "path": "components/animation/circuit-divider.tsx", "type": "registry:ui" } ], "meta": { "layer": "signal", "pattern": "C" } }, { "name": "vhs-overlay", "type": "registry:ui", "title": "VHS Overlay", "description": "CRT scanlines, noise flicker, glitch bursts, and chromatic aberration overlay", "dependencies": ["gsap"], "files": [ { "path": "components/animation/vhs-overlay.tsx", "type": "registry:ui" } ], "meta": { "layer": "signal", "pattern": "C" } }, { "name": "hero-mesh", "type": "registry:ui", "title": "Hero Mesh", "description": "Interactive mesh grid background that responds to cursor movement", "files": [ { "path": "components/animation/hero-mesh.tsx", "type": "registry:ui" } ], "meta": { "layer": "signal", "pattern": "C" } }, { "name": "scramble-text", "type": "registry:ui", "title": "Scramble Text", "description": "Text scramble/decode animation effect for headings and labels", "files": [ { "path": "components/animation/scramble-text.tsx", "type": "registry:ui" } ], "meta": { "layer": "signal", "pattern": "C" } }, { "name": "sf-label", "type": "registry:ui", "title": "SF Label", "description": "Mono uppercase label with wider tracking", "registryDependencies": ["label"], "files": [ { "path": "components/sf/sf-label.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-select", "type": "registry:ui", "title": "SF Select", "description": "Brutalist select with 2px borders, no radius, inverted focus state", "registryDependencies": ["select"], "files": [ { "path": "components/sf/sf-select.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-checkbox", "type": "registry:ui", "title": "SF Checkbox", "description": "Square checkbox with 2px borders, primary checked state", "registryDependencies": ["checkbox"], "files": [ { "path": "components/sf/sf-checkbox.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-radio-group", "type": "registry:ui", "title": "SF Radio Group", "description": "Square radio buttons with 2px borders, no radius", "registryDependencies": ["radio-group"], "files": [ { "path": "components/sf/sf-radio-group.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-switch", "type": "registry:ui", "title": "SF Switch", "description": "Square switch with 2px borders, primary checked state", "registryDependencies": ["switch"], "files": [ { "path": "components/sf/sf-switch.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-textarea", "type": "registry:ui", "title": "SF Textarea", "description": "Brutalist textarea with bottom border only, mono uppercase text", "registryDependencies": ["textarea"], "files": [ { "path": "components/sf/sf-textarea.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-container", "type": "registry:ui", "title": "SF Container", "description": "Responsive page container enforcing max-width tokens and responsive gutters. FRAME layer.", "dependencies": ["class-variance-authority"], "files": [ { "path": "components/sf/sf-container.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "C" } }, { "name": "sf-section", "type": "registry:ui", "title": "SF Section", "description": "Page section with data attributes for animation and bgShift color palette. FRAME layer.", "files": [ { "path": "components/sf/sf-section.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "C" } }, { "name": "sf-grid", "type": "registry:ui", "title": "SF Grid", "description": "Responsive grid with blessed column counts and gap tokens. FRAME layer.", "dependencies": ["class-variance-authority"], "files": [ { "path": "components/sf/sf-grid.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "C" } }, { "name": "sf-stack", "type": "registry:ui", "title": "SF Stack", "description": "Flex stack with blessed gap tokens for vertical/horizontal layouts. FRAME layer.", "dependencies": ["class-variance-authority"], "files": [ { "path": "components/sf/sf-stack.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "C" } }, { "name": "sf-text", "type": "registry:ui", "title": "SF Text", "description": "Polymorphic text component with semantic typography aliases. FRAME layer.", "files": [ { "path": "components/sf/sf-text.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "C" } }, { "name": "sf-theme", "type": "registry:style", "title": "SF Theme", "description": "SignalframeUX token system — OKLCH color palette, zero-radius, motion tokens, SIGNAL runtime vars. Token-only installation, no component files.", "dependencies": [], "cssVars": { "theme": { "color-background": "oklch(1 0 0)", "color-foreground": "oklch(0.145 0 0)", "color-card": "oklch(1 0 0)", "color-card-foreground": "oklch(0.145 0 0)", "color-primary": "oklch(0.65 0.3 350)", "color-primary-foreground": "oklch(0.985 0 0)", "color-secondary": "oklch(0.970 0.005 298)", "color-secondary-foreground": "oklch(0.205 0 0)", "color-muted": "oklch(0.930 0.005 298)", "color-muted-foreground": "oklch(0.460 0.010 298)", "color-accent": "oklch(0.930 0.005 298)", "color-accent-foreground": "oklch(0.205 0 0)", "color-destructive": "oklch(0.550 0.180 25)", "color-border": "oklch(0.205 0 0)", "color-input": "oklch(0.205 0 0)", "color-ring": "oklch(0.65 0.3 350)", "radius": "0px" }, "light": { "signal-intensity": "0.5", "signal-speed": "1", "signal-accent": "0" }, "dark": { "color-background": "oklch(0.145 0 0)", "color-foreground": "oklch(0.985 0 0)", "color-card": "oklch(0.205 0 0)", "color-card-foreground": "oklch(0.985 0 0)", "color-border": "oklch(0.400 0 0)", "color-input": "oklch(0.400 0 0)" } }, "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-collapsible", "type": "registry:ui", "title": "SF Collapsible", "description": "Toggleable content panel with asChild trigger pattern", "registryDependencies": ["collapsible"], "files": [ { "path": "components/sf/sf-collapsible.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-breadcrumb", "type": "registry:ui", "title": "SF Breadcrumb", "description": "Navigation hierarchy breadcrumb with monospace / separator, Server Component", "registryDependencies": ["breadcrumb"], "files": [ { "path": "components/sf/sf-breadcrumb.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-avatar", "type": "registry:ui", "title": "SF Avatar", "description": "Square user avatar with Radix fallback chain: image -> initials -> icon", "registryDependencies": ["avatar"], "files": [ { "path": "components/sf/sf-avatar.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-alert", "type": "registry:ui", "title": "SF Alert", "description": "Inline feedback banner with CVA intent variants: info, warning, destructive, success", "dependencies": ["class-variance-authority"], "registryDependencies": ["alert"], "files": [ { "path": "components/sf/sf-alert.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-alert-dialog", "type": "registry:ui", "title": "SF AlertDialog", "description": "Focus-trapped confirmation dialog with loading state on confirm action", "registryDependencies": ["alert-dialog"], "files": [ { "path": "components/sf/sf-alert-dialog.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-empty-state", "type": "registry:ui", "title": "SF EmptyState", "description": "Designed empty state with Bayer dither texture and optional ScrambleText", "files": [ { "path": "components/sf/sf-empty-state.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "C" } }, { "name": "sf-status-dot", "type": "registry:ui", "title": "SF StatusDot", "description": "8px square presence indicator with GSAP pulse on active state", "dependencies": ["gsap"], "files": [ { "path": "components/sf/sf-status-dot.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "C" } }, { "name": "sf-accordion", "type": "registry:ui", "title": "SF Accordion", "description": "SIGNAL accordion with GSAP stagger on expand, reverse on collapse, reduced-motion guard", "dependencies": ["gsap"], "registryDependencies": ["accordion"], "files": [ { "path": "components/sf/sf-accordion.tsx", "type": "registry:ui" } ], "meta": { "layer": "signal", "pattern": "A" } }, { "name": "sf-progress", "type": "registry:ui", "title": "SF Progress", "description": "SIGNAL progress bar with GSAP fill tween, reduced-motion instant set", "dependencies": ["gsap"], "registryDependencies": ["progress"], "files": [ { "path": "components/sf/sf-progress.tsx", "type": "registry:ui" } ], "meta": { "layer": "signal", "pattern": "A" } }, { "name": "sf-toast", "type": "registry:ui", "title": "SF Toast", "description": "System notification toast with GSAP slide entrance, Sonner engine, bottom-left positioning", "dependencies": ["sonner", "gsap", "lucide-react"], "registryDependencies": [], "files": [ { "path": "components/sf/sf-toast.tsx", "type": "registry:ui" } ], "meta": { "layer": "signal", "pattern": "A" } }, { "name": "sf-toggle-group", "type": "registry:ui", "title": "SF ToggleGroup", "description": "Exclusive or multi-select toggle group with CVA intent variants, industrial edge-to-edge layout", "dependencies": ["class-variance-authority"], "registryDependencies": ["toggle-group"], "files": [ { "path": "components/sf/sf-toggle-group.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-pagination", "type": "registry:ui", "title": "SF Pagination", "description": "Minimal numbered page navigation with previous/next, Server Component, no ellipsis", "registryDependencies": ["pagination"], "files": [ { "path": "components/sf/sf-pagination.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-stepper", "type": "registry:ui", "title": "SF Stepper", "description": "Vertical multi-step flow with SFProgress connectors and per-step error state", "dependencies": ["gsap", "lucide-react"], "registryDependencies": [], "files": [ { "path": "components/sf/sf-stepper.tsx", "type": "registry:ui" } ], "meta": { "layer": "signal", "pattern": "C" } }, { "name": "sf-navigation-menu", "type": "registry:ui", "title": "SF NavigationMenu", "description": "Site navigation with desktop flyout panels and mobile SFSheet collapse, industrial DU/TDR styling", "dependencies": ["lucide-react"], "registryDependencies": ["navigation-menu", "sheet"], "files": [ { "path": "components/sf/sf-navigation-menu.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-calendar", "type": "registry:ui", "title": "SF Calendar", "description": "Lazy-loaded date calendar with react-day-picker. Import via next/dynamic only — NOT in sf/index.ts barrel.", "dependencies": ["react-day-picker", "date-fns"], "registryDependencies": ["calendar", "button"], "files": [ { "path": "components/sf/sf-calendar.tsx", "type": "registry:ui" }, { "path": "components/sf/sf-calendar-lazy.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "B", "heavy": true } }, { "name": "sf-menubar", "type": "registry:ui", "title": "SF Menubar", "description": "Desktop application menubar with Radix primitives. Import via next/dynamic only — NOT in sf/index.ts barrel.", "registryDependencies": ["menubar"], "files": [ { "path": "components/sf/sf-menubar.tsx", "type": "registry:ui" }, { "path": "components/sf/sf-menubar-lazy.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "B", "heavy": true } }, { "name": "sf-drawer", "type": "registry:ui", "title": "SF Drawer", "description": "Bottom-sheet overlay via vaul. Lazy-loaded via next/dynamic (ssr: false). Import sf-drawer-lazy.tsx — NOT from sf/index.ts barrel.", "dependencies": ["vaul"], "registryDependencies": ["drawer"], "files": [ { "path": "components/sf/sf-drawer.tsx", "type": "registry:ui" }, { "path": "components/sf/sf-drawer-lazy.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "B", "heavy": true } }, { "name": "sf-input-group", "type": "registry:ui", "title": "SF InputGroup", "description": "Grouped input with inline addons and action buttons. Zero border-radius on all sub-elements.", "registryDependencies": ["input-group"], "files": [ { "path": "components/sf/sf-input-group.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-hover-card", "type": "registry:ui", "title": "SF HoverCard", "description": "FRAME-only hover/focus preview panel. Sharp 2px border, no radius, no shadow. Keyboard accessible via Radix.", "registryDependencies": ["hover-card"], "files": [ { "path": "components/sf/sf-hover-card.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } }, { "name": "sf-input-otp", "type": "registry:ui", "title": "SF InputOTP", "description": "OTP verification input with individual character slots. Zero border-radius, mono font, keyboard navigable.", "registryDependencies": ["input-otp"], "files": [ { "path": "components/sf/sf-input-otp.tsx", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" } } ] }