Files
NightSpire/web-next/components/ArmoryTalentTab.tsx
T
Inna beba7301a1 Armería: PvP campos de batalla, logros por categoría, bandas/mazmorras y página de hermandad
- PvP: pestaña Campos de batalla (pvpstats) con resultado, stats por partida y fecha/hora.
- Logros: rejilla por categoría con anillos de progreso + detalle por categoría
  (datos de Achievement.db2 + Achievement_Category.db2, iconos vía wowhead).
- Bandas: progreso por dificultad (10/25/heroico) con jefes reales de DungeonEncounter.db2
  y tooltip de jefes; agrupado por expansión (Clásico/TBC/WotLK).
- Mazmorras: mismo sistema, Normal + Heroico, Clásico/TBC/WotLK.
- Página de hermandad estilo armería: cabecera (emblema, puntos = unión de logros de
  miembros sin duplicar, nº miembros, fundada), pestañas Hermandad/Logros, roster con
  iconos de clase/raza, columna Función (rol por spec), filtros clase/función,
  orden por rango/puntos/nivel de objeto/nivel/nombre, paginación.
- Barra lateral: mensaje diario con login (iron-session, gated por pertenencia),
  logros recientes y desgloses de clases y funciones.
- Cabecera de personaje: enlace a la hermandad + nombre del reino.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 01:18:30 +00:00

68 lines
1.8 KiB
TypeScript

'use client'
import { useState } from 'react'
import { WowheadRefresh } from './WowheadRefresh'
import { ArmoryTalents, type TalentGroupView } from './ArmoryTalents'
/**
* Pestaña de talentos con conmutador Primaria/Secundaria (doble especialización).
* Cada grupo trae su propio árbol y sus propios glifos, así que al conmutar cambian
* ambos. Marca cuál es la spec activa del personaje.
*/
export function ArmoryTalentTab({
groups,
activeIndex,
spellIcons,
locale,
labels,
}: {
groups: TalentGroupView[]
activeIndex: number
spellIcons: Record<number, string>
locale: string
labels: {
distribution: string
glyphs: string
majorGlyphs: string
minorGlyphs: string
primary: string
secondary: string
activeSpec: string
}
}) {
const [active, setActive] = useState(activeIndex)
const groupLabel = (i: number) => (i === 0 ? labels.primary : labels.secondary)
const g = groups[active] ?? groups[0]
if (!g) return null
return (
<div className="armory-panel armory-talents-panel">
<WowheadRefresh dep={`talents-${active}`} />
{groups.length > 1 && (
<div className="armory-spec-toggle">
{groups.map((_, i) => (
<button key={i} type="button" className={i === active ? 'active' : ''} onClick={() => setActive(i)}>
{groupLabel(i)}
{i === activeIndex ? <span className="armory-spec-toggle-dot"> {labels.activeSpec}</span> : null}
</button>
))}
</div>
)}
<ArmoryTalents
group={g}
spellIcons={spellIcons}
locale={locale}
labels={{
distribution: labels.distribution,
groupLabel: groupLabel(active),
glyphs: labels.glyphs,
majorGlyphs: labels.majorGlyphs,
minorGlyphs: labels.minorGlyphs,
}}
/>
</div>
)
}