+ <>
-
-
-
-
-
-
- {renderRelayCustomisation()}
-
-
-
-
+
+
+
+
+
+
+
+ {renderRelayCustomisation()}
+
+
+
+
+
-
-
-
-
-
dispatch(setZapForward(e.target.value))}
- />
-
-
-
-
+ dispatch(setZapForward(e.target.value))}
+ />
+
+
+
+
+
+ >
)}
)}
diff --git a/packages/app/src/Element/NoteFooter.tsx b/packages/app/src/Element/NoteFooter.tsx
index f2a71e2d..9fed46ad 100644
--- a/packages/app/src/Element/NoteFooter.tsx
+++ b/packages/app/src/Element/NoteFooter.tsx
@@ -6,9 +6,6 @@ import { TaggedNostrEvent, HexKey, u256, ParsedZap, countLeadingZeros } from "@s
import { LNURL } from "@snort/shared";
import { useUserProfile } from "@snort/system-react";
-import Icon from "Icons/Icon";
-import Spinner from "Icons/Spinner";
-
import { formatShort } from "Number";
import useEventPublisher from "Feed/EventPublisher";
import { delay, findTag, normalizeReaction, unwrap } from "SnortUtils";
@@ -17,6 +14,7 @@ import SendSats from "Element/SendSats";
import { ZapsSummary } from "Element/Zap";
import { RootState } from "State/Store";
import { setReplyTo, setShow, reset } from "State/NoteCreator";
+import { AsyncIcon } from "Element/AsyncIcon";
import { useWallet } from "Wallet";
import useLogin from "Hooks/useLogin";
@@ -282,27 +280,14 @@ interface AsyncFooterIconProps extends HTMLProps
{
}
function AsyncFooterIcon(props: AsyncFooterIconProps) {
- const [loading, setLoading] = useState(props.loading ?? false);
-
- async function handleClick(e: React.MouseEvent) {
- setLoading(true);
- try {
- if (props.onClick) {
- await props.onClick(e);
- }
- } catch (ex) {
- console.error(ex);
- }
- setLoading(false);
- }
-
+ const mergedProps = {
+ ...props,
+ iconSize: 18,
+ className: `reaction-pill${props.className ? ` ${props.className}` : ""}`,
+ };
return (
- handleClick(e)}>
- {loading ?
:
}
+
{props.value > 0 && {formatShort(props.value)}
}
-
+
);
}
diff --git a/packages/app/src/Element/ProfileImage.tsx b/packages/app/src/Element/ProfileImage.tsx
index 624389c2..f4456045 100644
--- a/packages/app/src/Element/ProfileImage.tsx
+++ b/packages/app/src/Element/ProfileImage.tsx
@@ -48,25 +48,37 @@ export default function ProfileImage({
}
}
- return (
-
-
- {showUsername && (
-
-
-
{name.trim()}
- {nip05 &&
}
-
-
{subHeader}
+ function inner() {
+ return (
+ <>
+
- )}
-
- );
+ {showUsername && (
+
+
+
{name.trim()}
+ {nip05 &&
}
+
+
{subHeader}
+
+ )}
+ >
+ );
+ }
+
+ if (link === "") {
+ return
{inner()}
;
+ } else {
+ return (
+
+ {inner()}
+
+ );
+ }
}
export function getDisplayName(user: UserMetadata | undefined, pubkey: HexKey) {
diff --git a/packages/app/src/Element/Reactions.css b/packages/app/src/Element/Reactions.css
index 0904fa60..24f93276 100644
--- a/packages/app/src/Element/Reactions.css
+++ b/packages/app/src/Element/Reactions.css
@@ -7,7 +7,7 @@
}
.light .reactions-modal .modal-body {
- background-color: var(--note-bg);
+ background-color: var(--gray-superdark);
}
@media (max-width: 720px) {
diff --git a/packages/app/src/Element/SendSats.css b/packages/app/src/Element/SendSats.css
index e09d4ad0..f686f06e 100644
--- a/packages/app/src/Element/SendSats.css
+++ b/packages/app/src/Element/SendSats.css
@@ -22,7 +22,7 @@
}
.light .lnurl-tip {
- background-color: var(--note-bg);
+ background-color: var(--gray-superdark);
}
.lnurl-tip h3 {
@@ -95,7 +95,7 @@
.sat-amount.active {
font-weight: bold;
- color: var(--note-bg);
+ color: var(--gray-superdark);
background-color: var(--font-color);
}
diff --git a/packages/app/src/Element/Textarea.css b/packages/app/src/Element/Textarea.css
index a54d2b16..209e15fa 100644
--- a/packages/app/src/Element/Textarea.css
+++ b/packages/app/src/Element/Textarea.css
@@ -13,7 +13,7 @@
.user-item,
.emoji-item {
color: var(--font-color);
- background: var(--note-bg);
+ background: var(--gray-superdark);
display: flex;
flex-direction: row;
align-items: center;
diff --git a/packages/app/src/Element/Thread.css b/packages/app/src/Element/Thread.css
index 59a057fd..4d2c6d2e 100644
--- a/packages/app/src/Element/Thread.css
+++ b/packages/app/src/Element/Thread.css
@@ -37,7 +37,7 @@
}
.thread-container .show-more {
- background: var(--note-bg);
+ background: var(--gray-superdark);
padding-left: 76px;
width: 100%;
text-align: left;
@@ -95,12 +95,12 @@
.thread-container .collapsed,
.thread-container .show-more-container {
- background: var(--note-bg);
+ background: var(--gray-superdark);
min-height: 48px;
}
.thread-container .collapsed {
- background-color: var(--note-bg);
+ background-color: var(--gray-superdark);
}
.thread-container .hidden-note {
diff --git a/packages/app/src/Pages/new/NewUserFlow.tsx b/packages/app/src/Pages/new/NewUserFlow.tsx
index 465a4d0a..45e70ac1 100644
--- a/packages/app/src/Pages/new/NewUserFlow.tsx
+++ b/packages/app/src/Pages/new/NewUserFlow.tsx
@@ -56,6 +56,7 @@ const HowDoKeysWork = () => {
};
const Extensions = () => {
+ const { preferences } = useLogin();
return (
{
Alby
+ {(preferences.language === "ru" || preferences.language === "ru-RU") && (
+
+ (Tony's Guide)
+
+ )}
diff --git a/packages/app/src/SnortUtils/index.ts b/packages/app/src/SnortUtils/index.ts
index b73137a4..c42e29c3 100644
--- a/packages/app/src/SnortUtils/index.ts
+++ b/packages/app/src/SnortUtils/index.ts
@@ -26,9 +26,10 @@ export function getPublicKey(privKey: HexKey) {
export async function openFile(): Promise {
return new Promise(resolve => {
const elm = document.createElement("input");
+ let lock = false;
elm.type = "file";
const handleInput = (e: Event) => {
- console.debug(e);
+ lock = true;
const elm = e.target as HTMLInputElement;
if ((elm.files?.length ?? 0) > 0) {
resolve(elm.files![0]);
@@ -38,8 +39,19 @@ export async function openFile(): Promise {
};
elm.onchange = e => handleInput(e);
- elm.onblur = e => handleInput(e);
elm.click();
+ window.addEventListener(
+ "focus",
+ () => {
+ setTimeout(() => {
+ if (!lock) {
+ console.debug("FOCUS WINDOW UPLOAD");
+ resolve(undefined);
+ }
+ }, 300);
+ },
+ { once: true }
+ );
});
}
diff --git a/packages/app/src/index.css b/packages/app/src/index.css
index 6ccb7a5d..0636d11f 100644
--- a/packages/app/src/index.css
+++ b/packages/app/src/index.css
@@ -8,7 +8,6 @@
--font-size-small: 13px;
--font-size-tiny: 11px;
--modal-bg-color: rgba(0, 0, 0, 0.8);
- --note-bg: #0c0c0c;
--highlight: #ac88ff;
--error: #ff6053;
--success: #2ad544;
@@ -23,25 +22,25 @@
--gray: #333;
--gray-secondary: #222;
--gray-tertiary: #444;
- --gray-dark: #2b2b2b;
- --gray-superdark: #1a1a1a;
+ --gray-dark: #2c2c2c;
+ --gray-superdark: #1b1b1b;
--gray-ultradark: #111;
--gray-gradient: linear-gradient(to bottom right, var(--gray-superlight), var(--gray), var(--gray-light));
--snort-gradient: linear-gradient(90deg, #a178ff 0%, #ff6baf 100%);
--dm-gradient: linear-gradient(90deg, #5722d2 0%, #db1771 100%);
--invoice-gradient: linear-gradient(
45deg,
- var(--note-bg) 50%,
+ var(--gray-superdark) 50%,
rgba(161, 120, 255, 0.2),
rgba(255, 107, 175, 0.2) 108.33%
);
--paid-invoice-gradient: linear-gradient(
45deg,
- var(--note-bg) 50%,
+ var(--gray-superdark) 50%,
rgba(161, 120, 255, 0.6),
rgba(255, 107, 175, 0.6) 108.33%
);
- --expired-invoice-gradient: linear-gradient(45deg, var(--note-bg) 50%, var(--gray), var(--gray-superdark));
+ --expired-invoice-gradient: linear-gradient(45deg, var(--gray-superdark) 50%, var(--gray), var(--gray-superdark));
--strike-army-gradient: linear-gradient(to bottom right, #ccff00, #a1c900);
}
@@ -78,8 +77,6 @@ html.light {
--highlight: #7139f1;
--modal-bg-color: rgba(240, 240, 240, 0.8);
- --note-bg: white;
-
--gray: #aaa;
--gray-secondary: #bbb;
--gray-tertiary: #ccc;
@@ -89,8 +86,8 @@ html.light {
--gray-superdark: #eee;
--dm-gradient: var(--gray);
- --invoice-gradient: linear-gradient(45deg, var(--note-bg) 50%, #f7b73333, #fc4a1a33);
- --paid-invoice-gradient: linear-gradient(45deg, var(--note-bg) 50%, #f7b73399, #fc4a1a99);
+ --invoice-gradient: linear-gradient(45deg, var(--gray-superdark) 50%, #f7b73333, #fc4a1a33);
+ --paid-invoice-gradient: linear-gradient(45deg, var(--gray-superdark) 50%, #f7b73399, #fc4a1a99);
}
body {
@@ -705,7 +702,7 @@ button.tall {
}
.light .ctx-menu li {
- background: var(--note-bg) !important;
+ background: var(--gray-superdark) !important;
}
.ctx-menu li:first-of-type {
diff --git a/packages/system/src/note-collection.ts b/packages/system/src/note-collection.ts
index 859bae85..f27d0930 100644
--- a/packages/system/src/note-collection.ts
+++ b/packages/system/src/note-collection.ts
@@ -152,6 +152,9 @@ export class FlatNoteStore extends HookedNoteStore b.id === a.id);
if (existing) {
+ if(!Boolean(Object.getOwnPropertyDescriptor(existing, "relays")?.writable)) {
+ debugger;
+ }
existing.relays = appendDedupe(existing.relays, a.relays);
}
}
@@ -239,7 +242,7 @@ export class ReplaceableNoteStore extends HookedNoteStore