/** * MediaSettings component - Media export configuration interface. * * @package GetMD * @since 0.5.0 */ import { useState } from 'react'; import { Image, Settings2, Info } from 'lucide-react'; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from './ui/card'; import { Switch } from './ui/switch'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from './ui/select'; import { Collapsible, CollapsibleContent, CollapsibleTrigger } from './ui/collapsible'; import { Button } from './ui/button'; export interface MediaSettingsValues { enable_media_export: boolean; include_featured_images: boolean; include_inline_images: boolean; include_galleries: boolean; include_attachments: boolean; download_external_images: boolean; optimize_images: boolean; image_size: 'thumbnail' | 'medium' | 'medium_large' | 'large' | 'full'; max_width: number; max_height: number; quality: number; } interface MediaSettingsProps { settings: MediaSettingsValues; onChange: (settings: MediaSettingsValues) => void; disabled?: boolean; } export function MediaSettings({ settings, onChange, disabled = false }: MediaSettingsProps) { const { i18n } = window.summixGetmdData || {}; const [isOptimizationOpen, setIsOptimizationOpen] = useState(false); const updateSetting = ( key: K, value: MediaSettingsValues[K] ) => { onChange({ ...settings, [key]: value }); }; return ( {i18n?.mediaSettingsTitle || 'Media Export'} {i18n?.mediaSettingsDesc || 'Bundle images and media files with your export'} {/* Master Toggle */}

{i18n?.enableMediaExportDesc || 'Download and bundle media files with markdown'}

updateSetting('enable_media_export', checked)} disabled={disabled} />
{/* Media Inclusion Options */} {settings.enable_media_export && ( <>

{i18n?.whatToInclude || 'What to include'}

{/* Featured Images */}
updateSetting('include_featured_images', checked)} disabled={disabled} />
{/* Inline Images */}
updateSetting('include_inline_images', checked)} disabled={disabled} />
{/* Gallery Images */}
updateSetting('include_galleries', checked)} disabled={disabled} />
{/* Attachments */}

{i18n?.attachmentPostsDesc || 'Export media library items as posts'}

updateSetting('include_attachments', checked)} disabled={disabled} />
{/* External Images */}

{i18n?.externalImagesDesc || 'Download images from external domains'}

updateSetting('download_external_images', checked)} disabled={disabled} />
{/* Image Size Selection */}

{i18n?.imageSizeDesc || 'WordPress image size to use for downloads'}

{/* Optimization Settings (Collapsible) */}

{i18n?.optimizeImagesDesc || 'Resize and compress images to reduce file size'}

updateSetting('optimize_images', checked)} disabled={disabled} /> {settings.optimize_images && ( )}
{settings.optimize_images && ( {/* Max Width */}
updateSetting('max_width', parseInt(e.target.value) || 2048)} disabled={disabled} className="smx-flex smx-h-9 smx-w-full smx-rounded-md smx-border smx-border-input smx-bg-transparent smx-px-3 smx-py-1 smx-text-sm smx-shadow-sm smx-transition-colors file:smx-border-0 file:smx-bg-transparent file:smx-text-sm file:smx-font-medium placeholder:smx-text-muted-foreground focus-visible:smx-outline-none focus-visible:smx-ring-1 focus-visible:smx-ring-ring disabled:smx-cursor-not-allowed disabled:smx-opacity-50" />
{/* Max Height */}
updateSetting('max_height', parseInt(e.target.value) || 2048)} disabled={disabled} className="smx-flex smx-h-9 smx-w-full smx-rounded-md smx-border smx-border-input smx-bg-transparent smx-px-3 smx-py-1 smx-text-sm smx-shadow-sm smx-transition-colors file:smx-border-0 file:smx-bg-transparent file:smx-text-sm file:smx-font-medium placeholder:smx-text-muted-foreground focus-visible:smx-outline-none focus-visible:smx-ring-1 focus-visible:smx-ring-ring disabled:smx-cursor-not-allowed disabled:smx-opacity-50" />
{/* Quality */}
{settings.quality}%
updateSetting('quality', parseInt(e.target.value))} disabled={disabled} className="smx-w-full" />

{i18n?.qualityDesc || 'Higher quality = larger file size'}

)}
{/* Info Note */}

{i18n?.mediaNote || 'Media files are organized in a /media directory and referenced with relative paths in your markdown.'}

)}
); }