 85bf1341f3
			
		
	
	85bf1341f3
	
	
	
		
			
			Frontend Enhancements: - Complete React TypeScript frontend with modern UI components - Distributed workflows management interface with real-time updates - Socket.IO integration for live agent status monitoring - Agent management dashboard with cluster visualization - Project management interface with metrics and task tracking - Responsive design with proper error handling and loading states Backend Infrastructure: - Distributed coordinator for multi-agent workflow orchestration - Cluster management API with comprehensive agent operations - Enhanced database models for agents and projects - Project service for filesystem-based project discovery - Performance monitoring and metrics collection - Comprehensive API documentation and error handling Documentation: - Complete distributed development guide (README_DISTRIBUTED.md) - Comprehensive development report with architecture insights - System configuration templates and deployment guides The platform now provides a complete web interface for managing the distributed AI cluster with real-time monitoring, workflow orchestration, and agent coordination capabilities. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			53 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { useTransform } from './use-transform.mjs';
 | |
| import { invariant, warning } from '../utils/errors.mjs';
 | |
| import { useMotionValue } from './use-motion-value.mjs';
 | |
| import { MotionContext } from '../context/MotionContext/index.mjs';
 | |
| import { useContext } from 'react';
 | |
| 
 | |
| // Keep things reasonable and avoid scale: Infinity. In practise we might need
 | |
| // to add another value, opacity, that could interpolate scaleX/Y [0,0.01] => [0,1]
 | |
| // to simply hide content at unreasonable scales.
 | |
| const maxScale = 100000;
 | |
| const invertScale = (scale) => scale > 0.001 ? 1 / scale : maxScale;
 | |
| let hasWarned = false;
 | |
| /**
 | |
|  * Returns a `MotionValue` each for `scaleX` and `scaleY` that update with the inverse
 | |
|  * of their respective parent scales.
 | |
|  *
 | |
|  * This is useful for undoing the distortion of content when scaling a parent component.
 | |
|  *
 | |
|  * By default, `useInvertedScale` will automatically fetch `scaleX` and `scaleY` from the nearest parent.
 | |
|  * By passing other `MotionValue`s in as `useInvertedScale({ scaleX, scaleY })`, it will invert the output
 | |
|  * of those instead.
 | |
|  *
 | |
|  * ```jsx
 | |
|  * const MyComponent = () => {
 | |
|  *   const { scaleX, scaleY } = useInvertedScale()
 | |
|  *   return <motion.div style={{ scaleX, scaleY }} />
 | |
|  * }
 | |
|  * ```
 | |
|  *
 | |
|  * @deprecated
 | |
|  */
 | |
| function useInvertedScale(scale) {
 | |
|     let parentScaleX = useMotionValue(1);
 | |
|     let parentScaleY = useMotionValue(1);
 | |
|     const { visualElement } = useContext(MotionContext);
 | |
|     invariant(!!(scale || visualElement), "If no scale values are provided, useInvertedScale must be used within a child of another motion component.");
 | |
|     warning(hasWarned, "useInvertedScale is deprecated and will be removed in 3.0. Use the layout prop instead.");
 | |
|     hasWarned = true;
 | |
|     if (scale) {
 | |
|         parentScaleX = scale.scaleX || parentScaleX;
 | |
|         parentScaleY = scale.scaleY || parentScaleY;
 | |
|     }
 | |
|     else if (visualElement) {
 | |
|         parentScaleX = visualElement.getValue("scaleX", 1);
 | |
|         parentScaleY = visualElement.getValue("scaleY", 1);
 | |
|     }
 | |
|     const scaleX = useTransform(parentScaleX, invertScale);
 | |
|     const scaleY = useTransform(parentScaleY, invertScale);
 | |
|     return { scaleX, scaleY };
 | |
| }
 | |
| 
 | |
| export { invertScale, useInvertedScale };
 |