Adding latest changes

This commit is contained in:
Moritz Graf
2026-01-02 17:58:42 +01:00
parent 408cfa87d1
commit 3b836d945e
12 changed files with 245 additions and 91 deletions
+15 -30
View File
@@ -113,11 +113,11 @@ const duplicateWorkout = (workout) => {
workingWorkout.value = copy
workingWorkout.value.isLocal = true // Default to local for safety, or prompt user? Let's say local.
// For duplicate, we treat it as a NEW workout derived from old, so no diff?
// For duplicate, we treat it as a NEW workout derived from old, so no diff?
// User requested "Diff for all edit/clone". So we should behave like 'edit'.
// But wait, if it's a clone, the "Original" is the source?
// But wait, if it's a clone, the "Original" is the source?
// Let's copy it to original too so user sees what they started with.
originalWorkout.value = JSON.parse(JSON.stringify(copy))
originalWorkout.value = JSON.parse(JSON.stringify(copy))
viewMode.value = 'editor'
editorMode.value = 'edit'
@@ -431,17 +431,11 @@ const getSportName = (workout) => {
<div class="toolbar-right">
<!-- View Mode Toggle (Segmented) -->
<div class="segmented-control">
<button
:class="{ active: editorTab === 'visual' }"
@click="editorTab = 'visual'"
>
<button :class="{ active: editorTab === 'visual' }" @click="editorTab = 'visual'">
<LayoutDashboard class="w-4 h-4" />
<span>Visual</span>
</button>
<button
:class="{ active: editorTab === 'json' }"
@click="editorTab = 'json'"
>
<button :class="{ active: editorTab === 'json' }" @click="editorTab = 'json'">
<Code class="w-4 h-4" />
<span>JSON</span>
</button>
@@ -450,20 +444,13 @@ const getSportName = (workout) => {
<div class="toolbar-divider"></div>
<!-- AI Button -->
<button
class="toolbar-btn ai-enhance-btn"
@click="showAiModal = true"
>
<button class="toolbar-btn ai-enhance-btn" @click="showAiModal = true">
<Sparkles class="w-4 h-4" />
<span>Enhance</span>
</button>
<!-- Sync/Save Button -->
<button
class="toolbar-btn primary-btn sync-btn"
:disabled="syncing"
@click="saveOrSync"
>
<button class="toolbar-btn primary-btn sync-btn" :disabled="syncing" @click="saveOrSync">
<Cloud v-if="!syncing" class="w-4 h-4" />
<Loader2 v-else class="w-4 h-4 animate-spin" />
<span>{{ workingWorkout.isLocal ? 'Save Local' : 'Sync to Garmin' }}</span>
@@ -513,8 +500,9 @@ const getSportName = (workout) => {
</div>
<!-- EDITOR CONTENT -->
<div class="flex-1 bg-gray-900/30 border border-gray-800 rounded-xl overflow-hidden relative p-4 overflow-y-auto">
<div
class="flex-1 bg-gray-900/30 border border-gray-800 rounded-xl overflow-hidden relative p-4 overflow-y-auto"
>
<!-- COMPARE VIEW (For Edits) -->
<WorkoutCompareView
v-if="editorMode === 'edit'"
@@ -530,17 +518,13 @@ const getSportName = (workout) => {
v-model="workingWorkout"
v-model:steps="workingWorkout.workoutSegments[0].workoutSteps"
/>
<WorkoutJsonEditor
v-else
v-model="workingWorkout"
/>
<WorkoutJsonEditor v-else v-model="workingWorkout" />
</div>
</div>
</div>
<!-- AI MODAL -->
<AiChatModal
<AiChatModal
:is-open="showAiModal"
:workout="workingWorkout"
:loading="aiLoading"
@@ -589,7 +573,8 @@ const getSportName = (workout) => {
z-index: 10;
}
.toolbar-left, .toolbar-right {
.toolbar-left,
.toolbar-right {
display: flex;
align-items: center;
gap: 0.75rem;
@@ -661,7 +646,7 @@ const getSportName = (workout) => {
.segmented-control button.active {
background: var(--border-color);
color: #fff;
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.segmented-control button:hover:not(.active) {