import React from 'react'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import { Label } from '@/components/ui/label'; import { Input } from '@/components/ui/input'; import { ImageSelector } from './image-selector'; interface PostType { name: string; label: string; } interface ImageData { id: number; url: string; preview_url: string; width?: number; height?: number; } interface SettingsFormProps { settings: { post_types: string[]; full_content: boolean; days_to_include: number; delete_on_uninstall: boolean; llm_response_image_id?: number; llm_response_image_position?: 'before' | 'after'; }; postTypes: PostType[]; isPremium: boolean; imageData?: ImageData | null; onSubmit: (settings: any) => void; } export function SettingsForm({ settings, postTypes, isPremium, imageData, onSubmit }: SettingsFormProps) { const [formState, setFormState] = React.useState({ post_types: settings.post_types, full_content: settings.full_content, days_to_include: settings.days_to_include, delete_on_uninstall: settings.delete_on_uninstall, llm_response_image_id: settings.llm_response_image_id || 0, llm_response_image_position: settings.llm_response_image_position || 'after', }); const [currentImageData, setCurrentImageData] = React.useState(imageData || null); const handlePostTypeChange = (postType: string, checked: boolean) => { setFormState(prev => ({ ...prev, post_types: checked ? [...prev.post_types, postType] : prev.post_types.filter(pt => pt !== postType) })); }; const handleCheckboxChange = (name: 'full_content' | 'delete_on_uninstall', checked: boolean) => { setFormState(prev => ({ ...prev, [name]: checked })); }; const handleDaysChange = (value: string) => { const days = parseInt(value, 10); setFormState(prev => ({ ...prev, days_to_include: isNaN(days) ? 0 : days })); }; const handleImageSelect = (imageData: ImageData | null) => { setCurrentImageData(imageData); setFormState(prev => ({ ...prev, llm_response_image_id: imageData ? imageData.id : 0, })); }; const handleImagePositionChange = (position: 'before' | 'after') => { setFormState(prev => ({ ...prev, llm_response_image_position: position, })); }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); onSubmit(formState); }; return (

General Settings

Configure which content should be included in the llms.txt file and associated Markdown exports.

Content Types to Include

{postTypes.map((postType) => (
handlePostTypeChange(postType.name, !!checked)} />
))}

Content Export

handleCheckboxChange('full_content', !!checked)} />

Time Period

handleDaysChange(e.target.value)} />

Number of days of content to include (0 = all content)

Cleanup on Uninstall

handleCheckboxChange('delete_on_uninstall', !!checked)} />
{/* Image Selector Section */} ); }