{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "fumadocs",
  "title": "Fumadocs app",
  "description": "Fumadocs app for plate",
  "dependencies": [
    "@radix-ui/react-separator",
    "@radix-ui/react-accordion",
    "lucide-react",
    "class-variance-authority",
    "tailwind-merge",
    "clsx"
  ],
  "registryDependencies": [
    "https://platejs.org/r/docs.json"
  ],
  "files": [
    {
      "path": "src/registry/blocks/fumadocs/content/docs/index.mdx",
      "content": "---\ntitle: Home\ndescription: Select a library to explore its documentation, guides, and API references.\n---\n\n<Cards>\n\n<Card icon={<MinusIcon className=\"text-black dark:text-white\" />} title='Plate' href='/docs/plate'>\n\nThe editor framework.\n\n</Card>\n\n<Card icon={<SquareAsteriskIcon className=\"text-black dark:text-white\" />} title='Add Your Library'>\n\nEdit page in `content/docs/index.mdx`\n\n</Card>\n\n</Cards>\n",
      "type": "registry:file",
      "target": "content/docs/index.mdx"
    },
    {
      "path": "src/registry/blocks/fumadocs/fumadocs-mdx-components.tsx",
      "content": "import type { MDXComponents } from 'mdx/types';\n\nimport { Accordion, Accordions } from 'fumadocs-ui/components/accordion';\nimport defaultMdxComponents from 'fumadocs-ui/mdx';\nimport { MinusIcon, SquareAsteriskIcon } from 'lucide-react';\n\nimport {\n  API,\n  APIAttributes,\n  APIItem,\n  APIList,\n  APIListAPI,\n  APIMethods,\n  APIOptions,\n  APIParameters,\n  APIProps,\n  APIReturns,\n  APIState,\n  APISubList,\n  APISubListItem,\n  APITransforms,\n  EmptyComponent,\n  KeyTable,\n  KeyTableItem,\n  Steps,\n} from './mdx-plate-components';\n\n// use this function to get MDX components, you will need it for rendering MDX\nexport function getMDXComponents(components?: MDXComponents): MDXComponents {\n  return {\n    ...defaultMdxComponents,\n    ...components,\n    ...plateMdxComponents,\n  };\n}\n\nconst plateMdxComponents = {\n  Accordion,\n  Accordions,\n  API,\n  APIAttributes,\n  APIItem,\n  APIList,\n  APIListAPI,\n  APIMethods,\n  APIOptions,\n  APIParameters,\n  APIProps,\n  APIReturns,\n  APIState,\n  APISubList,\n  APISubListItem,\n  APITransforms,\n  ComponentExample: EmptyComponent,\n  ComponentInstallation: EmptyComponent,\n  ComponentPreview: EmptyComponent,\n  ComponentPreviewPro: EmptyComponent,\n  ComponentSource: EmptyComponent,\n  KeyTable,\n  KeyTableItem,\n  MinusIcon,\n  PackageInfo: EmptyComponent,\n  ReleaseIndex: EmptyComponent,\n  SquareAsteriskIcon,\n  Steps,\n};\n",
      "type": "registry:file",
      "target": "mdx-components.tsx"
    },
    {
      "path": "src/registry/blocks/fumadocs/mdx-plate-components.tsx",
      "content": "'use client';\n\nimport React, { type ReactNode, createContext, useState } from 'react';\n\nimport * as AccordionPrimitive from '@radix-ui/react-accordion';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\nimport { type VariantProps, cva } from 'class-variance-authority';\nimport { cn } from 'fumadocs-ui/utils/cn';\nimport { ChevronDownIcon, PlusIcon } from 'lucide-react';\n\ntype Item = {\n  children: ReactNode;\n  name: string;\n  type: string;\n  default?: boolean | string;\n  description?: string;\n  optional?: boolean;\n  required?: boolean;\n  value?: string;\n};\n\nconst APIContext = createContext<{ listType?: string; name?: string }>({});\n\nconst listTypeToId: Record<string, string> = {\n  api: 'api',\n  attributes: 'attrs',\n  methods: 'methods',\n  options: 'opt',\n  parameters: 'params',\n  props: 'props',\n  returns: 'returns',\n  state: 'state',\n  transforms: 'tf',\n};\n\nconst listTypeToBadgeStyles: Record<string, string> = {\n  api: 'bg-pink-50 text-pink-700 dark:bg-pink-950 dark:text-pink-300',\n  attributes: 'bg-cyan-50 text-cyan-700 dark:bg-cyan-950 dark:text-cyan-300',\n  methods: 'bg-cyan-50 text-cyan-700 dark:bg-cyan-950 dark:text-cyan-300',\n  options: 'bg-gray-100 text-gray-700 dark:bg-gray-800 dark:text-gray-300',\n  parameters: 'bg-red-50 text-red-700 dark:bg-red-950 dark:text-red-300',\n  props: 'bg-red-50 text-red-700 dark:bg-red-950 dark:text-red-300',\n  returns: 'bg-green-50 text-green-700 dark:bg-green-950 dark:text-green-300',\n  state: 'bg-orange-50 text-orange-700 dark:bg-orange-950 dark:text-orange-300',\n  transforms:\n    'bg-purple-50 text-purple-700 dark:bg-purple-950 dark:text-purple-300',\n};\n\nexport function API({ children, name }: { children: ReactNode; name: string }) {\n  return (\n    <APIContext.Provider value={{ name }}>\n      <Card className=\"mt-6 mb-16 bg-white p-0 dark:bg-zinc-800\">\n        <CardContent className=\"space-y-6 py-6 **:[p]:m-0\">\n          {children}\n        </CardContent>\n      </Card>\n    </APIContext.Provider>\n  );\n}\n\nexport function APIItem({ children, name, optional, required, type }: Item) {\n  const { listType, name: contextName } = React.useContext(APIContext);\n\n  const id = contextName\n    ? `${contextName}-${listType ? `${listTypeToId[listType]}-` : ''}${name}`\n        .toLowerCase()\n        .replace(/[^\\da-z]+/g, '-')\n        .replace(/^-|-$/g, '')\n    : undefined;\n\n  return (\n    <div className=\"select-text border-none\">\n      <div className=\"group p-0 hover:no-underline\">\n        <li id={id} className=\"scroll-mt-20\">\n          <h4 className=\"!my-0 relative py-2 text-start font-semibold leading-none tracking-tight\">\n            {id && (\n              <a\n                className={cn(\n                  'opacity-0 hover:opacity-100 group-hover:opacity-100'\n                )}\n                onClick={(e) => e.stopPropagation()}\n                href={`#${id}`}\n              >\n                <div className=\"-left-5 absolute top-2 pr-1 leading-none\">\n                  <LinkIcon className=\"size-4 text-muted-foreground\" />\n                </div>\n              </a>\n            )}\n            <span className=\"font-mono font-semibold text-sm leading-none group-hover:underline\">\n              {name}\n            </span>\n            {required && (\n              <span className=\"font-mono text-orange-500 text-xs leading-none\">\n                {' '}\n                REQUIRED\n              </span>\n            )}\n            <span className=\"text-left font-medium font-mono text-muted-foreground text-sm leading-none\">\n              {!required && optional && ' optional'} {type}\n            </span>\n          </h4>\n        </li>\n      </div>\n      <div className=\"pt-2 pb-0\">{children}</div>\n    </div>\n  );\n}\n\nexport function APIAttributes({ children, ...props }: APIListProps) {\n  return (\n    <APIList listType=\"attributes\" {...props}>\n      {children}\n    </APIList>\n  );\n}\n\nexport function APIOptions({ children, ...props }: APIListProps) {\n  return (\n    <APIList listType=\"options\" {...props}>\n      {children}\n    </APIList>\n  );\n}\n\nexport function APIProps({ children, ...props }: APIListProps) {\n  return (\n    <APIList listType=\"props\" {...props}>\n      {children}\n    </APIList>\n  );\n}\n\nexport function APIState({ children, ...props }: APIListProps) {\n  return (\n    <APIList listType=\"state\" {...props}>\n      {children}\n    </APIList>\n  );\n}\n\nexport function APIReturns({ children, ...props }: APIListProps) {\n  return (\n    <APIList listType=\"returns\" {...props}>\n      {children}\n    </APIList>\n  );\n}\n\nexport function APIParameters({ children, ...props }: APIListProps) {\n  return (\n    <APIList listType=\"parameters\" {...props}>\n      {children}\n    </APIList>\n  );\n}\n\nexport function APIListAPI({ children, ...props }: APIListProps) {\n  return (\n    <APIList listType=\"api\" {...props}>\n      {children}\n    </APIList>\n  );\n}\n\nexport function APITransforms({ children, ...props }: APIListProps) {\n  return (\n    <APIList listType=\"transforms\" {...props}>\n      {children}\n    </APIList>\n  );\n}\n\nexport function APIMethods({ children, ...props }: APIListProps) {\n  return (\n    <APIList listType=\"methods\" {...props}>\n      {children}\n    </APIList>\n  );\n}\n\ntype APIListProps = {\n  children: ReactNode;\n  collapsed?: boolean;\n  listType?: string;\n  type?: string;\n};\n\nexport function APIList({\n  children,\n  listType = 'parameters',\n  type,\n}: APIListProps) {\n  const { name } = React.useContext(APIContext);\n  const childCount = React.Children.count(children);\n\n  if (listType === 'returns' && !childCount) return null;\n\n  const id = name ? `${name}-${listTypeToId[listType]}` : undefined;\n\n  return (\n    <APIContext.Provider value={{ listType, name }}>\n      <section className=\"flex w-full flex-col items-center\">\n        <div className=\"w-full\">\n          <div className=\"\">\n            <div className=\"flex items-center justify-between pb-4\">\n              <h3\n                id={id}\n                className=\"group !my-0 relative scroll-mt-20 font-medium text-lg leading-none tracking-tight\"\n              >\n                {id && (\n                  <a\n                    className={cn(\n                      'opacity-0 hover:opacity-100 group-hover:opacity-100'\n                    )}\n                    onClick={(e) => e.stopPropagation()}\n                    href={`#${id}`}\n                  >\n                    <div className=\"-left-5 absolute top-0 pr-1 leading-none\">\n                      <LinkIcon className=\"size-4 text-muted-foreground\" />\n                    </div>\n                  </a>\n                )}\n\n                <span\n                  className={cn(\n                    'inline-flex items-center rounded-md px-2 py-0.5 font-medium text-base',\n                    'ring-1 ring-black/5 ring-inset dark:ring-white/5',\n                    listTypeToBadgeStyles[listType]\n                  )}\n                >\n                  {listType === 'parameters' && 'Parameters'}\n                  {listType === 'attributes' && 'Attributes'}\n                  {listType === 'returns' && 'Returns'}\n                  {listType === 'props' && 'Props'}\n                  {listType === 'state' && 'State'}\n                  {listType === 'options' && 'Options'}\n                  {listType === 'api' && 'API'}\n                  {listType === 'methods' && 'Methods'}\n                  {listType === 'transforms' && 'Transforms'}\n                </span>\n\n                {type && (\n                  <span className=\"ml-2 font-medium font-mono text-muted-foreground text-sm\">\n                    {type}\n                  </span>\n                )}\n              </h3>\n            </div>\n\n            <ul className=\"!m-0 list-none p-0\">\n              {/* {listType !== 'returns' && <Separator />} */}\n              <Separator />\n\n              <div className=\"w-full space-y-2 py-4\">\n                {childCount > 0 ? (\n                  children\n                ) : (\n                  <div className=\"py-4 text-muted-foreground text-sm\">\n                    No parameters.\n                  </div>\n                )}\n              </div>\n            </ul>\n          </div>\n        </div>\n      </section>\n    </APIContext.Provider>\n  );\n}\n\nexport function APISubListItem({\n  children,\n  name,\n  optional,\n  parent,\n  required,\n  type,\n}: {\n  children: ReactNode;\n  name: string;\n  parent: string;\n  type: string;\n  optional?: boolean;\n  required?: boolean;\n}) {\n  const { listType, name: contextName } = React.useContext(APIContext);\n\n  const id = contextName\n    ? `${contextName}-${\n        listType ? `${listTypeToId[listType]}-` : ''\n      }${parent}-${name}`\n        .toLowerCase()\n        .replace(/[^\\da-z]+/g, '-')\n        .replace(/^-|-$/g, '')\n    : undefined;\n\n  return (\n    <div className=\"border-t border-t-border p-3\">\n      <h4 className=\"relative py-2 font-mono font-semibold tracking-tight\">\n        {id && (\n          <a\n            className={cn(\n              'opacity-0 hover:opacity-100 group-hover:opacity-100'\n            )}\n            onClick={(e) => e.stopPropagation()}\n            href={`#${id}`}\n          >\n            <div className=\"-left-5 absolute top-2 pr-1 leading-none\">\n              <LinkIcon className=\"size-4 text-muted-foreground\" />\n            </div>\n          </a>\n        )}\n        <span className=\"font-semibold text-muted-foreground leading-none\">\n          {parent}.\n        </span>\n        <span className=\"font-semibold leading-none\">{name}</span>\n        {required && (\n          <span className=\"ml-1 font-mono text-orange-500 text-xs leading-none\">\n            {' '}\n            REQUIRED\n          </span>\n        )}\n        <span className=\"text-left font-medium font-mono text-muted-foreground text-sm leading-none group-hover:no-underline\">\n          {!required && optional && ' optional'} {type}\n        </span>\n      </h4>\n      <div>{children}</div>\n    </div>\n  );\n}\n\nexport function APISubList({\n  children,\n  open,\n}: {\n  children: ReactNode;\n  open?: boolean;\n}) {\n  const [value, setValue] = useState(open ? '1' : '');\n\n  return (\n    <Card className=\"my-2 p-0\">\n      <Accordion\n        className=\"w-full py-0\"\n        defaultValue={open ? '1' : ''}\n        onValueChange={setValue}\n        type=\"single\"\n        collapsible\n      >\n        <AccordionItem className=\"border-none\" value=\"1\">\n          <AccordionTrigger className=\"group px-3 py-2\" iconVariant=\"plus\">\n            {value ? 'Hide' : 'Show'} child attributes\n          </AccordionTrigger>\n          <AccordionContent>{children}</AccordionContent>\n        </AccordionItem>\n      </Accordion>\n    </Card>\n  );\n}\n\nfunction LinkIcon({ className }: { className?: string }) {\n  return (\n    <svg\n      className={className}\n      aria-label=\"Link to section\"\n      fill=\"none\"\n      height=\"24\"\n      stroke=\"currentColor\"\n      strokeLinecap=\"round\"\n      strokeLinejoin=\"round\"\n      strokeWidth=\"2\"\n      viewBox=\"0 0 24 24\"\n      width=\"24\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n    >\n      <title>Link to section</title>\n      <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\" />\n      <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\" />\n    </svg>\n  );\n}\n\nfunction Separator({\n  className,\n  decorative = true,\n  orientation = 'horizontal',\n  ...props\n}: React.ComponentProps<typeof SeparatorPrimitive.Root>) {\n  return (\n    <SeparatorPrimitive.Root\n      orientation={orientation}\n      className={cn(\n        'shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=vertical]:h-full data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px',\n        className\n      )}\n      data-slot=\"separator-root\"\n      decorative={decorative}\n      {...props}\n    />\n  );\n}\n\nfunction Accordion({\n  ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Root>) {\n  return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nfunction AccordionItem({\n  className,\n  ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Item>) {\n  return (\n    <AccordionPrimitive.Item\n      className={cn('border-b **:my-0 last:border-b-0', className)}\n      data-slot=\"accordion-item\"\n      {...props}\n    />\n  );\n}\n\nfunction AccordionTrigger({\n  children,\n  className,\n  iconVariant = 'chevron',\n  ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Trigger> & {\n  iconVariant?: 'chevron' | 'plus';\n}) {\n  return (\n    <AccordionPrimitive.Header className=\"flex\">\n      <AccordionPrimitive.Trigger\n        className={cn(\n          'flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-left font-medium text-sm outline-none transition-all **:my-0 hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>svg]:rotate-180',\n          className\n        )}\n        data-slot=\"accordion-trigger\"\n        {...props}\n      >\n        {iconVariant === 'plus' && (\n          <PlusIcon className=\"pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200\" />\n        )}\n        {children}\n        {iconVariant === 'chevron' && (\n          <ChevronDownIcon className=\"pointer-events-none size-4 shrink-0 translate-y-0.5 text-muted-foreground transition-transform duration-200\" />\n        )}\n      </AccordionPrimitive.Trigger>\n    </AccordionPrimitive.Header>\n  );\n}\n\nfunction AccordionContent({\n  children,\n  className,\n  ...props\n}: React.ComponentProps<typeof AccordionPrimitive.Content>) {\n  return (\n    <AccordionPrimitive.Content\n      className=\"overflow-hidden text-sm data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n      data-slot=\"accordion-content\"\n      {...props}\n    >\n      <div className={cn('pt-0 pb-4', className)}>{children}</div>\n    </AccordionPrimitive.Content>\n  );\n}\n\nexport { Accordion, AccordionContent, AccordionItem, AccordionTrigger };\n\nexport const Steps = ({ ...props }) => (\n  <div\n    className={cn(\n      'mb-12 ml-4 border-l pl-8 [counter-reset:step]',\n      '*:[h3,h4]:[counter-increment:step]',\n      '*:[h3,h4]:first-child:mt-0',\n      '*:[h3,h4]:mt-8',\n      '*:[h3,h4]:mb-4',\n      '*:[h3,h4]:text-base',\n      '*:[h3,h4]:font-semibold',\n      '*:[h3,h4]:before:absolute',\n      '*:[h3,h4]:before:inline-flex',\n      '*:[h3,h4]:before:h-9',\n      '*:[h3,h4]:before:w-9',\n      '*:[h3,h4]:before:items-center',\n      '*:[h3,h4]:before:justify-center',\n      '*:[h3,h4]:before:rounded-full',\n      '*:[h3,h4]:before:border-4',\n      '*:[h3,h4]:before:border-background',\n      '*:[h3,h4]:before:bg-muted',\n      '*:[h3,h4]:before:text-center',\n      '*:[h3,h4]:before:-indent-px',\n      '*:[h3,h4]:before:font-mono',\n      '*:[h3,h4]:before:text-base',\n      '*:[h3,h4]:before:font-medium',\n      '*:[h3,h4]:before:mt-[-4px]',\n      '*:[h3,h4]:before:ml-[-50px]',\n      '*:[h3,h4]:before:[content:counter(step)]'\n    )}\n    {...props}\n  />\n);\n\nfunction Table({ className, ...props }: React.ComponentProps<'table'>) {\n  return (\n    <div\n      className=\"relative w-full overflow-x-auto\"\n      data-slot=\"table-container\"\n    >\n      <table\n        className={cn('w-full caption-bottom text-sm', className)}\n        data-slot=\"table\"\n        {...props}\n      />\n    </div>\n  );\n}\n\nfunction TableHeader({ className, ...props }: React.ComponentProps<'thead'>) {\n  return (\n    <thead\n      className={cn('[&_tr]:border-b', className)}\n      data-slot=\"table-header\"\n      {...props}\n    />\n  );\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<'tbody'>) {\n  return (\n    <tbody\n      className={cn('[&_tr:last-child]:border-0', className)}\n      data-slot=\"table-body\"\n      {...props}\n    />\n  );\n}\n\nfunction TableFooter({ className, ...props }: React.ComponentProps<'tfoot'>) {\n  return (\n    <tfoot\n      className={cn(\n        'border-t bg-muted/50 font-medium [&>tr]:last:border-b-0',\n        className\n      )}\n      data-slot=\"table-footer\"\n      {...props}\n    />\n  );\n}\n\nfunction TableRow({ className, ...props }: React.ComponentProps<'tr'>) {\n  return (\n    <tr\n      className={cn(\n        'border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted',\n        className\n      )}\n      data-slot=\"table-row\"\n      {...props}\n    />\n  );\n}\n\nfunction TableHead({ className, ...props }: React.ComponentProps<'th'>) {\n  return (\n    <th\n      className={cn(\n        'h-10 whitespace-nowrap px-2 text-left align-middle font-medium text-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n        className\n      )}\n      data-slot=\"table-head\"\n      {...props}\n    />\n  );\n}\n\nfunction TableCell({ className, ...props }: React.ComponentProps<'td'>) {\n  return (\n    <td\n      className={cn(\n        'whitespace-nowrap p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n        className\n      )}\n      data-slot=\"table-cell\"\n      {...props}\n    />\n  );\n}\n\nfunction TableCaption({\n  className,\n  ...props\n}: React.ComponentProps<'caption'>) {\n  return (\n    <caption\n      className={cn('mt-4 text-muted-foreground text-sm', className)}\n      data-slot=\"table-caption\"\n      {...props}\n    />\n  );\n}\n\nexport {\n  Table,\n  TableBody,\n  TableCaption,\n  TableCell,\n  TableFooter,\n  TableHead,\n  TableHeader,\n  TableRow,\n};\n\nconst alertVariants = cva(\n  'relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current',\n  {\n    defaultVariants: {\n      variant: 'default',\n    },\n    variants: {\n      variant: {\n        default: 'bg-card text-card-foreground',\n        destructive:\n          'bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 [&>svg]:text-current',\n      },\n    },\n  }\n);\n\nfunction Alert({\n  className,\n  variant,\n  ...props\n}: React.ComponentProps<'div'> & VariantProps<typeof alertVariants>) {\n  return (\n    <div\n      className={cn(alertVariants({ variant }), className)}\n      data-slot=\"alert\"\n      role=\"alert\"\n      {...props}\n    />\n  );\n}\n\nfunction AlertTitle({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      className={cn(\n        'col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight',\n        className\n      )}\n      data-slot=\"alert-title\"\n      {...props}\n    />\n  );\n}\n\nfunction AlertDescription({\n  className,\n  ...props\n}: React.ComponentProps<'div'>) {\n  return (\n    <div\n      className={cn(\n        'col-start-2 grid justify-items-start gap-1 text-muted-foreground text-sm [&_p]:leading-relaxed',\n        className\n      )}\n      data-slot=\"alert-description\"\n      {...props}\n    />\n  );\n}\n\nexport { Alert, AlertDescription, AlertTitle };\n\nfunction Card({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      className={cn(\n        'flex flex-col gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm',\n        className\n      )}\n      data-slot=\"card\"\n      {...props}\n    />\n  );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      className={cn(\n        '@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6',\n        className\n      )}\n      data-slot=\"card-header\"\n      {...props}\n    />\n  );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      className={cn('font-semibold leading-none', className)}\n      data-slot=\"card-title\"\n      {...props}\n    />\n  );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      className={cn('text-muted-foreground text-sm', className)}\n      data-slot=\"card-description\"\n      {...props}\n    />\n  );\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      className={cn(\n        'col-start-2 row-span-2 row-start-1 self-start justify-self-end',\n        className\n      )}\n      data-slot=\"card-action\"\n      {...props}\n    />\n  );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      className={cn('px-6', className)}\n      data-slot=\"card-content\"\n      {...props}\n    />\n  );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n  return (\n    <div\n      className={cn('flex items-center px-6 [.border-t]:pt-6', className)}\n      data-slot=\"card-footer\"\n      {...props}\n    />\n  );\n}\n\nexport {\n  Card,\n  CardAction,\n  CardContent,\n  CardDescription,\n  CardFooter,\n  CardHeader,\n  CardTitle,\n};\n\nexport const KeyTable = ({\n  children,\n  className,\n  ...props\n}: React.ComponentProps<typeof Table>) => (\n  <Table className={cn('my-4', className)} {...props}>\n    <TableHeader>\n      <TableRow>\n        <TableHead className=\"w-[100px]\">Key</TableHead>\n        <TableHead>Description</TableHead>\n      </TableRow>\n    </TableHeader>\n    <TableBody>{children}</TableBody>\n  </Table>\n);\n\nexport const KeyTableItem = ({\n  children,\n  hotkey,\n}: {\n  children: React.ReactNode;\n  hotkey: string;\n}) => (\n  <TableRow>\n    <TableCell>\n      <kbd className=\"inline-flex min-w-[8px] items-center justify-center whitespace-nowrap rounded bg-muted px-2 shadow-[rgba(255,_255,_255,_0.1)_0px_0.5px_0px_0px_inset,_rgb(248,_249,_250)_0px_1px_5px_0px_inset,_rgb(193,_200,_205)_0px_0px_0px_0.5px,_rgb(193,_200,_205)_0px_2px_1px_-1px,_rgb(193,_200,_205)_0px_1px_0px_0px] dark:shadow-[rgba(255,_255,_255,_0.1)_0px_0.5px_0px_0px_inset,_rgb(26,_29,_30)_0px_1px_5px_0px_inset,_rgb(76,_81,_85)_0px_0px_0px_0.5px,_rgb(76,_81,_85)_0px_2px_1px_-1px,_rgb(76,_81,_85)_0px_1px_0px_0px]\">\n        {hotkey}\n      </kbd>\n    </TableCell>\n    <TableCell>{children}</TableCell>\n  </TableRow>\n);\n\nexport const EmptyComponent = ({\n  children,\n}: {\n  children?: React.ReactNode;\n}) => <>{children}</>;\n",
      "type": "registry:file",
      "target": "mdx-plate-components.tsx"
    }
  ],
  "type": "registry:file"
}