{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "easy-shadcn/ui", "homepage": "https://easy-shadcn.vercel.app", "items": [ { "name": "card", "type": "registry:component", "title": "Integrated Card", "description": "", "registryDependencies": ["card"], "files": [ { "path": "registry/ui/card.tsx", "type": "registry:component", "target": "components/easy/card.tsx" } ] }, { "name": "tabs", "type": "registry:component", "title": "Integrated Tabs", "description": "", "registryDependencies": ["tabs"], "files": [ { "path": "registry/ui/tabs.tsx", "type": "registry:component", "target": "components/easy/tabs.tsx" } ] }, { "name": "accordion", "type": "registry:component", "title": "Integrated Accordion", "description": "Flat items-driven Accordion built on shadcn's base-ui Accordion: single or multiple open panels, controlled / uncontrolled, with per-item disabled and class overrides.", "registryDependencies": ["accordion"], "files": [ { "path": "registry/ui/accordion.tsx", "type": "registry:component", "target": "components/easy/accordion.tsx" } ] }, { "name": "breadcrumb", "type": "registry:component", "title": "Integrated Breadcrumb", "description": "Flat items-driven Breadcrumb built on shadcn's Breadcrumb markup: automatic current-page detection, optional ellipsis collapsing via maxItems, and a customizable separator.", "registryDependencies": ["breadcrumb"], "files": [ { "path": "registry/ui/breadcrumb.tsx", "type": "registry:component", "target": "components/easy/breadcrumb.tsx" } ] }, { "name": "tooltip", "type": "registry:component", "title": "Integrated Tooltip", "description": "Drop-anywhere Tooltip that collapses shadcn's base-ui Provider / Root / Trigger / Portal / Positioner / Popup into one component: wrap an element and pass content, with side/align and delay controls.", "registryDependencies": ["tooltip"], "files": [ { "path": "registry/ui/tooltip.tsx", "type": "registry:component", "target": "components/easy/tooltip.tsx" } ] }, { "name": "popover", "type": "registry:component", "title": "Integrated Popover", "description": "One rich floating-content API with click Popover and hover/focus Preview Card adapters, shared title / description / content / footer slots, and side/align positioning.", "registryDependencies": ["popover", "hover-card"], "files": [ { "path": "registry/ui/popover.tsx", "type": "registry:component", "target": "components/easy/popover.tsx" } ] }, { "name": "dropdown-menu", "type": "registry:component", "title": "Integrated Dropdown Menu", "description": "Thin flat action-menu wrapper with a composed trigger, homogeneous items, primitive-owned state and keyboard behavior, ordinary positioning, and explicit presentation hooks.", "registryDependencies": ["dropdown-menu"], "files": [ { "path": "registry/ui/dropdown-menu.tsx", "type": "registry:component", "target": "components/easy/dropdown-menu.tsx" } ] }, { "name": "menubar", "type": "registry:component", "title": "Integrated Menubar", "description": "Application command bar with an items tree, actions, groups, submenus, controlled checkbox and radio settings, and primitive-owned focus, keyboard navigation, and dismissal.", "dependencies": ["clsx"], "registryDependencies": ["menubar"], "files": [ { "path": "registry/ui/menubar.tsx", "type": "registry:component", "target": "components/easy/menubar.tsx" } ] }, { "name": "navigation-menu", "type": "registry:component", "title": "Integrated Navigation Menu", "description": "Website navigation from direct links and one level of dropdown links, with caller-owned current-page state and primitive-owned popup interaction.", "dependencies": ["clsx"], "registryDependencies": ["navigation-menu"], "files": [ { "path": "registry/ui/navigation-menu.tsx", "type": "registry:component", "target": "components/easy/navigation-menu.tsx" } ] }, { "name": "context-menu", "type": "registry:component", "title": "Integrated Context Menu", "description": "Thin flat action-menu wrapper with a composed context target, primitive-owned pointer, touch, keyboard and coordinate behavior, controlled requests, and explicit presentation hooks.", "registryDependencies": ["context-menu"], "files": [ { "path": "registry/ui/context-menu.tsx", "type": "registry:component", "target": "components/easy/context-menu.tsx" } ] }, { "name": "menu", "type": "registry:component", "title": "Integrated Menu", "description": "Persistent Ant Design-style navigation menu with a recursive item tree, action and link leaves, submenus, groups, separators, controlled or uncontrolled selection and open state, three layout modes, and roving keyboard focus.", "dependencies": ["@hugeicons/core-free-icons", "@hugeicons/react"], "files": [ { "path": "registry/ui/menu.tsx", "type": "registry:component", "target": "components/easy/menu.tsx" } ] }, { "name": "sidebar", "type": "registry:component", "title": "Integrated Sidebar", "description": "Responsive application navigation shell with a finite items tree, controlled or uncontrolled selection and submenus, desktop offcanvas collapse, mobile Sheet dismissal, and a generated main inset.", "registryDependencies": ["sidebar"], "files": [ { "path": "registry/ui/sidebar.tsx", "type": "registry:component", "target": "components/easy/sidebar.tsx" } ] }, { "name": "command-palette", "type": "registry:component", "title": "Integrated Command Palette", "description": "Task-level searchable action palette with Mod+K invocation, grouped static actions, controlled or uncontrolled Dialog state, and single-flight async success, error, retry, and stale-settlement handling.", "registryDependencies": ["command"], "files": [ { "path": "registry/ui/command-palette.tsx", "type": "registry:component", "target": "components/easy/command-palette.tsx" } ] }, { "name": "choice-group", "type": "registry:component", "title": "Integrated Choice Group", "description": "One items and value model for single or multiple selection through radio, checkbox, or toggle presentation, with invalid mode combinations rejected by TypeScript.", "dependencies": ["@base-ui/react"], "registryDependencies": ["checkbox", "radio-group", "toggle-group"], "files": [ { "path": "registry/ui/choice-group.tsx", "type": "registry:component", "target": "components/easy/choice-group.tsx" } ] }, { "name": "radio-group", "type": "registry:component", "title": "Integrated Radio Group", "description": "Flat items-driven RadioGroup built on shadcn's base-ui RadioGroup: per-option label, description, and disabled, with accessible label/description wiring and class overrides.", "registryDependencies": ["radio-group"], "files": [ { "path": "registry/ui/radio-group.tsx", "type": "registry:component", "target": "components/easy/radio-group.tsx" } ] }, { "name": "checkbox-group", "type": "registry:component", "title": "Integrated Checkbox Group", "description": "Flat items-driven multi-select CheckboxGroup built on shadcn's base-ui Checkbox: per-option label, description, and disabled, with accessible label/description wiring and class overrides.", "registryDependencies": ["checkbox"], "files": [ { "path": "registry/ui/checkbox-group.tsx", "type": "registry:component", "target": "components/easy/checkbox-group.tsx" } ] }, { "name": "checkbox", "type": "registry:component", "title": "Integrated Checkbox", "description": "Thin labeled Checkbox wrapper with optional description, accessible ID and ARIA wiring, delegated controlled or uncontrolled state, and native form behavior.", "registryDependencies": ["checkbox"], "files": [ { "path": "registry/ui/checkbox.tsx", "type": "registry:component", "target": "components/easy/checkbox.tsx" } ] }, { "name": "field", "type": "registry:component", "title": "Integrated Field", "description": "Flat form-field wrapper for label, control, description, required marker, and validation message patterns.", "registryDependencies": ["field"], "files": [ { "path": "registry/ui/field.tsx", "type": "registry:component", "target": "components/easy/field.tsx" } ] }, { "name": "input-group", "type": "registry:component", "title": "Integrated Input Group", "description": "Thin native-input wrapper over shadcn InputGroup with flat logical start and end addon slots, explicit root/input class ownership, and native input props and ref forwarding.", "registryDependencies": ["input-group"], "files": [ { "path": "registry/ui/input-group.tsx", "type": "registry:component", "target": "components/easy/input-group.tsx" } ] }, { "name": "input-otp", "type": "registry:component", "title": "Integrated Input OTP", "description": "Thin single-input OTP wrapper with generated indexed slots, optional uniform groups and separators, primitive-owned value and interaction, and explicit class ownership.", "registryDependencies": ["input-otp"], "files": [ { "path": "registry/ui/input-otp.tsx", "type": "registry:component", "target": "components/easy/input-otp.tsx" } ] }, { "name": "avatar", "type": "registry:component", "title": "Integrated Avatar", "description": "Thin flat-props Avatar wrapper with caller-owned fallback and badge slots, optional image source, primitive sizes, and explicit per-part class ownership.", "registryDependencies": ["avatar"], "files": [ { "path": "registry/ui/avatar.tsx", "type": "registry:component", "target": "components/easy/avatar.tsx" } ] }, { "name": "switch", "type": "registry:component", "title": "Integrated Switch", "description": "Thin labeled Switch wrapper with optional description, accessible label and description wiring, primitive state and form behavior, and explicit control, option, and text class ownership.", "registryDependencies": ["switch"], "files": [ { "path": "registry/ui/switch.tsx", "type": "registry:component", "target": "components/easy/switch.tsx" } ] }, { "name": "progress", "type": "registry:component", "title": "Integrated Progress", "description": "Thin labeled percentage Progress wrapper with SSR-stable naming, primitive-derived determinate and indeterminate states, visible value formatting, and explicit root, label, and value class ownership.", "registryDependencies": ["progress"], "files": [ { "path": "registry/ui/progress.tsx", "type": "registry:component", "target": "components/easy/progress.tsx" } ] }, { "name": "pagination", "type": "registry:component", "title": "Integrated Pagination", "description": "Thin item-total Pagination wrapper with mutually exclusive client and route-navigation modes, normalized controlled or uncontrolled values, compact boundary and sibling ranges, and explicit primitive-part class ownership.", "registryDependencies": ["pagination"], "files": [ { "path": "registry/ui/pagination.tsx", "type": "registry:component", "target": "components/easy/pagination.tsx" } ] }, { "name": "carousel", "type": "registry:component", "title": "Integrated Carousel", "description": "Thin accessible items-driven Carousel wrapper with primitive-owned Embla scrolling, selection, plugins, API and control boundaries, plus explicit orientation and class ownership.", "registryDependencies": ["carousel"], "files": [ { "path": "registry/ui/carousel.tsx", "type": "registry:component", "target": "components/easy/carousel.tsx" } ] }, { "name": "slider", "type": "registry:component", "title": "Integrated Slider", "description": "Accessible scalar and multi-thumb Slider with a discriminated number/array API, live values, distinct thumb names, collision and spacing controls, and primitive-owned interaction and form behavior.", "registryDependencies": ["slider"], "files": [ { "path": "registry/ui/slider.tsx", "type": "registry:component", "target": "components/easy/slider.tsx" } ] }, { "name": "toast", "type": "registry:component", "title": "Integrated Toast", "description": "Global Base UI notification queue with a stable callable facade for status, id upserts, updates, closing, owned actions, and Promise lifecycles.", "registryDependencies": ["toast"], "files": [ { "path": "registry/ui/toast.tsx", "type": "registry:component", "target": "components/easy/toast.tsx" } ] }, { "name": "sheet", "type": "registry:component", "title": "Integrated Sheet", "description": "Thin accessible application-panel Sheet wrapper with required title and content, optional trigger, description and footer slots, native Dialog lifecycle details, scroll-safe layout, and explicit popup ownership.", "registryDependencies": ["sheet"], "files": [ { "path": "registry/ui/sheet.tsx", "type": "registry:component", "target": "components/easy/sheet.tsx" } ] }, { "name": "use-delay-loading", "type": "registry:hook", "title": "useDelayLoading", "description": "Hook that adds a minimum visible duration to a loading state, preventing the spinner from flashing on fast operations.", "files": [ { "path": "registry/hooks/use-delay-loading.ts", "type": "registry:hook", "target": "hooks/use-delay-loading.ts" } ] }, { "name": "async-button", "type": "registry:component", "title": "Async Button", "description": "Button that auto-manages loading state when onClick returns a Promise.", "registryDependencies": ["button", "@easy-shadcn/use-delay-loading"], "files": [ { "path": "registry/ui/async-button.tsx", "type": "registry:component", "target": "components/easy/async-button.tsx" } ] }, { "name": "modal", "type": "registry:component", "title": "Integrated Modal", "description": "Composable Modal and AlertModal built on shadcn base-ui Dialog / AlertDialog, plus imperative alert / confirm helpers powered by @easy-shadcn/command-modal.", "registryDependencies": [ "dialog", "alert-dialog", "@easy-shadcn/async-button" ], "dependencies": ["@easy-shadcn/command-modal"], "files": [ { "path": "registry/ui/modal/index.tsx", "type": "registry:component", "target": "components/easy/modal/index.tsx" }, { "path": "registry/ui/modal/modal.tsx", "type": "registry:component", "target": "components/easy/modal/modal.tsx" }, { "path": "registry/ui/modal/alert-modal.tsx", "type": "registry:component", "target": "components/easy/modal/alert-modal.tsx" }, { "path": "registry/ui/modal/alert-modal-helper.tsx", "type": "registry:component", "target": "components/easy/modal/alert-modal-helper.tsx" } ] }, { "name": "alert-dialog", "type": "registry:component", "title": "Integrated Alert Dialog", "description": "Flat-props AlertDialog built on shadcn's base-ui AlertDialog: title / description slots, confirm / cancel footer with async handlers, controlled or uncontrolled open state, destructive variant sugar, and a full footer override.", "registryDependencies": ["alert-dialog", "@easy-shadcn/async-button"], "files": [ { "path": "registry/ui/alert-dialog.tsx", "type": "registry:component", "target": "components/easy/alert-dialog.tsx" } ] }, { "name": "alert", "type": "registry:component", "title": "Integrated Alert", "description": "Flat-props Alert built on shadcn's Alert primitive: optional icon, title, description, and caller-owned action slots with primitive variants and per-slot class overrides.", "registryDependencies": ["alert"], "files": [ { "path": "registry/ui/alert.tsx", "type": "registry:component", "target": "components/easy/alert.tsx" } ] }, { "name": "empty", "type": "registry:component", "title": "Integrated Empty", "description": "Thin flat-props Empty wrapper built on shadcn's Empty primitive: optional media, title, description, and caller-owned content slots with fixed primitive hierarchy, media variants, and per-slot class overrides.", "registryDependencies": ["empty"], "files": [ { "path": "registry/ui/empty.tsx", "type": "registry:component", "target": "components/easy/empty.tsx" } ] }, { "name": "calendar", "type": "registry:component", "title": "Integrated Calendar", "description": "Calendar with three-view month/year navigation (days / months / years), replacing the native dropdowns with button-grid panels.", "registryDependencies": ["calendar", "button"], "dependencies": ["@hugeicons/core-free-icons", "@hugeicons/react"], "files": [ { "path": "registry/ui/calendar.tsx", "type": "registry:component", "target": "components/easy/calendar.tsx" } ] }, { "name": "date-picker", "type": "registry:component", "title": "Integrated Date Picker", "description": "Single, multiple, and range date picker built on shadcn Popover + the Integrated Calendar, with an optional inline-input mode.", "registryDependencies": [ "popover", "button", "input", "@easy-shadcn/calendar" ], "dependencies": ["date-fns", "react-day-picker"], "files": [ { "path": "registry/ui/date-picker.tsx", "type": "registry:component", "target": "components/easy/date-picker.tsx" } ] }, { "name": "use-select-items", "type": "registry:hook", "title": "useSelectItems", "description": "Pure derivation hook for Select-like UIs. Turns a flat SelectItem[] into stringItems, findItem, itemToStringLabel, and a default contains filter.", "files": [ { "path": "registry/hooks/use-select-items.ts", "type": "registry:hook", "target": "hooks/use-select-items.ts" } ] }, { "name": "use-select-loader", "type": "registry:hook", "title": "useSelectLoader", "description": "Async items loader for Select: eager load-once or server-side filter modes, with AbortController, debounce, and a selected-item cache so chip labels survive across refetches.", "registryDependencies": ["@easy-shadcn/use-select-items"], "files": [ { "path": "registry/hooks/use-select-loader.ts", "type": "registry:hook", "target": "hooks/use-select-loader.ts" } ] }, { "name": "select", "type": "registry:component", "title": "Integrated Select", "description": "Flat-props Select covering dropdown, searchable, multi-select, and remote-loading modes in a single component. Built on shadcn's Combobox primitive.", "registryDependencies": [ "combobox", "button", "input-group", "@easy-shadcn/use-select-items", "@easy-shadcn/use-select-loader" ], "files": [ { "path": "registry/ui/select.tsx", "type": "registry:component", "target": "components/easy/select.tsx" } ] }, { "name": "combobox", "type": "registry:component", "title": "Integrated Combobox", "description": "Always-searchable, single-select autocomplete. A thin, opinionated preset over the Integrated Select with searchable forced on and multiple unavailable.", "registryDependencies": ["@easy-shadcn/select"], "files": [ { "path": "registry/ui/combobox.tsx", "type": "registry:component", "target": "components/easy/combobox.tsx" } ] }, { "name": "table", "type": "registry:component", "title": "Integrated Table", "description": "Flat-props Table with columns + dataSource + rowKey, loading, empty, caption, row styling, selection, column option filtering, single-column sorting, and local or external pagination.", "registryDependencies": [ "table", "button", "checkbox", "popover", "radio-group", "@easy-shadcn/pagination" ], "dependencies": [ "@base-ui/react", "@hugeicons/core-free-icons", "@hugeicons/react", "clsx" ], "files": [ { "path": "registry/ui/table.tsx", "type": "registry:component", "target": "components/easy/table.tsx" }, { "path": "registry/ui/table-filter.tsx", "type": "registry:component", "target": "components/easy/table-filter.tsx" } ] } ] }