#!/usr/bin/env bash # PostToolUse su .tsx/.css — regola cardinale del design system: # solo token semantici (bg-card, text-muted-foreground, border-border). # # AVVISA, non blocca: le eccezioni sanzionate esistono (vedi WHITELIST) e il # debito storico e' gia' di ~450 occorrenze. Bloccare renderebbe l'hook un # ostacolo da disattivare invece di un promemoria da leggere. # # exit 0 sempre. Il messaggio su stderr arriva a Claude come contesto. set -uo pipefail INPUT=$(cat) FILE=$(printf '%s' "$INPUT" | jq -r '.tool_input.file_path // empty') case "$FILE" in *.tsx|*.css) ;; *) exit 0 ;; esac # Eccezioni sanzionate da ../CLAUDE.md § Design System: # - StatusBadge: i colori di stato usano la palette con variante dark: esplicita # - AdminShell: il verde brand della sidebar # - mailer.ts / .html: l'HTML delle email non puo' usare variabili CSS # - globals.css: e' il posto dove i token vengono *definiti* # - design-reference/: i mock precedono la regola, si traducono non si copiano case "$FILE" in *StatusBadge*|*AdminShell*|*mailer*|*globals.css|*design-reference/*) exit 0 ;; esac TESTO=$(printf '%s' "$INPUT" | jq -r ' [ .tool_input.content?, .tool_input.new_string?, (.tool_input.edits? // [] | .[].new_string?) ] | map(select(. != null)) | join("\n") ') [ -z "$TESTO" ] && exit 0 PALETTE='slate|gray|zinc|neutral|stone|red|orange|amber|yellow|lime|green|emerald|teal|cyan|sky|blue|indigo|violet|purple|fuchsia|pink|rose' GREZZE=$(printf '%s\n' "$TESTO" \ | grep -oE "\\b(bg|text|border|ring|from|to|via|fill|stroke|divide|outline|shadow|accent|decoration|placeholder)-($PALETTE)-[0-9]{2,3}\\b" \ | sort -u | head -12 || true) HEX=$(printf '%s\n' "$TESTO" \ | grep -oE '#[0-9a-fA-F]{3,8}\b' | sort -u | head -6 || true) if [ -n "$GREZZE" ] || [ -n "$HEX" ]; then { echo "AVVISO design system — token semantici, non palette grezza." echo "File: $FILE" [ -n "$GREZZE" ] && { echo " classi grezze: $(printf '%s ' $GREZZE)"; } [ -n "$HEX" ] && { echo " hex letterali: $(printf '%s ' $HEX)"; } echo echo "Usa bg-card / text-muted-foreground / border-border: e' quello che fa" echo "funzionare chiaro e scuro sul solo toggle della classe .dark." echo "Riferimento: design-reference/DESIGN-SYSTEM.md" echo "Eccezione sanzionata? Aggiungi il file alla WHITELIST di questo hook." } >&2 fi exit 0