{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "caption-docs",
  "title": "Caption",
  "description": "Add captions to media elements like images, videos, and files.",
  "files": [
    {
      "path": "../../content/docs/(plugins)/(functionality)/caption.mdx",
      "content": "---\ntitle: Caption\ndescription: Add captions to media elements like images, videos, and files.\ndocs:\n  - route: /docs/components/caption\n    title: Caption\n---\n\n<ComponentPreview name=\"media-demo\" />\n\n<PackageInfo>\n\n## Features\n\n- Add captions to images, videos, audio files, and other media elements.\n- Arrow navigation selects caption within a block.\n- Inline caption editing with textarea component.\n\n</PackageInfo>\n\n## Kit Usage\n\n<Steps>\n\n### Installation\n\nThe fastest way to add caption functionality is with the `MediaKit`, which includes the pre-configured `CaptionPlugin` along with media plugins and their [Plate UI](/docs/installation/plate-ui) components.\n\n<ComponentSource name=\"media-kit\" />\n\n- [`Caption`](/docs/components/caption): Renders caption components for media elements.\n\n### Add Kit\n\n```tsx\nimport { createPlateEditor } from 'platejs/react';\nimport { MediaKit } from '@/components/editor/plugins/media-kit';\n\nconst editor = createPlateEditor({\n  plugins: [\n    // ...otherPlugins,\n    ...MediaKit,\n  ],\n});\n```\n\n</Steps>\n\n## Manual Usage\n\n<Steps>\n\n### Installation\n\n```bash\nnpm install @platejs/caption\n```\n\n### Add Plugin\n\n```tsx\nimport { CaptionPlugin } from '@platejs/caption/react';\nimport { createPlateEditor } from 'platejs/react';\n\nconst editor = createPlateEditor({\n  plugins: [\n    // ...otherPlugins,\n    CaptionPlugin,\n  ],\n});\n```\n\n### Configure Plugin\n\nConfigure which media plugins should support captions:\n\n```tsx\nimport { KEYS } from 'platejs';\nimport { CaptionPlugin } from '@platejs/caption/react';\nimport {\n  AudioPlugin,\n  FilePlugin,\n  ImagePlugin,\n  MediaEmbedPlugin,\n  VideoPlugin,\n} from '@platejs/media/react';\n\nconst editor = createPlateEditor({\n  plugins: [\n    // ...otherPlugins,\n    ImagePlugin,\n    VideoPlugin,\n    AudioPlugin,\n    FilePlugin,\n    MediaEmbedPlugin,\n    CaptionPlugin.configure({\n      options: {\n        query: {\n          allow: [KEYS.img, KEYS.video, KEYS.audio, KEYS.file, KEYS.mediaEmbed],\n        },\n      },\n    }),\n  ],\n});\n```\n\n- `query.allow`: Array of plugin keys that support captions.\n\n</Steps>\n\n## Plugins\n\n### `CaptionPlugin`\n\nPlugin for adding caption functionality to media elements.\n\n<API name=\"CaptionPlugin\">\n<APIOptions>\n  <APIItem name=\"query\" type=\"{ allow: string[] }\" required>\n    Configuration for which plugins support captions.\n    <APISubList>\n      <APISubListItem parent=\"query\" name=\"allow\" type=\"string[]\">\n        Plugin keys of the blocks that can have captions.\n      </APISubListItem>\n    </APISubList>\n  </APIItem>\n  <APIItem name=\"focusEndPath\" type=\"Path\" optional>\n    Path to focus at the end of the caption.\n    - **Default:** `null`\n  </APIItem>\n  <APIItem name=\"focusStartPath\" type=\"Path\" optional>\n    Path to focus at the start of the caption.\n    - **Default:** `null`\n  </APIItem>\n  <APIItem name=\"visibleId\" type=\"string\" optional>\n    ID of the currently visible caption.\n    - **Default:** `null`\n  </APIItem>\n</APIOptions>\n</API>\n\n## Types\n\n### `TCaptionElement`\n\nExtends `TElement`.\n\n<API name=\"TCaptionElement\">\n<APIAttributes>\n  <APIItem name=\"caption\" type=\"Descendant[]\" optional>\n    Caption value as an array of descendant nodes.\n  </APIItem>\n</APIAttributes>\n</API>\n\n## Components\n\n### `<Caption>`\n\n<API name=\"Caption\">\n<APIProps>\n  <APIItem name=\"options\" type=\"object\" optional>\n    Options for the caption component.\n  </APIItem>\n  <APIItem name=\"state\" type=\"object\" optional>\n    State for the caption component.\n    <APISubList>\n      <APISubListItem parent=\"state\" name=\"captionString\" type=\"string\" optional>\n        The string representing the caption.\n      </APISubListItem>\n      <APISubListItem parent=\"state\" name=\"selected\" type=\"boolean\" optional>\n        Whether the caption component is selected.\n      </APISubListItem>\n      <APISubListItem parent=\"state\" name=\"readOnly\" type=\"boolean\" optional>\n        Whether the caption component is in read-only mode.\n      </APISubListItem>\n    </APISubList>\n  </APIItem>\n  \n  <APIOptions type=\"object\">\n  <APIItem name=\"readOnly\" type=\"boolean\" optional>\n    Whether the caption component is in read-only mode.\n  </APIItem>\n</APIOptions>\n</APIProps>\n</API>\n\n### `<CaptionTextarea>`\n\n<API name=\"CaptionTextarea\">\n<APIProps>\n  <APIItem name=\"state\" type=\"object\">\n    State for the caption textarea.\n    <APISubList>\n      <APISubListItem parent=\"state\" name=\"textareaRef\" type=\"Ref\">\n        Reference to the textarea element.\n      </APISubListItem>\n      <APISubListItem parent=\"state\" name=\"captionValue\" type=\"TextareaAutosizeProps['value']\">\n        The value of the caption displayed in the textarea.\n      </APISubListItem>\n      <APISubListItem parent=\"state\" name=\"setCaptionValue\" type=\"(value: TextareaAutosizeProps['value']) => void\">\n        Function to update the caption value.\n      </APISubListItem>\n      <APISubListItem parent=\"state\" name=\"readOnly\" type=\"boolean\">\n        Whether the caption component is in read-only mode.\n      </APISubListItem>\n      <APISubListItem parent=\"state\" name=\"element\" type=\"TCaptionElement\">\n        The caption element.\n      </APISubListItem>\n    </APISubList>\n  </APIItem>\n</APIProps>\n</API>\n",
      "type": "registry:file",
      "target": "content/docs/plate/(plugins)/(functionality)/caption.mdx"
    }
  ],
  "type": "registry:file"
}