mirror of
https://github.com/storytold/artcraft.git
synced 2026-11-14 22:02:36 +00:00
only height and padding styling updates to the timeline tracks and clips timeline now more compact and takes less space. 
47 lines
1.3 KiB
TypeScript
47 lines
1.3 KiB
TypeScript
import { Keyframe } from "~/pages/PageEnigma/models";
|
|
import { filmLength, scale, selectedItem } from "~/pages/PageEnigma/signals";
|
|
import { useMouseEventsKeyframe } from "~/pages/PageEnigma/comps/Timeline/utils/useMouseEventsKeyframe";
|
|
import { useSignals } from "@preact/signals-react/runtime";
|
|
|
|
interface Props {
|
|
keyframe: Keyframe;
|
|
updateKeyframe: (options: { id: string; offset: number }) => void;
|
|
}
|
|
|
|
export const TrackKeyFrame = ({ keyframe, updateKeyframe }: Props) => {
|
|
useSignals();
|
|
|
|
const { onPointerDown, offset } = useMouseEventsKeyframe({
|
|
keyframe,
|
|
max: filmLength.value * 60,
|
|
min: 0,
|
|
updateKeyframe,
|
|
});
|
|
|
|
const displayOffset = offset > -1 ? offset : keyframe.offset;
|
|
|
|
const selectedKeyframeId =
|
|
(selectedItem.value as Keyframe | null)?.keyframe_uuid ?? "";
|
|
|
|
return (
|
|
<button
|
|
className={[
|
|
"top-[9px] block h-[12px] w-[12px] rotate-45 cursor-ew-resize",
|
|
"absolute",
|
|
keyframe.keyframe_uuid === selectedKeyframeId
|
|
? "bg-keyframe-selected"
|
|
: "bg-keyframe-unselected",
|
|
].join(" ")}
|
|
style={{
|
|
left: displayOffset * 4 * scale.value - 5,
|
|
}}
|
|
onPointerDown={(event) => onPointerDown(event, "drag")}
|
|
onClick={(event) => {
|
|
event.stopPropagation();
|
|
event.preventDefault();
|
|
selectedItem.value = keyframe;
|
|
}}
|
|
/>
|
|
);
|
|
};
|