{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "bevelui", "homepage": "https://bevelui.vercel.app", "items": [ { "name": "tour", "type": "registry:block", "title": "Product Tour", "description": "A fully-engineered guided product tour system with overlay, floating card, keyboard navigation, and media support. Drop-in replacement for building interactive onboarding flows.", "author": "Bevel UI ", "categories": ["systems", "onboarding"], "dependencies": ["@floating-ui/react", "motion"], "registryDependencies": ["button", "badge"], "docs": "Import from @/components/bevelui/tour. Wrap your app with TourRoot, attach TourAnchor to any element, and use TourTrigger to start the tour.", "files": [ { "path": "src/components/bevelui/tour/types.ts", "target": "src/components/bevelui/tour/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/tour/tour-context.tsx", "target": "src/components/bevelui/tour/tour-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/tour/tour-anchor.tsx", "target": "src/components/bevelui/tour/tour-anchor.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/tour/tour-overlay.tsx", "target": "src/components/bevelui/tour/tour-overlay.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/tour/tour-card.tsx", "target": "src/components/bevelui/tour/tour-card.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/tour/tour-root.tsx", "target": "src/components/bevelui/tour/tour-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/tour/tour-trigger.tsx", "target": "src/components/bevelui/tour/tour-trigger.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/tour/index.ts", "target": "src/components/bevelui/tour/index.ts", "type": "registry:lib" } ] }, { "name": "command-palette", "type": "registry:block", "title": "Command Palette", "description": "A fully-engineered command palette system with fuzzy search, keyboard navigation, grouped results, source tabs, filter tabs, and a Raycast-style footer. Global ⌘K shortcut included.", "author": "Bevel UI ", "categories": ["systems", "navigation"], "dependencies": ["motion"], "registryDependencies": ["button", "badge", "input", "separator"], "docs": "Import from @/components/bevelui/command-palette. Use CommandPaletteRoot as the provider, CommandPaletteTrigger to open it, and pass your sections as structured data.", "files": [ { "path": "src/components/bevelui/command-palette/types.ts", "target": "src/components/bevelui/command-palette/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/command-palette/command-palette-fuzzy.ts", "target": "src/components/bevelui/command-palette/command-palette-fuzzy.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/command-palette/command-palette-context.tsx", "target": "src/components/bevelui/command-palette/command-palette-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/command-palette/command-palette-searchbar.tsx", "target": "src/components/bevelui/command-palette/command-palette-searchbar.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/command-palette/command-palette-tabs.tsx", "target": "src/components/bevelui/command-palette/command-palette-tabs.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/command-palette/command-palette-results.tsx", "target": "src/components/bevelui/command-palette/command-palette-results.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/command-palette/command-palette-footer.tsx", "target": "src/components/bevelui/command-palette/command-palette-footer.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/command-palette/command-palette.tsx", "target": "src/components/bevelui/command-palette/command-palette.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/command-palette/command-palette-root.tsx", "target": "src/components/bevelui/command-palette/command-palette-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/command-palette/command-palette-trigger.tsx", "target": "src/components/bevelui/command-palette/command-palette-trigger.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/command-palette/index.ts", "target": "src/components/bevelui/command-palette/index.ts", "type": "registry:lib" } ] }, { "name": "file-upload", "type": "registry:block", "title": "File Upload", "description": "A fully-engineered file upload system with drag-and-drop, per-file progress tracking, validation, error states, retry logic, and cancel support. Consumer-provided upload function keeps it backend-agnostic.", "author": "Bevel UI ", "categories": ["systems", "forms"], "dependencies": ["react-dropzone", "motion"], "registryDependencies": [ "button", "badge", "progress", "dialog", "separator" ], "docs": "Import from @/components/bevelui/file-upload. Use FileUploadRoot as the provider and supply your own onUpload function. Supports S3, Cloudinary, or any custom endpoint.", "files": [ { "path": "src/components/bevelui/file-upload/types.ts", "target": "src/components/bevelui/file-upload/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/file-upload/file-upload-context.tsx", "target": "src/components/bevelui/file-upload/file-upload-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/file-upload/file-upload-dropzone.tsx", "target": "src/components/bevelui/file-upload/file-upload-dropzone.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/file-upload/file-upload-item.tsx", "target": "src/components/bevelui/file-upload/file-upload-item.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/file-upload/file-upload-list.tsx", "target": "src/components/bevelui/file-upload/file-upload-list.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/file-upload/file-upload-root.tsx", "target": "src/components/bevelui/file-upload/file-upload-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/file-upload/index.ts", "target": "src/components/bevelui/file-upload/index.ts", "type": "registry:lib" } ] }, { "name": "form-engine", "type": "registry:block", "title": "Form Engine", "description": "A step orchestration engine for multi-step and single-step forms. Owns the flow — you own the fields. Bring any validation library via plugins, or wire in your own form state with FormEngineStep.", "author": "Bevel UI ", "categories": ["systems"], "dependencies": [ "react-hook-form", "@hookform/resolvers", "zod", "motion" ], "registryDependencies": ["button", "input-group", "field"], "docs": "Import from @/components/bevelui/form-engine. Use FormEngine for a batteries-included experience with config-driven fields, or FormEngineRoot for headless mode. The engine manages step flow, validation gates, and submission — you bring the fields and state. Plugins extend lifecycle hooks for validation, analytics, and more.", "files": [ { "path": "src/components/bevelui/form-engine/types.ts", "target": "src/components/bevelui/form-engine/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/form-engine/form-engine.tsx", "target": "src/components/bevelui/form-engine/form-engine.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/form-engine/form-engine-root.tsx", "target": "src/components/bevelui/form-engine/form-engine-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/form-engine/form-engine-context.tsx", "target": "src/components/bevelui/form-engine/form-engine-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/form-engine/form-engine-field.tsx", "target": "src/components/bevelui/form-engine/form-engine-field.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/form-engine/form-engine-hook.tsx", "target": "src/components/bevelui/form-engine/form-engine-hook.tsx", "type": "registry:lib" }, { "path": "src/components/bevelui/form-engine/form-engine-navigation.tsx", "target": "src/components/bevelui/form-engine/form-engine-navigation.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/form-engine/form-engine-plugin.ts", "target": "src/components/bevelui/form-engine/form-engine-plugin.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/form-engine/form-engine-progress.tsx", "target": "src/components/bevelui/form-engine/form-engine-progress.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/form-engine/form-engine-step.tsx", "target": "src/components/bevelui/form-engine/form-engine-step.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/form-engine/form-engine-step-canvas.tsx", "target": "src/components/bevelui/form-engine/form-engine-step-canvas.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/form-engine/form-engine-step-meta.tsx", "target": "src/components/bevelui/form-engine/form-engine-step-meta.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/form-engine/index.ts", "target": "src/components/bevelui/form-engine/index.ts", "type": "registry:lib" } ] }, { "name": "sortable", "type": "registry:block", "title": "Sortable", "description": "A headless drag-to-reorder system built on @dnd-kit. Supports whole-row drag or handle-only mode, custom drag overlays, vertical list and grid layouts, and a useSortableList hook for typed list mutations.", "author": "Bevel UI ", "categories": ["systems", "drag-and-drop"], "dependencies": [ "@dnd-kit/core", "@dnd-kit/sortable", "@dnd-kit/utilities", "@dnd-kit/modifiers" ], "registryDependencies": [], "docs": "Import from @/components/bevelui/sortable. Wrap your list with SortableRoot, mark each row with SortableItem, and optionally add SortableHandle for grip-only drag. Pass config={{ layout: 'grid' }} for grid layouts. Use useSortableList for typed list state.", "files": [ { "path": "src/components/bevelui/sortable/types.ts", "target": "src/components/bevelui/sortable/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/sortable/sortable-context.tsx", "target": "src/components/bevelui/sortable/sortable-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/sortable/sortable-root.tsx", "target": "src/components/bevelui/sortable/sortable-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/sortable/sortable-item.tsx", "target": "src/components/bevelui/sortable/sortable-item.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/sortable/sortable-handle.tsx", "target": "src/components/bevelui/sortable/sortable-handle.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/sortable/sortable-hook.ts", "target": "src/components/bevelui/sortable/sortable-hook.ts", "type": "registry:hook" }, { "path": "src/components/bevelui/sortable/index.ts", "target": "src/components/bevelui/sortable/index.ts", "type": "registry:lib" } ] }, { "name": "palette", "type": "registry:block", "title": "Palette", "description": "A visual color palette editor with a 2D HSV picker, sortable swatch grid, color naming, and one-click export to hex arrays, CSS custom properties, Tailwind config, or HSL strings.", "author": "Bevel UI ", "categories": ["systems", "color"], "dependencies": [], "registryDependencies": ["https://bevelui.vercel.app/r/sortable.json"], "docs": "Import from @/components/bevelui/palette. Drop PaletteRoot anywhere for the full editor, or compose with PaletteGrid, PaletteToolbar, and PaletteColorEditor manually. Use usePalette for programmatic control inside any child component.", "files": [ { "path": "src/components/bevelui/palette/types.ts", "target": "src/components/bevelui/palette/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/palette/palette-utils.ts", "target": "src/components/bevelui/palette/palette-utils.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/palette/palette-context.tsx", "target": "src/components/bevelui/palette/palette-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/palette/palette-root.tsx", "target": "src/components/bevelui/palette/palette-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/palette/palette-grid.tsx", "target": "src/components/bevelui/palette/palette-grid.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/palette/palette-swatch.tsx", "target": "src/components/bevelui/palette/palette-swatch.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/palette/palette-color-editor.tsx", "target": "src/components/bevelui/palette/palette-color-editor.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/palette/palette-toolbar.tsx", "target": "src/components/bevelui/palette/palette-toolbar.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/palette/palette-export.tsx", "target": "src/components/bevelui/palette/palette-export.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/palette/index.ts", "target": "src/components/bevelui/palette/index.ts", "type": "registry:lib" } ] }, { "name": "properties-panel", "type": "registry:block", "title": "Properties Panel", "description": "A Figma-style properties panel with collapsible sections and seven typed control rows — text, number with unit, color, select, toggle, slider, and custom. Config-driven or fully headless.", "author": "Bevel UI ", "categories": ["systems", "layout"], "dependencies": [], "registryDependencies": ["input", "select", "switch", "slider"], "docs": "Import from @/components/bevelui/properties-panel. Pass a sections array to PropertiesPanel for config-driven rendering, or compose PropertiesSection and PropertiesRow directly for headless control. Both modes work simultaneously.", "files": [ { "path": "src/components/bevelui/properties-panel/types.ts", "target": "src/components/bevelui/properties-panel/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/properties-panel/properties-panel-control.tsx", "target": "src/components/bevelui/properties-panel/properties-panel-control.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/properties-panel/properties-panel-row.tsx", "target": "src/components/bevelui/properties-panel/properties-panel-row.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/properties-panel/properties-panel-section.tsx", "target": "src/components/bevelui/properties-panel/properties-panel-section.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/properties-panel/properties-panel.tsx", "target": "src/components/bevelui/properties-panel/properties-panel.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/properties-panel/index.ts", "target": "src/components/bevelui/properties-panel/index.ts", "type": "registry:lib" } ] }, { "name": "tree", "type": "registry:block", "title": "Tree View", "description": "Recursive hierarchical data display with full keyboard navigation (arrow keys, Home/End), animated expand/collapse, multi-select, and optional connecting lines.", "author": "Bevel UI ", "categories": ["systems"], "dependencies": ["motion"], "registryDependencies": [], "docs": "Import from @/components/bevelui/tree. Pass nodes to TreeRoot. Keyboard navigation works automatically when the tree container is focused. Use config.multiSelect for multi-select and config.showLines for connecting lines.", "files": [ { "path": "src/components/bevelui/tree/types.ts", "target": "src/components/bevelui/tree/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/tree/tree-context.tsx", "target": "src/components/bevelui/tree/tree-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/tree/tree-utils.ts", "target": "src/components/bevelui/tree/tree-utils.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/tree/tree-root.tsx", "target": "src/components/bevelui/tree/tree-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/tree/tree-node.tsx", "target": "src/components/bevelui/tree/tree-node.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/tree/tree-hook.ts", "target": "src/components/bevelui/tree/tree-hook.ts", "type": "registry:hook" }, { "path": "src/components/bevelui/tree/index.ts", "target": "src/components/bevelui/tree/index.ts", "type": "registry:lib" } ] }, { "name": "gallery", "type": "registry:block", "title": "Gallery", "description": "An image gallery system with a sortable grid layout, drag-and-drop upload support, and a fullscreen lightbox viewer with navigation controls.", "author": "Bevel UI ", "categories": ["systems", "media"], "dependencies": [], "registryDependencies": [ "button", "https://bevelui.vercel.app/r/sortable.json" ], "docs": "Import from @/components/bevelui/gallery. Drop GalleryRoot anywhere for the full editor, or compose with GalleryGrid, GalleryToolbar, and GalleryLightbox manually. Use useGallery for programmatic control inside any child component.", "files": [ { "path": "src/components/bevelui/gallery/types.ts", "target": "src/components/bevelui/gallery/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/gallery/gallery-context.tsx", "target": "src/components/bevelui/gallery/gallery-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/gallery/gallery-root.tsx", "target": "src/components/bevelui/gallery/gallery-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/gallery/gallery-grid.tsx", "target": "src/components/bevelui/gallery/gallery-grid.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/gallery/gallery-toolbar.tsx", "target": "src/components/bevelui/gallery/gallery-toolbar.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/gallery/gallery-lightbox.tsx", "target": "src/components/bevelui/gallery/gallery-lightbox.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/gallery/index.ts", "target": "src/components/bevelui/gallery/index.ts", "type": "registry:lib" } ] }, { "name": "spotlight", "type": "registry:block", "title": "Spotlight Search", "description": "Async content search with category tabs, debounced API calls, AbortController cancellation, recent search history, and skeleton loading. Distinct from Command Palette.", "author": "Bevel UI ", "categories": ["systems"], "dependencies": ["motion"], "registryDependencies": [], "docs": "Import from @/components/bevelui/spotlight. Wrap your app with SpotlightRoot, provide categories and an onSearch function. The / hotkey and modal are wired automatically.", "files": [ { "path": "src/components/bevelui/spotlight/types.ts", "target": "src/components/bevelui/spotlight/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/spotlight/spotlight-context.tsx", "target": "src/components/bevelui/spotlight/spotlight-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/spotlight/spotlight-root.tsx", "target": "src/components/bevelui/spotlight/spotlight-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/spotlight/spotlight-modal.tsx", "target": "src/components/bevelui/spotlight/spotlight-modal.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/spotlight/spotlight-results.tsx", "target": "src/components/bevelui/spotlight/spotlight-results.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/spotlight/spotlight-result-item.tsx", "target": "src/components/bevelui/spotlight/spotlight-result-item.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/spotlight/spotlight-empty.tsx", "target": "src/components/bevelui/spotlight/spotlight-empty.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/spotlight/spotlight-skeleton.tsx", "target": "src/components/bevelui/spotlight/spotlight-skeleton.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/spotlight/index.ts", "target": "src/components/bevelui/spotlight/index.ts", "type": "registry:lib" } ] }, { "name": "checklist", "type": "registry:block", "title": "Onboarding Checklist", "description": "A floating onboarding checklist with step dependencies, localStorage persistence, animated progress ring, and inline or floating widget modes.", "author": "Bevel UI ", "categories": ["systems"], "dependencies": ["motion"], "registryDependencies": ["button"], "docs": "Import from @/components/bevelui/checklist. Wrap your app with ChecklistRoot and pass steps. The floating widget renders automatically. Use position: 'inline' and children to compose your own layout.", "files": [ { "path": "src/components/bevelui/checklist/types.ts", "target": "src/components/bevelui/checklist/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/checklist/checklist-context.tsx", "target": "src/components/bevelui/checklist/checklist-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/checklist/checklist-root.tsx", "target": "src/components/bevelui/checklist/checklist-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/checklist/checklist-progress-ring.tsx", "target": "src/components/bevelui/checklist/checklist-progress-ring.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/checklist/checklist-item.tsx", "target": "src/components/bevelui/checklist/checklist-item.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/checklist/checklist-widget.tsx", "target": "src/components/bevelui/checklist/checklist-widget.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/checklist/index.ts", "target": "src/components/bevelui/checklist/index.ts", "type": "registry:lib" } ] }, { "name": "kanban", "type": "registry:block", "title": "Kanban Board", "description": "A draggable kanban board with columns and cards, supporting drag-and-drop functionality and real-time updates.", "author": "Bevel UI ", "categories": ["systems"], "dependencies": ["motion"], "registryDependencies": ["button"], "docs": "Import from @/components/bevelui/kanban. Wrap your app with KanbanRoot and pass columns and tasks. The board renders automatically. Use position: 'inline' and children to compose your own layout.", "files": [ { "path": "src/components/bevelui/kanban/types.ts", "target": "src/components/bevelui/kanban/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/kanban/kanban-context.tsx", "target": "src/components/bevelui/kanban/kanban-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/kanban/kanban-root.tsx", "target": "src/components/bevelui/kanban/kanban-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/kanban/kanban-board.tsx", "target": "src/components/bevelui/kanban/kanban-board.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/kanban/kanban-card.tsx", "target": "src/components/bevelui/kanban/kanban-card.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/kanban/kanban-widget.tsx", "target": "src/components/bevelui/kanban/kanban-widget.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/kanban/index.ts", "target": "src/components/bevelui/kanban/index.ts", "type": "registry:lib" } ] }, { "name": "cropper", "type": "registry:block", "title": "Image Cropper", "description": "Dual coordinate spaces, eight-handle drag with aspect ratio enforcement, rule-of-thirds overlay, and offscreen canvas export at full image resolution.", "author": "Bevel UI ", "categories": ["systems"], "dependencies": [], "registryDependencies": ["button"], "docs": "Import from @/components/bevelui/cropper. Wrap your app with CropperRoot and pass src and onCrop. The default layout renders a toolbar with aspect ratio presets, a canvas with the overlay, and a live preview panel. Pass children to compose your own layout using the same useCropper hook.", "files": [ { "path": "src/components/bevelui/cropper/types.ts", "target": "src/components/bevelui/cropper/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/cropper/crop-engine.ts", "target": "src/components/bevelui/cropper/crop-engine.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/cropper/cropper-context.tsx", "target": "src/components/bevelui/cropper/cropper-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/cropper/cropper-root.tsx", "target": "src/components/bevelui/cropper/cropper-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/cropper/cropper-canvas.tsx", "target": "src/components/bevelui/cropper/cropper-canvas.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/cropper/cropper-toolbar.tsx", "target": "src/components/bevelui/cropper/cropper-toolbar.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/cropper/cropper-preview.tsx", "target": "src/components/bevelui/cropper/cropper-preview.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/cropper/index.ts", "target": "src/components/bevelui/cropper/index.ts", "type": "registry:lib" } ] }, { "name": "cursors", "type": "registry:block", "title": "Collaborative Cursors", "description": "Real-time presence overlay with conflict-free position sync, idle detection, and a label overlap resolver that prevents names from stacking.", "author": "Bevel UI ", "categories": ["systems"], "dependencies": [], "registryDependencies": [], "docs": "Import from @/components/bevelui/cursors. Wrap your shared surface with CursorsRoot and CursorCanvas. CursorsRoot holds state and exposes the imperative update API. CursorCanvas is the tracking surface — it measures mouse position, normalizes it, and calls onMove. Use the useCursors hook to wire your transport with updateCursor and removeCursor.", "files": [ { "path": "src/components/bevelui/cursors/types.ts", "target": "src/components/bevelui/cursors/types.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/cursors/cursor-utils.ts", "target": "src/components/bevelui/cursors/cursor-utils.ts", "type": "registry:lib" }, { "path": "src/components/bevelui/cursors/cursors-context.tsx", "target": "src/components/bevelui/cursors/cursors-context.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/cursors/cursors-root.tsx", "target": "src/components/bevelui/cursors/cursors-root.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/cursors/cursor-canvas.tsx", "target": "src/components/bevelui/cursors/cursor-canvas.tsx", "type": "registry:component" }, { "path": "src/components/bevelui/cursors/index.ts", "target": "src/components/bevelui/cursors/index.ts", "type": "registry:lib" } ] }, { "name": "card-select", "type": "registry:component", "title": "Card Select", "description": "A card-based selection control supporting single or multi-select, with grid, list, and scroll layout modes. Used by FormEngine's FieldRenderer and usable standalone.", "author": "Bevel UI ", "categories": ["controls", "forms"], "dependencies": ["motion"], "registryDependencies": ["badge"], "files": [ { "path": "src/components/bevelui/controls/card-select.tsx", "target": "src/components/bevelui/controls/card-select.tsx", "type": "registry:component" } ] }, { "name": "chip-select", "type": "registry:component", "title": "Chip Select", "description": "A pill chip selector control supporting single or multi-select. Used by FormEngine's FieldRenderer and usable standalone.", "author": "Bevel UI ", "categories": ["controls", "forms"], "dependencies": ["motion"], "registryDependencies": ["badge"], "files": [ { "path": "src/components/bevelui/controls/chip-select.tsx", "target": "src/components/bevelui/controls/chip-select.tsx", "type": "registry:component" } ] }, { "name": "rating-field", "type": "registry:component", "title": "Rating Field", "description": "A star or number rating input control. Used by FormEngine's FieldRenderer and usable standalone.", "author": "Bevel UI ", "categories": ["controls", "forms"], "dependencies": ["motion"], "files": [ { "path": "src/components/bevelui/controls/rating-field.tsx", "target": "src/components/bevelui/controls/rating-field.tsx", "type": "registry:component" } ] }, { "name": "select-field", "type": "registry:component", "title": "Select Field", "description": "A searchable dropdown with grouped options support. Used by FormEngine's FieldRenderer and usable standalone.", "author": "Bevel UI ", "categories": ["controls", "forms"], "registryDependencies": ["input", "badge", "separator"], "files": [ { "path": "src/components/bevelui/controls/select-field.tsx", "target": "src/components/bevelui/controls/select-field.tsx", "type": "registry:component" } ] }, { "name": "tag-input", "type": "registry:component", "title": "Tag Input", "description": "A tag creation input control with keyboard support for adding and removing tags. Used by FormEngine's FieldRenderer and usable standalone.", "author": "Bevel UI ", "categories": ["controls", "forms"], "registryDependencies": ["input", "badge"], "files": [ { "path": "src/components/bevelui/controls/tag-input.tsx", "target": "src/components/bevelui/controls/tag-input.tsx", "type": "registry:component" } ] } ] }