Agent skill

Beam Glow States

by boraoztunc in boraoztunc/skills

Create React loading, processing, selected, current, focus, and pressed states with the border-beam package's animated edge glow.

Apache-2.0Auto-check passedFrontend & Design

Install Beam Glow States

skills CLI
$ npx skills add boraoztunc/skills --skill beam-glow-states -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install boraoztunc/skills beam-glow-states --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/boraoztunc/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/beam-glow-states .claude/skills/beam-glow-states && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
beam-glow-states
GitHub stars
398
Used in
2 other repos
Token cost
~3.2k tokens
SKILL.md length
1,176 words
Files
2
Skills in repo
52
Repo updated
First seen
Licence
Apache-2.0

At a glance

Create React loading, processing, selected, current, focus, and pressed states with the border-beam package's animated edge glow.

  • Agent surface needs a restrained traveling
  • SKILL.md covers Install and import, Choose the effect, Start with one mounted wrapper and Wire loading state, plus 7 more sections
  • Calls npm, pnpm and yarn
  • Includes installation

What it does

Beam Glow States is an agent skill from boraoztunc/skills. Create React loading, processing, selected, current, focus, and pressed states with the border-beam package's animated edge glow. Use when a card, button, input, tab, option, task panel, or agent surface needs a restrained traveling or breathing beam; includes installation, imports, prop selection, state wiring, reduced motion, accessibility, and performance and layout guardrails.

Its SKILL.md is about 3.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `REFERENCES.md`).

It sits in Frontend & Design. It works with React. The repository describes itself as: Claude Code skills for copywriting, SEO, design, and more. The licence is Apache-2.0.

When your agent uses it

  • Agent surface needs a restrained traveling
  • Includes installation
  • Performance and layout guardrails

Example prompts

  • “/beam-glow-states”

Requirements

  • Node.js

What it can do on your machine

Read from SKILL.md and the folder at commit 645553c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • pnpm
    • yarn
    • bun

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, pnpm and yarn, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Beam Glow States loads about 3.2k tokens when it runs. Until then it costs about 100 tokens; SKILL.md has 1,176 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~100
When it runs · the whole SKILL.md, loaded when a task matches
~3.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from boraoztunc/skills at commit 645553c, republished under its Apache-2.0 licence (© boraoztunc). 1,176 words, ~3,184 tokens.

Download SKILL.mdSave it as .claude/skills/beam-glow-states/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
beam-glow-states
description
Create React loading, processing, selected, current, focus, and pressed states with the border-beam package's animated edge glow. Use when a card, button, input, tab, option, task panel, or agent surface needs a restrained traveling or breathing beam; includes installation, imports, prop selection, state wiring, reduced motion, accessibility, and performance and layout guardrails.

Beam Glow States

Use the beam as a decorative state accent. Keep the state understandable through text, shape, contrast, and the correct semantic attribute when the animation is absent.

The API below was verified against border-beam 1.3.0. Recheck the official README and exported types when the installed version changes.

Install and import

Install the same package with the repository's package manager:

bash
npm install border-beam
pnpm add border-beam
yarn add border-beam
bun add border-beam

The package requires React and React DOM 18 or newer. It ships ESM, CommonJS, and TypeScript declarations. It injects component-scoped styles, so do not import a separate CSS file.

Prefer the named import:

tsx
import { BorderBeam } from "border-beam";
import type {
  BorderBeamProps,
  BorderBeamSize,
  BorderBeamTheme,
  BorderBeamColorVariant,
} from "border-beam";

The default component export is also supported:

tsx
import BorderBeam from "border-beam";

In a Next.js App Router project, render it from a client component because it uses React state, effects, observers, and animation frames:

tsx
"use client";

import { BorderBeam } from "border-beam";

Choose the effect

sizeMotionBest use
smCompact traveling borderIcon buttons, pills, compact controls
mdFull traveling borderSelected cards, current panels, primary active surfaces
lineTraveling bottom edgeSearch, prompt, input, progress, or command surfaces
pulse-innerContained breathing glowLoading cards, processing panels, persistent selected states
pulse-outsideOutward breathing haloOne prominent active task or hero control with room to bloom

Use these defaults by state:

  • Loading or processing: pulse-inner, strength={0.55} to 0.75, duration={2.3} to 3.
  • Selected or current: md or pulse-inner, strength={0.3} to 0.55, duration={3.2} to 5.
  • Focus or short active feedback: sm or line, strength={0.35} to 0.6.
  • High-priority live task: pulse-outside, strength={0.45} to 0.7; allow only one in a view.

Start with colorVariant="mono" for neutral product UI, ocean for cool technical states, sunset for warm urgency, and colorful for a rare high-salience moment.

Start with one mounted wrapper

Keep BorderBeam mounted and toggle active. Removing it when state becomes false skips the built-in fade-out.

tsx
<BorderBeam
  size="pulse-inner"
  colorVariant="ocean"
  theme="dark"
  strength={0.65}
  active={isWorking}
>
  <section className="task-card" aria-busy={isWorking}>
    <p>{isWorking ? "Generating layout options…" : "Layout options ready"}</p>
  </section>
</BorderBeam>

active fades in over 0.6s and fades out over 0.5s. Use onActivate and onDeactivate only when work must align with the completed visual transition.

Wire loading state

Make the loading state truthful before adding the beam:

tsx
<BorderBeam
  size="pulse-inner"
  colorVariant="ocean"
  strength={0.65}
  active={pending && !reduceMotion}
  onDeactivate={() => {
    // Optional: advance only after the 0.5s beam exit completes.
  }}
>
  <section className="beam-surface" aria-busy={pending}>
    <span className="status-dot" aria-hidden="true" />
    <span>{pending ? "Building preview…" : "Preview ready"}</span>
  </section>
</BorderBeam>
  • Show a visible status label or progress value; never make the moving edge the only loading cue.
  • Avoid showing the beam for operations that finish in roughly 150ms or less.
  • Once shown, keep the loading presentation visible for about 400ms to 600ms to prevent a flash.
  • Preserve layout between pending and complete states.
  • Keep cancellation, retry, and error controls usable. The effect layers already use pointer-events: none.

Use line when the work belongs to one input or prompt bar. Use pulse-inner when the whole card is busy.

Wire selected or current state

Use the component state and the semantic state together:

tsx
<BorderBeam
  size="md"
  colorVariant="mono"
  staticColors
  duration={4.2}
  strength={0.42}
  active={selected && !reduceMotion}
  className="beam-card"
>
  <button
    type="button"
    className="beam-surface"
    aria-pressed={selected}
    onClick={onSelect}
  >
    {label}
  </button>
</BorderBeam>
  • Use aria-selected for tabs, listbox options, grid cells, and similar selection widgets.
  • Use aria-current for the current page, step, date, or location.
  • Use aria-pressed only for toggle buttons.
  • Keep a static selected background or outline. The beam should add attention, not carry meaning by itself.
  • Slow persistent selected beams down. Reserve the faster default travel for loading or brief activation.

For a large collection, animate only the newly selected item for 800ms to 1200ms, then retain the static selected style. Do not run a beam on every selected item indefinitely.

Wire focus and active state

Track focus on the wrapper because all standard HTMLDivElement attributes and capture handlers are forwarded:

tsx
const [focused, setFocused] = useState(false);

<BorderBeam
  size="sm"
  colorVariant="mono"
  strength={0.45}
  active={focused && !reduceMotion}
  className="beam-inline"
  onFocusCapture={() => setFocused(true)}
  onBlurCapture={(event) => {
    const next = event.relatedTarget as Node | null;
    if (!next || !event.currentTarget.contains(next)) setFocused(false);
  }}
>
  <button className="beam-surface">Run</button>
</BorderBeam>

Keep the ordinary :focus-visible outline. Pointer hover alone should not start a high-intensity beam, and a pressed state should still have immediate scale, fill, or contrast feedback.

When states overlap, resolve them explicitly:

tsx
const beamState =
  pending ? "loading" :
  selected ? "selected" :
  focused ? "focus" :
  "idle";

const beamProps = {
  loading: {
    size: "pulse-inner",
    colorVariant: "ocean",
    duration: 2.6,
    strength: 0.65,
  },
  selected: {
    size: "md",
    colorVariant: "mono",
    duration: 4.2,
    strength: 0.42,
    staticColors: true,
  },
  focus: {
    size: "sm",
    colorVariant: "mono",
    duration: 2.4,
    strength: 0.45,
    staticColors: true,
  },
} as const;

const activeProps = beamState === "idle" ? null : beamProps[beamState];

<BorderBeam
  {...(activeProps ?? { size: "md" as const })}
  active={activeProps !== null && !reduceMotion}
>
  <div className="beam-surface" data-state={beamState}>
    {children}
  </div>
</BorderBeam>

Use loading above selection, selection above focus, and focus above hover unless the product's state model says otherwise.

Handle reduced motion

Pulse presets stop their animations under prefers-reduced-motion: reduce. Rotate and line presets should also be disabled by the consumer. Use the project's media-query hook or a small client hook:

tsx
function useReducedMotion() {
  const [reduced, setReduced] = useState(false);

  useEffect(() => {
    const media = window.matchMedia("(prefers-reduced-motion: reduce)");
    const update = () => setReduced(media.matches);
    update();
    media.addEventListener("change", update);
    return () => media.removeEventListener("change", update);
  }, []);

  return reduced;
}

Provide a static fallback on the child surface:

css
.beam-surface {
  border: 1px solid rgb(255 255 255 / 0.12);
}

[data-state="selected"] {
  border-color: rgb(140 155 255 / 0.7);
  box-shadow: 0 0 0 3px rgb(100 120 255 / 0.12);
}

:focus-visible {
  outline: 2px solid currentColor;
  outline-offset: 3px;
}

@media (prefers-reduced-motion: reduce) {
  [data-state="loading"] {
    border-color: rgb(100 150 255 / 0.68);
  }
}
Show full SKILL.md (556 more words)Show less

API reference

PropTypeDefaultContract
childrenReactNodeRequiredContent wrapped by one generated div
size"sm" | "md" | "line" | "pulse-outside" | "pulse-inner""md"Effect family and geometry preset
colorVariant"colorful" | "mono" | "ocean" | "sunset""colorful"Beam palette
theme"dark" | "light" | "auto""dark"Adapts opacity and color treatment to the background
strengthnumber1Beam-layer opacity; clamped to 0–1; never changes child opacity
durationnumber1.96 rotate, 2.4 line, 2.3 pulseAnimation cycle in seconds
activebooleantrueStarts fade-in or fade-out and controls ongoing motion
borderRadiusnumberAuto-detectedWrapper radius in pixels
brightnessnumberPer preset, usually 1.3Glow brightness multiplier
saturationnumberPer theme, usually 1.2 on darkGlow saturation multiplier
hueRangenumber30Hue-shift range in degrees; line is capped at 13
staticColorsbooleanfalseDisables hue shifting, not travel or pulse motion
classNamestring—Class on the generated wrapper
styleCSSProperties—Inline style on the generated wrapper
onActivate() => void—Fires when the 0.6s fade-in completes
onDeactivate() => void—Fires when the 0.5s fade-out completes

mono always uses static colors, even when staticColors is false. A forwarded ref points to the wrapper. Other standard HTMLDivElement attributes and events are forwarded.

The package also exports sizePresets, sizeThemePresets, and the deprecated themeColors. Treat them as implementation reference; prefer component props instead of mutating exported preset objects.

Respect the wrapper

  • BorderBeam renders a div. Place it inside required semantic parents such as li, td, or label; do not let it replace those elements.
  • The wrapper is block-level by default. Use display: inline-block or inline-flex for compact controls and width: 100% for cards.
  • Keep the first child aligned to the wrapper bounds. A small child inside a stretched wrapper produces a beam around empty space.
  • Border radius is read from the first child's computed top-left radius. Set borderRadius explicitly when corners differ, radius changes at runtime, or late styles make detection unreliable.
  • sm, md, line, and pulse-inner clip overflow. Do not place menus or tooltips inside those wrappers if they must escape.
  • pulse-outside uses overflow: visible. Its child must be opaque so the inner glow does not show through, and the surrounding layout must allow the halo to spill.
  • Give pulse-outside children their own subtle 1px border or inset ring. That preset intentionally does not paint a separate idle hairline.
css
.beam-inline {
  display: inline-block;
}

.beam-card {
  display: block;
  width: 100%;
}

.beam-surface {
  width: 100%;
  border-radius: inherit;
  background: rgb(18 18 20);
}

Keep it restrained

  • Use one dominant animated beam per viewport. Several simultaneous beams flatten hierarchy and increase paint work.
  • Prefer strength before changing brightness or saturation.
  • Keep selection beams slower and quieter than loading beams.
  • Do not combine a full beam with another animated gradient border, large pulsing shadow, and moving background.
  • Let pulse-outside breathe into real empty space; never crop it accidentally.
  • Expect pulse instances to share a frame-rate-capped animation loop and pause offscreen. Rotate and line use CSS animation and also pause when the component is offscreen.

Verify

Test:

  • Initial inactive, fade-in, steady active, fade-out, and rapid state reversal.
  • Loading success, error, retry, and cancellation without abrupt unmounting.
  • Correct aria-busy, aria-selected, aria-current, or aria-pressed semantics.
  • Keyboard focus with the beam disabled and with reduced motion enabled.
  • Dark, light, and auto themes against the actual surface.
  • sm, md, line, pulse-inner, and pulse-outside at 320, 768, and 1440 widths.
  • Border-radius alignment, parent overflow, opaque outside-pulse children, and compact wrapper sizing.
  • Long labels, 200% zoom, many list items, offscreen pausing, route cleanup, and console errors.

Keep REFERENCES.md as the links-only source list.

© boraoztunc, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in beam-glow-states of boraoztunc/skills.

  • SKILL.md
  • REFERENCES.md

Open the folder on GitHubat commit 645553c

Used in 2 other repositories

We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 2 other GitHub owners. This page covers the copy in boraoztunc/skills, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Beam Glow States next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Beam Glow States compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Beam Glow States this skillboraoztunc/skills3982 repos~3.2kAutomated safety check: PassApache-2.0
Reduce Bundle Sizekcsujeet/ilamy-calendar351—~2.9kAutomated safety check: PassMIT
Slabstencil-hq/slab114—~3.1kAutomated safety check: PassMIT
Dx Insight Usage Guardrailcultureamp/kaizen-design-system176—~1.3kAutomated safety check: PassMIT
Frontend Large Feature Architecturelangfuse/langfuse36k—~1.4kAutomated safety check: PassCustom licence
Performanceyonatangross/orchestkit292—~3.5kAutomated safety check: PassMIT

Similar skills

  • Reduce Bundle Size

    kcsujeet/ilamy-calendar

    Systematically reduce the shipped bundle size of a JS/TS library without sacrificing code readability or breaking consumer APIs.

    351 GitHub stars~2.9k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Slab

    stencil-hq/slab

    Writing, editing, and rendering Slab documents (.slab) — the declarative design language for app screens, posters, terminal UIs, and interactive components.

    114 GitHub stars~3.1k tokensUpdated 1 mo ago
    Frontend & DesignAuto-check passed
  • Dx Insight Usage Guardrail

    cultureamp/kaizen-design-system

    Checks deps update in widely consumed repos will cause problems or not, and ranks dependency updates by downstream impact for prioritisation.

    176 GitHub stars~1.3k tokensUpdated 5 days ago
    Frontend & DesignAuto-check passed
  • Architect large or state-heavy Langfuse frontend features. An agent skill from langfuse/langfuse.

    36k GitHub stars~1.4k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Performance

    yonatangross/orchestkit

    Performance optimization patterns covering Core Web Vitals, React render optimization, lazy loading, image optimization, backend profiling, LLM inference, and sustainability UX.

    292 GitHub stars~3.5k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Web Artifacts Builder

    anthropics/skills

    Official

    Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.

    180k GitHub starsUsed in 40 repos~769 tokens
    Frontend & DesignAuto-check passed

