{"$schema":"https://ui.shadcn.com/schema/registry.json","name":"naik","homepage":"https://components.ishannaik.com","items":[{"name":"button","type":"registry:ui","title":"Button","description":"The button you actually ship: loading, icons, link mode, sodium/water/ghost tones.","registryDependencies":[],"dependencies":["class-variance-authority","@radix-ui/react-slot"],"files":[{"path":"registry/ui/button.tsx","type":"registry:ui","target":"components/naik/button.tsx"}]},{"name":"badge","type":"registry:ui","title":"Badge","description":"Tight status chip. Sodium, water, danger, mute.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/badge.tsx","type":"registry:ui","target":"components/naik/badge.tsx"}]},{"name":"kbd","type":"registry:ui","title":"Kbd","description":"Keyboard key glyph that looks like a keycap, not a rounded pill.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/kbd.tsx","type":"registry:ui","target":"components/naik/kbd.tsx"}]},{"name":"kbd-shortcuts","type":"registry:ui","title":"Kbd shortcuts","description":"List of chords with labels. For command palettes and help overlays.","registryDependencies":["kbd"],"dependencies":[],"files":[{"path":"registry/ui/kbd-shortcuts.tsx","type":"registry:ui","target":"components/naik/kbd-shortcuts.tsx"}]},{"name":"input","type":"registry:ui","title":"Input","description":"Single-line field with a hard edge and a sodium focus ring.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/input.tsx","type":"registry:ui","target":"components/naik/input.tsx"}]},{"name":"textarea","type":"registry:ui","title":"Textarea","description":"Multiline field that grows with content when asked.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/textarea.tsx","type":"registry:ui","target":"components/naik/textarea.tsx"}]},{"name":"switch","type":"registry:ui","title":"Switch","description":"Latch, not a candy pill. Square travel, sodium on-state.","registryDependencies":[],"dependencies":["@radix-ui/react-switch"],"files":[{"path":"registry/ui/switch.tsx","type":"registry:ui","target":"components/naik/switch.tsx"}]},{"name":"checkbox","type":"registry:ui","title":"Checkbox","description":"Square check with an ink tick. No bouncing scale.","registryDependencies":[],"dependencies":["@radix-ui/react-checkbox"],"files":[{"path":"registry/ui/checkbox.tsx","type":"registry:ui","target":"components/naik/checkbox.tsx"}]},{"name":"radio-group","type":"registry:ui","title":"Radio group","description":"Exclusive choice with a sodium disc.","registryDependencies":[],"dependencies":["@radix-ui/react-radio-group"],"files":[{"path":"registry/ui/radio-group.tsx","type":"registry:ui","target":"components/naik/radio-group.tsx"}]},{"name":"labeled-switch","type":"registry:ui","title":"Labeled switch","description":"Label, description, and switch on one row. Click the copy.","registryDependencies":["switch"],"dependencies":[],"files":[{"path":"registry/ui/labeled-switch.tsx","type":"registry:ui","target":"components/naik/labeled-switch.tsx"}]},{"name":"labeled-checkbox","type":"registry:ui","title":"Labeled checkbox","description":"Label + hint wired to a checkbox. Whole row is the hit target.","registryDependencies":["checkbox"],"dependencies":[],"files":[{"path":"registry/ui/labeled-checkbox.tsx","type":"registry:ui","target":"components/naik/labeled-checkbox.tsx"}]},{"name":"form-field","type":"registry:ui","title":"Form field","description":"Label, optional hint, error, and control. The wrapper you rewrite in every app.","registryDependencies":[],"dependencies":["@radix-ui/react-label"],"files":[{"path":"registry/ui/form-field.tsx","type":"registry:ui","target":"components/naik/form-field.tsx"}]},{"name":"search-bar","type":"registry:ui","title":"Search bar","description":"Icon, field, clear, optional kbd. One component instead of four.","registryDependencies":["input","kbd"],"dependencies":["lucide-react"],"files":[{"path":"registry/ui/search-bar.tsx","type":"registry:ui","target":"components/naik/search-bar.tsx"}]},{"name":"segmented-control","type":"registry:ui","title":"Segmented control","description":"Two to five exclusive options in a machined track.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/segmented-control.tsx","type":"registry:ui","target":"components/naik/segmented-control.tsx"}]},{"name":"spinner","type":"registry:ui","title":"Spinner","description":"Arc spinner. No emoji, no bouncing dots.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/spinner.tsx","type":"registry:ui","target":"components/naik/spinner.tsx"}]},{"name":"alert","type":"registry:ui","title":"Alert","description":"Inline notice with a left rule instead of a pastel card.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/alert.tsx","type":"registry:ui","target":"components/naik/alert.tsx"}]},{"name":"separator","type":"registry:ui","title":"Separator","description":"Hairline rule, horizontal or vertical.","registryDependencies":[],"dependencies":["@radix-ui/react-separator"],"files":[{"path":"registry/ui/separator.tsx","type":"registry:ui","target":"components/naik/separator.tsx"}]},{"name":"page-header","type":"registry:ui","title":"Page header","description":"Eyebrow, title, description, actions. The top of every settings page.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/page-header.tsx","type":"registry:ui","target":"components/naik/page-header.tsx"}]},{"name":"tab-panels","type":"registry:ui","title":"Tab panels","description":"Underline tabs, not pill tabs. Keyboard-able.","registryDependencies":[],"dependencies":["@radix-ui/react-tabs"],"files":[{"path":"registry/ui/tab-panels.tsx","type":"registry:ui","target":"components/naik/tab-panels.tsx"}]},{"name":"help-tip","type":"registry:ui","title":"Help tip","description":"Tiny info mark that opens a tooltip. For dense forms.","registryDependencies":["simple-tooltip"],"dependencies":["lucide-react"],"files":[{"path":"registry/ui/help-tip.tsx","type":"registry:ui","target":"components/naik/help-tip.tsx"}]},{"name":"social-login","type":"registry:ui","title":"Social login","description":"Provider button with mark, label, and loading. GitHub / Google / Discord.","registryDependencies":["button"],"dependencies":[],"files":[{"path":"registry/ui/social-login.tsx","type":"registry:ui","target":"components/naik/social-login.tsx"}]},{"name":"mac-window","type":"registry:ui","title":"Mac window","description":"Traffic-light chrome around a demo. For landing shots, not OS cosplay.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/mac-window.tsx","type":"registry:ui","target":"components/naik/mac-window.tsx"}]},{"name":"scrolling-header","type":"registry:ui","title":"Scrolling header","description":"Condenses on scroll. Keeps the mark, sheds the extra.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/scrolling-header.tsx","type":"registry:ui","target":"components/naik/scrolling-header.tsx"}]},{"name":"conditional-wrap","type":"registry:ui","title":"Conditional wrap","description":"Wrap children in an extra node only when a flag is on.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/conditional-wrap.tsx","type":"registry:ui","target":"components/naik/conditional-wrap.tsx"}]},{"name":"simple-tooltip","type":"registry:ui","title":"Simple tooltip","description":"content= string. No TooltipProvider ceremony at the call site.","registryDependencies":[],"dependencies":["@radix-ui/react-tooltip"],"files":[{"path":"registry/ui/simple-tooltip.tsx","type":"registry:ui","target":"components/naik/simple-tooltip.tsx"}]},{"name":"simple-popover","type":"registry:ui","title":"Simple popover","description":"Trigger + content. One component, not four primitives.","registryDependencies":[],"dependencies":["@radix-ui/react-popover"],"files":[{"path":"registry/ui/simple-popover.tsx","type":"registry:ui","target":"components/naik/simple-popover.tsx"}]},{"name":"simple-accordion","type":"registry:ui","title":"Simple accordion","description":"items=[{title, content}]. For FAQs without the compound-component tax.","registryDependencies":[],"dependencies":["@radix-ui/react-accordion"],"files":[{"path":"registry/ui/simple-accordion.tsx","type":"registry:ui","target":"components/naik/simple-accordion.tsx"}]},{"name":"simple-select","type":"registry:ui","title":"Simple select","description":"options=[{value, label}]. Searchable when the list gets long.","registryDependencies":[],"dependencies":["@radix-ui/react-select"],"files":[{"path":"registry/ui/simple-select.tsx","type":"registry:ui","target":"components/naik/simple-select.tsx"}]},{"name":"advanced-select","type":"registry:ui","title":"Advanced select","description":"Multi, badges, search. The select you keep rewriting for filters.","registryDependencies":["badge","input"],"dependencies":["lucide-react"],"files":[{"path":"registry/ui/advanced-select.tsx","type":"registry:ui","target":"components/naik/advanced-select.tsx"}]},{"name":"icon-picker","type":"registry:ui","title":"Icon picker","description":"Searchable Lucide grid. Returns the icon name, not a React node.","registryDependencies":["simple-popover","input"],"dependencies":["lucide-react"],"files":[{"path":"registry/ui/icon-picker.tsx","type":"registry:ui","target":"components/naik/icon-picker.tsx"}]},{"name":"bottom-drawer","type":"registry:ui","title":"Bottom drawer","description":"Vaul sheet from the bottom. Swipe to dismiss.","registryDependencies":[],"dependencies":["vaul"],"files":[{"path":"registry/ui/bottom-drawer.tsx","type":"registry:ui","target":"components/naik/bottom-drawer.tsx"}]},{"name":"adaptive-dialog","type":"registry:ui","title":"Adaptive dialog","description":"Dialog on desktop, drawer on a phone. Same props. This is the Kitze trick.","registryDependencies":["button"],"dependencies":["@radix-ui/react-dialog","vaul"],"files":[{"path":"registry/ui/adaptive-dialog.tsx","type":"registry:ui","target":"components/naik/adaptive-dialog.tsx"}]},{"name":"adaptive-menu","type":"registry:ui","title":"Adaptive menu","description":"Dropdown on desktop, drawer list on mobile.","registryDependencies":["button"],"dependencies":["@radix-ui/react-dropdown-menu","vaul"],"files":[{"path":"registry/ui/adaptive-menu.tsx","type":"registry:ui","target":"components/naik/adaptive-menu.tsx"}]},{"name":"dialog-manager","type":"registry:ui","title":"Dialog manager","description":"useConfirm() / useConfirmDelete(). Imperative dialogs from anywhere.","registryDependencies":["adaptive-dialog","button"],"dependencies":[],"files":[{"path":"registry/ui/dialog-manager.tsx","type":"registry:ui","target":"components/naik/dialog-manager.tsx"}]},{"name":"theme-switch","type":"registry:ui","title":"Theme switch","description":"Sun / moon latch wired to next-themes. Compact.","registryDependencies":[],"dependencies":["next-themes","lucide-react"],"files":[{"path":"registry/ui/theme-switch.tsx","type":"registry:ui","target":"components/naik/theme-switch.tsx"}]},{"name":"theme-slider","type":"registry:ui","title":"Theme slider","description":"Three-stop slider: light, system, dark.","registryDependencies":[],"dependencies":["next-themes","lucide-react"],"files":[{"path":"registry/ui/theme-slider.tsx","type":"registry:ui","target":"components/naik/theme-slider.tsx"}]},{"name":"tilt-card","type":"registry:ui","title":"Tilt card","description":"Pointer tilt with a specular sheen. Dead on touch and reduced motion.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/tilt-card.tsx","type":"registry:ui","target":"components/naik/tilt-card.tsx"}]},{"name":"magnetic-cursor","type":"registry:ui","title":"Magnetic cursor","description":"Dot that lerps to the pointer and snaps to data-magnetic targets. Fine pointer only.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/magnetic-cursor.tsx","type":"registry:ui","target":"components/naik/magnetic-cursor.tsx"}]},{"name":"kinetic-headline","type":"registry:ui","title":"Kinetic headline","description":"Split-line rise on enter. One well-timed reveal, not a bounce.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/kinetic-headline.tsx","type":"registry:ui","target":"components/naik/kinetic-headline.tsx"}]},{"name":"pinned-reveal","type":"registry:ui","title":"Pinned reveal","description":"Eyebrow, title, summary stagger as the chapter hits the frame.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/pinned-reveal.tsx","type":"registry:ui","target":"components/naik/pinned-reveal.tsx"}]},{"name":"hero-parallax","type":"registry:ui","title":"Hero parallax","description":"Four depth planes. CSS scroll-driven where supported, rAF fallback.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/hero-parallax.tsx","type":"registry:ui","target":"components/naik/hero-parallax.tsx"}]},{"name":"depth-figure","type":"registry:ui","title":"Depth figure","description":"Image that drifts inside its frame as you scroll past.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/depth-figure.tsx","type":"registry:ui","target":"components/naik/depth-figure.tsx"}]},{"name":"matrix-rain","type":"registry:ui","title":"Matrix rain","description":"Glyph rain in Devanagari + IBM Plex Mono. Sodium, not Hollywood green.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/matrix-rain.tsx","type":"registry:ui","target":"components/naik/matrix-rain.tsx"}]},{"name":"sodium-dust","type":"registry:ui","title":"Sodium dust","description":"Lamp-mote canvas. The air under a Mumbai street light.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/sodium-dust.tsx","type":"registry:ui","target":"components/naik/sodium-dust.tsx"}]},{"name":"gold-leaf","type":"registry:ui","title":"Gold leaf","description":"Etched gold flakes for manuscript pages. Quiet, not glitter.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/gold-leaf.tsx","type":"registry:ui","target":"components/naik/gold-leaf.tsx"}]},{"name":"aura-ring","type":"registry:ui","title":"Aura ring","description":"Score ring that fills on a stroke, not a gradient doughnut.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/aura-ring.tsx","type":"registry:ui","target":"components/naik/aura-ring.tsx"}]},{"name":"glass-panel","type":"registry:ui","title":"Glass panel","description":"Frosted asphalt panel. Tight radius, real blur, no neon edge.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/glass-panel.tsx","type":"registry:ui","target":"components/naik/glass-panel.tsx"}]},{"name":"volt-button","type":"registry:ui","title":"Volt button","description":"Pressable with a physical inset. The CTA from Apex.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/volt-button.tsx","type":"registry:ui","target":"components/naik/volt-button.tsx"}]},{"name":"uptime-bar","type":"registry:ui","title":"Uptime bar","description":"Ninety day ticks. Status page DNA from Rush Labs.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/uptime-bar.tsx","type":"registry:ui","target":"components/naik/uptime-bar.tsx"}]},{"name":"status-rail","type":"registry:ui","title":"Status rail","description":"Operational banner: operational / degraded / down.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/status-rail.tsx","type":"registry:ui","target":"components/naik/status-rail.tsx"}]},{"name":"money-ticker","type":"registry:ui","title":"Money ticker","description":"Rupees (or any currency) accruing per second.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/money-ticker.tsx","type":"registry:ui","target":"components/naik/money-ticker.tsx"}]},{"name":"locality-chip","type":"registry:ui","title":"Locality chip","description":"Bandra / Dadar / Andheri style place chip with a nowcast pip.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/locality-chip.tsx","type":"registry:ui","target":"components/naik/locality-chip.tsx"}]},{"name":"nowcast-meter","type":"registry:ui","title":"Nowcast meter","description":"0–2h rain intensity as a mercury column. millimetres, not vibes.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/nowcast-meter.tsx","type":"registry:ui","target":"components/naik/nowcast-meter.tsx"}]},{"name":"flood-badge","type":"registry:ui","title":"Flood badge","description":"Ward-level flood risk pip. Low / watch / waterlogged.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/flood-badge.tsx","type":"registry:ui","target":"components/naik/flood-badge.tsx"}]},{"name":"warp-drop","type":"registry:ui","title":"Warp drop","description":"Peer-to-peer dropzone. Dashed hatch, file list, no cloud metaphor.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/warp-drop.tsx","type":"registry:ui","target":"components/naik/warp-drop.tsx"}]},{"name":"doom-cracks","type":"registry:ui","title":"Doom cracks","description":"The page fractures as you scroll. Heals when you stop.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/doom-cracks.tsx","type":"registry:ui","target":"components/naik/doom-cracks.tsx"}]},{"name":"typewriter","type":"registry:ui","title":"Typewriter","description":"Careted type-in. Respects reduced motion (shows the full line).","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/typewriter.tsx","type":"registry:ui","target":"components/naik/typewriter.tsx"}]},{"name":"marquee-rail","type":"registry:ui","title":"Marquee rail","description":"Seamless ticker. Pauses on hover and on reduced motion.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/marquee-rail.tsx","type":"registry:ui","target":"components/naik/marquee-rail.tsx"}]},{"name":"number-ticker","type":"registry:ui","title":"Number ticker","description":"Count up when in view. Tabular figures, no bounce.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/number-ticker.tsx","type":"registry:ui","target":"components/naik/number-ticker.tsx"}]},{"name":"password-meter","type":"registry:ui","title":"Password meter","description":"Four-bar strength. Entropy-ish, not a lecture.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/password-meter.tsx","type":"registry:ui","target":"components/naik/password-meter.tsx"}]},{"name":"encryption-seal","type":"registry:ui","title":"Encryption seal","description":"Zero-knowledge lockup banner. The CloakBin promise, as a component.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/encryption-seal.tsx","type":"registry:ui","target":"components/naik/encryption-seal.tsx"}]},{"name":"share-card","type":"registry:ui","title":"Share card","description":"Exportable result card. Score, handle, sodium rule.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/share-card.tsx","type":"registry:ui","target":"components/naik/share-card.tsx"}]},{"name":"beam-frame","type":"registry:ui","title":"Beam frame","description":"A travelling highlight on the border. CSS only, one beam.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/beam-frame.tsx","type":"registry:ui","target":"components/naik/beam-frame.tsx"}]},{"name":"particle-ash","type":"registry:ui","title":"Particle ash","description":"Slow ash field. Canvas, capped, pauses offscreen.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/particle-ash.tsx","type":"registry:ui","target":"components/naik/particle-ash.tsx"}]},{"name":"spotlight-wash","type":"registry:ui","title":"Spotlight wash","description":"Pointer-follow wash on a panel. Fine pointer only.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/spotlight-wash.tsx","type":"registry:ui","target":"components/naik/spotlight-wash.tsx"}]},{"name":"split-hatch","type":"registry:ui","title":"Split hatch","description":"Diagonal hatch background from SplitUPI. Printable, not decorative noise.","registryDependencies":[],"dependencies":[],"files":[{"path":"registry/ui/split-hatch.tsx","type":"registry:ui","target":"components/naik/split-hatch.tsx"}]}]}