{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "ink/divider",
  "title": "Divider",
  "description": "Horizontal or vertical divider / rule",
  "dependencies": [
    "ink"
  ],
  "registryDependencies": [
    "https://termcn.dev/r/ink/terminal-style.json",
    "https://termcn.dev/r/ink/use-theme.json",
    "https://termcn.dev/r/ink/use-unicode.json"
  ],
  "files": [
    {
      "path": "registry/ui/divider.tsx",
      "content": "import { Box, Text } from \"ink\";\n\nimport { useTheme } from \"@/hooks/use-theme\";\nimport { useUnicode } from \"@/hooks/use-unicode\";\nimport { resolveBorderStyle } from \"@/lib/terminal-style\";\n\nexport interface DividerProps {\n  variant?: \"single\" | \"double\" | \"bold\";\n  orientation?: \"horizontal\" | \"vertical\";\n  color?: string;\n  label?: string;\n  labelColor?: string;\n  dividerChar?: string;\n  titlePadding?: number;\n  padding?: number;\n  height?: number;\n  width?: number | \"auto\";\n  \"aria-label\"?: string;\n  \"aria-hidden\"?: boolean;\n}\n\nconst DIVIDER_CHARS: Record<NonNullable<DividerProps[\"variant\"]>, string> = {\n  bold: \"┃\",\n  double: \"║\",\n  single: \"│\",\n};\n\nexport const Divider = ({\n  variant = \"single\",\n  orientation = \"horizontal\",\n  color,\n  label,\n  labelColor,\n  dividerChar,\n  titlePadding = 1,\n  padding = 0,\n  height = 1,\n  width = \"auto\",\n  \"aria-label\": ariaLabel,\n  \"aria-hidden\": ariaHidden = !label,\n}: DividerProps) => {\n  const unicode = useUnicode();\n  const theme = useTheme();\n  const resolvedColor = color ?? theme.colors.border;\n  const vChar = dividerChar ?? (unicode ? DIVIDER_CHARS[variant] : \"|\");\n\n  if (orientation === \"vertical\") {\n    const lines = Array.from({ length: height }, (_, i) => i);\n    return (\n      <Box\n        flexDirection=\"column\"\n        aria-label={ariaHidden ? undefined : (ariaLabel ?? label)}\n        aria-hidden={ariaHidden}\n      >\n        {lines.map((i) => (\n          <Text key={i} color={resolvedColor}>\n            {vChar}\n          </Text>\n        ))}\n      </Box>\n    );\n  }\n\n  const paddingStr = \" \".repeat(padding);\n  const titlePad = \" \".repeat(titlePadding);\n\n  if (label) {\n    const resolvedLabelColor = labelColor ?? resolvedColor;\n    return (\n      <Box\n        flexDirection=\"row\"\n        width={width === \"auto\" ? undefined : width}\n        aria-label={ariaHidden ? undefined : (ariaLabel ?? label)}\n        aria-hidden={ariaHidden}\n      >\n        {padding > 0 && <Text>{paddingStr}</Text>}\n        <Box\n          flexGrow={1}\n          borderStyle={resolveBorderStyle(\"single\", unicode)}\n          borderColor={resolvedColor}\n          borderBottom={false}\n          borderLeft={false}\n          borderRight={false}\n          borderTop\n        />\n        <Text color={resolvedLabelColor}>\n          {titlePad}\n          {label}\n          {titlePad}\n        </Text>\n        <Box\n          flexGrow={1}\n          borderStyle={resolveBorderStyle(\"single\", unicode)}\n          borderColor={resolvedColor}\n          borderBottom={false}\n          borderLeft={false}\n          borderRight={false}\n          borderTop\n        />\n        {padding > 0 && <Text>{paddingStr}</Text>}\n      </Box>\n    );\n  }\n\n  return (\n    <Box\n      flexDirection=\"row\"\n      width={width === \"auto\" ? undefined : width}\n      aria-label={ariaHidden ? undefined : ariaLabel}\n      aria-hidden={ariaHidden}\n    >\n      {padding > 0 && <Text>{paddingStr}</Text>}\n      <Box\n        flexGrow={1}\n        borderStyle={resolveBorderStyle(\"single\", unicode)}\n        borderColor={resolvedColor}\n        borderBottom={false}\n        borderLeft={false}\n        borderRight={false}\n        borderTop\n      />\n      {padding > 0 && <Text>{paddingStr}</Text>}\n    </Box>\n  );\n};\n",
      "type": "registry:ui"
    }
  ],
  "categories": [
    "layout"
  ],
  "type": "registry:ui"
}