Add side panels, task selection, graph animation, and project docs

- Foldable left panel (user profile) and right panel (task details)
- Clicking a task in the list or graph node selects it and shows details
- Both views (task list + graph) always mounted via absolute inset-0 for
  correct canvas dimensions; tabs toggle visibility with opacity
- Graph node selection animation: other nodes repel outward (charge -600),
  then selected node smoothly slides to center (500ms cubic ease-out),
  then charge restores to -120 and graph stabilizes
- Graph re-fits on tab switch and panel resize via ResizeObserver
- Fix UUID string IDs throughout (backend returns UUIDs, not integers)
- Add TaskDetailPanel, UserPanel components
- Add CLAUDE.md project documentation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Alvis
2026-04-08 11:23:06 +00:00
parent 5c7edd4bbc
commit f1d51b8cc8
23998 changed files with 3242708 additions and 0 deletions

21
frontend/node_modules/cssstyle/lib/utils/colorSpace.js generated vendored Normal file
View File

@@ -0,0 +1,21 @@
'use strict';
const hueToRgb = (t1, t2, hue) => {
if (hue < 0) hue += 6;
if (hue >= 6) hue -= 6;
if (hue < 1) return (t2 - t1) * hue + t1;
else if (hue < 3) return t2;
else if (hue < 4) return (t2 - t1) * (4 - hue) + t1;
else return t1;
};
// https://www.w3.org/TR/css-color-4/#hsl-to-rgb
exports.hslToRgb = (hue, sat, light) => {
const t2 = light <= 0.5 ? light * (sat + 1) : light + sat - light * sat;
const t1 = light * 2 - t2;
const r = hueToRgb(t1, t2, hue + 2);
const g = hueToRgb(t1, t2, hue);
const b = hueToRgb(t1, t2, hue - 2);
return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
};

View File

@@ -0,0 +1,14 @@
'use strict';
module.exports = function getBasicPropertyDescriptor(name) {
return {
set: function(v) {
this._setProperty(name, v);
},
get: function() {
return this.getPropertyValue(name);
},
enumerable: true,
configurable: true,
};
};