Back to list
TheOrcDev

shadcn-ui-conventions

by TheOrcDev

A set of retro-designed, accessible components and a code distribution platform. Open Source. Open Code.

1,530🍴 94📅 Jan 22, 2026

Use Cases

📝

Documentation Generation

Auto-generate documentation from code.

✍️

Content Creation Support

Assist in creating blog posts and marketing content.

🎨

UI Component Generation

Generate UI components from designs.

SKILL.md


name: shadcn-ui-conventions description: UI component conventions for 8-bit styled components. Use when working with shadcn/ui components or implementing retro-styled UI elements.

UI Component Conventions

The components/ui directory uses different conventions from the rest of the project. It's excluded from Biome/Ultracite linting to preserve shadcn/ui patterns.

When to use this skill

  • When creating new UI components
  • When modifying existing shadcn/ui components
  • When implementing 8-bit retro styling
  • When working with component imports and types

Linting

  • Biome excludes this directory: biome.jsonc has "!components/ui" in the includes
  • No Ultracite formatting: Components use their own patterns
  • Run lint manually when needed: npx biome check components/ui/

Import Patterns

Base components (e.g., button.tsx):

import type * as React from "react";

import { Slot } from "@radix-ui/react-slot";
import { type VariantProps, cva } from "class-variance-authority";

import { cn } from "@/lib/utils";

8bit components (e.g., 8bit/button.tsx):

import { type VariantProps, cva } from "class-variance-authority";

import { cn } from "@/lib/utils";

import { Button as ShadcnButton } from "@/components/ui/button";

import "@/components/ui/8bit/styles/retro.css";

Import order:

  1. External libraries (class-variance-authority, @radix-ui)
  2. Internal utils (@/lib/utils)
  3. Base component alias (@/components/ui/component)
  4. Retro stylesheet (@/components/ui/8bit/styles/retro.css)

Type Definitions

Base components: Inline props type with function

function Button({
  className,
  variant,
  ...props
}: React.ComponentProps<"button"> &
  VariantProps<typeof buttonVariants> & {
    asChild?: boolean;
  })

8bit components: Export interface separately

export interface BitButtonProps
  extends React.ButtonHTMLAttributes<HTMLButtonElement>,
    VariantProps<typeof buttonVariants> {
  asChild?: boolean;
  ref?: React.Ref<HTMLButtonElement>;
}

function Button({ children, asChild, ...props }: BitButtonProps)

Ref Handling

Base components: Use React.forwardRef

const DialogOverlay = React.forwardRef<
  React.ComponentRef<typeof DialogPrimitive.Overlay>,
  React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
>(({ className, ...props }, ref) => (
  <DialogPrimitive.Overlay ref={ref} {...props} />
));
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;

8bit components: Use ref prop (React 19 pattern)

export interface BitButtonProps
  extends React.ButtonHTMLAttributes<HTMLButtonElement> {
  ref?: React.Ref<HTMLButtonElement>;
}

function Button({ ref, ...props }: BitButtonProps) {
  return <ShadcnButton ref={ref} {...props} />
}

8bit Component Patterns

Retro CSS import: Required for all 8bit components

import "@/components/ui/8bit/styles/retro.css";

Base component alias: Import base component with alias

import { Button as ShadcnButton } from "@/components/ui/button";

Variant overrides: 8bit variants often have minimal styles (borders/colors handled by CSS)

export const buttonVariants = cva("", {
  variants: {
    variant: {
      default: "bg-foreground",
      // ...
    },
  },
});

Reference Files

  • components/ui/button.tsx - Base component example
  • components/ui/8bit/button.tsx - 8bit wrapper example
  • components/ui/dialog.tsx - Complex base component with Radix primitives

Score

Total Score

95/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 1000以上

+15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

+5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon