Channel strip

Edits channel gain, pan, mute, and solo with native sliders and 44px toggle actions wired to caller-owned state.

Dialogue

Shape one channel

Dialogue mix

Interview

Controls update the local channel state in this example.

Use it for

  • A host channel whose gain, pan, mute, and solo states belong together.
  • value/defaultValue/onValueChange for controlled or local editing; connect changes to your audio host.
  • Pan from -100 percent left through zero center to 100 percent right; gain uses decibels.

Not for

  • Assuming UI changes process audio without a connected host.
  • Using solo as a global mixing policy; the application coordinates other channels.

Three ways in. They share one source, so the pixels match whichever you pick.

1. Import the package

npm install @noorddev/vlak-react

// once, next to your app's root
import "@noorddev/vlak-react/css";

import { ChannelStrip } from "@noorddev/vlak-react";

Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/channel-strip.

2. Vendor the source

npx @noorddev/vlak-cli add channel-strip

The StyleX leaf lands in components/vlak/ with its dependencies, for your own compiler to own. See StyleX.

3. Through shadcn

npx shadcn add https://vlak.dev/r/channel-strip.json

The same registry item, installed by shadcn's CLI.

CSS only

<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />

No React. Link vlak.css and use the markup and classes below.

import { ChannelStrip } from "@noorddev/vlak-react";

<ChannelStrip label="Dialogue" name="dialogue" defaultValue={{ gain: -3, pan: 0, muted: false, solo: false }} />

ChannelStrip

Gain, pan, mute and solo state for an application-owned audio channel.

PropTypeDefaultDescription
labelrequiredReactNode
valueChannelStripValue
defaultValueChannelStripValueinitial
onValueChange(value: ChannelStripValue) => void
gainMinnumber-60
gainMaxnumber12
readOnlyboolean

Also accepts Omit<FieldsetHTMLAttributes<HTMLFieldSetElement>, "onChange" | "defaultValue">.

KeysDoes
TabMoves through enabled gain, pan, mute, and solo controls.
Arrow keys, Home, EndUses native slider stepping and bounds.
Enter, SpaceToggles the focused mute or solo action.
<fieldset class="rs-channel-strip"><legend class="rs-channel-strip-label">Dialogue</legend><label class="rs-channel-strip-field">Gain<input class="rs-channel-strip-range" type="range" min="-60" max="12" step="any" value="0" /></label><label class="rs-channel-strip-field">Pan<input class="rs-channel-strip-range" type="range" min="-100" max="100" step="any" value="0" /></label><div class="rs-channel-strip-actions"><button class="rs-btn-ghost rs-btn-sm rs-channel-strip-button" type="button" aria-pressed="false">Mute</button><button class="rs-btn-ghost rs-btn-sm rs-channel-strip-button" type="button" aria-pressed="false">Solo</button></div></fieldset>
.rs-channel-strip.rs-channel-strip-label.rs-channel-strip-field.rs-channel-strip-text.rs-channel-strip-range.rs-channel-strip-actions.rs-channel-strip-button.rs-channel-strip-pressed