|
@@ -698,6 +698,52 @@ with a `BOOTSTRAP_ADMIN` audit row.
|
|
|
four cases, days writes preserving status,
|
|
four cases, days writes preserving status,
|
|
|
`InvalidArgumentException` guard, `statusGridForSprint`).
|
|
`InvalidArgumentException` guard, `statusGridForSprint`).
|
|
|
|
|
|
|
|
|
|
+- [x] **Cell popover replaces per-cell status select** (`10ea4b8`):
|
|
|
|
|
+ the Phase 18 chevron `<select data-assign-status>` next to each
|
|
|
|
|
+ task-day input is gone. Clicking a day input (admin) or the new
|
|
|
|
|
+ `[data-assign-readonly]` span (non-admin) now opens a single
|
|
|
|
|
+ body-attached `.cell-popover` panel anchored 8 px right of the
|
|
|
|
|
+ cell (flips left if it would overflow the viewport). Left
|
|
|
|
|
+ column: a `<input type="range" min="0" step="0.5">` whose `max`
|
|
|
|
|
+ comes from a new admin-configurable setting
|
|
|
|
|
+ `assignment_slider_max` (1..100, default 10); dragging mirrors
|
|
|
|
|
+ into `input.value` and dispatches `change`, so the existing
|
|
|
|
|
+ 400 ms debounced days-save pipeline + row total + capacity
|
|
|
|
|
+ recompute fire unchanged. The slider is hidden on the non-admin
|
|
|
|
|
+ path (no input to mirror). Right column: four status pills with
|
|
|
|
|
+ coloured bullets (slate / yellow / green / red, matching the
|
|
|
|
|
+ Status filter dropdown) — picking one is terminal: set
|
|
|
|
|
+ `data-status` + `.assign-status-*` on the cell, queue the
|
|
|
|
|
+ existing `PATCH /tasks/{id}/assignments/status` save, refresh
|
|
|
|
|
+ filters, close. Other close triggers: outside pointerdown
|
|
|
|
|
+ (capture phase, 50 ms grace after open so the opening click
|
|
|
|
|
+ isn't misread), Escape, scroll / resize, and a 250 ms
|
|
|
|
|
+ mouseleave grace. New `AppSettingsRepository::getInt`;
|
|
|
|
|
+ `SettingsController::KEYS` shape changed from `key=>label` to
|
|
|
|
|
+ `key=>[type, label]` so int + bool keys can coexist. Server
|
|
|
|
|
+ clamps the int to `[1, 100]`; the per-cell day input itself
|
|
|
|
|
+ stays unbounded (typing > max still works). The legacy
|
|
|
|
|
+ `.assign-status-select` CSS block was deleted; the new
|
|
|
|
|
+ `.cell-popover*` + `.bullet-*` block lives in the same `@layer
|
|
|
|
|
+ components` section in `assets/css/input.css`. Strict CSP
|
|
|
|
|
+ unchanged — no inline handlers, no new external hosts, the
|
|
|
|
|
+ popover element is JS-built and appended once. Tests: 109 / ?
|
|
|
|
|
+ (+1 for getInt round-trip + numeric-string guard); the prior
|
|
|
|
|
+ 108 tests pass without modification. ACCEPTANCE.md gains a
|
|
|
|
|
+ note pointing at the popover for the manual cell-edit flow.
|
|
|
|
|
+
|
|
|
|
|
+- [x] **Filter dropdown close polish** (`9b72c41`, `1864835`): the
|
|
|
|
|
+ Owners / Status / Columns dropdowns no longer get cropped
|
|
|
|
|
+ when the task table holds a single row (`overflow-hidden` was
|
|
|
|
|
+ on the section; replaced with `rounded-t-lg` on the toolbar
|
|
|
|
|
+ div + `rounded-b-lg` on the table wrapper so the rounded
|
|
|
|
|
+ corners survive). Each dropdown closes on `mouseleave` of its
|
|
|
|
|
+ `data-*-root` element with a 250 ms grace timer that
|
|
|
|
|
+ `mouseenter` cancels — the previous naive listener fired
|
|
|
|
|
+ while the cursor was in transit across the `mt-1` gap and
|
|
|
|
|
+ shut the panel before the user could reach it. Owner / Status
|
|
|
|
|
+ Clear now also closes the dropdown.
|
|
|
|
|
+
|
|
|
- [x] **Task table polish** (`f204611`): three small UX bugs in the
|
|
- [x] **Task table polish** (`f204611`): three small UX bugs in the
|
|
|
shared task list partial fixed in one commit. (a) Sortable
|
|
shared task list partial fixed in one commit. (a) Sortable
|
|
|
headers (Task / Owner / Prio / Tot) gained `whitespace-nowrap`;
|
|
headers (Task / Owner / Prio / Tot) gained `whitespace-nowrap`;
|
|
@@ -845,6 +891,10 @@ before acting — nothing here is load-bearing once it grows stale.
|
|
|
## 13. Git history (as of this writing)
|
|
## 13. Git history (as of this writing)
|
|
|
|
|
|
|
|
```
|
|
```
|
|
|
|
|
+10ea4b8 Cell popover: replace per-cell status select with slider + status pills
|
|
|
|
|
+1864835 Fix: filter dropdown close — grace timer for transit gap + close on Clear
|
|
|
|
|
+9b72c41 Fix: filter dropdowns no longer cropped + close on mouse-leave
|
|
|
|
|
+53891b2 SPEC.md: note task-table polish hotfix in §9 + §13
|
|
|
f204611 Fix: task table header alignment + status dropdown visibility + per-input tint
|
|
f204611 Fix: task table header alignment + status dropdown visibility + per-input tint
|
|
|
55f9726 Merge branch 'phase-19-stack-shift'
|
|
55f9726 Merge branch 'phase-19-stack-shift'
|
|
|
64d2782 Track composer.lock — fixes stale-cache Docker builds after Phase 19
|
|
64d2782 Track composer.lock — fixes stale-cache Docker builds after Phase 19
|