- 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>
29 lines
1.2 KiB
JavaScript
29 lines
1.2 KiB
JavaScript
// This wrapper function is used to safely select the best available function
|
|
// to schedule removal of the no-FOUC styles workaround. requestAnimationFrame
|
|
// is the ideal choice, but when used in iframes, there are no guarantees that
|
|
// the callback will actually be called, which could stall the promise returned
|
|
// from displayContent.
|
|
//
|
|
// See: https://www.vector-logic.com/blog/posts/on-request-animation-frame-and-embedded-iframes
|
|
const safeCallbackQueue = (callback)=>{
|
|
if (window.requestAnimationFrame && window.self === window.top) {
|
|
window.requestAnimationFrame(callback);
|
|
} else {
|
|
window.setTimeout(callback);
|
|
}
|
|
};
|
|
// This function is used to remove Next.js' no-FOUC styles workaround for using
|
|
// `style-loader` in development. It must be called before hydration, or else
|
|
// rendering won't have the correct computed values in effects.
|
|
export function displayContent() {
|
|
return new Promise((resolve)=>{
|
|
safeCallbackQueue(function() {
|
|
for(var x = document.querySelectorAll("[data-next-hide-fouc]"), i = x.length; i--;){
|
|
x[i].parentNode.removeChild(x[i]);
|
|
}
|
|
resolve();
|
|
});
|
|
});
|
|
}
|
|
|
|
//# sourceMappingURL=fouc.js.map
|