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

View File

@@ -0,0 +1,35 @@
'use strict';
async function click(element) {
const pointerIn = [];
if (!this.config.skipHover) {
pointerIn.push({
target: element
});
}
pointerIn.push({
keys: '[MouseLeft]',
target: element
});
return this.pointer(pointerIn);
}
async function dblClick(element) {
return this.pointer([
{
target: element
},
'[MouseLeft][MouseLeft]'
]);
}
async function tripleClick(element) {
return this.pointer([
{
target: element
},
'[MouseLeft][MouseLeft][MouseLeft]'
]);
}
exports.click = click;
exports.dblClick = dblClick;
exports.tripleClick = tripleClick;

View File

@@ -0,0 +1,19 @@
'use strict';
require('../utils/dataTransfer/Clipboard.js');
var cssPointerEvents = require('../utils/pointer/cssPointerEvents.js');
async function hover(element) {
return this.pointer({
target: element
});
}
async function unhover(element) {
cssPointerEvents.assertPointerEvents(this, this.system.pointer.getMouseTarget(this));
return this.pointer({
target: element.ownerDocument.body
});
}
exports.hover = hover;
exports.unhover = unhover;

View File

@@ -0,0 +1,14 @@
'use strict';
var click = require('./click.js');
var hover = require('./hover.js');
var tab = require('./tab.js');
exports.click = click.click;
exports.dblClick = click.dblClick;
exports.tripleClick = click.tripleClick;
exports.hover = hover.hover;
exports.unhover = hover.unhover;
exports.tab = tab.tab;

View File

@@ -0,0 +1,7 @@
'use strict';
async function tab({ shift } = {}) {
return this.keyboard(shift === true ? '{Shift>}{Tab}{/Shift}' : shift === false ? '[/ShiftLeft][/ShiftRight]{Tab}' : '{Tab}');
}
exports.tab = tab;