type GridLayer = HTMLElement & { dataset: { grid: string } }; type ToggleButton = HTMLButtonElement & { dataset: { toggle: string } }; export class GridManager { private readonly STORAGE_KEY = "unitgl:grid:visibility"; private visibilityMap: Record = {}; constructor() { // console.log("Initializing GridManager...") if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", () => this.init()); } else { this.init(); } } private init(): void { this.loadVisibility(); this.applyVisibilityState(); this.setupToggleButtons(); this.updateAllGridHeights(); window.addEventListener("resize", () => this.updateAllGridHeights()); window.addEventListener("scroll", () => this.updateAllGridHeights()); // console.log("GridManager initialized") } private loadVisibility(): void { // console.log("Loading grid visibility state from localStorage") try { this.visibilityMap = JSON.parse( localStorage.getItem(this.STORAGE_KEY) || "{}", ); // console.log("Loaded visibility map:", this.visibilityMap) } catch { this.visibilityMap = {}; } } private saveVisibility(): void { localStorage.setItem( this.STORAGE_KEY, JSON.stringify(this.visibilityMap), ); // console.log("Saved grid visibility state:", this.visibilityMap) } private updateAllGridHeights(): void { const height = Math.max( document.documentElement.scrollHeight, document.body.scrollHeight, document.documentElement.offsetHeight, document.body.offsetHeight, ); document .querySelectorAll(".guide--layer") .forEach((layer) => { if (layer.offsetHeight !== height) { layer.style.height = `${height}px`; } }); } private applyVisibilityState(): void { document .querySelectorAll(".guide--layer") .forEach((layer) => { const id = layer.dataset.grid; const isActive = !!this.visibilityMap[id]; layer.classList.toggle("active", isActive); }); document .querySelectorAll("button[data-toggle]") .forEach((button) => { const id = button.dataset.toggle; const isActive = !!this.visibilityMap[id]; button.classList.toggle("active", isActive); }); } private setupToggleButtons(): void { // console.log("Setting up toggle buttons for grid layers") document .querySelectorAll("button[data-toggle]") .forEach((button) => { const id = button.dataset.toggle; const layer = document.querySelector( `[data-grid="${id}"]`, ); if (!layer) return; // console.log(`Setting up toggle for layer: ${id}`) button.addEventListener("click", () => { const isNowActive = layer.classList.toggle("active"); button.classList.toggle("active", isNowActive); this.visibilityMap[id] = isNowActive; this.saveVisibility(); }); }); } private setupEventListeners(): void { // console.log("Setting up event listeners for GridManager") document.addEventListener("DOMContentLoaded", () => { this.updateAllGridHeights(); this.setupToggleButtons(); window.addEventListener("resize", () => this.updateAllGridHeights(), ); window.addEventListener("scroll", () => this.updateAllGridHeights(), ); }); } }