Add grid image system with multi-panel support and SPA routing

- Grid images: photograph component boxes in sub-sections, assemble
  into one logical grid via perspective warp (homography)
- Source image gallery: bulk upload photos separately from grid setup
- Grid drafts: persist partial work, resume across sessions
- Multi-panel grids: define rows/cols per photo, system computes panel
  layout; process partially configured grids, edit individual panels
- Pan/zoom canvas editor (HiDPI-aware, touch support) for corner alignment
- SPA routing with canonical URLs (history.pushState, server catch-all)
- Express error visibility: uncaughtException/unhandledRejection handlers
  and 4-arg error middleware
- Original filename stored on source image upload
- Various null-safety fixes and CSS [hidden] override fixes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-20 23:30:17 +00:00
parent ef2e53ea18
commit cf37759893
11 changed files with 2835 additions and 250 deletions

View File

@@ -4,7 +4,7 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Electronics Inventory</title>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="/style.css">
<link rel="preload" as="fetch" href="/templates.html" crossorigin>
</head>
<body>
@@ -14,9 +14,10 @@
<button class="nav-btn active" data-section="components">Components</button>
<button class="nav-btn" data-section="inventory">Inventory</button>
<button class="nav-btn" data-section="fields">Fields</button>
<button class="nav-btn" data-section="grids">Grids</button>
</nav>
</header>
<main id="main"></main>
<script type="module" src="app.mjs"></script>
<script type="module" src="/app.mjs"></script>
</body>
</html>