{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "play-button",
  "title": "Play Button",
  "description": "A three-state button that plays, pauses, or restarts media with matching icons.",
  "dependencies": [
    "@videojs/react@10.0.0-beta.32",
    "react"
  ],
  "registryDependencies": [
    "@videojs/_resolve-class-name",
    "@videojs/_style-theme",
    "@videojs/button"
  ],
  "files": [
    {
      "path": "ui/files/play-button/play-button.tsx",
      "content": "/** @jsxImportSource react */\n\nimport '../styles/theme.css';\nimport { PlayButton as PlayButtonPrimitive } from '@videojs/react';\nimport {\n  RestartIcon as RestartIconPrimitive,\n  PlayIcon as PlayIconPrimitive,\n  PauseIcon as PauseIconPrimitive,\n} from '@videojs/react/icons';\n\nimport { cn, resolveClassName } from '@/components/videojs/lib/resolve-class-name';\nimport { Button } from '@/components/videojs/ui/button';\n\nexport type PlayButtonProps = Omit<PlayButtonPrimitive.Props, 'children'>;\n\nexport function PlayButton({ className, ...props }: PlayButtonProps = {}) {\n  return (\n    <PlayButtonPrimitive\n      render={<Button />}\n      className={(state) => cn('group/play', resolveClassName(className, state))}\n      {...props}\n    >\n      <RestartIconPrimitive\n        className={cn(\n          'col-start-1 row-start-1 size-media-icon drop-shadow-media-icon',\n          'transition-[opacity,scale] duration-media-base ease-out',\n          'scale-media-hidden-icon opacity-0 group-data-ended/play:scale-100 group-data-ended/play:opacity-100'\n        )}\n      />\n      <PlayIconPrimitive\n        className={cn(\n          'col-start-1 row-start-1 size-media-icon drop-shadow-media-icon',\n          'transition-[opacity,scale] duration-media-base ease-out',\n          'scale-media-hidden-icon opacity-0',\n          'group-not-data-ended/play:group-data-paused/play:opacity-100',\n          'group-not-data-ended/play:group-data-paused/play:scale-100',\n          'group-not-data-ended/play:group-not-data-started/play:opacity-100',\n          'group-not-data-ended/play:group-not-data-started/play:scale-100'\n        )}\n      />\n      <PauseIconPrimitive\n        className={cn(\n          'col-start-1 row-start-1 size-media-icon drop-shadow-media-icon',\n          'transition-[opacity,scale] duration-media-base ease-out',\n          'scale-media-hidden-icon opacity-0',\n          'group-data-started/play:group-not-data-paused/play:group-not-data-ended/play:opacity-100',\n          'group-data-started/play:group-not-data-paused/play:group-not-data-ended/play:scale-100'\n        )}\n      />\n    </PlayButtonPrimitive>\n  );\n}\n",
      "type": "registry:component",
      "target": "@components/videojs/ui/play-button.tsx"
    }
  ],
  "meta": {
    "framework": "react",
    "style": "tailwind",
    "role": "component",
    "styling": "tailwind",
    "public": true
  },
  "docs": "Installs `@/components/videojs/ui/play-button.tsx` for use inside a compatible Video.js Player or Skin.\n\n```tsx\nimport { PlayButton } from '@/components/videojs/ui/play-button';\n\nexport function Controls() {\n  return <PlayButton />;\n}\n```",
  "categories": [
    "media",
    "buttons"
  ],
  "type": "registry:ui"
}