{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "saved-views",
  "type": "registry:ui",
  "title": "Saved views",
  "description": "Saved views list for filters, rendered as a listbox of named views with item counts and a highlighted active view. Works controlled or uncontrolled in React.",
  "dependencies": [],
  "registryDependencies": [
    "utils"
  ],
  "files": [
    {
      "path": "registry/ui/saved-views.tsx",
      "type": "registry:ui",
      "target": "components/ui/saved-views.tsx",
      "content": "\"use client\"\nimport * as React from \"react\"\nimport { cn } from \"@/lib/utils\"\n\ntype View = { id: string; name: string; count?: number }\n\nfunction SavedViews({\n  views = [\n    { id: \"1\", name: \"My open\", count: 12 },\n    { id: \"2\", name: \"Needs review\", count: 4 },\n    { id: \"3\", name: \"All issues\", count: 128 },\n  ],\n  value,\n  onChange,\n  className,\n}: {\n  views?: View[]\n  value?: string\n  onChange?: (id: string) => void\n  className?: string\n}) {\n  const [internal, setInternal] = React.useState(views[0]?.id)\n  const current = value ?? internal\n  return (\n    <div data-slot=\"saved-views\" role=\"listbox\" aria-label=\"Saved views\" className={cn(\"flex flex-col gap-0.5\", className)}>\n      {views.map((v) => {\n        const on = v.id === current\n        return (\n          <button\n            key={v.id}\n            type=\"button\"\n            role=\"option\"\n            aria-selected={on}\n            className={cn(\n              \"flex h-8 items-center justify-between rounded-lg px-2.5 text-left text-sm text-fg outline-none focus-visible:ring-2 focus-visible:ring-accent\",\n              on ? \"bg-sunken font-medium\" : \"hover:bg-sunken\"\n            )}\n            onClick={() => { setInternal(v.id); onChange?.(v.id) }}\n          >\n            <span>{v.name}</span>\n            {v.count != null ? <span className=\"tabular-nums text-xs text-fg\">{v.count}</span> : null}\n          </button>\n        )\n      })}\n    </div>\n  )\n}\nexport { SavedViews }\n"
    }
  ]
}
