'use client'; import { FormEvent, useState } from 'react'; import { useI18n } from '@/features/i18n/model/useI18n'; const OPTIONAL_PREFIX_PATTERN = /^(?:선택|optional|任意|facultatif)\s*[::]\s*/i; const EXAMPLE_PREFIX_PATTERN = /^(?:예|例|e\.?\s?g\.?|eg\.?|example|exemple|beispiel|p\.?\s?ex\.?|z\.?\s?b\.?)\s*[::)\.]\s*/i; const buildMissionPlaceholder = (raw: string, optionalLabel: string) => { const sanitized = raw .trim() .replace(OPTIONAL_PREFIX_PATTERN, '') .replace(EXAMPLE_PREFIX_PATTERN, '') .trim(); if (!sanitized) return ''; const normalizedOptionalLabel = optionalLabel.trim(); if (!normalizedOptionalLabel) return sanitized; return `${sanitized} (${normalizedOptionalLabel})`; }; export function BoardingMissionForm({ onDock, onCancel, autoFocus = false, compact = false, }: { onDock: (mission: string) => void; onCancel?: () => void; autoFocus?: boolean; compact?: boolean; }) { const { t } = useI18n(); const [mission, setMission] = useState(''); const trimmedMission = mission.trim(); const missionPlaceholder = buildMissionPlaceholder( t('boarding.missionPlaceholder'), t('boarding.optionalLabel'), ); const handleSubmit = (event: FormEvent) => { event.preventDefault(); onDock(trimmedMission); }; return (
setMission(event.target.value)} placeholder={missionPlaceholder} className="w-full border-b-2 border-slate-700 bg-slate-900/50 px-0 py-3 text-lg outline-none transition-colors placeholder:text-slate-600 focus:border-indigo-500" autoFocus={autoFocus} />
{onCancel && ( )}
); }