#!/bin/bash # Check accessibility compliance after component modifications # This hook runs after Write/Edit/MultiEdit operations # Colors for output RED='\033[0;31m' YELLOW='\033[1;33m' GREEN='\033[0;32m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Read tool result from stdin TOOL_RESULT=$(cat) TOOL_NAME=$(echo "$TOOL_RESULT" | jq -r '.tool_name // empty' 2>/dev/null) # Only process if it's a file modification tool if [[ "$TOOL_NAME" != "Write" ]] && [[ "$TOOL_NAME" != "Edit" ]] && [[ "$TOOL_NAME" != "MultiEdit" ]]; then echo "$TOOL_RESULT" exit 0 fi # Extract file path FILE_PATH=$(echo "$TOOL_RESULT" | jq -r '.tool_input.file_path // empty' 2>/dev/null) # Only process component files if [[ ! "$FILE_PATH" =~ \.(tsx?|jsx?)$ ]] || [[ ! "$FILE_PATH" =~ component ]]; then echo "$TOOL_RESULT" exit 0 fi # Check if file exists if [ ! -f "$FILE_PATH" ]; then echo "$TOOL_RESULT" exit 0 fi echo -e "${BLUE}🔍 Checking accessibility in $FILE_PATH...${NC}" >&2 # Initialize counters ISSUES=0 WARNINGS=0 # Function to check patterns check_pattern() { local pattern="$1" local message="$2" local type="$3" # "error" or "warning" if grep -q "$pattern" "$FILE_PATH"; then if [ "$type" = "error" ]; then echo -e "${RED}❌ A11y Issue: $message${NC}" >&2 ((ISSUES++)) else echo -e "${YELLOW}⚠️ A11y Warning: $message${NC}" >&2 ((WARNINGS++)) fi return 1 fi return 0 } # Function to check for missing patterns check_missing() { local pattern="$1" local context="$2" local message="$3" if grep -q "$context" "$FILE_PATH"; then if ! grep -q "$pattern" "$FILE_PATH"; then echo -e "${YELLOW}⚠️ A11y Warning: $message${NC}" >&2 ((WARNINGS++)) return 1 fi fi return 0 } # Check for interactive elements without keyboard support if grep -qE '<(button|a|input|select|textarea)' "$FILE_PATH"; then # Check for onClick without onKeyDown/onKeyPress if grep -q 'onClick=' "$FILE_PATH"; then if ! grep -qE '(onKeyDown|onKeyPress|onKeyUp)=' "$FILE_PATH"; then echo -e "${YELLOW}⚠️ A11y Warning: onClick handlers should have keyboard alternatives${NC}" >&2 ((WARNINGS++)) fi fi # Check for proper button usage if grep -q '