chore: use babel transformer for formatted message id
This commit is contained in:
parent
b642f13d36
commit
e6faf5d3ad
@ -4,12 +4,6 @@ module.exports = {
|
||||
parser: "@typescript-eslint/parser",
|
||||
plugins: ["@typescript-eslint", "formatjs", "react-refresh", "simple-import-sort"],
|
||||
rules: {
|
||||
"formatjs/enforce-id": [
|
||||
"error",
|
||||
{
|
||||
idInterpolationPattern: "[sha512:contenthash:base64:6]",
|
||||
},
|
||||
],
|
||||
"react/react-in-jsx-scope": "off",
|
||||
"react-hooks/exhaustive-deps": "off",
|
||||
"react-refresh/only-export-components": "error",
|
||||
|
11
packages/app/babel.config.json
Normal file
11
packages/app/babel.config.json
Normal file
@ -0,0 +1,11 @@
|
||||
{
|
||||
"plugins": [
|
||||
[
|
||||
"formatjs",
|
||||
{
|
||||
"idInterpolationPattern": "[sha512:contenthash:base64:6]",
|
||||
"ast": true
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
@ -104,6 +104,7 @@
|
||||
"@webscopeio/react-textarea-autocomplete": "^4.9.2",
|
||||
"@welldone-software/why-did-you-render": "^8.0.1",
|
||||
"autoprefixer": "^10.4.16",
|
||||
"babel-plugin-formatjs": "^10.5.14",
|
||||
"config": "^3.3.9",
|
||||
"eslint": "^8.48.0",
|
||||
"eslint-config-react-app": "^7.0.1",
|
||||
|
@ -19,7 +19,7 @@ export function LeaderBadge() {
|
||||
}}>
|
||||
<AwardIcon size={16} />
|
||||
<div className="text-xs font-medium text-[#AC88FF]">
|
||||
<FormattedMessage defaultMessage="Community Leader" id="7YkSA2" />
|
||||
<FormattedMessage defaultMessage="Community Leader" />
|
||||
</div>
|
||||
</div>
|
||||
{showModal && (
|
||||
@ -28,7 +28,7 @@ export function LeaderBadge() {
|
||||
<CloseButton className="absolute right-2 top-2" onClick={() => setShowModal(false)} />
|
||||
<AwardIcon size={80} />
|
||||
<div className="text-3xl font-semibold">
|
||||
<FormattedMessage defaultMessage="Community Leader" id="7YkSA2" />
|
||||
<FormattedMessage defaultMessage="Community Leader" />
|
||||
</div>
|
||||
<p className="text-secondary">
|
||||
<FormattedMessage
|
||||
@ -38,7 +38,7 @@ export function LeaderBadge() {
|
||||
</p>
|
||||
<Link to="/settings/invite">
|
||||
<button className="primary">
|
||||
<FormattedMessage defaultMessage="Become a leader" id="M6C/px" />
|
||||
<FormattedMessage defaultMessage="Become a leader" />
|
||||
</button>
|
||||
</Link>
|
||||
</div>
|
||||
|
@ -74,7 +74,7 @@ export default function CashuNuts({ token }: { token: string }) {
|
||||
<Icon name="copy" />
|
||||
</AsyncButton>
|
||||
<AsyncButton onClick={() => redeemToken(token)}>
|
||||
<FormattedMessage defaultMessage="Redeem" id="XrSk2j" description="Button: Redeem Cashu token" />
|
||||
<FormattedMessage defaultMessage="Redeem" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -77,7 +77,7 @@ export default function Invoice(props: InvoiceProps) {
|
||||
{description && <p>{description}</p>}
|
||||
{isPaid ? (
|
||||
<div className="paid">
|
||||
<FormattedMessage defaultMessage="Paid" id="u/vOPu" />
|
||||
<FormattedMessage defaultMessage="Paid" />
|
||||
</div>
|
||||
) : (
|
||||
<button disabled={isExpired} type="button" onClick={payInvoice}>
|
||||
|
@ -10,7 +10,7 @@ const MagnetLink = ({ magnet }: MagnetLinkProps) => {
|
||||
return (
|
||||
<div className="note-invoice">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Magnet Link" id="Gcn9NQ" />
|
||||
<FormattedMessage defaultMessage="Magnet Link" />
|
||||
</h4>
|
||||
<a href={magnet.raw} rel="noreferrer">
|
||||
{magnet.dn ?? magnet.infoHash}
|
||||
|
@ -32,7 +32,7 @@ export default function ZapstrEmbed({ ev }: { ev: NostrEvent }) {
|
||||
</div>
|
||||
<Link to={`https://zapstr.live/?track=${link}`} target="_blank">
|
||||
<button>
|
||||
<FormattedMessage defaultMessage="Open on Zapstr" id="Lu5/Bj" />
|
||||
<FormattedMessage defaultMessage="Open on Zapstr" />
|
||||
</button>
|
||||
</Link>
|
||||
</>
|
||||
|
@ -330,12 +330,12 @@ export function NoteCreator() {
|
||||
return (
|
||||
<>
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Poll Options" id="vhlWFg" />
|
||||
<FormattedMessage defaultMessage="Poll Options" />
|
||||
</h4>
|
||||
{note.pollOptions?.map((a, i) => (
|
||||
<div className="form-group w-max" key={`po-${i}`}>
|
||||
<div>
|
||||
<FormattedMessage defaultMessage="Option: {n}" id="mfe8RW" values={{ n: i + 1 }} />
|
||||
<FormattedMessage defaultMessage="Option: {n}" values={{ n: i + 1 }} />
|
||||
</div>
|
||||
<div>
|
||||
<input type="text" value={a} onChange={e => changePollOption(i, e.target.value)} />
|
||||
@ -422,24 +422,24 @@ export function NoteCreator() {
|
||||
<>
|
||||
<div>
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Custom Relays" id="EcZF24" />
|
||||
<FormattedMessage defaultMessage="Custom Relays" />
|
||||
</h4>
|
||||
<p>
|
||||
<FormattedMessage defaultMessage="Send note to a subset of your write relays" id="th5lxp" />
|
||||
<FormattedMessage defaultMessage="Send note to a subset of your write relays" />
|
||||
</p>
|
||||
{renderRelayCustomisation()}
|
||||
</div>
|
||||
<div className="flex flex-col g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Zap Splits" id="5CB6zB" />
|
||||
<FormattedMessage defaultMessage="Zap Splits" />
|
||||
</h4>
|
||||
<FormattedMessage defaultMessage="Zaps on this note will be split to the following users." id="LwYmVi" />
|
||||
<FormattedMessage defaultMessage="Zaps on this note will be split to the following users." />
|
||||
<div className="flex flex-col g8">
|
||||
{[...(note.zapSplits ?? [])].map((v: ZapTarget, i, arr) => (
|
||||
<div className="flex items-center g8" key={`${v.name}-${v.value}`}>
|
||||
<div className="flex flex-col flex-4 g4">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Recipient" id="8Rkoyb" />
|
||||
<FormattedMessage defaultMessage="Recipient" />
|
||||
</h4>
|
||||
<input
|
||||
type="text"
|
||||
@ -454,7 +454,7 @@ export function NoteCreator() {
|
||||
</div>
|
||||
<div className="flex flex-col flex-1 g4">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Weight" id="zCb8fX" />
|
||||
<FormattedMessage defaultMessage="Weight" />
|
||||
</h4>
|
||||
<input
|
||||
type="number"
|
||||
@ -484,7 +484,7 @@ export function NoteCreator() {
|
||||
onClick={() =>
|
||||
note.update(v => (v.zapSplits = [...(v.zapSplits ?? []), { type: "pubkey", value: "", weight: 1 }]))
|
||||
}>
|
||||
<FormattedMessage defaultMessage="Add" id="2/2yg+" />
|
||||
<FormattedMessage defaultMessage="Add" />
|
||||
</button>
|
||||
</div>
|
||||
<span className="warning">
|
||||
@ -496,7 +496,7 @@ export function NoteCreator() {
|
||||
</div>
|
||||
<div className="flex flex-col g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Sensitive Content" id="bQdA2k" />
|
||||
<FormattedMessage defaultMessage="Sensitive Content" />
|
||||
</h4>
|
||||
<FormattedMessage
|
||||
defaultMessage="Users must accept the content warning to show the content of your note."
|
||||
@ -515,7 +515,7 @@ export function NoteCreator() {
|
||||
})}
|
||||
/>
|
||||
<span className="warning">
|
||||
<FormattedMessage defaultMessage="Not all clients support this yet" id="gXgY3+" />
|
||||
<FormattedMessage defaultMessage="Not all clients support this yet" />
|
||||
</span>
|
||||
</div>
|
||||
</>
|
||||
@ -550,7 +550,7 @@ export function NoteCreator() {
|
||||
className={classNames("note-creator-icon", { active: note.advanced })}
|
||||
/>
|
||||
<span className="sm:inline hidden">
|
||||
<FormattedMessage defaultMessage="Preview" id="TJo5E6" />
|
||||
<FormattedMessage defaultMessage="Preview" />
|
||||
</span>
|
||||
<ToggleSwitch
|
||||
onClick={() => loadPreview()}
|
||||
@ -560,14 +560,10 @@ export function NoteCreator() {
|
||||
</div>
|
||||
<div className="flex g8">
|
||||
<button className="secondary" onClick={cancel}>
|
||||
<FormattedMessage defaultMessage="Cancel" id="47FYwb" />
|
||||
<FormattedMessage defaultMessage="Cancel" />
|
||||
</button>
|
||||
<AsyncButton onClick={onSubmit} className="primary">
|
||||
{note.replyTo ? (
|
||||
<FormattedMessage defaultMessage="Reply" id="9HU8vw" />
|
||||
) : (
|
||||
<FormattedMessage defaultMessage="Send" id="9WRlF4" />
|
||||
)}
|
||||
{note.replyTo ? <FormattedMessage defaultMessage="Reply" /> : <FormattedMessage defaultMessage="Send" />}
|
||||
</AsyncButton>
|
||||
</div>
|
||||
</div>
|
||||
@ -617,7 +613,7 @@ export function NoteCreator() {
|
||||
{note.replyTo && (
|
||||
<>
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Reply To" id="8ED/4u" />
|
||||
<FormattedMessage defaultMessage="Reply To" />
|
||||
</h4>
|
||||
<div className="max-h-64 overflow-y-auto">
|
||||
<Note className="hover:bg-transparent" data={note.replyTo} options={replyToNoteOptions} />
|
||||
@ -628,7 +624,7 @@ export function NoteCreator() {
|
||||
{note.quote && (
|
||||
<>
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Quote Repost" id="C7642/" />
|
||||
<FormattedMessage defaultMessage="Quote Repost" />
|
||||
</h4>
|
||||
<div className="max-h-64 overflow-y-auto">
|
||||
<Note className="hover:bg-transparent" data={note.quote} options={quoteNoteOptions} />
|
||||
|
@ -74,7 +74,7 @@ export const NoteCreatorButton = ({
|
||||
<Icon name="plus" size={16} />
|
||||
{showText && (
|
||||
<span className="ml-2 hidden xl:inline">
|
||||
<FormattedMessage defaultMessage="New Note" id="2mcwT8" />
|
||||
<FormattedMessage defaultMessage="New Note" />
|
||||
</span>
|
||||
)}
|
||||
</button>
|
||||
|
@ -13,10 +13,10 @@ const HiddenNote = ({ children }: { children: React.ReactNode }) => {
|
||||
) : (
|
||||
<div className="bb p flex items-center justify-between">
|
||||
<div className="text-sm text-secondary">
|
||||
<FormattedMessage defaultMessage="This note has been muted" id="qfmMQh" />
|
||||
<FormattedMessage defaultMessage="This note has been muted" />
|
||||
</div>
|
||||
<button className="btn btn-sm btn-neutral" onClick={() => setShow(true)}>
|
||||
<FormattedMessage defaultMessage="Show" id="K7AkdL" />
|
||||
<FormattedMessage defaultMessage="Show" />
|
||||
</button>
|
||||
</div>
|
||||
);
|
||||
|
@ -14,7 +14,7 @@ interface ShowMoreProps {
|
||||
const LoadMore = ({ text, onClick, className = "" }: ShowMoreProps) => {
|
||||
return (
|
||||
<button type="button" className={className} onClick={onClick}>
|
||||
{text || <FormattedMessage defaultMessage="Load more" id="00LcfG" />}
|
||||
{text || <FormattedMessage defaultMessage="Load more" />}
|
||||
</button>
|
||||
);
|
||||
};
|
||||
|
@ -97,11 +97,7 @@ export function LongFormText(props: LongFormTextProps) {
|
||||
e.stopPropagation();
|
||||
setShowMore(!showMore);
|
||||
}}>
|
||||
{showMore ? (
|
||||
<FormattedMessage defaultMessage="Show less" id="qyJtWy" />
|
||||
) : (
|
||||
<FormattedMessage defaultMessage="Show more" id="aWpBzj" />
|
||||
)}
|
||||
{showMore ? <FormattedMessage defaultMessage="Show less" /> : <FormattedMessage defaultMessage="Show more" />}
|
||||
</a>
|
||||
);
|
||||
|
||||
@ -126,12 +122,12 @@ export function LongFormText(props: LongFormTextProps) {
|
||||
<div>‧</div>
|
||||
{!reading && (
|
||||
<div className="pointer" onClick={() => readArticle()}>
|
||||
<FormattedMessage defaultMessage="Listen to this article" id="nihgfo" />
|
||||
<FormattedMessage defaultMessage="Listen to this article" />
|
||||
</div>
|
||||
)}
|
||||
{reading && (
|
||||
<div className="pointer" onClick={() => stopReading()}>
|
||||
<FormattedMessage defaultMessage="Stop listening" id="U1aPPi" />
|
||||
<FormattedMessage defaultMessage="Stop listening" />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
@ -26,10 +26,7 @@ export function NostrFileElement({ ev }: { ev: NostrEvent }) {
|
||||
|
||||
if (u && m) {
|
||||
return (
|
||||
<Reveal
|
||||
message={
|
||||
<FormattedMessage defaultMessage="Click to load content from {link}" id="lsNFM1" values={{ link: u }} />
|
||||
}>
|
||||
<Reveal message={<FormattedMessage defaultMessage="Click to load content from {link}" values={{ link: u }} />}>
|
||||
<MediaElement
|
||||
mime={m}
|
||||
url={u}
|
||||
@ -44,7 +41,7 @@ export function NostrFileElement({ ev }: { ev: NostrEvent }) {
|
||||
} else {
|
||||
return (
|
||||
<b className="error">
|
||||
<FormattedMessage defaultMessage="Unknown file header: {name}" id="PamNxw" values={{ name: ev.content }} />
|
||||
<FormattedMessage defaultMessage="Unknown file header: {name}" values={{ name: ev.content }} />
|
||||
</b>
|
||||
);
|
||||
}
|
||||
|
@ -160,7 +160,7 @@ function Reaction({ ev }: { ev: TaggedNostrEvent }) {
|
||||
<div className="text-gray-medium font-bold">
|
||||
<Username pubkey={ev.pubkey} onLinkVisit={() => {}} />
|
||||
<span> </span>
|
||||
<FormattedMessage defaultMessage="liked" id="TvKqBp" />
|
||||
<FormattedMessage defaultMessage="liked" />
|
||||
</div>
|
||||
<NoteQuote link={link} />
|
||||
</div>
|
||||
|
@ -148,7 +148,7 @@ export function NoteContextMenu({ ev, ...props }: NoteContextMenuProps) {
|
||||
)}
|
||||
<MenuItem onClick={handleReBroadcastButtonClick}>
|
||||
<Icon name="relay" />
|
||||
<FormattedMessage defaultMessage="Broadcast Event" id="Gxcr08" />
|
||||
<FormattedMessage defaultMessage="Broadcast Event" />
|
||||
</MenuItem>
|
||||
<MenuItem onClick={() => translate()}>
|
||||
<Icon name="translate" />
|
||||
|
@ -58,7 +58,7 @@ export const RepostButton = ({ ev, reposts }: { ev: TaggedNostrEvent; reposts: T
|
||||
</div>
|
||||
<MenuItem onClick={repost} disabled={hasReposted()}>
|
||||
<Icon name="repeat" />
|
||||
<FormattedMessage defaultMessage="Repost" id="JeoS4y" />
|
||||
<FormattedMessage defaultMessage="Repost" />
|
||||
</MenuItem>
|
||||
<MenuItem
|
||||
onClick={() =>
|
||||
@ -69,7 +69,7 @@ export const RepostButton = ({ ev, reposts }: { ev: TaggedNostrEvent; reposts: T
|
||||
})
|
||||
}>
|
||||
<Icon name="edit" />
|
||||
<FormattedMessage defaultMessage="Quote Repost" id="C7642/" />
|
||||
<FormattedMessage defaultMessage="Quote Repost" />
|
||||
</MenuItem>
|
||||
</Menu>
|
||||
);
|
||||
|
@ -27,11 +27,7 @@ export const NoteText = memo(function InnerContent(
|
||||
e.stopPropagation();
|
||||
setShowMore(!showMore);
|
||||
}}>
|
||||
{showMore ? (
|
||||
<FormattedMessage defaultMessage="Show less" id="qyJtWy" />
|
||||
) : (
|
||||
<FormattedMessage defaultMessage="Show more" id="aWpBzj" />
|
||||
)}
|
||||
{showMore ? <FormattedMessage defaultMessage="Show less" /> : <FormattedMessage defaultMessage="Show more" />}
|
||||
</a>
|
||||
);
|
||||
|
||||
@ -80,10 +76,10 @@ export const NoteText = memo(function InnerContent(
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
. <FormattedMessage defaultMessage="Click here to load anyway" id="IoQq+a" />.{" "}
|
||||
. <FormattedMessage defaultMessage="Click here to load anyway" />.{" "}
|
||||
<Link to="/settings/moderation">
|
||||
<i>
|
||||
<FormattedMessage defaultMessage="Settings" id="D3idYv" />
|
||||
<FormattedMessage defaultMessage="Settings" />
|
||||
</i>
|
||||
</Link>
|
||||
</>
|
||||
|
@ -16,7 +16,7 @@ const NoteTime: React.FC<NoteTimeProps> = ({ from, fallback }) => {
|
||||
const timeDifference = Math.floor((currentTime.getTime() - fromTime) / 1000);
|
||||
|
||||
if (timeDifference < secondsInAMinute) {
|
||||
return <FormattedMessage defaultMessage="now" id="kaaf1E" />;
|
||||
return <FormattedMessage defaultMessage="now" />;
|
||||
} else if (timeDifference < secondsInAnHour) {
|
||||
return `${Math.floor(timeDifference / secondsInAMinute)}m`;
|
||||
} else if (timeDifference < secondsInADay) {
|
||||
|
@ -135,9 +135,9 @@ export default function Poll(props: PollProps) {
|
||||
values={{
|
||||
type:
|
||||
tallyBy === "zaps" ? (
|
||||
<FormattedMessage defaultMessage="zap" id="5BVs2e" />
|
||||
<FormattedMessage defaultMessage="zap" />
|
||||
) : (
|
||||
<FormattedMessage defaultMessage="user" id="sUNhQE" />
|
||||
<FormattedMessage defaultMessage="user" />
|
||||
),
|
||||
}}
|
||||
/>
|
||||
|
@ -136,7 +136,7 @@ export function Thread(props: { onBack?: () => void; disableSpotlight?: boolean
|
||||
{!thread.root && renderCurrent()}
|
||||
{!thread.root && !thread.current && (
|
||||
<NoteGhost>
|
||||
<FormattedMessage defaultMessage="Looking up thread..." id="JA+tz3" />
|
||||
<FormattedMessage defaultMessage="Looking up thread..." />
|
||||
</NoteGhost>
|
||||
)}
|
||||
</div>
|
||||
|
@ -13,7 +13,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
|
||||
element: (
|
||||
<>
|
||||
<Icon name="user-v2" />
|
||||
<FormattedMessage defaultMessage="For you" id="xEjBS7" />
|
||||
<FormattedMessage defaultMessage="For you" />
|
||||
</>
|
||||
),
|
||||
},
|
||||
@ -24,7 +24,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
|
||||
element: (
|
||||
<>
|
||||
<Icon name="user-v2" />
|
||||
<FormattedMessage defaultMessage="Following" id="cPIKU2" />
|
||||
<FormattedMessage defaultMessage="Following" />
|
||||
</>
|
||||
),
|
||||
},
|
||||
@ -35,7 +35,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
|
||||
element: (
|
||||
<>
|
||||
<Icon name="fire" />
|
||||
<FormattedMessage defaultMessage="Trending Notes" id="Ix8l+B" />
|
||||
<FormattedMessage defaultMessage="Trending Notes" />
|
||||
</>
|
||||
),
|
||||
},
|
||||
@ -46,7 +46,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
|
||||
element: (
|
||||
<>
|
||||
<Icon name="message-chat-circle" />
|
||||
<FormattedMessage defaultMessage="Conversations" id="1udzha" />
|
||||
<FormattedMessage defaultMessage="Conversations" />
|
||||
</>
|
||||
),
|
||||
},
|
||||
@ -57,7 +57,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
|
||||
element: (
|
||||
<>
|
||||
<Icon name="user-v2" />
|
||||
<FormattedMessage defaultMessage="Followed by friends" id="voxBKC" />
|
||||
<FormattedMessage defaultMessage="Followed by friends" />
|
||||
</>
|
||||
),
|
||||
},
|
||||
@ -68,7 +68,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
|
||||
element: (
|
||||
<>
|
||||
<Icon name="thumbs-up" />
|
||||
<FormattedMessage defaultMessage="Suggested Follows" id="C8HhVE" />
|
||||
<FormattedMessage defaultMessage="Suggested Follows" />
|
||||
</>
|
||||
),
|
||||
},
|
||||
@ -79,7 +79,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
|
||||
element: (
|
||||
<>
|
||||
<Icon name="hash" />
|
||||
<FormattedMessage defaultMessage="Trending Hashtags" id="XXm7jJ" />
|
||||
<FormattedMessage defaultMessage="Trending Hashtags" />
|
||||
</>
|
||||
),
|
||||
},
|
||||
@ -90,7 +90,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
|
||||
element: (
|
||||
<>
|
||||
<Icon name="globe" />
|
||||
<FormattedMessage defaultMessage="Global" id="EWyQH5" />
|
||||
<FormattedMessage defaultMessage="Global" />
|
||||
</>
|
||||
),
|
||||
},
|
||||
@ -101,7 +101,7 @@ export function rootTabItems(base: string, pubKey: string | undefined, tags: Arr
|
||||
element: (
|
||||
<>
|
||||
<Icon name="hash" />
|
||||
<FormattedMessage defaultMessage="Topics" id="kc79d3" />
|
||||
<FormattedMessage defaultMessage="Topics" />
|
||||
</>
|
||||
),
|
||||
},
|
||||
|
@ -42,7 +42,7 @@ const InviteModal = () => {
|
||||
</p>
|
||||
<Link to="/login/sign-up">
|
||||
<button className="primary">
|
||||
<FormattedMessage defaultMessage="Sign Up" id="39AHJm" />
|
||||
<FormattedMessage defaultMessage="Sign Up" />
|
||||
</button>
|
||||
</Link>
|
||||
</div>
|
||||
|
@ -11,10 +11,10 @@ export default function AccountName({ name = "", link = true }: AccountNameProps
|
||||
return (
|
||||
<>
|
||||
<div>
|
||||
<FormattedMessage defaultMessage="Username" id="JCIgkj" />: <b>{name}</b>
|
||||
<FormattedMessage defaultMessage="Username" />: <b>{name}</b>
|
||||
</div>
|
||||
<div>
|
||||
<FormattedMessage defaultMessage="Short link" id="rx1i0i" />:{" "}
|
||||
<FormattedMessage defaultMessage="Short link" />:{" "}
|
||||
{link ? (
|
||||
<a
|
||||
href={`https://iris.to/${name}`}
|
||||
@ -29,7 +29,7 @@ export default function AccountName({ name = "", link = true }: AccountNameProps
|
||||
)}
|
||||
</div>
|
||||
<div>
|
||||
<FormattedMessage defaultMessage="Nostr address (nip05)" id="BjNwZW" />: <b>{name}@iris.to</b>
|
||||
<FormattedMessage defaultMessage="Nostr address (nip05)" />: <b>{name}@iris.to</b>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
|
@ -67,12 +67,12 @@ export default function ActiveAccount({ name = "", setAsPrimary = () => {} }: Ac
|
||||
return (
|
||||
<div>
|
||||
<div className="negative">
|
||||
<FormattedMessage defaultMessage="You have an active iris.to account" id="UrKTqQ" />:
|
||||
<FormattedMessage defaultMessage="You have an active iris.to account" />:
|
||||
<AccountName name={name} />
|
||||
</div>
|
||||
<p>
|
||||
<button type="button" onClick={onClick}>
|
||||
<FormattedMessage defaultMessage="Set as primary Nostr address (nip05)" id="MiMipu" />
|
||||
<FormattedMessage defaultMessage="Set as primary Nostr address (nip05)" />
|
||||
</button>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -72,7 +72,7 @@ class IrisAccount extends Component<Props> {
|
||||
view = (
|
||||
<div>
|
||||
<p>
|
||||
<FormattedMessage defaultMessage="Register an Iris username" id="kEZUR8" /> (iris.to/username)
|
||||
<FormattedMessage defaultMessage="Register an Iris username" /> (iris.to/username)
|
||||
</p>
|
||||
<form onSubmit={e => this.showChallenge(e)}>
|
||||
<div className="flex g8">
|
||||
@ -84,14 +84,14 @@ class IrisAccount extends Component<Props> {
|
||||
onInput={e => this.onNewUserNameChange(e)}
|
||||
/>
|
||||
<button type="submit">
|
||||
<FormattedMessage defaultMessage="Register" id="deEeEI" />
|
||||
<FormattedMessage defaultMessage="Register" />
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
{this.state.newUserNameValid ? (
|
||||
<>
|
||||
<span className="success">
|
||||
<FormattedMessage defaultMessage="Username is available" id="EcfIwB" />
|
||||
<FormattedMessage defaultMessage="Username is available" />
|
||||
</span>
|
||||
<AccountName name={this.state.newUserName} link={false} />
|
||||
</>
|
||||
@ -107,7 +107,7 @@ class IrisAccount extends Component<Props> {
|
||||
return (
|
||||
<>
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Iris.to account" id="Mzizei" />
|
||||
<FormattedMessage defaultMessage="Iris.to account" />
|
||||
</h3>
|
||||
{view}
|
||||
<p>
|
||||
|
@ -25,12 +25,12 @@ export default function ReservedAccount({
|
||||
<AccountName name={name} link={false} />
|
||||
<p>
|
||||
<button className="btn btn-sm btn-primary" onClick={() => enableReserved()}>
|
||||
<FormattedMessage defaultMessage="Yes please" id="VcwrfF" />
|
||||
<FormattedMessage defaultMessage="Yes please" />
|
||||
</button>
|
||||
</p>
|
||||
<p>
|
||||
<button className="btn btn-sm btn-neutral" onClick={() => declineReserved()}>
|
||||
<FormattedMessage defaultMessage="No thanks" id="c+JYNI" />
|
||||
<FormattedMessage defaultMessage="No thanks" />
|
||||
</button>
|
||||
</p>
|
||||
</div>
|
||||
|
@ -22,7 +22,7 @@ export function LiveEvent({ ev }: { ev: NostrEvent }) {
|
||||
<div className="flex g4 items-center">
|
||||
<Icon name="signal-01" />
|
||||
<b className="uppercase">
|
||||
<FormattedMessage defaultMessage="Live" id="Dn82AL" />
|
||||
<FormattedMessage defaultMessage="Live" />
|
||||
</b>
|
||||
</div>
|
||||
);
|
||||
@ -30,7 +30,7 @@ export function LiveEvent({ ev }: { ev: NostrEvent }) {
|
||||
case "ended": {
|
||||
return (
|
||||
<b className="uppercase">
|
||||
<FormattedMessage defaultMessage="Ended" id="TP/cMX" />
|
||||
<FormattedMessage defaultMessage="Ended" />
|
||||
</b>
|
||||
);
|
||||
}
|
||||
@ -52,7 +52,7 @@ export function LiveEvent({ ev }: { ev: NostrEvent }) {
|
||||
case "live": {
|
||||
return (
|
||||
<button className="nowrap" onClick={() => setPlay(true)}>
|
||||
<FormattedMessage defaultMessage="Watch Stream" id="furjvW" />
|
||||
<FormattedMessage defaultMessage="Watch Stream" />
|
||||
</button>
|
||||
);
|
||||
}
|
||||
@ -61,7 +61,7 @@ export function LiveEvent({ ev }: { ev: NostrEvent }) {
|
||||
return (
|
||||
<Link to={link} target="_blank">
|
||||
<button className="nowrap">
|
||||
<FormattedMessage defaultMessage="Watch Replay" id="6/hB3S" />
|
||||
<FormattedMessage defaultMessage="Watch Replay" />
|
||||
</button>
|
||||
</Link>
|
||||
);
|
||||
|
@ -283,7 +283,7 @@ export default function Nip5Service(props: Nip05ServiceProps) {
|
||||
: startBuy(handle, domain)
|
||||
}>
|
||||
{props.forSubscription ? (
|
||||
<FormattedMessage defaultMessage="Claim Now" id="FdhSU2" />
|
||||
<FormattedMessage defaultMessage="Claim Now" />
|
||||
) : (
|
||||
<FormattedMessage {...messages.BuyNow} />
|
||||
)}
|
||||
|
@ -10,11 +10,11 @@ export function Offline({ onRetry, className }: { onRetry?: () => void | Promise
|
||||
<div className={classNames("flex items-center g8", className)}>
|
||||
<Icon name="wifi-off" className="error" />
|
||||
<div className="error">
|
||||
<FormattedMessage defaultMessage="Offline" id="7UOvbT" />
|
||||
<FormattedMessage defaultMessage="Offline" />
|
||||
</div>
|
||||
{onRetry && (
|
||||
<AsyncButton onClick={onRetry}>
|
||||
<FormattedMessage defaultMessage="Retry" id="62nsdy" />
|
||||
<FormattedMessage defaultMessage="Retry" />
|
||||
</AsyncButton>
|
||||
)}
|
||||
</div>
|
||||
|
@ -70,7 +70,7 @@ export function PinPrompt({
|
||||
}}>
|
||||
<div className="flex flex-col g12">
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="Enter Pin" id="KtsyO0" />
|
||||
<FormattedMessage defaultMessage="Enter Pin" />
|
||||
</h2>
|
||||
{subTitle ? <div>{subTitle}</div> : null}
|
||||
<input
|
||||
@ -84,10 +84,10 @@ export function PinPrompt({
|
||||
{error && <b className="error">{error}</b>}
|
||||
<div className="flex g8">
|
||||
<button type="button" onClick={() => onCancel()}>
|
||||
<FormattedMessage defaultMessage="Cancel" id="47FYwb" />
|
||||
<FormattedMessage defaultMessage="Cancel" />
|
||||
</button>
|
||||
<AsyncButton ref={submitButtonRef} onClick={() => submitPin()} type="submit">
|
||||
<FormattedMessage defaultMessage="Submit" id="wSZR47" />
|
||||
<FormattedMessage defaultMessage="Submit" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
</div>
|
||||
@ -168,7 +168,7 @@ export function LoginUnlock() {
|
||||
<PinPrompt
|
||||
subTitle={
|
||||
<p>
|
||||
<FormattedMessage defaultMessage="Enter pin to unlock your private key" id="e7VmYP" />
|
||||
<FormattedMessage defaultMessage="Enter pin to unlock your private key" />
|
||||
</p>
|
||||
}
|
||||
onResult={unlockSession}
|
||||
|
@ -139,7 +139,7 @@ export default function SearchBox() {
|
||||
}`}
|
||||
onMouseEnter={() => setActiveIndex(0)}
|
||||
onClick={() => navigate(`/search/${encodeURIComponent(search)}`, { state: { forceRefresh: true } })}>
|
||||
<FormattedMessage defaultMessage="Search notes" id="EJbFi7" />: <b>{search}</b>
|
||||
<FormattedMessage defaultMessage="Search notes" />: <b>{search}</b>
|
||||
</div>
|
||||
{results?.slice(0, MAX_RESULTS).map((result, idx) => (
|
||||
<div
|
||||
|
@ -54,7 +54,7 @@ export default function SuggestedProfiles() {
|
||||
return (
|
||||
<>
|
||||
<div className="flex items-center justify-between bg-superdark p br">
|
||||
<FormattedMessage defaultMessage="Provider" id="xaj9Ba" />
|
||||
<FormattedMessage defaultMessage="Provider" />
|
||||
<select onChange={e => setProvider(Number(e.target.value))}>
|
||||
<option value={Provider.NostrBand}>nostr.band</option>
|
||||
{/*<option value={Provider.SemisolDev}>semisol.dev</option>*/}
|
||||
|
@ -25,7 +25,7 @@ export class BackupKeyTask extends BaseUITask {
|
||||
</div>
|
||||
<div className="flex flex-col g8">
|
||||
<div className="font-semibold text-xl">
|
||||
<FormattedMessage defaultMessage="Be sure to back up your keys!" id="1UWegE" />
|
||||
<FormattedMessage defaultMessage="Be sure to back up your keys!" />
|
||||
</div>
|
||||
<small>
|
||||
<FormattedMessage
|
||||
@ -39,11 +39,11 @@ export class BackupKeyTask extends BaseUITask {
|
||||
<div className="flex g8">
|
||||
<Link to="/settings/keys">
|
||||
<button>
|
||||
<FormattedMessage defaultMessage="Back up now" id="rMgF34" />
|
||||
<FormattedMessage defaultMessage="Back up now" />
|
||||
</button>
|
||||
</Link>
|
||||
<button className="secondary" onClick={() => this.mute()}>
|
||||
<FormattedMessage defaultMessage="Already backed up" id="j9xbzF" />
|
||||
<FormattedMessage defaultMessage="Already backed up" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -22,7 +22,7 @@ export class DonateTask extends BaseUITask {
|
||||
</p>
|
||||
<Link to="/donate">
|
||||
<button>
|
||||
<FormattedMessage defaultMessage="Donate" id="2IFGap" />
|
||||
<FormattedMessage defaultMessage="Donate" />
|
||||
</button>
|
||||
</Link>
|
||||
</>
|
||||
|
@ -20,7 +20,7 @@ export class Nip5Task extends BaseUITask {
|
||||
values={{
|
||||
link: (
|
||||
<Link to="/nostr-address">
|
||||
<FormattedMessage defaultMessage="Buy nostr address" id="MuVeKe" />
|
||||
<FormattedMessage defaultMessage="Buy nostr address" />
|
||||
</Link>
|
||||
),
|
||||
}}
|
||||
|
@ -29,7 +29,7 @@ export class NoticeZapPoolDefault extends BaseUITask {
|
||||
),
|
||||
link: (
|
||||
<Link to="/zap-pool">
|
||||
<FormattedMessage defaultMessage="Zap Pool" id="i/dBAR" />
|
||||
<FormattedMessage defaultMessage="Zap Pool" />
|
||||
</Link>
|
||||
),
|
||||
}}
|
||||
|
@ -27,7 +27,7 @@ export class RenewSubTask extends BaseUITask {
|
||||
/>
|
||||
</p>
|
||||
<Link to="/subscribe/manage">
|
||||
<FormattedMessage defaultMessage="Renew" id="nWQFic" />
|
||||
<FormattedMessage defaultMessage="Renew" />
|
||||
</Link>
|
||||
</>
|
||||
);
|
||||
|
@ -39,7 +39,7 @@ export default function BadgeList({ badges }: { badges: TaggedNostrEvent[] }) {
|
||||
<CloseButton className="absolute right-2 top-2" onClick={() => setShowModal(false)} />
|
||||
<div className="reactions-header">
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="Badges" id="h8XMJL" />
|
||||
<FormattedMessage defaultMessage="Badges" />
|
||||
</h2>
|
||||
</div>
|
||||
<div className="body">
|
||||
|
@ -39,7 +39,7 @@ export default function FollowedBy({ pubkey }: { pubkey: HexKey }) {
|
||||
{totalFollowedByFriends > 0 && (
|
||||
<div className="text-gray-light">
|
||||
<span className="mr-1">
|
||||
<FormattedMessage defaultMessage="Followed by" id="6mr8WU" />
|
||||
<FormattedMessage defaultMessage="Followed by" />
|
||||
</span>
|
||||
{renderFollowedByFriendsLinks()}
|
||||
{totalFollowedByFriends > MAX_FOLLOWED_BY_FRIENDS && (
|
||||
@ -55,12 +55,12 @@ export default function FollowedBy({ pubkey }: { pubkey: HexKey }) {
|
||||
)}
|
||||
{followDistance > 3 && (
|
||||
<div className="text-gray-light">
|
||||
<FormattedMessage defaultMessage="Not followed by anyone you follow" id="IgsWFG" />
|
||||
<FormattedMessage defaultMessage="Not followed by anyone you follow" />
|
||||
</div>
|
||||
)}
|
||||
{followDistance === 3 && ( // TODO "followed by friends of {n} friends"
|
||||
<div className="text-gray-light">
|
||||
<FormattedMessage defaultMessage="Followed by friends of friends" id="2oCF7O" />
|
||||
<FormattedMessage defaultMessage="Followed by friends of friends" />
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
@ -13,7 +13,7 @@ export function FollowingMark({ pubkey }: { pubkey: string }) {
|
||||
return (
|
||||
<span className="following flex g4">
|
||||
<Icon name="check" className="success" size={12} />
|
||||
<FormattedMessage defaultMessage="following" id="+tShPg" />
|
||||
<FormattedMessage defaultMessage="following" />
|
||||
</span>
|
||||
);
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ export function SuccessAction({ success }: { success: LNURLSuccessAction }) {
|
||||
<div className="flex items-center">
|
||||
<p className="flex g12">
|
||||
<Icon name="check" className="success" />
|
||||
{success?.description ?? <FormattedMessage defaultMessage="Paid" id="u/vOPu" />}
|
||||
{success?.description ?? <FormattedMessage defaultMessage="Paid" />}
|
||||
</p>
|
||||
{success.url && (
|
||||
<p>
|
||||
|
@ -104,7 +104,7 @@ export function ZapModalInput(props: {
|
||||
<div className="flex flex-col g24">
|
||||
<div className="flex flex-col g8">
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Zap amount in sats" id="zcaOTs" />
|
||||
<FormattedMessage defaultMessage="Zap amount in sats" />
|
||||
</h3>
|
||||
{renderAmounts()}
|
||||
{custom()}
|
||||
@ -122,7 +122,7 @@ export function ZapModalInput(props: {
|
||||
{(amount ?? 0) > 0 && (
|
||||
<AsyncButton onClick={() => props.onNextStage(getValue())}>
|
||||
<Icon name="zap" />
|
||||
<FormattedMessage defaultMessage="Zap {n} sats" id="8QDesP" values={{ n: formatShort(amount) }} />
|
||||
<FormattedMessage defaultMessage="Zap {n} sats" values={{ n: formatShort(amount) }} />
|
||||
</AsyncButton>
|
||||
)}
|
||||
</div>
|
||||
|
@ -22,7 +22,7 @@ export function ZapModalInvoice(props: {
|
||||
<Copy text={v.pr} maxSize={26} className="items-center" />
|
||||
<a href={`lightning:${v.pr}`}>
|
||||
<button type="button">
|
||||
<FormattedMessage defaultMessage="Open Wallet" id="HbefNb" />
|
||||
<FormattedMessage defaultMessage="Open Wallet" />
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
|
@ -20,9 +20,9 @@ export function ZapModalTitle({
|
||||
<>
|
||||
<h2>
|
||||
{zapper?.canZap() ? (
|
||||
<FormattedMessage defaultMessage="Send zap" id="5ykRmX" />
|
||||
<FormattedMessage defaultMessage="Send zap" />
|
||||
) : (
|
||||
<FormattedMessage defaultMessage="Send sats" id="DKnriN" />
|
||||
<FormattedMessage defaultMessage="Send sats" />
|
||||
)}
|
||||
</h2>
|
||||
</>
|
||||
@ -38,9 +38,9 @@ export function ZapModalTitle({
|
||||
{t.zap?.pubkey && <ProfileImage pubkey={t.zap.pubkey} showUsername={false} />}
|
||||
<h2>
|
||||
{zapper?.canZap() ? (
|
||||
<FormattedMessage defaultMessage="Send zap to {name}" id="SMO+on" values={values} />
|
||||
<FormattedMessage defaultMessage="Send zap to {name}" values={values} />
|
||||
) : (
|
||||
<FormattedMessage defaultMessage="Send sats to {name}" id="JGrt9q" values={values} />
|
||||
<FormattedMessage defaultMessage="Send sats to {name}" values={values} />
|
||||
)}
|
||||
</h2>
|
||||
</>
|
||||
@ -53,9 +53,9 @@ export function ZapModalTitle({
|
||||
<div className="flex flex-col g12">
|
||||
<h2>
|
||||
{zapper?.canZap() ? (
|
||||
<FormattedMessage defaultMessage="Send zap splits to" id="ZS+jRE" />
|
||||
<FormattedMessage defaultMessage="Send zap splits to" />
|
||||
) : (
|
||||
<FormattedMessage defaultMessage="Send sats splits to" id="uc0din" />
|
||||
<FormattedMessage defaultMessage="Send sats splits to" />
|
||||
)}
|
||||
</h2>
|
||||
<div className="flex g4 f-wrap">
|
||||
|
@ -14,17 +14,13 @@ export function ZapTypeSelector({ zapType, setZapType }: { zapType: ZapType; set
|
||||
return (
|
||||
<div className="flex flex-col g8">
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Zap Type" id="+aZY2h" />
|
||||
<FormattedMessage defaultMessage="Zap Type" />
|
||||
</h3>
|
||||
<div className="flex g8">
|
||||
{!readonly &&
|
||||
makeTab(ZapType.PublicZap, <FormattedMessage defaultMessage="Public" id="/PCavi" description="Public Zap" />)}
|
||||
{!readonly && makeTab(ZapType.PublicZap, <FormattedMessage defaultMessage="Public" />)}
|
||||
{/*makeTab(ZapType.PrivateZap, "Private")*/}
|
||||
{makeTab(ZapType.AnonZap, <FormattedMessage defaultMessage="Anon" id="wWLwvh" description="Anonymous Zap" />)}
|
||||
{makeTab(
|
||||
ZapType.NonZap,
|
||||
<FormattedMessage defaultMessage="Non-Zap" id="AnLrRC" description="Non-Zap, Regular LN payment" />,
|
||||
)}
|
||||
{makeTab(ZapType.AnonZap, <FormattedMessage defaultMessage="Anon" />)}
|
||||
{makeTab(ZapType.NonZap, <FormattedMessage defaultMessage="Non-Zap" />)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
@ -20,7 +20,7 @@ export function AboutPage() {
|
||||
return (
|
||||
<div className="main-content p">
|
||||
<h1>
|
||||
<FormattedMessage defaultMessage="About" id="g5pX+a" />
|
||||
<FormattedMessage defaultMessage="About" />
|
||||
</h1>
|
||||
Version: <b>{__SNORT_VERSION__}</b>
|
||||
<Markdown content={changelog} tags={[]} />
|
||||
|
@ -16,7 +16,7 @@ export function NotesCol() {
|
||||
<div className="deck-col-header flex">
|
||||
<div className="flex flex-1 g8">
|
||||
<Icon name="rows-01" size={24} />
|
||||
<FormattedMessage defaultMessage="Notes" id="7+Domh" />
|
||||
<FormattedMessage defaultMessage="Notes" />
|
||||
</div>
|
||||
<div className="flex-1">
|
||||
<RootTabs base="/deck" />
|
||||
@ -34,7 +34,7 @@ export function ArticlesCol() {
|
||||
<div>
|
||||
<div className="deck-col-header flex g8">
|
||||
<Icon name="file-06" size={24} />
|
||||
<FormattedMessage defaultMessage="Articles" id="3KNMbJ" />
|
||||
<FormattedMessage defaultMessage="Articles" />
|
||||
</div>
|
||||
<div>
|
||||
<Articles />
|
||||
@ -55,7 +55,7 @@ export function MediaCol({ setThread }: { setThread: (e: NostrLink) => void }) {
|
||||
<div>
|
||||
<div className="flex items-center gap-2 p-2 border-b border-border-color">
|
||||
<Icon name="camera-lens" size={24} />
|
||||
<FormattedMessage defaultMessage="Media" id="hmZ3Bz" />
|
||||
<FormattedMessage defaultMessage="Media" />
|
||||
</div>
|
||||
<TimelineFollows
|
||||
postsOnly={true}
|
||||
@ -78,7 +78,7 @@ export function NotificationsCol({ setThread }: { setThread: (e: NostrLink) => v
|
||||
<div>
|
||||
<div className="deck-col-header flex g8">
|
||||
<Icon name="bell-solid" size={24} />
|
||||
<FormattedMessage defaultMessage="Notifications" id="NAidKb" />
|
||||
<FormattedMessage defaultMessage="Notifications" />
|
||||
</div>
|
||||
<div>
|
||||
<NotificationsPage onClick={setThread} />
|
||||
|
@ -87,7 +87,7 @@ export function SnortDeckLayout() {
|
||||
<div>
|
||||
<Link to="/subscribe">
|
||||
<button>
|
||||
<FormattedMessage defaultMessage="Subscribe" id="gczcC5" />
|
||||
<FormattedMessage defaultMessage="Subscribe" />
|
||||
</button>
|
||||
</Link>
|
||||
</div>
|
||||
|
@ -80,7 +80,7 @@ const DonatePage = () => {
|
||||
values={{
|
||||
here: (
|
||||
<Link to="/about" className="highlight underline">
|
||||
<FormattedMessage defaultMessage="here" id="hniz8Z" />
|
||||
<FormattedMessage defaultMessage="here" />
|
||||
</Link>
|
||||
),
|
||||
}}
|
||||
@ -89,7 +89,7 @@ const DonatePage = () => {
|
||||
{CONFIG.chatChannels && (
|
||||
<>
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Public Chat Channels" id="rn52n9" />
|
||||
<FormattedMessage defaultMessage="Public Chat Channels" />
|
||||
</h4>
|
||||
<div className="flex gap-2">
|
||||
{CONFIG.chatChannels.map(a => {
|
||||
@ -101,7 +101,7 @@ const DonatePage = () => {
|
||||
window.open(a.value, "_blank", "noreferrer");
|
||||
}}>
|
||||
<img src={Telegram} width={24} height={24} />
|
||||
<FormattedMessage defaultMessage="Telegram" id="TH1fFo" />
|
||||
<FormattedMessage defaultMessage="Telegram" />
|
||||
</AsyncButton>
|
||||
);
|
||||
}
|
||||
@ -113,7 +113,7 @@ const DonatePage = () => {
|
||||
navigate(`/messages/${id}`);
|
||||
}}>
|
||||
<img src={CONFIG.icon} width={24} height={24} className="rounded-full" />
|
||||
<FormattedMessage defaultMessage="Nostr Public Chat" id="whSrs+" />
|
||||
<FormattedMessage defaultMessage="Nostr Public Chat" />
|
||||
</AsyncButton>
|
||||
);
|
||||
}
|
||||
@ -123,14 +123,14 @@ const DonatePage = () => {
|
||||
</>
|
||||
)}
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Donate" id="2IFGap" />
|
||||
<FormattedMessage defaultMessage="Donate" />
|
||||
</h3>
|
||||
<div className="flex flex-col g12">
|
||||
<div className="b br p">
|
||||
<div className="flex items-center justify-between">
|
||||
<FormattedMessage defaultMessage="Lightning Donation" id="C1LjMx" />
|
||||
<FormattedMessage defaultMessage="Lightning Donation" />
|
||||
<ZapButton pubkey={bech32ToHex(SnortPubKey)} lnurl={DonateLNURL}>
|
||||
<FormattedMessage defaultMessage="Donate" id="2IFGap" />
|
||||
<FormattedMessage defaultMessage="Donate" />
|
||||
</ZapButton>
|
||||
</div>
|
||||
{today && (
|
||||
@ -145,9 +145,9 @@ const DonatePage = () => {
|
||||
</div>
|
||||
<div className="b br p">
|
||||
<div className="flex items-center justify-between">
|
||||
<FormattedMessage defaultMessage="On-chain Donation" id="fqwcJ1" />
|
||||
<FormattedMessage defaultMessage="On-chain Donation" />
|
||||
<AsyncButton type="button" onClick={getOnChainAddress}>
|
||||
<FormattedMessage defaultMessage="Get Address" id="bLZL5a" />
|
||||
<FormattedMessage defaultMessage="Get Address" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
</div>
|
||||
@ -156,7 +156,7 @@ const DonatePage = () => {
|
||||
<Modal onClose={() => setOnChain("")} id="donate-on-chain">
|
||||
<div className="flex flex-col items-center g12">
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="On-chain Donation Address" id="EjFyoR" />
|
||||
<FormattedMessage defaultMessage="On-chain Donation Address" />
|
||||
</h2>
|
||||
<QrCode data={onChain} link={`bitcoin:${onChain}`} />
|
||||
<Copy text={onChain} />
|
||||
@ -165,19 +165,19 @@ const DonatePage = () => {
|
||||
)}
|
||||
<ZapPoolDonateSection />
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Primary Developers" id="4IPzdn" />
|
||||
<FormattedMessage defaultMessage="Primary Developers" />
|
||||
</h3>
|
||||
{DeveloperAccounts.map(a => (
|
||||
<ProfilePreview pubkey={a} key={a} actions={actions(a)} />
|
||||
))}
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Contributors" id="ZLmyG9" />
|
||||
<FormattedMessage defaultMessage="Contributors" />
|
||||
</h4>
|
||||
{Contributors.map(a => (
|
||||
<ProfilePreview pubkey={a} key={a} actions={actions(a)} />
|
||||
))}
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Translators" id="3gOsZq" />
|
||||
<FormattedMessage defaultMessage="Translators" />
|
||||
</h4>
|
||||
{Translators.map(a => (
|
||||
<ProfilePreview pubkey={a} key={a} actions={actions(a)} />
|
||||
|
@ -19,7 +19,7 @@ export function ZapPoolDonateSection() {
|
||||
return (
|
||||
<>
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="ZapPool" id="pRess9" />
|
||||
<FormattedMessage defaultMessage="ZapPool" />
|
||||
</h3>
|
||||
<p>
|
||||
<FormattedMessage
|
||||
@ -29,7 +29,7 @@ export function ZapPoolDonateSection() {
|
||||
</p>
|
||||
<p>
|
||||
<Link to="/zap-pool" className="underline">
|
||||
<FormattedMessage defaultMessage="Configure zap pool" id="kqPQJD" />
|
||||
<FormattedMessage defaultMessage="Configure zap pool" />
|
||||
</Link>
|
||||
</p>
|
||||
<ZapPoolTarget
|
||||
|
@ -44,10 +44,10 @@ const ErrorPage = () => {
|
||||
return (
|
||||
<div className="p-2">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="An error has occured!" id="FfYsOb" />
|
||||
<FormattedMessage defaultMessage="An error has occured!" />
|
||||
</h4>
|
||||
<AsyncButton onClick={handleClearData}>
|
||||
<FormattedMessage defaultMessage="Clear cache and reload" id="HWbkEK" />
|
||||
<FormattedMessage defaultMessage="Clear cache and reload" />
|
||||
</AsyncButton>
|
||||
<h5>{error.message}</h5>
|
||||
<div className="my-2">{error.message}</div>
|
||||
|
@ -8,7 +8,7 @@ export default function FreeNostrAddressPage() {
|
||||
return (
|
||||
<div className="main-content p">
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="Get a free nostr address" id="OQSOJF" />
|
||||
<FormattedMessage defaultMessage="Get a free nostr address" />
|
||||
</h2>
|
||||
<p>
|
||||
<FormattedMessage {...messages.Nip05} />
|
||||
|
@ -75,11 +75,11 @@ export function HashTagHeader({ tag, events, className }: { tag: string; events?
|
||||
<AsyncButton
|
||||
className="secondary"
|
||||
onClick={() => state.removeFromList(EventKind.InterestsList, new NostrHashtagLink(tag), true)}>
|
||||
<FormattedMessage defaultMessage="Unfollow" id="izWS4J" />
|
||||
<FormattedMessage defaultMessage="Unfollow" />
|
||||
</AsyncButton>
|
||||
) : (
|
||||
<AsyncButton onClick={() => state.addToList(EventKind.InterestsList, new NostrHashtagLink(tag), true)}>
|
||||
<FormattedMessage defaultMessage="Follow" id="ieGrWo" />
|
||||
<FormattedMessage defaultMessage="Follow" />
|
||||
</AsyncButton>
|
||||
)}
|
||||
</div>
|
||||
|
@ -9,7 +9,7 @@ export default function HelpPage() {
|
||||
return (
|
||||
<>
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="NIP-05" id="7hp70g" />
|
||||
<FormattedMessage defaultMessage="NIP-05" />
|
||||
</h2>
|
||||
<p>
|
||||
<FormattedMessage
|
||||
|
@ -60,7 +60,7 @@ export function Header() {
|
||||
const searchTerm = decodeURIComponent(location.pathname.split("/search/")[1]);
|
||||
title = (
|
||||
<>
|
||||
<FormattedMessage defaultMessage="Search" id="xmcVZ0" />: {searchTerm}
|
||||
<FormattedMessage defaultMessage="Search" />: {searchTerm}
|
||||
</>
|
||||
);
|
||||
} else if (nostrLink) {
|
||||
@ -116,12 +116,12 @@ function NoteTitle({ link }: { link: NostrLink }) {
|
||||
}, [ev?.pubkey]);
|
||||
|
||||
if (!ev?.pubkey) {
|
||||
return <FormattedMessage defaultMessage="Note" id="qMePPG" />;
|
||||
return <FormattedMessage defaultMessage="Note" />;
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
<FormattedMessage defaultMessage="Note by {name}" id="ALdW69" values={values} />
|
||||
<FormattedMessage defaultMessage="Note by {name}" values={values} />
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
@ -18,46 +18,46 @@ import { LogoHeader } from "./LogoHeader";
|
||||
|
||||
const MENU_ITEMS = [
|
||||
{
|
||||
label: <FormattedMessage defaultMessage="Home" id="ejEGdx" />,
|
||||
label: <FormattedMessage defaultMessage="Home" />,
|
||||
icon: "home",
|
||||
link: "/",
|
||||
nonLoggedIn: true,
|
||||
},
|
||||
{
|
||||
label: <FormattedMessage defaultMessage="Search" id="xmcVZ0" />,
|
||||
label: <FormattedMessage defaultMessage="Search" />,
|
||||
icon: "search",
|
||||
link: "/search",
|
||||
nonLoggedIn: true,
|
||||
},
|
||||
{
|
||||
label: <FormattedMessage defaultMessage="Notifications" id="NAidKb" />,
|
||||
label: <FormattedMessage defaultMessage="Notifications" />,
|
||||
icon: "bell",
|
||||
link: "/notifications",
|
||||
},
|
||||
{
|
||||
label: <FormattedMessage defaultMessage="Messages" id="hMzcSq" />,
|
||||
label: <FormattedMessage defaultMessage="Messages" />,
|
||||
icon: "mail",
|
||||
link: "/messages",
|
||||
hideReadOnly: true,
|
||||
},
|
||||
{
|
||||
label: <FormattedMessage defaultMessage="Deck" id="o/gK53" />,
|
||||
label: <FormattedMessage defaultMessage="Deck" />,
|
||||
icon: "deck",
|
||||
link: "/deck",
|
||||
},
|
||||
{
|
||||
label: <FormattedMessage defaultMessage="Social Graph" id="CzHZoc" />,
|
||||
label: <FormattedMessage defaultMessage="Social Graph" />,
|
||||
icon: "graph",
|
||||
link: "/graph",
|
||||
},
|
||||
{
|
||||
label: <FormattedMessage defaultMessage="About" id="g5pX+a" />,
|
||||
label: <FormattedMessage defaultMessage="About" />,
|
||||
icon: "info",
|
||||
link: "/donate",
|
||||
nonLoggedIn: true,
|
||||
},
|
||||
{
|
||||
label: <FormattedMessage defaultMessage="Settings" id="D3idYv" />,
|
||||
label: <FormattedMessage defaultMessage="Settings" />,
|
||||
icon: "settings",
|
||||
link: "/settings",
|
||||
},
|
||||
@ -145,7 +145,7 @@ export default function NavSidebar({ narrow = false }: { narrow?: boolean }) {
|
||||
<Icon name="sign-in" size={24} />
|
||||
{!narrow && (
|
||||
<span className="hidden xl:inline ml-3">
|
||||
<FormattedMessage defaultMessage="Sign up" id="8HJxXG" />
|
||||
<FormattedMessage defaultMessage="Sign up" />
|
||||
</span>
|
||||
)}
|
||||
</button>
|
||||
@ -163,7 +163,7 @@ export default function NavSidebar({ narrow = false }: { narrow?: boolean }) {
|
||||
</ProfileLink>
|
||||
{readonly && (
|
||||
<div className="hidden xl:block text-nostr-red text-sm m-3">
|
||||
<FormattedMessage defaultMessage="Read-only" id="djNL6D" />
|
||||
<FormattedMessage defaultMessage="Read-only" />
|
||||
</div>
|
||||
)}
|
||||
</>
|
||||
|
@ -13,9 +13,9 @@ export default function RightColumn() {
|
||||
|
||||
const getTitleMessage = () => {
|
||||
return pubkey ? (
|
||||
<FormattedMessage defaultMessage="Trending notes" id="6k7xfM" />
|
||||
<FormattedMessage defaultMessage="Trending notes" />
|
||||
) : (
|
||||
<FormattedMessage defaultMessage="Trending hashtags" id="CbM2hK" />
|
||||
<FormattedMessage defaultMessage="Trending hashtags" />
|
||||
);
|
||||
};
|
||||
|
||||
|
@ -35,7 +35,7 @@ export const WalletBalance = () => {
|
||||
<Icon name="dots" className="text-secondary" />
|
||||
</div>
|
||||
<div className="text-secondary text-sm">
|
||||
<FormattedMessage defaultMessage="~{amount}" id="3QwfJR" values={msgValues} />
|
||||
<FormattedMessage defaultMessage="~{amount}" values={msgValues} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
@ -30,7 +30,7 @@ export function ListFeedPage() {
|
||||
if (data.kind !== EventKind.ContactList && data.kind !== EventKind.FollowSet) {
|
||||
return (
|
||||
<b>
|
||||
<FormattedMessage defaultMessage="Must be a contact list or pubkey list" id="vB3oQ/" />
|
||||
<FormattedMessage defaultMessage="Must be a contact list or pubkey list" />
|
||||
</b>
|
||||
);
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ export default function DM(props: DMProps) {
|
||||
{content ? (
|
||||
<Text id={msg.id} content={content} tags={[]} creator={otherPubkey} />
|
||||
) : (
|
||||
<FormattedMessage defaultMessage="Loading..." id="gjBiyj" />
|
||||
<FormattedMessage defaultMessage="Loading..." />
|
||||
)}
|
||||
</div>
|
||||
<div className={isMe ? "text-end text-gray-400 text-sm mt-1" : "text-gray-400 text-sm mt-1"}>
|
||||
|
@ -21,7 +21,7 @@ export default function DmWindow({ id }: { id: string }) {
|
||||
{chat.participants.map(v => (
|
||||
<ProfileImage key={v.id} pubkey={v.id} showUsername={false} />
|
||||
))}
|
||||
{chat.title ?? <FormattedMessage defaultMessage="Secret Group Chat" id="+Vxixo" />}
|
||||
{chat.title ?? <FormattedMessage defaultMessage="Secret Group Chat" />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ export default function MessagesPage() {
|
||||
{cx.participants.map(v => (
|
||||
<ProfileImage key={v.id} pubkey={v.id} link="" showUsername={false} profile={v.profile} />
|
||||
))}
|
||||
{cx.title ?? <FormattedMessage defaultMessage="Group Chat" id="eXT2QQ" />}
|
||||
{cx.title ?? <FormattedMessage defaultMessage="Group Chat" />}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@ -87,7 +87,7 @@ export default function MessagesPage() {
|
||||
<div className="overflow-y-auto md:h-screen p-1 w-full md:w-1/3 flex-shrink-0">
|
||||
<div className="flex items-center justify-between p-2">
|
||||
<button disabled={unreadCount <= 0} type="button" className="text-sm font-semibold">
|
||||
<FormattedMessage defaultMessage="Mark all read" id="ShdEie" />
|
||||
<FormattedMessage defaultMessage="Mark all read" />
|
||||
</button>
|
||||
<NewChatWindow />
|
||||
</div>
|
||||
|
@ -67,15 +67,15 @@ export default function NewChatWindow() {
|
||||
<div className="flex flex-col g16">
|
||||
<div className="flex justify-between">
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="New Chat" id="UT7Nkj" />
|
||||
<FormattedMessage defaultMessage="New Chat" />
|
||||
</h2>
|
||||
<button onClick={startChat}>
|
||||
<FormattedMessage defaultMessage="Start chat" id="v8lolG" />
|
||||
<FormattedMessage defaultMessage="Start chat" />
|
||||
</button>
|
||||
</div>
|
||||
<div className="flex flex-col g8">
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Search users" id="JjGgXI" />
|
||||
<FormattedMessage defaultMessage="Search users" />
|
||||
</h3>
|
||||
<input
|
||||
type="text"
|
||||
@ -97,7 +97,7 @@ export default function NewChatWindow() {
|
||||
</div>
|
||||
<div>
|
||||
<p>
|
||||
<FormattedMessage defaultMessage="People you follow" id="R81upa" />
|
||||
<FormattedMessage defaultMessage="People you follow" />
|
||||
</p>
|
||||
<div className="user-list flex flex-col g2">
|
||||
{results.map(a => {
|
||||
|
@ -183,7 +183,7 @@ const NetworkGraph = () => {
|
||||
setOpen(true);
|
||||
refreshData();
|
||||
}}>
|
||||
<FormattedMessage defaultMessage="Show graph" id="ha8JKG" />
|
||||
<FormattedMessage defaultMessage="Show graph" />
|
||||
</button>
|
||||
)}
|
||||
{open && graphData && (
|
||||
|
@ -11,7 +11,7 @@ export default function NostrAddressPage() {
|
||||
return (
|
||||
<div className="main-content p">
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="Buy nostr address" id="MuVeKe" />
|
||||
<FormattedMessage defaultMessage="Buy nostr address" />
|
||||
</h2>
|
||||
<p>
|
||||
<FormattedMessage {...messages.Nip05} />
|
||||
|
@ -67,7 +67,7 @@ export default function NostrLinkHandler() {
|
||||
<Spinner width={50} height={50} />
|
||||
) : (
|
||||
<b className="error">
|
||||
<FormattedMessage defaultMessage="Nothing found :/" id="oJ+JJN" />
|
||||
<FormattedMessage defaultMessage="Nothing found :/" />
|
||||
</b>
|
||||
)}
|
||||
</div>
|
||||
|
@ -41,11 +41,11 @@ export default function NotificationSummary({ evs }: { evs: Array<TaggedNostrEve
|
||||
const periodTabs = [
|
||||
{
|
||||
value: NotificationSummaryPeriod.Daily,
|
||||
text: <FormattedMessage defaultMessage="Daily" id="zxvhnE" />,
|
||||
text: <FormattedMessage defaultMessage="Daily" />,
|
||||
},
|
||||
{
|
||||
value: NotificationSummaryPeriod.Weekly,
|
||||
text: <FormattedMessage defaultMessage="Weekly" id="/clOBU" />,
|
||||
text: <FormattedMessage defaultMessage="Weekly" />,
|
||||
},
|
||||
] as Array<Tab>;
|
||||
|
||||
@ -114,7 +114,7 @@ export default function NotificationSummary({ evs }: { evs: Array<TaggedNostrEve
|
||||
<div className="flex flex-col g12 p bb">
|
||||
<div className="flex justify-between">
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="Summary" id="PJeJFc" description="Notifications summary" />
|
||||
<FormattedMessage defaultMessage="Summary" />
|
||||
</h2>
|
||||
<div className="flex items-center g8">
|
||||
{filterIcon(NotificationSummaryFilter.Reactions, "heart-solid", "text-heart")}
|
||||
|
@ -58,12 +58,12 @@ const AvatarSection = ({
|
||||
<>
|
||||
<Link className="md:hidden" to="/settings">
|
||||
<button>
|
||||
<FormattedMessage defaultMessage="Settings" id="D3idYv" />
|
||||
<FormattedMessage defaultMessage="Settings" />
|
||||
</button>
|
||||
</Link>
|
||||
<Link className="hidden md:inline" to="/settings/profile">
|
||||
<button>
|
||||
<FormattedMessage defaultMessage="Edit" id="wEQDC6" />
|
||||
<FormattedMessage defaultMessage="Edit" />
|
||||
</button>
|
||||
</Link>
|
||||
</>
|
||||
|
@ -9,7 +9,7 @@ const ProfileTabSelectors = {
|
||||
text: (
|
||||
<>
|
||||
<Icon name="pencil" size={16} />
|
||||
<FormattedMessage defaultMessage="Notes" id="7+Domh" />
|
||||
<FormattedMessage defaultMessage="Notes" />
|
||||
</>
|
||||
),
|
||||
value: ProfileTabType.NOTES,
|
||||
@ -18,7 +18,7 @@ const ProfileTabSelectors = {
|
||||
text: (
|
||||
<>
|
||||
<Icon name="heart-solid" size={16} />
|
||||
<FormattedMessage defaultMessage="Reactions" id="XgWvGA" />
|
||||
<FormattedMessage defaultMessage="Reactions" />
|
||||
</>
|
||||
),
|
||||
value: ProfileTabType.REACTIONS,
|
||||
@ -27,7 +27,7 @@ const ProfileTabSelectors = {
|
||||
text: (
|
||||
<>
|
||||
<Icon name="user-v2" size={16} />
|
||||
<FormattedMessage defaultMessage="Followers" id="pzTOmv" />
|
||||
<FormattedMessage defaultMessage="Followers" />
|
||||
</>
|
||||
),
|
||||
value: ProfileTabType.FOLLOWERS,
|
||||
@ -36,7 +36,7 @@ const ProfileTabSelectors = {
|
||||
text: (
|
||||
<>
|
||||
<Icon name="stars" size={16} />
|
||||
<FormattedMessage defaultMessage="Follows" id="IKKHqV" />
|
||||
<FormattedMessage defaultMessage="Follows" />
|
||||
</>
|
||||
),
|
||||
value: ProfileTabType.FOLLOWS,
|
||||
@ -45,7 +45,7 @@ const ProfileTabSelectors = {
|
||||
text: (
|
||||
<>
|
||||
<Icon name="zap-solid" size={16} />
|
||||
<FormattedMessage defaultMessage="Zaps" id="OEW7yJ" />
|
||||
<FormattedMessage defaultMessage="Zaps" />
|
||||
</>
|
||||
),
|
||||
value: ProfileTabType.ZAPS,
|
||||
@ -54,7 +54,7 @@ const ProfileTabSelectors = {
|
||||
text: (
|
||||
<>
|
||||
<Icon name="mute" size={16} />
|
||||
<FormattedMessage defaultMessage="Muted" id="HOzFdo" />
|
||||
<FormattedMessage defaultMessage="Muted" />
|
||||
</>
|
||||
),
|
||||
value: ProfileTabType.MUTED,
|
||||
@ -63,7 +63,7 @@ const ProfileTabSelectors = {
|
||||
text: (
|
||||
<>
|
||||
<Icon name="block" size={16} />
|
||||
<FormattedMessage defaultMessage="Blocked" id="qUJTsT" />
|
||||
<FormattedMessage defaultMessage="Blocked" />
|
||||
</>
|
||||
),
|
||||
value: ProfileTabType.BLOCKED,
|
||||
@ -72,7 +72,7 @@ const ProfileTabSelectors = {
|
||||
text: (
|
||||
<>
|
||||
<Icon name="wifi" size={16} />
|
||||
<FormattedMessage defaultMessage="Relays" id="RoOyAh" />
|
||||
<FormattedMessage defaultMessage="Relays" />
|
||||
</>
|
||||
),
|
||||
value: ProfileTabType.RELAYS,
|
||||
@ -81,7 +81,7 @@ const ProfileTabSelectors = {
|
||||
text: (
|
||||
<>
|
||||
<Icon name="bookmark-solid" size={16} />
|
||||
<FormattedMessage defaultMessage="Bookmarks" id="nGBrvw" />
|
||||
<FormattedMessage defaultMessage="Bookmarks" />
|
||||
</>
|
||||
),
|
||||
value: ProfileTabType.BOOKMARKS,
|
||||
|
@ -45,7 +45,7 @@ export function ZapPoolPageInner() {
|
||||
return (
|
||||
<div className="zap-pool main-content p">
|
||||
<h1>
|
||||
<FormattedMessage defaultMessage="Zap Pool" id="i/dBAR" />
|
||||
<FormattedMessage defaultMessage="Zap Pool" />
|
||||
</h1>
|
||||
<p>
|
||||
<FormattedMessage
|
||||
@ -110,7 +110,7 @@ export function ZapPoolPageInner() {
|
||||
trackEvent("ZapPool", { manual: true });
|
||||
await ZapPoolController?.payout(wallet);
|
||||
}}>
|
||||
<FormattedMessage defaultMessage="Payout Now" id="+PzQ9Y" />
|
||||
<FormattedMessage defaultMessage="Payout Now" />
|
||||
</AsyncButton>
|
||||
)}
|
||||
</p>
|
||||
@ -127,7 +127,7 @@ export function ZapPoolPageInner() {
|
||||
/>
|
||||
</div>
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Relays" id="RoOyAh" />
|
||||
<FormattedMessage defaultMessage="Relays" />
|
||||
</h3>
|
||||
{relayConnections.map(a => (
|
||||
<div key={a.address}>
|
||||
@ -145,7 +145,7 @@ export function ZapPoolPageInner() {
|
||||
</div>
|
||||
))}
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="File hosts" id="XICsE8" />
|
||||
<FormattedMessage defaultMessage="File hosts" />
|
||||
</h3>
|
||||
{UploaderServices.map(a => (
|
||||
<div key={a.name}>
|
||||
@ -163,7 +163,7 @@ export function ZapPoolPageInner() {
|
||||
</div>
|
||||
))}
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Data Providers" id="ELbg9p" />
|
||||
<FormattedMessage defaultMessage="Data Providers" />
|
||||
</h3>
|
||||
{DataProviders.map(a => (
|
||||
<div key={a.name}>
|
||||
|
@ -17,7 +17,7 @@ function ZapPoolTargetInner({ target }: { target: ZapPoolRecipient }) {
|
||||
<div>
|
||||
<div>
|
||||
<FormattedNumber value={target.split} />% (
|
||||
<FormattedMessage defaultMessage="{n} sats" id="CsCUYo" values={{ n: defaultZapMount }} />)
|
||||
<FormattedMessage defaultMessage="{n} sats" values={{ n: defaultZapMount }} />)
|
||||
</div>
|
||||
<input
|
||||
type="range"
|
||||
@ -34,7 +34,7 @@ function ZapPoolTargetInner({ target }: { target: ZapPoolRecipient }) {
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<FormattedMessage defaultMessage="No lightning address" id="JPFYIM" />
|
||||
<FormattedMessage defaultMessage="No lightning address" />
|
||||
)
|
||||
}
|
||||
/>
|
||||
|
@ -26,7 +26,7 @@ export function Discover() {
|
||||
<TrendingUsers
|
||||
title={
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Trending Users" id="FSYL8G" />
|
||||
<FormattedMessage defaultMessage="Trending Users" />
|
||||
</h3>
|
||||
}
|
||||
/>
|
||||
@ -38,7 +38,7 @@ export function Discover() {
|
||||
state,
|
||||
})
|
||||
}>
|
||||
<FormattedMessage defaultMessage="Next" id="9+Ddtu" />
|
||||
<FormattedMessage defaultMessage="Next" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
);
|
||||
|
@ -12,7 +12,7 @@ export const FixedModeration = {
|
||||
canEdit: false,
|
||||
},*/
|
||||
nsfw: {
|
||||
title: <FormattedMessage defaultMessage="NSFW" id="w6qrwX" />,
|
||||
title: <FormattedMessage defaultMessage="NSFW" />,
|
||||
words: [
|
||||
"adult content",
|
||||
"explicit",
|
||||
@ -39,7 +39,7 @@ export const FixedModeration = {
|
||||
canEdit: false,
|
||||
},
|
||||
crypto: {
|
||||
title: <FormattedMessage defaultMessage="Crypto" id="TdtZQ5" />,
|
||||
title: <FormattedMessage defaultMessage="Crypto" />,
|
||||
words: [
|
||||
"bitcoin",
|
||||
"btc",
|
||||
@ -67,7 +67,7 @@ export const FixedModeration = {
|
||||
canEdit: false,
|
||||
},
|
||||
politics: {
|
||||
title: <FormattedMessage defaultMessage="Politics" id="0siT4z" />,
|
||||
title: <FormattedMessage defaultMessage="Politics" />,
|
||||
words: [
|
||||
"politics",
|
||||
"election",
|
||||
|
@ -2,7 +2,7 @@ import { FormattedMessage } from "react-intl";
|
||||
|
||||
export const FixedTopics = {
|
||||
life: {
|
||||
text: <FormattedMessage defaultMessage="Life" id="4MjsHk" />,
|
||||
text: <FormattedMessage defaultMessage="Life" />,
|
||||
tags: [
|
||||
"life",
|
||||
"lifestyle",
|
||||
@ -37,7 +37,7 @@ export const FixedTopics = {
|
||||
],
|
||||
},
|
||||
science: {
|
||||
text: <FormattedMessage defaultMessage="Science" id="qydxOd" />,
|
||||
text: <FormattedMessage defaultMessage="Science" />,
|
||||
tags: [
|
||||
"science",
|
||||
"research",
|
||||
@ -72,7 +72,7 @@ export const FixedTopics = {
|
||||
],
|
||||
},
|
||||
nature: {
|
||||
text: <FormattedMessage defaultMessage="Nature" id="1ozeyg" />,
|
||||
text: <FormattedMessage defaultMessage="Nature" />,
|
||||
tags: [
|
||||
"nature",
|
||||
"wildlife",
|
||||
@ -107,7 +107,7 @@ export const FixedTopics = {
|
||||
],
|
||||
},
|
||||
business: {
|
||||
text: <FormattedMessage defaultMessage="Business" id="w1Fanr" />,
|
||||
text: <FormattedMessage defaultMessage="Business" />,
|
||||
tags: [
|
||||
"business",
|
||||
"entrepreneurship",
|
||||
@ -142,7 +142,7 @@ export const FixedTopics = {
|
||||
],
|
||||
},
|
||||
game: {
|
||||
text: <FormattedMessage defaultMessage="Game" id="Am8glJ" />,
|
||||
text: <FormattedMessage defaultMessage="Game" />,
|
||||
tags: [
|
||||
"gaming",
|
||||
"videogames",
|
||||
@ -177,7 +177,7 @@ export const FixedTopics = {
|
||||
],
|
||||
},
|
||||
sport: {
|
||||
text: <FormattedMessage defaultMessage="Sport" id="JIVWWA" />,
|
||||
text: <FormattedMessage defaultMessage="Sport" />,
|
||||
tags: [
|
||||
"sports",
|
||||
"athletics",
|
||||
@ -212,7 +212,7 @@ export const FixedTopics = {
|
||||
],
|
||||
},
|
||||
photography: {
|
||||
text: <FormattedMessage defaultMessage="Photography" id="cHCwbF" />,
|
||||
text: <FormattedMessage defaultMessage="Photography" />,
|
||||
tags: [
|
||||
"photography",
|
||||
"landscape",
|
||||
|
@ -21,17 +21,17 @@ export function Moderation() {
|
||||
<div className="flex flex-col g24">
|
||||
<div className="flex flex-col g8 text-center">
|
||||
<h1>
|
||||
<FormattedMessage defaultMessage="Clean up your feed" id="jHa/ko" />
|
||||
<FormattedMessage defaultMessage="Clean up your feed" />
|
||||
</h1>
|
||||
<FormattedMessage defaultMessage="Your space the way you want it 😌" id="/B8zwF" />
|
||||
<FormattedMessage defaultMessage="Your space the way you want it 😌" />
|
||||
</div>
|
||||
<div className="flex flex-col g8">
|
||||
<div className="flex g8 items-center">
|
||||
<small className="grow uppercase font-semibold">
|
||||
<FormattedMessage defaultMessage="Lists to mute:" id="d+6YsV" />
|
||||
<FormattedMessage defaultMessage="Lists to mute:" />
|
||||
</small>
|
||||
<span className="font-medium">
|
||||
<FormattedMessage defaultMessage="Toggle all" id="Dx4ey3" />
|
||||
<FormattedMessage defaultMessage="Toggle all" />
|
||||
</span>
|
||||
<ToggleSwitch
|
||||
size={50}
|
||||
@ -48,7 +48,7 @@ export function Moderation() {
|
||||
<div className="font-semibold grow">{v.title}</div>
|
||||
{v.canEdit && (
|
||||
<div>
|
||||
<FormattedMessage defaultMessage="edit" id="+vj0U3" />
|
||||
<FormattedMessage defaultMessage="edit" />
|
||||
</div>
|
||||
)}
|
||||
<ToggleSwitch
|
||||
@ -61,10 +61,10 @@ export function Moderation() {
|
||||
</div>
|
||||
<div className="flex flex-col g8">
|
||||
<span className="font-semibold">
|
||||
<FormattedMessage defaultMessage="Additional Terms:" id="xl4s/X" />
|
||||
<FormattedMessage defaultMessage="Additional Terms:" />
|
||||
</span>
|
||||
<small className="font-medium">
|
||||
<FormattedMessage defaultMessage="Use commas to separate words e.g. word1, word2, word3" id="J2HeQ+" />
|
||||
<FormattedMessage defaultMessage="Use commas to separate words e.g. word1, word2, word3" />
|
||||
</small>
|
||||
<textarea onChange={e => setExtraTerms(e.target.value)} value={extraTerms}></textarea>
|
||||
</div>
|
||||
@ -89,7 +89,7 @@ export function Moderation() {
|
||||
}
|
||||
navigate("/");
|
||||
}}>
|
||||
<FormattedMessage defaultMessage="Finish" id="2O2sfp" />
|
||||
<FormattedMessage defaultMessage="Finish" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
);
|
||||
|
@ -38,11 +38,11 @@ export function Profile() {
|
||||
return (
|
||||
<div className="flex flex-col g24 text-center">
|
||||
<h1>
|
||||
<FormattedMessage defaultMessage="Profile Image" id="vN5UH8" />
|
||||
<FormattedMessage defaultMessage="Profile Image" />
|
||||
</h1>
|
||||
<AvatarEditor picture={picture} onPictureChange={p => setPicture(p)} />
|
||||
<AsyncButton className="primary" onClick={() => makeRandomKey()}>
|
||||
<FormattedMessage defaultMessage="Next" id="9+Ddtu" />
|
||||
<FormattedMessage defaultMessage="Next" />
|
||||
</AsyncButton>
|
||||
{error && <b className="error">{error}</b>}
|
||||
</div>
|
||||
|
@ -75,9 +75,9 @@ export function SignIn() {
|
||||
<img src={CONFIG.icon} width={48} height={48} className="br mr-auto ml-auto" />
|
||||
<div className="flex flex-col g16 items-center">
|
||||
<h1>
|
||||
<FormattedMessage defaultMessage="Sign In" id="Ub+AGc" />
|
||||
<FormattedMessage defaultMessage="Sign In" />
|
||||
</h1>
|
||||
{nip7Login && <FormattedMessage defaultMessage="Use a nostr signer extension to sign in" id="eF0Re7" />}
|
||||
{nip7Login && <FormattedMessage defaultMessage="Use a nostr signer extension to sign in" />}
|
||||
</div>
|
||||
<div className={classNames("flex flex-col g16", { "items-center": nip7Login })}>
|
||||
{hasNip7 && !useKey && (
|
||||
@ -86,13 +86,13 @@ export function SignIn() {
|
||||
<div className="circle bg-warning p12 text-white">
|
||||
<Icon name="key" />
|
||||
</div>
|
||||
<FormattedMessage defaultMessage="Sign in with Nostr Extension" id="TaeBqw" />
|
||||
<FormattedMessage defaultMessage="Sign in with Nostr Extension" />
|
||||
</AsyncButton>
|
||||
<Link to="" className="highlight">
|
||||
<FormattedMessage defaultMessage="Supported Extensions" id="aMaLBK" />
|
||||
<FormattedMessage defaultMessage="Supported Extensions" />
|
||||
</Link>
|
||||
<AsyncButton onClick={() => setUseKey(true)}>
|
||||
<FormattedMessage defaultMessage="Sign in with key" id="X6tipZ" />
|
||||
<FormattedMessage defaultMessage="Sign in with key" />
|
||||
</AsyncButton>
|
||||
</>
|
||||
)}
|
||||
@ -111,7 +111,7 @@ export function SignIn() {
|
||||
{error && <b className="error">{error}</b>}
|
||||
<div className="flex justify-center">
|
||||
<AsyncButton onClick={onSubmit} className="primary">
|
||||
<FormattedMessage defaultMessage="Login" id="AyGauy" />
|
||||
<FormattedMessage defaultMessage="Login" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
</form>
|
||||
@ -119,10 +119,10 @@ export function SignIn() {
|
||||
</div>
|
||||
<div className="flex flex-col g16 items-center">
|
||||
<Link to={"/login/sign-up"}>
|
||||
<FormattedMessage defaultMessage="Don't have an account?" id="25WwxF" />
|
||||
<FormattedMessage defaultMessage="Don't have an account?" />
|
||||
</Link>
|
||||
<AsyncButton className="secondary" onClick={() => navigate("/login/sign-up")}>
|
||||
<FormattedMessage defaultMessage="Sign Up" id="39AHJm" />
|
||||
<FormattedMessage defaultMessage="Sign Up" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
</div>
|
||||
@ -166,9 +166,9 @@ export function SignUp() {
|
||||
<img src={CONFIG.icon} width={48} height={48} className="br mr-auto ml-auto" />
|
||||
<div className="flex flex-col g16 items-center">
|
||||
<h1>
|
||||
<FormattedMessage defaultMessage="Sign Up" id="39AHJm" />
|
||||
<FormattedMessage defaultMessage="Sign Up" />
|
||||
</h1>
|
||||
<FormattedMessage defaultMessage="What should we call you?" id="SmuYUd" />
|
||||
<FormattedMessage defaultMessage="What should we call you?" />
|
||||
</div>
|
||||
<form onSubmit={onSubmit} className="flex flex-col g16">
|
||||
<input
|
||||
@ -190,16 +190,16 @@ export function SignUp() {
|
||||
id="0zASjL"
|
||||
/>
|
||||
) : (
|
||||
<FormattedMessage defaultMessage="Next" id="9+Ddtu" />
|
||||
<FormattedMessage defaultMessage="Next" />
|
||||
)}
|
||||
</AsyncButton>
|
||||
</form>
|
||||
<div className="flex flex-col g16 items-center">
|
||||
<Link to={"/login"}>
|
||||
<FormattedMessage defaultMessage="Already have an account?" id="uCk8r+" />
|
||||
<FormattedMessage defaultMessage="Already have an account?" />
|
||||
</Link>
|
||||
<AsyncButton className="secondary" onClick={() => navigate("/login")}>
|
||||
<FormattedMessage defaultMessage="Sign In" id="Ub+AGc" />
|
||||
<FormattedMessage defaultMessage="Sign In" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -28,7 +28,7 @@ export function Topics() {
|
||||
return (
|
||||
<div className="flex flex-col g24 text-center">
|
||||
<h1>
|
||||
<FormattedMessage defaultMessage="Pick a few topics of interest" id="fX5RYm" />
|
||||
<FormattedMessage defaultMessage="Pick a few topics of interest" />
|
||||
</h1>
|
||||
<div className="tabs flex-wrap justify-center">{Object.entries(FixedTopics).map(([k, v]) => tab(k, v.text))}</div>
|
||||
<AsyncButton
|
||||
@ -51,7 +51,7 @@ export function Topics() {
|
||||
}
|
||||
navigate("/login/sign-up/discover");
|
||||
}}>
|
||||
<FormattedMessage defaultMessage="Next" id="9+Ddtu" />
|
||||
<FormattedMessage defaultMessage="Next" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
);
|
||||
|
@ -12,7 +12,7 @@ export default function AccountsPage() {
|
||||
return (
|
||||
<div className="flex flex-col g12">
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Logins" id="+vA//S" />
|
||||
<FormattedMessage defaultMessage="Logins" />
|
||||
</h3>
|
||||
{logins.map(a => (
|
||||
<div className="card flex" key={a.id}>
|
||||
@ -24,10 +24,10 @@ export default function AccountsPage() {
|
||||
actions={
|
||||
<div className="flex-1">
|
||||
<button className="mb10" onClick={() => LoginStore.switchAccount(a.id)}>
|
||||
<FormattedMessage defaultMessage="Switch" id="n1Whvj" />
|
||||
<FormattedMessage defaultMessage="Switch" />
|
||||
</button>
|
||||
<button onClick={() => LoginStore.removeSession(a.id)}>
|
||||
<FormattedMessage defaultMessage="Logout" id="C81/uG" />
|
||||
<FormattedMessage defaultMessage="Logout" />
|
||||
</button>
|
||||
</div>
|
||||
}
|
||||
@ -38,7 +38,7 @@ export default function AccountsPage() {
|
||||
{sub && (
|
||||
<Link to={"/login"}>
|
||||
<button type="button">
|
||||
<FormattedMessage defaultMessage="Add Account" id="F3l7xL" />
|
||||
<FormattedMessage defaultMessage="Add Account" />
|
||||
</button>
|
||||
</Link>
|
||||
)}
|
||||
|
@ -10,11 +10,11 @@ export function CacheSettings() {
|
||||
return (
|
||||
<div className="flex flex-col g8">
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Cache" id="DBiVK1" />
|
||||
<FormattedMessage defaultMessage="Cache" />
|
||||
</h3>
|
||||
<RelayCacheStats />
|
||||
<CacheDetails cache={RelayMetrics} name={<FormattedMessage defaultMessage="Relay Metrics" id="tjpYlr" />} />
|
||||
<CacheDetails cache={GiftsCache} name={<FormattedMessage defaultMessage="Gift Wraps" id="fjAcWo" />} />
|
||||
<CacheDetails cache={RelayMetrics} name={<FormattedMessage defaultMessage="Relay Metrics" />} />
|
||||
<CacheDetails cache={GiftsCache} name={<FormattedMessage defaultMessage="Gift Wraps" />} />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@ -42,7 +42,7 @@ function CacheDetails<T>({ cache, name }: { cache: FeedCache<T>; name: ReactNode
|
||||
</div>
|
||||
<div>
|
||||
<AsyncButton onClick={() => cache.clear()}>
|
||||
<FormattedMessage defaultMessage="Clear" id="/GCoTA" />
|
||||
<FormattedMessage defaultMessage="Clear" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
</div>
|
||||
@ -64,7 +64,7 @@ function RelayCacheStats() {
|
||||
return (
|
||||
<div className="flex justify-between br p bg-superdark">
|
||||
<div className="flex flex-col g4 w-64">
|
||||
<FormattedMessage defaultMessage="Worker Relay" id="xSoIUU" />
|
||||
<FormattedMessage defaultMessage="Worker Relay" />
|
||||
{myEvents && (
|
||||
<p>
|
||||
<FormattedMessage
|
||||
@ -80,10 +80,10 @@ function RelayCacheStats() {
|
||||
<thead>
|
||||
<tr>
|
||||
<th className="text-left">
|
||||
<FormattedMessage defaultMessage="Kind" id="e5x8FT" />
|
||||
<FormattedMessage defaultMessage="Kind" />
|
||||
</th>
|
||||
<th className="text-left">
|
||||
<FormattedMessage defaultMessage="Count" id="Aujn2T" />
|
||||
<FormattedMessage defaultMessage="Count" />
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -107,7 +107,7 @@ function RelayCacheStats() {
|
||||
</div>
|
||||
<div className="flex flex-col gap-2">
|
||||
<AsyncButton onClick={() => {}}>
|
||||
<FormattedMessage defaultMessage="Clear" id="/GCoTA" />
|
||||
<FormattedMessage defaultMessage="Clear" />
|
||||
</AsyncButton>
|
||||
<AsyncButton
|
||||
onClick={async () => {
|
||||
@ -122,7 +122,7 @@ function RelayCacheStats() {
|
||||
a.download = "snort.db";
|
||||
a.click();
|
||||
}}>
|
||||
<FormattedMessage defaultMessage="Dump" id="f2CAxA" />
|
||||
<FormattedMessage defaultMessage="Dump" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -14,7 +14,7 @@ export default function ExportKeys() {
|
||||
return (
|
||||
<div className="flex flex-col g12">
|
||||
<div className="text-xl">
|
||||
<FormattedMessage defaultMessage="Public Key" id="bep9C3" />
|
||||
<FormattedMessage defaultMessage="Public Key" />
|
||||
</div>
|
||||
<small>
|
||||
<FormattedMessage
|
||||
@ -27,7 +27,7 @@ export default function ExportKeys() {
|
||||
{privateKeyData instanceof KeyStorage && (
|
||||
<>
|
||||
<div className="text-xl">
|
||||
<FormattedMessage defaultMessage="Private Key" id="JymXbw" />
|
||||
<FormattedMessage defaultMessage="Private Key" />
|
||||
</div>
|
||||
<small>
|
||||
<FormattedMessage
|
||||
@ -41,7 +41,7 @@ export default function ExportKeys() {
|
||||
{generatedEntropy && (
|
||||
<>
|
||||
<div className="text-xl">
|
||||
<FormattedMessage defaultMessage="Mnemonic" id="b12Goz" />
|
||||
<FormattedMessage defaultMessage="Mnemonic" />
|
||||
</div>
|
||||
<div className="mnemonic-grid">
|
||||
{hexToMnemonic(generatedEntropy ?? "")
|
||||
|
@ -30,18 +30,18 @@ const SettingsIndex = () => {
|
||||
|
||||
const settingsGroups = [
|
||||
{
|
||||
title: <FormattedMessage id="TwyMau" defaultMessage="Account" />,
|
||||
title: <FormattedMessage />,
|
||||
items: [
|
||||
{
|
||||
icon: "profile",
|
||||
iconBg: "bg-green-500",
|
||||
message: <FormattedMessage id="itPgxd" defaultMessage="Profile" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "profile",
|
||||
},
|
||||
{
|
||||
icon: "key",
|
||||
iconBg: "bg-amber-500",
|
||||
message: <FormattedMessage id="08zn6O" defaultMessage="Export Keys" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "keys",
|
||||
},
|
||||
...(CONFIG.features.nostrAddress
|
||||
@ -49,7 +49,7 @@ const SettingsIndex = () => {
|
||||
{
|
||||
icon: "badge",
|
||||
iconBg: "bg-pink-500",
|
||||
message: <FormattedMessage id="9pMqYs" defaultMessage="Nostr Address" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "handle",
|
||||
},
|
||||
]
|
||||
@ -57,13 +57,13 @@ const SettingsIndex = () => {
|
||||
{
|
||||
icon: "gear",
|
||||
iconBg: "bg-slate-500",
|
||||
message: <FormattedMessage id="PCSt5T" defaultMessage="Preferences" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "preferences",
|
||||
},
|
||||
{
|
||||
icon: "wallet",
|
||||
iconBg: "bg-emerald-500",
|
||||
message: <FormattedMessage id="3yk8fB" defaultMessage="Wallet" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "wallet",
|
||||
},
|
||||
...(sub
|
||||
@ -71,7 +71,7 @@ const SettingsIndex = () => {
|
||||
{
|
||||
icon: "code-circle",
|
||||
iconBg: "bg-indigo-500",
|
||||
message: <FormattedMessage id="FvanT6" defaultMessage="Accounts" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "accounts",
|
||||
},
|
||||
]
|
||||
@ -79,24 +79,24 @@ const SettingsIndex = () => {
|
||||
{
|
||||
icon: "tool",
|
||||
iconBg: "bg-slate-800",
|
||||
message: <FormattedMessage defaultMessage="Tools" id="nUT0Lv" />,
|
||||
message: <FormattedMessage defaultMessage="Tools" />,
|
||||
path: "tools",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: <FormattedMessage id="hvFRBo" defaultMessage="Interaction" />,
|
||||
title: <FormattedMessage />,
|
||||
items: [
|
||||
{
|
||||
icon: "relay",
|
||||
iconBg: "bg-dark bg-opacity-20",
|
||||
message: <FormattedMessage id="RoOyAh" defaultMessage="Relays" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "relays",
|
||||
},
|
||||
{
|
||||
icon: "shield-tick",
|
||||
iconBg: "bg-yellow-500",
|
||||
message: <FormattedMessage id="wofVHy" defaultMessage="Moderation" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "moderation",
|
||||
},
|
||||
...(CONFIG.features.pushNotifications
|
||||
@ -104,7 +104,7 @@ const SettingsIndex = () => {
|
||||
{
|
||||
icon: "bell-outline",
|
||||
iconBg: "bg-red-500",
|
||||
message: <FormattedMessage id="NAidKb" defaultMessage="Notifications" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "notifications",
|
||||
},
|
||||
]
|
||||
@ -114,7 +114,7 @@ const SettingsIndex = () => {
|
||||
{
|
||||
icon: "link",
|
||||
iconBg: "bg-blue-500",
|
||||
message: <FormattedMessage id="hYOE+U" defaultMessage="Invite" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "invite",
|
||||
},
|
||||
]
|
||||
@ -122,18 +122,18 @@ const SettingsIndex = () => {
|
||||
{
|
||||
icon: "hard-drive",
|
||||
iconBg: "bg-cyan-500",
|
||||
message: <FormattedMessage id="DBiVK1" defaultMessage="Cache" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "cache",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: <FormattedMessage id="HqRNN8" defaultMessage="Support" />,
|
||||
title: <FormattedMessage />,
|
||||
items: [
|
||||
{
|
||||
icon: "heart",
|
||||
iconBg: "bg-purple-500",
|
||||
message: <FormattedMessage id="2IFGap" defaultMessage="Donate" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "/donate",
|
||||
},
|
||||
...(CONFIG.features.subscriptions
|
||||
@ -141,7 +141,7 @@ const SettingsIndex = () => {
|
||||
{
|
||||
icon: "diamond",
|
||||
iconBg: "bg-violet-500",
|
||||
message: <FormattedMessage id="R/6nsx" defaultMessage="Subscription" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "/subscribe/manage",
|
||||
},
|
||||
]
|
||||
@ -151,7 +151,7 @@ const SettingsIndex = () => {
|
||||
{
|
||||
icon: "piggy-bank",
|
||||
iconBg: "bg-rose-500",
|
||||
message: <FormattedMessage id="i/dBAR" defaultMessage="Zap Pool" />,
|
||||
message: <FormattedMessage />,
|
||||
path: "/zap-pool",
|
||||
},
|
||||
]
|
||||
@ -159,12 +159,12 @@ const SettingsIndex = () => {
|
||||
],
|
||||
},
|
||||
{
|
||||
title: <FormattedMessage id="H0JBH6" defaultMessage="Log Out" />,
|
||||
title: <FormattedMessage />,
|
||||
items: [
|
||||
{
|
||||
icon: "logout",
|
||||
iconBg: "bg-red-500",
|
||||
message: <FormattedMessage id="H0JBH6" defaultMessage="Log Out" />,
|
||||
message: <FormattedMessage />,
|
||||
action: handleLogout,
|
||||
},
|
||||
],
|
||||
|
@ -13,7 +13,7 @@ export default function ModerationSettingsPage() {
|
||||
return (
|
||||
<>
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="Moderation" id="wofVHy" />
|
||||
<FormattedMessage defaultMessage="Moderation" />
|
||||
</h2>
|
||||
|
||||
<div className="py-4 flex flex-col gap-2">
|
||||
@ -31,13 +31,13 @@ export default function ModerationSettingsPage() {
|
||||
id="showContentWarningPosts"
|
||||
/>
|
||||
<label htmlFor="showContentWarningPosts">
|
||||
<FormattedMessage defaultMessage="Show posts that have a content warning tag" id="fQN+tq" />
|
||||
<FormattedMessage defaultMessage="Show posts that have a content warning tag" />
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Muted Words" id="AN0Z7Q" />
|
||||
<FormattedMessage defaultMessage="Muted Words" />
|
||||
</h3>
|
||||
<div className="flex flex-col g12">
|
||||
<div className="flex g8">
|
||||
@ -53,14 +53,14 @@ export default function ModerationSettingsPage() {
|
||||
await addMutedWord(muteWord);
|
||||
setMuteWord("");
|
||||
}}>
|
||||
<FormattedMessage defaultMessage="Add" id="2/2yg+" />
|
||||
<FormattedMessage defaultMessage="Add" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
{getMutedWords().map(v => (
|
||||
<div key={v} className="p br b flex items-center justify-between">
|
||||
<div>{v}</div>
|
||||
<AsyncButton onClick={() => removeMutedWord(v)}>
|
||||
<FormattedMessage defaultMessage="Delete" id="K3r6DQ" />
|
||||
<FormattedMessage defaultMessage="Delete" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
))}
|
||||
|
@ -81,11 +81,11 @@ const PreferencesPage = () => {
|
||||
return (
|
||||
<div className="flex flex-col">
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Notifications" id="NAidKb" />
|
||||
<FormattedMessage defaultMessage="Notifications" />
|
||||
</h3>
|
||||
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Push notifications" id="Awq32I" />
|
||||
<FormattedMessage defaultMessage="Push notifications" />
|
||||
</h4>
|
||||
|
||||
<div className="flex flex-col space-y-4">
|
||||
@ -107,7 +107,7 @@ const PreferencesPage = () => {
|
||||
/>
|
||||
{hasNotificationsApi && !notificationsAllowed && (
|
||||
<button onClick={requestNotificationPermission}>
|
||||
<FormattedMessage defaultMessage="Allow" id="y/bmsG" />
|
||||
<FormattedMessage defaultMessage="Allow" />
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
@ -124,7 +124,7 @@ const PreferencesPage = () => {
|
||||
/>
|
||||
{allGood && !subscribedToPush && (
|
||||
<button onClick={trySubscribePush}>
|
||||
<FormattedMessage defaultMessage="Subscribe" id="gczcC5" />
|
||||
<FormattedMessage defaultMessage="Subscribe" />
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
|
@ -34,15 +34,15 @@ const PreferencesPage = () => {
|
||||
return (
|
||||
<div className="preferences flex flex-col g24">
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Preferences" id="PCSt5T" />
|
||||
<FormattedMessage defaultMessage="Preferences" />
|
||||
</h3>
|
||||
<AsyncButton onClick={() => update(pref)}>
|
||||
<FormattedMessage defaultMessage="Save" id="jvo0vs" />
|
||||
<FormattedMessage defaultMessage="Save" />
|
||||
</AsyncButton>
|
||||
{error && <b className="warning">{error}</b>}
|
||||
<div className="flex justify-between w-max">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Language" id="y1Z3or" />
|
||||
<FormattedMessage defaultMessage="Language" />
|
||||
</h4>
|
||||
<div>
|
||||
<select
|
||||
@ -103,10 +103,10 @@ const PreferencesPage = () => {
|
||||
} as UserPreferences)
|
||||
}>
|
||||
<option value="for-you">
|
||||
<FormattedMessage defaultMessage="For you" id="xEjBS7" />
|
||||
<FormattedMessage defaultMessage="For you" />
|
||||
</option>
|
||||
<option value="following">
|
||||
<FormattedMessage defaultMessage="Notes" id="7+Domh" />
|
||||
<FormattedMessage defaultMessage="Notes" />
|
||||
</option>
|
||||
<option value="conversations">
|
||||
<FormattedMessage {...messages.Conversations} />
|
||||
@ -120,10 +120,10 @@ const PreferencesPage = () => {
|
||||
<div className="flex justify-between w-max">
|
||||
<div className="flex flex-col g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Send usage metrics" id="XECMfW" />
|
||||
<FormattedMessage defaultMessage="Send usage metrics" />
|
||||
</h4>
|
||||
<small>
|
||||
<FormattedMessage defaultMessage="Send anonymous usage metrics" id="/Xf4UW" />
|
||||
<FormattedMessage defaultMessage="Send anonymous usage metrics" />
|
||||
</small>
|
||||
</div>
|
||||
<div>
|
||||
@ -168,10 +168,10 @@ const PreferencesPage = () => {
|
||||
<div className="flex justify-between w-max">
|
||||
<div className="flex flex-col g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Check Signatures" id="1o2BgB" />
|
||||
<FormattedMessage defaultMessage="Check Signatures" />
|
||||
</h4>
|
||||
<small>
|
||||
<FormattedMessage defaultMessage="Check all event signatures received from relays" id="UNjfWJ" />
|
||||
<FormattedMessage defaultMessage="Check all event signatures received from relays" />
|
||||
</small>
|
||||
</div>
|
||||
<div>
|
||||
@ -185,10 +185,10 @@ const PreferencesPage = () => {
|
||||
<div className="flex justify-between w-max">
|
||||
<div className="flex flex-col g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Auto Translate" id="IWz1ta" />
|
||||
<FormattedMessage defaultMessage="Auto Translate" />
|
||||
</h4>
|
||||
<small>
|
||||
<FormattedMessage defaultMessage="Automatically translate notes to your local language" id="WmZhfL" />
|
||||
<FormattedMessage defaultMessage="Automatically translate notes to your local language" />
|
||||
</small>
|
||||
</div>
|
||||
<div>
|
||||
@ -202,10 +202,10 @@ const PreferencesPage = () => {
|
||||
<div className="flex justify-between w-max">
|
||||
<div className="flex flex-col g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Proof of Work" id="grQ+mI" />
|
||||
<FormattedMessage defaultMessage="Proof of Work" />
|
||||
</h4>
|
||||
<small>
|
||||
<FormattedMessage defaultMessage="Amount of work to apply to all published events" id="vxwnbh" />
|
||||
<FormattedMessage defaultMessage="Amount of work to apply to all published events" />
|
||||
</small>
|
||||
</div>
|
||||
<div>
|
||||
@ -219,7 +219,7 @@ const PreferencesPage = () => {
|
||||
</div>
|
||||
<div className="flex justify-between w-max">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Default Zap amount" id="qMx1sA" />
|
||||
<FormattedMessage defaultMessage="Default Zap amount" />
|
||||
</h4>
|
||||
<div>
|
||||
<input
|
||||
@ -233,10 +233,10 @@ const PreferencesPage = () => {
|
||||
<div className="flex justify-between w-max">
|
||||
<div className="flex flex-col g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Show Badges" id="sKDn4e" />
|
||||
<FormattedMessage defaultMessage="Show Badges" />
|
||||
</h4>
|
||||
<small>
|
||||
<FormattedMessage defaultMessage="Show badges on profile pages" id="EQKRE4" />
|
||||
<FormattedMessage defaultMessage="Show badges on profile pages" />
|
||||
</small>
|
||||
</div>
|
||||
<div>
|
||||
@ -250,10 +250,10 @@ const PreferencesPage = () => {
|
||||
<div className="flex justify-between w-max">
|
||||
<div className="flex flex-col g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Show Status" id="0uoY11" />
|
||||
<FormattedMessage defaultMessage="Show Status" />
|
||||
</h4>
|
||||
<small>
|
||||
<FormattedMessage defaultMessage="Show status messages on profile pages" id="FMfjrl" />
|
||||
<FormattedMessage defaultMessage="Show status messages on profile pages" />
|
||||
</small>
|
||||
</div>
|
||||
<div>
|
||||
@ -267,10 +267,10 @@ const PreferencesPage = () => {
|
||||
<div className="flex justify-between w-max">
|
||||
<div className="flex flex-col g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Auto Zap" id="Dh3hbq" />
|
||||
<FormattedMessage defaultMessage="Auto Zap" />
|
||||
</h4>
|
||||
<small>
|
||||
<FormattedMessage defaultMessage="Automatically zap every note when loaded" id="D+KzKd" />
|
||||
<FormattedMessage defaultMessage="Automatically zap every note when loaded" />
|
||||
</small>
|
||||
</div>
|
||||
<div>
|
||||
@ -498,10 +498,10 @@ const PreferencesPage = () => {
|
||||
<div className="flex justify-between">
|
||||
<div className="flex flex-col g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Hide muted notes" id="9kO0VQ" />
|
||||
<FormattedMessage defaultMessage="Hide muted notes" />
|
||||
</h4>
|
||||
<small>
|
||||
<FormattedMessage defaultMessage="Muted notes will not be shown" id="sfL/O+" />
|
||||
<FormattedMessage defaultMessage="Muted notes will not be shown" />
|
||||
</small>
|
||||
</div>
|
||||
<div>
|
||||
@ -513,7 +513,7 @@ const PreferencesPage = () => {
|
||||
</div>
|
||||
</div>
|
||||
<AsyncButton onClick={() => update(pref)}>
|
||||
<FormattedMessage defaultMessage="Save" id="jvo0vs" />
|
||||
<FormattedMessage defaultMessage="Save" />
|
||||
</AsyncButton>
|
||||
{error && <b className="error">{error}</b>}
|
||||
</div>
|
||||
|
@ -224,7 +224,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
|
||||
<div className="flex flex-col g24">
|
||||
<div className="flex flex-col w-max g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Name" id="HAlOn1" />
|
||||
<FormattedMessage defaultMessage="Name" />
|
||||
</h4>
|
||||
<input
|
||||
className="w-max"
|
||||
@ -238,7 +238,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
|
||||
</div>
|
||||
<div className="flex flex-col w-max g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="About" id="g5pX+a" />
|
||||
<FormattedMessage defaultMessage="About" />
|
||||
</h4>
|
||||
<textarea
|
||||
className="w-max"
|
||||
@ -250,7 +250,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
|
||||
</div>
|
||||
<div className="flex flex-col w-max g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Website" id="JkLHGw" />
|
||||
<FormattedMessage defaultMessage="Website" />
|
||||
</h4>
|
||||
<input
|
||||
className="w-max"
|
||||
@ -262,7 +262,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
|
||||
</div>
|
||||
<div className="flex flex-col w-max g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Nostr Address" id="9pMqYs" />
|
||||
<FormattedMessage defaultMessage="Nostr Address" />
|
||||
</h4>
|
||||
<div className="flex flex-col g8 w-max">
|
||||
<input type="text" className="w-max" value={nip05} onChange={e => onNip05Change(e)} disabled={readonly} />
|
||||
@ -275,20 +275,20 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
|
||||
</small>
|
||||
<div className="flex g12">
|
||||
<button className="flex items-center" type="button" onClick={() => navigate("/nostr-address")}>
|
||||
<FormattedMessage defaultMessage="Buy nostr address" id="MuVeKe" />
|
||||
<FormattedMessage defaultMessage="Buy nostr address" />
|
||||
</button>
|
||||
<button
|
||||
className="flex items-center secondary"
|
||||
type="button"
|
||||
onClick={() => navigate("/free-nostr-address")}>
|
||||
<FormattedMessage defaultMessage="Get a free one" id="vlbWtt" />
|
||||
<FormattedMessage defaultMessage="Get a free one" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="flex flex-col w-max g8">
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Lightning Address" id="GSye7T" />
|
||||
<FormattedMessage defaultMessage="Lightning Address" />
|
||||
</h4>
|
||||
<input
|
||||
className="w-max"
|
||||
@ -300,7 +300,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
|
||||
<div>{lud16Valid === false ? <span className="warning">{invalidLud16Message}</span> : <></>}</div>
|
||||
</div>
|
||||
<AsyncButton className="primary" onClick={() => saveProfile()} disabled={readonly}>
|
||||
<FormattedMessage defaultMessage="Save" id="jvo0vs" />
|
||||
<FormattedMessage defaultMessage="Save" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
);
|
||||
@ -318,7 +318,7 @@ export default function ProfileSettings(props: ProfileSettingsProps) {
|
||||
}}
|
||||
className="banner">
|
||||
<AsyncButton type="button" onClick={() => setNewBanner()} disabled={readonly}>
|
||||
<FormattedMessage defaultMessage="Upload" id="p4N05H" />
|
||||
<FormattedMessage defaultMessage="Upload" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
)}
|
||||
|
@ -31,12 +31,12 @@ export function ReferralsPage() {
|
||||
return (
|
||||
<>
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="Become a leader" id="M6C/px" />
|
||||
<FormattedMessage defaultMessage="Become a leader" />
|
||||
</h2>
|
||||
<div className="flex items-center justify-between">
|
||||
<Link to="https://community.snort.social/" target="_blank">
|
||||
<button>
|
||||
<FormattedMessage defaultMessage="Learn more" id="TdTXXf" />
|
||||
<FormattedMessage defaultMessage="Learn more" />
|
||||
</button>
|
||||
</Link>
|
||||
|
||||
@ -44,7 +44,7 @@ export function ReferralsPage() {
|
||||
</div>
|
||||
<p>
|
||||
<AsyncButton className="primary" onClick={applyNow}>
|
||||
<FormattedMessage defaultMessage="Apply Now" id="k0kCJp" />
|
||||
<FormattedMessage defaultMessage="Apply Now" />
|
||||
</AsyncButton>
|
||||
</p>
|
||||
</>
|
||||
@ -55,19 +55,19 @@ export function ReferralsPage() {
|
||||
return (
|
||||
<>
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="Become a leader" id="M6C/px" />
|
||||
<FormattedMessage defaultMessage="Become a leader" />
|
||||
</h2>
|
||||
<div className="flex items-center justify-between">
|
||||
<Link to="https://community.snort.social/" target="_blank">
|
||||
<button>
|
||||
<FormattedMessage defaultMessage="Learn more" id="TdTXXf" />
|
||||
<FormattedMessage defaultMessage="Learn more" />
|
||||
</button>
|
||||
</Link>
|
||||
|
||||
<LeaderBadge />
|
||||
</div>
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Your application is pending" id="Ups2/p" />
|
||||
<FormattedMessage defaultMessage="Your application is pending" />
|
||||
</h3>
|
||||
</>
|
||||
);
|
||||
@ -77,7 +77,7 @@ export function ReferralsPage() {
|
||||
return (
|
||||
<>
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="Leader Info" id="H0OG3T" />
|
||||
<FormattedMessage defaultMessage="Leader Info" />
|
||||
</h2>
|
||||
<p>
|
||||
<FormattedMessage
|
||||
@ -90,7 +90,7 @@ export function ReferralsPage() {
|
||||
/>
|
||||
</p>
|
||||
<p>
|
||||
<FormattedMessage defaultMessage="Use your invite code to earn sats!" id="O3Jz4E" />
|
||||
<FormattedMessage defaultMessage="Use your invite code to earn sats!" />
|
||||
</p>
|
||||
</>
|
||||
);
|
||||
@ -99,7 +99,7 @@ export function ReferralsPage() {
|
||||
return (
|
||||
<>
|
||||
<h1>
|
||||
<FormattedMessage defaultMessage="Invite your friends" id="l3H1EK" />
|
||||
<FormattedMessage defaultMessage="Invite your friends" />
|
||||
</h1>
|
||||
<p>
|
||||
<FormattedMessage
|
||||
|
@ -87,7 +87,7 @@ const RelayInfo = () => {
|
||||
{conn instanceof Connection && (
|
||||
<>
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Active Subscriptions" id="p85Uwy" />
|
||||
<FormattedMessage defaultMessage="Active Subscriptions" />
|
||||
</h4>
|
||||
<div className="grow">
|
||||
{conn.ActiveRequests.map(a => (
|
||||
@ -101,7 +101,7 @@ const RelayInfo = () => {
|
||||
{conn instanceof Connection && (
|
||||
<>
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Pending Subscriptions" id="UDYlxu" />
|
||||
<FormattedMessage defaultMessage="Pending Subscriptions" />
|
||||
</h4>
|
||||
<div className="grow">
|
||||
{conn.PendingRequests.map(a => (
|
||||
|
@ -74,7 +74,7 @@ const RelaySettingsPage = () => {
|
||||
{addRelay()}
|
||||
<CloseRelays />
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Other Connections" id="LF5kYT" />
|
||||
<FormattedMessage defaultMessage="Other Connections" />
|
||||
</h3>
|
||||
<div className="flex flex-col g8">
|
||||
{otherConnections.map(a => (
|
||||
@ -114,7 +114,7 @@ export function CloseRelays() {
|
||||
return (
|
||||
<>
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Recommended Relays" id="VL900k" />
|
||||
<FormattedMessage defaultMessage="Recommended Relays" />
|
||||
</h3>
|
||||
{"geolocation" in navigator && (
|
||||
<AsyncButton
|
||||
@ -131,7 +131,7 @@ export function CloseRelays() {
|
||||
console.error(e);
|
||||
}
|
||||
}}>
|
||||
<FormattedMessage defaultMessage="Use Exact Location" id="0HFX0T" />
|
||||
<FormattedMessage defaultMessage="Use Exact Location" />
|
||||
</AsyncButton>
|
||||
)}
|
||||
{relays
|
||||
@ -142,7 +142,7 @@ export function CloseRelays() {
|
||||
<div className="flex justify-between items-center">
|
||||
<div className="bold">{getRelayName(a.url)}</div>
|
||||
<AsyncButton onClick={() => addNewRelay(a.url)}>
|
||||
<FormattedMessage defaultMessage="Add" id="2/2yg+" />
|
||||
<FormattedMessage defaultMessage="Add" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
<div className="flex flex-col g8">
|
||||
|
@ -48,34 +48,32 @@ const WalletSettings = () => {
|
||||
return (
|
||||
<>
|
||||
<h3>
|
||||
<FormattedMessage defaultMessage="Connect Wallet" id="cg1VJ2" />
|
||||
<FormattedMessage defaultMessage="Connect Wallet" />
|
||||
</h3>
|
||||
<div className="flex flex-col gap-3 cursor-pointer">
|
||||
<WalletRow
|
||||
logo={<NWCIcon width={64} height={64} />}
|
||||
name="Nostr Wallet Connect"
|
||||
url="/settings/wallet/nwc"
|
||||
desc={<FormattedMessage defaultMessage="Native nostr wallet connection" id="cG/bKQ" />}
|
||||
desc={<FormattedMessage defaultMessage="Native nostr wallet connection" />}
|
||||
/>
|
||||
<WalletRow
|
||||
logo={<img src={LndLogo} />}
|
||||
name="LND via LNC"
|
||||
url="/settings/wallet/lnc"
|
||||
desc={
|
||||
<FormattedMessage defaultMessage="Connect to your own LND node with Lightning Node Connect" id="aSGz4J" />
|
||||
}
|
||||
desc={<FormattedMessage defaultMessage="Connect to your own LND node with Lightning Node Connect" />}
|
||||
/>
|
||||
<WalletRow
|
||||
logo={<BlueWallet width={64} height={64} />}
|
||||
name="LNDHub"
|
||||
url="/settings/wallet/lndhub"
|
||||
desc={<FormattedMessage defaultMessage="Generic LNDHub wallet (BTCPayServer / Alby / LNBits)" id="0MndVW" />}
|
||||
desc={<FormattedMessage defaultMessage="Generic LNDHub wallet (BTCPayServer / Alby / LNBits)" />}
|
||||
/>
|
||||
{/*<WalletRow
|
||||
logo={<CashuIcon size={64} />}
|
||||
name="Cashu"
|
||||
url="/settings/wallet/cashu"
|
||||
desc={<FormattedMessage defaultMessage="Cashu mint wallet" id="3natuV" />}
|
||||
desc={<FormattedMessage defaultMessage="Cashu mint wallet" />}
|
||||
/>*/}
|
||||
{CONFIG.alby && (
|
||||
<WalletRow
|
||||
@ -86,7 +84,7 @@ const WalletSettings = () => {
|
||||
const alby = getAlbyOAuth();
|
||||
window.location.href = alby.getAuthUrl();
|
||||
}}
|
||||
desc={<FormattedMessage defaultMessage="Alby wallet connection" id="XPB8VV" />}
|
||||
desc={<FormattedMessage defaultMessage="Alby wallet connection" />}
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
|
@ -47,7 +47,7 @@ export default function LNForwardAddress({ handle }: { handle: ManageHandle }) {
|
||||
return (
|
||||
<div>
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Update Lightning Address" id="SOqbe9" />
|
||||
<FormattedMessage defaultMessage="Update Lightning Address" />
|
||||
</h4>
|
||||
<p>
|
||||
<FormattedMessage
|
||||
@ -85,7 +85,7 @@ export default function LNForwardAddress({ handle }: { handle: ManageHandle }) {
|
||||
<option value={ForwardType.ProxyDirect}>Proxy</option>
|
||||
</select>
|
||||
<AsyncButton onClick={() => startUpdate()}>
|
||||
<FormattedMessage defaultMessage="Update" id="BWpuKl" />
|
||||
<FormattedMessage defaultMessage="Update" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
{error && <b className="error">{error}</b>}
|
||||
|
@ -37,7 +37,7 @@ export default function ListHandles() {
|
||||
values={{
|
||||
link: (
|
||||
<Link to="/nostr-address">
|
||||
<FormattedMessage defaultMessage="Buy Handle" id="5oTnfy" />
|
||||
<FormattedMessage defaultMessage="Buy Handle" />
|
||||
</Link>
|
||||
),
|
||||
}}
|
||||
@ -58,13 +58,13 @@ export default function ListHandles() {
|
||||
state: a,
|
||||
})
|
||||
}>
|
||||
<FormattedMessage defaultMessage="Manage" id="0Azlrb" />
|
||||
<FormattedMessage defaultMessage="Manage" />
|
||||
</button>
|
||||
</div>
|
||||
))}
|
||||
{handles.length > 0 && (
|
||||
<button type="button" onClick={() => navigate("/nostr-address")}>
|
||||
<FormattedMessage defaultMessage="Buy Handle" id="5oTnfy" />
|
||||
<FormattedMessage defaultMessage="Buy Handle" />
|
||||
</button>
|
||||
)}
|
||||
{error && <ErrorOrOffline error={error} onRetry={loadHandles} />}
|
||||
|
@ -31,7 +31,7 @@ export default function TransferHandle({ handle }: { handle: ManageHandle }) {
|
||||
return (
|
||||
<div>
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Transfer to Pubkey" id="5u6iEc" />
|
||||
<FormattedMessage defaultMessage="Transfer to Pubkey" />
|
||||
</h4>
|
||||
<div className="flex">
|
||||
<div className="grow">
|
||||
@ -47,7 +47,7 @@ export default function TransferHandle({ handle }: { handle: ManageHandle }) {
|
||||
/>
|
||||
</div>
|
||||
<AsyncButton onClick={() => startTransfer()}>
|
||||
<FormattedMessage defaultMessage="Transfer" id="DtYelJ" />
|
||||
<FormattedMessage defaultMessage="Transfer" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
{error && <b className="error">{error}</b>}
|
||||
|
@ -10,7 +10,7 @@ export default function ManageHandlePage() {
|
||||
return (
|
||||
<>
|
||||
<h3 onClick={() => navigate("/settings/handle")} className="pointer">
|
||||
<FormattedMessage defaultMessage="Nostr Address" id="9pMqYs" />
|
||||
<FormattedMessage defaultMessage="Nostr Address" />
|
||||
</h3>
|
||||
<Outlet />
|
||||
</>
|
||||
|
@ -39,7 +39,7 @@ export function FollowsRelayHealth({
|
||||
<div className="flex flex-col gap-4">
|
||||
{(withTitle ?? true) && (
|
||||
<div className="text-2xl font-semibold">
|
||||
<FormattedMessage defaultMessage="Follows Relay Health" id="XQiFEl" />
|
||||
<FormattedMessage defaultMessage="Follows Relay Health" />
|
||||
</div>
|
||||
)}
|
||||
<div>
|
||||
@ -58,7 +58,7 @@ export function FollowsRelayHealth({
|
||||
className="rounded-xl border border-border-color px-3 py-4"
|
||||
title={
|
||||
<div className="text-lg">
|
||||
<FormattedMessage defaultMessage="Missing Relays" id="4emo2p" />
|
||||
<FormattedMessage defaultMessage="Missing Relays" />
|
||||
</div>
|
||||
}>
|
||||
<div>
|
||||
|
@ -10,29 +10,29 @@ import SyncAccountTool from "./sync-account";
|
||||
|
||||
const ToolMenuItems = [
|
||||
{
|
||||
title: <FormattedMessage defaultMessage="Follow List" id="CM+Cfj" />,
|
||||
title: <FormattedMessage defaultMessage="Follow List" />,
|
||||
items: [
|
||||
{
|
||||
icon: "trash",
|
||||
iconBg: "bg-red-500",
|
||||
message: <FormattedMessage defaultMessage="Prune Follow List" id="hF6IN2" />,
|
||||
message: <FormattedMessage defaultMessage="Prune Follow List" />,
|
||||
path: "prune-follows",
|
||||
},
|
||||
{
|
||||
icon: "medical-cross",
|
||||
iconBg: "bg-green-800",
|
||||
message: <FormattedMessage defaultMessage="Follows Relay Health" id="XQiFEl" />,
|
||||
message: <FormattedMessage defaultMessage="Follows Relay Health" />,
|
||||
path: "follows-relay-health",
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: <FormattedMessage defaultMessage="Account Data" id="IIOul1" />,
|
||||
title: <FormattedMessage defaultMessage="Account Data" />,
|
||||
items: [
|
||||
{
|
||||
icon: "repost",
|
||||
iconBg: "bg-blue-800",
|
||||
message: <FormattedMessage defaultMessage="Sync Account" id="hMQmIw" />,
|
||||
message: <FormattedMessage defaultMessage="Sync Account" />,
|
||||
path: "sync-account",
|
||||
},
|
||||
],
|
||||
@ -45,7 +45,7 @@ export const ToolsPages = [
|
||||
element: (
|
||||
<>
|
||||
<h2>
|
||||
<FormattedMessage defaultMessage="Tools" id="nUT0Lv" />
|
||||
<FormattedMessage defaultMessage="Tools" />
|
||||
</h2>
|
||||
<SettingsMenuComponent menu={ToolMenuItems} />
|
||||
</>
|
||||
|
@ -99,7 +99,7 @@ export function PruneFollowList() {
|
||||
onChange={e => setUnfollow(v => (e.target.checked ? dedupe([...v, k]) : v.filter(a => a !== k)))}
|
||||
checked={unfollow.includes(k)}
|
||||
/>
|
||||
<FormattedMessage defaultMessage="Unfollow" id="izWS4J" />
|
||||
<FormattedMessage defaultMessage="Unfollow" />
|
||||
</div>
|
||||
);
|
||||
}
|
||||
@ -107,7 +107,7 @@ export function PruneFollowList() {
|
||||
return (
|
||||
<div className="flex flex-col gap-4">
|
||||
<div className="text-2xl font-semibold">
|
||||
<FormattedMessage defaultMessage="Prune follow list" id="CM0k0d" />
|
||||
<FormattedMessage defaultMessage="Prune follow list" />
|
||||
</div>
|
||||
<p>
|
||||
<FormattedMessage
|
||||
@ -127,7 +127,7 @@ export function PruneFollowList() {
|
||||
</div>
|
||||
<FollowsRelayHealth withTitle={false} popularRelays={false} missingRelaysActions={k => personToggle(k)} />
|
||||
<AsyncButton onClick={fetchLastPosts}>
|
||||
<FormattedMessage defaultMessage="Compute prune list" id="bJ+wrA" />
|
||||
<FormattedMessage defaultMessage="Compute prune list" />
|
||||
</AsyncButton>
|
||||
{getStatus()}
|
||||
<div className="flex flex-col gap-1">
|
||||
@ -162,7 +162,7 @@ export function PruneFollowList() {
|
||||
/>
|
||||
</p>
|
||||
<AsyncButton onClick={publishFollowList}>
|
||||
<FormattedMessage defaultMessage="Save" id="jvo0vs" />
|
||||
<FormattedMessage defaultMessage="Save" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -33,7 +33,7 @@ export default function SyncAccountTool() {
|
||||
return (
|
||||
<>
|
||||
<p>
|
||||
<FormattedMessage defaultMessage="Sync all events for your profile into local cache" id="+QM0PJ" />
|
||||
<FormattedMessage defaultMessage="Sync all events for your profile into local cache" />
|
||||
</p>
|
||||
|
||||
{results.length > 0 && (
|
||||
@ -59,7 +59,7 @@ export default function SyncAccountTool() {
|
||||
</h4>
|
||||
)}
|
||||
<AsyncButton onClick={start}>
|
||||
<FormattedMessage defaultMessage="Start" id="mOFG3K" />
|
||||
<FormattedMessage defaultMessage="Start" />
|
||||
</AsyncButton>
|
||||
</>
|
||||
);
|
||||
|
@ -55,7 +55,7 @@ const ConnectLNC = () => {
|
||||
return (
|
||||
<>
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Enter pairing phrase" id="Z4BMCZ" />
|
||||
<FormattedMessage defaultMessage="Enter pairing phrase" />
|
||||
</h4>
|
||||
<div className="flex">
|
||||
<div className="grow mr10">
|
||||
@ -68,7 +68,7 @@ const ConnectLNC = () => {
|
||||
/>
|
||||
</div>
|
||||
<AsyncButton onClick={() => tryConnect(unwrap(pairingPhrase))} disabled={!pairingPhrase}>
|
||||
<FormattedMessage defaultMessage="Connect" id="+vVZ/G" />
|
||||
<FormattedMessage defaultMessage="Connect" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
{error && <b className="error p10">{error}</b>}
|
||||
@ -90,7 +90,7 @@ const ConnectLNC = () => {
|
||||
/>
|
||||
</h3>
|
||||
<h4>
|
||||
<FormattedMessage defaultMessage="Enter password" id="2LbrkB" />
|
||||
<FormattedMessage defaultMessage="Enter password" />
|
||||
</h4>
|
||||
<div className="flex w-max">
|
||||
<div className="grow mr10">
|
||||
@ -105,7 +105,7 @@ const ConnectLNC = () => {
|
||||
<AsyncButton
|
||||
onClick={() => setLNCPassword(unwrap(walletPassword))}
|
||||
disabled={(walletPassword?.length ?? 0) < 8}>
|
||||
<FormattedMessage defaultMessage="Save" id="jvo0vs" />
|
||||
<FormattedMessage defaultMessage="Save" />
|
||||
</AsyncButton>
|
||||
</div>
|
||||
</div>
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user