diff --git a/src/lib/components/sidebar/DetailsSidebar.svelte b/src/lib/components/sidebar/DetailsSidebar.svelte
index 3e5054a3..f5e26086 100644
--- a/src/lib/components/sidebar/DetailsSidebar.svelte
+++ b/src/lib/components/sidebar/DetailsSidebar.svelte
@@ -12,6 +12,20 @@
getCharacterPose
} from '$lib/utils/images'
import UncapIndicator from '$lib/components/uncap/UncapIndicator.svelte'
+ import { detectModifications } from '$lib/utils/modificationDetector'
+ import {
+ formatRingStat,
+ formatEarringStat,
+ formatAxSkill,
+ getWeaponKeyTitle,
+ getElementName
+ } from '$lib/utils/modificationFormatters'
+ import DetailsSidebarSegmentedControl from './modifications/DetailsSidebarSegmentedControl.svelte'
+ import ModificationSection from './modifications/ModificationSection.svelte'
+ import AwakeningDisplay from './modifications/AwakeningDisplay.svelte'
+ import WeaponKeysList from './modifications/WeaponKeysList.svelte'
+ import StatModifierItem from './modifications/StatModifierItem.svelte'
+ import UncapStatusDisplay from './modifications/UncapStatusDisplay.svelte'
interface Props {
type: 'character' | 'weapon' | 'summon'
@@ -20,6 +34,9 @@
let { type, item }: Props = $props()
+ let selectedView = $state<'canonical' | 'user'>('canonical')
+ let modificationStatus = $derived(detectModifications(type, item))
+
// Helper to get the actual item data
function getItemData() {
if (type === 'character') {
@@ -96,6 +113,13 @@
+
+
+ {#if selectedView === 'canonical'}
+
+
+
+
+
+ {#if type === 'character'}
+ {@const char = item as GridCharacter}
+
+ {#if modificationStatus.hasAwakening}
+
+
+
+ {/if}
+
+ {#if modificationStatus.hasRings}
+
+ {#each (char.rings || char.over_mastery || []) as ring}
+
+ {/each}
+
+ {/if}
+
+ {#if modificationStatus.hasEarring}
+ {@const earring = char.earring || char.aetherial_mastery}
+ {#if earring}
+
+
+
+ {/if}
+ {/if}
+
+ {#if modificationStatus.hasPerpetuity}
+
+
+
+ {/if}
+
+ {:else if type === 'weapon'}
+ {@const weapon = item as GridWeapon}
+
+ {#if modificationStatus.hasAwakening && weapon.awakening}
+
+
+
+ {/if}
+
+ {#if modificationStatus.hasWeaponKeys}
+
+
+
+ {/if}
+
+ {#if modificationStatus.hasAxSkills && weapon.ax}
+
+ {#each weapon.ax as axSkill}
+
+ {/each}
+
+ {/if}
+
+ {#if modificationStatus.hasElement && weapon.element}
+
+
+
+ {/if}
+
+ {:else if type === 'summon'}
+ {@const summon = item as GridSummon}
+
+ {#if modificationStatus.hasQuickSummon || modificationStatus.hasFriendSummon}
+
+ {#if summon.quickSummon}
+
+ {/if}
+ {#if summon.friend}
+
+ {/if}
+
+ {/if}
+ {/if}
+
+
+
+ Rarity
+ {getRarityLabel(itemData?.rarity)}
+
+
+ Element
+ {getElementLabel(itemData?.element)}
+
+
+ {#if type === 'character'}
+ {#if itemData?.race && itemData.race.length > 0}
+
+ Race
+
+ {itemData.race
+ .map((r) => getRaceLabel(r))
+ .filter(Boolean)
+ .join(', ') || '—'}
+
+
+ {/if}
+
+ Gender
+ {getGenderLabel(itemData?.gender)}
+
+ {:else if type === 'weapon'}
+
+ Proficiency
+ {getProficiencyLabel(itemData?.proficiency?.[0])}
+
+ {/if}
+
+
+ {/if}