From ffcddab475d16dddfc707655a7ab46664beae27e Mon Sep 17 00:00:00 2001 From: chihlasm Date: Wed, 25 Feb 2026 00:14:44 -0500 Subject: [PATCH] fix: ForkModal accessibility and UX (escape, click-outside, labels, maxLength) Co-Authored-By: Claude Sonnet 4.6 --- frontend/src/components/library/ForkModal.tsx | 30 +++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/library/ForkModal.tsx b/frontend/src/components/library/ForkModal.tsx index fc191396..d98c0629 100644 --- a/frontend/src/components/library/ForkModal.tsx +++ b/frontend/src/components/library/ForkModal.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react' +import { useState, useEffect } from 'react' import { GitBranch, X } from 'lucide-react' import { treesApi } from '@/api/trees' import { toast } from '@/lib/toast' @@ -18,6 +18,14 @@ export function ForkModal({ treeId, treeName, onClose }: ForkModalProps) { const [isSubmitting, setIsSubmitting] = useState(false) const [error, setError] = useState(null) + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === 'Escape') onClose() + } + document.addEventListener('keydown', handleKeyDown) + return () => document.removeEventListener('keydown', handleKeyDown) + }, [onClose]) + const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!name.trim()) return @@ -40,8 +48,14 @@ export function ForkModal({ treeId, treeName, onClose }: ForkModalProps) { } return ( -
-
+
+
e.stopPropagation()} + > {/* Header */}
@@ -50,6 +64,7 @@ export function ForkModal({ treeId, treeName, onClose }: ForkModalProps) {