diff --git a/frontend/src/components/panels/DetailPanel.tsx b/frontend/src/components/panels/DetailPanel.tsx index 86ad5be..47b0f1d 100644 --- a/frontend/src/components/panels/DetailPanel.tsx +++ b/frontend/src/components/panels/DetailPanel.tsx @@ -506,11 +506,33 @@ function ServiceForm({ form, onChange, onConfirm, onCancel, confirmLabel, autoFo confirmLabel: string autoFocus?: boolean }) { + const setPort = (value: string) => { + const digitsOnly = value.replace(/\D/g, '').slice(0, 5) + onChange({ ...form, port: digitsOnly }) + } + + const clampPort = (value: string) => { + if (!value) return '' + const parsed = Number.parseInt(value, 10) + if (!Number.isFinite(parsed)) return '' + return String(Math.max(1, Math.min(65535, parsed))) + } + return (
onChange({ ...form, service_name: e.target.value })} placeholder="Service name" className="bg-[#21262d] border-[#30363d] text-xs h-7" autoFocus={autoFocus} onKeyDown={(e) => e.key === 'Enter' && onConfirm()} />
- onChange({ ...form, port: e.target.value })} placeholder="Port" min={1} max={65535} className="bg-[#21262d] border-[#30363d] font-mono text-xs h-7 w-28 shrink-0" onKeyDown={(e) => e.key === 'Enter' && onConfirm()} /> + setPort(e.target.value)} + onBlur={() => onChange({ ...form, port: clampPort(form.port) })} + placeholder="Port" + className="bg-[#21262d] border-[#30363d] font-mono text-xs h-7 w-28 shrink-0" + onKeyDown={(e) => e.key === 'Enter' && onConfirm()} + />