SYMBOL INDEX (1793 symbols across 360 files) FILE: apps/web/migrations/0000_brainy_saracen.sql type "accounts" (line 1) | CREATE TABLE "accounts" ( type "sessions" (line 18) | CREATE TABLE "sessions" ( type "users" (line 31) | CREATE TABLE "users" ( type "verifications" (line 43) | CREATE TABLE "verifications" ( type "waitlist" (line 53) | CREATE TABLE "waitlist" ( FILE: apps/web/scripts/generate-font-sprites.ts constant FONT_SIZE (line 20) | const FONT_SIZE = 24; constant ROW_HEIGHT (line 21) | const ROW_HEIGHT = 40; constant CANVAS_WIDTH (line 22) | const CANVAS_WIDTH = 1200; constant MAX_CHUNK_HEIGHT (line 23) | const MAX_CHUNK_HEIGHT = 800; constant PADDING_X (line 24) | const PADDING_X = 14; constant WIDTH_BUFFER (line 25) | const WIDTH_BUFFER = 8; constant CONCURRENT_DOWNLOADS (line 26) | const CONCURRENT_DOWNLOADS = 30; constant OUTPUT_DIR (line 28) | const OUTPUT_DIR = join(__dirname, "..", "public", "fonts"); constant CACHE_DIR (line 29) | const CACHE_DIR = join(__dirname, "..", ".font-cache"); constant FONTSOURCE_API (line 30) | const FONTSOURCE_API = "https://api.fontsource.org/v1/fonts"; type FontsourceFont (line 32) | interface FontsourceFont { type MeasuredFont (line 42) | interface MeasuredFont { type PackedFont (line 48) | interface PackedFont { type AtlasEntry (line 55) | interface AtlasEntry { function fetchFontList (line 63) | async function fetchFontList(): Promise { function downloadFont (line 82) | async function downloadFont({ id }: { id: string }): Promise = { function AssetCard (line 230) | function AssetCard({ variant }: { variant: AssetVariant }) { FILE: apps/web/src/app/changelog/[version]/page.tsx type Props (line 17) | type Props = { params: Promise<{ version: string }> }; function generateStaticParams (line 19) | async function generateStaticParams() { function generateMetadata (line 23) | async function generateMetadata({ params }: Props): Promise { function ReleaseDetailPage (line 33) | async function ReleaseDetailPage({ params }: Props) { FILE: apps/web/src/app/changelog/components/copy-markdown-button.tsx function buildMarkdown (line 10) | function buildMarkdown({ function CopyMarkdownButton (line 36) | function CopyMarkdownButton({ FILE: apps/web/src/app/changelog/components/release.tsx function ReleaseArticle (line 7) | function ReleaseArticle({ function ReleaseMeta (line 37) | function ReleaseMeta({ release }: { release: Release }) { function ReleaseTitle (line 50) | function ReleaseTitle({ function ReleaseDescription (line 72) | function ReleaseDescription({ children }: { children: ReactNode }) { function ReleaseChanges (line 80) | function ReleaseChanges({ release }: { release: Release }) { FILE: apps/web/src/app/changelog/page.tsx function ChangelogPage (line 37) | function ChangelogPage() { function ReleaseEntry (line 65) | function ReleaseEntry({ release }: { release: ReleaseType }) { FILE: apps/web/src/app/changelog/utils.ts type Change (line 3) | type Change = { type: string; text: string }; type Release (line 4) | type Release = (typeof allChangelogs)[number]; function getSectionTitle (line 15) | function getSectionTitle(type: string): string { function groupAndOrderChanges (line 21) | function groupAndOrderChanges({ changes }: { changes: Change[] }) { function getSortedReleases (line 39) | function getSortedReleases() { FILE: apps/web/src/app/contributors/page.tsx type Contributor (line 21) | interface Contributor { function getContributors (line 30) | async function getContributors(): Promise { function ContributorsPage (line 61) | async function ContributorsPage() { function StatItem (line 97) | function StatItem({ value, label }: { value: number; label: string }) { function TopContributorsSection (line 107) | function TopContributorsSection({ function TopContributorCard (line 130) | function TopContributorCard({ contributor }: { contributor: Contributor ... function AllContributorsSection (line 162) | function AllContributorsSection({ function ExternalToolsSection (line 209) | function ExternalToolsSection() { FILE: apps/web/src/app/editor/[project_id]/page.tsx function Editor (line 21) | function Editor() { function EditorLayout (line 41) | function EditorLayout() { FILE: apps/web/src/app/layout.tsx function RootLayout (line 22) | function RootLayout({ FILE: apps/web/src/app/page.tsx function Home (line 13) | async function Home() { FILE: apps/web/src/app/privacy/page.tsx function PrivacyPage (line 24) | function PrivacyPage() { FILE: apps/web/src/app/projects/page.tsx constant VIEW_MODE_OPTIONS (line 81) | const VIEW_MODE_OPTIONS = [ function ProjectsPage (line 86) | function ProjectsPage() { function ProjectsHeader (line 137) | function ProjectsHeader() { constant SORT_LABELS (line 192) | const SORT_LABELS: Record = { function ProjectsToolbar (line 199) | function ProjectsToolbar({ projectIds }: { projectIds: string[] }) { function SearchBar (line 302) | function SearchBar({ constant PROJECT_ACTIONS (line 343) | const PROJECT_ACTIONS = [ function deleteProjects (line 358) | async function deleteProjects({ function duplicateProjects (line 368) | async function duplicateProjects({ function renameProject (line 378) | async function renameProject({ function ProjectActions (line 390) | function ProjectActions() { function SortDropdown (line 468) | function SortDropdown({ children }: { children: React.ReactNode }) { function NewProjectButton (line 504) | function NewProjectButton() { function ProjectItem (line 527) | function ProjectItem({ function ProjectContextMenuContent (line 760) | function ProjectContextMenuContent({ function ProjectMenu (line 803) | function ProjectMenu({ function ProjectsSkeleton (line 916) | function ProjectsSkeleton() { function EmptyState (line 947) | function EmptyState() { FILE: apps/web/src/app/projects/store.ts type ProjectsViewMode (line 5) | type ProjectsViewMode = "grid" | "list"; type ProjectsState (line 7) | interface ProjectsState { FILE: apps/web/src/app/roadmap/page.tsx constant LAST_UPDATED (line 8) | const LAST_UPDATED = "February 25, 2026"; type StatusType (line 10) | type StatusType = "complete" | "pending" | "default" | "info"; type Status (line 12) | interface Status { type RoadmapItem (line 17) | interface RoadmapItem { function RoadmapPage (line 89) | function RoadmapPage() { function RoadmapItem (line 112) | function RoadmapItem({ item, index }: { item: RoadmapItem; index: number... function StatusBadge (line 127) | function StatusBadge({ FILE: apps/web/src/app/robots.ts function robots (line 4) | function robots(): MetadataRoute.Robots { FILE: apps/web/src/app/rss.xml/route.ts function GET (line 5) | async function GET() { FILE: apps/web/src/app/sitemap.ts function sitemap (line 5) | async function sitemap(): Promise { FILE: apps/web/src/app/sponsors/page.tsx function SponsorsPage (line 23) | function SponsorsPage() { function SponsorsGrid (line 40) | function SponsorsGrid() { function SponsorCard (line 50) | function SponsorCard({ sponsor }: { sponsor: Sponsor }) { FILE: apps/web/src/app/terms/page.tsx function TermsPage (line 24) | function TermsPage() { FILE: apps/web/src/components/editable-timecode.tsx type EditableTimecodeProps (line 8) | interface EditableTimecodeProps { function EditableTimecode (line 18) | function EditableTimecode({ FILE: apps/web/src/components/editor/dialogs/delete-project-dialog.tsx function DeleteProjectDialog (line 14) | function DeleteProjectDialog({ FILE: apps/web/src/components/editor/dialogs/migration-dialog.tsx function MigrationDialog (line 13) | function MigrationDialog() { FILE: apps/web/src/components/editor/dialogs/project-info-dialog.tsx function InfoRow (line 14) | function InfoRow({ function ProjectInfoDialog (line 29) | function ProjectInfoDialog({ FILE: apps/web/src/components/editor/dialogs/rename-project-dialog.tsx function RenameProjectDialog (line 14) | function RenameProjectDialog({ FILE: apps/web/src/components/editor/dialogs/shortcuts-dialog.tsx function ShortcutsDialog (line 20) | function ShortcutsDialog({ function ShortcutItem (line 148) | function ShortcutItem({ function EditableShortcutKey (line 202) | function EditableShortcutKey({ FILE: apps/web/src/components/editor/editor-header.tsx function EditorHeader (line 28) | function EditorHeader() { function ProjectDropdown (line 43) | function ProjectDropdown() { function EditableProjectName (line 170) | function EditableProjectName() { FILE: apps/web/src/components/editor/export-button.tsx function isExportFormat (line 34) | function isExportFormat(value: string): value is ExportFormat { function isExportQuality (line 38) | function isExportQuality(value: string): value is ExportQuality { function ExportButton (line 42) | function ExportButton() { function ExportPopover (line 88) | function ExportPopover({ function ExportError (line 281) | function ExportError({ FILE: apps/web/src/components/editor/mobile-gate.tsx constant STORAGE_KEY (line 10) | const STORAGE_KEY = "mobile-acknowledged"; type MobileGateProps (line 12) | interface MobileGateProps { function MobileGate (line 16) | function MobileGate({ children }: MobileGateProps) { FILE: apps/web/src/components/editor/onboarding.tsx function Onboarding (line 11) | function Onboarding() { function Title (line 94) | function Title({ title }: { title: string }) { function Description (line 98) | function Description({ description }: { description: string }) { function NextButton (line 122) | function NextButton({ FILE: apps/web/src/components/editor/panels/assets/drag-overlay.tsx type MediaDragOverlayProps (line 4) | interface MediaDragOverlayProps { function MediaDragOverlay (line 11) | function MediaDragOverlay({ FILE: apps/web/src/components/editor/panels/assets/draggable-item.tsx type DraggableItemProps (line 18) | interface DraggableItemProps { function DraggableItem (line 35) | function DraggableItem({ function PlusButton (line 207) | function PlusButton({ FILE: apps/web/src/components/editor/panels/assets/index.tsx function AssetsPanel (line 14) | function AssetsPanel() { FILE: apps/web/src/components/editor/panels/assets/tabbar.tsx function TabBar (line 17) | function TabBar() { function FadeOverlay (line 93) | function FadeOverlay({ FILE: apps/web/src/components/editor/panels/assets/views/assets.tsx function MediaView (line 53) | function MediaView() { function MediaAssetDraggable (line 217) | function MediaAssetDraggable({ function MediaItemWithContextMenu (line 278) | function MediaItemWithContextMenu({ function MediaItemList (line 303) | function MediaItemList({ function formatDuration (line 347) | function formatDuration({ duration }: { duration: number }) { function MediaDurationBadge (line 353) | function MediaDurationBadge({ duration }: { duration?: number }) { function MediaDurationLabel (line 363) | function MediaDurationLabel({ duration }: { duration?: number }) { function MediaTypePlaceholder (line 371) | function MediaTypePlaceholder({ function MediaPreview (line 398) | function MediaPreview({ function MediaActions (line 469) | function MediaActions({ function SortMenuItem (line 582) | function SortMenuItem({ FILE: apps/web/src/components/editor/panels/assets/views/base-view.tsx type PanelViewProps (line 3) | interface PanelViewProps extends React.HTMLAttributes { function PanelView (line 14) | function PanelView({ FILE: apps/web/src/components/editor/panels/assets/views/captions.tsx function Captions (line 25) | function Captions() { FILE: apps/web/src/components/editor/panels/assets/views/effects.tsx function EffectsView (line 15) | function EffectsView() { function EffectsGrid (line 25) | function EffectsGrid({ effects }: { effects: EffectDefinition[] }) { function EffectPreviewCanvas (line 38) | function EffectPreviewCanvas({ effectType }: { effectType: string }) { function EffectItem (line 59) | function EffectItem({ effect }: { effect: EffectDefinition }) { FILE: apps/web/src/components/editor/panels/assets/views/settings-legacy.tsx function SettingsView (line 35) | function SettingsView() { function ProjectInfoView (line 46) | function ProjectInfoView() { function BackgroundView (line 252) | function BackgroundView() { FILE: apps/web/src/components/editor/panels/assets/views/settings.tsx constant ORIGINAL_PRESET_VALUE (line 28) | const ORIGINAL_PRESET_VALUE = "original"; function findPresetIndexByAspectRatio (line 30) | function findPresetIndexByAspectRatio({ function SettingsView (line 50) | function SettingsView() { function ProjectInfoContent (line 80) | function ProjectInfoContent() { FILE: apps/web/src/components/editor/panels/assets/views/sounds.tsx function SoundsView (line 38) | function SoundsView() { function SoundEffectsView (line 73) | function SoundEffectsView() { function SavedSoundsView (line 313) | function SavedSoundsView() { function SongsView (line 488) | function SongsView() { type AudioItemProps (line 492) | interface AudioItemProps { function AudioItem (line 498) | function AudioItem({ sound, isPlaying, onPlay }: AudioItemProps) { FILE: apps/web/src/components/editor/panels/assets/views/stickers.tsx function StickersView (line 42) | function StickersView() { function StickerGrid (line 83) | function StickerGrid({ function EmptyView (line 110) | function EmptyView({ message }: { message: string }) { function StickersContentView (line 125) | function StickersContentView() { type StickerItemProps (line 212) | interface StickerItemProps { function StickerItem (line 217) | function StickerItem({ item, shouldCapSize = false }: StickerItemProps) { function getStickerNameFromId (line 303) | function getStickerNameFromId({ stickerId }: { stickerId: string }): str... function toRecentStickerItem (line 314) | function toRecentStickerItem({ FILE: apps/web/src/components/editor/panels/assets/views/text.tsx function TextView (line 7) | function TextView() { FILE: apps/web/src/components/editor/panels/preview/bookmark-note-overlay.tsx function BookmarkNoteOverlay (line 7) | function BookmarkNoteOverlay() { FILE: apps/web/src/components/editor/panels/preview/context-menu.tsx function PreviewContextMenu (line 11) | function PreviewContextMenu({ FILE: apps/web/src/components/editor/panels/preview/index.tsx function usePreviewSize (line 20) | function usePreviewSize() { function PreviewPanel (line 30) | function PreviewPanel() { function RenderTreeController (line 54) | function RenderTreeController() { function PreviewCanvas (line 81) | function PreviewCanvas({ FILE: apps/web/src/components/editor/panels/preview/layout-guide-overlay.tsx function TikTokGuide (line 6) | function TikTokGuide() { function LayoutGuideOverlay (line 20) | function LayoutGuideOverlay() { FILE: apps/web/src/components/editor/panels/preview/preview-interaction-overlay.tsx function PreviewInteractionOverlay (line 6) | function PreviewInteractionOverlay({ FILE: apps/web/src/components/editor/panels/preview/snap-guides.tsx function SnapGuides (line 7) | function SnapGuides({ FILE: apps/web/src/components/editor/panels/preview/text-edit-overlay.tsx constant TEXT_BACKGROUND_PADDING (line 15) | const TEXT_BACKGROUND_PADDING = "4px 8px"; constant TEXT_EDIT_VERTICAL_OFFSET_EM (line 16) | const TEXT_EDIT_VERTICAL_OFFSET_EM = 0.06; function TextEditOverlay (line 18) | function TextEditOverlay({ FILE: apps/web/src/components/editor/panels/preview/toolbar.tsx function PreviewToolbar (line 17) | function PreviewToolbar({ FILE: apps/web/src/components/editor/panels/preview/transform-handles.tsx constant HANDLE_SIZE (line 13) | const HANDLE_SIZE = 10; constant ROTATION_HANDLE_OFFSET (line 14) | const ROTATION_HANDLE_OFFSET = 24; constant ROTATION_HANDLE_RADIUS (line 15) | const ROTATION_HANDLE_RADIUS = 10; constant CORNER_HIT_AREA_SIZE (line 16) | const CORNER_HIT_AREA_SIZE = 18; type Corner (line 18) | type Corner = "top-left" | "top-right" | "bottom-left" | "bottom-right"; constant CORNERS (line 19) | const CORNERS: Corner[] = [ function getCornerPosition (line 26) | function getCornerPosition({ function getRotationHandlePosition (line 50) | function getRotationHandlePosition({ bounds }: { bounds: ElementBounds }... function getOverlayContext (line 64) | function getOverlayContext({ function TransformHandles (line 80) | function TransformHandles({ function BoundingBoxOutline (line 178) | function BoundingBoxOutline({ function CornerHandle (line 207) | function CornerHandle({ function RotationHandle (line 251) | function RotationHandle({ FILE: apps/web/src/components/editor/panels/properties/audio-properties.tsx function AudioProperties (line 1) | function AudioProperties() { FILE: apps/web/src/components/editor/panels/properties/clip-effects-properties.tsx function ClipEffectsProperties (line 27) | function ClipEffectsProperties({ function ClipEffectSection (line 120) | function ClipEffectSection({ FILE: apps/web/src/components/editor/panels/properties/effect-param-field.tsx function EffectParamField (line 18) | function EffectParamField({ function EffectParamInput (line 36) | function EffectParamInput({ function NumberParamField (line 108) | function NumberParamField({ FILE: apps/web/src/components/editor/panels/properties/effect-properties.tsx function EffectProperties (line 15) | function EffectProperties({ FILE: apps/web/src/components/editor/panels/properties/empty-view.tsx function EmptyView (line 4) | function EmptyView() { FILE: apps/web/src/components/editor/panels/properties/hooks/use-element-playhead.ts function useElementPlayhead (line 5) | function useElementPlayhead({ FILE: apps/web/src/components/editor/panels/properties/hooks/use-keyframed-color-property.ts function useKeyframedColorProperty (line 10) | function useKeyframedColorProperty({ FILE: apps/web/src/components/editor/panels/properties/hooks/use-keyframed-number-property.ts function useKeyframedNumberProperty (line 11) | function useKeyframedNumberProperty({ FILE: apps/web/src/components/editor/panels/properties/hooks/use-property-draft.ts function looksLikeExpression (line 4) | function looksLikeExpression({ input }: { input: string }): boolean { function usePropertyDraft (line 12) | function usePropertyDraft({ FILE: apps/web/src/components/editor/panels/properties/index.tsx function ElementProperties (line 16) | function ElementProperties({ function PropertiesPanel (line 42) | function PropertiesPanel() { FILE: apps/web/src/components/editor/panels/properties/keyframe-toggle.tsx function KeyframeToggle (line 6) | function KeyframeToggle({ FILE: apps/web/src/components/editor/panels/properties/section.tsx type SectionContext (line 11) | interface SectionContext { function useSectionContext (line 19) | function useSectionContext() { type SectionProps (line 23) | interface SectionProps { function Section (line 33) | function Section({ type SectionHeaderProps (line 76) | interface SectionHeaderProps { function SectionHeader (line 85) | function SectionHeader({ function SectionTitle (line 160) | function SectionTitle({ function SectionFields (line 201) | function SectionFields({ function SectionField (line 213) | function SectionField({ function SectionContent (line 235) | function SectionContent({ FILE: apps/web/src/components/editor/panels/properties/sections/blending.tsx type BlendingElement (line 30) | type BlendingElement = { constant BLEND_MODE_GROUPS (line 40) | const BLEND_MODE_GROUPS = [ function BlendingSection (line 70) | function BlendingSection({ FILE: apps/web/src/components/editor/panels/properties/sections/transform.tsx function parseNumericInput (line 28) | function parseNumericInput({ input }: { input: string }): number | null { function isPropertyAtDefault (line 33) | function isPropertyAtDefault({ function TransformSection (line 56) | function TransformSection({ FILE: apps/web/src/components/editor/panels/properties/text-properties.tsx function TextProperties (line 47) | function TextProperties({ function ContentSection (line 66) | function ContentSection({ function TypographySection (line 106) | function TypographySection({ function SpacingSection (line 225) | function SpacingSection({ function BackgroundSection (line 333) | function BackgroundSection({ FILE: apps/web/src/components/editor/panels/properties/video-properties.tsx function VideoProperties (line 8) | function VideoProperties({ FILE: apps/web/src/components/editor/panels/timeline/audio-waveform.tsx type AudioWaveformProps (line 4) | interface AudioWaveformProps { function extractPeaks (line 11) | function extractPeaks({ function AudioWaveform (line 42) | function AudioWaveform({ FILE: apps/web/src/components/editor/panels/timeline/bookmarks.tsx constant MIN_BOOKMARK_WIDTH_PX (line 30) | const MIN_BOOKMARK_WIDTH_PX = 2; constant BOOKMARK_MARKER_WIDTH_PX (line 31) | const BOOKMARK_MARKER_WIDTH_PX = 12; constant BOOKMARK_MARKER_HEIGHT_PX (line 32) | const BOOKMARK_MARKER_HEIGHT_PX = 15; constant BOOKMARK_HALF_WIDTH_PX (line 33) | const BOOKMARK_HALF_WIDTH_PX = BOOKMARK_MARKER_WIDTH_PX / 2; constant BOOKMARK_MARKER_CLIP_PATH (line 34) | const BOOKMARK_MARKER_CLIP_PATH = function seekToBookmarkTime (line 37) | function seekToBookmarkTime({ type TimelineBookmarksRowProps (line 51) | interface TimelineBookmarksRowProps { function TimelineBookmarksRow (line 65) | function TimelineBookmarksRow({ function TimelineBookmark (line 112) | function TimelineBookmark({ function BookmarkPopoverContent (line 279) | function BookmarkPopoverContent({ FILE: apps/web/src/components/editor/panels/timeline/drag-line.tsx type DragLineProps (line 4) | interface DragLineProps { function DragLine (line 11) | function DragLine({ FILE: apps/web/src/components/editor/panels/timeline/index.tsx constant TRACKS_CONTAINER_MAX_HEIGHT (line 58) | const TRACKS_CONTAINER_MAX_HEIGHT = 800; constant FALLBACK_CONTAINER_WIDTH (line 59) | const FALLBACK_CONTAINER_WIDTH = 1000; function Timeline (line 61) | function Timeline() { function TrackIcon (line 546) | function TrackIcon({ track }: { track: TimelineTrack }) { function TrackToggleIcon (line 550) | function TrackToggleIcon({ FILE: apps/web/src/components/editor/panels/timeline/snap-indicator.tsx type SnapIndicatorProps (line 11) | interface SnapIndicatorProps { function SnapIndicator (line 21) | function SnapIndicator({ FILE: apps/web/src/components/editor/panels/timeline/timeline-element.tsx constant KEYFRAME_INDICATOR_MIN_WIDTH_PX (line 64) | const KEYFRAME_INDICATOR_MIN_WIDTH_PX = 40; constant ELEMENT_RING_WIDTH_PX (line 65) | const ELEMENT_RING_WIDTH_PX = 1.5; type KeyframeIndicator (line 67) | interface KeyframeIndicator { function buildKeyframeIndicator (line 73) | function buildKeyframeIndicator({ function getKeyframeIndicators (line 109) | function getKeyframeIndicators({ function getDisplayShortcut (line 156) | function getDisplayShortcut({ action }: { action: TAction }) { type TimelineElementProps (line 167) | interface TimelineElementProps { function TimelineElement (line 186) | function TimelineElement({ function ElementInner (line 370) | function ElementInner({ function ResizeHandle (line 470) | function ResizeHandle({ function KeyframeIndicators (line 498) | function KeyframeIndicators({ type ElementContentProps (line 581) | interface ElementContentProps { type ElementContentRendererProps (line 587) | interface ElementContentRendererProps extends ElementContentProps { type ElementContentRenderer (line 591) | type ElementContentRenderer = (props: ElementContentRendererProps) => Re... function renderTiledMedia (line 593) | function renderTiledMedia({ function EffectsButton (line 627) | function EffectsButton({ constant ELEMENT_CONTENT_RENDERERS (line 662) | const ELEMENT_CONTENT_RENDERERS: Record< function ElementContent (line 775) | function ElementContent({ element, track, isSelected }: ElementContentPr... function CopyMenuItem (line 790) | function CopyMenuItem() { function MuteMenuItem (line 801) | function MuteMenuItem({ function VisibilityMenuItem (line 828) | function VisibilityMenuItem({ function DeleteMenuItem (line 860) | function DeleteMenuItem({ function ActionMenuItem (line 884) | function ActionMenuItem({ FILE: apps/web/src/components/editor/panels/timeline/timeline-playhead.tsx type TimelinePlayheadProps (line 12) | interface TimelinePlayheadProps { function TimelinePlayhead (line 22) | function TimelinePlayhead({ FILE: apps/web/src/components/editor/panels/timeline/timeline-ruler.tsx type TimelineRulerProps (line 9) | interface TimelineRulerProps { function TimelineRuler (line 20) | function TimelineRuler({ FILE: apps/web/src/components/editor/panels/timeline/timeline-tick.tsx type TimelineTickProps (line 6) | interface TimelineTickProps { function TimelineTick (line 13) | function TimelineTick({ FILE: apps/web/src/components/editor/panels/timeline/timeline-toolbar.tsx function TimelineToolbar (line 40) | function TimelineToolbar({ function ToolbarLeftSection (line 78) | function ToolbarLeftSection() { function SceneSelector (line 164) | function SceneSelector() { function ToolbarRightSection (line 183) | function ToolbarRightSection({ function ToolbarButton (line 249) | function ToolbarButton({ FILE: apps/web/src/components/editor/panels/timeline/timeline-track.tsx type TimelineTrackContentProps (line 13) | interface TimelineTrackContentProps { function TimelineTrackContent (line 38) | function TimelineTrackContent({ FILE: apps/web/src/components/editor/scenes-view.tsx function ScenesView (line 28) | function ScenesView({ children }: { children: React.ReactNode }) { function DeleteDialog (line 175) | function DeleteDialog({ FILE: apps/web/src/components/editor/selection-box.tsx type SelectionBoxProps (line 5) | interface SelectionBoxProps { function SelectionBox (line 12) | function SelectionBox({ FILE: apps/web/src/components/footer.tsx type Category (line 8) | type Category = "resources" | "company"; type FooterLink (line 10) | interface FooterLink { type CategoryLinks (line 15) | type CategoryLinks = Record; function Footer (line 33) | function Footer() { FILE: apps/web/src/components/gitHub-contribute-section.tsx function GitHubContributeSection (line 7) | function GitHubContributeSection({ FILE: apps/web/src/components/header.tsx function Header (line 27) | function Header() { FILE: apps/web/src/components/landing/handlebars.tsx type HandlebarsProps (line 5) | type HandlebarsProps = PropsWithChildren; function Handlebars (line 7) | function Handlebars({ children }: HandlebarsProps) { FILE: apps/web/src/components/landing/hero.tsx function Hero (line 9) | function Hero() { FILE: apps/web/src/components/providers/editor-provider.tsx type EditorProviderProps (line 14) | interface EditorProviderProps { function EditorProvider (line 19) | function EditorProvider({ projectId, children }: EditorProviderProps) { function EditorRuntimeBindings (line 121) | function EditorRuntimeBindings() { FILE: apps/web/src/components/storage-provider.tsx type StorageContextType (line 8) | interface StorageContextType { function useStorage (line 17) | function useStorage() { type StorageProviderProps (line 25) | interface StorageProviderProps { function StorageProvider (line 29) | function StorageProvider({ children }: StorageProviderProps) { FILE: apps/web/src/components/theme-toggle.tsx type ThemeToggleProps (line 9) | interface ThemeToggleProps { function ThemeToggle (line 15) | function ThemeToggle({ FILE: apps/web/src/components/ui/badge.tsx type BadgeProps (line 26) | interface BadgeProps function Badge (line 30) | function Badge({ className, variant, ...props }: BadgeProps) { FILE: apps/web/src/components/ui/breadcrumb.tsx function Breadcrumb (line 6) | function Breadcrumb({ ...props }: React.ComponentProps<"nav">) { function BreadcrumbList (line 10) | function BreadcrumbList({ className, ...props }: React.ComponentProps<"o... function BreadcrumbItem (line 23) | function BreadcrumbItem({ className, ...props }: React.ComponentProps<"l... function BreadcrumbLink (line 33) | function BreadcrumbLink({ function BreadcrumbPage (line 51) | function BreadcrumbPage({ className, ...props }: React.ComponentProps<"s... function BreadcrumbSeparator (line 62) | function BreadcrumbSeparator({ function BreadcrumbEllipsis (line 80) | function BreadcrumbEllipsis({ FILE: apps/web/src/components/ui/button.tsx type ButtonProps (line 39) | interface ButtonProps FILE: apps/web/src/components/ui/calendar.tsx type CalendarProps (line 10) | type CalendarProps = React.ComponentProps; function Calendar (line 12) | function Calendar({ FILE: apps/web/src/components/ui/color-picker.tsx type ColorPickerProps (line 31) | interface ColorPickerProps { FILE: apps/web/src/components/ui/font-picker.tsx constant FONT_TABS (line 31) | const FONT_TABS = [ type FontTab (line 37) | type FontTab = (typeof FONT_TABS)[number]["key"]; constant ROW_HEIGHT (line 39) | const ROW_HEIGHT = 40; constant SPRITE_ROW_HEIGHT (line 40) | const SPRITE_ROW_HEIGHT = 40; constant PREVIEW_SCALE (line 41) | const PREVIEW_SCALE = 0.8; constant LIST_WIDTH (line 42) | const LIST_WIDTH = 288; constant MAX_LIST_HEIGHT (line 43) | const MAX_LIST_HEIGHT = 288; constant OVERSCAN (line 44) | const OVERSCAN = 15; type FontPickerProps (line 46) | interface FontPickerProps { function FontPicker (line 52) | function FontPicker({ function FontSpritePreview (line 247) | function FontSpritePreview({ entry }: { entry: FontAtlasEntry }) { type FontRowProps (line 268) | type FontRowProps = { function FontRow (line 275) | function FontRow({ FILE: apps/web/src/components/ui/form.tsx type FormFieldContextValue (line 20) | type FormFieldContextValue< type FormItemContextValue (line 67) | type FormItemContextValue = { FILE: apps/web/src/components/ui/input-with-back.tsx type InputWithBackProps (line 9) | interface InputWithBackProps { function InputWithBack (line 18) | function InputWithBack({ FILE: apps/web/src/components/ui/input.tsx type InputProps (line 33) | interface InputProps FILE: apps/web/src/components/ui/number-field.tsx constant DRAG_SENSITIVITIES (line 10) | const DRAG_SENSITIVITIES = { type DragSensitivity (line 15) | type DragSensitivity = "default" | "slow"; type NumberFieldProps (line 17) | interface NumberFieldProps function NumberField (line 28) | function NumberField({ FILE: apps/web/src/components/ui/prose.tsx type ProseProps (line 7) | type ProseProps = React.HTMLAttributes & { type HastTextNode (line 12) | type HastTextNode = { type HastElementNode (line 17) | type HastElementNode = { type HastRootNode (line 24) | type HastRootNode = { type HastNode (line 29) | type HastNode = HastTextNode | HastElementNode | HastRootNode; function toReactProps (line 31) | function toReactProps({ function renderHastNode (line 69) | function renderHastNode({ function renderHtmlNodes (line 91) | function renderHtmlNodes({ html }: { html: string }): React.ReactNode { function Prose (line 98) | function Prose({ children, html, className }: ProseProps) { FILE: apps/web/src/components/ui/react-markdown-wrapper.tsx function ReactMarkdownWrapper (line 4) | function ReactMarkdownWrapper({ children }: { children: string }) { FILE: apps/web/src/components/ui/sheet.tsx type SheetContentProps (line 52) | interface SheetContentProps FILE: apps/web/src/components/ui/skeleton.tsx function Skeleton (line 3) | function Skeleton({ FILE: apps/web/src/components/ui/sonner.tsx type ToasterProps (line 6) | type ToasterProps = React.ComponentProps; FILE: apps/web/src/components/ui/spinner.tsx function Spinner (line 5) | function Spinner({ className, ...props }: Omit; type ToastActionElement (line 117) | type ToastActionElement = React.ReactElement; FILE: apps/web/src/components/ui/tooltip.tsx type TooltipContentProps (line 41) | interface TooltipContentProps FILE: apps/web/src/constants/animation-constants.ts constant TIME_EPSILON_SECONDS (line 1) | const TIME_EPSILON_SECONDS = 1 / 1000; constant MIN_TRANSFORM_SCALE (line 2) | const MIN_TRANSFORM_SCALE = 0.01; FILE: apps/web/src/constants/editor-constants.ts constant PANEL_CONFIG (line 1) | const PANEL_CONFIG = { FILE: apps/web/src/constants/export-constants.ts constant DEFAULT_EXPORT_OPTIONS (line 3) | const DEFAULT_EXPORT_OPTIONS = { constant EXPORT_MIME_TYPES (line 9) | const EXPORT_MIME_TYPES = { FILE: apps/web/src/constants/font-constants.ts constant DEFAULT_FONT (line 1) | const DEFAULT_FONT = "Arial"; constant SYSTEM_FONTS (line 3) | const SYSTEM_FONTS = new Set([ FILE: apps/web/src/constants/language-constants.ts constant LANGUAGES (line 1) | const LANGUAGES = [ FILE: apps/web/src/constants/project-constants.ts constant DEFAULT_CANVAS_PRESETS (line 3) | const DEFAULT_CANVAS_PRESETS: TCanvasSize[] = [ constant FPS_PRESETS (line 10) | const FPS_PRESETS = [ constant BLUR_INTENSITY_PRESETS (line 18) | const BLUR_INTENSITY_PRESETS: { label: string; value: number }[] = [ constant DEFAULT_CANVAS_SIZE (line 24) | const DEFAULT_CANVAS_SIZE: TCanvasSize = { width: 1920, height: 1080 }; constant DEFAULT_FPS (line 25) | const DEFAULT_FPS = 30; constant DEFAULT_BLUR_INTENSITY (line 26) | const DEFAULT_BLUR_INTENSITY = 8; constant DEFAULT_COLOR (line 27) | const DEFAULT_COLOR = "#000000"; FILE: apps/web/src/constants/site-constants.ts constant SITE_URL (line 3) | const SITE_URL = "https://opencut.app"; constant SITE_INFO (line 5) | const SITE_INFO = { type ExternalTool (line 15) | type ExternalTool = { constant EXTERNAL_TOOLS (line 22) | const EXTERNAL_TOOLS: ExternalTool[] = [ constant DEFAULT_LOGO_URL (line 38) | const DEFAULT_LOGO_URL = "/logos/opencut/svg/logo.svg"; constant SOCIAL_LINKS (line 40) | const SOCIAL_LINKS = { type Sponsor (line 46) | type Sponsor = { constant SPONSORS (line 54) | const SPONSORS: Sponsor[] = [ FILE: apps/web/src/constants/sticker-constants.ts constant STICKER_CATEGORIES (line 1) | const STICKER_CATEGORIES = { FILE: apps/web/src/constants/text-constants.ts constant MIN_FONT_SIZE (line 8) | const MIN_FONT_SIZE = 5; constant MAX_FONT_SIZE (line 9) | const MAX_FONT_SIZE = 300; constant FONT_SIZE_SCALE_REFERENCE (line 15) | const FONT_SIZE_SCALE_REFERENCE = 90; constant DEFAULT_LETTER_SPACING (line 17) | const DEFAULT_LETTER_SPACING = 0; constant DEFAULT_LINE_HEIGHT (line 18) | const DEFAULT_LINE_HEIGHT = 1.2; constant CORNER_RADIUS_MIN (line 20) | const CORNER_RADIUS_MIN = 0; constant CORNER_RADIUS_MAX (line 21) | const CORNER_RADIUS_MAX = 100; constant DEFAULT_TEXT_BACKGROUND (line 23) | const DEFAULT_TEXT_BACKGROUND = { constant DEFAULT_TEXT_ELEMENT (line 33) | const DEFAULT_TEXT_ELEMENT: Omit = { FILE: apps/web/src/constants/timeline-constants.tsx constant DEFAULT_TRANSFORM (line 13) | const DEFAULT_TRANSFORM: Transform = { constant DEFAULT_OPACITY (line 19) | const DEFAULT_OPACITY = 1; constant DEFAULT_BLEND_MODE (line 20) | const DEFAULT_BLEND_MODE: BlendMode = "normal"; constant DEFAULT_BOOKMARK_COLOR (line 21) | const DEFAULT_BOOKMARK_COLOR = "#009dff"; constant TRACK_CONFIG (line 23) | const TRACK_CONFIG: Record< constant TRACK_GAP (line 84) | const TRACK_GAP = 4; constant DRAG_THRESHOLD_PX (line 86) | const DRAG_THRESHOLD_PX = 5; constant TIMELINE_CONSTANTS (line 88) | const TIMELINE_CONSTANTS = { constant DEFAULT_TIMELINE_VIEW_STATE (line 98) | const DEFAULT_TIMELINE_VIEW_STATE: TTimelineViewState = { FILE: apps/web/src/constants/transcription-constants.ts constant SUPPORTED_TRANSCRIPTION_LANGS (line 8) | const SUPPORTED_TRANSCRIPTION_LANGS: ReadonlyArray = [ constant TRANSCRIPTION_LANGUAGES (line 20) | const TRANSCRIPTION_LANGUAGES = LANGUAGES.filter((language) => constant TRANSCRIPTION_MODELS (line 24) | const TRANSCRIPTION_MODELS: TranscriptionModel[] = [ constant DEFAULT_TRANSCRIPTION_MODEL (line 51) | const DEFAULT_TRANSCRIPTION_MODEL: TranscriptionModelId = constant DEFAULT_CHUNK_LENGTH_SECONDS (line 54) | const DEFAULT_CHUNK_LENGTH_SECONDS = 30; constant DEFAULT_STRIDE_SECONDS (line 55) | const DEFAULT_STRIDE_SECONDS = 5; constant DEFAULT_WORDS_PER_CAPTION (line 57) | const DEFAULT_WORDS_PER_CAPTION = 3; constant MIN_CAPTION_DURATION_SECONDS (line 58) | const MIN_CAPTION_DURATION_SECONDS = 0.8; FILE: apps/web/src/core/index.ts class EditorCore (line 13) | class EditorCore { method constructor (line 27) | private constructor() { method getInstance (line 42) | static getInstance(): EditorCore { method reset (line 49) | static reset(): void { FILE: apps/web/src/core/managers/audio-manager.ts class AudioManager (line 12) | class AudioManager { method constructor (line 35) | constructor(private editor: EditorCore) { method dispose (line 48) | dispose(): void { method ensureAudioContext (line 111) | private ensureAudioContext(): AudioContext | null { method updateGain (line 122) | private updateGain(): void { method getPlaybackTime (line 127) | private getPlaybackTime(): number { method startPlayback (line 134) | private async startPlayback({ time }: { time: number }): Promise { method scheduleUpcomingClips (line 167) | private scheduleUpcomingClips(): void { method stopPlayback (line 190) | private stopPlayback(): void { method runClipIterator (line 211) | private async runClipIterator({ method waitUntilCaughtUp (line 314) | private waitUntilCaughtUp({ method disposeSinks (line 338) | private disposeSinks(): void { method getAudioSink (line 352) | private async getAudioSink({ FILE: apps/web/src/core/managers/commands.ts class CommandManager (line 3) | class CommandManager { method execute (line 7) | execute({ command }: { command: Command }): Command { method push (line 14) | push({ command }: { command: Command }): void { method undo (line 19) | undo(): void { method redo (line 28) | redo(): void { method canUndo (line 37) | canUndo(): boolean { method canRedo (line 41) | canRedo(): boolean { method clear (line 45) | clear(): void { FILE: apps/web/src/core/managers/media-manager.ts class MediaManager (line 8) | class MediaManager { method constructor (line 13) | constructor(private editor: EditorCore) {} method addMediaAsset (line 15) | async addMediaAsset({ method removeMediaAsset (line 39) | async removeMediaAsset({ method loadProjectMedia (line 82) | async loadProjectMedia({ projectId }: { projectId: string }): Promise<... method clearProjectMedia (line 100) | async clearProjectMedia({ projectId }: { projectId: string }): Promise... method clearAllAssets (line 125) | clearAllAssets(): void { method getAssets (line 141) | getAssets(): MediaAsset[] { method setAssets (line 145) | setAssets({ assets }: { assets: MediaAsset[] }): void { method isLoadingMedia (line 150) | isLoadingMedia(): boolean { method subscribe (line 154) | subscribe(listener: () => void): () => void { method notify (line 159) | private notify(): void { FILE: apps/web/src/core/managers/playback-manager.ts class PlaybackManager (line 3) | class PlaybackManager { method constructor (line 14) | constructor(private editor: EditorCore) {} method play (line 16) | play(): void { method pause (line 30) | pause(): void { method toggle (line 36) | toggle(): void { method seek (line 44) | seek({ time }: { time: number }): void { method setVolume (line 56) | setVolume({ volume }: { volume: number }): void { method mute (line 66) | mute(): void { method unmute (line 75) | unmute(): void { method toggleMute (line 81) | toggleMute(): void { method getIsPlaying (line 89) | getIsPlaying(): boolean { method getCurrentTime (line 93) | getCurrentTime(): number { method getVolume (line 97) | getVolume(): number { method isMuted (line 101) | isMuted(): boolean { method setScrubbing (line 105) | setScrubbing({ isScrubbing }: { isScrubbing: boolean }): void { method getIsScrubbing (line 110) | getIsScrubbing(): boolean { method subscribe (line 114) | subscribe(listener: () => void): () => void { method notify (line 119) | private notify(): void { method startTimer (line 123) | private startTimer(): void { method stopTimer (line 132) | private stopTimer(): void { FILE: apps/web/src/core/managers/project-manager.ts type MigrationState (line 33) | interface MigrationState { class ProjectManager (line 40) | class ProjectManager { method constructor (line 61) | constructor(private editor: EditorCore) {} method ensureStorageMigrations (line 63) | private async ensureStorageMigrations(): Promise { method createNewProject (line 82) | async createNewProject({ name }: { name: string }): Promise { method loadProject (line 126) | async loadProject({ id }: { id: string }): Promise { method saveCurrentProject (line 176) | async saveCurrentProject(): Promise { method export (line 199) | async export({ options }: { options: ExportOptions }): Promise { method deleteProjects (line 256) | async deleteProjects({ ids }: { ids: string[] }): Promise { method closeProject (line 290) | closeProject(): void { method renameProject (line 298) | async renameProject({ method duplicateProjects (line 340) | async duplicateProjects({ ids }: { ids: string[] }): Promise { method updateSettings (line 466) | async updateSettings({ method updateThumbnail (line 484) | async updateThumbnail({ thumbnail }: { thumbnail: string }): Promise { method getFilteredAndSortedProjects (line 510) | getFilteredAndSortedProjects({ method isInvalidProjectId (line 543) | isInvalidProjectId({ id }: { id: string }): boolean { method markProjectIdAsInvalid (line 547) | markProjectIdAsInvalid({ id }: { id: string }): void { method clearInvalidProjectIds (line 552) | clearInvalidProjectIds(): void { method getActive (line 557) | getActive(): TProject { method getActiveOrNull (line 569) | getActiveOrNull(): TProject | null { method getTimelineViewState (line 573) | getTimelineViewState(): TTimelineViewState { method setTimelineViewState (line 577) | setTimelineViewState({ viewState }: { viewState: TTimelineViewState })... method getSavedProjects (line 586) | getSavedProjects(): TProjectMetadata[] { method getIsLoading (line 590) | getIsLoading(): boolean { method getIsInitialized (line 594) | getIsInitialized(): boolean { method getMigrationState (line 598) | getMigrationState(): MigrationState { method setActiveProject (line 602) | setActiveProject({ project }: { project: TProject }): void { method subscribe (line 607) | subscribe(listener: () => void): () => void { method updateThumbnailFromTimeline (line 612) | private async updateThumbnailFromTimeline(): Promise { method updateMetadata (line 653) | private updateMetadata(project: TProject): void { method notify (line 667) | private notify(): void { FILE: apps/web/src/core/managers/renderer-manager.ts class RendererManager (line 11) | class RendererManager { method constructor (line 15) | constructor(private editor: EditorCore) {} method setRenderTree (line 17) | setRenderTree({ renderTree }: { renderTree: RootNode | null }): void { method getRenderTree (line 22) | getRenderTree(): RootNode | null { method saveSnapshot (line 26) | async saveSnapshot(): Promise<{ success: boolean; error?: string }> { method exportProject (line 89) | async exportProject({ method subscribe (line 190) | subscribe(listener: () => void): () => void { method notify (line 195) | private notify(): void { FILE: apps/web/src/core/managers/save-manager.ts type SaveManagerOptions (line 3) | type SaveManagerOptions = { class SaveManager (line 7) | class SaveManager { method constructor (line 15) | constructor( method start (line 22) | start(): void { method stop (line 35) | stop(): void { method pause (line 43) | pause(): void { method resume (line 47) | resume(): void { method markDirty (line 54) | markDirty({ force = false }: { force?: boolean } = {}): void { method flush (line 60) | async flush(): Promise { method getIsDirty (line 65) | getIsDirty(): boolean { method queueSave (line 69) | private queueSave(): void { method saveNow (line 79) | private async saveNow(): Promise { method clearTimer (line 102) | private clearTimer(): void { FILE: apps/web/src/core/managers/scenes-manager.ts class ScenesManager (line 26) | class ScenesManager { method constructor (line 31) | constructor(private editor: EditorCore) {} method createScene (line 33) | async createScene({ method deleteScene (line 49) | async deleteScene({ sceneId }: { sceneId: string }): Promise { method renameScene (line 69) | async renameScene({ method switchToScene (line 84) | async switchToScene({ sceneId }: { sceneId: string }): Promise { method toggleBookmark (line 110) | async toggleBookmark({ time }: { time: number }): Promise { method isBookmarked (line 115) | isBookmarked({ time }: { time: number }): boolean { method removeBookmark (line 129) | async removeBookmark({ time }: { time: number }): Promise { method updateBookmark (line 134) | async updateBookmark({ method moveBookmark (line 145) | async moveBookmark({ method getBookmarkAtTime (line 156) | getBookmarkAtTime({ time }: { time: number }) { method loadProjectScenes (line 173) | async loadProjectScenes({ projectId }: { projectId: string }): Promise... method initializeScenes (line 214) | initializeScenes({ method clearScenes (line 254) | clearScenes(): void { method getActiveScene (line 260) | getActiveScene(): TScene { method getScenes (line 267) | getScenes(): TScene[] { method setScenes (line 271) | setScenes({ method subscribe (line 299) | subscribe(listener: () => void): () => void { method notify (line 304) | private notify(): void { method updateSceneTracks (line 308) | updateSceneTracks({ tracks }: { tracks: TimelineTrack[] }): void { method ensureScenesHaveMainTrack (line 337) | private ensureScenesHaveMainTrack({ scenes }: { scenes: TScene[] }): { FILE: apps/web/src/core/managers/selection-manager.ts type ElementRef (line 4) | type ElementRef = { trackId: string; elementId: string }; class SelectionManager (line 6) | class SelectionManager { method constructor (line 12) | constructor(editor: EditorCore) { method getSelectedElements (line 16) | getSelectedElements(): ElementRef[] { method getSelectedKeyframes (line 20) | getSelectedKeyframes(): SelectedKeyframeRef[] { method getKeyframeSelectionAnchor (line 24) | getKeyframeSelectionAnchor(): SelectedKeyframeRef | null { method setSelectedElements (line 28) | setSelectedElements({ elements }: { elements: ElementRef[] }): void { method setSelectedKeyframes (line 35) | setSelectedKeyframes({ method clearSelection (line 51) | clearSelection(): void { method clearKeyframeSelection (line 58) | clearKeyframeSelection(): void { method subscribe (line 64) | subscribe(listener: () => void): () => void { method notify (line 69) | private notify(): void { FILE: apps/web/src/core/managers/timeline-manager.ts class TimelineManager (line 47) | class TimelineManager { method constructor (line 51) | constructor(private editor: EditorCore) {} method addTrack (line 53) | addTrack({ type, index }: { type: TrackType; index?: number }): string { method removeTrack (line 59) | removeTrack({ trackId }: { trackId: string }): void { method insertElement (line 64) | insertElement({ element, placement }: InsertElementParams): void { method updateElementTrim (line 69) | updateElementTrim({ method updateElementDuration (line 101) | updateElementDuration({ method updateElementStartTime (line 124) | updateElementStartTime({ method moveElement (line 138) | moveElement({ method toggleTrackMute (line 164) | toggleTrackMute({ trackId }: { trackId: string }): void { method toggleTrackVisibility (line 169) | toggleTrackVisibility({ trackId }: { trackId: string }): void { method splitElements (line 174) | splitElements({ method getTotalDuration (line 195) | getTotalDuration(): number { method getTrackById (line 199) | getTrackById({ trackId }: { trackId: string }): TimelineTrack | null { method getElementsWithTracks (line 203) | getElementsWithTracks({ method pasteAtTime (line 225) | pasteAtTime({ method deleteElements (line 237) | deleteElements({ method updateElements (line 248) | updateElements({ method addClipEffect (line 276) | addClipEffect({ method removeClipEffect (line 294) | removeClipEffect({ method updateClipEffectParams (line 311) | updateClipEffectParams({ method toggleClipEffect (line 337) | toggleClipEffect({ method reorderClipEffects (line 354) | reorderClipEffects({ method upsertKeyframes (line 374) | upsertKeyframes({ method removeKeyframes (line 416) | removeKeyframes({ method retimeKeyframe (line 444) | retimeKeyframe({ method upsertEffectParamKeyframe (line 467) | upsertEffectParamKeyframe({ method removeEffectParamKeyframe (line 499) | removeEffectParamKeyframe({ method isPreviewActive (line 522) | isPreviewActive(): boolean { method previewElements (line 526) | previewElements({ method commitPreview (line 553) | commitPreview(): void { method discardPreview (line 561) | discardPreview(): void { method duplicateElements (line 568) | duplicateElements({ method toggleElementsVisibility (line 578) | toggleElementsVisibility({ method toggleElementsMuted (line 587) | toggleElementsMuted({ method getTracks (line 596) | getTracks(): TimelineTrack[] { method subscribe (line 600) | subscribe(listener: () => void): () => void { method notify (line 605) | private notify(): void { method updateTracks (line 609) | updateTracks(newTracks: TimelineTrack[]): void { FILE: apps/web/src/hooks/actions/use-action-handler.ts function useActionHandler (line 11) | function useActionHandler( FILE: apps/web/src/hooks/actions/use-editor-actions.ts function useEditorActions (line 10) | function useEditorActions() { FILE: apps/web/src/hooks/storage/use-local-storage.ts function useLocalStorage (line 3) | function useLocalStorage({ FILE: apps/web/src/hooks/timeline/element/use-element-interaction.ts type UseElementInteractionProps (line 32) | interface UseElementInteractionProps { constant MOUSE_BUTTON_RIGHT (line 42) | const MOUSE_BUTTON_RIGHT = 2; type PendingDragState (line 56) | interface PendingDragState { function getClickOffsetTime (line 65) | function getClickOffsetTime({ function getVerticalDragDirection (line 78) | function getVerticalDragDirection({ function getDragDropTarget (line 90) | function getDragDropTarget({ type StartDragParams (line 149) | interface StartDragParams function useElementInteraction (line 158) | function useElementInteraction({ FILE: apps/web/src/hooks/timeline/element/use-element-resize.ts type ResizeState (line 14) | interface ResizeState { type UseTimelineElementResizeProps (line 24) | interface UseTimelineElementResizeProps { function useTimelineElementResize (line 32) | function useTimelineElementResize({ FILE: apps/web/src/hooks/timeline/element/use-element-selection.ts type ElementRef (line 4) | type ElementRef = { trackId: string; elementId: string }; function useElementSelection (line 6) | function useElementSelection() { FILE: apps/web/src/hooks/timeline/element/use-keyframe-drag.ts type KeyframeDragState (line 21) | interface KeyframeDragState { type PendingKeyframeDrag (line 33) | interface PendingKeyframeDrag { function useKeyframeDrag (line 38) | function useKeyframeDrag({ FILE: apps/web/src/hooks/timeline/element/use-keyframe-selection.ts function getSelectedKeyframeId (line 5) | function getSelectedKeyframeId({ function mergeUniqueKeyframes (line 13) | function mergeUniqueKeyframes({ function useKeyframeSelection (line 25) | function useKeyframeSelection() { FILE: apps/web/src/hooks/timeline/use-bookmark-drag.ts type BookmarkDragState (line 20) | interface BookmarkDragState { type PendingBookmarkDrag (line 26) | interface PendingBookmarkDrag { type UseBookmarkDragProps (line 32) | interface UseBookmarkDragProps { function useBookmarkDrag (line 39) | function useBookmarkDrag({ FILE: apps/web/src/hooks/timeline/use-edge-auto-scroll.ts type UseEdgeAutoScrollParams (line 3) | interface UseEdgeAutoScrollParams { function useEdgeAutoScroll (line 13) | function useEdgeAutoScroll({ FILE: apps/web/src/hooks/timeline/use-scroll-position.ts type UseScrollPositionReturn (line 3) | interface UseScrollPositionReturn { function useScrollPosition (line 8) | function useScrollPosition({ FILE: apps/web/src/hooks/timeline/use-scroll-sync.ts type UseScrollSyncProps (line 3) | interface UseScrollSyncProps { function useScrollSync (line 10) | function useScrollSync({ FILE: apps/web/src/hooks/timeline/use-selection-box.ts type UseSelectionBoxProps (line 6) | interface UseSelectionBoxProps { type SelectionBoxState (line 17) | interface SelectionBoxState { type SelectionRectangle (line 23) | interface SelectionRectangle { function getNormalizedRectangle (line 30) | function getNormalizedRectangle({ function getSelectionRectangleInContent (line 45) | function getSelectionRectangleInContent({ function isRectangleIntersecting (line 75) | function isRectangleIntersecting({ function useSelectionBox (line 90) | function useSelectionBox({ FILE: apps/web/src/hooks/timeline/use-snap-indicator-position.ts type UseSnapIndicatorPositionParams (line 5) | interface UseSnapIndicatorPositionParams { type SnapIndicatorPosition (line 14) | interface SnapIndicatorPosition { function useSnapIndicatorPosition (line 20) | function useSnapIndicatorPosition({ FILE: apps/web/src/hooks/timeline/use-timeline-drag-drop.ts type UseTimelineDragDropProps (line 26) | interface UseTimelineDragDropProps { function useTimelineDragDrop (line 33) | function useTimelineDragDrop({ FILE: apps/web/src/hooks/timeline/use-timeline-playhead.ts type UseTimelinePlayheadProps (line 12) | interface UseTimelinePlayheadProps { function useTimelinePlayhead (line 20) | function useTimelinePlayhead({ FILE: apps/web/src/hooks/timeline/use-timeline-seek.ts type UseTimelineSeekProps (line 7) | interface UseTimelineSeekProps { function resetMouseTracking (line 19) | function resetMouseTracking({ function setMouseTracking (line 37) | function setMouseTracking({ function useTimelineSeek (line 57) | function useTimelineSeek({ FILE: apps/web/src/hooks/timeline/use-timeline-zoom.ts type UseTimelineZoomProps (line 14) | interface UseTimelineZoomProps { type UseTimelineZoomReturn (line 24) | interface UseTimelineZoomReturn { function useTimelineZoom (line 31) | function useTimelineZoom({ FILE: apps/web/src/hooks/use-container-size.ts function useContainerSize (line 3) | function useContainerSize({ FILE: apps/web/src/hooks/use-editor.ts function useEditor (line 4) | function useEditor(): EditorCore { FILE: apps/web/src/hooks/use-effect-preview.ts function useEffectPreview (line 5) | function useEffectPreview({ FILE: apps/web/src/hooks/use-file-upload.ts type UseFileUploadOptions (line 4) | interface UseFileUploadOptions { function containsFiles (line 10) | function containsFiles(dataTransfer: DataTransfer): boolean { function useFileUpload (line 14) | function useFileUpload({ FILE: apps/web/src/hooks/use-focus-lock.ts type FocusLockCursor (line 3) | type FocusLockCursor = "text" | "default" | "pointer" | "crosshair"; constant DATA_ATTR (line 5) | const DATA_ATTR = "data-focus-locked"; function buildFocusLockCSS (line 7) | function buildFocusLockCSS({ function useFocusLock (line 28) | function useFocusLock({ FILE: apps/web/src/hooks/use-fullscreen.ts function useFullscreen (line 3) | function useFullscreen({ FILE: apps/web/src/hooks/use-infinite-scroll.ts type UseInfiniteScrollOptions (line 3) | interface UseInfiniteScrollOptions { function useInfiniteScroll (line 11) | function useInfiniteScroll({ FILE: apps/web/src/hooks/use-keybindings.ts function useKeybindingsListener (line 10) | function useKeybindingsListener() { function useKeybindingDisabler (line 68) | function useKeybindingDisabler() { FILE: apps/web/src/hooks/use-keyboard-shortcuts-help.ts type KeyboardShortcut (line 11) | interface KeyboardShortcut { function formatKey (line 20) | function formatKey({ key }: { key: string }): string { function useKeyboardShortcutsHelp (line 38) | function useKeyboardShortcutsHelp() { function isAction (line 80) | function isAction(id: string): id is TAction { FILE: apps/web/src/hooks/use-mobile.ts constant MOBILE_BREAKPOINT (line 3) | const MOBILE_BREAKPOINT = 768; function useIsMobile (line 5) | function useIsMobile() { FILE: apps/web/src/hooks/use-paste-media.ts constant MEDIA_MIME_PREFIXES (line 13) | const MEDIA_MIME_PREFIXES: MediaType[] = ["image", "video", "audio"]; function isMediaMimeType (line 15) | function isMediaMimeType({ type }: { type: string }): boolean { function extractMediaFilesFromClipboard (line 19) | function extractMediaFilesFromClipboard({ function usePasteMedia (line 37) | function usePasteMedia() { FILE: apps/web/src/hooks/use-preview-interaction.ts constant MIN_DRAG_DISTANCE (line 18) | const MIN_DRAG_DISTANCE = 0.5; type DragState (line 20) | interface DragState { function usePreviewInteraction (line 34) | function usePreviewInteraction({ FILE: apps/web/src/hooks/use-raf-loop.ts function useRafLoop (line 3) | function useRafLoop(callback: ({ time }: { time: number }) => void) { FILE: apps/web/src/hooks/use-reveal-item.ts function useRevealItem (line 3) | function useRevealItem( FILE: apps/web/src/hooks/use-shift-key.ts function useShiftKey (line 3) | function useShiftKey(): RefObject { FILE: apps/web/src/hooks/use-sound-search.ts function useSoundSearch (line 4) | function useSoundSearch({ FILE: apps/web/src/hooks/use-transform-handles.ts type Corner (line 28) | type Corner = "top-left" | "top-right" | "bottom-left" | "bottom-right"; type HandleType (line 29) | type HandleType = Corner | "rotation"; type ScaleState (line 31) | interface ScaleState { type RotationState (line 44) | interface RotationState { function areSnapLinesEqual (line 53) | function areSnapLinesEqual({ function getCornerDistance (line 75) | function getCornerDistance({ function useTransformHandles (line 104) | function useTransformHandles({ FILE: apps/web/src/lib/actions/definitions.ts type TActionCategory (line 3) | type TActionCategory = type TActionDefinition (line 12) | interface TActionDefinition { constant ACTIONS (line 19) | const ACTIONS = { type TAction (line 151) | type TAction = keyof typeof ACTIONS; function getActionDefinition (line 153) | function getActionDefinition({ action }: { action: TAction }): TActionDe... function getDefaultShortcuts (line 157) | function getDefaultShortcuts(): Record { FILE: apps/web/src/lib/actions/registry.ts type ActionHandler (line 11) | type ActionHandler = (arg: unknown, trigger?: TInvocationTrigger) => void; function bindAction (line 14) | function bindAction( function unbindAction (line 27) | function unbindAction( type InvokeActionFunc (line 42) | type InvokeActionFunc = { FILE: apps/web/src/lib/actions/types.ts type TActionArgsMap (line 6) | type TActionArgsMap = { type TKeysWithValueUndefined (line 13) | type TKeysWithValueUndefined = { type TActionWithArgs (line 17) | type TActionWithArgs = keyof TActionArgsMap; type TActionWithOptionalArgs (line 19) | type TActionWithOptionalArgs = type TActionWithNoArgs (line 23) | type TActionWithNoArgs = Exclude; type TArgOfAction (line 25) | type TArgOfAction = A extends TActionWithArgs type TActionFunc (line 29) | type TActionFunc = A extends TActionWithArgs type TInvocationTrigger (line 33) | type TInvocationTrigger = "keypress" | "mouseclick"; type TBoundActionList (line 35) | type TBoundActionList = { type TActionHandlerOptions (line 39) | type TActionHandlerOptions = FILE: apps/web/src/lib/animation/color-channel.ts function getColorChannelForPath (line 7) | function getColorChannelForPath({ FILE: apps/web/src/lib/animation/effect-param-channel.ts constant EFFECT_PARAM_PATH_PREFIX (line 14) | const EFFECT_PARAM_PATH_PREFIX = "effects."; constant EFFECT_PARAM_PATH_SUFFIX (line 15) | const EFFECT_PARAM_PATH_SUFFIX = ".params."; function buildEffectParamPath (line 17) | function buildEffectParamPath({ function resolveEffectParamsAtTime (line 27) | function resolveEffectParamsAtTime({ constant EMPTY_NUMBER_CHANNEL (line 55) | const EMPTY_NUMBER_CHANNEL: NumberAnimationChannel = { function upsertEffectParamKeyframe (line 60) | function upsertEffectParamKeyframe({ function removeEffectParamKeyframe (line 98) | function removeEffectParamKeyframe({ FILE: apps/web/src/lib/animation/interpolation.ts function byTimeAscending (line 11) | function byTimeAscending({ function isWithinTimePair (line 21) | function isWithinTimePair({ function clamp01 (line 36) | function clamp01({ value }: { value: number }): number { function parseHexChannel (line 40) | function parseHexChannel({ hex }: { hex: string }): number | null { function parseHexColor (line 45) | function parseHexColor({ function formatRgbaColor (line 95) | function formatRgbaColor({ function lerpNumber (line 113) | function lerpNumber({ function interpolateColor (line 125) | function interpolateColor({ function normalizeChannel (line 164) | function normalizeChannel({ function evaluateChannelValueAtTime (line 180) | function evaluateChannelValueAtTime({ function getPosts (line 38) | async function getPosts() { function getTags (line 42) | async function getTags() { function getSinglePost (line 46) | async function getSinglePost({ slug }: { slug: string }) { function getCategories (line 50) | async function getCategories() { function getAuthors (line 54) | async function getAuthors() { function processHtmlContent (line 58) | async function processHtmlContent({ FILE: apps/web/src/lib/commands/__tests__/keyframe-aware-commands.test.ts type MockEditor (line 13) | type MockEditor = { function mockEditorCore (line 30) | function mockEditorCore({ editor }: { editor: MockEditor }): void { function restoreEditorCore (line 38) | function restoreEditorCore(): void { function buildVideoElement (line 46) | function buildVideoElement(): VideoElement { function buildTracks (line 73) | function buildTracks({ element }: { element: VideoElement }): TimelineTr... FILE: apps/web/src/lib/commands/base-command.ts method undo (line 4) | undo(): void { method redo (line 8) | redo(): void { FILE: apps/web/src/lib/commands/batch-command.ts class BatchCommand (line 3) | class BatchCommand extends Command { method constructor (line 4) | constructor(private commands: Command[]) { method execute (line 8) | execute(): void { method undo (line 14) | undo(): void { method redo (line 20) | redo(): void { FILE: apps/web/src/lib/commands/media/add-media-asset.ts class AddMediaAssetCommand (line 7) | class AddMediaAssetCommand extends Command { method constructor (line 12) | constructor( method execute (line 20) | execute(): void { method undo (line 43) | undo(): void { method getAssetId (line 58) | getAssetId(): string { FILE: apps/web/src/lib/commands/media/remove-media-asset.ts class RemoveMediaAssetCommand (line 9) | class RemoveMediaAssetCommand extends Command { method constructor (line 14) | constructor( method execute (line 21) | execute(): void { method undo (line 63) | undo(): void { FILE: apps/web/src/lib/commands/preview-tracker.ts class PreviewTracker (line 1) | class PreviewTracker { method begin (line 4) | begin({ state }: { state: T }): void { method isActive (line 10) | isActive(): boolean { method getSnapshot (line 14) | getSnapshot(): T | null { method end (line 18) | end(): T | null { FILE: apps/web/src/lib/commands/project/update-project-settings.ts class UpdateProjectSettingsCommand (line 5) | class UpdateProjectSettingsCommand extends Command { method constructor (line 9) | constructor(private updates: Partial) { method execute (line 13) | execute(): void { method undo (line 31) | undo(): void { FILE: apps/web/src/lib/commands/scene/create-scene.ts class CreateSceneCommand (line 6) | class CreateSceneCommand extends Command { method constructor (line 10) | constructor( method execute (line 17) | execute(): void { method undo (line 30) | undo(): void { method getSceneId (line 37) | getSceneId(): string { FILE: apps/web/src/lib/commands/scene/delete-scene.ts class DeleteSceneCommand (line 6) | class DeleteSceneCommand extends Command { method constructor (line 11) | constructor(private sceneId: string) { method execute (line 15) | execute(): void { method undo (line 50) | undo(): void { FILE: apps/web/src/lib/commands/scene/move-bookmark.ts class MoveBookmarkCommand (line 7) | class MoveBookmarkCommand extends Command { method constructor (line 10) | constructor( method execute (line 17) | execute(): void { method undo (line 53) | undo(): void { FILE: apps/web/src/lib/commands/scene/remove-bookmark.ts class RemoveBookmarkCommand (line 10) | class RemoveBookmarkCommand extends Command { method constructor (line 14) | constructor(private time: number) { method execute (line 18) | execute(): void { method undo (line 53) | undo(): void { FILE: apps/web/src/lib/commands/scene/rename-scene.ts class RenameSceneCommand (line 6) | class RenameSceneCommand extends Command { method constructor (line 10) | constructor( method execute (line 17) | execute(): void { method undo (line 40) | undo(): void { FILE: apps/web/src/lib/commands/scene/toggle-bookmark.ts class ToggleBookmarkCommand (line 7) | class ToggleBookmarkCommand extends Command { method constructor (line 11) | constructor(private time: number) { method execute (line 15) | execute(): void { method undo (line 46) | undo(): void { FILE: apps/web/src/lib/commands/scene/update-bookmark.ts class UpdateBookmarkCommand (line 7) | class UpdateBookmarkCommand extends Command { method constructor (line 10) | constructor( method execute (line 17) | execute(): void { method undo (line 49) | undo(): void { FILE: apps/web/src/lib/commands/timeline/clipboard/paste.ts class PasteCommand (line 18) | class PasteCommand extends Command { method constructor (line 23) | constructor( method execute (line 30) | execute(): void { method undo (line 130) | undo(): void { method getPastedElements (line 140) | getPastedElements(): { trackId: string; elementId: string }[] { function groupClipboardItemsByTrackId (line 145) | function groupClipboardItemsByTrackId({ function buildPastedElements (line 160) | function buildPastedElements({ function resolveTargetTrackIndex (line 190) | function resolveTargetTrackIndex({ function resolveInsertIndexForNewTrack (line 235) | function resolveInsertIndexForNewTrack({ function canPlaceElementsOnTrack (line 258) | function canPlaceElementsOnTrack({ function buildTrackWithElements (line 280) | function buildTrackWithElements({ FILE: apps/web/src/lib/commands/timeline/element/delete-elements.ts class DeleteElementsCommand (line 6) | class DeleteElementsCommand extends Command { method constructor (line 11) | constructor({ method execute (line 23) | execute(): void { method undo (line 73) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/duplicate-elements.ts type DuplicateElementsParams (line 11) | interface DuplicateElementsParams { class DuplicateElementsCommand (line 15) | class DuplicateElementsCommand extends Command { method constructor (line 21) | constructor({ elements }: DuplicateElementsParams) { method execute (line 26) | execute(): void { method undo (line 94) | undo(): void { method getDuplicatedElements (line 104) | getDuplicatedElements(): { trackId: string; elementId: string }[] { function buildDuplicateElement (line 109) | function buildDuplicateElement({ FILE: apps/web/src/lib/commands/timeline/element/effects/add-effect.ts function addEffectToElement (line 7) | function addEffectToElement({ class AddClipEffectCommand (line 19) | class AddClipEffectCommand extends Command { method constructor (line 26) | constructor({ method execute (line 41) | execute(): void { method undo (line 64) | undo(): void { method getEffectId (line 71) | getEffectId(): string | null { FILE: apps/web/src/lib/commands/timeline/element/effects/remove-effect.ts function removeEffectFromElement (line 6) | function removeEffectFromElement({ class RemoveClipEffectCommand (line 18) | class RemoveClipEffectCommand extends Command { method constructor (line 24) | constructor({ method execute (line 39) | execute(): void { method undo (line 59) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/effects/reorder-effect.ts function reorderEffectsOnElement (line 6) | function reorderEffectsOnElement({ class ReorderClipEffectsCommand (line 21) | class ReorderClipEffectsCommand extends Command { method constructor (line 28) | constructor({ method execute (line 46) | execute(): void { method undo (line 67) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/effects/toggle-effect.ts function toggleEffectOnElement (line 6) | function toggleEffectOnElement({ class ToggleClipEffectCommand (line 20) | class ToggleClipEffectCommand extends Command { method constructor (line 26) | constructor({ method execute (line 41) | execute(): void { method undo (line 61) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/effects/update-effect-params.ts function updateEffectParamsOnElement (line 7) | function updateEffectParamsOnElement({ class UpdateClipEffectParamsCommand (line 34) | class UpdateClipEffectParamsCommand extends Command { method constructor (line 41) | constructor({ method execute (line 59) | execute(): void { method undo (line 80) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/insert-element.ts type InsertElementPlacement (line 25) | type InsertElementPlacement = type InsertElementParams (line 29) | interface InsertElementParams { class InsertElementCommand (line 34) | class InsertElementCommand extends Command { method constructor (line 39) | constructor({ element, placement }: InsertElementParams) { method execute (line 49) | execute(): void { method undo (line 117) | undo(): void { method getElementId (line 124) | getElementId(): string { method getTrackId (line 128) | getTrackId(): string | null { method buildElement (line 132) | private buildElement({ method validateElementBasics (line 147) | private validateElementBasics({ method resolveTracksWithElement (line 184) | private resolveTracksWithElement({ method getAutoInsertIndex (line 303) | private getAutoInsertIndex({ method adjustElementForMainTrack (line 325) | private adjustElementForMainTrack({ method getTrackTypeForElement (line 342) | private getTrackTypeForElement({ FILE: apps/web/src/lib/commands/timeline/element/keyframes/remove-effect-param-keyframe.ts class RemoveEffectParamKeyframeCommand (line 8) | class RemoveEffectParamKeyframeCommand extends Command { method constructor (line 16) | constructor({ method execute (line 37) | execute(): void { method undo (line 60) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/keyframes/remove-keyframe.ts function sampleValueBeforeRemoval (line 15) | function sampleValueBeforeRemoval({ function removeKeyframeAndPersist (line 48) | function removeKeyframeAndPersist({ class RemoveKeyframeCommand (line 84) | class RemoveKeyframeCommand extends Command { method constructor (line 91) | constructor({ method execute (line 109) | execute(): void { method undo (line 133) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/keyframes/retime-keyframe.ts class RetimeKeyframeCommand (line 8) | class RetimeKeyframeCommand extends Command { method constructor (line 16) | constructor({ method execute (line 37) | execute(): void { method undo (line 68) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/keyframes/upsert-effect-param-keyframe.ts class UpsertEffectParamKeyframeCommand (line 8) | class UpsertEffectParamKeyframeCommand extends Command { method constructor (line 19) | constructor({ method execute (line 49) | execute(): void { method undo (line 76) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/keyframes/upsert-keyframe.ts class UpsertKeyframeCommand (line 12) | class UpsertKeyframeCommand extends Command { method constructor (line 22) | constructor({ method execute (line 49) | execute(): void { method undo (line 81) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/move-elements.ts class MoveElementCommand (line 16) | class MoveElementCommand extends Command { method constructor (line 25) | constructor({ method execute (line 49) | execute(): void { method undo (line 155) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/split-elements.ts class SplitElementsCommand (line 8) | class SplitElementsCommand extends Command { method constructor (line 17) | constructor({ method getRightSideElements (line 35) | getRightSideElements(): { trackId: string; elementId: string }[] { method execute (line 39) | execute(): void { method undo (line 165) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/toggle-elements-muted.ts class ToggleElementsMutedCommand (line 6) | class ToggleElementsMutedCommand extends Command { method constructor (line 9) | constructor(private elements: { trackId: string; elementId: string }[]) { method execute (line 13) | execute(): void { method undo (line 51) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/toggle-elements-visibility.ts class ToggleElementsVisibilityCommand (line 6) | class ToggleElementsVisibilityCommand extends Command { method constructor (line 9) | constructor(private elements: { trackId: string; elementId: string }[]) { method execute (line 13) | execute(): void { method undo (line 41) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/update-element-duration.ts class UpdateElementDurationCommand (line 6) | class UpdateElementDurationCommand extends Command { method constructor (line 12) | constructor({ method execute (line 27) | execute(): void { method undo (line 51) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/update-element-start-time.ts class UpdateElementStartTimeCommand (line 6) | class UpdateElementStartTimeCommand extends Command { method constructor (line 11) | constructor({ method execute (line 23) | execute(): void { method undo (line 63) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/update-element-trim.ts class UpdateElementTrimCommand (line 7) | class UpdateElementTrimCommand extends Command { method constructor (line 16) | constructor({ method execute (line 40) | execute(): void { method undo (line 96) | undo(): void { FILE: apps/web/src/lib/commands/timeline/element/update-element.ts class UpdateElementCommand (line 6) | class UpdateElementCommand extends Command { method constructor (line 12) | constructor({ method execute (line 27) | execute(): void { method undo (line 41) | undo(): void { FILE: apps/web/src/lib/commands/timeline/track/add-track.ts class AddTrackCommand (line 10) | class AddTrackCommand extends Command { method constructor (line 14) | constructor( method execute (line 22) | execute(): void { method undo (line 43) | undo(): void { method getTrackId (line 50) | getTrackId(): string { FILE: apps/web/src/lib/commands/timeline/track/remove-track.ts class RemoveTrackCommand (line 6) | class RemoveTrackCommand extends Command { method constructor (line 9) | constructor(private trackId: string) { method execute (line 13) | execute(): void { method undo (line 29) | undo(): void { FILE: apps/web/src/lib/commands/timeline/track/toggle-track-mute.ts class ToggleTrackMuteCommand (line 6) | class ToggleTrackMuteCommand extends Command { method constructor (line 9) | constructor(private trackId: string) { method execute (line 13) | execute(): void { method undo (line 33) | undo(): void { FILE: apps/web/src/lib/commands/timeline/track/toggle-track-visibility.ts class ToggleTrackVisibilityCommand (line 6) | class ToggleTrackVisibilityCommand extends Command { method constructor (line 9) | constructor(private trackId: string) { method execute (line 13) | execute(): void { method undo (line 34) | undo(): void { FILE: apps/web/src/lib/commands/timeline/tracks-snapshot.ts class TracksSnapshotCommand (line 5) | class TracksSnapshotCommand extends Command { method constructor (line 6) | constructor( method execute (line 13) | execute(): void { method undo (line 17) | undo(): void { FILE: apps/web/src/lib/db/index.ts function getDb (line 8) | function getDb() { FILE: apps/web/src/lib/drag-data.ts constant MIME_TYPE (line 3) | const MIME_TYPE = "application/x-timeline-drag"; function setDragData (line 6) | function setDragData({ function getDragData (line 18) | function getDragData({ function hasDragData (line 38) | function hasDragData({ function clearDragData (line 46) | function clearDragData(): void { FILE: apps/web/src/lib/effects/definitions/index.ts function registerDefaultEffects (line 6) | function registerDefaultEffects(): void { FILE: apps/web/src/lib/effects/index.ts constant EFFECT_TARGET_ELEMENT_TYPES (line 9) | const EFFECT_TARGET_ELEMENT_TYPES: VisualElement["type"][] = [ function buildDefaultEffectInstance (line 16) | function buildDefaultEffectInstance({ FILE: apps/web/src/lib/effects/registry.ts function registerEffect (line 5) | function registerEffect({ function hasEffect (line 13) | function hasEffect({ effectType }: { effectType: string }): boolean { function getEffect (line 17) | function getEffect({ function getAllEffects (line 29) | function getAllEffects(): EffectDefinition[] { FILE: apps/web/src/lib/export.ts function getExportMimeType (line 4) | function getExportMimeType({ function getExportFileExtension (line 12) | function getExportFileExtension({ function downloadBuffer (line 20) | function downloadBuffer({ FILE: apps/web/src/lib/fonts/google-fonts.ts constant GOOGLE_FONTS_CSS (line 4) | const GOOGLE_FONTS_CSS = "https://fonts.googleapis.com/css2"; function encodeFamily (line 11) | function encodeFamily(family: string): string { function getCachedFontAtlas (line 15) | function getCachedFontAtlas(): FontAtlas | null { function clearFontAtlasCache (line 19) | function clearFontAtlasCache(): void { function fetchAtlas (line 24) | async function fetchAtlas(): Promise { function preloadChunkImages (line 40) | function preloadChunkImages({ atlas }: { atlas: FontAtlas }): void { function prefetchFontAtlas (line 50) | function prefetchFontAtlas(): Promise { function loadFullFont (line 57) | async function loadFullFont({ function loadFonts (line 83) | async function loadFonts({ FILE: apps/web/src/lib/gradients/canvas.ts type BackgroundLayer (line 9) | type BackgroundLayer = type LinearPoints (line 13) | type LinearPoints = { type RadialDimensions (line 21) | type RadialDimensions = { type PositionKeyword (line 28) | type PositionKeyword = "left" | "center" | "right" | "top" | "bottom"; type Distance (line 30) | type Distance = type Position (line 37) | type Position = { type: "position"; value: { x?: Distance; y?: Distance ... type Shape (line 39) | type Shape = { type DefaultRadial (line 46) | type DefaultRadial = { type: "default-radial"; at: Position }; type ExtentKeyword (line 48) | type ExtentKeyword = { type: "extent-keyword"; value: string; at?: Posit... type RadialOrientation (line 50) | type RadialOrientation = Shape | ExtentKeyword | DefaultRadial; function drawCssBackground (line 55) | function drawCssBackground({ FILE: apps/web/src/lib/gradients/parser.ts type GradientType (line 5) | type GradientType = type DirectionalOrientation (line 11) | type DirectionalOrientation = { type: "directional"; value: string }; type AngularOrientation (line 12) | type AngularOrientation = { type: "angular"; value: string }; type LinearOrientation (line 13) | type LinearOrientation = DirectionalOrientation | AngularOrientation; type Distance (line 15) | type Distance = type PositionValue (line 22) | type PositionValue = { x?: Distance; y?: Distance }; type Position (line 23) | type Position = { type: "position"; value: PositionValue }; type ExtentKeyword (line 25) | type ExtentKeyword = { type: "extent-keyword"; value: string }; type ShapeValue (line 27) | type ShapeValue = "circle" | "ellipse"; type Shape (line 28) | type Shape = { type DefaultRadial (line 35) | type DefaultRadial = { type: "default-radial"; at: Position }; type RadialOrientation (line 37) | type RadialOrientation = type GradientOrientation (line 42) | type GradientOrientation = LinearOrientation | Array; type Color (line 44) | type Color = type ColorStop (line 53) | type ColorStop = Color & { length?: Distance }; type GradientAst (line 55) | type GradientAst = { type Tokens (line 61) | type Tokens = { FILE: apps/web/src/lib/iconify-api.ts constant ICONIFY_HOSTS (line 1) | const ICONIFY_HOSTS = [ function fetchWithFallback (line 9) | async function fetchWithFallback(path: string): Promise { type IconSet (line 26) | interface IconSet { type IconSearchResult (line 44) | interface IconSearchResult { type CollectionInfo (line 52) | interface CollectionInfo { function getCollections (line 62) | async function getCollections( function getCollection (line 85) | async function getCollection( function searchIcons (line 99) | async function searchIcons( function buildIconSvgUrl (line 134) | function buildIconSvgUrl( function getIconSvgUrl (line 179) | function getIconSvgUrl( function downloadSvgAsText (line 186) | async function downloadSvgAsText( function svgToFile (line 198) | function svgToFile(svgText: string, fileName: string): File { constant POPULAR_COLLECTIONS (line 203) | const POPULAR_COLLECTIONS = { function getCategoriesFromCollections (line 231) | function getCategoriesFromCollections( FILE: apps/web/src/lib/media/audio.ts constant MAX_AUDIO_CHANNELS (line 13) | const MAX_AUDIO_CHANNELS = 2; constant EXPORT_SAMPLE_RATE (line 14) | const EXPORT_SAMPLE_RATE = 44100; type CollectedAudioElement (line 16) | type CollectedAudioElement = Omit< function createAudioContext (line 21) | function createAudioContext({ sampleRate }: { sampleRate?: number } = {}... type DecodedAudio (line 30) | interface DecodedAudio { function decodeAudioToFloat32 (line 35) | async function decodeAudioToFloat32({ function collectAudioElements (line 60) | async function collectAudioElements({ function resolveAudioBufferForElement (line 137) | async function resolveAudioBufferForElement({ function resolveAudioBufferForVideoElement (line 170) | async function resolveAudioBufferForVideoElement({ type AudioMixSource (line 238) | interface AudioMixSource { type AudioClipSource (line 246) | interface AudioClipSource { function fetchLibraryAudioSource (line 257) | async function fetchLibraryAudioSource({ function fetchLibraryAudioClip (line 286) | async function fetchLibraryAudioClip({ function collectMediaAudioSource (line 320) | function collectMediaAudioSource({ function collectMediaAudioClip (line 336) | function collectMediaAudioClip({ function collectAudioMixSources (line 357) | async function collectAudioMixSources({ function collectAudioClips (line 411) | async function collectAudioClips({ function createTimelineAudioBuffer (line 477) | async function createTimelineAudioBuffer({ function mixAudioChannels (line 522) | function mixAudioChannels({ FILE: apps/web/src/lib/media/media-utils.ts constant SUPPORTS_AUDIO (line 3) | const SUPPORTS_AUDIO: readonly MediaType[] = ["audio", "video"]; function mediaSupportsAudio (line 5) | function mediaSupportsAudio({ FILE: apps/web/src/lib/media/mediabunny.ts function getVideoInfo (line 6) | async function getVideoInfo({ constant SAMPLE_RATE (line 39) | const SAMPLE_RATE = 44100; constant NUM_CHANNELS (line 40) | const NUM_CHANNELS = 2; function decodeAndMixAudioSource (line 118) | async function decodeAndMixAudioSource({ function createWavBlob (line 174) | function createWavBlob({ samples }: { samples: Float32Array }): Blob { function writeString (line 214) | function writeString({ FILE: apps/web/src/lib/media/processing.ts type ProcessedMediaAsset (line 7) | interface ProcessedMediaAsset extends Omit {} constant THUMBNAIL_MAX_WIDTH (line 9) | const THUMBNAIL_MAX_WIDTH = 1280; constant THUMBNAIL_MAX_HEIGHT (line 10) | const THUMBNAIL_MAX_HEIGHT = 720; function generateThumbnail (line 66) | async function generateThumbnail({ function generateImageThumbnail (line 109) | async function generateImageThumbnail({ function processMediaAssets (line 148) | async function processMediaAssets({ FILE: apps/web/src/lib/preview/element-bounds.ts type ElementBounds (line 17) | interface ElementBounds { type ElementWithBounds (line 25) | interface ElementWithBounds { function getVisualElementBounds (line 32) | function getVisualElementBounds({ function getElementBounds (line 67) | function getElementBounds({ function getVisibleElementsWithBounds (line 226) | function getVisibleElementsWithBounds({ FILE: apps/web/src/lib/preview/hit-test.ts function pointInRotatedRect (line 3) | function pointInRotatedRect({ function hitTest (line 34) | function hitTest({ FILE: apps/web/src/lib/preview/preview-coords.ts function screenToCanvas (line 1) | function screenToCanvas({ function canvasToOverlay (line 19) | function canvasToOverlay({ function positionToOverlay (line 40) | function positionToOverlay({ function getDisplayScale (line 65) | function getDisplayScale({ function screenPixelsToLogicalThreshold (line 78) | function screenPixelsToLogicalThreshold({ FILE: apps/web/src/lib/preview/preview-snap.ts type SnapLine (line 1) | interface SnapLine { constant ROTATION_SNAP_STEP_DEGREES (line 6) | const ROTATION_SNAP_STEP_DEGREES = 90; constant ROTATION_SNAP_THRESHOLD_DEGREES (line 7) | const ROTATION_SNAP_THRESHOLD_DEGREES = 5; constant MIN_SCALE (line 8) | const MIN_SCALE = 0.01; constant SNAP_THRESHOLD_SCREEN_PIXELS (line 9) | const SNAP_THRESHOLD_SCREEN_PIXELS = 8; type SnapResult (line 11) | interface SnapResult { function snapPosition (line 16) | function snapPosition({ type ScaleSnapResult (line 126) | interface ScaleSnapResult { function snapScale (line 131) | function snapScale({ type RotationSnapResult (line 284) | interface RotationSnapResult { function snapRotation (line 289) | function snapRotation({ FILE: apps/web/src/lib/rate-limit.ts function checkRateLimit (line 17) | async function checkRateLimit({ request }: { request: Request }) { FILE: apps/web/src/lib/scenes.ts function getMainScene (line 6) | function getMainScene({ scenes }: { scenes: TScene[] }): TScene | null { function ensureMainScene (line 10) | function ensureMainScene({ scenes }: { scenes: TScene[] }): TScene[] { function buildDefaultScene (line 19) | function buildDefaultScene({ function canDeleteScene (line 38) | function canDeleteScene({ scene }: { scene: TScene }): { function getFallbackSceneAfterDelete (line 48) | function getFallbackSceneAfterDelete({ function findCurrentScene (line 63) | function findCurrentScene({ function getProjectDurationFromScenes (line 78) | function getProjectDurationFromScenes({ function updateSceneInArray (line 91) | function updateSceneInArray({ FILE: apps/web/src/lib/stickers/index.ts constant DEFAULT_SEARCH_LIMIT (line 8) | const DEFAULT_SEARCH_LIMIT = 100; function mergeSearchResults (line 10) | function mergeSearchResults({ function getProviderByCategory (line 39) | function getProviderByCategory({ function searchStickers (line 55) | async function searchStickers({ function browseStickers (line 113) | async function browseStickers({ FILE: apps/web/src/lib/stickers/providers/emoji.ts constant EMOJI_PROVIDER_ID (line 13) | const EMOJI_PROVIDER_ID = "emoji"; constant DEFAULT_SEARCH_LIMIT (line 14) | const DEFAULT_SEARCH_LIMIT = 100; constant EMOJI_PREFIXES (line 16) | const EMOJI_PREFIXES = POPULAR_COLLECTIONS.emoji.map( constant DEFAULT_EMOJI_BROWSE (line 20) | const DEFAULT_EMOJI_BROWSE = [ function getDisplayNameFromIconName (line 35) | function getDisplayNameFromIconName({ function toStickerItem (line 45) | function toStickerItem({ iconName }: { iconName: string }): StickerItem { function computeHasMore (line 58) | function computeHasMore({ method search (line 72) | async search({ method browse (line 91) | async browse({ method resolveUrl (line 106) | resolveUrl({ FILE: apps/web/src/lib/stickers/providers/flags.ts constant FLAGS_PROVIDER_ID (line 8) | const FLAGS_PROVIDER_ID = "flags"; constant FLAGS_DATASET_URL (line 9) | const FLAGS_DATASET_URL = "/countries.json"; constant DEFAULT_SEARCH_LIMIT (line 10) | const DEFAULT_SEARCH_LIMIT = 100; constant DEFAULT_FLAGS_BASE_URL (line 11) | const DEFAULT_FLAGS_BASE_URL = "/flags"; type CountryRecord (line 13) | type CountryRecord = { function getFlagsBaseUrl (line 23) | function getFlagsBaseUrl(): string { function buildFlagUrl (line 27) | function buildFlagUrl({ code }: { code: string }): string { function loadCountries (line 32) | async function loadCountries(): Promise { function toStickerItem (line 52) | function toStickerItem({ country }: { country: CountryRecord }): Sticker... function normalizeQuery (line 71) | function normalizeQuery({ query }: { query: string }): string { function filterCountriesByQuery (line 75) | function filterCountriesByQuery({ function paginateCountries (line 98) | function paginateCountries({ method search (line 119) | async search({ method browse (line 145) | async browse({ method resolveUrl (line 158) | resolveUrl({ FILE: apps/web/src/lib/stickers/providers/icons.ts constant ICONS_PROVIDER_ID (line 13) | const ICONS_PROVIDER_ID = "icons"; constant DEFAULT_SEARCH_LIMIT (line 14) | const DEFAULT_SEARCH_LIMIT = 100; constant ICONS_PREFIXES (line 16) | const ICONS_PREFIXES = Array.from( constant DEFAULT_ICONS_BROWSE (line 24) | const DEFAULT_ICONS_BROWSE = [ function getDisplayNameFromIconName (line 39) | function getDisplayNameFromIconName({ function toStickerItem (line 48) | function toStickerItem({ iconName }: { iconName: string }): StickerItem { function computeHasMore (line 61) | function computeHasMore({ method search (line 75) | async search({ method browse (line 94) | async browse({ method resolveUrl (line 109) | resolveUrl({ FILE: apps/web/src/lib/stickers/providers/index.ts function registerDefaultStickerProviders (line 15) | function registerDefaultStickerProviders({ FILE: apps/web/src/lib/stickers/providers/shapes.ts constant SHAPES_PROVIDER_ID (line 8) | const SHAPES_PROVIDER_ID = "shapes"; constant SHAPES (line 10) | const SHAPES = [ function buildShapeUrl (line 19) | function buildShapeUrl({ shapeKey }: { shapeKey: string }): string { function toStickerItem (line 23) | function toStickerItem({ function filterShapesByQuery (line 40) | function filterShapesByQuery({ function paginateShapes (line 55) | function paginateShapes({ method search (line 76) | async search({ method browse (line 94) | async browse({ method resolveUrl (line 109) | resolveUrl({ FILE: apps/web/src/lib/stickers/registry.ts function registerProvider (line 5) | function registerProvider({ function hasProvider (line 13) | function hasProvider({ providerId }: { providerId: string }): boolean { function getProvider (line 17) | function getProvider({ function getAllProviders (line 29) | function getAllProviders(): StickerProvider[] { FILE: apps/web/src/lib/stickers/resolver.ts function resolveStickerId (line 6) | function resolveStickerId({ FILE: apps/web/src/lib/stickers/sticker-id.ts function parseStickerId (line 1) | function parseStickerId({ stickerId }: { stickerId: string }): { function buildStickerId (line 26) | function buildStickerId({ FILE: apps/web/src/lib/text/layout.ts type TextRect (line 4) | type TextRect = { type TextBlockMeasurement (line 11) | interface TextBlockMeasurement { function getMetricAscent (line 17) | function getMetricAscent({ function getMetricDescent (line 27) | function getMetricDescent({ function measureTextBlock (line 37) | function measureTextBlock({ function getTextRect (line 70) | function getTextRect({ function isTextBackgroundVisible (line 92) | function isTextBackgroundVisible({ function getTextBackgroundRect (line 104) | function getTextBackgroundRect({ function getTextVisualRect (line 135) | function getTextVisualRect({ FILE: apps/web/src/lib/time.ts function roundToFrame (line 3) | function roundToFrame({ function formatTimeCode (line 13) | function formatTimeCode({ function parseTimeCode (line 41) | function parseTimeCode({ function guessTimeCodeFormat (line 145) | function guessTimeCodeFormat({ function timeToFrame (line 164) | function timeToFrame({ function frameToTime (line 174) | function frameToTime({ function snapTimeToFrame (line 184) | function snapTimeToFrame({ function getSnappedSeekTime (line 196) | function getSnappedSeekTime({ function getLastFrameTime (line 209) | function getLastFrameTime({ FILE: apps/web/src/lib/timeline/bookmarks.ts constant BOOKMARK_TIME_EPSILON (line 4) | const BOOKMARK_TIME_EPSILON = 0.001; function bookmarkTimeEqual (line 6) | function bookmarkTimeEqual({ function findBookmarkIndex (line 16) | function findBookmarkIndex({ function isBookmarkAtTime (line 28) | function isBookmarkAtTime({ function toggleBookmarkInArray (line 40) | function toggleBookmarkInArray({ function removeBookmarkFromArray (line 57) | function removeBookmarkFromArray({ function updateBookmarkInArray (line 70) | function updateBookmarkInArray({ function moveBookmarkInArray (line 90) | function moveBookmarkInArray({ function getFrameTime (line 110) | function getFrameTime({ function getBookmarkAtTime (line 120) | function getBookmarkAtTime({ function getBookmarksActiveAtTime (line 131) | function getBookmarksActiveAtTime({ FILE: apps/web/src/lib/timeline/drag-utils.ts function getMouseTimeFromClientX (line 3) | function getMouseTimeFromClientX({ FILE: apps/web/src/lib/timeline/drop-utils.ts function findElementAtPosition (line 11) | function findElementAtPosition({ function getTrackAtY (line 40) | function getTrackAtY({ function isCompatible (line 81) | function isCompatible({ function getMainTrackIndex (line 98) | function getMainTrackIndex({ tracks }: { tracks: TimelineTrack[] }): num... function findInsertIndex (line 102) | function findInsertIndex({ constant EMPTY_TARGET_ELEMENT (line 137) | const EMPTY_TARGET_ELEMENT = null; function computeDropTarget (line 139) | function computeDropTarget({ function getDropLineY (line 299) | function getDropLineY({ FILE: apps/web/src/lib/timeline/element-utils.ts function canElementHaveAudio (line 30) | function canElementHaveAudio( function isVisualElement (line 36) | function isVisualElement( function canElementBeHidden (line 47) | function canElementBeHidden( function hasMediaId (line 53) | function hasMediaId( function requiresMediaId (line 59) | function requiresMediaId({ function checkElementOverlaps (line 71) | function checkElementOverlaps({ function resolveElementOverlaps (line 92) | function resolveElementOverlaps({ function wouldElementOverlap (line 120) | function wouldElementOverlap({ function buildTextBackground (line 138) | function buildTextBackground( function buildTextElement (line 155) | function buildTextElement({ function buildEffectElement (line 191) | function buildEffectElement({ function buildStickerElement (line 213) | function buildStickerElement({ function buildVideoElement (line 238) | function buildVideoElement({ function buildImageElement (line 266) | function buildImageElement({ function buildUploadAudioElement (line 292) | function buildUploadAudioElement({ function buildElementFromMedia (line 324) | function buildElementFromMedia({ function buildLibraryAudioElement (line 355) | function buildLibraryAudioElement({ function getElementsAtTime (line 387) | function getElementsAtTime({ function collectFontFamilies (line 410) | function collectFontFamilies({ FILE: apps/web/src/lib/timeline/index.ts function calculateTotalDuration (line 11) | function calculateTotalDuration({ FILE: apps/web/src/lib/timeline/pixel-utils.ts constant TIMELINE_INDICATOR_LINE_WIDTH_PX (line 3) | const TIMELINE_INDICATOR_LINE_WIDTH_PX = 2; function getDevicePixelRatio (line 5) | function getDevicePixelRatio({ function getTimelinePixelsPerSecond (line 29) | function getTimelinePixelsPerSecond({ function timelineTimeToPixels (line 37) | function timelineTimeToPixels({ function snapPixelToDeviceGrid (line 47) | function snapPixelToDeviceGrid({ function timelineTimeToSnappedPixels (line 58) | function timelineTimeToSnappedPixels({ function getCenteredLineLeft (line 71) | function getCenteredLineLeft({ FILE: apps/web/src/lib/timeline/ripple-utils.ts function rippleShiftElements (line 3) | function rippleShiftElements({ FILE: apps/web/src/lib/timeline/ruler-utils.ts constant LABEL_FRAME_INTERVALS (line 8) | const LABEL_FRAME_INTERVALS = [2, 3, 5, 10, 15] as const; constant TICK_FRAME_INTERVALS (line 13) | const TICK_FRAME_INTERVALS = [1, 2, 3, 5, 10, 15] as const; constant SECOND_MULTIPLIERS (line 18) | const SECOND_MULTIPLIERS = [ constant MIN_LABEL_SPACING_PX (line 25) | const MIN_LABEL_SPACING_PX = 120; constant MIN_TICK_SPACING_PX (line 30) | const MIN_TICK_SPACING_PX = 18; type RulerConfig (line 32) | interface RulerConfig { function getRulerConfig (line 52) | function getRulerConfig({ function ensureTickDividesLabel (line 94) | function ensureTickDividesLabel({ function findOptimalInterval (line 142) | function findOptimalInterval({ function shouldShowLabel (line 177) | function shouldShowLabel({ function formatRulerLabel (line 195) | function formatRulerLabel({ function isSecondBoundary (line 213) | function isSecondBoundary({ function getFrameWithinSecond (line 226) | function getFrameWithinSecond({ function formatTimestamp (line 240) | function formatTimestamp({ timeInSeconds }: { timeInSeconds: number }): ... FILE: apps/web/src/lib/timeline/snap-utils.ts type SnapPoint (line 6) | interface SnapPoint { type SnapResult (line 13) | interface SnapResult { constant DEFAULT_SNAP_THRESHOLD_PX (line 19) | const DEFAULT_SNAP_THRESHOLD_PX = 10; function findSnapPoints (line 21) | function findSnapPoints({ function snapToNearestPoint (line 99) | function snapToNearestPoint({ function snapElementEdge (line 131) | function snapElementEdge({ FILE: apps/web/src/lib/timeline/track-element-update.ts function updateElementInTracks (line 3) | function updateElementInTracks({ FILE: apps/web/src/lib/timeline/track-utils.ts function canTracktHaveAudio (line 18) | function canTracktHaveAudio( function canTrackBeHidden (line 24) | function canTrackBeHidden( function getTrackColor (line 30) | function getTrackColor({ type }: { type: TrackType }) { function getTrackClasses (line 34) | function getTrackClasses({ type }: { type: TrackType }) { function getTrackHeight (line 38) | function getTrackHeight({ type }: { type: TrackType }): number { function getCumulativeHeightBefore (line 42) | function getCumulativeHeightBefore({ function getTotalTracksHeight (line 57) | function getTotalTracksHeight({ function buildEmptyTrack (line 70) | function buildEmptyTrack({ function getDefaultInsertIndexForTrack (line 129) | function getDefaultInsertIndexForTrack({ function getHighestInsertIndexForTrack (line 159) | function getHighestInsertIndexForTrack({ function isMainTrack (line 175) | function isMainTrack(track: TimelineTrack): track is VideoTrack { function getMainTrack (line 179) | function getMainTrack({ function ensureMainTrack (line 187) | function ensureMainTrack({ function canElementGoOnTrack (line 210) | function canElementGoOnTrack({ function validateElementTrackCompatibility (line 227) | function validateElementTrackCompatibility({ function getEarliestMainTrackElement (line 249) | function getEarliestMainTrackElement({ function enforceMainTrackStart (line 274) | function enforceMainTrackStart({ FILE: apps/web/src/lib/timeline/zoom-utils.ts constant PADDING_MAX_RATIO (line 3) | const PADDING_MAX_RATIO = 0.75; constant PADDING_MIN_RATIO (line 4) | const PADDING_MIN_RATIO = 0.15; constant PADDING_MIN_AT_ZOOM_PERCENT (line 5) | const PADDING_MIN_AT_ZOOM_PERCENT = 0.2; function getTimelineZoomMin (line 7) | function getTimelineZoomMin({ function getTimelinePaddingPx (line 24) | function getTimelinePaddingPx({ function getZoomPercent (line 45) | function getZoomPercent({ function sliderToZoom (line 59) | function sliderToZoom({ function zoomToSlider (line 75) | function zoomToSlider({ FILE: apps/web/src/lib/transcription/caption.ts function buildCaptionChunks (line 7) | function buildCaptionChunks({ FILE: apps/web/src/proxy.ts function proxy (line 3) | async function proxy() { FILE: apps/web/src/services/renderer/canvas-renderer.ts type CanvasRendererParams (line 3) | type CanvasRendererParams = { class CanvasRenderer (line 9) | class CanvasRenderer { method constructor (line 16) | constructor({ width, height, fps }: CanvasRendererParams) { method setSize (line 39) | setSize({ width, height }: { width: number; height: number }) { method clear (line 59) | private clear() { method render (line 64) | async render({ node, time }: { node: BaseNode; time: number }) { method renderToCanvas (line 69) | async renderToCanvas({ FILE: apps/web/src/services/renderer/canvas-utils.ts function createOffscreenCanvas (line 1) | function createOffscreenCanvas({ FILE: apps/web/src/services/renderer/effect-preview.ts constant PREVIEW_SIZE (line 7) | const PREVIEW_SIZE = 160; constant PREVIEW_IMAGE_PATH (line 8) | const PREVIEW_IMAGE_PATH = "/effects/preview.jpg"; function onPreviewImageReady (line 17) | function onPreviewImageReady({ function loadPreviewImage (line 26) | function loadPreviewImage(): void { function buildDefaultParams (line 41) | function buildDefaultParams({ function createTestSource (line 54) | function createTestSource({ function getOrCreatePreviewContext (line 80) | function getOrCreatePreviewContext({ function getTestSource (line 103) | function getTestSource({ function applyWebGlEffect (line 120) | function applyWebGlEffect({ function renderPreview (line 146) | function renderPreview({ FILE: apps/web/src/services/renderer/nodes/base-node.ts type BaseNodeParams (line 3) | type BaseNodeParams = object | undefined; class BaseNode (line 5) | class BaseNode { method constructor (line 8) | constructor(params?: Params) { method add (line 14) | add(child: BaseNode) { method remove (line 19) | remove(child: BaseNode) { method render (line 24) | async render({ FILE: apps/web/src/services/renderer/nodes/color-node.ts type ColorNodeParams (line 5) | type ColorNodeParams = { class ColorNode (line 9) | class ColorNode extends BaseNode { method constructor (line 12) | constructor(params: ColorNodeParams) { method render (line 17) | async render({ renderer }: { renderer: CanvasRenderer }) { FILE: apps/web/src/services/renderer/nodes/composite-effect-node.ts type CompositeEffectNodeParams (line 8) | type CompositeEffectNodeParams = { class CompositeEffectNode (line 15) | class CompositeEffectNode extends BaseNode { method render (line 16) | async render({ FILE: apps/web/src/services/renderer/nodes/effect-layer-node.ts constant TIME_EPSILON (line 7) | const TIME_EPSILON = 1e-6; type EffectLayerNodeParams (line 9) | type EffectLayerNodeParams = { function isInRange (line 16) | function isInRange({ class EffectLayerNode (line 32) | class EffectLayerNode extends BaseNode { method render (line 33) | async render({ FILE: apps/web/src/services/renderer/nodes/image-node.ts type ImageNodeParams (line 4) | interface ImageNodeParams extends VisualNodeParams { type CachedImageSource (line 9) | interface CachedImageSource { function loadImageSource (line 17) | function loadImageSource( class ImageNode (line 65) | class ImageNode extends VisualNode { method constructor (line 68) | constructor(params: ImageNodeParams) { method render (line 73) | async render({ renderer, time }: { renderer: CanvasRenderer; time: num... FILE: apps/web/src/services/renderer/nodes/root-node.ts type RootNodeParams (line 3) | type RootNodeParams = { class RootNode (line 7) | class RootNode extends BaseNode { method duration (line 8) | get duration() { FILE: apps/web/src/services/renderer/nodes/sticker-node.ts type StickerNodeParams (line 5) | interface StickerNodeParams extends VisualNodeParams { type CachedStickerSource (line 9) | interface CachedStickerSource { function loadStickerSource (line 17) | function loadStickerSource(stickerId: string): Promise { method constructor (line 46) | constructor(params: StickerNodeParams) { method render (line 51) | async render({ renderer, time }: { renderer: CanvasRenderer; time: num... FILE: apps/web/src/services/renderer/nodes/text-node.ts function scaleFontSize (line 31) | function scaleFontSize({ function quoteFontFamily (line 41) | function quoteFontFamily({ fontFamily }: { fontFamily: string }): string { constant TEXT_DECORATION_THICKNESS_RATIO (line 45) | const TEXT_DECORATION_THICKNESS_RATIO = 0.07; constant STRIKETHROUGH_VERTICAL_RATIO (line 46) | const STRIKETHROUGH_VERTICAL_RATIO = 0.35; function drawTextDecoration (line 48) | function drawTextDecoration({ type TextNodeParams (line 86) | type TextNodeParams = TextElement & { class TextNode (line 92) | class TextNode extends BaseNode { method isInRange (line 93) | isInRange({ time }: { time: number }) { method render (line 100) | async render({ renderer, time }: { renderer: CanvasRenderer; time: num... FILE: apps/web/src/services/renderer/nodes/video-node.ts type VideoNodeParams (line 5) | interface VideoNodeParams extends VisualNodeParams { class VideoNode (line 11) | class VideoNode extends VisualNode { method render (line 12) | async render({ renderer, time }: { renderer: CanvasRenderer; time: num... FILE: apps/web/src/services/renderer/nodes/visual-node.ts type VisualNodeParams (line 18) | interface VisualNodeParams { method getSourceLocalTime (line 33) | protected getSourceLocalTime({ time }: { time: number }): number { method getAnimationLocalTime (line 37) | protected getAnimationLocalTime({ time }: { time: number }): number { method isInRange (line 45) | protected isInRange({ time }: { time: number }): boolean { method renderVisual (line 53) | protected renderVisual({ FILE: apps/web/src/services/renderer/scene-builder.ts constant PREVIEW_MAX_IMAGE_SIZE (line 16) | const PREVIEW_MAX_IMAGE_SIZE = 2048; constant BLUR_BACKGROUND_ZOOM_SCALE (line 17) | const BLUR_BACKGROUND_ZOOM_SCALE = 1.4; function getVisibleSortedElements (line 19) | function getVisibleSortedElements({ function buildTrackNodes (line 33) | function buildTrackNodes({ type BuildSceneParams (line 141) | type BuildSceneParams = { function buildScene (line 150) | function buildScene({ FILE: apps/web/src/services/renderer/scene-exporter.ts type ExportParams (line 19) | type ExportParams = { type SceneExporterEvents (line 36) | type SceneExporterEvents = { class SceneExporter (line 43) | class SceneExporter extends EventEmitter { method constructor (line 52) | constructor({ method cancel (line 74) | cancel(): void { method export (line 78) | async export({ FILE: apps/web/src/services/renderer/webgl-effect-renderer.ts type ApplyEffectParams (line 5) | interface ApplyEffectParams { function getOrCreateCanvas (line 16) | function getOrCreateCanvas({ function applyEffect (line 39) | function applyEffect({ FILE: apps/web/src/services/renderer/webgl-utils.ts type EffectPassData (line 3) | interface EffectPassData { constant QUAD_POSITIONS (line 8) | const QUAD_POSITIONS = new Float32Array([ function compileProgram (line 12) | function compileProgram({ function compileShader (line 53) | function compileShader({ function createTexture (line 76) | function createTexture({ function setUniforms (line 121) | function setUniforms({ function drawFullscreenQuad (line 148) | function drawFullscreenQuad({ function createFramebufferTexture (line 172) | function createFramebufferTexture({ function applyMultiPassEffect (line 232) | function applyMultiPassEffect({ FILE: apps/web/src/services/storage/indexeddb-adapter.ts class IndexedDBAdapter (line 3) | class IndexedDBAdapter implements StorageAdapter { method constructor (line 8) | constructor(dbName: string, storeName: string, version = 1) { method getDB (line 14) | private async getDB(): Promise { method get (line 30) | async get(key: string): Promise { method set (line 42) | async set(key: string, value: T): Promise { method remove (line 54) | async remove(key: string): Promise { method list (line 66) | async list(): Promise { method getAll (line 78) | async getAll(): Promise { method clear (line 90) | async clear(): Promise { function deleteDatabase (line 103) | async function deleteDatabase({ FILE: apps/web/src/services/storage/migrations/index.ts constant CURRENT_PROJECT_VERSION (line 14) | const CURRENT_PROJECT_VERSION = 9; FILE: apps/web/src/services/storage/migrations/runner.ts type StorageMigrationResult (line 9) | interface StorageMigrationResult { type MigrationProgress (line 13) | interface MigrationProgress { constant MIN_MIGRATION_DISPLAY_MS (line 22) | const MIN_MIGRATION_DISPLAY_MS = 1000; function runStorageMigrations (line 24) | async function runStorageMigrations({ function getProjectVersion (line 121) | function getProjectVersion({ project }: { project: ProjectRecord }): num... function getProjectName (line 139) | function getProjectName({ FILE: apps/web/src/services/storage/migrations/transformers/types.ts type ProjectRecord (line 7) | type ProjectRecord = Record; type MigrationResult (line 9) | interface MigrationResult { FILE: apps/web/src/services/storage/migrations/transformers/utils.ts function isRecord (line 3) | function isRecord(value: unknown): value is ProjectRecord { function getProjectId (line 7) | function getProjectId({ FILE: apps/web/src/services/storage/migrations/transformers/v0-to-v1.ts type TransformV0ToV1Options (line 6) | interface TransformV0ToV1Options { function transformProjectV0ToV1 (line 10) | function transformProjectV0ToV1({ FILE: apps/web/src/services/storage/migrations/transformers/v1-to-v2.ts type LegacyTimelineData (line 20) | interface LegacyTimelineData { type LegacyMediaElement (line 25) | interface LegacyMediaElement { type LegacyTextElement (line 32) | interface LegacyTextElement { type LegacyAudioElement (line 41) | interface LegacyAudioElement { type LegacyMediaTrack (line 47) | interface LegacyMediaTrack { type TransformV1ToV2Options (line 53) | interface TransformV1ToV2Options { function transformProjectV1ToV2 (line 61) | async function transformProjectV1ToV2({ function migrateProject (line 85) | async function migrateProject({ function loadTracksFromLegacyDB (line 212) | async function loadTracksFromLegacyDB({ function transformTracks (line 252) | async function transformTracks({ function transformMediaTrack (line 306) | async function transformMediaTrack({ function transformTextTrack (line 405) | function transformTextTrack({ function transformAudioTrack (line 501) | function transformAudioTrack({ function getCurrentSceneId (line 546) | function getCurrentSceneId({ function findMainSceneId (line 565) | function findMainSceneId({ scenes }: { scenes: unknown[] }): string | nu... function applyLegacyBookmarks (line 589) | function applyLegacyBookmarks({ function getBackgroundValue (line 622) | function getBackgroundValue({ function getCanvasSizeValue (line 671) | function getCanvasSizeValue({ function getNumberValue (line 694) | function getNumberValue({ function getStringValue (line 718) | function getStringValue({ function normalizeDateString (line 732) | function normalizeDateString({ value }: { value: unknown }): string { function isV2Project (line 744) | function isV2Project({ project }: { project: ProjectRecord }): boolean { FILE: apps/web/src/services/storage/migrations/transformers/v2-to-v3.ts function transformProjectV2ToV3 (line 6) | function transformProjectV2ToV3({ function getScenes (line 39) | function getScenes({ project }: { project: ProjectRecord }): TScene[] { function isV3Project (line 48) | function isV3Project({ project }: { project: ProjectRecord }): boolean { FILE: apps/web/src/services/storage/migrations/transformers/v3-to-v4.ts constant LEGACY_FONT_WEIGHT_MAP (line 4) | const LEGACY_FONT_WEIGHT_MAP = { constant VALID_NUMERIC_FONT_WEIGHTS (line 9) | const VALID_NUMERIC_FONT_WEIGHTS = new Set([ function transformProjectV3ToV4 (line 21) | function transformProjectV3ToV4({ function normalizeProjectTextFontWeights (line 46) | function normalizeProjectTextFontWeights({ function normalizeSceneTextFontWeights (line 75) | function normalizeSceneTextFontWeights({ scene }: { scene: unknown }): u... function normalizeTrackTextFontWeights (line 104) | function normalizeTrackTextFontWeights({ track }: { track: unknown }): u... function normalizeTextElementFontWeight (line 137) | function normalizeTextElementFontWeight({ function normalizeFontWeight (line 157) | function normalizeFontWeight({ value }: { value: unknown }): unknown { function isV4Project (line 186) | function isV4Project({ project }: { project: ProjectRecord }): boolean { FILE: apps/web/src/services/storage/migrations/transformers/v4-to-v5.ts constant KNOWN_STICKER_PROVIDER_IDS (line 4) | const KNOWN_STICKER_PROVIDER_IDS = new Set([ function transformProjectV4ToV5 (line 11) | function transformProjectV4ToV5({ function migrateProjectStickerElements (line 36) | function migrateProjectStickerElements({ function migrateSceneStickerElements (line 65) | function migrateSceneStickerElements({ scene }: { scene: unknown }): unk... function migrateTrackStickerElements (line 94) | function migrateTrackStickerElements({ track }: { track: unknown }): unk... function migrateStickerElement (line 123) | function migrateStickerElement({ element }: { element: unknown }): unkno... function normalizeStickerId (line 156) | function normalizeStickerId({ value }: { value: unknown }): string | null { function isV5Project (line 174) | function isV5Project({ project }: { project: ProjectRecord }): boolean { FILE: apps/web/src/services/storage/migrations/transformers/v5-to-v6.ts function transformProjectV5ToV6 (line 4) | function transformProjectV5ToV6({ function migrateProjectBookmarks (line 29) | function migrateProjectBookmarks({ function migrateSceneBookmarks (line 58) | function migrateSceneBookmarks({ scene }: { scene: unknown }): unknown { function isV6Project (line 85) | function isV6Project({ project }: { project: ProjectRecord }): boolean { FILE: apps/web/src/services/storage/migrations/transformers/v6-to-v7.ts function transformProjectV6ToV7 (line 4) | function transformProjectV6ToV7({ function migrateProjectTextElements (line 26) | function migrateProjectTextElements({ function migrateSceneTextElements (line 45) | function migrateSceneTextElements({ scene }: { scene: unknown }): unknown { function migrateTrackTextElements (line 62) | function migrateTrackTextElements({ track }: { track: unknown }): unknown { function migrateTextElement (line 79) | function migrateTextElement({ element }: { element: unknown }): unknown { function isV7Project (line 104) | function isV7Project({ project }: { project: ProjectRecord }): boolean { FILE: apps/web/src/services/storage/migrations/transformers/v7-to-v8.ts function transformProjectV7ToV8 (line 4) | function transformProjectV7ToV8({ function migrateProjectElements (line 26) | function migrateProjectElements({ function migrateSceneElements (line 45) | function migrateSceneElements({ scene }: { scene: unknown }): unknown { function migrateTrackElements (line 62) | function migrateTrackElements({ track }: { track: unknown }): unknown { function migrateElement (line 79) | function migrateElement({ element }: { element: unknown }): unknown { function isV8Project (line 94) | function isV8Project({ project }: { project: ProjectRecord }): boolean { FILE: apps/web/src/services/storage/migrations/transformers/v8-to-v9.ts function transformProjectV8ToV9 (line 4) | function transformProjectV8ToV9({ function migrateProjectTextElements (line 26) | function migrateProjectTextElements({ function migrateSceneTextElements (line 45) | function migrateSceneTextElements({ scene }: { scene: unknown }): unknown { function migrateTrackTextElements (line 62) | function migrateTrackTextElements({ track }: { track: unknown }): unknown { function migrateTextElement (line 80) | function migrateTextElement({ element }: { element: unknown }): unknown { function isV9Project (line 97) | function isV9Project({ project }: { project: ProjectRecord }): boolean { FILE: apps/web/src/services/storage/migrations/v0-to-v1.ts class V0toV1Migration (line 5) | class V0toV1Migration extends StorageMigration { method transform (line 9) | async transform(project: ProjectRecord): Promise<{ FILE: apps/web/src/services/storage/migrations/v1-to-v2.ts class V1toV2Migration (line 14) | class V1toV2Migration extends StorageMigration { method transform (line 18) | async transform(project: ProjectRecord): Promise<{ function createMediaAssetLoader (line 46) | function createMediaAssetLoader({ function cleanupLegacyTimelineDBs (line 62) | function cleanupLegacyTimelineDBs({ FILE: apps/web/src/services/storage/migrations/v2-to-v3.ts class V2toV3Migration (line 5) | class V2toV3Migration extends StorageMigration { method transform (line 9) | async transform(project: ProjectRecord): Promise<{ FILE: apps/web/src/services/storage/migrations/v3-to-v4.ts class V3toV4Migration (line 5) | class V3toV4Migration extends StorageMigration { method transform (line 9) | async transform(project: ProjectRecord): Promise<{ FILE: apps/web/src/services/storage/migrations/v4-to-v5.ts class V4toV5Migration (line 5) | class V4toV5Migration extends StorageMigration { method transform (line 9) | async transform(project: ProjectRecord): Promise<{ FILE: apps/web/src/services/storage/migrations/v5-to-v6.ts class V5toV6Migration (line 5) | class V5toV6Migration extends StorageMigration { method transform (line 9) | async transform(project: ProjectRecord): Promise<{ FILE: apps/web/src/services/storage/migrations/v6-to-v7.ts class V6toV7Migration (line 5) | class V6toV7Migration extends StorageMigration { method transform (line 9) | async transform(project: ProjectRecord): Promise<{ FILE: apps/web/src/services/storage/migrations/v7-to-v8.ts class V7toV8Migration (line 5) | class V7toV8Migration extends StorageMigration { method transform (line 9) | async transform(project: ProjectRecord): Promise<{ FILE: apps/web/src/services/storage/migrations/v8-to-v9.ts class V8toV9Migration (line 5) | class V8toV9Migration extends StorageMigration { method transform (line 9) | async transform(project: ProjectRecord): Promise<{ FILE: apps/web/src/services/storage/opfs-adapter.ts class OPFSAdapter (line 3) | class OPFSAdapter implements StorageAdapter { method constructor (line 6) | constructor(directoryName = "media") { method getDirectory (line 10) | private async getDirectory(): Promise { method get (line 17) | async get(key: string): Promise { method set (line 30) | async set(key: string, file: File): Promise { method remove (line 39) | async remove(key: string): Promise { method list (line 50) | async list(): Promise { method clear (line 61) | async clear(): Promise { method isSupported (line 70) | static isSupported(): boolean { FILE: apps/web/src/services/storage/service.ts function normalizeBookmarks (line 19) | function normalizeBookmarks({ raw }: { raw: unknown }): Bookmark[] { class StorageService (line 42) | class StorageService { method constructor (line 48) | constructor() { method ensureMigrations (line 69) | private async ensureMigrations(): Promise { method getProjectMediaAdapters (line 81) | private getProjectMediaAdapters({ projectId }: { projectId: string }) { method stripAudioBuffers (line 93) | private stripAudioBuffers({ method saveProject (line 110) | async saveProject({ project }: { project: TProject }): Promise { method loadProject (line 143) | async loadProject({ method loadAllProjects (line 189) | async loadAllProjects(): Promise { method loadAllProjectsMetadata (line 205) | async loadAllProjectsMetadata(): Promise { method deleteProject (line 227) | async deleteProject({ id }: { id: string }): Promise { method saveMediaAsset (line 231) | async saveMediaAsset({ method loadMediaAsset (line 259) | async loadMediaAsset({ method loadAllMediaAssets (line 307) | async loadAllMediaAssets({ method deleteMediaAsset (line 329) | async deleteMediaAsset({ method deleteProjectMedia (line 345) | async deleteProjectMedia({ method clearAllData (line 359) | async clearAllData(): Promise { method getStorageInfo (line 364) | async getStorageInfo(): Promise<{ method getProjectStorageInfo (line 378) | async getProjectStorageInfo({ projectId }: { projectId: string }): Pro... method loadSavedSounds (line 392) | async loadSavedSounds(): Promise { method saveSoundEffect (line 407) | async saveSoundEffect({ method removeSavedSound (line 443) | async removeSavedSound({ soundId }: { soundId: number }): Promise { method isSoundSaved (line 459) | async isSoundSaved({ soundId }: { soundId: number }): Promise { method clearSavedSounds (line 469) | async clearSavedSounds(): Promise { method isOPFSSupported (line 478) | isOPFSSupported(): boolean { method isIndexedDBSupported (line 482) | isIndexedDBSupported(): boolean { method isFullySupported (line 486) | isFullySupported(): boolean { FILE: apps/web/src/services/storage/types.ts type StorageAdapter (line 9) | interface StorageAdapter { type MediaAssetData (line 17) | interface MediaAssetData { type SerializedScene (line 31) | type SerializedScene = Omit & { type SerializedProjectMetadata (line 36) | type SerializedProjectMetadata = Omit< type SerializedProject (line 44) | type SerializedProject = Omit & { type StorageConfig (line 50) | interface StorageConfig { type FileSystemDirectoryHandle (line 60) | interface FileSystemDirectoryHandle { FILE: apps/web/src/services/transcription/service.ts type ProgressCallback (line 13) | type ProgressCallback = (progress: TranscriptionProgress) => void; class TranscriptionService (line 15) | class TranscriptionService { method transcribe (line 21) | async transcribe({ method cancel (line 83) | cancel() { method ensureWorker (line 87) | private async ensureWorker({ method waitForInit (line 162) | private waitForInit(): Promise { method terminate (line 177) | terminate() { FILE: apps/web/src/services/transcription/worker.ts type WorkerMessage (line 12) | type WorkerMessage = type WorkerResponse (line 17) | type WorkerResponse = function handleInit (line 55) | async function handleInit({ modelId }: { modelId: string }) { function handleTranscribe (line 119) | async function handleTranscribe({ FILE: apps/web/src/services/video-cache/service.ts type VideoSinkData (line 9) | interface VideoSinkData { class VideoCache (line 19) | class VideoCache { method getFrameAt (line 23) | async getFrameAt({ method isFrameValid (line 75) | private isFrameValid({ method iterateToTime (line 84) | private async iterateToTime({ method seekToTime (line 133) | private async seekToTime({ method startPrefetch (line 180) | private startPrefetch({ sinkData }: { sinkData: VideoSinkData }): void { method prefetchNextFrame (line 189) | private async prefetchNextFrame({ method ensureSink (line 219) | private async ensureSink({ method initializeSink (line 242) | private async initializeSink({ method clearVideo (line 285) | clearVideo({ mediaId }: { mediaId: string }): void { method clearAll (line 298) | clearAll(): void { method getStats (line 304) | getStats() { FILE: apps/web/src/stores/assets-panel-store.tsx constant TAB_KEYS (line 18) | const TAB_KEYS = [ type Tab (line 31) | type Tab = (typeof TAB_KEYS)[number]; type MediaViewMode (line 85) | type MediaViewMode = "grid" | "list"; type MediaSortKey (line 86) | type MediaSortKey = "name" | "type" | "duration" | "size"; type MediaSortOrder (line 87) | type MediaSortOrder = "asc" | "desc"; type AssetsPanelStore (line 89) | interface AssetsPanelStore { FILE: apps/web/src/stores/editor-store.ts type EditorState (line 5) | interface EditorState { FILE: apps/web/src/stores/keybindings-store.ts type KeybindingConflict (line 14) | interface KeybindingConflict { type KeybindingsState (line 20) | interface KeybindingsState { function isDOMElement (line 42) | function isDOMElement(element: EventTarget | null): element is HTMLEleme... function generateKeybindingString (line 154) | function generateKeybindingString(ev: KeyboardEvent): ShortcutKey | null { function getPressedKey (line 178) | function getPressedKey(ev: KeyboardEvent): string | null { function getActiveModifier (line 213) | function getActiveModifier(ev: KeyboardEvent): string | null { FILE: apps/web/src/stores/keybindings/migrations/index.ts type MigrationFn (line 5) | type MigrationFn = ({ state }: { state: unknown }) => unknown; constant CURRENT_VERSION (line 13) | const CURRENT_VERSION = 5; function runMigrations (line 15) | function runMigrations({ FILE: apps/web/src/stores/keybindings/migrations/v2-to-v3.ts type V2State (line 4) | interface V2State { function v2ToV3 (line 9) | function v2ToV3({ state }: { state: unknown }): unknown { FILE: apps/web/src/stores/keybindings/migrations/v3-to-v4.ts type V3State (line 5) | interface V3State { function v3ToV4 (line 10) | function v3ToV4({ state }: { state: unknown }): unknown { FILE: apps/web/src/stores/keybindings/migrations/v4-to-v5.ts type V4State (line 3) | interface V4State { function v4ToV5 (line 8) | function v4ToV5({ state }: { state: unknown }): unknown { FILE: apps/web/src/stores/panel-store.ts type PanelSizes (line 5) | interface PanelSizes { type PanelId (line 13) | type PanelId = keyof PanelSizes; type PanelState (line 15) | interface PanelState { FILE: apps/web/src/stores/preview-store.ts type LayoutGuideSettings (line 5) | interface LayoutGuideSettings { type PreviewOverlaysState (line 9) | interface PreviewOverlaysState { type PreviewState (line 13) | interface PreviewState { constant DEFAULT_PREVIEW_OVERLAYS (line 32) | const DEFAULT_PREVIEW_OVERLAYS: PreviewOverlaysState = { FILE: apps/web/src/stores/properties-store.ts type ClipEffectsTarget (line 3) | interface ClipEffectsTarget { type PropertiesState (line 8) | interface PropertiesState { FILE: apps/web/src/stores/sounds-store.ts type SoundsStore (line 8) | interface SoundsStore { FILE: apps/web/src/stores/stickers-store.ts constant MAX_RECENT_STICKERS (line 13) | const MAX_RECENT_STICKERS = 50; function isValidStickerId (line 15) | function isValidStickerId(value: unknown): value is string { function sanitizeRecentStickers (line 28) | function sanitizeRecentStickers({ type ViewMode (line 56) | type ViewMode = "search" | "browse"; type StickersStore (line 58) | interface StickersStore { FILE: apps/web/src/stores/timeline-store.ts type TimelineStore (line 10) | interface TimelineStore { FILE: apps/web/src/types/animation.ts constant ANIMATION_PROPERTY_PATHS (line 1) | const ANIMATION_PROPERTY_PATHS = [ type AnimationPropertyPath (line 17) | type AnimationPropertyPath = (typeof ANIMATION_PROPERTY_PATHS)[number]; type AnimationValueKind (line 19) | type AnimationValueKind = "number" | "color" | "discrete"; type DiscreteValue (line 20) | type DiscreteValue = boolean | string; type AnimationValue (line 21) | type AnimationValue = number | string | boolean; type ContinuousKeyframeInterpolation (line 23) | type ContinuousKeyframeInterpolation = "linear" | "hold"; type DiscreteKeyframeInterpolation (line 24) | type DiscreteKeyframeInterpolation = "hold"; type AnimationInterpolation (line 25) | type AnimationInterpolation = type BaseAnimationKeyframe (line 29) | interface BaseAnimationKeyframe< type NumberKeyframe (line 39) | interface NumberKeyframe type ColorKeyframe (line 42) | interface ColorKeyframe type DiscreteKeyframe (line 45) | interface DiscreteKeyframe type AnimationKeyframe (line 48) | type AnimationKeyframe = type BaseAnimationChannel (line 53) | interface BaseAnimationChannel< type NumberAnimationChannel (line 61) | interface NumberAnimationChannel type ColorAnimationChannel (line 64) | interface ColorAnimationChannel type DiscreteAnimationChannel (line 67) | interface DiscreteAnimationChannel type AnimationChannel (line 70) | type AnimationChannel = type ElementAnimationChannelMap (line 75) | type ElementAnimationChannelMap = Record< type ElementAnimations (line 80) | interface ElementAnimations { type ElementKeyframe (line 84) | interface ElementKeyframe { type SelectedKeyframeRef (line 92) | interface SelectedKeyframeRef { FILE: apps/web/src/types/assets.ts type MediaType (line 3) | type MediaType = "image" | "video" | "audio"; type MediaAsset (line 5) | interface MediaAsset FILE: apps/web/src/types/blog.ts type Post (line 1) | type Post = { type Pagination (line 31) | type Pagination = { type MarblePostList (line 40) | type MarblePostList = { type MarblePost (line 45) | type MarblePost = { type Tag (line 49) | type Tag = { type MarbleTag (line 55) | type MarbleTag = { type MarbleTagList (line 59) | type MarbleTagList = { type Category (line 64) | type Category = { type MarbleCategory (line 70) | type MarbleCategory = { type MarbleCategoryList (line 74) | type MarbleCategoryList = { type Author (line 79) | type Author = { type MarbleAuthor (line 85) | type MarbleAuthor = { type MarbleAuthorList (line 89) | type MarbleAuthorList = { FILE: apps/web/src/types/drag.ts type BaseDragData (line 3) | interface BaseDragData { type MediaDragData (line 8) | interface MediaDragData extends BaseDragData { type TextDragData (line 14) | interface TextDragData extends BaseDragData { type StickerDragData (line 19) | interface StickerDragData extends BaseDragData { type EffectDragData (line 24) | interface EffectDragData extends BaseDragData { type TimelineDragData (line 30) | type TimelineDragData = FILE: apps/web/src/types/editor.ts type TPlatformLayout (line 1) | type TPlatformLayout = "tiktok"; FILE: apps/web/src/types/effects.ts type Effect (line 1) | interface Effect { type EffectParamType (line 8) | type EffectParamType = "number" | "boolean" | "select" | "color"; type EffectParamValues (line 10) | type EffectParamValues = Record; type BaseEffectParamDefinition (line 12) | interface BaseEffectParamDefinition { type NumberEffectParamDefinition (line 17) | interface NumberEffectParamDefinition extends BaseEffectParamDefinition { type BooleanEffectParamDefinition (line 25) | interface BooleanEffectParamDefinition extends BaseEffectParamDefinition { type SelectEffectParamDefinition (line 30) | interface SelectEffectParamDefinition extends BaseEffectParamDefinition { type ColorEffectParamDefinition (line 36) | interface ColorEffectParamDefinition extends BaseEffectParamDefinition { type EffectParamDefinition (line 41) | type EffectParamDefinition = type WebGLEffectPass (line 47) | interface WebGLEffectPass { type WebGLEffectRenderer (line 56) | interface WebGLEffectRenderer { type EffectRenderer (line 61) | type EffectRenderer = WebGLEffectRenderer; type EffectDefinition (line 63) | interface EffectDefinition { FILE: apps/web/src/types/export.ts constant EXPORT_QUALITY_VALUES (line 1) | const EXPORT_QUALITY_VALUES = [ constant EXPORT_FORMAT_VALUES (line 8) | const EXPORT_FORMAT_VALUES = ["mp4", "webm"] as const; type ExportFormat (line 10) | type ExportFormat = (typeof EXPORT_FORMAT_VALUES)[number]; type ExportQuality (line 11) | type ExportQuality = (typeof EXPORT_QUALITY_VALUES)[number]; type ExportOptions (line 13) | interface ExportOptions { type ExportResult (line 20) | interface ExportResult { type ExportState (line 27) | interface ExportState { FILE: apps/web/src/types/eyedropper.d.ts type EyeDropperResult (line 1) | interface EyeDropperResult { type EyeDropper (line 5) | interface EyeDropper { FILE: apps/web/src/types/fonts.ts type FontOption (line 1) | interface FontOption { type GoogleFontMeta (line 9) | interface GoogleFontMeta { type FontAtlasEntry (line 14) | interface FontAtlasEntry { type FontAtlas (line 22) | interface FontAtlas { FILE: apps/web/src/types/keybinding.ts type ModifierKeys (line 7) | type ModifierKeys = type Key (line 16) | type Key = type ModifierBasedShortcutKey (line 71) | type ModifierBasedShortcutKey = `${ModifierKeys}+${Key}`; type SingleCharacterShortcutKey (line 73) | type SingleCharacterShortcutKey = `${Key}`; type ShortcutKey (line 75) | type ShortcutKey = ModifierBasedShortcutKey | SingleCharacterShortcutKey; type KeybindingConfig (line 77) | type KeybindingConfig = { FILE: apps/web/src/types/language.ts type Language (line 3) | type Language = (typeof LANGUAGES)[number]; type LanguageCode (line 4) | type LanguageCode = Language["code"]; FILE: apps/web/src/types/project.ts type TBackground (line 3) | type TBackground = type TCanvasSize (line 13) | interface TCanvasSize { type TProjectMetadata (line 18) | interface TProjectMetadata { type TProjectSettings (line 27) | interface TProjectSettings { type TTimelineViewState (line 34) | interface TTimelineViewState { type TProject (line 40) | interface TProject { type TProjectSortKey (line 49) | type TProjectSortKey = "createdAt" | "updatedAt" | "name" | "duration"; type TSortOrder (line 50) | type TSortOrder = "asc" | "desc"; type TProjectSortOption (line 51) | type TProjectSortOption = `${TProjectSortKey}-${TSortOrder}`; FILE: apps/web/src/types/rendering.ts type Transform (line 1) | interface Transform { type BlendMode (line 10) | type BlendMode = FILE: apps/web/src/types/sounds.ts type SoundEffect (line 1) | interface SoundEffect { type SavedSound (line 24) | interface SavedSound { type SavedSoundsData (line 36) | interface SavedSoundsData { FILE: apps/web/src/types/stickers.ts type StickerCategory (line 3) | type StickerCategory = keyof typeof STICKER_CATEGORIES; type StickerItem (line 5) | interface StickerItem { type StickerSearchResult (line 13) | interface StickerSearchResult { type StickerProviderSearchOptions (line 19) | interface StickerProviderSearchOptions { type StickerProviderBrowseOptions (line 23) | interface StickerProviderBrowseOptions { type StickerResolveOptions (line 28) | interface StickerResolveOptions { type StickerProvider (line 33) | interface StickerProvider { FILE: apps/web/src/types/time.ts type TTimeCode (line 1) | type TTimeCode = "MM:SS" | "HH:MM:SS" | "HH:MM:SS:CS" | "HH:MM:SS:FF"; FILE: apps/web/src/types/timeline.ts type Bookmark (line 5) | interface Bookmark { type TScene (line 12) | interface TScene { type TrackType (line 22) | type TrackType = "video" | "text" | "audio" | "sticker" | "effect"; type BaseTrack (line 24) | interface BaseTrack { type VideoTrack (line 29) | interface VideoTrack extends BaseTrack { type TextTrack (line 37) | interface TextTrack extends BaseTrack { type AudioTrack (line 43) | interface AudioTrack extends BaseTrack { type StickerTrack (line 49) | interface StickerTrack extends BaseTrack { type EffectTrack (line 55) | interface EffectTrack extends BaseTrack { type TimelineTrack (line 61) | type TimelineTrack = type BaseAudioElement (line 70) | interface BaseAudioElement extends BaseTimelineElement { type UploadAudioElement (line 77) | interface UploadAudioElement extends BaseAudioElement { type LibraryAudioElement (line 82) | interface LibraryAudioElement extends BaseAudioElement { type AudioElement (line 87) | type AudioElement = UploadAudioElement | LibraryAudioElement; type BaseTimelineElement (line 89) | interface BaseTimelineElement { type VideoElement (line 100) | interface VideoElement extends BaseTimelineElement { type ImageElement (line 111) | interface ImageElement extends BaseTimelineElement { type TextBackground (line 121) | interface TextBackground { type TextElement (line 131) | interface TextElement extends BaseTimelineElement { type StickerElement (line 151) | interface StickerElement extends BaseTimelineElement { type EffectElement (line 161) | interface EffectElement extends BaseTimelineElement { type VisualElement (line 167) | type VisualElement = type ElementUpdatePatch (line 173) | type ElementUpdatePatch = type TimelineElement (line 178) | type TimelineElement = type ElementType (line 186) | type ElementType = TimelineElement["type"]; type CreateUploadAudioElement (line 188) | type CreateUploadAudioElement = Omit; type CreateLibraryAudioElement (line 189) | type CreateLibraryAudioElement = Omit; type CreateAudioElement (line 190) | type CreateAudioElement = type CreateVideoElement (line 193) | type CreateVideoElement = Omit; type CreateImageElement (line 194) | type CreateImageElement = Omit; type CreateTextElement (line 195) | type CreateTextElement = Omit; type CreateStickerElement (line 196) | type CreateStickerElement = Omit; type CreateEffectElement (line 197) | type CreateEffectElement = Omit; type CreateTimelineElement (line 198) | type CreateTimelineElement = type ElementDragState (line 206) | interface ElementDragState { type DropTarget (line 218) | interface DropTarget { type ComputeDropTargetParams (line 226) | interface ComputeDropTargetParams { type ClipboardItem (line 242) | interface ClipboardItem { FILE: apps/web/src/types/transcription.ts type TranscriptionLanguage (line 3) | type TranscriptionLanguage = LanguageCode | "auto"; type TranscriptionSegment (line 5) | interface TranscriptionSegment { type TranscriptionResult (line 11) | interface TranscriptionResult { type TranscriptionStatus (line 17) | type TranscriptionStatus = type TranscriptionProgress (line 24) | interface TranscriptionProgress { type TranscriptionModelId (line 30) | type TranscriptionModelId = type TranscriptionModel (line 36) | interface TranscriptionModel { type CaptionChunk (line 43) | interface CaptionChunk { FILE: apps/web/src/utils/browser.ts function downloadBlob (line 1) | function downloadBlob({ function isTypableDOMElement (line 18) | function isTypableDOMElement({ FILE: apps/web/src/utils/color.ts type ColorFormat (line 3) | type ColorFormat = "hex" | "rgb" | "hsl" | "hsv"; function hexToHsv (line 9) | function hexToHsv({ hex }: { hex: string }): [number, number, number] { function hsvToHex (line 15) | function hsvToHex({ function parseHexAlpha (line 28) | function parseHexAlpha({ hex }: { hex: string }): { function appendAlpha (line 42) | function appendAlpha({ function stripCssNoise (line 55) | function stripCssNoise({ text }: { text: string }): string { function colorToHexWithAlpha (line 71) | function colorToHexWithAlpha({ color }: { color: Rgb }): string { function extractColorFromText (line 80) | function extractColorFromText({ function formatColorValue (line 107) | function formatColorValue({ function parseColorInput (line 135) | function parseColorInput({ FILE: apps/web/src/utils/date.ts function formatDate (line 1) | function formatDate({ date }: { date: Date }): string { FILE: apps/web/src/utils/geometry.ts function dimensionToAspectRatio (line 1) | function dimensionToAspectRatio({ FILE: apps/web/src/utils/id.ts function generateUUID (line 1) | function generateUUID(): string { FILE: apps/web/src/utils/math.ts function clamp (line 1) | function clamp({ function isNearlyEqual (line 13) | function isNearlyEqual({ function evaluateMathExpression (line 25) | function evaluateMathExpression({ FILE: apps/web/src/utils/platform.ts function getPlatformSpecialKey (line 1) | function getPlatformSpecialKey(): string { function getPlatformAlternateKey (line 5) | function getPlatformAlternateKey(): string { function isAppleDevice (line 9) | function isAppleDevice(): boolean { FILE: apps/web/src/utils/string.ts function capitalizeFirstLetter (line 1) | function capitalizeFirstLetter({ string }: { string: string }) { function uppercase (line 5) | function uppercase({ string }: { string: string }) { FILE: apps/web/src/utils/ui.ts function cn (line 4) | function cn(...inputs: ClassValue[]): string { FILE: packages/env/src/tools.ts type ToolsEnv (line 27) | type ToolsEnv = z.infer; FILE: packages/env/src/web.ts type WebEnv (line 32) | type WebEnv = z.infer; FILE: packages/ui/src/icons/brand.tsx function OcVercelIcon (line 1) | function OcVercelIcon({ className }: { className?: string }) { function OcMarbleIcon (line 17) | function OcMarbleIcon({ function OcDataBuddyIcon (line 43) | function OcDataBuddyIcon({ FILE: packages/ui/src/icons/ui.tsx function OcVideoIcon (line 1) | function OcVideoIcon({ function OcCheckerboardIcon (line 34) | function OcCheckerboardIcon({ function OcSlidersVerticalIcon (line 68) | function OcSlidersVerticalIcon({ function OcSocialIcon (line 113) | function OcSocialIcon({ function OcTextWidthIcon (line 162) | function OcTextWidthIcon({ function OcTextHeightIcon (line 190) | function OcTextHeightIcon({ function OcFontIcon (line 218) | function OcFontIcon({