awa-ui 0.5.2

Web UI and JSON API for the Awa job queue
Documentation
import { twMerge } from "tailwind-merge"

export interface DividerPatternProps extends React.ComponentProps<"div"> {
  direction?: "left" | "right"
  mask?:
    | "top"
    | "top-right"
    | "right"
    | "bottom-right"
    | "bottom"
    | "bottom-left"
    | "left"
    | "top-left"
    | "y"
    | "-y"
    | "center"
    | "-center"
    | "none"
}

const angleMap = {
  left: "-315deg",
  right: "315deg",
}

const maskMap: Record<Exclude<DividerPatternProps["mask"], undefined>, string> = {
  top: "mask-[radial-gradient(100%_100%_at_top,white,transparent)]",
  "top-right": "mask-[radial-gradient(100%_100%_at_top_right,white,transparent)]",
  right: "mask-[radial-gradient(100%_100%_at_right,white,transparent)]",
  "bottom-right": "mask-[radial-gradient(100%_100%_at_bottom_right,white,transparent)]",
  bottom: "mask-[radial-gradient(100%_100%_at_bottom,white,transparent)]",
  "bottom-left": "mask-[radial-gradient(100%_100%_at_bottom_left,white,transparent)]",
  left: "mask-[radial-gradient(100%_100%_at_left,white,transparent)]",
  "top-left": "mask-[radial-gradient(100%_100%_at_top_left,white,transparent)]",
  y: "mask-[linear-gradient(to_bottom,white_0,transparent_22%,transparent_78%,white_100%)]",
  "-y": "mask-[linear-gradient(to_bottom,transparent_0,white_22%,white_78%,transparent_100%)]",
  center: "mask-[radial-gradient(120%_120%_at_50%_50%,transparent_0_35%,white_70%)]",
  "-center": "mask-[radial-gradient(120%_120%_at_50%_50%,transparent_0_35%,white_70%)]",
  none: "",
}

export function DividerPattern({
  className,
  direction = "right",
  mask = "none",
  style,
  ...props
}: DividerPatternProps) {
  const angle = angleMap[direction]

  return (
    <div
      className={twMerge(
        "absolute inset-0 -z-10 border-[--pattern-fg] bg-size-[10px_10px] bg-fixed [--pattern-fg:var(--color-border)]",
        maskMap[mask],
        className,
      )}
      style={{
        backgroundImage: `repeating-linear-gradient(${angle}, var(--pattern-fg) 0, var(--pattern-fg) 1px, transparent 0, transparent 50%)`,
        ...style,
      }}
      {...props}
    />
  )
}