{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "ink/bullet-list",
  "title": "Bullet List",
  "description": "Nested structured content with ●/└/□ bullet prefixes",
  "dependencies": [
    "ink"
  ],
  "registryDependencies": [
    "https://termcn.dev/r/ink/terminal-symbols.json",
    "https://termcn.dev/r/ink/use-theme.json",
    "https://termcn.dev/r/ink/use-unicode.json"
  ],
  "files": [
    {
      "path": "registry/ui/bullet-list.tsx",
      "content": "import { Box, Text } from \"ink\";\nimport type { ReactNode } from \"react\";\n\nimport { useTheme } from \"@/hooks/use-theme\";\nimport { useUnicode } from \"@/hooks/use-unicode\";\nimport { resolveTerminalSymbol } from \"@/lib/terminal-symbols\";\n\nexport interface BulletListItemProps {\n  label: string;\n  bold?: boolean;\n  color?: string;\n  children?: ReactNode;\n}\n\nexport interface BulletListTreeItemProps {\n  label: string;\n  color?: string;\n}\n\nexport interface BulletListCheckItemProps {\n  label: string;\n  done?: boolean;\n  color?: string;\n}\n\nconst BulletListRoot = ({ children }: { children: ReactNode }) => (\n  <Box flexDirection=\"column\" aria-role=\"list\">\n    {children}\n  </Box>\n);\n\nconst BulletListItem = ({\n  label,\n  bold: boldText = false,\n  color,\n  children,\n}: BulletListItemProps) => {\n  const theme = useTheme();\n  const unicode = useUnicode();\n  return (\n    <Box flexDirection=\"column\" aria-role=\"listitem\">\n      <Text aria-label={label}>{\"\"}</Text>\n      <Box flexDirection=\"row\">\n        <Text aria-hidden color={color ?? theme.colors.primary}>\n          {resolveTerminalSymbol(unicode, \"● \", \"* \")}\n        </Text>\n        <Text bold={boldText} color={color}>\n          {label}\n        </Text>\n      </Box>\n      {children}\n    </Box>\n  );\n};\n\nconst BulletListSub = ({ children }: { children: ReactNode }) => (\n  <Box flexDirection=\"column\" paddingLeft={2}>\n    {children}\n  </Box>\n);\n\nconst BulletListTreeItem = ({ label, color }: BulletListTreeItemProps) => {\n  const theme = useTheme();\n  const unicode = useUnicode();\n  return (\n    <Box flexDirection=\"row\" aria-role=\"listitem\" aria-label={label}>\n      <Text aria-hidden color={theme.colors.mutedForeground}>\n        {resolveTerminalSymbol(unicode, \"└ \", \"`- \")}\n      </Text>\n      <Text color={color}>{label}</Text>\n    </Box>\n  );\n};\n\nconst BulletListCheckItem = ({\n  label,\n  done = false,\n  color,\n}: BulletListCheckItemProps) => {\n  const theme = useTheme();\n  const unicode = useUnicode();\n  const icon = done\n    ? resolveTerminalSymbol(unicode, \"■\", \"[x]\")\n    : resolveTerminalSymbol(unicode, \"□\", \"[ ]\");\n  const resolvedColor =\n    color ?? (done ? theme.colors.success : theme.colors.mutedForeground);\n  return (\n    <Box\n      flexDirection=\"row\"\n      aria-role=\"listitem\"\n      aria-label={`${label}, ${done ? \"completed\" : \"not completed\"}`}\n      aria-state={{ checked: done }}\n    >\n      <Text aria-hidden color={resolvedColor}>{`${icon} `}</Text>\n      <Text color={done ? undefined : color}>{label}</Text>\n    </Box>\n  );\n};\n\nexport const BulletList = Object.assign(BulletListRoot, {\n  CheckItem: BulletListCheckItem,\n  Item: BulletListItem,\n  Sub: BulletListSub,\n  TreeItem: BulletListTreeItem,\n});\n",
      "type": "registry:ui"
    }
  ],
  "categories": [
    "templates"
  ],
  "type": "registry:ui"
}