VibeUI
ComponentsDocs
VibeUI

Components with taste, that you own. Copy the source, retint the tokens, keep every line.

Library

  • All components
  • Signature pieces
  • Text effects
  • Footers

Docs

  • Introduction
  • Installation
  • Theming
  • CLI

Project

  • GitHub
  • Agents and MCP
  • Issues
  • MIT license
© 2026 VibeUI · MIT licensed
  1. Components
  2. Signature
  3. Arrow Fill Button

Arrow Fill Button

Outlined button that floods with ink on hover while the arrow slides.

SignatureClient component

Install

bash
npx @agents-npm-packages/vibeui add arrow-fill-button --dir ./src/components/ui

Import

tsx
import { ArrowFillButton } from "@/components/ui/arrow-fill-button"

API

Generated from the component's TypeScript types, so it always matches the source. * marks a required prop.

<ArrowFillButton>

also accepts every ButtonHTMLAttributes<HTMLButtonElement> attribute

No props of its own: it forwards native attributes to the element.

Source

src/components/ui/arrow-fill-button.tsx
"use client";

import { ArrowRight } from "@phosphor-icons/react";
import { cn } from "@/lib/utils";

/** Outlined button that floods with ink on hover while the arrow slides. */
export function ArrowFillButton({
  children,
  className,
  ...props
}: React.ButtonHTMLAttributes<HTMLButtonElement>) {
  return (
    <button
      type="button"
      className={cn(
        "group relative inline-flex h-12 items-center gap-3 overflow-hidden rounded-md border border-ink px-6 text-[15px] font-medium text-ink transition-colors duration-300 active:scale-[0.98]",
        className,
      )}
      {...props}
    >
      <span
        aria-hidden
        className="absolute inset-0 origin-left scale-x-0 bg-ink transition-transform duration-500 ease-out group-hover:scale-x-100"
      />
      <span className="relative z-10 transition-colors duration-300 group-hover:text-surface">
        {children}
      </span>
      <span className="relative z-10 flex size-5 items-center justify-center overflow-hidden text-current transition-colors duration-300 group-hover:text-surface">
        <ArrowRight
          size={16}
          weight="bold"
          className="transition-transform duration-500 ease-out group-hover:translate-x-[150%]"
        />
        <ArrowRight
          size={16}
          weight="bold"
          className="absolute -translate-x-[150%] transition-transform duration-500 ease-out group-hover:translate-x-0"
        />
      </span>
    </button>
  );
}

Exports ArrowFillButton. Peer dependencies: clsx, tailwind-merge, @phosphor-icons/react.

PreviousAI OrbNextAura Border