Files
calories-tracker/index.html
2025-12-01 17:03:56 -03:00

457 lines
23 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Daily Calorie Tracker</title>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="auth.css">
<link rel="stylesheet" href="settings.css">
<link rel="stylesheet" href="mealPlanner.css">
<link rel="apple-touch-icon" sizes="57x57" href="/assets/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/assets/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/assets/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/assets/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/assets/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/assets/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/assets/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/assets/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="/assets/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/assets/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png">
<link rel="manifest" href="/assets/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/assets/ms-icon-144x144.png">
<meta name="theme-color" content="#121212">
</head>
<body>
<!-- Authentication Header -->
<header class="auth-header">
<div class="auth-container">
<div class="logo">
<h2>🍎 Food Tracker</h2>
</div>
<!-- Authentication Forms -->
<div id="auth-section" class="auth-section">
<!-- Login Form -->
<div id="login-form" class="auth-form">
<h3>Login</h3>
<form id="loginForm">
<div class="form-group">
<input type="email" id="loginEmail" placeholder="Email" required>
</div>
<div class="form-group">
<input type="password" id="loginPassword" placeholder="Password" required>
</div>
<button type="submit" class="auth-btn">Login</button>
<p class="auth-switch">
Don't have an account?
<a href="#" id="showRegister">Register here</a>
</p>
</form>
</div>
<!-- Register Form -->
<div id="register-form" class="auth-form hidden">
<h3>Register</h3>
<form id="registerForm">
<div class="form-group">
<input type="text" id="registerName" placeholder="Name" required>
</div>
<div class="form-group">
<input type="email" id="registerEmail" placeholder="Email" required>
</div>
<div class="form-group">
<input type="password" id="registerPassword" placeholder="Password" required minlength="8">
</div>
<button type="submit" class="auth-btn">Register</button>
<p class="auth-switch">
Already have an account?
<a href="#" id="showLogin">Login here</a>
</p>
</form>
</div>
</div>
<!-- User Info (shown when logged in) -->
<div id="user-info" class="user-info hidden">
<div class="user-details">
<span id="userName">Welcome, User!</span>
<div class="header-buttons">
<button id="shareBtn" class="header-btn">🔗 Share</button>
<button id="calendarBtn" class="header-btn">📅 Calendar</button>
<button id="mealPlannerBtn" class="header-btn">📋 Meal Planner</button>
<button id="settingsBtn" class="header-btn">⚙️ Settings</button>
<button id="logoutBtn" class="header-btn logout">🚪 Logout</button>
</div>
</div>
<!-- Mobile menu toggle -->
<button id="mobileMenuToggle" class="mobile-menu-toggle hidden"></button>
<!-- Mobile dropdown menu -->
<div id="mobileMenu" class="mobile-menu hidden">
<button id="shareBtnMobile" class="mobile-menu-item">🔗 Share</button>
<button id="calendarBtnMobile" class="mobile-menu-item">📅 Calendar</button>
<button id="mealPlannerBtnMobile" class="mobile-menu-item">📋 Meal Planner</button>
<button id="settingsBtnMobile" class="mobile-menu-item">⚙️ Settings</button>
<button id="logoutBtnMobile" class="mobile-menu-item logout">🚪 Logout</button>
</div>
</div>
</div>
</header>
<!-- Loading Overlay -->
<div id="loading-overlay" class="loading-overlay hidden">
<div class="loading-spinner"></div>
<p>Loading...</p>
</div>
<!-- Share Modal -->
<div id="share-modal" class="modal-overlay hidden">
<div class="modal-content">
<h2>🔗 Share This Day</h2>
<p>Share your food log for this day with others!</p>
<div class="share-link-container">
<input
type="text"
id="share-link-input"
class="share-link-input"
readonly
placeholder="Generating share link..."
>
<button id="copy-share-link" class="copy-btn">Copy</button>
</div>
<div class="modal-buttons">
<button id="close-share-modal" class="modal-btn">Close</button>
</div>
</div>
</div>
<!-- Shared View Banner -->
<div id="shared-view-banner" class="shared-view-banner hidden">
<span id="shared-view-text">👁️ Viewing shared day from <strong id="shared-user-name"></strong> on <strong id="shared-date"></strong></span>
</div>
<!-- Main App Content -->
<main id="app-content" class="hidden">
<div class="container">
<div class="date-display" id="currentDate"></div>
<div class="calories-banner">
<div class="calories-number" id="caloriesCounter">0</div>
<div class="calories-text">Calories Today</div>
<div class="calories-text-goal" id="caloriesGoalText">of 0</div>
<div class="calories-text-alkaline" id="alkaline-level">80% Alkaline</div>
</div>
<div class="nutrition-summary" id="nutritionSummary">
<div class="nutrition-item">
<div class="nutrition-label">Protein (g)</div>
<div class="nutrition-value" id="proteinValue">0</div>
<div class="nutrition-label hidden" id="proteinGoalText">of 190</div>
</div>
<div class="nutrition-item">
<div class="nutrition-label">Fat (g)</div>
<div class="nutrition-value" id="fatValue">0</div>
<div class="nutrition-label hidden" id="fatGoalText">of 190</div>
</div>
<div class="nutrition-item">
<div class="nutrition-label">Carbs (g)</div>
<div class="nutrition-value" id="carboValue">0</div>
<div class="nutrition-label hidden" id="carboGoalText">of 190</div>
</div>
<div class="nutrition-item">
<div class="nutrition-label">Fiber (g)</div>
<div class="nutrition-value" id="fiberValue">0</div>
<div class="nutrition-label hidden" id="fiberGoalText">of 190</div>
</div>
</div>
<!-- Quick Add from Meal Plan -->
<div class="quick-add-section hidden" id="quickAddSection">
<h2 class="section-title">📋 Quick Add from Meal Plan</h2>
<div class="quick-add-items" id="quickAddItemsContainer">
<!-- Quick add items will be populated here -->
</div>
</div>
<div class="add-food-section">
<h2 class="add-food-title" id="add-foot-title">Add Food Entry</h2>
<div class="add-food-form">
<div class="form-group">
<label for="foodSelect">Food Item</label>
<div class="food-search-container">
<input
type="text"
class="food-search-input"
id="foodSearchInput"
placeholder="Search food (e.g., apple, chicken breast, rice...)"
autocomplete="off"
>
<div class="search-loading" id="searchLoading"></div>
<!-- Search Results Overlay -->
<div class="search-results" id="searchResults">
<!-- Results will be populated here -->
</div>
<!-- Hidden inputs for state -->
<input type="hidden" id="foodIdToUpdate">
<input type="hidden" id="foodTimeToUpdate">
<input type="hidden" id="foodCaloriesToUpdate">
</div>
</div>
<div class="form-group">
<label for="gramAmount">Amount (grams)</label>
<input type="number" id="gramAmount" min="1" step="1" value="100">
</div>
<button class="add-btn" id="add-food-btn">Add Food</button>
<button class="cancel-btn" id="cancel-food-btn">Cancel</button>
</div>
<div class="display-none" id="food-preview">
<div class="nutrition-summary">
<div class="nutrition-item">
<div class="nutrition-value" id="calorieValuePreview">0</div>
<div class="nutrition-label">Calories</div>
</div>
<div class="nutrition-item">
<div class="nutrition-value" id="proteinValuePreview">0</div>
<div class="nutrition-label">Protein (g)</div>
</div>
<div class="nutrition-item">
<div class="nutrition-value" id="fatValuePreview">0</div>
<div class="nutrition-label">Fat (g)</div>
</div>
<div class="nutrition-item">
<div class="nutrition-value" id="carboValuePreview">0</div>
<div class="nutrition-label">Carbs (g)</div>
</div>
<div class="nutrition-item">
<div class="nutrition-value" id="fiberValuePreview">0</div>
<div class="nutrition-label">Fiber (g)</div>
</div>
</div>
</div>
</div>
<div class="section-title">Food Log</div>
<div class="food-cards-container" id="foodCardsContainer">
<!-- Food cards will be added here -->
</div>
<div class="calendar-section">
<div class="calendar-header">
<button class="calendar-nav" id="previous-month-btn"></button>
<div class="calendar-title" id="calendarTitle">Month Year</div>
<button class="calendar-nav" id="next-month-btn"></button>
</div>
<div class="calendar-grid" id="calendarGrid">
<!-- Calendar will be generated here -->
</div>
</div>
</div>
</main>
<!-- Settings -->
<section id="settings-content" class="hidden">
<div class="container">
<h1>⚙️ Settings</h1>
<div class="date-display">Define your daily macros goal</div>
<form id="settingsForm" class="settings-form">
<div class="form-group">
<label for="caloriesGoal">Daily calorie goal</label>
<input type="number" id="caloriesGoal" placeholder="Calories" required>
</div>
<div class="form-group">
<label for="proteinGoal">Daily protein goal</label>
<input type="number" id="proteinGoal" placeholder="Proteins in grams" required>
</div>
<div class="form-group">
<label for="fatGoal">Daily fat goal</label>
<input type="number" id="fatGoal" placeholder="Fat in grams" required>
</div>
<div class="form-group">
<label for="carboGoal">Daily carbs goal</label>
<input type="number" id="carboGoal" placeholder="Carbo in grams" required>
</div>
<div class="form-group">
<label for="fiberGoal">Daily fiber goal</label>
<input type="number" id="fiberGoal" placeholder="Fiber in grams" required>
</div>
<button type="submit" class="settings-btn">Save</button>
</form>
</div>
</section>
<!-- Meal Planner -->
<section id="meal-planner-content" class="hidden">
<div class="container">
<h1>📋 Meal Planner</h1>
<div class="date-display">Plan your meals and compare with your goals</div>
<!-- Template Management -->
<div class="template-management">
<div class="template-selector-container">
<label for="templateSelector">Current Plan:</label>
<select id="templateSelector" class="template-selector">
<option value="">-- Select a plan --</option>
</select>
<button id="newTemplateBtn" class="template-btn">+ New Plan</button>
<button id="deleteTemplateBtn" class="template-btn delete-btn">Delete Plan</button>
</div>
</div>
<!-- Plan Progress Summary -->
<div class="plan-progress-container">
<div class="calories-banner">
<div class="calories-number" id="planCaloriesTotal">0</div>
<div class="calories-text">Total Calories</div>
<div class="calories-text-goal" id="planCaloriesGoalText">of 0</div>
</div>
<div class="nutrition-summary" id="planNutritionSummary">
<div class="nutrition-item">
<div class="nutrition-label">Protein (g)</div>
<div class="nutrition-value" id="planProteinValue">0</div>
<div class="nutrition-progress-bar">
<div class="nutrition-progress-fill" id="planProteinProgress"></div>
</div>
<div class="nutrition-label" id="planProteinGoalText">of 0</div>
</div>
<div class="nutrition-item">
<div class="nutrition-label">Fat (g)</div>
<div class="nutrition-value" id="planFatValue">0</div>
<div class="nutrition-progress-bar">
<div class="nutrition-progress-fill" id="planFatProgress"></div>
</div>
<div class="nutrition-label" id="planFatGoalText">of 0</div>
</div>
<div class="nutrition-item">
<div class="nutrition-label">Carbs (g)</div>
<div class="nutrition-value" id="planCarboValue">0</div>
<div class="nutrition-progress-bar">
<div class="nutrition-progress-fill" id="planCarboProgress"></div>
</div>
<div class="nutrition-label" id="planCarboGoalText">of 0</div>
</div>
<div class="nutrition-item">
<div class="nutrition-label">Fiber (g)</div>
<div class="nutrition-value" id="planFiberValue">0</div>
<div class="nutrition-progress-bar">
<div class="nutrition-progress-fill" id="planFiberProgress"></div>
</div>
<div class="nutrition-label" id="planFiberGoalText">of 0</div>
</div>
</div>
</div>
<!-- Meal Sections -->
<div class="meals-container">
<!-- Breakfast -->
<div class="meal-section" data-meal-type="breakfast">
<h2 class="meal-section-title">🌅 Breakfast</h2>
<button class="add-meal-item-btn" data-meal-type="breakfast">+ Add Food</button>
<div class="meal-items-container" id="breakfastItemsContainer">
<!-- Planned items will be added here -->
</div>
</div>
<!-- Lunch -->
<div class="meal-section" data-meal-type="lunch">
<h2 class="meal-section-title">☀️ Lunch</h2>
<button class="add-meal-item-btn" data-meal-type="lunch">+ Add Food</button>
<div class="meal-items-container" id="lunchItemsContainer">
<!-- Planned items will be added here -->
</div>
</div>
<!-- Dinner -->
<div class="meal-section" data-meal-type="dinner">
<h2 class="meal-section-title">🌙 Dinner</h2>
<button class="add-meal-item-btn" data-meal-type="dinner">+ Add Food</button>
<div class="meal-items-container" id="dinnerItemsContainer">
<!-- Planned items will be added here -->
</div>
</div>
<!-- Snacks -->
<div class="meal-section" data-meal-type="snacks">
<h2 class="meal-section-title">🍿 Snacks</h2>
<button class="add-meal-item-btn" data-meal-type="snacks">+ Add Food</button>
<div class="meal-items-container" id="snacksItemsContainer">
<!-- Planned items will be added here -->
</div>
</div>
</div>
<!-- Add Food to Plan Form (initially hidden) -->
<div class="add-food-to-plan-section hidden" id="addFoodToPlanSection">
<h2 class="add-food-title" id="addFoodToPlanTitle">Add Food to <span id="currentMealType"></span></h2>
<div class="add-food-form">
<div class="form-group">
<label for="planFoodSearchInput">Food Item</label>
<div class="food-search-container">
<input
type="text"
class="food-search-input"
id="planFoodSearchInput"
placeholder="Search food (e.g., apple, chicken breast, rice...)"
autocomplete="off"
>
<div class="search-loading" id="planSearchLoading"></div>
<!-- Search Results Overlay -->
<div class="search-results" id="planSearchResults">
<!-- Results will be populated here -->
</div>
<!-- Hidden input for current meal type -->
<input type="hidden" id="currentMealTypeInput">
<input type="hidden" id="planItemIdToUpdate">
</div>
</div>
<div class="form-group">
<label for="planGramAmount">Amount (grams)</label>
<input type="number" id="planGramAmount" min="1" step="1" value="100">
</div>
<button class="add-btn" id="addFoodToPlanBtn">Add Food</button>
<button class="cancel-btn" id="cancelFoodToPlanBtn">Cancel</button>
</div>
<div class="display-none" id="plan-food-preview">
<div class="nutrition-summary">
<div class="nutrition-item">
<div class="nutrition-value" id="planCalorieValuePreview">0</div>
<div class="nutrition-label">Calories</div>
</div>
<div class="nutrition-item">
<div class="nutrition-value" id="planProteinValuePreview">0</div>
<div class="nutrition-label">Protein (g)</div>
</div>
<div class="nutrition-item">
<div class="nutrition-value" id="planFatValuePreview">0</div>
<div class="nutrition-label">Fat (g)</div>
</div>
<div class="nutrition-item">
<div class="nutrition-value" id="planCarboValuePreview">0</div>
<div class="nutrition-label">Carbs (g)</div>
</div>
<div class="nutrition-item">
<div class="nutrition-value" id="planFiberValuePreview">0</div>
<div class="nutrition-label">Fiber (g)</div>
</div>
</div>
</div>
</div>
</div>
</section>
<script type="module" src="src/index.ts"></script>
</body>
</html>