More from boraoztunc/skills

All 52 skills in this repo
  • Gsap

    boraoztunc/skills

    GSAP animation reference for HyperFrames. An agent skill from boraoztunc/skills.

    398 GitHub starsUsed in 5 repos~1.9k tokens
    Auto-check passed
  • Hyperframes

    boraoztunc/skills

    Create video compositions, animations, title cards, overlays, captions, voiceovers, audio-reactive visuals, and scene transitions in HyperFrames HTML.

    398 GitHub starsUsed in 9 repos~7.6k tokens
    Auto-check passed
  • Remotion To Hyperframes

    boraoztunc/skills

    Translate an existing Remotion (React-based) video composition into a HyperFrames HTML composition.

    398 GitHub stars~2.2k tokensUpdated 1 mo ago
    Auto-check passed
  • Animejs

    boraoztunc/skills

    Anime.js adapter patterns for HyperFrames. An agent skill from boraoztunc/skills.

    398 GitHub starsUsed in 2 repos~828 tokens
    Auto-check passed
  • Minimal Zine Poster

    boraoztunc/skills

    Compile a theme, sentence, object, mood, article idea, or photo into a quiet Japanese/Korean zine-style editorial poster — tall aged paper, large negative space, one small image anchor, experimental…

    398 GitHub stars~2.5k tokensUpdated 1 mo ago
    Auto-check passed
  • Beautiful Shadows

    boraoztunc/skills

    Apply exact Tailwind arbitrary shadow utilities for polished, layered neutral elevation.

    398 GitHub starsUsed in 2 repos~635 tokens
    Auto-check passed

Works with

Questions about Beam Glow States

What does Beam Glow States do?

Create React loading, processing, selected, current, focus, and pressed states with the border-beam package's animated edge glow. Beam Glow States is an agent skill from boraoztunc/skills. Create React loading, processing, selected, current, focus, and pressed states with the border-beam package's animated edge glow.

When should I use Beam Glow States?

Beam Glow States fits situations like: agent surface needs a restrained traveling; includes installation; performance and layout guardrails.

How do I install Beam Glow States in Claude Code?

Run `npx skills add boraoztunc/skills --skill beam-glow-states -a claude-code`. Or copy the skill folder (beam-glow-states in boraoztunc/skills) into .claude/skills/beam-glow-states in your project. Claude Code loads it when a task matches its description.

How do I install Beam Glow States in Codex?

Run `npx skills add boraoztunc/skills --skill beam-glow-states -a codex`. Or copy the skill folder (beam-glow-states in boraoztunc/skills) into .agents/skills/beam-glow-states in your project. Codex loads it when a task matches its description.

Can I use Beam Glow States in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add boraoztunc/skills --skill beam-glow-states -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/beam-glow-states, .gemini/skills/beam-glow-states, .github/skills/beam-glow-states and .opencode/skills/beam-glow-states in your project.

What does Beam Glow States need to run?

Going by SKILL.md and its folder, Beam Glow States needs the command-line tools its instructions call (npm, pnpm, yarn and bun). Our summary lists: Node.js.

Does Beam Glow States access the network?

SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Beam Glow States safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Beam Glow States use?

Beam Glow States is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Beam Glow States use?

About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Beam Glow States?

Skills that share tags, products or a category with Beam Glow States: Reduce Bundle Size (kcsujeet/ilamy-calendar, 351 stars), Slab (stencil-hq/slab, 114 stars), Dx Insight Usage Guardrail (cultureamp/kaizen-design-system, 176 stars) and Frontend Large Feature Architecture (langfuse/langfuse, 36k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Beam Glow States?

boraoztunc (a GitHub user) maintains it in boraoztunc/skills, which has 398 GitHub stars. The repository holds 52 skills in this directory. The repository was last updated on August 15, 2026.

Source: boraoztunc/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.