Rebuild the work-package side panel in the style of MS Planner
The auto-hiding drawer was the wrong model — a list you navigate by shouldn't appear and disappear under the pointer, and its vertical text tab read as a stray artifact. Replaced with a persistent side panel following the Planner reference: - Collapse toggle at the top (the panel glyph, arrow flips), remembered across visits. Collapsed leaves a 56px icon rail where the coloured package badges are still clickable, rather than hiding the list entirely. - One primary action: "+ New work package" with a split caret for Duplicate, Split by discipline and Export all. - Icon nav with counts: My packages (owned by you), All packages, Needs attention (on hold or not release-ready), Dashboard. These filter the list below. - Packages as rows with a colour-coded initial badge, number, subject and readiness state, still grouped by status, with a left accent bar on the current package. The badge colour is hashed from the WP number, so a package keeps its swatch instead of shuffling when another is added or deleted. - The panel sits IN the layout: the form and the full-width chrome shift beside it rather than being overlaid. Also, the reason it appeared as loose unstyled widgets in the middle of the form: the panel's markup and its stylesheet are cached independently, so a browser can run new markup against old CSS. Its essential layout (fixed position, width, the row/badge flex, the collapsed rules) is now injected by wp-creation-app.js as a floor, inserted first in <head> so the stylesheet still wins on everything it defines. Same lesson as the iframe: a component whose CSS-missing state is "broken" rather than "plain" must carry its own critical layout. Verified with 25 driven checks in headless Chrome: persistence, the four nav links, badge colours and text, view filtering, collapse/expand, the split menu, row selection and highlighting — and, with wp-creation-styles.css removed from the page entirely, the panel is still a fixed 288px side panel with the form shifted beside it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -47,24 +47,62 @@
|
||||
|
||||
<div class="wp-layout">
|
||||
|
||||
<!-- WP NAVIGATOR — auto-hiding drawer. The handle is always visible; hover or tap
|
||||
it to slide the list in over the form, or pin it to keep it open. -->
|
||||
<button class="wp-nav-handle" id="wp-nav-handle" onclick="toggleWpNav()"
|
||||
title="Work packages on this project" aria-label="Show work packages" aria-expanded="false">
|
||||
Work Packages <span class="wp-nav-handle-count" id="wp-nav-handle-count">0</span>
|
||||
</button>
|
||||
<!-- WORK PACKAGE NAVIGATOR
|
||||
A persistent side panel (not a hover drawer): collapse toggle, a primary action,
|
||||
icon nav, then the project's packages as rows with colour-coded initial badges.
|
||||
Collapsing leaves a narrow icon rail so you can still see and switch packages. -->
|
||||
<aside class="wp-nav" id="wp-nav" aria-label="Work packages">
|
||||
<div class="wp-nav-head">
|
||||
<div class="wp-nav-title">Work Packages <span class="wp-nav-count" id="wp-nav-count"></span></div>
|
||||
<button class="wp-nav-btn" id="wp-nav-pin" onclick="toggleWpNavPin()" title="Keep this list open" aria-label="Pin list open">📌</button>
|
||||
<button class="wp-nav-btn" onclick="closeWpNav(true)" title="Close list" aria-label="Close list">✕</button>
|
||||
<div class="wp-nav-top">
|
||||
<button class="wp-nav-toggle" id="wp-nav-toggle" onclick="toggleWpNav()"
|
||||
title="Collapse the panel" aria-label="Collapse the panel" aria-expanded="true">
|
||||
<svg viewBox="0 0 20 20" width="18" height="18" aria-hidden="true">
|
||||
<rect x="2.5" y="3.5" width="15" height="13" rx="1.5" fill="none" stroke="currentColor" stroke-width="1.4"/>
|
||||
<line x1="7.5" y1="3.5" x2="7.5" y2="16.5" stroke="currentColor" stroke-width="1.4"/>
|
||||
<path class="wp-nav-toggle-arrow" d="M14 10 H10 M11.6 8.2 L9.8 10 L11.6 11.8"
|
||||
fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="wp-nav-primary">
|
||||
<button class="wp-nav-cta" onclick="newPackage()" title="Start a new work package">
|
||||
<span class="wp-nav-cta-plus" aria-hidden="true">+</span><span class="wp-nav-cta-label">New work package</span>
|
||||
</button>
|
||||
<button class="wp-nav-cta-more" id="wp-nav-more-btn" onclick="toggleWpNavMore(event)"
|
||||
title="More actions" aria-label="More actions" aria-haspopup="true" aria-expanded="false">▾</button>
|
||||
<div class="wp-nav-menu" id="wp-nav-more" hidden>
|
||||
<button type="button" onclick="wpNavAction('duplicate')">Duplicate this package</button>
|
||||
<button type="button" onclick="wpNavAction('split')">Split by discipline</button>
|
||||
<button type="button" onclick="wpNavAction('export')">Export all (JSON)</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="wp-nav-links" aria-label="Views">
|
||||
<button type="button" class="wp-nav-link" data-view="mine" onclick="setWpNavView('mine')" title="Packages you own">
|
||||
<span class="wp-nav-ico" aria-hidden="true">◔</span><span class="wp-nav-link-label">My packages</span>
|
||||
<span class="wp-nav-link-n" id="wp-nav-n-mine"></span>
|
||||
</button>
|
||||
<button type="button" class="wp-nav-link is-current" data-view="all" onclick="setWpNavView('all')" title="Every package on this project">
|
||||
<span class="wp-nav-ico" aria-hidden="true">▤</span><span class="wp-nav-link-label">All packages</span>
|
||||
<span class="wp-nav-link-n" id="wp-nav-n-all"></span>
|
||||
</button>
|
||||
<button type="button" class="wp-nav-link" data-view="open" onclick="setWpNavView('open')" title="Not release-ready yet">
|
||||
<span class="wp-nav-ico" aria-hidden="true">⚠</span><span class="wp-nav-link-label">Needs attention</span>
|
||||
<span class="wp-nav-link-n" id="wp-nav-n-open"></span>
|
||||
</button>
|
||||
<button type="button" class="wp-nav-link" onclick="showDashboard()" title="Status and gating across the project">
|
||||
<span class="wp-nav-ico" aria-hidden="true">▦</span><span class="wp-nav-link-label">Dashboard</span>
|
||||
</button>
|
||||
</nav>
|
||||
|
||||
<div class="wp-nav-sect">
|
||||
<span class="wp-nav-sect-label" id="wp-nav-sect-label">Work packages</span>
|
||||
<span class="wp-nav-count" id="wp-nav-count"></span>
|
||||
</div>
|
||||
<div class="wp-nav-filter">
|
||||
<input type="search" class="wp-nav-search" id="wp-nav-search" placeholder="Filter packages…" oninput="renderWpNav()">
|
||||
</div>
|
||||
<input type="search" class="wp-nav-search" id="wp-nav-search" placeholder="Filter by number, subject, type…" oninput="renderWpNav()">
|
||||
<div class="wp-nav-list" id="wp-nav-list"></div>
|
||||
<div class="wp-nav-foot">
|
||||
<button class="add-btn" onclick="newPackage()">+ New</button>
|
||||
<button class="add-btn" onclick="showDashboard()">📊 Dashboard</button>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
<div class="main">
|
||||
|
||||
Reference in New Issue
Block a user