# Q-Edit v1.0.0 — Release Notes Date: 2025-09-05 ## Summary Q‑Edit 1.0 is a major redesign and stabilization release. The UI is now a single‑view file explorer with a sidebar tree, a dedicated full‑page Preview, and global media controls that keep audio/video playing as you navigate. Under the hood, we modularized key logic, added URL‑hash state for pagination, and shipped a small but solid test suite with coverage gates. ## Highlights - Single‑view routing so pages never overlap - Sidebar file tree with service folders, prefix groups, and leaf navigation to Preview - Full‑page Preview with Edit / Replace / Delete actions and multi‑file path input (for WEBSITE/APP) - Safer Preview rendering: JSON pretty‑print; HTML via sandboxed iframe; PDF and media inline with responsive sizing - Global media playback with header controls; promotion on navigate; Stop revokes Blob URLs - Pagination with jump‑to‑page, URL hash deep‑linking (e.g. `#page=17`) and persistent items‑per‑page - Hide Deleted toggle (ON by default) with conservative tiny‑file detection - Auth auto‑init; Name switcher refreshes lists cleanly; Publish menu scaffold + compose text shell - Tooling: ESLint/Prettier, Vitest + jsdom tests, coverage thresholds, docs & tests audits ## Notable Changes - Pagination state - Current page is reflected in `location.hash` and restored on reload/back/forward. - Items‑per‑page preference persists in `localStorage` under `qedit:itemsPerPage`. - Content table - Identifier text opens Preview; image thumbnails are compact; summary shows total size. - Bulk Delete mode retained from 0.7.x with clearer buttons and selection persistence. - Media - Playing media migrates to a global host when switching views so playback continues. - Stop clears playback and revokes Blob URLs to free memory. - Accessibility & UX - Active pagination item marked with `aria-current="page"`. - Sidebar can be collapsed and restored; state persisted. ## Breaking/Behavior Changes - Default “Hide Deleted” is ON; tiny delete markers are hidden from counts and lists. - Items‑per‑page preference now stored as `qedit:itemsPerPage` (prior ad‑hoc keys are still read when present for compatibility and then mirrored). - Preview opens as a full page instead of inline by default; an inline viewer remains available for future use. ## Upgrade Steps 1. Replace `index.html`, `style.css`, and `script.js` with the v1.0.0 versions. 2. Include `src/` and `scripts/` for the new hash/prefs/pagination bindings. 3. Hard refresh your browser to clear cached assets. Optional: run the local server and tests - `node scripts/serve.mjs` → http://localhost:5173 - `node node_modules/vitest/vitest.mjs run --coverage` - `node scripts/ci-check-coverage.mjs` ## QA Checklist - Authenticate → name(s) populated; switching names refreshes lists. - Hide Deleted toggle defaults ON; toggling updates counts and results. - Pagination: First/Prev/Next/Last, windowed pages with ellipses; Jump input clamps to 1..N. - Items per page persists; URL `#page` reflects navigation and is restored on reload. - Sidebar: services show correct counts; prefix groups expand; leaf click opens Preview. - Preview: JSON prettified; HTML sandboxed; PDF and media render inline; media continues when switching views; Stop resets. - Bulk Delete: selections persist across page/filter changes; Delete N Files publishes and removes rows. ## Known Limitations - Search is scaffolded (form + shell); wiring to results tree is next. - Editors are basic; richer text/HTML and media tools are planned. - Very large accounts may require virtualization for best performance. - Some tiny delete‑detection heuristics may need tuning per service edge cases. ## Developer Notes - New modules under `src/` and `scripts/` are unit‑tested (Vitest + jsdom). Coverage thresholds are enforced by `scripts/ci-check-coverage.mjs`. - The legacy controller `script.js` remains the central coordinator; further modularization is planned.