/** * Full-screen pages that render without the site header and footer: the /start new-tab * dashboard and the book reader. They also skip loading the header's JS (icons, menus, * the mobile Sheet): src/routes/+layout.ts only imports SiteChrome for other pages. */ export function isImmersive(pathname: string): boolean { return /^\/start\/?$/.test(pathname) || /^\/trackers\/books\/\d+\/read\/?$/.test(pathname); } /** True when a keyboard shortcut should not fire because the user is typing. */ export function isTyping(target: EventTarget | null): boolean { if (!(target instanceof HTMLElement)) return false; return ( target.isContentEditable || target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.tagName === 'SELECT' ); }