{"$schema":"https://ui.shadcn.com/schema/registry.json","name":"beui","homepage":"https://beui.dev","items":[{"name":"alert","type":"registry:component","title":"Animated Alert","description":"Composable feedback with smooth transitions.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/alert.tsx","type":"registry:component","target":"@components/motion/alert.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/presence-gate.tsx","type":"registry:lib","target":"@lib/presence-gate.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"collapsible","type":"registry:component","title":"Animated Collapsible","description":"Expandable content with a smooth reveal.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/collapsible.tsx","type":"registry:component","target":"@components/motion/collapsible.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"aspect-ratio","type":"registry:component","title":"Aspect Ratio","description":"Responsive media with smooth aspect ratio transitions.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/aspect-ratio.tsx","type":"registry:component","target":"@components/motion/aspect-ratio.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"arc-picker","type":"registry:component","title":"Arc Picker","description":"Radial text picker with top, bottom, left or right curves, smooth wheel movement and live selection on each scroll step. One persistent bracket frame grows and squeezes around each label. Supports drag momentum, keyboard input, disabled choices, controlled or uncontrolled values, forms and reduced motion.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/arc-picker.tsx","type":"registry:component","target":"@components/motion/arc-picker.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"sortable-stack","type":"registry:component","title":"Sortable List","description":"Composable sortable list with group, item, drag handle, content and undo parts, plus a shared state hook. Spring layout, keyboard reordering, accessible position announcements, and controlled or uncontrolled items.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/sortable-list.tsx","type":"registry:component","target":"@components/motion/sortable-list.tsx"},{"path":"components/motion/sortable-stack.tsx","type":"registry:component","target":"@components/motion/sortable-stack.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"morphing-lightbox","type":"registry:component","title":"Image Viewer Morphing","description":"A thumbnail-connected image viewer with composable gallery, thumbnail, content, caption and navigation parts, plus a shared state hook. Expand into the full-size image and return to the thumbnail on close, with swipe navigation, zoom and pan.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/morphing-lightbox.tsx","type":"registry:component","target":"@components/motion/morphing-lightbox.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-modal-scope.ts","type":"registry:hook","target":"@lib/hooks/use-modal-scope.ts"},{"path":"lib/presence-gate.tsx","type":"registry:lib","target":"@lib/presence-gate.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"date-range-picker","type":"registry:component","title":"Date Range Picker","description":"Composable date range picker with root, trigger, popover content, calendar, header, grid, summary, footer, clear and preset parts, plus a shared state hook. Compact inline and dropdown compositions, direct month and year selection, and full keyboard navigation.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/date-range-picker.tsx","type":"registry:component","target":"@components/motion/date-range-picker.tsx"},{"path":"components/motion/date-range-picker/context.ts","type":"registry:component","target":"@components/motion/date-range-picker/context.ts"},{"path":"components/motion/date-range-picker/date-utils.ts","type":"registry:component","target":"@components/motion/date-range-picker/date-utils.ts"},{"path":"components/motion/date-range-picker/types.ts","type":"registry:component","target":"@components/motion/date-range-picker/types.ts"},{"path":"components/motion/date-range-picker/use-date-range-picker.ts","type":"registry:component","target":"@components/motion/date-range-picker/use-date-range-picker.ts"},{"path":"components/motion/popover-morph.tsx","type":"registry:component","target":"@components/motion/popover-morph.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"components/motion/popover-position.ts","type":"registry:component","target":"@components/motion/popover-position.ts"}]},{"name":"color-selector","type":"registry:component","title":"Animated Color Selector","description":"Composable color swatches with a spring-gliding selection ring, press feedback, native radio keyboard navigation, and controlled or uncontrolled state.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/color-selector.tsx","type":"registry:component","target":"@components/motion/color-selector.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"breadcrumb","type":"registry:component","title":"Animated Breadcrumb","description":"Composable breadcrumb navigation with soft path transitions, a hoverable overflow dropdown for long trails, custom separators, and router-link support.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/breadcrumb.tsx","type":"registry:component","target":"@components/motion/breadcrumb.tsx"},{"path":"components/motion/popover-morph.tsx","type":"registry:component","target":"@components/motion/popover-morph.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/popover-position.ts","type":"registry:component","target":"@components/motion/popover-position.ts"}]},{"name":"tilt-card","type":"registry:component","title":"Tilt Card","description":"3D perspective tilt on hover with cursor-tracked glare.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/tilt-card.tsx","type":"registry:component","target":"@components/motion/tilt-card.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"button-metallic","type":"registry:component","title":"Button Metallic Button","description":"A neutral button surface framed by a pronounced chrome rim with a straight traveling reflection.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/button/metallic.tsx","type":"registry:component","target":"@components/motion/button/metallic.tsx"},{"path":"components/motion/button/base.tsx","type":"registry:component","target":"@components/motion/button/base.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"}]},{"name":"button-base","type":"registry:component","title":"Button Button","description":"Press scale, hover lift, variants and sizes.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/button/base.tsx","type":"registry:component","target":"@components/motion/button/base.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"button-stateful","type":"registry:component","title":"Button Stateful Button","description":"Idle → loading → success / error with blur-swap slots and morphing width.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/button/stateful.tsx","type":"registry:component","target":"@components/motion/button/stateful.tsx"},{"path":"components/motion/button/base.tsx","type":"registry:component","target":"@components/motion/button/base.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"button-magnetic","type":"registry:component","title":"Button Magnetic Button","description":"Button composed with the Magnetic wrapper for cursor-attracted pull.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/button/magnetic.tsx","type":"registry:component","target":"@components/motion/button/magnetic.tsx"},{"path":"components/motion/magnetic.tsx","type":"registry:component","target":"@components/motion/magnetic.tsx"},{"path":"components/motion/button/base.tsx","type":"registry:component","target":"@components/motion/button/base.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"expanding-arrow-button","type":"registry:component","title":"Animated CTA Buttons Expanding Arrow Button","description":"An accent tile that expands into a dotted-arrow trail on hover or focus.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/expanding-arrow-button.tsx","type":"registry:component","target":"@components/motion/expanding-arrow-button.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"hold-action-button","type":"registry:component","title":"Animated CTA Buttons Hold Action Button","description":"Hold to complete with a vertical or horizontal liquid fill; release early to cancel.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/hold-action-button.tsx","type":"registry:component","target":"@components/motion/hold-action-button.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"slide-action-button","type":"registry:component","title":"Animated CTA Buttons Slide Action Button","description":"Drag the thumb to the end to confirm an action; release early to spring back.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/slide-action-button.tsx","type":"registry:component","target":"@components/motion/slide-action-button.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"expandable-control","type":"registry:component","title":"Expandable Control","description":"Click-to-expand button and chip controls that reveal a label or trailing action through spring layout continuity.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/expandable-control.tsx","type":"registry:component","target":"@components/motion/expandable-control.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"adaptive-stepper","type":"registry:component","title":"Adaptive Stepper","description":"Composable numeric stepper whose fixed footprint adapts at its minimum and maximum while the value rolls between steps.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/adaptive-stepper.tsx","type":"registry:component","target":"@components/motion/adaptive-stepper.tsx"},{"path":"components/motion/liquid.tsx","type":"registry:component","target":"@components/motion/liquid.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"marquee","type":"registry:component","title":"Marquee","description":"Infinite horizontal or vertical scroll with pause-on-hover.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/marquee.tsx","type":"registry:component","target":"@components/motion/marquee.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"tabs","type":"registry:component","title":"Tabs","description":"Pill, segment or underline tabs with a spring layoutId indicator.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/tabs.tsx","type":"registry:component","target":"@components/motion/tabs.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"switch","type":"registry:component","title":"Switch","description":"Toggle with a spring-driven thumb and press feedback.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/switch.tsx","type":"registry:component","target":"@components/motion/switch.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"input","type":"registry:component","title":"Input","description":"Text input with label, left/right icons, optional stable error row, error shake and success check draw.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/input.tsx","type":"registry:component","target":"@components/motion/input.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"select","type":"registry:component","title":"Select Select","description":"Composable primitives (Select, SelectTrigger, SelectValue, SelectContent, SelectItem); the panel pinches off the trigger and separates, with staggered items. Position-aware (opens upward when needed).","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/select.tsx","type":"registry:component","target":"@components/motion/select.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"select-morph","type":"registry:component","title":"Select Morph Select","description":"Composable primitives (MorphSelect, MorphSelectTrigger, MorphSelectValue, MorphSelectContent, MorphSelectItem) where the trigger morphs into the panel via a shared layoutId — one continuous surface that grows open and shrinks back, never detaching.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/select-morph.tsx","type":"registry:component","target":"@components/motion/select-morph.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"combobox","type":"registry:component","title":"Combobox","description":"Searchable combobox with a morphing portal, grouped filtering, keyboard navigation, and controlled or uncontrolled state.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/combobox.tsx","type":"registry:component","target":"@components/motion/combobox.tsx"},{"path":"components/motion/combobox/content.tsx","type":"registry:component","target":"@components/motion/combobox/content.tsx"},{"path":"components/motion/combobox/context.tsx","type":"registry:component","target":"@components/motion/combobox/context.tsx"},{"path":"components/motion/combobox/list.tsx","type":"registry:component","target":"@components/motion/combobox/list.tsx"},{"path":"components/motion/combobox/trigger.tsx","type":"registry:component","target":"@components/motion/combobox/trigger.tsx"},{"path":"components/motion/popover-position.ts","type":"registry:component","target":"@components/motion/popover-position.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/combobox/use-active-option.ts","type":"registry:component","target":"@components/motion/combobox/use-active-option.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"}]},{"name":"multi-select","type":"registry:component","title":"Multi Select","description":"Composable multi-select primitives with searchable options, removable animated tokens, and a morphing collision-aware panel.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/multi-select/index.tsx","type":"registry:component","target":"@components/motion/multi-select/index.tsx"},{"path":"components/motion/multi-select/context.tsx","type":"registry:component","target":"@components/motion/multi-select/context.tsx"},{"path":"components/motion/multi-select/trigger.tsx","type":"registry:component","target":"@components/motion/multi-select/trigger.tsx"},{"path":"components/motion/multi-select/content.tsx","type":"registry:component","target":"@components/motion/multi-select/content.tsx"},{"path":"components/motion/multi-select/list.tsx","type":"registry:component","target":"@components/motion/multi-select/list.tsx"},{"path":"components/motion/combobox/use-active-option.ts","type":"registry:component","target":"@components/motion/combobox/use-active-option.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/popover-position.ts","type":"registry:component","target":"@components/motion/popover-position.ts"}]},{"name":"checkbox","type":"registry:component","title":"Checkbox","description":"Form choice control with a draw-on checkmark, spring press feedback and indeterminate state support.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/checkbox.tsx","type":"registry:component","target":"@components/motion/checkbox.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"radio","type":"registry:component","title":"Radio Group","description":"Single-select choice control with a gliding layoutId indicator dot and spring press feedback.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/radio.tsx","type":"registry:component","target":"@components/motion/radio.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"bottom-sheet","type":"registry:component","title":"Bottom Sheet","description":"Vaul-inspired draggable bottom sheet with snap points, inertia and glass surface.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/bottom-sheet.tsx","type":"registry:component","target":"@components/motion/bottom-sheet.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/presence-gate.tsx","type":"registry:lib","target":"@lib/presence-gate.tsx"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"pull-to-refresh","type":"registry:component","title":"Pull to Refresh","description":"Native-feeling pull-to-refresh container with drag resistance, threshold feedback and async refresh handling.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/pull-to-refresh.tsx","type":"registry:component","target":"@components/motion/pull-to-refresh.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"shared-layout-bg","type":"registry:component","title":"Shared Layout Background","description":"A pill that glides between hovered items via motion's shared layout, with blur enter/exit.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/shared-layout-bg.tsx","type":"registry:component","target":"@components/motion/shared-layout-bg.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"bounce-sidebar","type":"registry:component","title":"Bounce Sidebar","description":"A vertical sidebar whose active dot jumps between destinations on a curved, spring-loaded path.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/bounce-sidebar.tsx","type":"registry:component","target":"@components/motion/bounce-sidebar.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"animated-sidebar","type":"registry:component","title":"Animated Sidebar","description":"A composable application sidebar with morphing nested navigation that folds into an animated icon rail on desktop and becomes a focus-managed sheet on mobile.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/animated-sidebar.tsx","type":"registry:component","target":"@components/motion/animated-sidebar.tsx"},{"path":"components/motion/shared-layout-bg.tsx","type":"registry:component","target":"@components/motion/shared-layout-bg.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"file-tree","type":"registry:component","title":"File Tree","description":"Composable file and folder primitives with springing branches, a gliding selection, and complete keyboard navigation.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/file-tree.tsx","type":"registry:component","target":"@components/motion/file-tree.tsx"},{"path":"components/motion/shared-layout-bg.tsx","type":"registry:component","target":"@components/motion/shared-layout-bg.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"preview-rail","type":"registry:component","title":"Preview Rail","description":"Codex app-inspired navigation rail with compact ticks that form a hover pyramid and reveal a floating destination preview.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/preview-rail.tsx","type":"registry:component","target":"@components/motion/preview-rail.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"dock","type":"registry:component","title":"Dock","description":"macOS-style dock with grouped actions and a gliding active pill.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/dock.tsx","type":"registry:component","target":"@components/motion/dock.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"tooltip","type":"registry:component","title":"Tooltip","description":"Hover or focus tooltip with a subtle scale and fade, collision-aware placement, and optional cursor tracking.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"context-menu","type":"registry:component","title":"Animated Context Menu","description":"Composable context-menu primitives with a pointer-origin clip morph, a gliding active row, checkbox and radio choices, keyboard navigation, typeahead, and long-press support.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/context-menu.tsx","type":"registry:component","target":"@components/motion/context-menu.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"popover","type":"registry:component","title":"Popover Gooey Popover","description":"Composable Popover, PopoverTrigger, PopoverContent; the panel oozes out of the trigger through an SVG goo filter with a liquid neck, crisp content fading in on top. Click or hover, controlled or uncontrolled.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/popover.tsx","type":"registry:component","target":"@components/motion/popover.tsx"},{"path":"components/motion/popover-position.ts","type":"registry:component","target":"@components/motion/popover-position.ts"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"popover-morph","type":"registry:component","title":"Popover Morph Popover","description":"Composable MorphPopover, MorphPopoverTrigger, MorphPopoverContent; the panel is laid out full size but clipped to the corner nearest the trigger, then unclips as one piece — a single-surface morph with a drop-shadow that hugs the shape. Side/align aware, controlled or uncontrolled.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/popover-morph.tsx","type":"registry:component","target":"@components/motion/popover-morph.tsx"},{"path":"components/motion/popover-position.ts","type":"registry:component","target":"@components/motion/popover-position.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"morphing-modal","type":"registry:component","title":"Morphing Modal","description":"Family-app-style modal. A single panel that morphs its height as you navigate between inner views, with blur cross-fade on content.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/morphing-modal.tsx","type":"registry:component","target":"@components/motion/morphing-modal.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/presence-gate.tsx","type":"registry:lib","target":"@lib/presence-gate.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"center-morph-modal","type":"registry:component","title":"Center Morph Modal","description":"A composable modal whose full-size surface unfolds from its exact center toward every edge, then folds back the same way with an inset close control.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/center-morph-modal.tsx","type":"registry:component","target":"@components/motion/center-morph-modal.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/presence-gate.tsx","type":"registry:lib","target":"@lib/presence-gate.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"text-scramble","type":"registry:component","title":"Text Animation Text Scramble","description":"A controlled character scramble that resolves changed text while keeping its final value accessible.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/text-scramble.tsx","type":"registry:component","target":"@components/motion/text-scramble.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"chromatic-text-reveal","type":"registry:component","title":"Text Animation Dia Text Animation","description":"A Dia-inspired text effect with a fixed sentence prefix and a cycling final word revealed by a colorful sweep.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/chromatic-text-reveal.tsx","type":"registry:component","target":"@components/motion/chromatic-text-reveal.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"text-reveal","type":"registry:component","title":"Text Animation Text Reveal","description":"Word or character reveal with spring slide-up and blur.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/text-reveal.tsx","type":"registry:component","target":"@components/motion/text-reveal.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"text-shimmer","type":"registry:component","title":"Text Animation Text Shimmer","description":"Gradient sweep across text for loading or emphasis.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/text-shimmer.tsx","type":"registry:component","target":"@components/motion/text-shimmer.tsx"},{"path":"lib/text-shimmer.ts","type":"registry:lib","target":"@lib/text-shimmer.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"text-cascade","type":"registry:component","title":"Text Animation Text Cascade","description":"Letter-by-letter slot roll for standalone text — old letters drop away as new ones land, left to right.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/text-cascade.tsx","type":"registry:component","target":"@components/motion/text-cascade.tsx"},{"path":"components/motion/action-swap.tsx","type":"registry:component","target":"@components/motion/action-swap.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"digit-swap","type":"registry:component","title":"Number Animation Digit Swap","description":"Fixed-slot digits and mask glyphs that roll on change with controllable direction, stagger, replay, and suffix emphasis.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/digit-swap.tsx","type":"registry:component","target":"@components/motion/digit-swap.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"number-ticker","type":"registry:component","title":"Number Animation Number Ticker","description":"Slot-machine rolling digits with staggered entry.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/number-ticker.tsx","type":"registry:component","target":"@components/motion/number-ticker.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"animated-number","type":"registry:component","title":"Number Animation Animated Number","description":"Spring-driven count-up triggered when in view.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/animated-number.tsx","type":"registry:component","target":"@components/motion/animated-number.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"animated-badge","type":"registry:component","title":"Animated Badge","description":"Status badge with animated state icons, pulse feedback and compact size variants.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/animated-badge.tsx","type":"registry:component","target":"@components/motion/animated-badge.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"action-swap-cascade","type":"registry:component","title":"Action Swap Cascade","description":"Letter-by-letter slot roll — the old label's letters drop away as the new ones land, left to right.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/action-swap-cascade.tsx","type":"registry:component","target":"@components/motion/action-swap-cascade.tsx"},{"path":"components/motion/action-swap.tsx","type":"registry:component","target":"@components/motion/action-swap.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"action-swap-blur","type":"registry:component","title":"Action Swap Blur","description":"Copy-button style swap with blur, opacity and scale.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/action-swap-blur.tsx","type":"registry:component","target":"@components/motion/action-swap-blur.tsx"},{"path":"components/motion/action-swap.tsx","type":"registry:component","target":"@components/motion/action-swap.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"action-swap-roll","type":"registry:component","title":"Action Swap Roll","description":"The next text or icon rolls in from below with blur.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/action-swap-roll.tsx","type":"registry:component","target":"@components/motion/action-swap-roll.tsx"},{"path":"components/motion/action-swap.tsx","type":"registry:component","target":"@components/motion/action-swap.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"animated-toast-stack","type":"registry:component","title":"Animated Toast Stack","description":"Stacked toasts with status morphs, swipe dismissal, actions and layout-aware motion.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/animated-toast-stack.tsx","type":"registry:component","target":"@components/motion/animated-toast-stack.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"theme-toggle","type":"registry:component","title":"Theme Toggle","description":"Theme toggle button that repaints the whole page through the View Transition API — a rectangle or circle clip-path reveal, or slats that open across the screen like a shutter.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","next-themes","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/theme-toggle.tsx","type":"registry:component","target":"@components/motion/theme-toggle.tsx"},{"path":"components/motion/action-swap.tsx","type":"registry:component","target":"@components/motion/action-swap.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"bouncy-accordion","type":"registry:component","title":"Bouncy Accordion","description":"Single-open accordion with weighted spring layout, icon rows and reduced-motion-safe content reveals.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/bouncy-accordion.tsx","type":"registry:component","target":"@components/motion/bouncy-accordion.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"drawer","type":"registry:component","title":"Drawer","description":"Side panel that slides in from the left or right with a spring, backdrop blur, body scroll lock and esc-to-close.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/drawer.tsx","type":"registry:component","target":"@components/motion/drawer.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/presence-gate.tsx","type":"registry:lib","target":"@lib/presence-gate.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"smooth-scroll","type":"registry:component","title":"Scroll Animation Smooth Scroll","description":"Smooth-scroll provider over Lenis with a useSmoothScroll hook exposing scroll offset, progress and velocity. Reduced-motion safe.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["lenis","motion"],"registryDependencies":[],"files":[{"path":"components/motion/smooth-scroll.tsx","type":"registry:component","target":"@components/motion/smooth-scroll.tsx"}]},{"name":"scroll-progress","type":"registry:component","title":"Scroll Animation Scroll Progress","description":"Reading-progress indicator — fixed bar or circular ring — driven by scroll position via useSmoothScroll, with spring smoothing.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lenis","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/scroll-progress.tsx","type":"registry:component","target":"@components/motion/scroll-progress.tsx"},{"path":"components/motion/smooth-scroll.tsx","type":"registry:component","target":"@components/motion/smooth-scroll.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"parallax","type":"registry:component","title":"Scroll Animation Parallax","description":"Wrapper that drifts its children at a speed factor as they cross the viewport, on either axis. Reduced-motion safe.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/parallax.tsx","type":"registry:component","target":"@components/motion/parallax.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"scroll-to","type":"registry:component","title":"Scroll Animation Scroll To","description":"Button that smooth-scrolls to a target (offset, selector or element) via the active SmoothScroll provider; reduced-motion jumps instantly.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lenis","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/scroll-to.tsx","type":"registry:component","target":"@components/motion/scroll-to.tsx"},{"path":"components/motion/smooth-scroll.tsx","type":"registry:component","target":"@components/motion/smooth-scroll.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"scroll-reveal","type":"registry:component","title":"Scroll Animation Scroll Reveal","description":"Reveals its children with a spring slide and blur as they enter the viewport, once or every time. Reduced-motion keeps a fade.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/scroll-reveal.tsx","type":"registry:component","target":"@components/motion/scroll-reveal.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"range-slider-inline","type":"registry:component","title":"Range Slider Inline Slider","description":"An inset fill and inline label and value. Ten evenly spaced stops span the track; markers under text stay hidden but remain interactive, and the thumb parts around either label as it passes.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/range-slider-inline.tsx","type":"registry:component","target":"@components/motion/range-slider-inline.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-slider.ts","type":"registry:hook","target":"@lib/hooks/use-slider.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"range-slider","type":"registry:component","title":"Range Slider Range Slider","description":"Tick dots, and a vertical-bar thumb that bounces as it lands on each step.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/range-slider.tsx","type":"registry:component","target":"@components/motion/range-slider.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-slider.ts","type":"registry:hook","target":"@lib/hooks/use-slider.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"range-slider-fluid","type":"registry:component","title":"Range Slider Fluid Slider","description":"No thumb. The fill slides behind a rounded liquid cap, and the label flips color wherever the fill covers it.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/range-slider-fluid.tsx","type":"registry:component","target":"@components/motion/range-slider-fluid.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-slider.ts","type":"registry:hook","target":"@lib/hooks/use-slider.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"range-slider-wave","type":"registry:component","title":"Range Slider Wave Slider","description":"Equalizer bars peak around the handle and drop back once it passes, so the value moves down the track as a wave.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/range-slider-wave.tsx","type":"registry:component","target":"@components/motion/range-slider-wave.tsx"},{"path":"lib/hooks/use-slider.ts","type":"registry:hook","target":"@lib/hooks/use-slider.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"range-slider-bubble","type":"registry:component","title":"Range Slider Bubble Slider","description":"Grab the thumb and a value bubble pops out of it. The bubble tilts and squashes with how fast you drag, then settles upright.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/range-slider-bubble.tsx","type":"registry:component","target":"@components/motion/range-slider-bubble.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-slider.ts","type":"registry:hook","target":"@lib/hooks/use-slider.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"range-slider-ruler","type":"registry:component","title":"Range Slider Ruler Slider","description":"The needle stays put and the scale scrolls under it. A flick keeps going and settles on the nearest tick. Fractional steps read at the step's own precision.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/range-slider-ruler.tsx","type":"registry:component","target":"@components/motion/range-slider-ruler.tsx"},{"path":"lib/hooks/use-slider.ts","type":"registry:hook","target":"@lib/hooks/use-slider.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"wheel-picker","type":"registry:component","title":"Wheel Picker","description":"iOS-style picker wheel: a 3D drum on native momentum scroll that snaps to the nearest notch, with wheel, drag and keyboard control. Composes side by side for date and time pickers, reduced-motion safe.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/wheel-picker.tsx","type":"registry:component","target":"@components/motion/wheel-picker.tsx"},{"path":"lib/tick-sound.ts","type":"registry:lib","target":"@lib/tick-sound.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"table","type":"registry:component","title":"Table Data Table","description":"10k virtualized rows with sortable headers, row selection, column resize and reorder.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@tanstack/react-virtual","clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/table/index.tsx","type":"registry:component","target":"@components/motion/table/index.tsx"},{"path":"components/motion/table/editable-cell.tsx","type":"registry:component","target":"@components/motion/table/editable-cell.tsx"},{"path":"components/motion/table/row-handle.tsx","type":"registry:component","target":"@components/motion/table/row-handle.tsx"},{"path":"components/motion/table/skeleton-rows.tsx","type":"registry:component","target":"@components/motion/table/skeleton-rows.tsx"},{"path":"components/motion/table/table-header.tsx","type":"registry:component","target":"@components/motion/table/table-header.tsx"},{"path":"components/motion/table/types.ts","type":"registry:component","target":"@components/motion/table/types.ts"},{"path":"components/motion/table/use-column-reorder.ts","type":"registry:component","target":"@components/motion/table/use-column-reorder.ts"},{"path":"components/motion/table/use-column-resize.ts","type":"registry:component","target":"@components/motion/table/use-column-resize.ts"},{"path":"components/motion/table/use-column-sort.ts","type":"registry:component","target":"@components/motion/table/use-column-sort.ts"},{"path":"components/motion/table/use-row-selection.ts","type":"registry:component","target":"@components/motion/table/use-row-selection.ts"},{"path":"components/motion/table/utils.ts","type":"registry:component","target":"@components/motion/table/utils.ts"},{"path":"components/motion/checkbox.tsx","type":"registry:component","target":"@components/motion/checkbox.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/table/table-menu.tsx","type":"registry:component","target":"@components/motion/table/table-menu.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"table-editable","type":"registry:component","title":"Table Editable Table","description":"Edit cells inline and insert or delete rows and columns via border handles; the table re-renders from the updated data and column defs.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@tanstack/react-virtual","clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/table/index.tsx","type":"registry:component","target":"@components/motion/table/index.tsx"},{"path":"components/motion/table/editable-cell.tsx","type":"registry:component","target":"@components/motion/table/editable-cell.tsx"},{"path":"components/motion/table/row-handle.tsx","type":"registry:component","target":"@components/motion/table/row-handle.tsx"},{"path":"components/motion/table/skeleton-rows.tsx","type":"registry:component","target":"@components/motion/table/skeleton-rows.tsx"},{"path":"components/motion/table/table-header.tsx","type":"registry:component","target":"@components/motion/table/table-header.tsx"},{"path":"components/motion/table/types.ts","type":"registry:component","target":"@components/motion/table/types.ts"},{"path":"components/motion/table/use-column-reorder.ts","type":"registry:component","target":"@components/motion/table/use-column-reorder.ts"},{"path":"components/motion/table/use-column-resize.ts","type":"registry:component","target":"@components/motion/table/use-column-resize.ts"},{"path":"components/motion/table/use-column-sort.ts","type":"registry:component","target":"@components/motion/table/use-column-sort.ts"},{"path":"components/motion/table/use-row-selection.ts","type":"registry:component","target":"@components/motion/table/use-row-selection.ts"},{"path":"components/motion/table/utils.ts","type":"registry:component","target":"@components/motion/table/utils.ts"},{"path":"components/motion/checkbox.tsx","type":"registry:component","target":"@components/motion/checkbox.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/table/table-menu.tsx","type":"registry:component","target":"@components/motion/table/table-menu.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"table-async","type":"registry:component","title":"Table Async Table","description":"Loads pages on demand — skeleton rows on first load, then infinite scroll via onEndReached as the virtualized list nears the bottom.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@tanstack/react-virtual","clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/table/index.tsx","type":"registry:component","target":"@components/motion/table/index.tsx"},{"path":"components/motion/table/editable-cell.tsx","type":"registry:component","target":"@components/motion/table/editable-cell.tsx"},{"path":"components/motion/table/row-handle.tsx","type":"registry:component","target":"@components/motion/table/row-handle.tsx"},{"path":"components/motion/table/skeleton-rows.tsx","type":"registry:component","target":"@components/motion/table/skeleton-rows.tsx"},{"path":"components/motion/table/table-header.tsx","type":"registry:component","target":"@components/motion/table/table-header.tsx"},{"path":"components/motion/table/types.ts","type":"registry:component","target":"@components/motion/table/types.ts"},{"path":"components/motion/table/use-column-reorder.ts","type":"registry:component","target":"@components/motion/table/use-column-reorder.ts"},{"path":"components/motion/table/use-column-resize.ts","type":"registry:component","target":"@components/motion/table/use-column-resize.ts"},{"path":"components/motion/table/use-column-sort.ts","type":"registry:component","target":"@components/motion/table/use-column-sort.ts"},{"path":"components/motion/table/use-row-selection.ts","type":"registry:component","target":"@components/motion/table/use-row-selection.ts"},{"path":"components/motion/table/utils.ts","type":"registry:component","target":"@components/motion/table/utils.ts"},{"path":"components/motion/checkbox.tsx","type":"registry:component","target":"@components/motion/checkbox.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/table/table-menu.tsx","type":"registry:component","target":"@components/motion/table/table-menu.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"shader-background","type":"registry:component","title":"Shader Background","description":"Canvas shader backgrounds (mesh gradient, grain, warp, waves, voronoi, dot orbit and more) with a single typed variant prop. Reduced-motion freezes animated variants.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@paper-design/shaders-react","clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/shader-background.tsx","type":"registry:component","target":"@components/motion/shader-background.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"cylinder-carousel","type":"registry:component","title":"Cylinder Carousel","description":"A carousel whose items line the inside of a cylinder, receding into the center and growing toward the edges. Drag, scroll or arrow-key to roll it, with a springy glide and snap. Reduced-motion drops the glide.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/cylinder-carousel.tsx","type":"registry:component","target":"@components/motion/cylinder-carousel.tsx"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"loader","type":"registry:component","title":"Loader","description":"Loading indicator with seventeen variants: spinner, dots, bars, dot-matrix, dither, morph, comet, scramble, metaballs, newton, helix, percent, and five terminal-style ascii spinners. Scales from one size prop, uses currentColor, and reduced-motion swaps every transform for a calm opacity pulse.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/loader.tsx","type":"registry:component","target":"@components/motion/loader.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"treemap","type":"registry:component","title":"Treemap","description":"Proportional tiles that morph with your data, with value and share tooltips.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/charts/treemap.tsx","type":"registry:component","target":"@components/charts/treemap.tsx"},{"path":"components/charts/treemap/context.ts","type":"registry:component","target":"@components/charts/treemap/context.ts"},{"path":"components/charts/treemap/legend.tsx","type":"registry:component","target":"@components/charts/treemap/legend.tsx"},{"path":"components/charts/treemap/model.ts","type":"registry:component","target":"@components/charts/treemap/model.ts"},{"path":"components/charts/treemap/plot.tsx","type":"registry:component","target":"@components/charts/treemap/plot.tsx"},{"path":"components/charts/treemap/tooltip.tsx","type":"registry:component","target":"@components/charts/treemap/tooltip.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/hooks/use-row-cursor.ts","type":"registry:hook","target":"@lib/hooks/use-row-cursor.ts"},{"path":"components/charts/treemap/tile.tsx","type":"registry:component","target":"@components/charts/treemap/tile.tsx"},{"path":"components/motion/number-ticker.tsx","type":"registry:component","target":"@components/motion/number-ticker.tsx"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"volume-profile","type":"registry:component","title":"Volume Profile","description":"Animated volume by price, with point of control and value area highlights.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/charts/volume-profile.tsx","type":"registry:component","target":"@components/charts/volume-profile.tsx"},{"path":"components/charts/volume-profile/context.ts","type":"registry:component","target":"@components/charts/volume-profile/context.ts"},{"path":"components/charts/volume-profile/model.ts","type":"registry:component","target":"@components/charts/volume-profile/model.ts"},{"path":"components/charts/volume-profile/plot.tsx","type":"registry:component","target":"@components/charts/volume-profile/plot.tsx"},{"path":"components/charts/volume-profile/summary.tsx","type":"registry:component","target":"@components/charts/volume-profile/summary.tsx"},{"path":"components/charts/volume-profile/tooltip.tsx","type":"registry:component","target":"@components/charts/volume-profile/tooltip.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/number-ticker.tsx","type":"registry:component","target":"@components/motion/number-ticker.tsx"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"status-bar","type":"registry:component","title":"Status Bar","description":"Animated status history with rounded bars and period tooltips.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/charts/status-bar.tsx","type":"registry:component","target":"@components/charts/status-bar.tsx"},{"path":"components/charts/status-bar/context.ts","type":"registry:component","target":"@components/charts/status-bar/context.ts"},{"path":"components/charts/status-bar/legend.tsx","type":"registry:component","target":"@components/charts/status-bar/legend.tsx"},{"path":"components/charts/status-bar/plot.tsx","type":"registry:component","target":"@components/charts/status-bar/plot.tsx"},{"path":"components/charts/status-bar/tooltip.tsx","type":"registry:component","target":"@components/charts/status-bar/tooltip.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"composition-chart","type":"registry:component","title":"Composition Chart","description":"Stacked bar and area shares with period tooltips and a compact interactive legend.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/charts/composition-chart.tsx","type":"registry:component","target":"@components/charts/composition-chart.tsx"},{"path":"components/charts/composition-chart/context.tsx","type":"registry:component","target":"@components/charts/composition-chart/context.tsx"},{"path":"components/charts/composition-chart/legend.tsx","type":"registry:component","target":"@components/charts/composition-chart/legend.tsx"},{"path":"components/charts/composition-chart/model.ts","type":"registry:component","target":"@components/charts/composition-chart/model.ts"},{"path":"components/charts/composition-chart/plot.tsx","type":"registry:component","target":"@components/charts/composition-chart/plot.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"components/charts/composition-chart/tooltip-content.tsx","type":"registry:component","target":"@components/charts/composition-chart/tooltip-content.tsx"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/number-ticker.tsx","type":"registry:component","target":"@components/motion/number-ticker.tsx"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"funnel-chart","type":"registry:component","title":"Funnel Chart","description":"Vertical and horizontal funnels with curved stages and animated number tooltips.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/charts/funnel-chart.tsx","type":"registry:component","target":"@components/charts/funnel-chart.tsx"},{"path":"components/charts/funnel-chart/model.ts","type":"registry:component","target":"@components/charts/funnel-chart/model.ts"},{"path":"components/motion/number-ticker.tsx","type":"registry:component","target":"@components/motion/number-ticker.tsx"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"liquidity-heatmap","type":"registry:component","title":"Liquidity Heatmap","description":"Animated liquidity bands across price and time, with a price trace and depth tooltips.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/charts/liquidity-heatmap.tsx","type":"registry:component","target":"@components/charts/liquidity-heatmap.tsx"},{"path":"components/charts/liquidity-heatmap/model.ts","type":"registry:component","target":"@components/charts/liquidity-heatmap/model.ts"},{"path":"components/motion/number-ticker.tsx","type":"registry:component","target":"@components/motion/number-ticker.tsx"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"bump-chart","type":"registry:component","title":"Bump Chart","description":"Animated rankings with curved paths, interactive rank dots, and tooltips.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/charts/bump-chart.tsx","type":"registry:component","target":"@components/charts/bump-chart.tsx"},{"path":"components/charts/bump-chart/context.tsx","type":"registry:component","target":"@components/charts/bump-chart/context.tsx"},{"path":"components/charts/bump-chart/legend.tsx","type":"registry:component","target":"@components/charts/bump-chart/legend.tsx"},{"path":"components/charts/bump-chart/model.ts","type":"registry:component","target":"@components/charts/bump-chart/model.ts"},{"path":"components/charts/bump-chart/plot.tsx","type":"registry:component","target":"@components/charts/bump-chart/plot.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"components/charts/bump-chart/point.tsx","type":"registry:component","target":"@components/charts/bump-chart/point.tsx"},{"path":"components/charts/bump-chart/series.tsx","type":"registry:component","target":"@components/charts/bump-chart/series.tsx"},{"path":"components/charts/bump-chart/use-geometry.ts","type":"registry:component","target":"@components/charts/bump-chart/use-geometry.ts"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"order-book","type":"registry:component","title":"Order Book","description":"Animated order book with bid and ask depth, spread, and volume balance.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/charts/order-book.tsx","type":"registry:component","target":"@components/charts/order-book.tsx"},{"path":"components/charts/order-book/depth-row.tsx","type":"registry:component","target":"@components/charts/order-book/depth-row.tsx"},{"path":"components/charts/order-book/model.ts","type":"registry:component","target":"@components/charts/order-book/model.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"heat-calendar","type":"registry:component","title":"Heat Calendar","description":"Composable activity calendar with Grid, Legend, and Tooltip parts, controlled range selection, and UTC calendar dates. Supply weekly intensities to visualize activity and total a selected span.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/charts/heat-calendar.tsx","type":"registry:component","target":"@components/charts/heat-calendar.tsx"},{"path":"components/charts/heat-calendar/context.ts","type":"registry:component","target":"@components/charts/heat-calendar/context.ts"},{"path":"components/charts/heat-calendar/grid.tsx","type":"registry:component","target":"@components/charts/heat-calendar/grid.tsx"},{"path":"components/charts/heat-calendar/legend.tsx","type":"registry:component","target":"@components/charts/heat-calendar/legend.tsx"},{"path":"components/charts/heat-calendar/tooltip.tsx","type":"registry:component","target":"@components/charts/heat-calendar/tooltip.tsx"},{"path":"components/charts/heat-calendar/types.ts","type":"registry:component","target":"@components/charts/heat-calendar/types.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/charts/heat-calendar/utils.ts","type":"registry:component","target":"@components/charts/heat-calendar/utils.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/number-ticker.tsx","type":"registry:component","target":"@components/motion/number-ticker.tsx"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"returns-calendar","type":"registry:component","title":"Returns Calendar","description":"Composable monthly returns calendar with Grid and Tooltip parts, controlled month or year selections, and compounded totals. Supply your own years and monthly percentages.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/charts/returns-calendar.tsx","type":"registry:component","target":"@components/charts/returns-calendar.tsx"},{"path":"components/charts/returns-calendar/context.ts","type":"registry:component","target":"@components/charts/returns-calendar/context.ts"},{"path":"components/charts/returns-calendar/grid.tsx","type":"registry:component","target":"@components/charts/returns-calendar/grid.tsx"},{"path":"components/charts/returns-calendar/tooltip.tsx","type":"registry:component","target":"@components/charts/returns-calendar/tooltip.tsx"},{"path":"components/charts/returns-calendar/types.ts","type":"registry:component","target":"@components/charts/returns-calendar/types.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/charts/returns-calendar/utils.ts","type":"registry:component","target":"@components/charts/returns-calendar/utils.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/number-ticker.tsx","type":"registry:component","target":"@components/motion/number-ticker.tsx"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"price-target-fan","type":"registry:component","title":"Price Target Fan","description":"Composable price target chart with Header, Plot, SVG, Axes, History, Targets, Now, Cursor, and Tooltip parts. Supply dated price history and targets; scrub with a pointer or keyboard and customize the active readout.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/charts/price-target-fan.tsx","type":"registry:component","target":"@components/charts/price-target-fan.tsx"},{"path":"components/charts/price-target-fan/context.ts","type":"registry:component","target":"@components/charts/price-target-fan/context.ts"},{"path":"components/charts/price-target-fan/header.tsx","type":"registry:component","target":"@components/charts/price-target-fan/header.tsx"},{"path":"components/charts/price-target-fan/plot.tsx","type":"registry:component","target":"@components/charts/price-target-fan/plot.tsx"},{"path":"components/charts/price-target-fan/series.tsx","type":"registry:component","target":"@components/charts/price-target-fan/series.tsx"},{"path":"components/charts/price-target-fan/tooltip.tsx","type":"registry:component","target":"@components/charts/price-target-fan/tooltip.tsx"},{"path":"components/charts/price-target-fan/types.ts","type":"registry:component","target":"@components/charts/price-target-fan/types.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/charts/price-target-fan/utils.ts","type":"registry:component","target":"@components/charts/price-target-fan/utils.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"components/motion/number-ticker.tsx","type":"registry:component","target":"@components/motion/number-ticker.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"voice-orb","type":"registry:component","title":"Voice Orb","description":"Breathing liquid voice visualization with flowing highlights, custom pigments and a soft, voice-reactive silhouette. Accepts a normalized level, MotionValue or caller-owned audio analyser, pauses offscreen and supports reduced motion.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/voice-orb.tsx","type":"registry:component","target":"@components/agents/voice-orb.tsx"},{"path":"components/agents/voice-orb/renderer.ts","type":"registry:component","target":"@components/agents/voice-orb/renderer.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"message-bubble","type":"registry:component","title":"Message Bubble","description":"A focused conversational surface with visual tones, independent alignment, grouped messages, expandable content, and interactive link or button support.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/message-bubble.tsx","type":"registry:component","target":"@components/agents/message-bubble.tsx"},{"path":"components/agents/message-context.tsx","type":"registry:component","target":"@components/agents/message-context.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"message","type":"registry:component","title":"Message","description":"Composable conversation primitives for message rows, grouped bubbles, avatars, metadata, live markers, and a mount-only trailing-edge pop-up for newly sent rows.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/message.tsx","type":"registry:component","target":"@components/agents/message.tsx"},{"path":"components/agents/message-bubble.tsx","type":"registry:component","target":"@components/agents/message-bubble.tsx"},{"path":"components/agents/message-context.tsx","type":"registry:component","target":"@components/agents/message-context.tsx"},{"path":"components/agents/message-scroller.tsx","type":"registry:component","target":"@components/agents/message-scroller.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/preview-rail.tsx","type":"registry:component","target":"@components/motion/preview-rail.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"message-scroller","type":"registry:component","title":"Message Scroller","description":"A reader-aware conversation viewport that follows streamed output at the live edge and releases control when the reader moves away.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/message-scroller.tsx","type":"registry:component","target":"@components/agents/message-scroller.tsx"},{"path":"components/motion/preview-rail.tsx","type":"registry:component","target":"@components/motion/preview-rail.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"prompt-input","type":"registry:component","title":"Prompt Input","description":"An auto-growing agent composer with prompt actions, model selection, keyboard submission, and animated send and stop states.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/prompt-input.tsx","type":"registry:component","target":"@components/agents/prompt-input.tsx"},{"path":"components/motion/button/index.tsx","type":"registry:component","target":"@components/motion/button/index.tsx"},{"path":"components/motion/popover-morph.tsx","type":"registry:component","target":"@components/motion/popover-morph.tsx"},{"path":"components/motion/select.tsx","type":"registry:component","target":"@components/motion/select.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/button/base.tsx","type":"registry:component","target":"@components/motion/button/base.tsx"},{"path":"components/motion/button/magnetic.tsx","type":"registry:component","target":"@components/motion/button/magnetic.tsx"},{"path":"components/motion/button/metallic.tsx","type":"registry:component","target":"@components/motion/button/metallic.tsx"},{"path":"components/motion/button/stateful.tsx","type":"registry:component","target":"@components/motion/button/stateful.tsx"},{"path":"components/motion/popover-position.ts","type":"registry:component","target":"@components/motion/popover-position.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"components/motion/magnetic.tsx","type":"registry:component","target":"@components/motion/magnetic.tsx"}]},{"name":"todo-list","type":"registry:component","title":"Todo List","description":"A collapsible agent task plan with morphing status marks, a completion count, compact metadata, and smooth list updates.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/todo-list.tsx","type":"registry:component","target":"@components/agents/todo-list.tsx"},{"path":"components/agents/agent-disclosure.tsx","type":"registry:component","target":"@components/agents/agent-disclosure.tsx"},{"path":"components/motion/action-swap-roll.tsx","type":"registry:component","target":"@components/motion/action-swap-roll.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/action-swap.tsx","type":"registry:component","target":"@components/motion/action-swap.tsx"}]},{"name":"code-block","type":"registry:component","title":"Code Block","description":"A syntax-highlighted code surface with stable streaming updates, line numbers, focused lines, smooth following, and copy feedback.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","shiki","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/code-block.tsx","type":"registry:component","target":"@components/agents/code-block.tsx"},{"path":"components/agents/agent-code.tsx","type":"registry:component","target":"@components/agents/agent-code.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"approval-card","type":"registry:component","title":"Approval Card","description":"A human-in-the-loop decision surface for approvals, single or multiple-choice questions, custom responses, and multi-step review flows.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/approval-card/index.tsx","type":"registry:component","target":"@components/agents/approval-card/index.tsx"},{"path":"components/agents/approval-card/types.ts","type":"registry:component","target":"@components/agents/approval-card/types.ts"},{"path":"components/agents/agent-disclosure.tsx","type":"registry:component","target":"@components/agents/agent-disclosure.tsx"},{"path":"components/motion/action-swap-roll.tsx","type":"registry:component","target":"@components/motion/action-swap-roll.tsx"},{"path":"components/motion/button/index.tsx","type":"registry:component","target":"@components/motion/button/index.tsx"},{"path":"components/motion/checkbox.tsx","type":"registry:component","target":"@components/motion/checkbox.tsx"},{"path":"components/motion/input.tsx","type":"registry:component","target":"@components/motion/input.tsx"},{"path":"components/motion/radio.tsx","type":"registry:component","target":"@components/motion/radio.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/action-swap.tsx","type":"registry:component","target":"@components/motion/action-swap.tsx"},{"path":"components/motion/button/base.tsx","type":"registry:component","target":"@components/motion/button/base.tsx"},{"path":"components/motion/button/magnetic.tsx","type":"registry:component","target":"@components/motion/button/magnetic.tsx"},{"path":"components/motion/button/metallic.tsx","type":"registry:component","target":"@components/motion/button/metallic.tsx"},{"path":"components/motion/button/stateful.tsx","type":"registry:component","target":"@components/motion/button/stateful.tsx"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"components/motion/magnetic.tsx","type":"registry:component","target":"@components/motion/magnetic.tsx"}]},{"name":"file-diff","type":"registry:component","title":"File Diff","description":"A syntax-highlighted file change disclosure with progressive rows, line numbers, live change counts, smooth following, and completion collapse.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","shiki","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/file-diff.tsx","type":"registry:component","target":"@components/agents/file-diff.tsx"},{"path":"components/agents/agent-code.tsx","type":"registry:component","target":"@components/agents/agent-code.tsx"},{"path":"components/agents/agent-disclosure.tsx","type":"registry:component","target":"@components/agents/agent-disclosure.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"tool-result","type":"registry:component","title":"Tool Result","description":"A lightweight execution disclosure for syntax-highlighted terminal output and request responses that collapses into a compact completed state.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","shiki","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/tool-result.tsx","type":"registry:component","target":"@components/agents/tool-result.tsx"},{"path":"components/agents/agent-code.tsx","type":"registry:component","target":"@components/agents/agent-code.tsx"},{"path":"components/agents/agent-disclosure.tsx","type":"registry:component","target":"@components/agents/agent-disclosure.tsx"},{"path":"components/motion/action-swap-roll.tsx","type":"registry:component","target":"@components/motion/action-swap-roll.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/action-swap.tsx","type":"registry:component","target":"@components/motion/action-swap.tsx"}]},{"name":"streaming-response","type":"registry:component","title":"Streaming Response","description":"A stable response surface with completion actions, rendered content, and an expandable source summary.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/streaming-response.tsx","type":"registry:component","target":"@components/agents/streaming-response.tsx"},{"path":"components/agents/agent-disclosure.tsx","type":"registry:component","target":"@components/agents/agent-disclosure.tsx"},{"path":"components/agents/citations.tsx","type":"registry:component","target":"@components/agents/citations.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/hooks/use-favicon.ts","type":"registry:hook","target":"@lib/hooks/use-favicon.ts"},{"path":"lib/favicon.ts","type":"registry:lib","target":"@lib/favicon.ts"}]},{"name":"image-generation","type":"registry:component","title":"Image Generation","description":"A stable generated-image surface that moves from queued work through progressive refinement to a completed result without layout shift.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/image-generation.tsx","type":"registry:component","target":"@components/agents/image-generation.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"tool-approval","type":"registry:component","title":"Tool Approval","description":"A human-in-the-loop permission card for reviewing tool details, allowing once, remembering access, or denying execution.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","shiki","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/tool-approval.tsx","type":"registry:component","target":"@components/agents/tool-approval.tsx"},{"path":"components/agents/agent-code.tsx","type":"registry:component","target":"@components/agents/agent-code.tsx"},{"path":"components/agents/agent-disclosure.tsx","type":"registry:component","target":"@components/agents/agent-disclosure.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"citations","type":"registry:component","title":"Citations","description":"Inline citation markers paired with a collapsible, progressively rendered reference collection for grounded agent responses.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/citations.tsx","type":"registry:component","target":"@components/agents/citations.tsx"},{"path":"components/agents/agent-disclosure.tsx","type":"registry:component","target":"@components/agents/agent-disclosure.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-favicon.ts","type":"registry:hook","target":"@lib/hooks/use-favicon.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/favicon.ts","type":"registry:lib","target":"@lib/favicon.ts"}]},{"name":"agent-activity","type":"registry:component","title":"Agent Activity","description":"One adaptive activity stream for reasoning, searches, tool calls, structured execution traces, or a chronological mix.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/agent-activity/index.tsx","type":"registry:component","target":"@components/agents/agent-activity/index.tsx"},{"path":"components/agents/agent-activity/activity-row.tsx","type":"registry:component","target":"@components/agents/agent-activity/activity-row.tsx"},{"path":"components/agents/agent-activity/types.ts","type":"registry:component","target":"@components/agents/agent-activity/types.ts"},{"path":"components/agents/agent-disclosure.tsx","type":"registry:component","target":"@components/agents/agent-disclosure.tsx"},{"path":"components/agents/loading-states/thinking-shimmer.tsx","type":"registry:component","target":"@components/agents/loading-states/thinking-shimmer.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/text-shimmer.tsx","type":"registry:component","target":"@components/motion/text-shimmer.tsx"},{"path":"lib/text-shimmer.ts","type":"registry:lib","target":"@lib/text-shimmer.ts"}]},{"name":"reasoning-text","type":"registry:component","title":"Agent Loading States Reasoning Text","description":"Shimmering reasoning copy with an ASCII loader and cascade, phrase-swap, or per-letter scramble transitions.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/loading-states/reasoning-text.tsx","type":"registry:component","target":"@components/agents/loading-states/reasoning-text.tsx"},{"path":"components/motion/loader.tsx","type":"registry:component","target":"@components/motion/loader.tsx"},{"path":"components/motion/text-scramble.tsx","type":"registry:component","target":"@components/motion/text-scramble.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/text-shimmer.ts","type":"registry:lib","target":"@lib/text-shimmer.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"thinking-shimmer","type":"registry:component","title":"Agent Loading States Thinking Shimmer","description":"A quiet shimmer that keeps the agent's current status readable while work continues.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/loading-states/thinking-shimmer.tsx","type":"registry:component","target":"@components/agents/loading-states/thinking-shimmer.tsx"},{"path":"components/motion/text-shimmer.tsx","type":"registry:component","target":"@components/motion/text-shimmer.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/text-shimmer.ts","type":"registry:lib","target":"@lib/text-shimmer.ts"}]},{"name":"agent-progress","type":"registry:component","title":"Agent Loading States Agent Progress","description":"A compact activity glyph, action verb, and live tabular timer for longer-running agent work.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/loading-states/agent-progress.tsx","type":"registry:component","target":"@components/agents/loading-states/agent-progress.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"ai-sidebar","type":"registry:component","title":"AI Sidebar","description":"A collapsible AI workspace sidebar for folders, projects, files, and bookmarks with keyboard navigation, optimistic moves, inline rename, and overflow-aware labels.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/ai-sidebar.tsx","type":"registry:component","target":"@components/agents/ai-sidebar.tsx"},{"path":"components/motion/popover-morph.tsx","type":"registry:component","target":"@components/motion/popover-morph.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-touch-capable.ts","type":"registry:hook","target":"@lib/hooks/use-touch-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/popover-position.ts","type":"registry:component","target":"@components/motion/popover-position.ts"}]},{"name":"chat-app","type":"registry:component","title":"Chat App","description":"A complete agent conversation workspace composing navigation, messages, streaming, planning, approvals, tools, code, diffs, generated media, sources, and prompt input.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","shiki","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/agents/chat-app.tsx","type":"registry:component","target":"@components/agents/chat-app.tsx"},{"path":"components/agents/agent-activity/index.tsx","type":"registry:component","target":"@components/agents/agent-activity/index.tsx"},{"path":"components/agents/ai-sidebar.tsx","type":"registry:component","target":"@components/agents/ai-sidebar.tsx"},{"path":"components/agents/approval-card/index.tsx","type":"registry:component","target":"@components/agents/approval-card/index.tsx"},{"path":"components/agents/code-block.tsx","type":"registry:component","target":"@components/agents/code-block.tsx"},{"path":"components/agents/file-diff.tsx","type":"registry:component","target":"@components/agents/file-diff.tsx"},{"path":"components/agents/image-generation.tsx","type":"registry:component","target":"@components/agents/image-generation.tsx"},{"path":"components/agents/loading-states/thinking-shimmer.tsx","type":"registry:component","target":"@components/agents/loading-states/thinking-shimmer.tsx"},{"path":"components/agents/message.tsx","type":"registry:component","target":"@components/agents/message.tsx"},{"path":"components/agents/message-bubble.tsx","type":"registry:component","target":"@components/agents/message-bubble.tsx"},{"path":"components/agents/message-scroller.tsx","type":"registry:component","target":"@components/agents/message-scroller.tsx"},{"path":"components/agents/prompt-input.tsx","type":"registry:component","target":"@components/agents/prompt-input.tsx"},{"path":"components/agents/streaming-response.tsx","type":"registry:component","target":"@components/agents/streaming-response.tsx"},{"path":"components/agents/todo-list.tsx","type":"registry:component","target":"@components/agents/todo-list.tsx"},{"path":"components/agents/tool-approval.tsx","type":"registry:component","target":"@components/agents/tool-approval.tsx"},{"path":"components/agents/tool-result.tsx","type":"registry:component","target":"@components/agents/tool-result.tsx"},{"path":"components/motion/animated-sidebar.tsx","type":"registry:component","target":"@components/motion/animated-sidebar.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/agents/agent-activity/activity-row.tsx","type":"registry:component","target":"@components/agents/agent-activity/activity-row.tsx"},{"path":"components/agents/agent-activity/types.ts","type":"registry:component","target":"@components/agents/agent-activity/types.ts"},{"path":"components/agents/agent-disclosure.tsx","type":"registry:component","target":"@components/agents/agent-disclosure.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/popover-morph.tsx","type":"registry:component","target":"@components/motion/popover-morph.tsx"},{"path":"lib/hooks/use-touch-capable.ts","type":"registry:hook","target":"@lib/hooks/use-touch-capable.ts"},{"path":"components/agents/approval-card/types.ts","type":"registry:component","target":"@components/agents/approval-card/types.ts"},{"path":"components/motion/action-swap-roll.tsx","type":"registry:component","target":"@components/motion/action-swap-roll.tsx"},{"path":"components/motion/button/index.tsx","type":"registry:component","target":"@components/motion/button/index.tsx"},{"path":"components/motion/checkbox.tsx","type":"registry:component","target":"@components/motion/checkbox.tsx"},{"path":"components/motion/input.tsx","type":"registry:component","target":"@components/motion/input.tsx"},{"path":"components/motion/radio.tsx","type":"registry:component","target":"@components/motion/radio.tsx"},{"path":"components/agents/agent-code.tsx","type":"registry:component","target":"@components/agents/agent-code.tsx"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"components/motion/text-shimmer.tsx","type":"registry:component","target":"@components/motion/text-shimmer.tsx"},{"path":"components/agents/message-context.tsx","type":"registry:component","target":"@components/agents/message-context.tsx"},{"path":"components/motion/preview-rail.tsx","type":"registry:component","target":"@components/motion/preview-rail.tsx"},{"path":"components/motion/select.tsx","type":"registry:component","target":"@components/motion/select.tsx"},{"path":"components/agents/citations.tsx","type":"registry:component","target":"@components/agents/citations.tsx"},{"path":"components/motion/shared-layout-bg.tsx","type":"registry:component","target":"@components/motion/shared-layout-bg.tsx"},{"path":"components/motion/popover-position.ts","type":"registry:component","target":"@components/motion/popover-position.ts"},{"path":"components/motion/action-swap.tsx","type":"registry:component","target":"@components/motion/action-swap.tsx"},{"path":"components/motion/button/base.tsx","type":"registry:component","target":"@components/motion/button/base.tsx"},{"path":"components/motion/button/magnetic.tsx","type":"registry:component","target":"@components/motion/button/magnetic.tsx"},{"path":"components/motion/button/metallic.tsx","type":"registry:component","target":"@components/motion/button/metallic.tsx"},{"path":"components/motion/button/stateful.tsx","type":"registry:component","target":"@components/motion/button/stateful.tsx"},{"path":"lib/text-shimmer.ts","type":"registry:lib","target":"@lib/text-shimmer.ts"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/hooks/use-favicon.ts","type":"registry:hook","target":"@lib/hooks/use-favicon.ts"},{"path":"components/motion/magnetic.tsx","type":"registry:component","target":"@components/motion/magnetic.tsx"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/favicon.ts","type":"registry:lib","target":"@lib/favicon.ts"}]},{"name":"infinite-masonry","type":"registry:block","title":"Infinite Masonry","description":"Responsive virtualized masonry that measures variable-height cards and loads more data as the user nears the end.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@tanstack/react-virtual","clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/infinite-masonry.tsx","type":"registry:component","target":"@components/motion/infinite-masonry.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"notification-stack","type":"registry:block","title":"Notification Stack","description":"Compact notification cards that spring from a stacked summary into a readable list on hover, focus or tap.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/notification-stack.tsx","type":"registry:component","target":"@components/motion/notification-stack.tsx"},{"path":"components/motion/action-swap.tsx","type":"registry:component","target":"@components/motion/action-swap.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"project-folder","type":"registry:block","title":"Project Folder","description":"An interactive project folder that opens its file fan on hover or focus, expands into a focus-managed overlay, then retraces the complete path when closed.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/project-folder.tsx","type":"registry:component","target":"@components/motion/project-folder.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"card-folder","type":"registry:block","title":"Card Folder","description":"A landscape card tucked into a stitched purse pocket that lifts forward as the purse compresses into its bottom seam, with controlled open and card-detail visibility plus a separate overflow action.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/card-folder.tsx","type":"registry:component","target":"@components/motion/card-folder.tsx"},{"path":"components/motion/digit-swap.tsx","type":"registry:component","target":"@components/motion/digit-swap.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"knockout-wheel","type":"registry:block","title":"Fixtures Knockout Wheel","description":"The tournament drawn radially. The champion holds the hub, each round is a ring further out, and the teams themselves form the rim. Nodes spring in ring by ring, and hovering one isolates that team while the rest recede. Teams show a flag, a logo or their initials, and a deeper draw grows another ring.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/knockout-wheel.tsx","type":"registry:component","target":"@components/motion/knockout-wheel.tsx"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"knockout-bracket","type":"registry:block","title":"Fixtures Knockout Bracket","description":"Pages one round at a time. The leftmost round stacks at a fixed rhythm, each later round centers between its two feeder matches, and cards, elbow connectors, headers and stage height animate into every new layout. A third place play-off sits below the tree under its own rule. Round names, team artwork, dates and result chips all come from the data you pass.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/knockout-bracket.tsx","type":"registry:component","target":"@components/motion/knockout-bracket.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"availability-scheduler","type":"registry:block","title":"Availability Scheduler","description":"Weekly availability editor where each day springs between available and unavailable, time ranges add and remove with blur-slide motion, times pick from a scrollable dropdown, and a copy menu clones hours to other days.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/availability-scheduler/index.tsx","type":"registry:component","target":"@components/motion/availability-scheduler/index.tsx"},{"path":"components/motion/availability-scheduler/day-row.tsx","type":"registry:component","target":"@components/motion/availability-scheduler/day-row.tsx"},{"path":"components/motion/availability-scheduler/types.ts","type":"registry:component","target":"@components/motion/availability-scheduler/types.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/availability-scheduler/copy-menu.tsx","type":"registry:component","target":"@components/motion/availability-scheduler/copy-menu.tsx"},{"path":"components/motion/availability-scheduler/icon-button.tsx","type":"registry:component","target":"@components/motion/availability-scheduler/icon-button.tsx"},{"path":"components/motion/availability-scheduler/time-select.tsx","type":"registry:component","target":"@components/motion/availability-scheduler/time-select.tsx"},{"path":"components/motion/switch.tsx","type":"registry:component","target":"@components/motion/switch.tsx"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/checkbox.tsx","type":"registry:component","target":"@components/motion/checkbox.tsx"},{"path":"components/motion/popover-morph.tsx","type":"registry:component","target":"@components/motion/popover-morph.tsx"},{"path":"components/motion/select.tsx","type":"registry:component","target":"@components/motion/select.tsx"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"components/motion/popover-position.ts","type":"registry:component","target":"@components/motion/popover-position.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"swap","type":"registry:block","title":"Multi-chain Swap","description":"Cross-chain swap widget with chain + token selectors, morphing views, animated flip and quote.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/swap.tsx","type":"registry:component","target":"@components/motion/swap.tsx"},{"path":"components/motion/swap/constants.ts","type":"registry:component","target":"@components/motion/swap/constants.ts"},{"path":"components/motion/swap/controls.tsx","type":"registry:component","target":"@components/motion/swap/controls.tsx"},{"path":"components/motion/swap/data.ts","type":"registry:component","target":"@components/motion/swap/data.ts"},{"path":"components/motion/swap/field.tsx","type":"registry:component","target":"@components/motion/swap/field.tsx"},{"path":"components/motion/swap/quote-row.tsx","type":"registry:component","target":"@components/motion/swap/quote-row.tsx"},{"path":"components/motion/swap/token-picker.tsx","type":"registry:component","target":"@components/motion/swap/token-picker.tsx"},{"path":"components/motion/swap/types.ts","type":"registry:component","target":"@components/motion/swap/types.ts"},{"path":"components/motion/swap/utils.ts","type":"registry:component","target":"@components/motion/swap/utils.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/swap/token-badges.tsx","type":"registry:component","target":"@components/motion/swap/token-badges.tsx"}]},{"name":"dynamic-island","type":"registry:block","title":"Dynamic Island","description":"iOS-style island pill that morphs between live activity views with bouncy shell resize and blur crossfades.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/dynamic-island.tsx","type":"registry:component","target":"@components/motion/dynamic-island.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"command-palette","type":"registry:block","title":"Command Palette","description":"⌘K palette with fuzzy filter, spring-animated active row and glass surface.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/command-palette.tsx","type":"registry:component","target":"@components/motion/command-palette.tsx"},{"path":"lib/command-search.ts","type":"registry:lib","target":"@lib/command-search.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-on-open.ts","type":"registry:hook","target":"@lib/hooks/use-on-open.ts"},{"path":"lib/hooks/use-row-cursor.ts","type":"registry:hook","target":"@lib/hooks/use-row-cursor.ts"},{"path":"lib/hooks/use-touch-capable.ts","type":"registry:hook","target":"@lib/hooks/use-touch-capable.ts"},{"path":"lib/presence-gate.tsx","type":"registry:lib","target":"@lib/presence-gate.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"morphing-search","type":"registry:block","title":"Morphing Search","description":"Search field or compact icon that morphs into a glass results surface, whether opened by click or keyboard shortcut.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/morphing-search.tsx","type":"registry:component","target":"@components/motion/morphing-search.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-on-open.ts","type":"registry:hook","target":"@lib/hooks/use-on-open.ts"},{"path":"lib/hooks/use-row-cursor.ts","type":"registry:hook","target":"@lib/hooks/use-row-cursor.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"expandable-action-bar","type":"registry:block","title":"Expandable Action Bar","description":"Compact icon actions that expand into labeled controls on hover or focus with shared layout motion.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/expandable-action-bar.tsx","type":"registry:component","target":"@components/motion/expandable-action-bar.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"overflow-actions","type":"registry:block","title":"Overflow Actions","description":"Connected pill rail for primary actions that springs open to reveal extra controls.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/overflow-actions.tsx","type":"registry:component","target":"@components/motion/overflow-actions.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"expandable-tabs","type":"registry:block","title":"Expandable Tabs","description":"Icon tab bar where the active tab expands to a labelled pill, with a panel above that morphs height and slides content direction-aware on switch.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/expandable-tabs.tsx","type":"registry:component","target":"@components/motion/expandable-tabs.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"morphing-tabs","type":"registry:block","title":"Morphing Tabs","description":"Reorderable tabs whose selected item grows into a white content surface, with the active shape gliding as tabs move and a shared morph between rooms.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/morphing-tabs.tsx","type":"registry:component","target":"@components/motion/morphing-tabs.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"swipeable-list","type":"registry:block","title":"Swipeable List","description":"Mobile-style list rows that swipe left or right to reveal contextual action buttons.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/swipeable-list.tsx","type":"registry:component","target":"@components/motion/swipeable-list.tsx"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"attachment-upload","type":"registry:block","title":"File Upload Attachment Upload","description":"A mixed attachment workspace with a dropzone, staggered file and image rows, animated upload, success, failure, retry and removal feedback, shared-layout image previews, and an audio waveform.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/attachment-upload.tsx","type":"registry:component","target":"@components/motion/attachment-upload.tsx"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/presence-gate.tsx","type":"registry:lib","target":"@lib/presence-gate.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"file-upload","type":"registry:block","title":"File Upload Upload Queue","description":"A drag-and-drop upload queue with progress rows, upload states, retry, and removal.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/file-upload.tsx","type":"registry:component","target":"@components/motion/file-upload.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"prediction-market-card","type":"registry:block","title":"Prediction Market Market Cards","description":"Compact market listings with consistent outcome rows, animated odds CTAs, payout multipliers and bookmarks. Odds CTAs use green/red backgrounds and roll into Yes/No labels on hover or keyboard focus. Use Update odds to preview animated price changes.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["@floating-ui/dom","clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/prediction-market-card.tsx","type":"registry:component","target":"@components/motion/prediction-market-card.tsx"},{"path":"components/motion/action-swap.tsx","type":"registry:component","target":"@components/motion/action-swap.tsx"},{"path":"components/motion/tooltip.tsx","type":"registry:component","target":"@components/motion/tooltip.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/tooltip/positioner.tsx","type":"registry:component","target":"@components/motion/tooltip/positioner.tsx"},{"path":"components/motion/tooltip/use-position.ts","type":"registry:component","target":"@components/motion/tooltip/use-position.ts"},{"path":"components/motion/tooltip-surface.tsx","type":"registry:component","target":"@components/motion/tooltip-surface.tsx"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/hooks/use-hover-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-hover-gesture.ts"},{"path":"lib/hooks/use-tap-gesture.ts","type":"registry:hook","target":"@lib/hooks/use-tap-gesture.ts"},{"path":"lib/touch.ts","type":"registry:lib","target":"@lib/touch.ts"}]},{"name":"prediction-market","type":"registry:block","title":"Prediction Market Trade Ticket","description":"Buy and sell outcomes with rolling amount entry, quick add chips and trade states.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/prediction-market.tsx","type":"registry:component","target":"@components/motion/prediction-market.tsx"},{"path":"components/motion/button/stateful.tsx","type":"registry:component","target":"@components/motion/button/stateful.tsx"},{"path":"components/motion/number-ticker.tsx","type":"registry:component","target":"@components/motion/number-ticker.tsx"},{"path":"components/motion/tabs.tsx","type":"registry:component","target":"@components/motion/tabs.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/button/base.tsx","type":"registry:component","target":"@components/motion/button/base.tsx"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"}]},{"name":"wallet-card","type":"registry:block","title":"Wallet Card","description":"Wallet overview card with an account switcher and search that morph open from their triggers, a cascading balance with a live change pill and privacy toggle, copy-address, and Send / Deposit / Swap / Buy actions.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/wallet-card/index.tsx","type":"registry:component","target":"@components/motion/wallet-card/index.tsx"},{"path":"components/motion/wallet-card/account-switcher.tsx","type":"registry:component","target":"@components/motion/wallet-card/account-switcher.tsx"},{"path":"components/motion/wallet-card/actions.tsx","type":"registry:component","target":"@components/motion/wallet-card/actions.tsx"},{"path":"components/motion/wallet-card/balance-delta.tsx","type":"registry:component","target":"@components/motion/wallet-card/balance-delta.tsx"},{"path":"components/motion/wallet-card/search-bar.tsx","type":"registry:component","target":"@components/motion/wallet-card/search-bar.tsx"},{"path":"components/motion/wallet-card/types.ts","type":"registry:component","target":"@components/motion/wallet-card/types.ts"},{"path":"components/motion/action-swap.tsx","type":"registry:component","target":"@components/motion/action-swap.tsx"},{"path":"components/motion/button/index.tsx","type":"registry:component","target":"@components/motion/button/index.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/wallet-card/account-avatar.tsx","type":"registry:component","target":"@components/motion/wallet-card/account-avatar.tsx"},{"path":"components/motion/wallet-card/constants.ts","type":"registry:component","target":"@components/motion/wallet-card/constants.ts"},{"path":"components/motion/wallet-card/copy-button.tsx","type":"registry:component","target":"@components/motion/wallet-card/copy-button.tsx"},{"path":"components/motion/wallet-card/utils.ts","type":"registry:component","target":"@components/motion/wallet-card/utils.ts"},{"path":"lib/hooks/use-dismiss.ts","type":"registry:hook","target":"@lib/hooks/use-dismiss.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"components/motion/button/base.tsx","type":"registry:component","target":"@components/motion/button/base.tsx"},{"path":"components/motion/button/magnetic.tsx","type":"registry:component","target":"@components/motion/button/magnetic.tsx"},{"path":"components/motion/button/metallic.tsx","type":"registry:component","target":"@components/motion/button/metallic.tsx"},{"path":"components/motion/button/stateful.tsx","type":"registry:component","target":"@components/motion/button/stateful.tsx"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"components/motion/magnetic.tsx","type":"registry:component","target":"@components/motion/magnetic.tsx"}]},{"name":"otp-input","type":"registry:block","title":"OTP Input","description":"One-time-code input with a gliding focus ring, digits that roll in per slot, error shake and a success check draw.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/otp-input.tsx","type":"registry:component","target":"@components/motion/otp-input.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"signup-form","type":"registry:block","title":"Sign Up Form","description":"Composed sign-up form that flags a field only once it is left, then clears the moment it is fixed, with a length-weighted strength meter, password reveal and an animated submit lifecycle.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/signup-form.tsx","type":"registry:component","target":"@components/motion/signup-form.tsx"},{"path":"components/motion/button/index.tsx","type":"registry:component","target":"@components/motion/button/index.tsx"},{"path":"components/motion/checkbox.tsx","type":"registry:component","target":"@components/motion/checkbox.tsx"},{"path":"components/motion/input.tsx","type":"registry:component","target":"@components/motion/input.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/button/base.tsx","type":"registry:component","target":"@components/motion/button/base.tsx"},{"path":"components/motion/button/magnetic.tsx","type":"registry:component","target":"@components/motion/button/magnetic.tsx"},{"path":"components/motion/button/metallic.tsx","type":"registry:component","target":"@components/motion/button/metallic.tsx"},{"path":"components/motion/button/stateful.tsx","type":"registry:component","target":"@components/motion/button/stateful.tsx"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"components/motion/magnetic.tsx","type":"registry:component","target":"@components/motion/magnetic.tsx"}]},{"name":"bloom-menu","type":"registry:block","title":"Bloom Menu","description":"A button that morphs open into a menu and blooms iris-out from the center, the grid revealing in every direction with radially staggered items.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/bloom-menu.tsx","type":"registry:component","target":"@components/motion/bloom-menu.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"feedback-widget","type":"registry:block","title":"Feedback Widget","description":"Corner trigger that morphs open into a feedback popup with message entry and animated sending, success and retry states.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","lucide-react","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/feedback-widget.tsx","type":"registry:component","target":"@components/motion/feedback-widget.tsx"},{"path":"components/motion/button/index.tsx","type":"registry:component","target":"@components/motion/button/index.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"components/motion/button/base.tsx","type":"registry:component","target":"@components/motion/button/base.tsx"},{"path":"components/motion/button/magnetic.tsx","type":"registry:component","target":"@components/motion/button/magnetic.tsx"},{"path":"components/motion/button/metallic.tsx","type":"registry:component","target":"@components/motion/button/metallic.tsx"},{"path":"components/motion/button/stateful.tsx","type":"registry:component","target":"@components/motion/button/stateful.tsx"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"components/motion/magnetic.tsx","type":"registry:component","target":"@components/motion/magnetic.tsx"}]},{"name":"not-found-glitch","type":"registry:block","title":"404 / Not Found Glitch","description":"Digits scramble through random glyphs before resolving, with a chromatic split on hover.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/not-found/glitch.tsx","type":"registry:component","target":"@components/motion/not-found/glitch.tsx"},{"path":"components/motion/not-found/shared.tsx","type":"registry:component","target":"@components/motion/not-found/shared.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"not-found-magnetic","type":"registry:block","title":"404 / Not Found Magnetic","description":"Each digit is cursor-attracted via the Magnetic wrapper and springs back on leave.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/not-found/magnetic.tsx","type":"registry:component","target":"@components/motion/not-found/magnetic.tsx"},{"path":"components/motion/not-found/shared.tsx","type":"registry:component","target":"@components/motion/not-found/shared.tsx"},{"path":"components/motion/magnetic.tsx","type":"registry:component","target":"@components/motion/magnetic.tsx"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"}]},{"name":"not-found-spotlight","type":"registry:block","title":"404 / Not Found Spotlight","description":"A dark panel where a cursor-tracked spotlight reveals the bright code from a dim base.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/not-found/spotlight.tsx","type":"registry:component","target":"@components/motion/not-found/spotlight.tsx"},{"path":"components/motion/not-found/shared.tsx","type":"registry:component","target":"@components/motion/not-found/shared.tsx"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"}]},{"name":"not-found-stacked","type":"registry:block","title":"404 / Not Found Stacked","description":"A code card over a hidden stack that fans out with a spring on hover.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/not-found/stacked.tsx","type":"registry:component","target":"@components/motion/not-found/stacked.tsx"},{"path":"components/motion/not-found/shared.tsx","type":"registry:component","target":"@components/motion/not-found/shared.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]},{"name":"not-found-terminal","type":"registry:block","title":"404 / Not Found Terminal","description":"A terminal window that types a failed cd command and a 404 status, with a blinking caret.","author":"Saurabh <saurabh10102@gmail.com>","dependencies":["clsx","motion","tailwind-merge"],"registryDependencies":[],"files":[{"path":"components/motion/not-found/terminal.tsx","type":"registry:component","target":"@components/motion/not-found/terminal.tsx"},{"path":"components/motion/not-found/shared.tsx","type":"registry:component","target":"@components/motion/not-found/shared.tsx"},{"path":"components/motion/text-reveal.tsx","type":"registry:component","target":"@components/motion/text-reveal.tsx"},{"path":"lib/ease.ts","type":"registry:lib","target":"@lib/ease.ts"},{"path":"lib/hooks/use-hover-capable.ts","type":"registry:hook","target":"@lib/hooks/use-hover-capable.ts"},{"path":"lib/utils.ts","type":"registry:lib","target":"@lib/utils.ts"}]}]}