diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
index 27e2a8a..f2d05a3 100644
--- a/.github/copilot-instructions.md
+++ b/.github/copilot-instructions.md
@@ -15,8 +15,11 @@ Aidventure is an MVP web application that helps adventure racers generate and ma
- ✅ Complete type definitions for checklists / items (`src/types/checklist.ts`)
- ✅ LocalStorage persistence layer with versioning + cross-tab sync
- ✅ Zustand state management with full CRUD operations
-- ✅ Checklist UI: category grouping, add/edit/delete items, inline editing, bulk complete/reset, progress metrics (see `CHECKLIST_UI.md`)
-- ✅ Accessibility basics: keyboard flows, ARIA labels on interactive elements
+- ✅ Checklist UI: category-based organization, add/edit/delete items, inline editing, bulk complete/reset, progress metrics
+- ✅ Category labels displayed and editable from both checklist view and item edit mode
+- ✅ In-page confirmations for all delete actions (checklist and items)
+- ✅ Hover underlines on clickable checklist and item names
+- ✅ Accessibility basics: keyboard flows, ARIA labels on interactive elements, no popups for confirmations
- ✅ Comprehensive tests for storage + state layers (Vitest + RTL)
- ✅ Docker setup for consistent development
diff --git a/README.md b/README.md
index b47bb76..e7320b5 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,10 @@ Aidventure is a React-based web application designed to help adventure racers cr
- Complete type system for checklists and items
- LocalStorage persistence layer with cross-tab synchronization
- Zustand state management with full CRUD operations
-- Checklist UI (category grouping, add/edit/delete items, progress, bulk actions) – see `frontend/CHECKLIST_UI.md`
+- Checklist UI with category-based organization, inline editing, and delete confirmations
+- Category labels displayed and editable from both checklist view and item scope
+- In-page confirmations for all delete actions (no popups)
+- Visual feedback with hover underlines on clickable elements
- Comprehensive test coverage (storage + state management; UI tests upcoming)
- Docker development environment with hot reload
- Complete linting and formatting setup
diff --git a/frontend/src/components/ChecklistDemo.tsx b/frontend/src/components/ChecklistDemo.tsx
index 311c379..f864c35 100644
--- a/frontend/src/components/ChecklistDemo.tsx
+++ b/frontend/src/components/ChecklistDemo.tsx
@@ -32,14 +32,12 @@ export function ChecklistDemo() {
await addItem(checklist.id, {
name: 'Topographic maps',
category: 'Navigation',
- priority: 'high',
completed: false,
});
await addItem(checklist.id, {
name: 'Compass',
category: 'Navigation',
- priority: 'high',
completed: false,
});
@@ -47,7 +45,6 @@ export function ChecklistDemo() {
name: 'Energy gels',
category: 'Nutrition',
quantity: 10,
- priority: 'normal',
completed: false,
});
@@ -55,14 +52,12 @@ export function ChecklistDemo() {
name: 'Water bottles',
category: 'Hydration',
quantity: 2,
- priority: 'high',
completed: false,
});
await addItem(checklist.id, {
name: 'First aid kit',
category: 'Emergency',
- priority: 'high',
completed: false,
});
@@ -157,7 +152,6 @@ export function ChecklistDemo() {
{item.category}
- {item.priority && ` • ${item.priority}`}
diff --git a/frontend/src/components/checklist/AddItemForm.tsx b/frontend/src/components/checklist/AddItemForm.tsx
index 45aae89..cc2141e 100644
--- a/frontend/src/components/checklist/AddItemForm.tsx
+++ b/frontend/src/components/checklist/AddItemForm.tsx
@@ -3,17 +3,16 @@ import type { Item } from '../../types/checklist';
interface AddItemFormProps {
checklistId: string;
- category: string;
+ category?: string; // Optional, not used but kept for backward compatibility
onAdd: (checklistId: string, item: Omit- ) => Promise;
onCancel?: () => void;
}
-export function AddItemForm({ checklistId, category, onAdd, onCancel }: AddItemFormProps) {
+export function AddItemForm({ checklistId, onAdd, onCancel }: AddItemFormProps) {
const [name, setName] = useState('');
const [notes, setNotes] = useState('');
const [quantity, setQuantity] = useState('1');
- const [priority, setPriority] = useState<'high' | 'normal' | 'optional'>('normal');
- const [selectedCategory, setSelectedCategory] = useState(category);
+ const [selectedCategory, setSelectedCategory] = useState('');
const [isSubmitting, setIsSubmitting] = useState(false);
const inputRef = useRef(null);
@@ -32,10 +31,9 @@ export function AddItemForm({ checklistId, category, onAdd, onCancel }: AddItemF
try {
await onAdd(checklistId, {
name: name.trim(),
- category: selectedCategory,
+ category: selectedCategory.trim() || undefined,
notes: notes.trim() || undefined,
quantity: quantity ? parseInt(quantity, 10) : undefined,
- priority,
completed: false,
});
@@ -43,7 +41,7 @@ export function AddItemForm({ checklistId, category, onAdd, onCancel }: AddItemF
setName('');
setNotes('');
setQuantity('1');
- setPriority('normal');
+ setSelectedCategory('');
inputRef.current?.focus();
} finally {
setIsSubmitting(false);
@@ -92,29 +90,16 @@ export function AddItemForm({ checklistId, category, onAdd, onCancel }: AddItemF
aria-label="Notes"
/>
-
- setQuantity(e.target.value)}
- onKeyDown={handleKeyDown}
- placeholder="Quantity"
- className="w-24 px-3 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-accent"
- aria-label="Quantity"
- min="1"
- />
-
-
-
+ setQuantity(e.target.value)}
+ onKeyDown={handleKeyDown}
+ placeholder="Quantity"
+ className="w-full px-3 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-accent"
+ aria-label="Quantity"
+ min="1"
+ />