{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "accordion-editorial",
  "type": "registry:ui",
  "title": "Editorial Accordion",
  "description": "A typographic accordion with oversized uppercase titles, numbered items, and a faded-to-primary color transition on expand.",
  "registryDependencies": [
    "accordion"
  ],
  "files": [
    {
      "path": "registry/ruixenui/accordion-editorial.tsx",
      "content": "\"use client\";\n\nimport {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTrigger,\n} from \"@/components/ui/accordion\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface AccordionEditorialItem {\n  id: string;\n  title: string;\n  content: string;\n}\n\nexport interface AccordionEditorialProps {\n  items?: AccordionEditorialItem[];\n  defaultValue?: string;\n  value?: string;\n  onValueChange?: (value: string) => void;\n  collapsible?: boolean;\n  className?: string;\n}\n\nconst defaultItems: AccordionEditorialItem[] = [\n  {\n    id: \"clarity\",\n    title: \"Clarity over cleverness\",\n    content:\n      \"The best interfaces disappear. Every label, every spacing decision, every transition serves comprehension first. When something feels obvious, that\\u2019s the result of invisible design work \\u2014 not the absence of it.\",\n  },\n  {\n    id: \"rhythm\",\n    title: \"Rhythm in repetition\",\n    content:\n      \"Consistency isn\\u2019t uniformity. A four-pixel grid, a limited type scale, a shared motion curve \\u2014 these constraints create a visual rhythm users feel before they notice. The system breathes when the rules are right.\",\n  },\n  {\n    id: \"restraint\",\n    title: \"The discipline of restraint\",\n    content:\n      \"Removing the last unnecessary element is harder than adding the first. Restraint means questioning every border, every shadow, every color that doesn\\u2019t earn its place. What remains carries more weight.\",\n  },\n  {\n    id: \"materiality\",\n    title: \"Digital materiality\",\n    content:\n      \"Screens have physics \\u2014 not literal, but felt. A button that depresses, a card that lifts, a list that settles. These micro-responses create trust. The interface becomes a surface you can rely on.\",\n  },\n  {\n    id: \"craft\",\n    title: \"Craft at every scale\",\n    content:\n      \"The gap between good and great lives in the details nobody asked for. A hover state that eases perfectly. A loading skeleton that matches the content layout. Craft compounds when nobody is cutting corners.\",\n  },\n];\n\nexport default function AccordionEditorial({\n  items = defaultItems,\n  defaultValue = \"restraint\",\n  value,\n  onValueChange,\n  collapsible = true,\n  className,\n}: AccordionEditorialProps) {\n  return (\n    <div className={cn(\"mx-auto w-full max-w-xl\", className)}>\n      <Accordion\n        type=\"single\"\n        defaultValue={value ? undefined : defaultValue}\n        value={value}\n        onValueChange={onValueChange}\n        collapsible={collapsible}\n      >\n        {items.map((item) => (\n          <AccordionItem\n            value={item.id}\n            key={item.id}\n            className=\"group/item border-none\"\n          >\n            <AccordionTrigger className=\"cursor-pointer py-3.5 hover:no-underline [&>svg]:hidden\">\n              <span className=\"text-xl tracking-[-0.02em] text-foreground/30 transition-all duration-500 ease-[cubic-bezier(0.16,1,0.3,1)] group-hover/item:translate-x-px group-hover/item:text-foreground/50 group-data-[state=open]/item:text-foreground/90\">\n                {item.title}\n              </span>\n            </AccordionTrigger>\n            <AccordionContent>\n              <div className=\"border-l border-foreground/[0.08] pb-1 pl-4\">\n                <p className=\"text-sm leading-[1.8] text-foreground/50\">\n                  {item.content}\n                </p>\n              </div>\n            </AccordionContent>\n          </AccordionItem>\n        ))}\n      </Accordion>\n    </div>\n  );\n}\n",
      "type": "registry:ui",
      "target": "components/ruixen/accordion-editorial.tsx"
    }
  ]
}