Set the edit boundary
Sequence · 24 fps
24 fps, non-drop. Hours:minutes:seconds:frames.
Edits hours, minutes, seconds, and frames with native form validation for a supplied integer non-drop frame rate.
24 fps, non-drop. Hours:minutes:seconds:frames.
Sequence · 24 fps
24 fps, non-drop. Hours:minutes:seconds:frames.
Three ways in. They share one source, so the pixels match whichever you pick.
npm install @noorddev/vlak-react
// once, next to your app's root
import "@noorddev/vlak-react/css";
import { TimecodeField } from "@noorddev/vlak-react";Precompiled React and one stylesheet. No compiler to configure. Per-component imports work too: @noorddev/vlak-react/components/timecode-field.
npx @noorddev/vlak-cli add timecode-field
The StyleX leaf lands in components/vlak/ with its dependencies, for your own compiler to own. See StyleX.
npx shadcn add https://vlak.dev/r/timecode-field.json
The same registry item, installed by shadcn's CLI.
<link rel="stylesheet" href="node_modules/@noorddev/vlak/css/vlak.css" />
No React. Link vlak.css and use the markup and classes below.
import { TimecodeField } from "@noorddev/vlak-react";
<TimecodeField label="In point" name="inPoint" frameRate={24} defaultValue="00:01:24:12" required />Editable hours, minutes, seconds and frames for integer non-drop timecode.
| Prop | Type | Default | Description |
|---|---|---|---|
labelrequired | ReactNode | ||
frameRaterequired | number | Integer non-drop frame rate from 1 to 99. | |
value | string | ||
defaultValue | string | "" | |
onValueChange | (value: string) => void | Receives editable text, including incomplete or invalid input. |
Also accepts Omit<InputHTMLAttributes<HTMLInputElement>, "type" | "value" | "defaultValue" | "onChange" | "pattern">.
| Keys | Does |
|---|---|
| Tab | Focuses the native text input. |
| Text editing keys | Edits and selects timecode text using native input behavior. |
<div class="rs-timecode-field"><label class="rs-timecode-field-label" for="in-point">In point</label><input class="rs-input rs-input-full rs-timecode-field-input" id="in-point" type="text" value="00:01:24:12" pattern="[0-9]{2}:[0-5][0-9]:[0-5][0-9]:[0-9]{2}" aria-describedby="in-point-hint" /><p class="rs-timecode-field-hint" id="in-point-hint">24 fps, non-drop. Hours:minutes:seconds:frames.</p></div>