{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "seek-controls",
  "dependencies": [
    "@radix-ui/react-slot"
  ],
  "registryDependencies": [
    "https://limeplay.winoffrg.dev/r/media-provider.json",
    "https://limeplay.winoffrg.dev/r/use-seek.json",
    "https://limeplay.winoffrg.dev/r/use-playback.json"
  ],
  "files": [
    {
      "path": "registry/default/ui/seek-controls.tsx",
      "content": "\"use client\"\n\nimport { Slot } from \"@radix-ui/react-slot\"\nimport * as React from \"react\"\n\nimport { Button } from \"@/components/ui/button\"\nimport {\n  MediaReadyState,\n  usePlaybackStore,\n} from \"@/registry/default/hooks/use-playback\"\nimport { useSeek } from \"@/registry/default/hooks/use-seek\"\n\nexport interface SeekControlProps extends React.ComponentProps<typeof Button> {\n  asChild?: boolean\n  /**\n   * The amount of time (in seconds) to seek.\n   * Positive values seek forward, negative values seek backward.\n   * @example 10 for forward 10s, -10 for backward 10s\n   */\n  offset: number\n  render?: React.ReactElement\n  shortcut?: string\n}\n\nexport const SeekControl = React.forwardRef<\n  HTMLButtonElement,\n  SeekControlProps\n>((props, forwardedRef) => {\n  const readyState = usePlaybackStore((state) => state.readyState)\n  const { seek } = useSeek()\n\n  const {\n    \"aria-label\": ariaLabelProp,\n    asChild = false,\n    children,\n    disabled: userDisabled,\n    offset,\n    onClick,\n    render,\n    shortcut,\n    ...restProps\n  } = props\n\n  const Comp = render ? Slot : asChild ? Slot : Button\n\n  const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n    onClick?.(event)\n    if (!event.defaultPrevented) {\n      seek(offset)\n    }\n  }\n\n  const isDisabled = readyState < MediaReadyState.HAVE_METADATA || userDisabled\n\n  const getDefaultAriaLabel = () => {\n    const shortcutText = shortcut ? ` (keyboard shortcut ${shortcut})` : \"\"\n    const direction = offset >= 0 ? \"Forward\" : \"Backward\"\n    const absOffset = Math.abs(offset)\n    return `${direction} ${absOffset} seconds${shortcutText}`\n  }\n\n  return (\n    <Comp\n      aria-keyshortcuts={shortcut}\n      aria-label={ariaLabelProp ?? getDefaultAriaLabel()}\n      data-label=\"lp-seek-control\"\n      disabled={isDisabled}\n      {...restProps}\n      onClick={handleClick}\n      ref={forwardedRef}\n    >\n      {render ? React.cloneElement(render, undefined, children) : children}\n    </Comp>\n  )\n})\n\nSeekControl.displayName = \"SeekControl\"\n",
      "type": "registry:ui",
      "target": "components/limeplay/seek-controls.tsx"
    }
  ],
  "type": "registry:ui"
}