aboutsummaryrefslogtreecommitdiffstats
path: root/src/features
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-08-02 16:52:41 -0700
committerAdam Soltys <[email protected]>2026-08-02 16:52:41 -0700
commit404350a32f26c892fa7b3b65f222ebc955be8a36 (patch)
tree4fa40ec2477c505fba6ce23246835b85813f2fec /src/features
parente4b4bd8292d298e90227a41189879eddc292ee59 (diff)
downloadcoinosv3-404350a32f26c892fa7b3b65f222ebc955be8a36.tar.gz
coinosv3-404350a32f26c892fa7b3b65f222ebc955be8a36.zip
Chat behind a header button, full-screen; move-panel polish
Chat leaves the tab bar (which returns to its four evenly spaced tabs) for an icon button in the header next to the wallet selector. It now takes over the whole screen — no balance card, no tabs — with a back button on the chat home view, and the logo still leads back to the wallet. The generic tabs/tabContent seams this reverts to unused are removed again. Move panel: the direction toggle stretches across the card, and the "X sats in Spending" line is gone — the balance sits right above it. Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Wvj4aoeMZwA7VUGdJP9Swi
Diffstat (limited to 'src/features')
-rw-r--r--src/features/ark.js2
-rw-r--r--src/features/messages.js27
2 files changed, 22 insertions, 7 deletions
diff --git a/src/features/ark.js b/src/features/ark.js
index d98e92e..4d9242c 100644
--- a/src/features/ark.js
+++ b/src/features/ark.js
@@ -1372,7 +1372,7 @@ export function arkFeature(ctx) {
h('span', { class: 'spinner sm' }), h('span', { class: 'small muted' }, t('arkConnecting'))))
: h('div', { class: 'col', style: 'gap:8px' },
h('p', { class: 'small muted', style: 'margin:0' }, t('moveToSavingDesc')),
- h('div', { class: 'small faint' }, t('moveAvailable', { n: fmtAmount(b ? b.spendableSat : 0) + ' ' + unitLabel() })),
+ // no "X sats in Spending" line — the balance sits right above on this card
h('button', {
class: 'btn-block', disabled: !b || !b.spendableSat,
onClick: () => { ui.arkMoveOpen = false; ui.arkExitPage = true; ui.arkError = ''; render(); },
diff --git a/src/features/messages.js b/src/features/messages.js
index 2484b46..25e6f7a 100644
--- a/src/features/messages.js
+++ b/src/features/messages.js
@@ -40,6 +40,7 @@ const COMMUNITY = {
};
const EPOCH = 0;
+const CHAT_ICON = '<svg viewBox="0 0 24 24" width="17" height="17" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" style="display:block"><path d="M21 11.5a8.38 8.38 0 0 1-8.5 8.5 8.5 8.5 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 8.5-8.5 8.38 8.38 0 0 1 8.5 8.5z"/></svg>';
const DM_RELAYS = ['wss://relay.coinos.io', 'wss://nos.lol'];
const APP_BASE = 'https://v3.coinos.io';
const CACHE_MAX = 50; // messages kept per channel / per DM thread in feature state
@@ -104,7 +105,7 @@ export function messagesFeature(ctx) {
if (repaintTimer) return;
repaintTimer = setTimeout(() => {
repaintTimer = null;
- if (ui.screen === 'wallet' && ui.tab === 'messages') render();
+ if (ui.screen === 'wallet' && ui.chatOpen) render();
}, 80);
};
@@ -785,6 +786,11 @@ export function messagesFeature(ctx) {
const kids = [];
+ // Chat takes the whole screen, so home carries the way back to the wallet.
+ kids.push(h('div', { class: 'row gap6', style: 'align-items:center' },
+ backBtn(() => { ui.chatOpen = false; render(); }),
+ h('h3', { style: 'margin:0' }, t('tabMessages'))));
+
if (pendingLink) kids.push(linkInviteCard());
for (const [rid, inv] of pendingDirect) kids.push(directInviteCard(rid, inv));
@@ -1052,15 +1058,24 @@ export function messagesFeature(ctx) {
return {
id: 'messages',
- tabs: () => [['messages', t('tabMessages')]],
- tabContent(tab) {
- if (tab !== 'messages') return null;
- return messagesTab();
+ // Chat lives behind a header button and takes over the whole screen —
+ // no balance card, no tabs; each view carries its own way back.
+ headerButtons() {
+ return [h('button', {
+ class: 'btn-sm', title: t('tabMessages'),
+ onClick: () => { ui.chatOpen = true; render(); },
+ }, h('span', { html: CHAT_ICON }))];
+ },
+ screenView() {
+ if (!ui.chatOpen || ui.screen !== 'wallet') return null;
+ return h('div', { class: 'col', style: 'gap:16px' },
+ ctx.brandHeader(false),
+ messagesTab());
},
init() {
if (urlInvite && !pendingLink) {
loadLinkInvite(urlInvite);
- setTimeout(() => { ui.tab = 'messages'; ui.msgView = 'home'; render(); }, 0);
+ setTimeout(() => { ui.chatOpen = true; ui.msgView = 'home'; render(); }, 0);
}
startDMs();
syncLists().catch(() => {});