powerhouse-rp-toolkit
Version:
Renaissance Periodization Training Toolkit for PowerHouseATX
693 lines (629 loc) • 23.8 kB
JavaScript
/**
* Enhanced Advanced UI Integration
* Sophisticated interface for next-level features
*/
import { dataVisualizer } from "../algorithms/dataVisualization.js";
import { wellnessSystem } from "../algorithms/wellnessIntegration.js";
import { periodizationSystem } from "../algorithms/periodizationSystem.js";
import { advancedIntelligence } from "../algorithms/intelligenceHub.js";
/**
* Enhanced Advanced UI System
* Manages sophisticated interfaces for advanced features
*/
class EnhancedAdvancedUI {
constructor() {
this.activeCharts = new Map();
this.dashboardState = this.initializeDashboardState();
this.notifications = this.initializeNotificationSystem();
}
/**
* Initialize dashboard state
*/
initializeDashboardState() {
return {
activeTab: "overview",
chartConfigs: new Map(),
refreshRate: 5000, // 5 seconds
autoRefresh: false,
fullscreen: false,
theme: "light",
};
}
/**
* Initialize notification system
*/
initializeNotificationSystem() {
return {
queue: [],
displayed: new Set(),
types: {
info: { icon: "ℹ️", color: "#3b82f6" },
success: { icon: "✅", color: "#10b981" },
warning: { icon: "⚠️", color: "#f59e0b" },
error: { icon: "❌", color: "#ef4444" },
insight: { icon: "💡", color: "#8b5cf6" },
},
};
}
/**
* Create comprehensive training dashboard
*/
createAdvancedDashboard() {
const dashboard = document.createElement("div");
dashboard.className = "advanced-dashboard";
dashboard.innerHTML = `
<div class="dashboard-header">
<h2>🎯 Advanced Training Dashboard</h2>
<div class="dashboard-controls">
<button onclick="enhancedUI.toggleFullscreen()" class="control-btn">
<span id="fullscreenIcon">⛶</span> Fullscreen
</button>
<button onclick="enhancedUI.exportDashboard()" class="control-btn">
📊 Export
</button>
<button onclick="enhancedUI.refreshDashboard()" class="control-btn">
🔄 Refresh
</button>
</div>
</div>
<div class="dashboard-navigation">
<nav class="tab-navigation">
<button class="tab-btn active" onclick="enhancedUI.switchTab('overview')">📈 Overview</button>
<button class="tab-btn" onclick="enhancedUI.switchTab('analytics')">🔬 Analytics</button>
<button class="tab-btn" onclick="enhancedUI.switchTab('wellness')">💚 Wellness</button>
<button class="tab-btn" onclick="enhancedUI.switchTab('planning')">📅 Planning</button>
<button class="tab-btn" onclick="enhancedUI.switchTab('insights')">🧠 Insights</button>
</nav>
</div>
<div class="dashboard-content">
${this.createOverviewTab()}
${this.createAnalyticsTab()}
${this.createWellnessTab()}
${this.createPlanningTab()}
${this.createInsightsTab()}
</div>
<div class="notification-area" id="notificationArea"></div>
`;
return dashboard;
}
/**
* Create overview tab content
*/
createOverviewTab() {
return `
<div class="tab-content active" id="overview-tab">
<div class="overview-grid">
<!-- Key Metrics Panel -->
<div class="metric-panel">
<h3>📊 Key Metrics</h3>
<div class="metrics-grid">
<div class="metric-card">
<div class="metric-value" id="currentPerformance">--</div>
<div class="metric-label">Performance Score</div>
</div>
<div class="metric-card">
<div class="metric-value" id="recoveryScore">--</div>
<div class="metric-label">Recovery Score</div>
</div>
<div class="metric-card">
<div class="metric-value" id="readinessScore">--</div>
<div class="metric-label">Readiness Score</div>
</div>
<div class="metric-card">
<div class="metric-value" id="totalVolume">--</div>
<div class="metric-label">Weekly Volume</div>
</div>
</div>
</div>
<!-- Performance Trend Chart -->
<div class="chart-panel">
<h3>📈 Performance Trends</h3>
<canvas id="performanceTrendChart" width="400" height="200"></canvas>
</div>
<!-- Volume Distribution -->
<div class="chart-panel">
<h3>🏋️ Volume Distribution</h3>
<canvas id="volumeDistributionChart" width="400" height="200"></canvas>
</div>
<!-- Recent Achievements -->
<div class="achievements-panel">
<h3>🏆 Recent Achievements</h3>
<div id="achievementsList" class="achievements-list">
<!-- Achievements populated dynamically -->
</div>
</div>
<!-- Action Items -->
<div class="action-panel">
<h3>⚡ Priority Actions</h3>
<div id="actionItems" class="action-items">
<!-- Action items populated dynamically -->
</div>
</div>
<!-- System Status -->
<div class="status-panel">
<h3>⚙️ System Status</h3>
<div class="status-indicators">
<div class="status-item">
<span id="analyticsStatusAdv">❌</span>
<span>Advanced Analytics</span>
</div>
<div class="status-item">
<span id="wellnessStatusAdv">❌</span>
<span>Wellness Integration</span>
</div>
<div class="status-item">
<span id="planningStatusAdv">❌</span>
<span>Auto-Planning</span>
</div>
<div class="status-item">
<span id="intelligenceStatusAdv">❌</span>
<span>AI Intelligence</span>
</div>
</div>
</div>
</div>
</div>
`;
}
/**
* Create analytics tab content
*/
createAnalyticsTab() {
return `
<div class="tab-content" id="analytics-tab">
<div class="analytics-grid">
<!-- Predictive Analytics -->
<div class="analytics-section">
<h3>🔮 Predictive Analytics</h3>
<div class="analytics-controls">
<button onclick="enhancedUI.generatePredictiveChart()" class="analytics-btn">
📊 Performance Prediction
</button>
<button onclick="enhancedUI.analyzeVolumeOptimization()" class="analytics-btn">
🎯 Volume Optimization
</button>
<button onclick="enhancedUI.detectPlateauRisk()" class="analytics-btn">
⚠️ Plateau Analysis
</button>
</div>
<div class="chart-container">
<canvas id="predictiveChart" width="600" height="300"></canvas>
</div>
</div>
<!-- Advanced Visualizations -->
<div class="analytics-section">
<h3>📈 Advanced Visualizations</h3>
<div class="visualization-controls">
<select id="chartTypeSelector" onchange="enhancedUI.changeChartType()">
<option value="trend">Trend Analysis</option>
<option value="heatmap">Volume Heatmap</option>
<option value="radar">Muscle Distribution</option>
<option value="correlation">Correlation Matrix</option>
</select>
<select id="timeRangeSelector" onchange="enhancedUI.changeTimeRange()">
<option value="4">Last 4 Weeks</option>
<option value="8">Last 8 Weeks</option>
<option value="12">Last 12 Weeks</option>
<option value="all">All Time</option>
</select>
</div>
<div class="chart-container">
<canvas id="advancedVisualizationChart" width="600" height="400"></canvas>
</div>
</div>
<!-- Statistical Analysis -->
<div class="analytics-section">
<h3>📊 Statistical Analysis</h3>
<div class="stats-grid">
<div class="stat-card">
<h4>Performance Statistics</h4>
<div id="performanceStats" class="stat-content">
<!-- Stats populated dynamically -->
</div>
</div>
<div class="stat-card">
<h4>Volume Statistics</h4>
<div id="volumeStats" class="stat-content">
<!-- Stats populated dynamically -->
</div>
</div>
<div class="stat-card">
<h4>Recovery Statistics</h4>
<div id="recoveryStats" class="stat-content">
<!-- Stats populated dynamically -->
</div>
</div>
</div>
</div>
</div>
</div>
`;
}
/**
* Create wellness tab content
*/
createWellnessTab() {
return `
<div class="tab-content" id="wellness-tab">
<div class="wellness-grid">
<!-- Wellness Input Panel -->
<div class="wellness-input-panel">
<h3>📝 Daily Wellness Check-in</h3>
<form id="wellnessForm" class="wellness-form">
<div class="form-section">
<h4>😴 Sleep Quality</h4>
<div class="input-group">
<label for="sleepDuration">Duration (hours):</label>
<input type="number" id="sleepDuration" min="4" max="12" step="0.5" value="7.5">
</div>
<div class="input-group">
<label for="sleepQuality">Quality (1-10):</label>
<input type="range" id="sleepQuality" min="1" max="10" value="7">
<span class="range-value" id="sleepQualityValue">7</span>
</div>
</div>
<div class="form-section">
<h4>😰 Stress Levels</h4>
<div class="input-group">
<label for="workStress">Work Stress (1-10):</label>
<input type="range" id="workStress" min="1" max="10" value="5">
<span class="range-value" id="workStressValue">5</span>
</div>
<div class="input-group">
<label for="lifeStress">Life Stress (1-10):</label>
<input type="range" id="lifeStress" min="1" max="10" value="4">
<span class="range-value" id="lifeStressValue">4</span>
</div>
</div>
<div class="form-section">
<h4>🥗 Nutrition & Hydration</h4>
<div class="input-group">
<label for="hydration">Hydration (1-10):</label>
<input type="range" id="hydration" min="1" max="10" value="7">
<span class="range-value" id="hydrationValue">7</span>
</div>
<div class="input-group">
<label for="nutritionQuality">Nutrition Quality (1-10):</label>
<input type="range" id="nutritionQuality" min="1" max="10" value="7">
<span class="range-value" id="nutritionQualityValue">7</span>
</div>
</div>
<button type="button" onclick="enhancedUI.submitWellnessData()" class="submit-btn">
💾 Save Wellness Data
</button>
</form>
</div>
<!-- Wellness Dashboard -->
<div class="wellness-dashboard">
<h3>🎯 Wellness Overview</h3>
<div class="wellness-scores">
<div class="score-card">
<div class="score-value" id="wellnessRecoveryScore">--</div>
<div class="score-label">Recovery Score</div>
</div>
<div class="score-card">
<div class="score-value" id="wellnessReadinessScore">--</div>
<div class="score-label">Readiness Score</div>
</div>
<div class="score-card">
<div class="score-value" id="wellnessStressScore">--</div>
<div class="score-label">Stress Score</div>
</div>
</div>
</div>
<!-- Training Recommendations -->
<div class="training-recommendations">
<h3>🎯 Training Recommendations</h3>
<div id="trainingRecommendations" class="recommendations-content">
<!-- Recommendations populated dynamically -->
</div>
</div>
<!-- Wellness Trends -->
<div class="wellness-trends">
<h3>📈 Wellness Trends</h3>
<canvas id="wellnessTrendChart" width="500" height="250"></canvas>
</div>
</div>
</div>
`;
}
/**
* Create planning tab content
*/
createPlanningTab() {
return `
<div class="tab-content" id="planning-tab">
<div class="planning-grid">
<!-- Plan Creation -->
<div class="plan-creation-panel">
<h3>🎯 Create Training Plan</h3>
<form id="planningForm" class="planning-form">
<div class="form-group">
<label for="planDuration">Plan Duration:</label>
<select id="planDuration">
<option value="8">8 Weeks</option>
<option value="12">12 Weeks</option>
<option value="16" selected>16 Weeks</option>
<option value="20">20 Weeks</option>
<option value="24">24 Weeks</option>
</select>
</div>
<div class="form-group">
<label for="primaryGoal">Primary Goal:</label>
<select id="primaryGoal">
<option value="hypertrophy">Hypertrophy</option>
<option value="strength">Strength</option>
<option value="powerbuilding">Powerbuilding</option>
<option value="endurance">Endurance</option>
<option value="general">General Fitness</option>
</select>
</div>
<div class="form-group">
<label for="experienceLevel">Experience Level:</label>
<select id="experienceLevel">
<option value="beginner">Beginner</option>
<option value="intermediate">Intermediate</option>
<option value="advanced">Advanced</option>
</select>
</div>
<div class="form-group">
<label for="trainingDays">Training Days per Week:</label>
<select id="trainingDays">
<option value="3">3 Days</option>
<option value="4">4 Days</option>
<option value="5">5 Days</option>
<option value="6">6 Days</option>
</select>
</div>
<button type="button" onclick="enhancedUI.generateTrainingPlan()" class="generate-btn">
🚀 Generate Intelligent Plan
</button>
</form>
</div>
<!-- Current Plan Overview -->
<div class="current-plan-panel">
<h3>📋 Current Plan</h3>
<div id="currentPlanOverview" class="plan-overview">
<!-- Plan overview populated dynamically -->
</div>
</div>
<!-- Plan Timeline -->
<div class="plan-timeline-panel">
<h3>📅 Plan Timeline</h3>
<div id="planTimeline" class="timeline-container">
<!-- Timeline populated dynamically -->
</div>
</div>
<!-- Adaptation Controls -->
<div class="adaptation-panel">
<h3>🔧 Plan Adaptations</h3>
<div class="adaptation-controls">
<button onclick="enhancedUI.adaptPlanForPerformance()" class="adapt-btn">
📈 Adapt for Performance
</button>
<button onclick="enhancedUI.adaptPlanForRecovery()" class="adapt-btn">
💚 Adapt for Recovery
</button>
<button onclick="enhancedUI.triggerIntelligentDeload()" class="adapt-btn">
🛑 Trigger Deload
</button>
</div>
<div id="adaptationResults" class="adaptation-results">
<!-- Adaptation results populated dynamically -->
</div>
</div>
</div>
</div>
`;
}
/**
* Create insights tab content
*/
createInsightsTab() {
return `
<div class="tab-content" id="insights-tab">
<div class="insights-grid">
<!-- AI Insights -->
<div class="ai-insights-panel">
<h3>🧠 AI Training Insights</h3>
<div class="insights-controls">
<button onclick="enhancedUI.generateAIInsights()" class="insights-btn">
🔮 Generate Insights
</button>
<button onclick="enhancedUI.analyzeTrainingPatterns()" class="insights-btn">
📊 Pattern Analysis
</button>
<button onclick="enhancedUI.predictOptimizations()" class="insights-btn">
🎯 Optimization Opportunities
</button>
</div>
<div id="aiInsightsContent" class="insights-content">
<!-- AI insights populated dynamically -->
</div>
</div>
<!-- Performance Analysis -->
<div class="performance-analysis-panel">
<h3>📈 Performance Analysis</h3>
<div id="performanceAnalysis" class="analysis-content">
<!-- Performance analysis populated dynamically -->
</div>
</div>
<!-- Trend Predictions -->
<div class="predictions-panel">
<h3>🔮 Trend Predictions</h3>
<canvas id="predictionChart" width="500" height="300"></canvas>
</div>
<!-- Risk Assessment -->
<div class="risk-assessment-panel">
<h3>⚠️ Risk Assessment</h3>
<div id="riskAssessment" class="risk-content">
<!-- Risk assessment populated dynamically -->
</div>
</div>
</div>
</div>
`;
}
/**
* Initialize the enhanced UI system
*/
initializeEnhancedUI() {
this.setupEventListeners();
this.initializeCharts();
this.startAutoRefresh();
this.loadDashboardData();
console.log("🚀 Enhanced Advanced UI System Initialized");
}
/**
* Setup event listeners for interactive elements
*/
setupEventListeners() {
// Range input event listeners for real-time updates
document.addEventListener("input", (event) => {
if (event.target.type === "range") {
const valueSpan = document.getElementById(event.target.id + "Value");
if (valueSpan) {
valueSpan.textContent = event.target.value;
}
}
});
// Tab navigation
document.addEventListener("click", (event) => {
if (event.target.classList.contains("tab-btn")) {
this.handleTabClick(event.target);
}
});
// Auto-save wellness data
document.addEventListener("change", (event) => {
if (event.target.closest("#wellnessForm")) {
this.autoSaveWellnessData();
}
});
}
/**
* Switch between dashboard tabs
*/
switchTab(tabName) {
// Update tab buttons
document
.querySelectorAll(".tab-btn")
.forEach((btn) => btn.classList.remove("active"));
document
.querySelector(`.tab-btn[onclick*="${tabName}"]`)
.classList.add("active");
// Update tab content
document
.querySelectorAll(".tab-content")
.forEach((content) => content.classList.remove("active"));
document.getElementById(`${tabName}-tab`).classList.add("active");
// Load tab-specific data
this.loadTabData(tabName);
this.dashboardState.activeTab = tabName;
}
/**
* Load data for specific tab
*/
loadTabData(tabName) {
switch (tabName) {
case "overview":
this.loadOverviewData();
break;
case "analytics":
this.loadAnalyticsData();
break;
case "wellness":
this.loadWellnessData();
break;
case "planning":
this.loadPlanningData();
break;
case "insights":
this.loadInsightsData();
break;
}
}
/**
* Generate AI insights
*/
generateAIInsights() {
const insights = advancedIntelligence.getWeeklyIntelligence();
const content = document.getElementById("aiInsightsContent");
let html = '<div class="insights-list">';
if (insights.recommendations.length > 0) {
html += "<h4>🎯 Recommendations</h4>";
insights.recommendations.forEach((rec) => {
html += `<div class="insight-item ${rec.urgency}">
<strong>${rec.type}:</strong> ${rec.message}
</div>`;
});
}
if (insights.analytics) {
html += "<h4>📊 Analytics Insights</h4>";
Object.entries(
insights.analytics.volumeLandmarkOptimizations || {},
).forEach(([muscle, opt]) => {
html += `<div class="insight-item success">
<strong>${muscle}:</strong> Volume landmarks can be optimized (${opt.confidence}% confidence)
</div>`;
});
}
html += "</div>";
content.innerHTML = html;
this.showNotification("AI insights generated successfully", "success");
}
/**
* Show notification
*/
showNotification(message, type = "info") {
const notification = document.createElement("div");
notification.className = `notification ${type}`;
notification.innerHTML = `
<span class="notification-icon">${this.notifications.types[type].icon}</span>
<span class="notification-message">${message}</span>
<button class="notification-close" onclick="this.parentElement.remove()">×</button>
`;
document.getElementById("notificationArea").appendChild(notification);
// Auto-remove after 5 seconds
setTimeout(() => {
if (notification.parentElement) {
notification.remove();
}
}, 5000);
}
/**
* Export dashboard data
*/
exportDashboard() {
const dashboardData = this.collectDashboardData();
const exportData = {
timestamp: new Date().toISOString(),
data: dashboardData,
};
const blob = new Blob([JSON.stringify(exportData, null, 2)], {
type: "application/json",
});
const url = URL.createObjectURL(blob);
const a = document.createElement("a");
a.href = url;
a.download = `training-dashboard-${new Date().toISOString().split("T")[0]}.json`;
a.click();
this.showNotification("Dashboard data exported successfully", "success");
}
/**
* Helper method to collect all dashboard data
*/
collectDashboardData() {
return {
overview: this.getOverviewData(),
analytics: this.getAnalyticsData(),
wellness: this.getWellnessData(),
planning: this.getPlanningData(),
insights: this.getInsightsData(),
};
}
}
// Create and expose singleton instance
const enhancedUI = new EnhancedAdvancedUI();
// Make globally available
window.enhancedUI = enhancedUI;
export { EnhancedAdvancedUI, enhancedUI };