mirror of
https://github.com/AgentSeal/codeburn.git
synced 2026-10-29 10:33:13 +00:00
Measured design audit fixes, one type ladder and header, zero clipping at 900 to 1680, light-theme contrast, Lucide icons, shared Escape, plurals and provider names, motion tokens with zero refresh shift, black frame with rounded content card, grouped monochrome sidebar with collapse, two-layer card system on every screen, Overview gauge, sparkline cards and chart grid, wallpaper onboarding, Windows fixes. Every number diffed identical to main on a fixed range; 1,032 app tests passing.
14 lines
564 B
TypeScript
14 lines
564 B
TypeScript
import { useEffect } from 'react'
|
|
|
|
/** Escape closes the overlay. One document-level listener for every overlay in
|
|
* the app so a dropdown, popover, calendar, drawer and modal all behave alike. */
|
|
export function useEscape(active: boolean, onEscape: () => void): void {
|
|
useEffect(() => {
|
|
if (!active) return
|
|
const onKeyDown = (event: KeyboardEvent) => {
|
|
if (event.key === 'Escape') onEscape()
|
|
}
|
|
document.addEventListener('keydown', onKeyDown)
|
|
return () => document.removeEventListener('keydown', onKeyDown)
|
|
}, [active, onEscape])
|
|
}
|