{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "vectorstudio-ir-ui", "homepage": "https://github.com/vectorstudio-ir/ui", "items": [ { "name": "accordion", "type": "registry:ui", "title": "Accordion", "description": "A vertically stacked set of interactive headings that each reveal a section of content.", "files": [ { "path": "registry/base-nova/ui/accordion.tsx", "type": "registry:ui", "target": "@components/accordion.tsx" } ], "categories": [ "disclosure" ], "dependencies": [ "@base-ui/react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/utils" ] }, { "name": "alert", "type": "registry:ui", "title": "Alert", "description": "Displays a callout for user attention.", "files": [ { "path": "registry/base-nova/ui/alert.tsx", "type": "registry:ui", "target": "@components/alert.tsx" } ], "categories": [ "feedback" ], "dependencies": [ "class-variance-authority", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "alert-dialog", "type": "registry:ui", "title": "Alert Dialog", "description": "A modal dialog that interrupts the user with important content and expects a response.", "files": [ { "path": "registry/base-nova/ui/alert-dialog.tsx", "type": "registry:ui", "target": "@components/alert-dialog.tsx" } ], "categories": [ "overlay", "dialog" ], "dependencies": [ "@base-ui/react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/button", "vectorstudio-ir/ui/utils" ] }, { "name": "aspect-ratio", "type": "registry:ui", "title": "Aspect Ratio", "description": "Displays content within a desired ratio.", "files": [ { "path": "registry/base-nova/ui/aspect-ratio.tsx", "type": "registry:ui", "target": "@components/aspect-ratio.tsx" } ], "categories": [ "layout" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "attachment", "type": "registry:ui", "title": "Attachment", "description": "File attachment preview chip with download / remove affordances.", "files": [ { "path": "registry/base-nova/ui/attachment.tsx", "type": "registry:ui", "target": "@components/attachment.tsx" } ], "categories": [ "data-display" ], "dependencies": [ "@base-ui/react", "class-variance-authority", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/button", "vectorstudio-ir/ui/utils" ] }, { "name": "avatar", "type": "registry:ui", "title": "Avatar", "description": "An image element with a fallback for representing the user.", "files": [ { "path": "registry/base-nova/ui/avatar.tsx", "type": "registry:ui", "target": "@components/avatar.tsx" } ], "categories": [ "data-display" ], "dependencies": [ "@base-ui/react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "badge", "type": "registry:ui", "title": "Badge", "description": "Displays a badge or a component that looks like a badge.", "files": [ { "path": "registry/base-nova/ui/badge.tsx", "type": "registry:ui", "target": "@components/badge.tsx" } ], "categories": [ "data-display" ], "dependencies": [ "@base-ui/react", "class-variance-authority" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "base-nova-rtl", "type": "registry:style", "title": "base-nova-rtl (brand palette + RTL defaults)", "description": "Injects the Vectorstudio brand palette (orange primary, brand neutrals, success/warning tokens), the Persian/Latin variable font registrations, and the RTL-aware @layer base rules into the consumer's globals.css. Install once per project, alongside your Tailwind v4 entry.", "categories": [ "base", "styles" ], "cssVars": { "light": { "background": "oklch(1 0 0)", "foreground": "oklch(0.145 0 0)", "card": "oklch(1 0 0)", "card-foreground": "oklch(0.145 0 0)", "popover": "oklch(1 0 0)", "popover-foreground": "oklch(0.145 0 0)", "primary": "oklch(0.704 0.191 50.4)", "primary-foreground": "oklch(0.985 0 0)", "secondary": "oklch(0.97 0 0)", "secondary-foreground": "oklch(0.205 0 0)", "muted": "oklch(0.97 0 0)", "muted-foreground": "oklch(0.556 0 0)", "accent": "oklch(0.97 0 0)", "accent-foreground": "oklch(0.205 0 0)", "destructive": "oklch(0.577 0.245 27.325)", "destructive-foreground": "oklch(0.985 0 0)", "border": "oklch(0.922 0 0)", "input": "oklch(0.922 0 0)", "ring": "oklch(0.704 0.191 50.4)", "chart-1": "oklch(0.704 0.191 50.4)", "chart-2": "oklch(0.795 0.184 142.5)", "chart-3": "oklch(0.577 0.245 27.325)", "chart-4": "oklch(0.92 0.18 95)", "chart-5": "oklch(0.6 0.18 240)", "sidebar": "oklch(0.985 0 0)", "sidebar-foreground": "oklch(0.145 0 0)", "sidebar-primary": "oklch(0.205 0 0)", "sidebar-primary-foreground": "oklch(0.985 0 0)", "sidebar-accent": "oklch(0.97 0 0)", "sidebar-accent-foreground": "oklch(0.205 0 0)", "sidebar-border": "oklch(0.922 0 0)", "sidebar-ring": "oklch(0.704 0.191 50.4)", "radius": "0.625rem" }, "dark": { "background": "oklch(0.145 0 0)", "foreground": "oklch(0.985 0 0)", "card": "oklch(0.205 0 0)", "card-foreground": "oklch(0.985 0 0)", "popover": "oklch(0.205 0 0)", "popover-foreground": "oklch(0.985 0 0)", "primary": "oklch(0.704 0.191 50.4)", "primary-foreground": "oklch(0.985 0 0)", "secondary": "oklch(0.269 0 0)", "secondary-foreground": "oklch(0.985 0 0)", "muted": "oklch(0.269 0 0)", "muted-foreground": "oklch(0.708 0 0)", "accent": "oklch(0.269 0 0)", "accent-foreground": "oklch(0.985 0 0)", "destructive": "oklch(0.704 0.191 22.216)", "destructive-foreground": "oklch(0.985 0 0)", "border": "oklch(1 0 0 / 12%)", "input": "oklch(1 0 0 / 18%)", "ring": "oklch(0.704 0.191 50.4)", "chart-1": "oklch(0.704 0.191 50.4)", "chart-2": "oklch(0.795 0.184 142.5)", "chart-3": "oklch(0.704 0.191 22.216)", "chart-4": "oklch(0.92 0.18 95)", "chart-5": "oklch(0.6 0.18 240)", "sidebar": "oklch(0.205 0 0)", "sidebar-foreground": "oklch(0.985 0 0)", "sidebar-primary": "oklch(0.704 0.191 50.4)", "sidebar-primary-foreground": "oklch(0.985 0 0)", "sidebar-accent": "oklch(0.269 0 0)", "sidebar-accent-foreground": "oklch(0.985 0 0)", "sidebar-border": "oklch(1 0 0 / 12%)", "sidebar-ring": "oklch(0.704 0.191 50.4)" }, "theme": { "font-sans": "'Geist Variable', sans-serif", "font-heading": "'RooyinFreeFaNum', sans-serif", "font-persian": "'Vazirmatn Variable', sans-serif", "font-mono-persian": "'Space Mono', monospace" } }, "css": { "@import \"@hackernoon/pixel-icon-library/fonts/iconfont.css\"": {}, "@import \"@fontsource-variable/geist\"": {}, "@import \"@fontsource-variable/vazirmatn\"": {}, "@import \"@fontsource/space-mono\"": {}, "@layer base": { "h1, h2, h3, h4, h5, h6": { "font-family": "var(--font-heading)", "font-weight": "700" } } } }, { "name": "breadcrumb", "type": "registry:ui", "title": "Breadcrumb", "description": "Displays the path to the current resource using a hierarchy of links.", "files": [ { "path": "registry/base-nova/ui/breadcrumb.tsx", "type": "registry:ui", "target": "@components/breadcrumb.tsx" } ], "categories": [ "navigation" ], "dependencies": [ "@base-ui/react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/utils" ] }, { "name": "bubble", "type": "registry:ui", "title": "Bubble", "description": "Chat bubble layout with avatar slot and timestamp.", "files": [ { "path": "registry/base-nova/ui/bubble.tsx", "type": "registry:ui", "target": "@components/bubble.tsx" } ], "categories": [ "data-display" ], "dependencies": [ "@base-ui/react", "class-variance-authority", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "button", "type": "registry:ui", "title": "Button", "description": "Displays a button or a component that looks like a button. Base-nova variants on @base-ui/react.", "files": [ { "path": "registry/base-nova/ui/button.tsx", "type": "registry:ui", "target": "@components/button.tsx" } ], "categories": [ "inputs", "button" ], "dependencies": [ "@base-ui/react", "class-variance-authority" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "button-group", "type": "registry:ui", "title": "Button Group", "description": "Container that groups related buttons together with consistent spacing.", "files": [ { "path": "registry/base-nova/ui/button-group.tsx", "type": "registry:ui", "target": "@components/button-group.tsx" } ], "categories": [ "inputs", "button" ], "dependencies": [ "@base-ui/react", "class-variance-authority" ], "registryDependencies": [ "vectorstudio-ir/ui/separator", "vectorstudio-ir/ui/utils" ] }, { "name": "calendar", "type": "registry:ui", "title": "Calendar", "description": "A date field component that allows users to enter and edit date values.", "files": [ { "path": "registry/base-nova/ui/calendar.tsx", "type": "registry:ui", "target": "@components/calendar.tsx" } ], "categories": [ "inputs", "date" ], "dependencies": [ "react", "react-day-picker" ], "registryDependencies": [ "vectorstudio-ir/ui/button", "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/utils" ] }, { "name": "card", "type": "registry:ui", "title": "Card", "description": "Displays a card with header, content, and footer.", "files": [ { "path": "registry/base-nova/ui/card.tsx", "type": "registry:ui", "target": "@components/card.tsx" } ], "categories": [ "layout" ], "dependencies": [ "react" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "carousel", "type": "registry:ui", "title": "Carousel", "description": "A carousel with motion and swipe gestures, built on Embla.", "files": [ { "path": "registry/base-nova/ui/carousel.tsx", "type": "registry:ui", "target": "@components/carousel.tsx" } ], "categories": [ "data-display" ], "dependencies": [ "embla-carousel-react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/button", "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/utils" ] }, { "name": "chart", "type": "registry:ui", "title": "Chart", "description": "Recharts wrapper with theme tokens for bar/line/area/pie/radar charts.", "files": [ { "path": "registry/base-nova/ui/chart.tsx", "type": "registry:ui", "target": "@components/chart.tsx" } ], "categories": [ "data-display", "charts" ], "dependencies": [ "react", "recharts" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "checkbox", "type": "registry:ui", "title": "Checkbox", "description": "A control that allows the user to toggle between checked and not checked.", "files": [ { "path": "registry/base-nova/ui/checkbox.tsx", "type": "registry:ui", "target": "@components/checkbox.tsx" } ], "categories": [ "inputs" ], "dependencies": [ "@base-ui/react" ], "registryDependencies": [ "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/utils" ] }, { "name": "collapsible", "type": "registry:ui", "title": "Collapsible", "description": "An interactive component which expands/collapses a panel.", "files": [ { "path": "registry/base-nova/ui/collapsible.tsx", "type": "registry:ui", "target": "@components/collapsible.tsx" } ], "categories": [ "disclosure" ], "dependencies": [ "@base-ui/react" ] }, { "name": "combobox", "type": "registry:ui", "title": "Combobox", "description": "Autocomplete input with a filterable list of options, built on @base-ui/react.", "files": [ { "path": "registry/base-nova/ui/combobox.tsx", "type": "registry:ui", "target": "@components/combobox.tsx" } ], "categories": [ "inputs", "autocomplete" ], "dependencies": [ "@base-ui/react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/button", "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/input-group", "vectorstudio-ir/ui/utils" ] }, { "name": "command", "type": "registry:ui", "title": "Command", "description": "Fast, searchable command palette (⌘K) built on cmdk.", "files": [ { "path": "registry/base-nova/ui/command.tsx", "type": "registry:ui", "target": "@components/command.tsx" } ], "categories": [ "overlay", "navigation" ], "dependencies": [ "cmdk", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/dialog", "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/input-group", "vectorstudio-ir/ui/utils" ] }, { "name": "context-menu", "type": "registry:ui", "title": "Context Menu", "description": "Displays a menu to the user — such as a set of actions — triggered by right-click.", "files": [ { "path": "registry/base-nova/ui/context-menu.tsx", "type": "registry:ui", "target": "@components/context-menu.tsx" } ], "categories": [ "overlay", "menu" ], "dependencies": [ "@base-ui/react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/utils" ] }, { "name": "dialog", "type": "registry:ui", "title": "Dialog", "description": "A window overlaid on either the primary window or another dialog window.", "files": [ { "path": "registry/base-nova/ui/dialog.tsx", "type": "registry:ui", "target": "@components/dialog.tsx" } ], "categories": [ "overlay", "dialog" ], "dependencies": [ "@base-ui/react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/button", "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/utils" ] }, { "name": "direction", "type": "registry:ui", "title": "Direction Provider", "description": "Re-export of @base-ui/react/direction-provider for RTL/LTR directionality.", "files": [ { "path": "registry/base-nova/ui/direction.tsx", "type": "registry:ui", "target": "@components/direction.tsx" } ], "categories": [ "providers" ], "dependencies": [ "@base-ui/react" ] }, { "name": "drawer", "type": "registry:ui", "title": "Drawer", "description": "A draggable, dismissable side panel.", "files": [ { "path": "registry/base-nova/ui/drawer.tsx", "type": "registry:ui", "target": "@components/drawer.tsx" } ], "categories": [ "overlay" ], "dependencies": [ "@base-ui/react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "dropdown-menu", "type": "registry:ui", "title": "Dropdown Menu", "description": "Displays a menu to the user — such as a set of actions — triggered by a button.", "files": [ { "path": "registry/base-nova/ui/dropdown-menu.tsx", "type": "registry:ui", "target": "@components/dropdown-menu.tsx" } ], "categories": [ "overlay", "menu" ], "dependencies": [ "@base-ui/react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/utils" ] }, { "name": "empty", "type": "registry:ui", "title": "Empty", "description": "Placeholder for empty states (lists, tables, search results).", "files": [ { "path": "registry/base-nova/ui/empty.tsx", "type": "registry:ui", "target": "@components/empty.tsx" } ], "categories": [ "data-display" ], "dependencies": [ "class-variance-authority" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "field", "type": "registry:ui", "title": "Field", "description": "Label + control + helper/error message container with consistent spacing.", "files": [ { "path": "registry/base-nova/ui/field.tsx", "type": "registry:ui", "target": "@components/field.tsx" } ], "categories": [ "forms" ], "dependencies": [ "class-variance-authority", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/label", "vectorstudio-ir/ui/separator", "vectorstudio-ir/ui/utils" ] }, { "name": "globals", "type": "registry:style", "title": "globals.css (base palette + RTL)", "description": "Tailwind v4 CSS-first config with the Vectorstudio palette, Persian font registration, RTL defaults, and shadcn-style layer base.", "files": [ { "path": "registry/base-nova/styles/globals.css", "type": "registry:style", "target": "src/styles/globals.css" } ], "categories": [ "styles" ] }, { "name": "hover-card", "type": "registry:ui", "title": "Hover Card", "description": "For sighted users to preview content available behind a link.", "files": [ { "path": "registry/base-nova/ui/hover-card.tsx", "type": "registry:ui", "target": "@components/hover-card.tsx" } ], "categories": [ "overlay" ], "dependencies": [ "@base-ui/react" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "icons", "type": "registry:ui", "title": "Pixel Icons (578)", "description": "Auto-generated barrel of 578 icons from @hackernoon/pixel-icon-library across regular, solid, brands, and purcats categories.", "files": [ { "path": "registry/base-nova/icons/index.tsx", "type": "registry:ui", "target": "@components/icons/index.tsx" } ], "categories": [ "icons" ], "registryDependencies": [ "vectorstudio-ir/ui/pixel-icon" ] }, { "name": "input", "type": "registry:ui", "title": "Input", "description": "Displays a form input field.", "files": [ { "path": "registry/base-nova/ui/input.tsx", "type": "registry:ui", "target": "@components/input.tsx" } ], "categories": [ "forms", "input" ], "dependencies": [ "@base-ui/react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "input-group", "type": "registry:ui", "title": "Input Group", "description": "Input wrapper that supports addons, prefixes, and suffixes with consistent styling.", "files": [ { "path": "registry/base-nova/ui/input-group.tsx", "type": "registry:ui", "target": "@components/input-group.tsx" } ], "categories": [ "forms", "input" ], "dependencies": [ "class-variance-authority", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/button", "vectorstudio-ir/ui/input", "vectorstudio-ir/ui/textarea", "vectorstudio-ir/ui/utils" ] }, { "name": "input-otp", "type": "registry:ui", "title": "Input OTP", "description": "Accessible one-time password input with individual character slots.", "files": [ { "path": "registry/base-nova/ui/input-otp.tsx", "type": "registry:ui", "target": "@components/input-otp.tsx" } ], "categories": [ "forms", "input" ], "dependencies": [ "input-otp", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/utils" ] }, { "name": "item", "type": "registry:ui", "title": "Item", "description": "A versatile content container with header/body/footer slots.", "files": [ { "path": "registry/base-nova/ui/item.tsx", "type": "registry:ui", "target": "@components/item.tsx" } ], "categories": [ "data-display" ], "dependencies": [ "@base-ui/react", "class-variance-authority", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/separator", "vectorstudio-ir/ui/utils" ] }, { "name": "kbd", "type": "registry:ui", "title": "Kbd", "description": "Displays keyboard shortcuts inside a kbd element.", "files": [ { "path": "registry/base-nova/ui/kbd.tsx", "type": "registry:ui", "target": "@components/kbd.tsx" } ], "categories": [ "data-display" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "label", "type": "registry:ui", "title": "Label", "description": "Renders an accessible label associated with a form control.", "files": [ { "path": "registry/base-nova/ui/label.tsx", "type": "registry:ui", "target": "@components/label.tsx" } ], "categories": [ "forms" ], "dependencies": [ "react" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "marker", "type": "registry:ui", "title": "Marker", "description": "Compact badge-like marker used for tags and statuses.", "files": [ { "path": "registry/base-nova/ui/marker.tsx", "type": "registry:ui", "target": "@components/marker.tsx" } ], "categories": [ "data-display" ], "dependencies": [ "@base-ui/react", "class-variance-authority", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "menubar", "type": "registry:ui", "title": "Menubar", "description": "A visually persistent menu common in desktop applications. Built on @base-ui/react.", "files": [ { "path": "registry/base-nova/ui/menubar.tsx", "type": "registry:ui", "target": "@components/menubar.tsx" } ], "categories": [ "navigation", "menu" ], "dependencies": [ "@base-ui/react", "react" ], "registryDependencies": [ "vectorstudio-ir/ui/dropdown-menu", "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/utils" ] }, { "name": "message", "type": "registry:ui", "title": "Message", "description": "Single chat message with author, body, and timestamp slots.", "files": [ { "path": "registry/base-nova/ui/message.tsx", "type": "registry:ui", "target": "@components/message.tsx" } ], "categories": [ "data-display" ], "dependencies": [ "react" ], "registryDependencies": [ "vectorstudio-ir/ui/utils" ] }, { "name": "message-scroller", "type": "registry:ui", "title": "Message Scroller", "description": "Auto-scrolling container for chat-style message lists with sticky scroll behavior.", "files": [ { "path": "registry/base-nova/ui/message-scroller.tsx", "type": "registry:ui", "target": "@components/message-scroller.tsx" } ], "categories": [ "data-display" ], "dependencies": [ "react" ], "registryDependencies": [ "vectorstudio-ir/ui/button", "vectorstudio-ir/ui/icons", "vectorstudio-ir/ui/utils" ] }, { "name": "native-select", "type": "registry:ui", "title": "Native Select", "description": "Native HTML