Switch

PreviousNext

Windows 95 styled switch component

Docs
97cnui

Preview

Loading preview…
components/97cn/switch.tsx
"use client"

import * as React from "react"
import * as SwitchPrimitives from "@radix-ui/react-switch"
import { cn } from "@/lib/utils"

const Switch = React.forwardRef<
  React.ElementRef<typeof SwitchPrimitives.Root>,
  React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>
>(({ className, ...props }, ref) => (
  <SwitchPrimitives.Root
    className={cn(
      "peer inline-flex h-6 w-11 shrink-0 cursor-pointer items-center rounded-full",
      "win95-sunken bg-win95-button-face transition-colors",
      "focus-visible:outline-none focus:outline-1 focus:outline-dotted focus:outline-win95-black focus:outline-offset-[-2px]",
      "disabled:cursor-not-allowed disabled:opacity-50",
      "data-[state=checked]:bg-win95-highlight",
      className,
    )}
    {...props}
    ref={ref}
  >
    <SwitchPrimitives.Thumb
      className={cn(
        "pointer-events-none block h-5 w-5 rounded-full bg-win95-white shadow-lg ring-0 transition-transform",
        "win95-raised border border-win95-dark-gray",
        "data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0",
      )}
    />
  </SwitchPrimitives.Root>
))
Switch.displayName = SwitchPrimitives.Root.displayName

export { Switch }

Installation

npx shadcn@latest add @97cn/switch

Usage

import { Switch } from "@/components/ui/switch"
<Switch />