Jump to a component
AniCanonKit · Productions
TrimFrames
TrimFrames shows a cut’s in and out frames with their timecodes and a frame-at-a-time nudge under each. active (in or out) rings the frame being trimmed. Each frame takes image, imageStyle, timecode and an optional href. Frame size with frameWidth and frameHeight (60 × 107 for 9:16). Frames narrower than their rows (a 9:16 cut at 60 × 107) centre the picture, with its name, timecode and nudges centred under it.
Live, from @anicanon/sakuga 2.0.0
Sakuga for iOS and Android is coming
iOS
Web only
TrimFrames is made for the web, and isn’t part of Sakuga for iOS yet.
Android
Web only
TrimFrames is made for the web, and isn’t part of Sakuga for Android yet.
- Use it for
- The selected cut's in and out frames with their timecodes and a frame-at-a-time nudge under each, ringing the one being trimmed.
- Not for
- Trimming an item on the tracks by its endsTimeline
- A picture in a frameThumb
- A number stepped a unit at a timeNumberField
- The frame grid of what gets generated for a cutTimesheet
Guidelines
onNudge(which, frames)runs a nudge on a frame with nohref(whichisinorout,frames−1 or 1).
import { TrimFrames } from '@anicanon/sakuga/anicanonkit';
export default function TrimFramesExample() {
return (
<>
<TrimFrames
in={{ image: '/art/eba-cinema.webp', timecode: '0+00' }}
out={{
image: '/art/eba-cinema.webp',
imageStyle: 'object-position:62% 34%',
timecode: '6+12',
}}
active="out"
/>
<TrimFrames
frameWidth={60}
frameHeight={107}
in={{
image: '/art/eba-cinema.webp',
imageStyle: 'object-position:30% 40%',
timecode: '0+00',
}}
out={{
image: '/art/eba-cinema.webp',
imageStyle: 'object-position:62% 34%',
timecode: '6+12',
}}
active="out"
label="Trim, 9:16"
/>
</>
);
}PropsTrimFramesProps
inrequiredTrimFrameoutrequiredTrimFrameactive'in' | 'out'frameWidthnumberframeHeightnumberlabelstringonNudge(which: 'in' | 'out', frames: -1 | 1) => voidTypes
interface TrimFrame { image: string; imageStyle?: string; timecode: string; href?: string; }
Each token reads a role, and the role lands on a value in each theme. Change the role and every component that reads it follows.
Space and shape
trim-gapgap-mdtrim-f-gapgap-xstrim-nudge-gapgap-2xstrim-nudge-margin-lefttrim-lab-narrow-gapgap-smType
trim-lab-fonttext-small-strongtrim-lab-span-font-weightweight-mediumChecked automatically with axe-core 4.11.4 against WCAG 2.2 A and AA, on the live preview above, in light and dark, on 26 October 2026.
- Result
- No issues found, in light or in dark.
- By design
- A group named by
label(default "Trim"): each frame reads "In" or "Out" and its timecode, a frame withhrefis a link named like "In frame, 0:12" (with "selected" on theactiveone), and Tab reaches its nudge buttons ("In a frame earlier", "In a frame later", and the same for Out). Withouthrefthe nudges runonNudge. - Not tested
- The automated check doesn't test keyboard use, focus order or what a screen reader says. The lines above are the design system's own account of them.