diff --git a/frontend/src/components/FileConfigCard.jsx b/frontend/src/components/FileConfigCard.jsx index dcc3d1b..92edb5e 100644 --- a/frontend/src/components/FileConfigCard.jsx +++ b/frontend/src/components/FileConfigCard.jsx @@ -9,6 +9,8 @@ const DEFAULT_ICON_SIZE = 256; const ARCHIVE_COMPRESSION_FORMATS = ['zip', 'tar.gz', 'tar.bz2', '7z', 'tar.7z']; const AUDIO_BITRATE_FORMATS = ['mp3', 'ogg', 'aac', 'm4a']; const AUDIO_BITRATES = [128, 192, 256, 320]; +const VIDEO_RESOLUTION_FORMATS = ['mp4', 'webm', 'mov', 'avi', 'mkv']; +const VIDEO_RESOLUTIONS = [480, 720, 1080]; function rangeProgress(value, min, max) { return `${((value - min) / (max - min)) * 100}%`; @@ -122,6 +124,33 @@ export function FileConfigCard({ item, index, t, onTargetFormatChange, onQuality )} + {VIDEO_RESOLUTION_FORMATS.includes(item.targetFormat) && ( +
+ {t('quality.resolution')} +
+ + {VIDEO_RESOLUTIONS.map((resolution) => ( + + ))} +
+
+ )} + {item.targetFormat === 'ico' && (
{t('quality.iconSize')} diff --git a/frontend/src/components/FormatMarquee.jsx b/frontend/src/components/FormatMarquee.jsx index 721460f..7f6eb3d 100644 --- a/frontend/src/components/FormatMarquee.jsx +++ b/frontend/src/components/FormatMarquee.jsx @@ -8,6 +8,7 @@ const PAIRS = [ ['epub', 'mobi'], ['rar', 'zip'], ['wav', 'mp3'], + ['mov', 'mp4'], ]; function Pill({ from, to }) { diff --git a/frontend/src/components/FormatsGrid.jsx b/frontend/src/components/FormatsGrid.jsx index ce2b180..840ae68 100644 --- a/frontend/src/components/FormatsGrid.jsx +++ b/frontend/src/components/FormatsGrid.jsx @@ -1,5 +1,5 @@ import { useTranslation } from 'react-i18next'; -import { Image, FileText, TextAa, BookOpen, Archive, MusicNotes } from '@phosphor-icons/react'; +import { Image, FileText, TextAa, BookOpen, Archive, MusicNotes, VideoCamera } from '@phosphor-icons/react'; import { FORMAT_FAMILIES } from '../data/formats.js'; const FAMILY_ICONS = { @@ -9,6 +9,7 @@ const FAMILY_ICONS = { ebooks: BookOpen, archives: Archive, audio: MusicNotes, + video: VideoCamera, }; export function FormatsGrid() { diff --git a/frontend/src/data/formats.js b/frontend/src/data/formats.js index dbac564..30ba28a 100644 --- a/frontend/src/data/formats.js +++ b/frontend/src/data/formats.js @@ -23,4 +23,8 @@ export const FORMAT_FAMILIES = [ key: 'audio', formats: ['mp3', 'wav', 'ogg', 'flac', 'aac', 'm4a'], }, + { + key: 'video', + formats: ['mp4', 'webm', 'mov', 'avi', 'mkv'], + }, ]; diff --git a/frontend/src/index.css b/frontend/src/index.css index f4bf808..3800d7a 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -25,6 +25,7 @@ --color-family-ebooks: #10b981; --color-family-archives: #64748b; --color-family-audio: #ec4899; + --color-family-video: #38bdf8; --font-sans: 'Plus Jakarta Sans', system-ui, 'Segoe UI', Roboto, sans-serif; --font-display: 'Bricolage Grotesque', var(--font-sans); @@ -55,6 +56,7 @@ --color-family-ebooks: #34d399; --color-family-archives: #94a3b8; --color-family-audio: #f472b6; + --color-family-video: #7dd3fc; } *, *::before, *::after { diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index 51787a0..0b6401b 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -23,7 +23,9 @@ "compression": "Compression", "iconSize": "Icon size", "compressPdf": "Compress as JPEG", - "bitrate": "Bitrate" + "bitrate": "Bitrate", + "resolution": "Resolution", + "original": "Original" }, "job": { "converting": "Converting...", @@ -43,7 +45,8 @@ "fonts": "Fonts", "ebooks": "Ebooks", "archives": "Archives", - "audio": "Audio" + "audio": "Audio", + "video": "Video" }, "footer": { "rights": "Ombrora Convert — Online file conversion" diff --git a/frontend/src/locales/fr.json b/frontend/src/locales/fr.json index a0a46b7..6afe024 100644 --- a/frontend/src/locales/fr.json +++ b/frontend/src/locales/fr.json @@ -23,7 +23,9 @@ "compression": "Compression", "iconSize": "Taille de l'icône", "compressPdf": "Compresser en JPEG", - "bitrate": "Bitrate" + "bitrate": "Bitrate", + "resolution": "Résolution", + "original": "Original" }, "job": { "converting": "Conversion en cours...", @@ -43,7 +45,8 @@ "fonts": "Polices", "ebooks": "Ebooks", "archives": "Archives", - "audio": "Audio" + "audio": "Audio", + "video": "Vidéo" }, "footer": { "rights": "Ombrora Convert — Conversion de fichiers en ligne" diff --git a/frontend/src/utils/fileFamily.js b/frontend/src/utils/fileFamily.js index 7d0745d..e768865 100644 --- a/frontend/src/utils/fileFamily.js +++ b/frontend/src/utils/fileFamily.js @@ -1,4 +1,4 @@ -import { Image, FileText, TextAa, BookOpen, Archive, MusicNotes, File as FileIcon } from '@phosphor-icons/react'; +import { Image, FileText, TextAa, BookOpen, Archive, MusicNotes, VideoCamera, File as FileIcon } from '@phosphor-icons/react'; import { FORMAT_FAMILIES } from '../data/formats.js'; const FAMILY_ICONS = { @@ -8,6 +8,7 @@ const FAMILY_ICONS = { ebooks: BookOpen, archives: Archive, audio: MusicNotes, + video: VideoCamera, }; export function familyForExtension(extension) {