From eb030ef9663d1c950749a9260e7b2a459dd54959 Mon Sep 17 00:00:00 2001 From: adevopg Date: Mon, 13 Jul 2026 15:04:46 +0000 Subject: [PATCH] =?UTF-8?q?web-next:=20=C2=ABOpciones=20de=20cuenta=C2=BB?= =?UTF-8?q?=20reordenado=20seg=C3=BAn=20el=20markup?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit accountTools en el orden del markup: cambiar contraseña, 2FA (email-icon, label purple-info), transferir PD, comercio de PD, código promoción, token, recluta, renombrar hermandad, votar, adquirir PD. «Cambiar correo» (que tenemos y no está en la lista) al final; panel admin el último (solo admin). Tool.labelClass para el morado del 2FA. Iconos nuevos del sprite: trade-pd-icon (-299 -928) y color .purple-info (#b172ff) añadidos al tema. Claves i18n nuevas (svc2FA/TransferDP/TradePD/Promo/RenameGuild/DPoints). Rutas nuevas → 404 aún. Co-Authored-By: Claude Opus 4.8 (1M context) --- web-next/components/AccountTools.tsx | 13 ++++++++++--- web-next/messages/en.json | 14 +++++++++++++- web-next/messages/es.json | 14 +++++++++++++- .../nw-themes/nw-ryu/nw-css/novawow-style.css | 8 ++++++++ 4 files changed, 44 insertions(+), 5 deletions(-) diff --git a/web-next/components/AccountTools.tsx b/web-next/components/AccountTools.tsx index a81b082..f8ce92c 100644 --- a/web-next/components/AccountTools.tsx +++ b/web-next/components/AccountTools.tsx @@ -4,7 +4,7 @@ import { useState } from 'react' import { useTranslations } from 'next-intl' import { Link } from '@/i18n/navigation' -type Tool = { href: string; icon: string; label: string; desc: string } +type Tool = { href: string; icon: string; label: string; desc: string; labelClass?: string } /** Replica los paneles plegables «OPCIONES DE CUENTA / OPCIONES DE PERSONAJE» * del my-account de Django (acordeón por click), con las herramientas ya @@ -14,10 +14,17 @@ export function AccountTools({ isAdmin }: { isAdmin: boolean }) { const accountTools: Tool[] = [ { href: '/change-password', icon: 'password-icon', label: t('svcChangePassword'), desc: t('svcChangePasswordDesc') }, - { href: '/change-email', icon: 'email-icon', label: t('svcChangeEmail'), desc: t('svcChangeEmailDesc') }, + { href: '/security-2falogin', icon: 'email-icon', label: t('svc2FA'), desc: t('svc2FADesc'), labelClass: 'purple-info' }, + { href: '/transfer-d-points', icon: 'transfer-dp-icon', label: t('svcTransferDP'), desc: t('svcTransferDPDesc') }, + { href: '/trade-points', icon: 'trade-pd-icon', label: t('svcTradePD'), desc: t('svcTradePDDesc') }, + { href: '/promo-code', icon: 'promo-icon', label: t('svcPromo'), desc: t('svcPromoDesc') }, { href: '/security-token', icon: 'token-icon', label: t('svcToken'), desc: t('svcTokenDesc') }, { href: '/recruit', icon: 'recruit-a-friend-icon', label: t('svcRecruit'), desc: t('svcRecruitDesc') }, + { href: '/rename-guild', icon: 'rename-guild-icon', label: t('svcRenameGuild'), desc: t('svcRenameGuildDesc') }, { href: '/vote-points', icon: 'vote-icon', label: t('svcVote'), desc: t('svcVoteDesc') }, + { href: '/d-points', icon: 'dnt-icon', label: t('svcDPoints'), desc: t('svcDPointsDesc') }, + // Las que tenemos y no están en la lista, al final: + { href: '/change-email', icon: 'email-icon', label: t('svcChangeEmail'), desc: t('svcChangeEmailDesc') }, // Panel de administración: una tool-button más dentro de «Opciones de cuenta» (solo admins). ...(isAdmin ? [{ href: '/admin', icon: 'store-icon', label: `🛡️ ${t('adminPanel')}`, desc: t('adminPanelDesc') }] : []), ] @@ -74,7 +81,7 @@ function Panel({ id, arrow, title, tools, defaultOpen = false }: { id: string; a
- {it.label} + {it.label}
{it.desc}
diff --git a/web-next/messages/en.json b/web-next/messages/en.json index ee19373..2706029 100644 --- a/web-next/messages/en.json +++ b/web-next/messages/en.json @@ -135,7 +135,19 @@ "svcStoreItems": "Store", "svcStoreItemsDesc": "Get all kinds of items", "svcSendGift": "Send gift", - "svcSendGiftDesc": "Send gifts to your friends" + "svcSendGiftDesc": "Send gifts to your friends", + "svc2FA": "2FA (Two-step verification)", + "svc2FADesc": "Manage two-factor authentication", + "svcTransferDP": "Transfer PD", + "svcTransferDPDesc": "Transfer PD to your alt accounts", + "svcTradePD": "PD trading", + "svcTradePDDesc": "Buy or sell PD for gold", + "svcPromo": "Promo code", + "svcPromoDesc": "Redeem codes for PD or VP", + "svcRenameGuild": "Rename guild", + "svcRenameGuildDesc": "Change your guild's name", + "svcDPoints": "Get PD", + "svcDPointsDesc": "Get PD and access rewards" }, "SelectAccount": { "title": "Select your game account", diff --git a/web-next/messages/es.json b/web-next/messages/es.json index a0ba51f..b46191f 100644 --- a/web-next/messages/es.json +++ b/web-next/messages/es.json @@ -135,7 +135,19 @@ "svcStoreItems": "Tienda", "svcStoreItemsDesc": "Adquiere objetos de todo tipo", "svcSendGift": "Enviar regalo", - "svcSendGiftDesc": "Envía regalos a tus amigos" + "svcSendGiftDesc": "Envía regalos a tus amigos", + "svc2FA": "2FA (Verificación en 2 pasos)", + "svc2FADesc": "Gestiona la doble autenticación", + "svcTransferDP": "Tranferir PD", + "svcTransferDPDesc": "Transfiere PD a tus cuentas alternativas", + "svcTradePD": "Comercio de PD", + "svcTradePDDesc": "Compra o vende PD por oro", + "svcPromo": "Código de promoción", + "svcPromoDesc": "Canjea códigos por PD o PV", + "svcRenameGuild": "Renombrar hermandad", + "svcRenameGuildDesc": "Cambia el nombre de tu hermandad", + "svcDPoints": "Adquirir PD", + "svcDPointsDesc": "Obtiene PD y accede a recompensas" }, "SelectAccount": { "title": "Selecciona tu cuenta de juego", diff --git a/web-next/public/nw-themes/nw-ryu/nw-css/novawow-style.css b/web-next/public/nw-themes/nw-ryu/nw-css/novawow-style.css index c856845..9a3e6b3 100644 --- a/web-next/public/nw-themes/nw-ryu/nw-css/novawow-style.css +++ b/web-next/public/nw-themes/nw-ryu/nw-css/novawow-style.css @@ -909,6 +909,14 @@ textarea:focus, select:focus, input[type=password]:focus, input[type=number]:foc background-position: -424px -553px; } +.trade-pd-icon { + background-position: -299px -928px; +} + +.purple-info { + color: #b172ff; +} + .token-icon { background-position: -174px -553px; }