Files
website/src/lib/chrome.ts
Stan Runge cc4b10f239
All checks were successful
Deploy production / deploy (push) Successful in 2m56s
site: owner-only dashboard link in header, mobile menu and homepage (g then d from any page); /start skips the site chrome JS
- Header/footer moved to #lib/components/SiteChrome.svelte, returned by a universal
  +layout.ts load only for non-immersive pages, so /start and the book reader never
  download icon libraries, dropdowns or the bits-ui Sheet. /start: 36 -> 18 JS files,
  133 -> 78 KB gzip.
- Header logo is a hashed asset (inlined), so it is cached with the build.
- inlineStyleThreshold 4096: tiny page/component CSS is inlined into the HTML.
- Umami is not loaded on /start.
2026-10-24 15:35:38 +00:00

20 lines
763 B
TypeScript

/**
* 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'
);
}