{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "thornberry", "homepage": "https://github.com/omnidotdev/thornberry", "items": [ { "name": "accordion", "type": "registry:ui", "title": "Accordion", "description": "A accordion component", "files": [ { "path": "src/registry/thornberry/components/accordion.tsx", "type": "registry:ui" } ] }, { "name": "alert", "type": "registry:ui", "title": "Alert", "description": "An alert component", "files": [ { "path": "src/registry/thornberry/components/alert.tsx", "type": "registry:ui" } ] }, { "name": "angle-slider", "type": "registry:ui", "title": "Angle Slider", "description": "An angle slider component", "files": [ { "path": "src/registry/thornberry/components/angle-slider.tsx", "type": "registry:ui" } ] }, { "name": "avatar", "type": "registry:ui", "title": "Avatar", "description": "An avatar component", "files": [ { "path": "src/registry/thornberry/components/avatar.tsx", "type": "registry:ui" } ] }, { "name": "badge", "type": "registry:ui", "title": "Badge", "description": "A badge component", "files": [ { "path": "src/registry/thornberry/components/badge.tsx", "type": "registry:ui" } ] }, { "name": "button", "type": "registry:ui", "title": "Button", "description": "A button component", "files": [ { "path": "src/registry/thornberry/components/button.tsx", "type": "registry:ui" } ] }, { "name": "card", "type": "registry:ui", "title": "Card", "description": "A card component", "files": [ { "path": "src/registry/thornberry/components/card.tsx", "type": "registry:ui" } ] }, { "name": "carousel", "type": "registry:ui", "title": "Carousel", "description": "A component that displays content in a rotating cycle with navigation controls", "files": [ { "path": "src/registry/thornberry/components/carousel.tsx", "type": "registry:ui" }, { "path": "src/registry/thornberry/components/button.tsx", "type": "registry:ui" } ] }, { "name": "checkbox", "type": "registry:ui", "title": "Checkbox", "description": "A checkbox component", "files": [ { "path": "src/registry/thornberry/components/checkbox.tsx", "type": "registry:ui" } ] }, { "name": "collapsible", "type": "registry:ui", "title": "Collapsible", "description": "An interactive component that can be opened and closed to reveal or hide content", "files": [ { "path": "src/registry/thornberry/components/collapsible.tsx", "type": "registry:ui" } ] }, { "name": "color-picker", "type": "registry:ui", "title": "Color Picker", "description": "A component that allows users to select a color from a palette or spectrum", "files": [ { "path": "src/registry/thornberry/components/color-picker.tsx", "type": "registry:ui" } ] }, { "name": "combobox", "type": "registry:ui", "title": "Combobox", "description": "A searchable dropdown select component that allows users to filter through a list of options", "files": [ { "path": "src/registry/thornberry/components/combobox.tsx", "type": "registry:ui" }, { "path": "src/registry/thornberry/components/button.tsx", "type": "registry:ui" } ] }, { "name": "date-picker", "type": "registry:ui", "title": "Date Picker", "description": "A component that allows users to select a date from a calendar interface", "files": [ { "path": "src/registry/thornberry/components/date-picker.tsx", "type": "registry:ui" }, { "path": "src/registry/thornberry/components/button.tsx", "type": "registry:ui" } ] }, { "name": "dialog", "type": "registry:ui", "title": "Dialog", "description": "A modal dialog that interrupts the user with important content", "files": [ { "path": "src/registry/thornberry/components/dialog.tsx", "type": "registry:ui" } ] }, { "name": "board", "type": "registry:ui", "title": "Board", "description": "Presentational, drag-agnostic kanban/board primitives (columns, headers, cards) shared across apps", "files": [ { "path": "src/registry/thornberry/components/board.tsx", "type": "registry:ui" } ] }, { "name": "kbd", "type": "registry:ui", "title": "Kbd", "description": "A keyboard-shortcut hint chip for surfacing shortcuts next to actions", "files": [ { "path": "src/registry/thornberry/components/kbd.tsx", "type": "registry:ui" } ] }, { "name": "command", "type": "registry:ui", "title": "Command", "description": "A command menu / palette (cmdk) for keyboard-driven navigation and actions, reusable across apps", "dependencies": ["cmdk"], "registryDependencies": ["dialog"], "files": [ { "path": "src/registry/thornberry/components/command.tsx", "type": "registry:ui" } ] }, { "name": "hover-card", "type": "registry:ui", "title": "Hover Card", "description": "A card that appears when the user hovers over an element, providing additional information or actions", "files": [ { "path": "src/registry/thornberry/components/hover-card.tsx", "type": "registry:ui" } ] }, { "name": "image", "type": "registry:ui", "title": "Image", "description": "A responsive image component with automatic optimization", "files": [ { "path": "src/registry/thornberry/components/image.tsx", "type": "registry:ui" } ] }, { "name": "input", "type": "registry:ui", "title": "Input", "description": "An input component", "files": [ { "path": "src/registry/thornberry/components/input.tsx", "type": "registry:ui" } ] }, { "name": "menu", "type": "registry:ui", "title": "Menu", "description": "A vertically stacked set of interactive menu items", "files": [ { "path": "src/registry/thornberry/components/menu.tsx", "type": "registry:ui" } ] }, { "name": "number-input", "type": "registry:ui", "title": "Number Input", "description": "A form control that allows users to input numeric values with increment and decrement buttons", "files": [ { "path": "src/registry/thornberry/components/number-input.tsx", "type": "registry:ui" }, { "path": "src/registry/thornberry/components/button.tsx", "type": "registry:ui" } ] }, { "name": "pagination", "type": "registry:ui", "title": "Pagination", "description": "A component for navigating through multiple pages of content", "files": [ { "path": "src/registry/thornberry/components/pagination.tsx", "type": "registry:ui" }, { "path": "src/registry/thornberry/components/button.tsx", "type": "registry:ui" } ] }, { "name": "pin-input", "type": "registry:ui", "title": "PIN Input", "description": "A component that allows users to input a sequence of characters, typically used for entering PIN codes or short passwords", "files": [ { "path": "src/registry/thornberry/components/pin-input.tsx", "type": "registry:ui" } ] }, { "name": "popover", "type": "registry:ui", "title": "Popover", "description": "A popup element that displays information related to an element when the element receives keyboard focus or the mouse hovers over it", "files": [ { "path": "src/registry/thornberry/components/popover.tsx", "type": "registry:ui" } ] }, { "name": "rating-group", "type": "registry:ui", "title": "Rating Group", "description": "A component that allows users to rate items using a star or other rating system", "files": [ { "path": "src/registry/thornberry/components/rating-group.tsx", "type": "registry:ui" } ] }, { "name": "radio-group", "type": "registry:ui", "title": "Radio Group", "description": "A set of checkable buttons—known as radio buttons—where no more than one of the buttons can be checked at a time", "files": [ { "path": "src/registry/thornberry/components/radio-group.tsx", "type": "registry:ui" } ] }, { "name": "sheet", "type": "registry:ui", "title": "Sheet", "description": "Extends the Dialog component to display content that complements the main content of the screen.", "files": [ { "path": "src/registry/thornberry/components/sheet.tsx", "type": "registry:ui" } ] }, { "name": "slider", "type": "registry:ui", "title": "Slider", "description": "A control that allows users to select a value or range from a given range", "files": [ { "path": "src/registry/thornberry/components/slider.tsx", "type": "registry:ui" } ] }, { "name": "switch", "type": "registry:ui", "title": "Switch", "description": "A control that allows the user to toggle between checked and not checked", "files": [ { "path": "src/registry/thornberry/components/switch.tsx", "type": "registry:ui" } ] }, { "name": "tabs", "type": "registry:ui", "title": "Tabs", "description": "A set of layered sections of content that display one panel of content at a time", "files": [ { "path": "src/registry/thornberry/components/tabs.tsx", "type": "registry:ui" } ] }, { "name": "tags-input", "type": "registry:ui", "title": "Tags Input", "description": "A component that allows users to input and manage a list of tags or keywords", "files": [ { "path": "src/registry/thornberry/components/tags-input.tsx", "type": "registry:ui" } ] }, { "name": "tooltip", "type": "registry:ui", "title": "Tooltip", "description": "A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it", "files": [ { "path": "src/registry/thornberry/components/tooltip.tsx", "type": "registry:ui" } ] }, { "name": "file-upload", "type": "registry:ui", "title": "File Upload", "description": "A file upload component with drag and drop support for selecting and uploading files", "files": [ { "path": "src/registry/thornberry/components/file-upload.tsx", "type": "registry:ui" } ] }, { "name": "timer", "type": "registry:ui", "title": "Timer", "description": "A timer component that can record elapsed time or countdown from a target time", "files": [ { "path": "src/registry/thornberry/components/timer.tsx", "type": "registry:ui" } ] }, { "name": "tour", "type": "registry:ui", "title": "Tour", "description": "A guided tour component that highlights elements on the page and provides instructions or information", "files": [ { "path": "src/registry/thornberry/components/tour.tsx", "type": "registry:ui" } ] }, { "name": "table", "type": "registry:ui", "title": "Table", "description": "A component for displaying tabular data with customizable styles", "files": [ { "path": "src/registry/thornberry/components/table.tsx", "type": "registry:ui" } ] }, { "name": "select", "type": "registry:ui", "title": "Select", "description": "A customizable select dropdown component for choosing options from a list", "files": [ { "path": "src/registry/thornberry/components/select.tsx", "type": "registry:ui" } ] }, { "name": "skeleton", "type": "registry:ui", "title": "Skeleton", "description": "A skeleton component for displaying loading placeholders", "files": [ { "path": "src/registry/thornberry/components/skeleton.tsx", "type": "registry:ui" } ] }, { "name": "sidebar", "type": "registry:ui", "title": "Sidebar", "description": "A collapsible sidebar component with customizable content and responsive design.", "files": [ { "path": "src/registry/thornberry/components/sidebar.tsx", "type": "registry:ui" } ] }, { "name": "rich-text-editor", "type": "registry:ui", "title": "Rich Text Editor", "description": "A friendly Lexical rich-text editor with a minimal toolbar (bold, italic, lists, links) and a sanitized HTML renderer.", "dependencies": [ "lexical", "@lexical/react", "@lexical/rich-text", "@lexical/list", "@lexical/link", "@lexical/html", "isomorphic-dompurify" ], "registryDependencies": ["button", "skeleton"], "files": [ { "path": "src/registry/thornberry/components/rich-text-editor.tsx", "type": "registry:ui" } ] }, { "name": "auto-layout", "type": "registry:lib", "title": "Auto Layout", "description": "Pure elk-powered auto-layout for React Flow graphs, with dangling-edge and duplicate-id guards.", "dependencies": ["elkjs", "@xyflow/react"], "files": [ { "path": "src/registry/thornberry/lib/auto-layout.ts", "type": "registry:lib" } ] }, { "name": "serialize", "type": "registry:lib", "title": "Serialize", "description": "Versioned, JSON-serializable snapshot helpers for React Flow graphs that strip transient render state.", "dependencies": ["@xyflow/react"], "files": [ { "path": "src/registry/thornberry/lib/serialize.ts", "type": "registry:lib" } ] }, { "name": "edge-geometry", "type": "registry:lib", "title": "Edge Geometry", "description": "Pure geometry helpers that pick the best connection sides between two node rectangles.", "dependencies": ["@xyflow/react"], "files": [ { "path": "src/registry/thornberry/lib/edge-geometry.ts", "type": "registry:lib" } ] }, { "name": "node-themes", "type": "registry:lib", "title": "Node Themes", "description": "Semantic node themes driven by design-system tokens, plus a resolver for custom theme objects.", "files": [ { "path": "src/registry/thornberry/lib/node-themes.ts", "type": "registry:lib" } ] }, { "name": "use-auto-layout", "type": "registry:hook", "title": "Use Auto Layout", "description": "React Flow hook that runs auto-layout over the current nodes and edges, then fits the view.", "dependencies": ["@xyflow/react"], "registryDependencies": ["auto-layout"], "files": [ { "path": "src/registry/thornberry/hooks/use-auto-layout.ts", "type": "registry:hook" } ] }, { "name": "smart-edge", "type": "registry:ui", "title": "Smart Edge", "description": "A React Flow v12 edge that auto-connects to the nearest sides of its source and target nodes.", "dependencies": ["@xyflow/react"], "registryDependencies": ["edge-geometry", "base-node"], "files": [ { "path": "src/registry/thornberry/components/smart-edge.tsx", "type": "registry:ui" } ] }, { "name": "base-node", "type": "registry:ui", "title": "Base Node", "description": "A themed React Flow node component with header, body, footer, and connection handles, registrable as a node type.", "dependencies": ["@xyflow/react", "lucide-react"], "registryDependencies": ["node-themes"], "files": [ { "path": "src/registry/thornberry/components/base-node.tsx", "type": "registry:ui" } ] }, { "name": "flow-canvas", "type": "registry:ui", "title": "Flow Canvas", "description": "A themed React Flow wrapper that owns the provider and registers the built-in base node and smart edge types.", "dependencies": ["@xyflow/react"], "registryDependencies": ["base-node", "smart-edge"], "files": [ { "path": "src/registry/thornberry/components/flow-canvas.tsx", "type": "registry:ui" } ] } ] }