aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-09-05 00:17:57 -0700
committerAdam Soltys <[email protected]>2026-09-05 00:17:57 -0700
commitaa67ba1c15ce761666342e16a3194d3b5b0a4167 (patch)
tree32325bc7cb66de75e2933c13b8061a9f7932a0cd /src
parent6d0baaebb09602305bf1cad3110d59323cce3c1a (diff)
downloadcoinosv3-aa67ba1c15ce761666342e16a3194d3b5b0a4167.tar.gz
coinosv3-aa67ba1c15ce761666342e16a3194d3b5b0a4167.zip
Chat goes full-bleed on phones like the notes feed — the home list, community rooms and DM threads (now sharing a chat-page class) drop their card walls and run edge to edge under 520px — and the type steps up a notch: bubbles 14→15px, names 13→14px, timestamps 11→12px. Plus: a fixed-price LNURL (minSendable == maxSendable — bolt-card top-ups, paywalls, static charges) no longer prompts for an amount — resolve() fills it and locks the field via the same fixedSat machinery fixed-amount BOLT 12 offers already use (disabled input, adjusted hints, confirm bypass)
Co-Authored-By: Claude Fable 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01MGzU12QrAA4G6BYGzGVdXz
Diffstat (limited to 'src')
-rw-r--r--src/features/messages.js6
-rw-r--r--src/features/zaps.js7
-rw-r--r--src/style.css14
3 files changed, 21 insertions, 6 deletions
diff --git a/src/features/messages.js b/src/features/messages.js
index 80230d6..a370097 100644
--- a/src/features/messages.js
+++ b/src/features/messages.js
@@ -2877,7 +2877,7 @@ export function messagesFeature(ctx) {
memberCount ? t('msgMembers', { n: memberCount }) : t('msgEncrypted'))));
})));
- return h('div', { class: 'card col', style: 'gap:10px' }, ...kids);
+ return h('div', { class: 'card col chat-page', style: 'gap:10px' }, ...kids);
}
function linkInviteCard() {
@@ -2993,7 +2993,7 @@ export function messagesFeature(ctx) {
keepBeating();
if (ch) ping(room, ch.id, PRESENCE);
- return h('div', { class: 'card col chat-card' },
+ return h('div', { class: 'card col chat-card chat-page' },
h('div', { class: 'row between chat-head' },
h('div', { class: 'row gap6', style: 'align-items:center;min-width:0' },
backBtn(() => { ui.msgView = 'home'; ui.msgReplyTo = null; ui.msgSheet = null; render(); }),
@@ -3200,7 +3200,7 @@ export function messagesFeature(ctx) {
h('span', { class: 'small muted chat-quote-text' }, String(m.rumor.content || '').replace(/\s+/g, ' ').slice(0, 90))),
h('button', { class: 'chat-del', style: 'position:static;display:flex;flex-shrink:0', onClick: () => { ui.msgReplyTo = null; render(); } }, '×'));
};
- return h('div', { class: 'card col chat-card' },
+ return h('div', { class: 'card col chat-card chat-page' },
h('div', { class: 'row chat-head gap6', style: 'align-items:center' },
backBtn(() => { ui.msgView = 'home'; ui.msgReplyTo = null; ui.msgSheet = null; render(); }),
avatar(peer),
diff --git a/src/features/zaps.js b/src/features/zaps.js
index 03b80e1..7148df1 100644
--- a/src/features/zaps.js
+++ b/src/features/zaps.js
@@ -121,6 +121,13 @@ export function zapsFeature(ctx) {
}
const params = await fetchPayParams(target.url);
if (ui.zap !== z) return; // user navigated away
+ // A fixed-price LNURL (min == max — a bolt-card top-up, a paywall, a
+ // static charge) has no amount to ask for: fill it and lock the field,
+ // exactly like a fixed-amount BOLT 12 offer.
+ if (params.minSendable === params.maxSendable && params.minSendable >= 1000) {
+ params.fixedSat = Math.ceil(params.minSendable / 1000);
+ z.amount = getUnit() === 'sats' ? String(params.fixedSat) : (params.fixedSat / 1e8).toFixed(8);
+ }
z.params = params;
z.status = 'ready';
render();
diff --git a/src/style.css b/src/style.css
index 382535c..ee6dc32 100644
--- a/src/style.css
+++ b/src/style.css
@@ -399,18 +399,26 @@ hr.divider { margin: 16px 0; }
.chat-avatar.spacer { background: transparent; height: 0; }
.chat-body { min-width: 0; flex: 1; }
.chat-meta { display: flex; align-items: baseline; gap: 7px; margin-bottom: 2px; }
-.chat-name { font-size: 13px; font-weight: 650; }
+.chat-name { font-size: 14px; font-weight: 650; }
.chat-badge {
font-size: 10px; font-weight: 650; color: var(--accent-fg); background: var(--accent);
border-radius: 5px; padding: 1px 5px; margin-left: 5px; vertical-align: 1px;
}
-.chat-time { font-size: 11px; color: var(--faint); }
+.chat-time { font-size: 12px; color: var(--faint); }
.chat-bubble {
position: relative; display: inline-block; max-width: 100%;
background: var(--paper); border: 1px solid var(--line); border-radius: 12px;
- padding: 7px 11px; font-size: 14px; line-height: 1.45;
+ padding: 7px 11px; font-size: 15px; line-height: 1.45;
overflow-wrap: break-word; white-space: pre-wrap;
}
+/* the messages surfaces run edge to edge on phones, like the notes feed —
+ the card walls step outside #app's padding and the borders/radius go */
+@media (max-width: 520px) {
+ .chat-page {
+ margin-left: -16px; margin-right: -16px;
+ border-left: none; border-right: none; border-radius: 0;
+ }
+}
.chat-edited { font-size: 11px; color: var(--faint); }
.chat-del {
position: absolute; top: -7px; right: -7px; width: 18px; height: 18px;