Files
taskpile/frontend/node_modules/data-urls/lib/utils.js
Alvis f1d51b8cc8 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>
2026-04-08 11:23:06 +00:00

19 lines
489 B
JavaScript

"use strict";
const { atob } = require("abab");
exports.stripLeadingAndTrailingASCIIWhitespace = string => {
return string.replace(/^[ \t\n\f\r]+/u, "").replace(/[ \t\n\f\r]+$/u, "");
};
exports.isomorphicDecode = input => {
return Array.from(input, byte => String.fromCodePoint(byte)).join("");
};
exports.forgivingBase64Decode = data => {
const asString = atob(data);
if (asString === null) {
return null;
}
return Uint8Array.from(asString, c => c.codePointAt(0));
};