From bd9ec023eefc4b5d26fa8b66c4338e97104f0f96 Mon Sep 17 00:00:00 2001 From: Maze Winther Date: Wed, 1 Apr 2026 19:27:49 +0200 Subject: [PATCH] refactor: split constants by domain and isolate timeline panel from core --- .../editor/panels/assets/views/assets.tsx | 4 +- .../assets/views/settings/background.tsx | 14 +- .../panels/assets/views/settings/index.tsx | 2 +- .../panels/preview/preview-viewport.tsx | 2 +- .../editor/panels/preview/toolbar.tsx | 2 +- .../panels/properties/tabs/speed-tab.tsx | 2 +- .../panels/properties/tabs/text-tab.tsx | 6 +- .../editor/panels/timeline/bookmarks.tsx | 24 +- .../editor/panels/timeline/drag-line.tsx | 4 +- .../editor/panels/timeline/drop-target.ts} | 508 +++++++++--------- .../editor/panels/timeline/index.tsx | 50 +- .../editor/panels/timeline/interaction.ts | 4 + .../editor/panels/timeline/layers.ts | 6 + .../editor/panels/timeline/layout.ts | 16 + .../panels}/timeline/selection-hit-testing.ts | 269 +++++----- .../editor/panels/timeline/snap-indicator.tsx | 2 +- .../editor/panels/timeline/theme.ts | 29 + .../panels/timeline/timeline-element.tsx | 12 +- .../panels/timeline/timeline-playhead.tsx | 4 +- .../editor/panels/timeline/timeline-ruler.tsx | 14 +- .../panels/timeline/timeline-toolbar.tsx | 11 +- .../editor/panels/timeline/timeline-track.tsx | 5 +- .../editor/panels/timeline/track-layout.ts | 37 ++ apps/web/src/core/managers/audio-manager.ts | 2 +- apps/web/src/core/managers/project-manager.ts | 12 +- .../element/use-element-interaction.ts | 27 +- .../timeline/element/use-element-resize.ts | 4 +- .../timeline/element/use-keyframe-drag.ts | 13 +- .../src/hooks/timeline/use-bookmark-drag.ts | 7 +- .../timeline/use-snap-indicator-position.ts | 5 +- .../hooks/timeline/use-timeline-drag-drop.ts | 19 +- .../hooks/timeline/use-timeline-playhead.ts | 10 +- .../src/hooks/timeline/use-timeline-seek.ts | 4 +- .../src/hooks/timeline/use-timeline-zoom.ts | 33 +- apps/web/src/hooks/use-paste-media.ts | 4 +- apps/web/src/lib/background/constants.ts | 11 + apps/web/src/lib/canvas/constants.ts | 10 + .../src/lib/commands/media/add-media-asset.ts | 2 +- .../timeline/element/insert-element.ts | 4 +- .../element/retime/update-element-retime.ts | 2 +- .../timeline/track/toggle-track-mute.ts | 4 +- .../{project => fps}/__tests__/fps.test.ts | 130 ++--- apps/web/src/lib/fps/constants.ts | 9 + .../src/lib/{project/fps.ts => fps/utils.ts} | 78 +-- apps/web/src/lib/media/audio.ts | 12 +- apps/web/src/lib/panels/constants.ts | 9 + apps/web/src/lib/preview/constants.ts | 7 + apps/web/src/lib/retime/audio-stretch.ts | 2 +- apps/web/src/lib/retime/index.ts | 1 + apps/web/src/lib/retime/presets.ts | 2 +- .../retime/rate.ts} | 55 +- apps/web/src/lib/retime/resolve.ts | 2 +- apps/web/src/lib/text/constants.ts | 12 + apps/web/src/lib/timeline/creation.ts | 1 + apps/web/src/lib/timeline/defaults.ts | 4 +- apps/web/src/lib/timeline/drag-utils.ts | 4 +- apps/web/src/lib/timeline/element-utils.ts | 10 +- apps/web/src/lib/timeline/index.ts | 2 +- apps/web/src/lib/timeline/pixel-utils.ts | 4 +- .../lib/timeline/placement/track-factory.ts | 4 +- apps/web/src/lib/timeline/ruler-utils.ts | 4 +- apps/web/src/lib/timeline/scale.ts | 3 + apps/web/src/lib/timeline/snap-utils.ts | 4 +- .../src/lib/timeline/track-capabilities.ts | 20 + apps/web/src/lib/timeline/track-utils.ts | 62 --- apps/web/src/lib/timeline/tracks.ts | 9 + apps/web/src/lib/timeline/zoom-utils.ts | 15 +- .../src/services/renderer/scene-builder.ts | 5 +- .../migrations/__tests__/v1-to-v2.test.ts | 16 +- .../migrations/transformers/v1-to-v2.ts | 24 +- apps/web/src/stores/editor-store.ts | 2 +- apps/web/src/stores/panel-store.ts | 2 +- 72 files changed, 939 insertions(+), 775 deletions(-) rename apps/web/src/{lib/timeline/drop-utils.ts => components/editor/panels/timeline/drop-target.ts} (87%) create mode 100644 apps/web/src/components/editor/panels/timeline/interaction.ts create mode 100644 apps/web/src/components/editor/panels/timeline/layers.ts create mode 100644 apps/web/src/components/editor/panels/timeline/layout.ts rename apps/web/src/{lib => components/editor/panels}/timeline/selection-hit-testing.ts (88%) create mode 100644 apps/web/src/components/editor/panels/timeline/theme.ts create mode 100644 apps/web/src/components/editor/panels/timeline/track-layout.ts create mode 100644 apps/web/src/lib/background/constants.ts create mode 100644 apps/web/src/lib/canvas/constants.ts rename apps/web/src/lib/{project => fps}/__tests__/fps.test.ts (94%) create mode 100644 apps/web/src/lib/fps/constants.ts rename apps/web/src/lib/{project/fps.ts => fps/utils.ts} (96%) create mode 100644 apps/web/src/lib/panels/constants.ts create mode 100644 apps/web/src/lib/preview/constants.ts rename apps/web/src/{constants/retime-constants.ts => lib/retime/rate.ts} (74%) create mode 100644 apps/web/src/lib/text/constants.ts create mode 100644 apps/web/src/lib/timeline/creation.ts create mode 100644 apps/web/src/lib/timeline/scale.ts create mode 100644 apps/web/src/lib/timeline/track-capabilities.ts delete mode 100644 apps/web/src/lib/timeline/track-utils.ts create mode 100644 apps/web/src/lib/timeline/tracks.ts diff --git a/apps/web/src/components/editor/panels/assets/views/assets.tsx b/apps/web/src/components/editor/panels/assets/views/assets.tsx index e17e4d4a..031d2e6a 100644 --- a/apps/web/src/components/editor/panels/assets/views/assets.tsx +++ b/apps/web/src/components/editor/panels/assets/views/assets.tsx @@ -25,7 +25,7 @@ import { TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; -import { TIMELINE_CONSTANTS } from "@/constants/timeline-constants"; +import { DEFAULT_NEW_ELEMENT_DURATION_SECONDS } from "@/lib/timeline/creation"; import { useEditor } from "@/hooks/use-editor"; import { useFileUpload } from "@/hooks/use-file-upload"; import { invokeAction } from "@/lib/actions"; @@ -257,7 +257,7 @@ function MediaAssetDraggable({ startTime: number; }) => { const duration = - asset.duration ?? TIMELINE_CONSTANTS.DEFAULT_ELEMENT_DURATION; + asset.duration ?? DEFAULT_NEW_ELEMENT_DURATION_SECONDS; const element = buildElementFromMedia({ mediaId: asset.id, mediaType: asset.type, diff --git a/apps/web/src/components/editor/panels/assets/views/settings/background.tsx b/apps/web/src/components/editor/panels/assets/views/settings/background.tsx index 7a81188f..bbceac7d 100644 --- a/apps/web/src/components/editor/panels/assets/views/settings/background.tsx +++ b/apps/web/src/components/editor/panels/assets/views/settings/background.tsx @@ -8,10 +8,10 @@ import { SectionTitle, } from "@/components/section"; import { - BLUR_INTENSITY_PRESETS, - DEFAULT_BLUR_INTENSITY, - DEFAULT_COLOR, -} from "@/constants/project-constants"; + BACKGROUND_BLUR_INTENSITY_PRESETS, + DEFAULT_BACKGROUND_BLUR_INTENSITY, + DEFAULT_BACKGROUND_COLOR, +} from "@/lib/background/constants"; import { patternCraftGradients } from "@/data/colors/pattern-craft"; import { colors } from "@/data/colors/solid"; import { syntaxUIGradients } from "@/data/colors/syntax-ui"; @@ -164,16 +164,16 @@ export function BackgroundContent() { const currentBlurIntensity = isBlurBackground ? (activeProject.settings.background as { blurIntensity: number }) .blurIntensity - : DEFAULT_BLUR_INTENSITY; + : DEFAULT_BACKGROUND_BLUR_INTENSITY; const currentBackgroundColor = isColorBackground ? (activeProject.settings.background as { color: string }).color - : DEFAULT_COLOR; + : DEFAULT_BACKGROUND_COLOR; const canvasSize = activeProject.settings.canvasSize; const blurPreviews = useMemo( () => - BLUR_INTENSITY_PRESETS.map((blur) => ( + BACKGROUND_BLUR_INTENSITY_PRESETS.map((blur) => (