{ "$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": "Drop-anywhere Popover that flattens shadcn's base-ui Popover parts into one component: wrap an element as the trigger, then compose the popup with title / description / content / footer slots and side/align positioning.", "registryDependencies": ["popover"], "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": "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.", "dependencies": ["@radix-ui/react-slot"], "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": "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": "slider", "type": "registry:component", "title": "Integrated Slider", "description": "Thin accessible single-value Slider wrapper with a visible label, live numeric value, scalar callbacks, primitive-owned interaction and form behavior, and explicit class and semantic ownership.", "registryDependencies": ["slider"], "files": [ { "path": "registry/ui/slider.tsx", "type": "registry:component", "target": "components/easy/slider.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": "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, plus loading, empty, caption, function-form rowClassName, and built-in row selection (controlled / uncontrolled, with per-row gating and indeterminate select-all).", "registryDependencies": ["table"], "dependencies": [ "@base-ui/react", "@hugeicons/core-free-icons", "@hugeicons/react" ], "files": [ { "path": "registry/ui/table.tsx", "type": "registry:component", "target": "components/easy/table.tsx" } ] } ] }