From 7bf0984698e43b9aa2dd879f65951318ed410390 Mon Sep 17 00:00:00 2001 From: Maze <167211895+mazeincoding@users.noreply.github.com> Date: Sat, 31 Jan 2026 00:20:04 +0100 Subject: codebase overhaul (#697) --- apps/web/src/lib/timeline/bookmarks.ts | 61 ++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 apps/web/src/lib/timeline/bookmarks.ts (limited to 'apps/web/src/lib/timeline/bookmarks.ts') diff --git a/apps/web/src/lib/timeline/bookmarks.ts b/apps/web/src/lib/timeline/bookmarks.ts new file mode 100644 index 00000000..0b06c2f6 --- /dev/null +++ b/apps/web/src/lib/timeline/bookmarks.ts @@ -0,0 +1,61 @@ +import { roundToFrame } from "@/lib/time"; + +export function findBookmarkIndex({ + bookmarks, + frameTime, +}: { + bookmarks: number[]; + frameTime: number; +}): number { + return bookmarks.findIndex( + (bookmark) => Math.abs(bookmark - frameTime) < 0.001, + ); +} + +export function isBookmarkAtTime({ + bookmarks, + frameTime, +}: { + bookmarks: number[]; + frameTime: number; +}): boolean { + return bookmarks.some((bookmark) => Math.abs(bookmark - frameTime) < 0.001); +} + +export function toggleBookmarkInArray({ + bookmarks, + frameTime, +}: { + bookmarks: number[]; + frameTime: number; +}): number[] { + const bookmarkIndex = findBookmarkIndex({ bookmarks, frameTime }); + + if (bookmarkIndex !== -1) { + return bookmarks.filter((_, i) => i !== bookmarkIndex); + } + + return [...bookmarks, frameTime].sort((a, b) => a - b); +} + +export function removeBookmarkFromArray({ + bookmarks, + frameTime, +}: { + bookmarks: number[]; + frameTime: number; +}): number[] { + return bookmarks.filter( + (bookmark) => Math.abs(bookmark - frameTime) >= 0.001, + ); +} + +export function getFrameTime({ + time, + fps, +}: { + time: number; + fps: number; +}): number { + return roundToFrame({ time, fps }); +} -- cgit v1.3.1