Files
OpenCut/apps/web/src/components/footer.tsx
T
coderabbitai[bot]andGitHub 65cc22bf7f 📝 Add docstrings to feature/mirroring
Docstrings generation was requested by @joepduin.

* https://github.com/OpenCut-app/OpenCut/pull/638#issuecomment-3444277885

The following files were modified:

* `apps/web/src/app/api/get-upload-url/route.ts`
* `apps/web/src/app/api/sounds/search/route.ts`
* `apps/web/src/app/api/transcribe/route.ts`
* `apps/web/src/app/api/waitlist/export/route.ts`
* `apps/web/src/components/editor/export-button.tsx`
* `apps/web/src/components/editor/layout-guide-overlay.tsx`
* `apps/web/src/components/editor/media-panel/tabbar.tsx`
* `apps/web/src/components/editor/media-panel/views/captions.tsx`
* `apps/web/src/components/editor/media-panel/views/media.tsx`
* `apps/web/src/components/editor/media-panel/views/stickers.tsx`
* `apps/web/src/components/editor/panel-base-view.tsx`
* `apps/web/src/components/editor/panel-preset-selector.tsx`
* `apps/web/src/components/editor/preview-panel.tsx`
* `apps/web/src/components/editor/properties-panel/index.tsx`
* `apps/web/src/components/editor/properties-panel/media-properties.tsx`
* `apps/web/src/components/editor/properties-panel/text-properties.tsx`
* `apps/web/src/components/editor/timeline/timeline-element.tsx`
* `apps/web/src/components/editor/timeline/timeline-marker.tsx`
* `apps/web/src/components/footer.tsx`
* `apps/web/src/components/icons.tsx`
* `apps/web/src/components/keyboard-shortcuts-help.tsx`
* `apps/web/src/components/language-select.tsx`
* `apps/web/src/components/theme-toggle.tsx`
* `apps/web/src/components/ui/editable-timecode.tsx`
* `apps/web/src/components/ui/font-picker.tsx`
* `apps/web/src/components/ui/input-with-back.tsx`
* `apps/web/src/hooks/use-edge-auto-scroll.ts`
* `apps/web/src/hooks/use-frame-cache.ts`
* `apps/web/src/hooks/use-highlight-scroll.ts`
* `apps/web/src/hooks/use-infinite-scroll.ts`
* `apps/web/src/hooks/use-sound-search.ts`
* `apps/web/src/lib/editor-utils.ts`
* `apps/web/src/lib/export.ts`
* `apps/web/src/lib/iconify-api.ts`
* `apps/web/src/lib/timeline-renderer.ts`
* `apps/web/src/lib/transcription-utils.ts`
* `apps/web/src/lib/zk-encryption.ts`
* `apps/web/src/stores/text-properties-store.ts`
2025-10-24 18:01:39 +00:00

137 lines
4.8 KiB
TypeScript

"use client";
import { motion } from "motion/react";
import Link from "next/link";
import { RiDiscordFill, RiTwitterXLine } from "react-icons/ri";
import { FaGithub } from "react-icons/fa6";
import Image from "next/image";
/**
* Renders the site footer containing the brand, social icons, and navigational links.
*
* The footer animates its opacity from 0 to 1 on mount. External links open in a new tab with rel="noopener noreferrer".
*
* @returns The footer React element
*/
export function Footer() {
return (
<motion.footer
className="bg-background border-t"
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ delay: 0.8, duration: 0.8 }}
>
<div className="max-w-5xl mx-auto px-8 py-10">
<div className="grid grid-cols-1 md:grid-cols-2 gap-12 mb-8">
{/* Brand Section */}
<div className="md:col-span-1 max-w-sm">
<div className="flex justify-start items-center gap-2 mb-4">
<Image
src="/logo.svg"
alt="OpenCut"
width={24}
height={24}
className="invert dark:invert-0"
/>
<span className="font-bold text-lg">OpenCut</span>
</div>
<p className="text-sm md:text-left text-muted-foreground mb-5">
The open source video editor that gets the job done. Simple,
powerful, and works on any platform.
</p>
<div className="flex justify-start gap-3">
<Link
href="https://github.com/OpenCut-app/OpenCut"
className="text-muted-foreground hover:text-foreground transition-colors"
target="_blank"
rel="noopener noreferrer"
>
<FaGithub className="h-5 w-5" />
</Link>
<Link
href="https://x.com/OpenCutApp"
className="text-muted-foreground hover:text-foreground transition-colors"
target="_blank"
rel="noopener noreferrer"
>
<RiTwitterXLine className="h-5 w-5" />
</Link>
<Link
href="https://discord.com/invite/Mu3acKZvCp"
className="text-muted-foreground hover:text-foreground transition-colors"
target="_blank"
rel="noopener noreferrer"
>
<RiDiscordFill className="h-5 w-5" />
</Link>
</div>
</div>
<div className="flex gap-12 justify-start items-start py-2">
<div>
<h3 className="font-semibold text-foreground mb-4">Resources</h3>
<ul className="space-y-2 text-sm">
<li>
<Link
href="/roadmap"
className="text-muted-foreground hover:text-foreground transition-colors"
>
Roadmap
</Link>
</li>
<li>
<Link
href="/privacy"
className="text-muted-foreground hover:text-foreground transition-colors"
>
Privacy policy
</Link>
</li>
<li>
<Link
href="/terms"
className="text-muted-foreground hover:text-foreground transition-colors"
>
Terms of use
</Link>
</li>
</ul>
</div>
{/* Company Links */}
<div>
<h3 className="font-semibold text-foreground mb-4">Company</h3>
<ul className="space-y-2 text-sm">
<li>
<Link
href="/contributors"
className="text-muted-foreground hover:text-foreground transition-colors"
>
Contributors
</Link>
</li>
<li>
<Link
href="https://github.com/OpenCut-app/OpenCut/blob/main/README.md"
className="text-muted-foreground hover:text-foreground transition-colors"
target="_blank"
rel="noopener noreferrer"
>
About
</Link>
</li>
</ul>
</div>
</div>
</div>
{/* Bottom Section */}
<div className="pt-2 flex flex-col md:flex-row justify-between items-start gap-4">
<div className="flex items-center gap-4 text-sm text-muted-foreground">
<span>© 2025 OpenCut, All Rights Reserved</span>
</div>
</div>
</div>
</motion.footer>
);
}