Keyboard
| Keys | What they do |
|---|---|
| Left, Right | Move the selected keyframes by one frame. |
| Escape | While dragging: put the keyframes back where they were. |
Examples
Three keyframes
import { useState } from 'react'
import { KeyframeLane, type Keyframe } from '@kition/tessera-ui'
export default function Demo() {
const [keyframes, setKeyframes] = useState<Keyframe[]>([
{ id: 'a', time: 1 },
{ id: 'b', time: 3.5, interpolation: 'bezier' },
{ id: 'c', time: 6, interpolation: 'hold' },
])
return (
<div style={{ width: 360 }}>
<KeyframeLane
keyframes={keyframes}
start={0}
end={8}
onSelect={(ids) => setKeyframes((list) => list.map((key) => ({ ...key, selected: ids.includes(key.id) })))}
onMove={(ids, delta) => setKeyframes((list) => list.map((key) => (ids.includes(key.id) ? { ...key, time: Math.max(0, key.time + delta) } : key)))}
/>
</div>
)
}Props
KeyframeLane
| Prop | Type | Default | Description |
|---|---|---|---|
keyframesrequired | readonly Keyframe[] | — | |
startrequired | number | — | Visible range in seconds and the lane's width map times to x. |
endrequired | number | — | |
onSelectrequired | (ids: string[], add: boolean) => void | — | |
onMoverequired | (ids: string[], delta: number) => void | — | Called once on release with the dragged ids and the time delta. |
snap | (time: number) => number | — | |
fps | number | 30 | Frames per second: an arrow key moves the selected keyframes one frame (30 by default). |
onMenu | (id: string, at: ContextMenuPoint) => void | — | A keyframe's menu was asked for at a screen point (upstream's interpolation menu). |
uiId | string | — | The Kit UI id every keyframe carries (control:effects.keyframe). |
testId | string | — |
Used in
1 of Kition's 16 kits use this component.
Film