{ "$schema": "https://ui.shadcn.com/schema/registry.json", "name": "sealai", "homepage": "https://github.com/sealai/brain", "items": [ { "name": "app-icon-button", "type": "registry:ui", "title": "App Icon Button", "description": "SealAI product icon-only button. Use this instead of primitive Button for icon-only product actions", "dependencies": ["class-variance-authority"], "registryDependencies": ["button"], "files": [ { "path": "../../packages/ui/src/components/app-icon-button.tsx", "type": "registry:component", "target": "components/app-icon-button.tsx" } ] }, { "name": "app-button", "type": "registry:ui", "title": "App Button", "description": "SealAI product button for non-icon actions. Use this instead of primitive Button in product surfaces", "dependencies": ["class-variance-authority"], "registryDependencies": ["button"], "files": [ { "path": "../../packages/ui/src/components/app-button.tsx", "type": "registry:component", "target": "components/app-button.tsx" } ] }, { "name": "app-input", "type": "registry:ui", "title": "App Input", "description": "SealAI product single-line input for panes and settings forms. Use this instead of primitive Input in product surfaces", "registryDependencies": ["input"], "files": [ { "path": "../../packages/ui/src/components/app-input.tsx", "type": "registry:component", "target": "components/app-input.tsx" } ] }, { "name": "app-select", "type": "registry:ui", "title": "App Select", "description": "SealAI product single and multi-select controls for forms, filters, and settings surfaces", "dependencies": ["@base-ui/react", "lucide-react"], "files": [ { "path": "../../packages/ui/src/components/app-select.tsx", "type": "registry:component", "target": "components/app-select.tsx" }, { "path": "../../packages/ui/src/lib/popover-surface.ts", "type": "registry:lib", "target": "lib/popover-surface.ts" } ] }, { "name": "app-textarea", "type": "registry:ui", "title": "App Textarea", "description": "SealAI product multi-line input for forms and source editors. Use this instead of primitive Textarea in product surfaces", "registryDependencies": ["textarea"], "files": [ { "path": "../../packages/ui/src/components/app-textarea.tsx", "type": "registry:component", "target": "components/app-textarea.tsx" } ] }, { "name": "app-input-field", "type": "registry:ui", "title": "App Input Field", "description": "SealAI product text input field with label, description, error, and accessibility wiring", "registryDependencies": ["app-input", "field"], "files": [ { "path": "../../packages/ui/src/components/app-input-field.tsx", "type": "registry:component", "target": "components/app-input-field.tsx" } ] }, { "name": "sliding-toggle", "type": "registry:ui", "title": "Sliding Toggle", "description": "Segmented toggle with a sliding input-colored indicator, default and compact sizing, and full-width or content-width layout", "registryDependencies": ["toggle-group"], "files": [ { "path": "../../packages/ui/src/components/sliding-toggle.tsx", "type": "registry:component", "target": "components/sliding-toggle.tsx" } ] }, { "name": "log-viewer", "type": "registry:ui", "title": "Log viewer (Linear)", "description": "Virtualized log list with filters, time range, and chart", "dependencies": ["react-window", "recharts", "lucide-react"], "registryDependencies": [ "button", "badge", "calendar", "chart", "command", "preview", "popover", "tooltip", "faceted" ], "files": [ { "path": "../../packages/ui/src/components/log-viewer/log-viewer.tsx", "type": "registry:component", "target": "components/log-viewer/log-viewer.tsx" }, { "path": "../../packages/ui/src/components/log-viewer/log-window.ts", "type": "registry:lib", "target": "components/log-viewer/log-window.ts" }, { "path": "../../packages/ui/src/components/log-viewer/log-window-selector.tsx", "type": "registry:component", "target": "components/log-viewer/log-window-selector.tsx" }, { "path": "../../packages/ui/src/components/log-viewer/log-viewer.live-control.tsx", "type": "registry:component", "target": "components/log-viewer/log-viewer.live-control.tsx" }, { "path": "../../packages/ui/src/components/time-wheel-field.tsx", "type": "registry:component", "target": "components/time-wheel-field.tsx" }, { "path": "../../packages/ui/src/components/log-viewer/log-viewer.context.tsx", "type": "registry:component", "target": "components/log-viewer/log-viewer.context.tsx" }, { "path": "../../packages/ui/src/components/log-viewer/log-viewer.list.tsx", "type": "registry:component", "target": "components/log-viewer/log-viewer.list.tsx" }, { "path": "../../packages/ui/src/components/log-viewer/log-viewer.toolbar.tsx", "type": "registry:component", "target": "components/log-viewer/log-viewer.toolbar.tsx" }, { "path": "../../packages/ui/src/components/log-viewer/log-viewer.count-chart.tsx", "type": "registry:component", "target": "components/log-viewer/log-viewer.count-chart.tsx" }, { "path": "../../packages/ui/src/components/log-viewer/log-viewer.highlight.tsx", "type": "registry:component", "target": "components/log-viewer/log-viewer.highlight.tsx" }, { "path": "../../packages/ui/src/components/log-viewer/log-viewer.utils.ts", "type": "registry:lib", "target": "components/log-viewer/log-viewer.utils.ts" } ] }, { "name": "app-dialog", "type": "registry:ui", "title": "App Dialog", "description": "SealAI product compound dialog for confirmations, form modals, and loading actions. Use this instead of raw dialog primitives in product surfaces", "dependencies": ["lucide-react"], "registryDependencies": ["dialog", "input", "label"], "files": [ { "path": "../../packages/ui/src/components/app-dialog.tsx", "type": "registry:component", "target": "components/app-dialog.tsx" } ] }, { "name": "container-node", "type": "registry:ui", "title": "Container Node", "description": "AP workload canvas node composed with shared Canvas Node chrome, Root/Content state, lifecycle actions, quick actions, footer metrics, and expansion behavior", "dependencies": ["lucide-react"], "registryDependencies": ["canvas-node", "button", "dropdown-menu"], "files": [ { "path": "../../packages/ui/src/components/container-node/container-node.types.ts", "type": "registry:lib", "target": "components/container-node/container-node.types.ts" }, { "path": "../../packages/ui/src/components/container-node/container-node.availability.ts", "type": "registry:lib", "target": "components/container-node/container-node.availability.ts" }, { "path": "../../packages/ui/src/components/container-node/container-node.context.ts", "type": "registry:component", "target": "components/container-node/container-node.context.ts" }, { "path": "../../packages/ui/src/components/container-node/container-node.provider.tsx", "type": "registry:component", "target": "components/container-node/container-node.provider.tsx" }, { "path": "../../packages/ui/src/components/container-node/container-node.root.tsx", "type": "registry:component", "target": "components/container-node/container-node.root.tsx" }, { "path": "../../packages/ui/src/components/container-node/container-node.status.ts", "type": "registry:lib", "target": "components/container-node/container-node.status.ts" }, { "path": "../../packages/ui/src/components/container-node/container-node.css", "type": "registry:component", "target": "components/container-node/container-node.css" }, { "path": "../../packages/ui/src/components/container-node/container-node.content.tsx", "type": "registry:component", "target": "components/container-node/container-node.content.tsx" }, { "path": "../../packages/ui/src/components/container-node/container-node.tsx", "type": "registry:component", "target": "components/container-node/container-node.tsx" }, { "path": "../../packages/ui/src/components/container-node/index.ts", "type": "registry:component", "target": "components/container-node/index.ts" } ] }, { "name": "canvas-node", "type": "registry:ui", "title": "Canvas Node", "description": "Shared canvas node chrome with frame, surface, layout, status, drag, expand, connector, copyable-row, metrics, actions, and card primitives", "dependencies": ["lucide-react"], "registryDependencies": [ "app-icon-button", "button", "dropdown-menu", "skeleton", "spinner", "tooltip" ], "files": [ { "path": "../../packages/ui/src/components/canvas-node/canvas-node.types.ts", "type": "registry:lib", "target": "components/canvas-node/canvas-node.types.ts" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.availability.ts", "type": "registry:lib", "target": "components/canvas-node/canvas-node.availability.ts" }, { "path": "../../packages/ui/src/components/canvas/canvas-glass-store.ts", "type": "registry:lib", "target": "components/canvas/canvas-glass-store.ts" }, { "path": "../../packages/ui/src/components/canvas/canvas-glass-context.tsx", "type": "registry:component", "target": "components/canvas/canvas-glass-context.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.context.ts", "type": "registry:component", "target": "components/canvas-node/canvas-node.context.ts" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.provider.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.provider.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.root.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.root.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.frame.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.frame.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.surface.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.surface.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.layout.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.layout.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.card.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.card.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.placeholder.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.placeholder.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.connection.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.connection.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.expand-button.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.expand-button.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.drag-frame.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.drag-frame.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.status.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.status.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.actions.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.actions.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.copyable-row.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.copyable-row.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.copyable-row-value.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.copyable-row-value.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.row-actions.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.row-actions.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.metrics.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.metrics.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.css", "type": "registry:component", "target": "components/canvas-node/canvas-node.css" }, { "path": "../../packages/ui/src/components/canvas-node/canvas-node.tsx", "type": "registry:component", "target": "components/canvas-node/canvas-node.tsx" }, { "path": "../../packages/ui/src/components/canvas-node/index.ts", "type": "registry:component", "target": "components/canvas-node/index.ts" } ] }, { "name": "entry-node", "type": "registry:ui", "title": "Entry Node", "description": "Entry point node content composed with shared canvas node chrome", "dependencies": ["lucide-react"], "registryDependencies": ["canvas-node"], "files": [ { "path": "../../packages/ui/src/components/entry-node/entry-node.types.ts", "type": "registry:lib", "target": "components/entry-node/entry-node.types.ts" }, { "path": "../../packages/ui/src/components/entry-node/entry-node.context.ts", "type": "registry:component", "target": "components/entry-node/entry-node.context.ts" }, { "path": "../../packages/ui/src/components/entry-node/entry-node.provider.tsx", "type": "registry:component", "target": "components/entry-node/entry-node.provider.tsx" }, { "path": "../../packages/ui/src/components/entry-node/entry-node.root.tsx", "type": "registry:component", "target": "components/entry-node/entry-node.root.tsx" }, { "path": "../../packages/ui/src/components/entry-node/entry-node.content.tsx", "type": "registry:component", "target": "components/entry-node/entry-node.content.tsx" }, { "path": "../../packages/ui/src/components/entry-node/entry-node.status.ts", "type": "registry:lib", "target": "components/entry-node/entry-node.status.ts" }, { "path": "../../packages/ui/src/components/entry-node/entry-node.target.tsx", "type": "registry:component", "target": "components/entry-node/entry-node.target.tsx" }, { "path": "../../packages/ui/src/components/entry-node/entry-node.css", "type": "registry:component", "target": "components/entry-node/entry-node.css" }, { "path": "../../packages/ui/src/components/entry-node/index.ts", "type": "registry:component", "target": "components/entry-node/index.ts" }, { "path": "../../packages/ui/src/components/entry-node/entry-node.tsx", "type": "registry:component", "target": "components/entry-node/entry-node.tsx" } ] }, { "name": "database-node", "type": "registry:ui", "title": "Database Node", "description": "Managed database canvas node with connection rows, public-access toggle, lifecycle and quick actions, footer metrics, and metadata-driven icons", "dependencies": ["lucide-react"], "registryDependencies": [ "app-icon-button", "button", "canvas-node", "dropdown-menu", "switch", "tooltip" ], "files": [ { "path": "../../packages/ui/src/components/database-node/database-node.types.ts", "type": "registry:lib", "target": "components/database-node/database-node.types.ts" }, { "path": "../../packages/ui/src/components/database-node/database-node.mask.ts", "type": "registry:lib", "target": "components/database-node/database-node.mask.ts" }, { "path": "../../packages/ui/src/components/database-node/database-node.availability.ts", "type": "registry:lib", "target": "components/database-node/database-node.availability.ts" }, { "path": "../../packages/ui/src/components/database-node/database-node.context.ts", "type": "registry:component", "target": "components/database-node/database-node.context.ts" }, { "path": "../../packages/ui/src/components/database-node/database-node.provider.tsx", "type": "registry:component", "target": "components/database-node/database-node.provider.tsx" }, { "path": "../../packages/ui/src/components/database-node/database-node.root.tsx", "type": "registry:component", "target": "components/database-node/database-node.root.tsx" }, { "path": "../../packages/ui/src/components/database-node/database-node.status.ts", "type": "registry:lib", "target": "components/database-node/database-node.status.ts" }, { "path": "../../packages/ui/src/components/database-node/database-node.connection-row.tsx", "type": "registry:component", "target": "components/database-node/database-node.connection-row.tsx" }, { "path": "../../packages/ui/src/components/database-node/database-node.content.tsx", "type": "registry:component", "target": "components/database-node/database-node.content.tsx" }, { "path": "../../packages/ui/src/components/database-node/database-node.css", "type": "registry:component", "target": "components/database-node/database-node.css" }, { "path": "../../packages/ui/src/components/database-node/index.ts", "type": "registry:component", "target": "components/database-node/index.ts" }, { "path": "../../packages/ui/src/components/database-node/database-node.tsx", "type": "registry:component", "target": "components/database-node/database-node.tsx" } ] }, { "name": "environment-node", "type": "registry:ui", "title": "Environment Node", "description": "Development environment canvas node with launch command, lifecycle actions, quick actions, runtime icons, and footer metrics", "dependencies": ["lucide-react"], "registryDependencies": ["button", "canvas-node", "dropdown-menu"], "files": [ { "path": "../../packages/ui/src/assets/runtime-icons/types.ts", "type": "registry:lib", "target": "assets/runtime-icons/types.ts" }, { "path": "../../packages/ui/src/assets/runtime-icons/nodejs.tsx", "type": "registry:component", "target": "assets/runtime-icons/nodejs.tsx" }, { "path": "../../packages/ui/src/assets/runtime-icons/go.tsx", "type": "registry:component", "target": "assets/runtime-icons/go.tsx" }, { "path": "../../packages/ui/src/assets/runtime-icons/python.tsx", "type": "registry:component", "target": "assets/runtime-icons/python.tsx" }, { "path": "../../packages/ui/src/assets/runtime-icons/java.tsx", "type": "registry:component", "target": "assets/runtime-icons/java.tsx" }, { "path": "../../packages/ui/src/assets/runtime-icons/rust.tsx", "type": "registry:component", "target": "assets/runtime-icons/rust.tsx" }, { "path": "../../packages/ui/src/assets/runtime-icons/php.tsx", "type": "registry:component", "target": "assets/runtime-icons/php.tsx" }, { "path": "../../packages/ui/src/assets/runtime-icons/ruby.tsx", "type": "registry:component", "target": "assets/runtime-icons/ruby.tsx" }, { "path": "../../packages/ui/src/assets/runtime-icons/cplusplus.tsx", "type": "registry:component", "target": "assets/runtime-icons/cplusplus.tsx" }, { "path": "../../packages/ui/src/assets/runtime-icons/dotnet.tsx", "type": "registry:component", "target": "assets/runtime-icons/dotnet.tsx" }, { "path": "../../packages/ui/src/assets/runtime-icons/index.ts", "type": "registry:lib", "target": "assets/runtime-icons/index.ts" }, { "path": "../../packages/ui/src/components/environment-node/environment-node.types.ts", "type": "registry:lib", "target": "components/environment-node/environment-node.types.ts" }, { "path": "../../packages/ui/src/components/environment-node/environment-node.context.ts", "type": "registry:component", "target": "components/environment-node/environment-node.context.ts" }, { "path": "../../packages/ui/src/components/environment-node/environment-node.provider.tsx", "type": "registry:component", "target": "components/environment-node/environment-node.provider.tsx" }, { "path": "../../packages/ui/src/components/environment-node/environment-node.root.tsx", "type": "registry:component", "target": "components/environment-node/environment-node.root.tsx" }, { "path": "../../packages/ui/src/components/environment-node/environment-runtime-icons.tsx", "type": "registry:component", "target": "components/environment-node/environment-runtime-icons.tsx" }, { "path": "../../packages/ui/src/components/environment-node/environment-node.status.ts", "type": "registry:lib", "target": "components/environment-node/environment-node.status.ts" }, { "path": "../../packages/ui/src/components/environment-node/environment-node.content.tsx", "type": "registry:component", "target": "components/environment-node/environment-node.content.tsx" }, { "path": "../../packages/ui/src/components/environment-node/environment-node.css", "type": "registry:component", "target": "components/environment-node/environment-node.css" }, { "path": "../../packages/ui/src/components/environment-node/index.ts", "type": "registry:component", "target": "components/environment-node/index.ts" }, { "path": "../../packages/ui/src/components/environment-node/environment-node.tsx", "type": "registry:component", "target": "components/environment-node/environment-node.tsx" } ] }, { "name": "metrics-chart", "type": "registry:ui", "title": "Metrics chart", "description": "Multi-series metrics area chart: compound MetricsChart.Root + Area / Variant0 / Variant1, provider + context (mirrors Canvas layout)", "dependencies": ["recharts"], "registryDependencies": ["chart"], "files": [ { "path": "../../packages/ui/src/components/metrics-chart/metrics-chart.defaults.ts", "type": "registry:lib", "target": "components/metrics-chart/metrics-chart.defaults.ts" }, { "path": "../../packages/ui/src/components/metrics-chart/metrics-chart.types.ts", "type": "registry:lib", "target": "components/metrics-chart/metrics-chart.types.ts" }, { "path": "../../packages/ui/src/components/metrics-chart/metrics-chart.context.ts", "type": "registry:lib", "target": "components/metrics-chart/metrics-chart.context.ts" }, { "path": "../../packages/ui/src/components/metrics-chart/metrics-chart.use.ts", "type": "registry:lib", "target": "components/metrics-chart/metrics-chart.use.ts" }, { "path": "../../packages/ui/src/components/metrics-chart/metrics-chart.provider.tsx", "type": "registry:component", "target": "components/metrics-chart/metrics-chart.provider.tsx" }, { "path": "../../packages/ui/src/components/metrics-chart/metrics-chart.area.tsx", "type": "registry:component", "target": "components/metrics-chart/metrics-chart.area.tsx" }, { "path": "../../packages/ui/src/components/metrics-chart/metrics-chart.compact.tsx", "type": "registry:component", "target": "components/metrics-chart/metrics-chart.compact.tsx" }, { "path": "../../packages/ui/src/components/metrics-chart/metrics-chart.tsx", "type": "registry:component", "target": "components/metrics-chart/metrics-chart.tsx" } ] } ] }