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 @@ {displayName(itemData)} + + + {#if selectedView === 'canonical'} +

Basic Information

@@ -291,6 +315,172 @@
{/if} +
+ {:else} +
+ + + + + {#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}