{"$schema":"https://ui.shadcn.com/schema/registry.json","name":"onycx","homepage":"https://ui.onycx.dev","items":[{"name":"smooth-scroll","type":"registry:component","title":"Smooth Scroll","description":"Set up Lenis once and share its scroll timing with GSAP ScrollTrigger.","dependencies":["lenis","gsap"],"files":[{"path":"registry/onycx/smooth-scroll.tsx","type":"registry:component","target":"@components/onycx/smooth-scroll.tsx"}]},{"name":"motion-toggle","type":"registry:component","title":"Motion Toggle","description":"Let visitors pause site animations and remember their choice. The hook shares that preference with your components.","dependencies":[],"files":[{"path":"registry/onycx/motion-toggle.tsx","type":"registry:component","target":"@components/onycx/motion-toggle.tsx"}]},{"name":"scroll-word-highlight","type":"registry:component","title":"Scroll Word Highlight","description":"Highlight a sentence word by word as the reader scrolls past it.","dependencies":["gsap"],"files":[{"path":"registry/onycx/scroll-word-highlight.tsx","type":"registry:component","target":"@components/onycx/scroll-word-highlight.tsx"}]},{"name":"masked-line-reveal","type":"registry:component","title":"Masked Line Reveal","description":"Reveal a heading one line at a time, with a small tilt and blur as each line settles.","dependencies":[],"files":[{"path":"registry/onycx/masked-line-reveal.tsx","type":"registry:component","target":"@components/onycx/masked-line-reveal.tsx"}]},{"name":"split-text-reveal","type":"registry:component","title":"Split Text Reveal","description":"Reveal a heading letter by letter with a flip, or word by word with a short rise.","dependencies":["motion"],"files":[{"path":"registry/onycx/split-text-reveal.tsx","type":"registry:component","target":"@components/onycx/split-text-reveal.tsx"}]},{"name":"highlight-wipe","type":"registry:component","title":"Highlight Wipe","description":"Reveal a heading with a left-to-right highlight as the section scrolls into view.","dependencies":["gsap"],"files":[{"path":"registry/onycx/highlight-wipe.tsx","type":"registry:component","target":"@components/onycx/highlight-wipe.tsx"}]},{"name":"fit-word","type":"registry:component","title":"Fit Word","description":"Fit a display word to a chosen share of its container using the width of the loaded font.","dependencies":[],"files":[{"path":"registry/onycx/fit-word.tsx","type":"registry:component","target":"@components/onycx/fit-word.tsx"}]},{"name":"shimmer-text","type":"registry:component","title":"Shimmer Text","description":"Animate a gold-to-ivory highlight across a short line of display text.","dependencies":[],"files":[{"path":"registry/onycx/shimmer-text.tsx","type":"registry:component","target":"@components/onycx/shimmer-text.tsx"}]},{"name":"outline-depth-statement","type":"registry:component","title":"Outline Depth Statement","description":"Layer solid and outlined words that move at different speeds as you scroll.","dependencies":[],"files":[{"path":"registry/onycx/outline-depth-statement.tsx","type":"registry:component","target":"@components/onycx/outline-depth-statement.tsx"}]},{"name":"inline-image-statement","type":"registry:component","title":"Inline Image Statement","description":"Place rounded photos between phrases in a headline and bring the text into contrast as you scroll.","dependencies":["gsap"],"files":[{"path":"registry/onycx/inline-image-statement.tsx","type":"registry:component","target":"@components/onycx/inline-image-statement.tsx"}]},{"name":"pill-icon-button","type":"registry:component","title":"Pill Icon Button","description":"A link or button with a round icon that rotates on hover. Choose from four styles and three sizes.","dependencies":[],"files":[{"path":"registry/onycx/pill-icon-button.tsx","type":"registry:component","target":"@components/onycx/pill-icon-button.tsx"}]},{"name":"split-icon-button","type":"registry:component","title":"Split Icon Button","description":"A button with a separate icon cell. On hover, the button lifts and the icon shifts toward the corner.","dependencies":[],"files":[{"path":"registry/onycx/split-icon-button.tsx","type":"registry:component","target":"@components/onycx/split-icon-button.tsx"}]},{"name":"sheen-button","type":"registry:component","title":"Sheen Button","description":"Add a moving highlight to a rounded button on hover. Four styles and three sizes are available.","dependencies":[],"files":[{"path":"registry/onycx/sheen-button.tsx","type":"registry:component","target":"@components/onycx/sheen-button.tsx"}]},{"name":"expanding-arrow-button","type":"registry:component","title":"Expanding Arrow Button","description":"A pill button that makes room for an arrow on hover or keyboard focus.","dependencies":[],"files":[{"path":"registry/onycx/expanding-arrow-button.tsx","type":"registry:component","target":"@components/onycx/expanding-arrow-button.tsx"}]},{"name":"magnetic-button","type":"registry:component","title":"Magnetic Button","description":"A pill button that moves toward a nearby pointer and springs back when the pointer leaves.","dependencies":["gsap"],"files":[{"path":"registry/onycx/magnetic-button.tsx","type":"registry:component","target":"@components/onycx/magnetic-button.tsx"}]},{"name":"arrow-link","type":"registry:component","title":"Arrow Link","description":"A text link that gives its arrow more room and changes color on hover or keyboard focus.","dependencies":[],"files":[{"path":"registry/onycx/arrow-link.tsx","type":"registry:component","target":"@components/onycx/arrow-link.tsx"}]},{"name":"floating-pill-navbar","type":"registry:component","title":"Floating Pill Navbar","description":"A transparent header that gains a rounded background as you scroll. On phones, links open in a side menu.","dependencies":[],"files":[{"path":"registry/onycx/floating-pill-navbar.tsx","type":"registry:component","target":"@components/onycx/floating-pill-navbar.tsx"}]},{"name":"expanding-side-rail","type":"registry:component","title":"Expanding Side Rail","description":"A compact sidebar that reveals its navigation labels when you hover over it or focus a link.","dependencies":[],"files":[{"path":"registry/onycx/expanding-side-rail.tsx","type":"registry:component","target":"@components/onycx/expanding-side-rail.tsx"}]},{"name":"scroll-progress","type":"registry:component","title":"Scroll Progress","description":"Show how far a reader has scrolled with a thin progress bar at the top of the page.","dependencies":["motion"],"files":[{"path":"registry/onycx/scroll-progress.tsx","type":"registry:component","target":"@components/onycx/scroll-progress.tsx"}]},{"name":"editorial-hero","type":"registry:component","title":"Editorial Hero","description":"Pair a large headline with a framed photo, captions, and an inquiry link.","dependencies":["gsap"],"files":[{"path":"registry/onycx/editorial-hero.tsx","type":"registry:component","target":"@components/onycx/editorial-hero.tsx"}]},{"name":"ghost-word-hero","type":"registry:component","title":"Ghost Word Hero","description":"Place a cutout image in front of an oversized word, with a separate headline and call to action.","dependencies":["gsap"],"files":[{"path":"registry/onycx/ghost-word-hero.tsx","type":"registry:component","target":"@components/onycx/ghost-word-hero.tsx"}]},{"name":"seam-hero","type":"registry:component","title":"Seam Hero","description":"Frame a hero photo with a curved edge around a round button, then introduce two featured projects below.","dependencies":["gsap"],"files":[{"path":"registry/onycx/seam-hero.tsx","type":"registry:component","target":"@components/onycx/seam-hero.tsx"}]},{"name":"crossfade-hero","type":"registry:component","title":"Crossfade Hero","description":"Cycle through full-width hero photos and headlines. Visitors can choose a slide or pause playback.","dependencies":["gsap"],"files":[{"path":"registry/onycx/crossfade-hero.tsx","type":"registry:component","target":"@components/onycx/crossfade-hero.tsx"}]},{"name":"framed-video-hero","type":"registry:component","title":"Framed Video Hero","description":"A framed hero with a poster, an ambient video, and a control to pause the motion.","dependencies":["gsap"],"files":[{"path":"registry/onycx/framed-video-hero.tsx","type":"registry:component","target":"@components/onycx/framed-video-hero.tsx"}]},{"name":"stacking-cards","type":"registry:component","title":"Stacking Cards","description":"Show a process in sticky cards. As each card slides into place, the previous card tilts back.","dependencies":["gsap"],"files":[{"path":"registry/onycx/stacking-cards.tsx","type":"registry:component","target":"@components/onycx/stacking-cards.tsx"}]},{"name":"exhibition-showcase","type":"registry:component","title":"Exhibition Showcase","description":"Give each product its own image, headline, and lighting in a pinned showcase. Visitors can jump straight to a product.","dependencies":["gsap"],"files":[{"path":"registry/onycx/exhibition-showcase.tsx","type":"registry:component","target":"@components/onycx/exhibition-showcase.tsx"}]},{"name":"pinned-card-deck","type":"registry:component","title":"Pinned Card Deck","description":"Keep a heading in view while photo cards rise into place beside it and the previous card tips back.","dependencies":["gsap"],"files":[{"path":"registry/onycx/pinned-card-deck.tsx","type":"registry:component","target":"@components/onycx/pinned-card-deck.tsx"}]},{"name":"horizontal-rail","type":"registry:component","title":"Horizontal Rail","description":"Move a row of cards sideways as the page scrolls. A native horizontal scroller is available as a fallback.","dependencies":["gsap"],"files":[{"path":"registry/onycx/horizontal-rail.tsx","type":"registry:component","target":"@components/onycx/horizontal-rail.tsx"}]},{"name":"overlap-sections","type":"registry:component","title":"Overlap Sections","description":"Stack page sections so the next rounded panel slides over the one you just read.","dependencies":["gsap"],"files":[{"path":"registry/onycx/overlap-sections.tsx","type":"registry:component","target":"@components/onycx/overlap-sections.tsx"}]},{"name":"card-fan","type":"registry:component","title":"Card Fan","description":"Tell a story in chapters. Three cards fan out on a sticky stage and rearrange as you scroll.","dependencies":["gsap"],"files":[{"path":"registry/onycx/card-fan.tsx","type":"registry:component","target":"@components/onycx/card-fan.tsx"}]},{"name":"device-spotlight","type":"registry:component","title":"Device Spotlight","description":"Present a project on desktop and phone mockups that straighten as you scroll past the description.","dependencies":["gsap"],"files":[{"path":"registry/onycx/device-spotlight.tsx","type":"registry:component","target":"@components/onycx/device-spotlight.tsx"}]},{"name":"ring-carousel","type":"registry:component","title":"Ring Carousel","description":"Browse portraits and headlines around a rotating dashed ring in a pinned scroll section.","dependencies":["gsap"],"files":[{"path":"registry/onycx/ring-carousel.tsx","type":"registry:component","target":"@components/onycx/ring-carousel.tsx"}]},{"name":"sticky-scrollytelling","type":"registry:component","title":"Sticky Scrollytelling","description":"Keep a photo in view while alternating text cards tell the story alongside it.","dependencies":[],"files":[{"path":"registry/onycx/sticky-scrollytelling.tsx","type":"registry:component","target":"@components/onycx/sticky-scrollytelling.tsx"}]},{"name":"parallax-image","type":"registry:component","title":"Parallax Image","description":"Make a photo drift inside a fixed-ratio frame as the page scrolls, with an optional caption.","dependencies":["gsap"],"files":[{"path":"registry/onycx/parallax-image.tsx","type":"registry:component","target":"@components/onycx/parallax-image.tsx"}]},{"name":"scroll-marquee-word","type":"registry:component","title":"Scroll Marquee Word","description":"Drift an oversized word behind a short statement as the page scrolls.","dependencies":["motion"],"files":[{"path":"registry/onycx/scroll-marquee-word.tsx","type":"registry:component","target":"@components/onycx/scroll-marquee-word.tsx"}]},{"name":"process-ledger","type":"registry:component","title":"Process Ledger","description":"Show project phases and deliverables beside a sticky introduction.","dependencies":[],"files":[{"path":"registry/onycx/process-ledger.tsx","type":"registry:component","target":"@components/onycx/process-ledger.tsx"}]},{"name":"coverflow-carousel","type":"registry:component","title":"Coverflow Carousel","description":"Browse a gallery in a five-card perspective carousel with arrow controls, a slide counter, and a link to the collection.","dependencies":[],"files":[{"path":"registry/onycx/coverflow-carousel.tsx","type":"registry:component","target":"@components/onycx/coverflow-carousel.tsx"}]},{"name":"tilt-card","type":"registry:component","title":"Tilt Card","description":"A product card that tilts toward the pointer, with an image zoom and space for product notes.","dependencies":["motion"],"files":[{"path":"registry/onycx/tilt-card.tsx","type":"registry:component","target":"@components/onycx/tilt-card.tsx"}]},{"name":"bento-grid","type":"registry:component","title":"Bento Grid","description":"A grid of tiles that move into place as you scroll through the section.","dependencies":["motion"],"files":[{"path":"registry/onycx/bento-grid.tsx","type":"registry:component","target":"@components/onycx/bento-grid.tsx"}]},{"name":"pricing-plans","type":"registry:component","title":"Pricing Plans","description":"Compare three pricing plans with a market switch and a highlighted plan.","dependencies":["gsap"],"files":[{"path":"registry/onycx/pricing-plans.tsx","type":"registry:component","target":"@components/onycx/pricing-plans.tsx"}]},{"name":"project-gallery","type":"registry:component","title":"Project Gallery","description":"Filter a two-column portfolio and open each project in a dialog with keyboard navigation.","dependencies":["gsap"],"files":[{"path":"registry/onycx/project-gallery.tsx","type":"registry:component","target":"@components/onycx/project-gallery.tsx"}]},{"name":"hover-reveal-list","type":"registry:component","title":"Hover Reveal List","description":"Preview a service by hovering over its row or moving keyboard focus to it. The image and description change together.","dependencies":[],"files":[{"path":"registry/onycx/hover-reveal-list.tsx","type":"registry:component","target":"@components/onycx/hover-reveal-list.tsx"}]},{"name":"product-card","type":"registry:component","title":"Product Card","description":"Show a second product photo on hover, with favorite and quick-add controls.","dependencies":[],"files":[{"path":"registry/onycx/product-card.tsx","type":"registry:component","target":"@components/onycx/product-card.tsx"}]},{"name":"arc-selector","type":"registry:component","title":"Arc Selector","description":"Arrange products in a semicircle. Hover a thumbnail or select it with the keyboard to bring that product into the center.","dependencies":["gsap"],"files":[{"path":"registry/onycx/arc-selector.tsx","type":"registry:component","target":"@components/onycx/arc-selector.tsx"}]},{"name":"contact-sheet","type":"registry:component","title":"Contact Sheet","description":"Arrange images and captions on a staggered editorial contact sheet.","dependencies":[],"files":[{"path":"registry/onycx/contact-sheet.tsx","type":"registry:component","target":"@components/onycx/contact-sheet.tsx"}]},{"name":"material-finish-study","type":"registry:component","title":"Material Finish Study","description":"Compare three surface finishes and drag a sample to inspect its angle.","dependencies":[],"files":[{"path":"registry/onycx/material-finish-study.tsx","type":"registry:component","target":"@components/onycx/material-finish-study.tsx"}]},{"name":"project-orbit","type":"registry:component","title":"Project Orbit","description":"Browse three project cards on a rotating perspective stage.","dependencies":[],"files":[{"path":"registry/onycx/project-orbit.tsx","type":"registry:component","target":"@components/onycx/project-orbit.tsx"}]},{"name":"command-center","type":"registry:component","title":"Command Center","description":"Show how a dashboard might work inside a landing page, with five tabs for overview, quality, transforms, audit, and exports.","dependencies":["motion"],"files":[{"path":"registry/onycx/command-center.tsx","type":"registry:component","target":"@components/onycx/command-center.tsx"}]},{"name":"progress-ring","type":"registry:component","title":"Progress Ring","description":"Display a percentage in a circular meter that fills as it comes into view.","dependencies":[],"files":[{"path":"registry/onycx/progress-ring.tsx","type":"registry:component","target":"@components/onycx/progress-ring.tsx"}]},{"name":"status-timeline","type":"registry:component","title":"Status Timeline","description":"Show the progress of an incident or task with completed and upcoming steps connected by a line.","dependencies":[],"files":[{"path":"registry/onycx/status-timeline.tsx","type":"registry:component","target":"@components/onycx/status-timeline.tsx"}]},{"name":"bottom-tab-bar","type":"registry:component","title":"Bottom Tab Bar","description":"A mobile navigation bar with icons and labels. The selected tab gets a colored icon, a pill background, and a dot.","dependencies":["motion"],"files":[{"path":"registry/onycx/bottom-tab-bar.tsx","type":"registry:component","target":"@components/onycx/bottom-tab-bar.tsx"}]},{"name":"curtain-preloader","type":"registry:component","title":"Curtain Preloader","description":"Show loading progress behind an opening curtain. Visitors can skip the intro, and you can choose a wipe, arch, or fade.","dependencies":[],"files":[{"path":"registry/onycx/curtain-preloader.tsx","type":"registry:component","target":"@components/onycx/curtain-preloader.tsx"}]},{"name":"shutter-preloader","type":"registry:component","title":"Shutter Preloader","description":"Open a two-panel intro after the fonts and first-screen images are ready.","dependencies":["gsap"],"files":[{"path":"registry/onycx/shutter-preloader.tsx","type":"registry:component","target":"@components/onycx/shutter-preloader.tsx"}]},{"name":"faq-accordion","type":"registry:component","title":"FAQ Accordion","description":"A two-column FAQ with native disclosure controls that open and close each answer.","dependencies":[],"files":[{"path":"registry/onycx/faq-accordion.tsx","type":"registry:component","target":"@components/onycx/faq-accordion.tsx"}]},{"name":"inquiry-form","type":"registry:component","title":"Inquiry Form","description":"Collect an inquiry alongside a photo and contact details. Copy the message or connect the form to your own submit handler.","dependencies":["gsap"],"files":[{"path":"registry/onycx/inquiry-form.tsx","type":"registry:component","target":"@components/onycx/inquiry-form.tsx"}]},{"name":"noise-overlay","type":"registry:component","title":"Noise Overlay","description":"Add a subtle, static film-grain texture with an SVG overlay.","dependencies":[],"files":[{"path":"registry/onycx/noise-overlay.tsx","type":"registry:component","target":"@components/onycx/noise-overlay.tsx"}]},{"name":"cursor-glow","type":"registry:component","title":"Cursor Glow","description":"Add a soft amber and burgundy glow that follows the pointer with a spring.","dependencies":["motion"],"files":[{"path":"registry/onycx/cursor-glow.tsx","type":"registry:component","target":"@components/onycx/cursor-glow.tsx"}]},{"name":"pointer-cue","type":"registry:component","title":"Pointer Cue","description":"Show a small View label beside the pointer when it passes over a preview image.","dependencies":["gsap"],"files":[{"path":"registry/onycx/pointer-cue.tsx","type":"registry:component","target":"@components/onycx/pointer-cue.tsx"}]},{"name":"grid-glow-background","type":"registry:component","title":"Grid Glow Background","description":"Add a faint grid, a warm glow, and shaded edges behind a hero section.","dependencies":[],"files":[{"path":"registry/onycx/grid-glow-background.tsx","type":"registry:component","target":"@components/onycx/grid-glow-background.tsx"}]},{"name":"marquee-ribbon","type":"registry:component","title":"Marquee Ribbon","description":"A full-width ribbon that loops short phrases with a symbol between each one.","dependencies":[],"files":[{"path":"registry/onycx/marquee-ribbon.tsx","type":"registry:component","target":"@components/onycx/marquee-ribbon.tsx"}]},{"name":"wordmark-footer","type":"registry:component","title":"Wordmark Footer","description":"Close a page with a contact invitation, navigation links, legal details, and a large wordmark.","dependencies":[],"files":[{"path":"registry/onycx/wordmark-footer.tsx","type":"registry:component","target":"@components/onycx/wordmark-footer.tsx"}]},{"name":"faded-grain-wordmark","type":"registry:component","title":"Faded Grain Wordmark","description":"Fill the end of a page with a large serif wordmark, blended grain, and a soft fade.","dependencies":["motion"],"files":[{"path":"registry/onycx/faded-grain-wordmark.tsx","type":"registry:component","target":"@components/onycx/faded-grain-wordmark.tsx"}]}]}