diff --git a/resources/lang/en.json b/resources/lang/en.json index cd881bee7..eba44de3c 100644 --- a/resources/lang/en.json +++ b/resources/lang/en.json @@ -310,6 +310,7 @@ "ban": "Ban", "unban": "Unban", "banned_players": "Banned Players", + "banned_players_count": "{count, plural, one {# banned player} other {# banned players}}", "no_bans": "No banned players.", "ban_reason_prompt": "Ban reason (optional, max 200 characters):", "confirm_ban": "Are you sure you want to ban this player? They will be removed from the clan and unable to rejoin.", diff --git a/src/client/ClanModal.ts b/src/client/ClanModal.ts index e611fc424..1aebed5dd 100644 --- a/src/client/ClanModal.ts +++ b/src/client/ClanModal.ts @@ -73,7 +73,7 @@ export class ClanModal extends BaseModal { onBack: () => this.close(), ariaLabel: translateText("common.back"), }) - : null; + : this.renderSubViewHeader(); return html` this.handleTabChange(key as Tab)} > ${header ? html`
${header}
` : ""} - ${this.renderInner()} +
${this.renderInner()}
`; } + private tagPill(tag: string) { + return html`[${tag}]`; + } + + private renderSubViewHeader() { + const clan = this.selectedClan; + const ariaLabel = translateText("common.back"); + if (this.view === "my-requests") { + return modalHeader({ + title: translateText("clan_modal.pending_applications"), + onBack: () => (this.view = "list"), + ariaLabel, + }); + } + if (this.view === "manage") { + return modalHeader({ + title: translateText("clan_modal.manage_clan"), + onBack: () => (this.view = "detail"), + ariaLabel, + rightContent: clan ? this.tagPill(clan.tag) : undefined, + }); + } + if (this.view === "transfer") { + return modalHeader({ + title: translateText("clan_modal.transfer_leadership"), + onBack: () => (this.view = "manage"), + ariaLabel, + }); + } + if (this.view === "requests") { + return modalHeader({ + title: translateText("clan_modal.join_requests"), + onBack: () => (this.view = "detail"), + ariaLabel, + }); + } + if (this.view === "bans") { + return modalHeader({ + title: translateText("clan_modal.banned_players"), + onBack: () => (this.view = "manage"), + ariaLabel, + }); + } + // Default: detail + return modalHeader({ + title: clan?.name ?? translateText("clan_modal.title"), + onBack: () => { + this.view = "list"; + this.selectedClan = null; + this.selectedClanTag = ""; + this.myRole = null; + this.detailCache = null; + }, + ariaLabel, + rightContent: clan ? this.tagPill(clan.tag) : undefined, + }); + } + private handleTabChange(tab: Tab) { this.activeTab = tab; this.view = "list"; @@ -351,7 +412,7 @@ export class ClanModal extends BaseModal { } return html` -
+
${hasRequests ? this.renderPendingRequestsButton() : ""} ${this.myClans.map( (clan) => html` diff --git a/src/client/UserSettingModal.ts b/src/client/UserSettingModal.ts index 8f51ff425..5bc6f0432 100644 --- a/src/client/UserSettingModal.ts +++ b/src/client/UserSettingModal.ts @@ -343,7 +343,9 @@ export class UserSettingModal extends BaseModal { showDivider: true, })}
-
${activeContent}
+
+ ${activeContent} +
`; } diff --git a/src/client/components/baseComponents/Modal.ts b/src/client/components/baseComponents/Modal.ts index fc4801064..68ebd4462 100644 --- a/src/client/components/baseComponents/Modal.ts +++ b/src/client/components/baseComponents/Modal.ts @@ -126,9 +126,8 @@ export class OModal extends LitElement { !this.inline && this.maxWidth ? `max-width: ${this.maxWidth};` : ""; const hasTabs = this.tabs.length > 0; - const sectionClass = hasTabs - ? "relative flex-1 min-h-0 flex flex-col text-white bg-black/70 backdrop-blur-xl lg:rounded-2xl lg:border border-white/10 overflow-hidden" - : "relative flex-1 min-h-0 flex flex-col text-white bg-[#23232382] backdrop-blur-md lg:rounded-lg overflow-hidden"; + const sectionClass = + "relative flex-1 min-h-0 flex flex-col text-white bg-black/70 backdrop-blur-xl lg:rounded-2xl lg:border border-white/10 overflow-hidden"; return html`