diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f11881..cc2bdf4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Rebase PR #13 onto main (2026-06-19) + +### Fixed +- Rebased `cursor/expand-size-range-0037` onto `main` (replacing the merge commit) so GitHub can update/rebase the branch cleanly. +- Bar menu keeps expanded `SIZE_KEYS` (S-XXL) from the PR and Start/End date fields from `main`. +- `updTask` keeps `normalizeSize` for size and `syncTaskDates` for start/end from `main`. + ## Rebase PR #10 onto main (2026-06-19) ### Fixed diff --git a/index.html b/index.html index 530b7cb..ccead89 100644 --- a/index.html +++ b/index.html @@ -128,6 +128,7 @@ .pill.sz-m {font-size:13.5px;padding:9px 16px} .pill.sz-l {font-size:15.5px;padding:13px 22px} .pill.sz-xl{font-size:17px; padding:17px 28px} + .pill.sz-xxl{font-size:18px;padding:18px 30px} .pill.late {background:var(--red-soft);color:var(--red)} .pill.today{background:var(--accent-soft);color:var(--accent)} .pill.soon {background:var(--green-soft);color:var(--green)} @@ -307,10 +308,11 @@ .gbar.gsz-m .gava .av{width:26px;height:26px;font-size:11px} .gbar.gsz-l .gava .av{width:36px;height:36px;font-size:14px} .gbar.gsz-xl .gava .av{width:48px;height:48px;font-size:18px} - .gbar.gsz-s{height:26px}.gbar.gsz-m{height:34px}.gbar.gsz-l{height:44px}.gbar.gsz-xl{height:56px} + .gbar.gsz-xxl .gava .av{width:54px;height:54px;font-size:19px} + .gbar.gsz-s{height:26px}.gbar.gsz-m{height:34px}.gbar.gsz-l{height:44px}.gbar.gsz-xl{height:56px}.gbar.gsz-xxl{height:68px} .gbar .ttl{font-size:12px;font-weight:700;color:#fff;white-space:nowrap;overflow:hidden; text-overflow:ellipsis;pointer-events:none;flex:1;min-width:0;text-align:left;padding-left:1px} - .gbar.gsz-s .ttl{font-size:10.5px}.gbar.gsz-l .ttl{font-size:13px}.gbar.gsz-xl .ttl{font-size:14px} + .gbar.gsz-s .ttl{font-size:10.5px}.gbar.gsz-l .ttl{font-size:13px}.gbar.gsz-xl .ttl{font-size:14px}.gbar.gsz-xxl .ttl{font-size:15px} /* title rendered to the right of a too-narrow bar (plain black text, no background) */ .gttlout{position:absolute;top:50%;transform:translateY(-50%);font-size:12px;font-weight:700; color:var(--ink);white-space:nowrap;pointer-events:none;z-index:3} @@ -333,8 +335,8 @@ .gexp:hover{color:var(--accent)} /* subtasks are OUTLINED (light fill, coloured border + text) vs solid filled tasks */ .gbar.gsub{box-shadow:0 1px 4px rgba(20,24,35,.12)} - .gbar.gsub .ttl{color:inherit;font-size:11px} - .gbar.gsub .gava .av{width:15px;height:15px;font-size:7.5px;box-shadow:0 0 0 2px #fff} + .gbar.gsub .ttl{color:inherit} + .gbar.gsub .gava .av{box-shadow:0 0 0 2px #fff} /* subtask bars have a WHITE fill, so the white done-dot was invisible on them — give the dot the bar's own colour on hover, and a solid green tick once checked */ .gbar.gsub .gdot{border-color:currentColor;color:currentColor} @@ -381,7 +383,7 @@ .bm-rw .bm-lbl{margin:0;width:40px;flex:none} .bm-rw input[type=date],.bm-rw select{flex:1;min-width:0;font:inherit;font-size:13px;border:1px solid var(--line); border-radius:8px;padding:5px 8px;background:var(--bg);color:var(--ink)} - .bm-rw .szseg{flex:1;justify-content:space-between} + .bm-rw .szseg{flex:1;justify-content:space-between;flex-wrap:wrap;gap:4px} /* the "today" band: ends with a hard vertical line — left of it = needs doing today */ /* today = a wider column with a faint tint, no box */ /* today tint + week shading stay in the chart body (below the 41px header: @@ -474,8 +476,8 @@ .duepill input:focus{outline:none} .duepill.sm input{width:96px;font-size:11.5px} /* segmented t-shirt size */ - .szseg{display:inline-flex;background:#eef0f4;border-radius:999px;padding:2px} - .szb{padding:3px 10px;border-radius:999px;font-size:11px;font-weight:800;color:var(--ink-3);line-height:1.5} + .szseg{display:inline-flex;flex-wrap:wrap;background:#eef0f4;border-radius:999px;padding:2px;gap:2px} + .szb{padding:3px 8px;border-radius:999px;font-size:10.5px;font-weight:800;color:var(--ink-3);line-height:1.5} .szb.on{background:var(--accent);color:#fff} .tc-sub{display:flex;align-items:center;gap:7px;margin-top:8px;padding-left:14px;position:relative} .tc-sub::before{content:"";position:absolute;left:3px;top:4px;bottom:4px;width:2px;background:var(--line);border-radius:2px} diff --git a/src/app/main.js b/src/app/main.js index a128d51..a56fe06 100644 --- a/src/app/main.js +++ b/src/app/main.js @@ -1,6 +1,6 @@ import { PEOPLE, TODAY, HARDWARE_VOCAB, CLIENTS, - SIZE_PTS, SIZE_NAMES, LEAD, ZOOMS, GBAR_H, + SIZE_KEYS, SIZE_PTS, SIZE_NAMES, LEAD, ZOOMS, GBAR_H, normalizeSize, sizePts, barHeight, R0G, R1G, SPAN_G, TODAY_PX, C_LATE, C_TODAY, C_RADAR, C_LATER, C_DONE, } from "../data/constants.js"; @@ -35,7 +35,7 @@ const fitsDepth = (node, destId) => fitsDepthIn(node, destId, DATA); /* ================= helpers ================= */ /* size-weighted progress (0..1): done size-points / total size-points across the leaves */ -const progFrac = (n) => { let done = 0, tot = 0; flat([n], (x) => { if (x.children.length) return; const w = SIZE_PTS[x.size || "m"]; tot += w; if (x.done) done += w; }); return tot ? done / tot : 0; }; +const progFrac = (n) => { let done = 0, tot = 0; flat([n], (x) => { if (x.children.length) return; const w = sizePts(x.size); tot += w; if (x.done) done += w; }); return tot ? done / tot : 0; }; function dueChip(due,done){ if(!due||done) return ""; const dd=Math.round((parseLocalIso(due)-TODAY)/864e5); const cls=dd<0?"overdue":dd<=3?"soon":""; @@ -127,7 +127,7 @@ function renderDash(){ const da=taskDoneAt(n); if(!da) return; const ago=Math.round((TODAY-parseLocalIso(da))/864e5); if(ago>=0&&ago<=Math.max(HZ,0)) banked.push({n,proj:(path[0]||n).title,dn:true}); }); - const PT=x=>SIZE_PTS[x.n.size||"m"]; + const PT=x=>sizePts(x.n.size); const pill=(x,cls,side)=>`