{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "api-cn-docs",
  "title": "cn",
  "description": "API reference for @udecode/cn.",
  "files": [
    {
      "path": "../../content/docs/api/cn.mdx",
      "content": "---\ntitle: cn\ndescription: API reference for @udecode/cn.\n---\n\n`@udecode/cn` provides class-name helpers and component wrappers for React UI primitives. The package also re-exports `@udecode/react-utils` from its root entry.\n\n## Install\n\n```bash\nnpm install @udecode/cn\n```\n\n## Quick Use\n\n```tsx\nimport * as React from 'react';\n\nimport { cn, withCn, withProps, withVariants } from '@udecode/cn';\n\nconst active = true;\nconst className = cn('px-2', active && 'bg-accent', 'px-4');\n\nconst ButtonBase = React.forwardRef<\n  HTMLButtonElement,\n  React.ComponentProps<'button'>\n>((props, ref) => <button ref={ref} {...props} />);\n\nconst Button = withCn(ButtonBase, 'inline-flex items-center rounded-md');\n\nconst PrimaryButton = withProps(Button, {\n  type: 'button',\n  className: 'bg-primary text-primary-foreground',\n});\n```\n\n## Ownership\n\n| Surface | Owner | What It Does |\n|---------|-------|--------------|\n| `cn` | `@udecode/cn` | Combines `class-variance-authority` `cx` with `tailwind-merge`. |\n| `withCn` | `@udecode/cn` | Creates a component with a default merged `className`. |\n| `withProps` | `@udecode/cn` | Creates a `forwardRef` component with default props. |\n| `withVariants` | `@udecode/cn` | Creates a `forwardRef` component that computes classes from `cva` variants. |\n| React utility exports | `@udecode/react-utils` | Re-exported from the `@udecode/cn` root entry. |\n\n## Behavior\n\n| Helper | Behavior |\n|--------|----------|\n| `cn(...inputs)` | Runs values through `cx`, then resolves Tailwind conflicts with `twMerge`. |\n| `withCn(Component, ...inputs)` | Calls `withProps` with a default `className` created from `cn`. |\n| `withProps(Component, defaultProps)` | Merges default props first and consumer props second. |\n| `withProps` class names | Merges `defaultProps.className` and `props.className` with `cn`. |\n| `withProps` refs | Returns `React.forwardRef`. |\n| `withVariants(Component, variants, onlyVariantsProps?)` | Applies `variants(variantProps)` and merges the result with `className`. |\n| `onlyVariantsProps` | Removes variant-only props from the rendered component props. |\n\n## API Reference\n\n### `cn`\n\nMerge conditional class values and resolve Tailwind conflicts.\n\n```tsx\ncn('px-2', active && 'bg-accent', 'px-4');\n```\n\n<API name=\"cn\">\n<APIParameters>\n  <APIItem name=\"...inputs\" type=\"CxOptions\">\n    Values accepted by `class-variance-authority` `cx`.\n  </APIItem>\n</APIParameters>\n<APIReturns type=\"string\">\n  The merged class name.\n</APIReturns>\n</API>\n\n### `withCn`\n\nCreate a component with default classes.\n\n```tsx\nconst Card = withCn('div', 'rounded-md border bg-card');\n```\n\n<API name=\"withCn\">\n<APIParameters>\n  <APIItem name=\"Component\" type=\"React.ComponentType\">\n    Component receiving the default class name.\n  </APIItem>\n  <APIItem name=\"...inputs\" type=\"CxOptions\">\n    Default class values.\n  </APIItem>\n</APIParameters>\n<APIReturns type=\"React.ForwardRefExoticComponent\">\n  A component that merges the default class name with consumer `className`.\n</APIReturns>\n</API>\n\n### `withProps`\n\nCreate a component with default props. Consumer props override default props, except class names are merged.\n\n```tsx\nconst SubmitButton = withProps('button', {\n  type: 'submit',\n  className: 'font-medium',\n});\n```\n\n<API name=\"withProps\">\n<APIParameters>\n  <APIItem name=\"Component\" type=\"React.ElementType\">\n    Component receiving default props.\n  </APIItem>\n  <APIItem name=\"defaultProps\" type=\"Partial<React.ComponentPropsWithoutRef<T>>\">\n    Props applied before consumer props.\n  </APIItem>\n</APIParameters>\n<APIReturns type=\"React.ForwardRefExoticComponent\">\n  A `forwardRef` component with merged class names.\n</APIReturns>\n</API>\n\n### `withVariants`\n\nCreate a component backed by `class-variance-authority` variants.\n\n```tsx\nimport { cva } from 'class-variance-authority';\n\nconst buttonVariants = cva('inline-flex items-center', {\n  variants: {\n    size: {\n      sm: 'h-8 px-2',\n      md: 'h-9 px-3',\n    },\n  },\n});\n\nconst Button = withVariants('button', buttonVariants, ['size']);\n```\n\n<API name=\"withVariants\">\n<APIParameters>\n  <APIItem name=\"Component\" type=\"React.ElementType\">\n    Component receiving variant classes.\n  </APIItem>\n  <APIItem name=\"variants\" type=\"V extends ReturnType<typeof cva>\">\n    `cva` variant function.\n  </APIItem>\n  <APIItem name=\"onlyVariantsProps\" type=\"(keyof VariantProps<V>)[]\" optional>\n    Variant props to remove before rendering the component.\n  </APIItem>\n</APIParameters>\n<APIReturns type=\"React.ForwardRefExoticComponent\">\n  A `forwardRef` component with variant props and merged class names.\n</APIReturns>\n</API>\n",
      "type": "registry:file",
      "target": "content/docs/plate/api/cn.mdx"
    }
  ],
  "type": "registry:file"
}