eslint: sort imports & exports
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Martti Malmi 2024-01-04 19:01:18 +02:00
parent 046d4d97bd
commit 3fe3c7a98d
267 changed files with 1281 additions and 1037 deletions

View File

@ -6,7 +6,7 @@ module.exports = {
"plugin:react-hooks/recommended", "plugin:react-hooks/recommended",
], ],
parser: "@typescript-eslint/parser", parser: "@typescript-eslint/parser",
plugins: ["@typescript-eslint", "formatjs", "react-refresh"], plugins: ["@typescript-eslint", "formatjs", "react-refresh", "simple-import-sort"],
rules: { rules: {
"formatjs/enforce-id": [ "formatjs/enforce-id": [
"error", "error",
@ -17,6 +17,8 @@ module.exports = {
"react/react-in-jsx-scope": "off", "react/react-in-jsx-scope": "off",
"react-hooks/exhaustive-deps": "off", "react-hooks/exhaustive-deps": "off",
"react-refresh/only-export-components": "warn", "react-refresh/only-export-components": "warn",
"simple-import-sort/imports": "error",
"simple-import-sort/exports": "error"
}, },
root: true, root: true,
ignorePatterns: ["build/", "*.test.ts", "*.js"], ignorePatterns: ["build/", "*.test.ts", "*.js"],

View File

@ -102,6 +102,7 @@
"eslint-plugin-react": "^7.33.2", "eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.5", "eslint-plugin-react-refresh": "^0.4.5",
"eslint-plugin-simple-import-sort": "^10.0.0",
"postcss": "^8.4.31", "postcss": "^8.4.31",
"postcss-preset-env": "^9.2.0", "postcss-preset-env": "^9.2.0",
"prettier": "2.8.3", "prettier": "2.8.3",

View File

@ -1,5 +1,6 @@
import { NostrEvent } from "@snort/system";
import { FeedCache } from "@snort/shared"; import { FeedCache } from "@snort/shared";
import { NostrEvent } from "@snort/system";
import { db } from "@/Db"; import { db } from "@/Db";
export class ChatCache extends FeedCache<NostrEvent> { export class ChatCache extends FeedCache<NostrEvent> {

View File

@ -1,7 +1,8 @@
import { FeedCache } from "@snort/shared"; import { FeedCache } from "@snort/shared";
import { db, EventInteraction } from "@/Db"; import { db, EventInteraction } from "@/Db";
import { LoginStore } from "@/Utils/Login";
import { sha256 } from "@/Utils"; import { sha256 } from "@/Utils";
import { LoginStore } from "@/Utils/Login";
export class EventInteractionCache extends FeedCache<EventInteraction> { export class EventInteractionCache extends FeedCache<EventInteraction> {
constructor() { constructor() {

View File

@ -1,9 +1,11 @@
import { db } from "@/Db";
import { unixNowMs } from "@snort/shared"; import { unixNowMs } from "@snort/shared";
import { EventKind, RequestBuilder, socialGraphInstance, TaggedNostrEvent } from "@snort/system"; import { EventKind, RequestBuilder, socialGraphInstance, TaggedNostrEvent } from "@snort/system";
import { RefreshFeedCache } from "./RefreshFeedCache";
import { db } from "@/Db";
import { LoginSession } from "@/Utils/Login"; import { LoginSession } from "@/Utils/Login";
import { RefreshFeedCache } from "./RefreshFeedCache";
export class FollowListCache extends RefreshFeedCache<TaggedNostrEvent> { export class FollowListCache extends RefreshFeedCache<TaggedNostrEvent> {
constructor() { constructor() {
super("FollowListCache", db.followLists); super("FollowListCache", db.followLists);

View File

@ -1,11 +1,12 @@
import debug from "debug";
import { EventKind, RequestBuilder, SystemInterface, TaggedNostrEvent } from "@snort/system";
import { unixNow, unixNowMs } from "@snort/shared"; import { unixNow, unixNowMs } from "@snort/shared";
import { EventKind, RequestBuilder, SystemInterface, TaggedNostrEvent } from "@snort/system";
import debug from "debug";
import { db } from "@/Db"; import { db } from "@/Db";
import { RefreshFeedCache, TWithCreated } from "./RefreshFeedCache";
import { LoginSession } from "@/Utils/Login";
import { Day, Hour } from "@/Utils/Const"; import { Day, Hour } from "@/Utils/Const";
import { LoginSession } from "@/Utils/Login";
import { RefreshFeedCache, TWithCreated } from "./RefreshFeedCache";
const WindowSize = Hour * 6; const WindowSize = Hour * 6;
const MaxCacheWindow = Day * 7; const MaxCacheWindow = Day * 7;

View File

@ -1,9 +1,11 @@
import { EventKind, EventPublisher, RequestBuilder, TaggedNostrEvent } from "@snort/system"; import { EventKind, EventPublisher, RequestBuilder, TaggedNostrEvent } from "@snort/system";
import { UnwrappedGift, db } from "@/Db";
import { db,UnwrappedGift } from "@/Db";
import { findTag, unwrap } from "@/Utils"; import { findTag, unwrap } from "@/Utils";
import { RefreshFeedCache } from "./RefreshFeedCache";
import { LoginSession, LoginSessionType } from "@/Utils/Login"; import { LoginSession, LoginSessionType } from "@/Utils/Login";
import { RefreshFeedCache } from "./RefreshFeedCache";
export class GiftWrapCache extends RefreshFeedCache<UnwrappedGift> { export class GiftWrapCache extends RefreshFeedCache<UnwrappedGift> {
constructor() { constructor() {
super("GiftWrapCache", db.gifts); super("GiftWrapCache", db.gifts);

View File

@ -1,9 +1,11 @@
import { EventKind, NostrEvent, RequestBuilder, TaggedNostrEvent } from "@snort/system";
import { RefreshFeedCache, TWithCreated } from "./RefreshFeedCache";
import { LoginSession } from "@/Utils/Login";
import { NostrEventForSession, db } from "@/Db";
import { Day } from "@/Utils/Const";
import { unixNow } from "@snort/shared"; import { unixNow } from "@snort/shared";
import { EventKind, NostrEvent, RequestBuilder, TaggedNostrEvent } from "@snort/system";
import { db,NostrEventForSession } from "@/Db";
import { Day } from "@/Utils/Const";
import { LoginSession } from "@/Utils/Login";
import { RefreshFeedCache, TWithCreated } from "./RefreshFeedCache";
export class NotificationsCache extends RefreshFeedCache<NostrEventForSession> { export class NotificationsCache extends RefreshFeedCache<NostrEventForSession> {
#kinds = [EventKind.TextNote, EventKind.Reaction, EventKind.Repost, EventKind.ZapReceipt]; #kinds = [EventKind.TextNote, EventKind.Reaction, EventKind.Repost, EventKind.ZapReceipt];

View File

@ -1,6 +1,7 @@
import { Payment, db } from "@/Db";
import { FeedCache } from "@snort/shared"; import { FeedCache } from "@snort/shared";
import { db,Payment } from "@/Db";
export class Payments extends FeedCache<Payment> { export class Payments extends FeedCache<Payment> {
constructor() { constructor() {
super("PaymentsCache", db.payments); super("PaymentsCache", db.payments);

View File

@ -1,5 +1,6 @@
import { FeedCache } from "@snort/shared"; import { FeedCache } from "@snort/shared";
import { EventPublisher, RequestBuilder, TaggedNostrEvent } from "@snort/system"; import { EventPublisher, RequestBuilder, TaggedNostrEvent } from "@snort/system";
import { LoginSession } from "@/Utils/Login"; import { LoginSession } from "@/Utils/Login";
export type TWithCreated<T> = (T | Readonly<T>) & { created_at: number }; export type TWithCreated<T> = (T | Readonly<T>) & { created_at: number };

View File

@ -1,13 +1,13 @@
import { UserProfileCache, UserRelaysCache, RelayMetricCache } from "@snort/system"; import { RelayMetricCache,UserProfileCache, UserRelaysCache } from "@snort/system";
import { SnortSystemDb } from "@snort/system-web"; import { SnortSystemDb } from "@snort/system-web";
import { EventInteractionCache } from "./EventInteractionCache";
import { ChatCache } from "./ChatCache"; import { ChatCache } from "./ChatCache";
import { Payments } from "./PaymentsCache"; import { EventInteractionCache } from "./EventInteractionCache";
import { FollowListCache } from "./FollowListCache";
import { FollowsFeedCache } from "./FollowsFeed";
import { GiftWrapCache } from "./GiftWrapCache"; import { GiftWrapCache } from "./GiftWrapCache";
import { NotificationsCache } from "./Notifications"; import { NotificationsCache } from "./Notifications";
import { FollowsFeedCache } from "./FollowsFeed"; import { Payments } from "./PaymentsCache";
import { FollowListCache } from "./FollowListCache";
export const SystemDb = new SnortSystemDb(); export const SystemDb = new SnortSystemDb();
export const UserCache = new UserProfileCache(SystemDb.users); export const UserCache = new UserProfileCache(SystemDb.users);

View File

@ -1,8 +1,10 @@
import "./AsyncButton.css"; import "./AsyncButton.css";
import classNames from "classnames";
import React, { ForwardedRef } from "react"; import React, { ForwardedRef } from "react";
import Spinner from "@/Components/Icons/Spinner"; import Spinner from "@/Components/Icons/Spinner";
import useLoading from "@/Hooks/useLoading"; import useLoading from "@/Hooks/useLoading";
import classNames from "classnames";
export interface AsyncButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> { export interface AsyncButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
onClick?: (e: React.MouseEvent) => Promise<void> | void; onClick?: (e: React.MouseEvent) => Promise<void> | void;

View File

@ -1,6 +1,6 @@
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import useLoading from "@/Hooks/useLoading";
import Spinner from "@/Components/Icons/Spinner"; import Spinner from "@/Components/Icons/Spinner";
import useLoading from "@/Hooks/useLoading";
export type AsyncIconProps = React.HTMLProps<HTMLDivElement> & { export type AsyncIconProps = React.HTMLProps<HTMLDivElement> & {
iconName: string; iconName: string;

View File

@ -1,4 +1,5 @@
import "./BackButton.css"; import "./BackButton.css";
import { useIntl } from "react-intl"; import { useIntl } from "react-intl";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";

View File

@ -1,6 +1,7 @@
import Icon from "@/Components/Icons/Icon";
import classNames from "classnames"; import classNames from "classnames";
import Icon from "@/Components/Icons/Icon";
export default function CloseButton({ onClick, className }: { onClick?: () => void; className?: string }) { export default function CloseButton({ onClick, className }: { onClick?: () => void; className?: string }) {
return ( return (
<div <div

View File

@ -1,7 +1,8 @@
import classNames from "classnames"; import classNames from "classnames";
import Icon, { IconProps } from "@/Components/Icons/Icon";
import type { ReactNode } from "react"; import type { ReactNode } from "react";
import Icon, { IconProps } from "@/Components/Icons/Icon";
interface IconButtonProps { interface IconButtonProps {
onClick?: () => void; onClick?: () => void;
icon: IconProps; icon: IconProps;

View File

@ -1,8 +1,9 @@
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { logout } from "@/Utils/Login";
import useLogin from "@/Hooks/useLogin"; import useLogin from "@/Hooks/useLogin";
import { logout } from "@/Utils/Login";
import messages from "../messages"; import messages from "../messages";
export default function LogoutButton() { export default function LogoutButton() {

View File

@ -1,8 +1,8 @@
import { useState, ReactNode } from "react";
import classNames from "classnames"; import classNames from "classnames";
import { ReactNode,useState } from "react";
import Icon from "@/Components/Icons/Icon";
import ShowMore from "@/Components/Event/ShowMore"; import ShowMore from "@/Components/Event/ShowMore";
import Icon from "@/Components/Icons/Icon";
interface CollapsedProps { interface CollapsedProps {
text?: string; text?: string;

View File

@ -1,9 +1,10 @@
import { useState } from "react"; import { useState } from "react";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import AwardIcon from "./Award";
import Modal from "../Modal/Modal";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import CloseButton from "../Button/CloseButton"; import CloseButton from "../Button/CloseButton";
import Modal from "../Modal/Modal";
import AwardIcon from "./Award";
export function LeaderBadge() { export function LeaderBadge() {
const [showModal, setShowModal] = useState(false); const [showModal, setShowModal] = useState(false);

View File

@ -1,5 +1,7 @@
import "./Copy.css"; import "./Copy.css";
import classNames from "classnames"; import classNames from "classnames";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import { useCopy } from "@/Hooks/useCopy"; import { useCopy } from "@/Hooks/useCopy";

View File

@ -1,10 +1,11 @@
import "./CashuNuts.css"; import "./CashuNuts.css";
import { useUserProfile } from "@snort/system-react";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { FormattedMessage, FormattedNumber } from "react-intl"; import { FormattedMessage, FormattedNumber } from "react-intl";
import { useUserProfile } from "@snort/system-react";
import useLogin from "@/Hooks/useLogin";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import useLogin from "@/Hooks/useLogin";
interface Token { interface Token {
token: Array<{ token: Array<{

View File

@ -1,6 +1,7 @@
import { Link } from "react-router-dom";
import "./Hashtag.css"; import "./Hashtag.css";
import { Link } from "react-router-dom";
const Hashtag = ({ tag }: { tag: string }) => { const Hashtag = ({ tag }: { tag: string }) => {
return ( return (
<span className="hashtag"> <span className="hashtag">

View File

@ -1,26 +1,27 @@
import { import { ReactNode } from "react";
YoutubeUrlRegex,
TidalRegex, import AppleMusicEmbed from "@/Components/Embed/AppleMusicEmbed";
SoundCloudRegex, import LinkPreview from "@/Components/Embed/LinkPreview";
MixCloudRegex, import MagnetLink from "@/Components/Embed/MagnetLink";
SpotifyRegex,
TwitchRegex,
AppleMusicRegex,
NostrNestsRegex,
WavlakeRegex,
} from "@/Utils/Const";
import { magnetURIDecode } from "@/Utils";
import SoundCloudEmbed from "@/Components/Embed/SoundCloudEmded";
import MixCloudEmbed from "@/Components/Embed/MixCloudEmbed"; import MixCloudEmbed from "@/Components/Embed/MixCloudEmbed";
import NostrLink from "@/Components/Embed/NostrLink";
import SoundCloudEmbed from "@/Components/Embed/SoundCloudEmded";
import SpotifyEmbed from "@/Components/Embed/SpotifyEmbed"; import SpotifyEmbed from "@/Components/Embed/SpotifyEmbed";
import TidalEmbed from "@/Components/Embed/TidalEmbed"; import TidalEmbed from "@/Components/Embed/TidalEmbed";
import TwitchEmbed from "@/Components/Embed/TwitchEmbed"; import TwitchEmbed from "@/Components/Embed/TwitchEmbed";
import AppleMusicEmbed from "@/Components/Embed/AppleMusicEmbed";
import WavlakeEmbed from "@/Components/Embed/WavlakeEmbed"; import WavlakeEmbed from "@/Components/Embed/WavlakeEmbed";
import LinkPreview from "@/Components/Embed/LinkPreview"; import { magnetURIDecode } from "@/Utils";
import NostrLink from "@/Components/Embed/NostrLink"; import {
import MagnetLink from "@/Components/Embed/MagnetLink"; AppleMusicRegex,
import { ReactNode } from "react"; MixCloudRegex,
NostrNestsRegex,
SoundCloudRegex,
SpotifyRegex,
TidalRegex,
TwitchRegex,
WavlakeRegex,
YoutubeUrlRegex,
} from "@/Utils/Const";
interface HypeTextProps { interface HypeTextProps {
link: string; link: string;

View File

@ -1,12 +1,13 @@
import "./Invoice.css"; import "./Invoice.css";
import { useState } from "react";
import { useIntl, FormattedMessage } from "react-intl";
import { useMemo } from "react";
import { decodeInvoice } from "@snort/shared"; import { decodeInvoice } from "@snort/shared";
import classNames from "classnames"; import classNames from "classnames";
import { useState } from "react";
import { useMemo } from "react";
import { FormattedMessage,useIntl } from "react-intl";
import SendSats from "@/Components/SendSats/SendSats";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import SendSats from "@/Components/SendSats/SendSats";
import { useWallet } from "@/Wallet"; import { useWallet } from "@/Wallet";
import messages from "../messages"; import messages from "../messages";

View File

@ -1,10 +1,11 @@
import "./LinkPreview.css"; import "./LinkPreview.css";
import { CSSProperties, useEffect, useState } from "react"; import { CSSProperties, useEffect, useState } from "react";
import { MediaElement } from "@/Components/Embed/MediaElement";
import Spinner from "@/Components/Icons/Spinner"; import Spinner from "@/Components/Icons/Spinner";
import SnortApi, { LinkPreviewData } from "@/External/SnortApi"; import SnortApi, { LinkPreviewData } from "@/External/SnortApi";
import useImgProxy from "@/Hooks/useImgProxy"; import useImgProxy from "@/Hooks/useImgProxy";
import { MediaElement } from "@/Components/Embed/MediaElement";
async function fetchUrlPreviewInfo(url: string) { async function fetchUrlPreviewInfo(url: string) {
const api = new SnortApi(); const api = new SnortApi();

View File

@ -1,9 +1,10 @@
import { IMeta } from "@snort/system";
import classNames from "classnames";
import React, { CSSProperties, useEffect, useMemo, useRef } from "react";
import { useInView } from "react-intersection-observer";
import { ProxyImg } from "@/Components/ProxyImg"; import { ProxyImg } from "@/Components/ProxyImg";
import useImgProxy from "@/Hooks/useImgProxy"; import useImgProxy from "@/Hooks/useImgProxy";
import { IMeta } from "@snort/system";
import React, { CSSProperties, useEffect, useMemo, useRef } from "react";
import classNames from "classnames";
import { useInView } from "react-intersection-observer";
interface MediaElementProps { interface MediaElementProps {
mime: string; mime: string;

View File

@ -1,10 +1,10 @@
import { NostrLink, NostrPrefix } from "@snort/system"; import { NostrLink, NostrPrefix } from "@snort/system";
import { useUserProfile } from "@snort/system-react"; import { useUserProfile } from "@snort/system-react";
import { useCallback, useRef, useState } from "react";
import DisplayName from "@/Components/User/DisplayName"; import DisplayName from "@/Components/User/DisplayName";
import { ProfileCard } from "@/Components/User/ProfileCard"; import { ProfileCard } from "@/Components/User/ProfileCard";
import { ProfileLink } from "@/Components/User/ProfileLink"; import { ProfileLink } from "@/Components/User/ProfileLink";
import { useCallback, useRef, useState } from "react";
export default function Mention({ link }: { link: NostrLink }) { export default function Mention({ link }: { link: NostrLink }) {
const profile = useUserProfile(link.id); const profile = useUserProfile(link.id);

View File

@ -1,5 +1,5 @@
import { MixCloudRegex } from "@/Utils/Const";
import useLogin from "@/Hooks/useLogin"; import useLogin from "@/Hooks/useLogin";
import { MixCloudRegex } from "@/Utils/Const";
const MixCloudEmbed = ({ link }: { link: string }) => { const MixCloudEmbed = ({ link }: { link: string }) => {
const feedPath = (MixCloudRegex.test(link) && RegExp.$1) + "%2F" + (MixCloudRegex.test(link) && RegExp.$2); const feedPath = (MixCloudRegex.test(link) && RegExp.$1) + "%2F" + (MixCloudRegex.test(link) && RegExp.$2);

View File

@ -1,5 +1,5 @@
import { Link } from "react-router-dom";
import { NostrPrefix, tryParseNostrLink } from "@snort/system"; import { NostrPrefix, tryParseNostrLink } from "@snort/system";
import { Link } from "react-router-dom";
import Mention from "@/Components/Embed/Mention"; import Mention from "@/Components/Embed/Mention";
import NoteQuote from "@/Components/Event/NoteQuote"; import NoteQuote from "@/Components/Event/NoteQuote";

View File

@ -1,15 +1,15 @@
import { LNURL } from "@snort/shared";
import { NostrEvent } from "@snort/system"; import { NostrEvent } from "@snort/system";
import { FormattedMessage, FormattedNumber } from "react-intl"; import { FormattedMessage, FormattedNumber } from "react-intl";
import { LNURL } from "@snort/shared";
import { dedupe, findTag, hexToBech32, getDisplayName } from "@/Utils";
import FollowListBase from "@/Components/User/FollowListBase";
import AsyncButton from "@/Components/Button/AsyncButton";
import { useWallet } from "@/Wallet";
import { Toastore } from "@/Components/Toaster/Toaster";
import { UserCache } from "@/Cache"; import { UserCache } from "@/Cache";
import useLogin from "@/Hooks/useLogin"; import AsyncButton from "@/Components/Button/AsyncButton";
import { Toastore } from "@/Components/Toaster/Toaster";
import FollowListBase from "@/Components/User/FollowListBase";
import useEventPublisher from "@/Hooks/useEventPublisher"; import useEventPublisher from "@/Hooks/useEventPublisher";
import useLogin from "@/Hooks/useLogin";
import { dedupe, findTag, getDisplayName,hexToBech32 } from "@/Utils";
import { useWallet } from "@/Wallet";
import { WalletInvoiceState } from "@/Wallet"; import { WalletInvoiceState } from "@/Wallet";
export default function PubkeyList({ ev, className }: { ev: NostrEvent; className?: string }) { export default function PubkeyList({ ev, className }: { ev: NostrEvent; className?: string }) {

View File

@ -1,4 +1,5 @@
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { TidalRegex } from "@/Utils/Const"; import { TidalRegex } from "@/Utils/Const";
// Re-use dom parser across instances of TidalEmbed // Re-use dom parser across instances of TidalEmbed

View File

@ -1,10 +1,11 @@
import "./ZapstrEmbed.css"; import "./ZapstrEmbed.css";
import { Link } from "react-router-dom";
import { NostrEvent, NostrLink } from "@snort/system"; import { NostrEvent, NostrLink } from "@snort/system";
import { FormattedMessage } from "react-intl";
import { Link } from "react-router-dom";
import { ProxyImg } from "@/Components/ProxyImg"; import { ProxyImg } from "@/Components/ProxyImg";
import ProfileImage from "@/Components/User/ProfileImage"; import ProfileImage from "@/Components/User/ProfileImage";
import { FormattedMessage } from "react-intl";
export default function ZapstrEmbed({ ev }: { ev: NostrEvent }) { export default function ZapstrEmbed({ ev }: { ev: NostrEvent }) {
const media = ev.tags.find(a => a[0] === "media"); const media = ev.tags.find(a => a[0] === "media");

View File

@ -1,8 +1,10 @@
import { OfflineError } from "@snort/shared"; import { OfflineError } from "@snort/shared";
import { Offline } from "./Offline";
import classNames from "classnames"; import classNames from "classnames";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import { Offline } from "./Offline";
export function ErrorOrOffline({ export function ErrorOrOffline({
error, error,
onRetry, onRetry,

View File

@ -1,33 +1,34 @@
import "./NoteCreator.css"; import "./NoteCreator.css";
import { FormattedMessage, useIntl } from "react-intl";
import { fetchNip05Pubkey, unixNow } from "@snort/shared";
import { EventBuilder, EventKind, NostrLink, NostrPrefix, TaggedNostrEvent, tryParseNostrLink } from "@snort/system"; import { EventBuilder, EventKind, NostrLink, NostrPrefix, TaggedNostrEvent, tryParseNostrLink } from "@snort/system";
import classNames from "classnames"; import classNames from "classnames";
import { ClipboardEventHandler, DragEvent, useEffect } from "react";
import { FormattedMessage, useIntl } from "react-intl";
import { TagsInput } from "react-tag-input-component"; import { TagsInput } from "react-tag-input-component";
import Icon from "@/Components/Icons/Icon";
import useEventPublisher from "@/Hooks/useEventPublisher";
import { appendDedupe, openFile, trackEvent } from "@/Utils";
import Textarea from "@/Components/Textarea/Textarea";
import Modal from "@/Components/Modal/Modal";
import ProfileImage from "@/Components/User/ProfileImage";
import useFileUpload from "@/Utils/Upload";
import Note from "@/Components/Event/Note";
import { ClipboardEventHandler, DragEvent, useEffect } from "react";
import useLogin from "@/Hooks/useLogin";
import AsyncButton from "@/Components/Button/AsyncButton"; import AsyncButton from "@/Components/Button/AsyncButton";
import { AsyncIcon } from "@/Components/Button/AsyncIcon"; import { AsyncIcon } from "@/Components/Button/AsyncIcon";
import { fetchNip05Pubkey, unixNow } from "@snort/shared";
import { ZapTarget } from "@/Utils/Zapper";
import { useNoteCreator } from "@/State/NoteCreator";
import FileUploadProgress from "../FileUpload";
import { ToggleSwitch } from "@/Components/Icons/Toggle";
import { sendEventToRelays } from "@/Components/Event/Create/util";
import { TrendingHashTagsLine } from "@/Components/Event/Create/TrendingHashTagsLine";
import { Toastore } from "@/Components/Toaster/Toaster";
import { OkResponseRow } from "./OkResponseRow";
import CloseButton from "@/Components/Button/CloseButton"; import CloseButton from "@/Components/Button/CloseButton";
import { TrendingHashTagsLine } from "@/Components/Event/Create/TrendingHashTagsLine";
import { sendEventToRelays } from "@/Components/Event/Create/util";
import Note from "@/Components/Event/Note";
import Icon from "@/Components/Icons/Icon";
import { ToggleSwitch } from "@/Components/Icons/Toggle";
import Modal from "@/Components/Modal/Modal";
import Textarea from "@/Components/Textarea/Textarea";
import { Toastore } from "@/Components/Toaster/Toaster";
import ProfileImage from "@/Components/User/ProfileImage";
import useEventPublisher from "@/Hooks/useEventPublisher";
import useLogin from "@/Hooks/useLogin";
import { useNoteCreator } from "@/State/NoteCreator";
import { appendDedupe, openFile, trackEvent } from "@/Utils";
import useFileUpload from "@/Utils/Upload";
import { GetPowWorker } from "@/Utils/wasm"; import { GetPowWorker } from "@/Utils/wasm";
import { ZapTarget } from "@/Utils/Zapper";
import FileUploadProgress from "../FileUpload";
import { OkResponseRow } from "./OkResponseRow";
export function NoteCreator() { export function NoteCreator() {
const { formatMessage } = useIntl(); const { formatMessage } = useIntl();

View File

@ -1,14 +1,15 @@
import { useRef, useMemo } from "react";
import { useLocation } from "react-router-dom";
import classNames from "classnames"; import classNames from "classnames";
import { useMemo,useRef } from "react";
import { FormattedMessage } from "react-intl";
import { useLocation } from "react-router-dom";
import { isFormElement } from "@/Utils"; import Icon from "@/Components/Icons/Icon";
import useKeyboardShortcut from "@/Hooks/useKeyboardShortcut"; import useKeyboardShortcut from "@/Hooks/useKeyboardShortcut";
import useLogin from "@/Hooks/useLogin"; import useLogin from "@/Hooks/useLogin";
import Icon from "@/Components/Icons/Icon";
import { useNoteCreator } from "@/State/NoteCreator"; import { useNoteCreator } from "@/State/NoteCreator";
import { isFormElement } from "@/Utils";
import { NoteCreator } from "./NoteCreator"; import { NoteCreator } from "./NoteCreator";
import { FormattedMessage } from "react-intl";
export const NoteCreatorButton = ({ export const NoteCreatorButton = ({
className, className,

View File

@ -1,16 +1,17 @@
import AsyncButton from "@/Components/Button/AsyncButton"; import { sanitizeRelayUrl,unwrap } from "@snort/shared";
import IconButton from "@/Components/Button/IconButton";
import useEventPublisher from "@/Hooks/useEventPublisher";
import useLogin from "@/Hooks/useLogin";
import Icon from "@/Components/Icons/Icon";
import { removeRelay } from "@/Utils/Login";
import { saveRelays } from "@/Pages/settings/Relays";
import { getRelayName } from "@/Utils";
import { unwrap, sanitizeRelayUrl } from "@snort/shared";
import { OkResponse } from "@snort/system"; import { OkResponse } from "@snort/system";
import { useState } from "react"; import { useState } from "react";
import { useIntl } from "react-intl"; import { useIntl } from "react-intl";
import AsyncButton from "@/Components/Button/AsyncButton";
import IconButton from "@/Components/Button/IconButton";
import Icon from "@/Components/Icons/Icon";
import useEventPublisher from "@/Hooks/useEventPublisher";
import useLogin from "@/Hooks/useLogin";
import { saveRelays } from "@/Pages/settings/Relays";
import { getRelayName } from "@/Utils";
import { removeRelay } from "@/Utils/Login";
export function OkResponseRow({ rsp, close }: { rsp: OkResponse; close: () => void }) { export function OkResponseRow({ rsp, close }: { rsp: OkResponse; close: () => void }) {
const [r, setResult] = useState(rsp); const [r, setResult] = useState(rsp);
const { formatMessage } = useIntl(); const { formatMessage } = useIntl();

View File

@ -1,8 +1,9 @@
import { useLocale } from "@/IntlProvider";
import NostrBandApi from "@/External/NostrBand";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import useCachedFetch from "@/Hooks/useCachedFetch";
import { ErrorOrOffline } from "@/Components/ErrorOrOffline"; import { ErrorOrOffline } from "@/Components/ErrorOrOffline";
import NostrBandApi from "@/External/NostrBand";
import useCachedFetch from "@/Hooks/useCachedFetch";
import { useLocale } from "@/IntlProvider";
export function TrendingHashTagsLine(props: { onClick: (tag: string) => void }) { export function TrendingHashTagsLine(props: { onClick: (tag: string) => void }) {
const { lang } = useLocale(); const { lang } = useLocale();

View File

@ -1,5 +1,5 @@
import { NostrEvent, OkResponse, SystemInterface } from "@snort/system";
import { removeUndefined } from "@snort/shared"; import { removeUndefined } from "@snort/shared";
import { NostrEvent, OkResponse, SystemInterface } from "@snort/system";
export async function sendEventToRelays( export async function sendEventToRelays(
system: SystemInterface, system: SystemInterface,

View File

@ -1,7 +1,8 @@
import messages from "../messages";
import { useState } from "react"; import { useState } from "react";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import messages from "../messages";
const HiddenNote = ({ children }: { children: React.ReactNode }) => { const HiddenNote = ({ children }: { children: React.ReactNode }) => {
const [show, setShow] = useState(false); const [show, setShow] = useState(false);
return show ? ( return show ? (

View File

@ -1,17 +1,19 @@
import "./LongFormText.css"; import "./LongFormText.css";
import React, { CSSProperties, useCallback, useRef, useState } from "react";
import { FormattedMessage, FormattedNumber } from "react-intl";
import { NostrLink, TaggedNostrEvent } from "@snort/system"; import { NostrLink, TaggedNostrEvent } from "@snort/system";
import { useEventReactions } from "@snort/system-react"; import { useEventReactions } from "@snort/system-react";
import classNames from "classnames";
import React, { CSSProperties, useCallback, useRef, useState } from "react";
import { FormattedMessage, FormattedNumber } from "react-intl";
import { findTag } from "@/Utils";
import Text from "@/Components/Text/Text"; import Text from "@/Components/Text/Text";
import { Markdown } from "./Markdown";
import useImgProxy from "@/Hooks/useImgProxy";
import ProfilePreview from "@/Components/User/ProfilePreview"; import ProfilePreview from "@/Components/User/ProfilePreview";
import useImgProxy from "@/Hooks/useImgProxy";
import { findTag } from "@/Utils";
import { Markdown } from "./Markdown";
import NoteFooter from "./NoteFooter"; import NoteFooter from "./NoteFooter";
import NoteTime from "./NoteTime"; import NoteTime from "./NoteTime";
import classNames from "classnames";
interface LongFormTextProps { interface LongFormTextProps {
ev: TaggedNostrEvent; ev: TaggedNostrEvent;

View File

@ -1,13 +1,13 @@
import "./Markdown.css"; import "./Markdown.css";
import { ReactNode, forwardRef, useMemo } from "react";
import { transformText } from "@snort/system"; import { transformText } from "@snort/system";
import { marked, Token } from "marked"; import { marked, Token } from "marked";
import markedFootnote, { Footnote, FootnoteRef,Footnotes } from "marked-footnote";
import { forwardRef, ReactNode, useMemo } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import markedFootnote, { Footnotes, Footnote, FootnoteRef } from "marked-footnote";
import { ProxyImg } from "@/Components/ProxyImg";
import NostrLink from "@/Components/Embed/NostrLink"; import NostrLink from "@/Components/Embed/NostrLink";
import { ProxyImg } from "@/Components/ProxyImg";
interface MarkdownProps { interface MarkdownProps {
content: string; content: string;

View File

@ -1,11 +1,11 @@
import { FormattedMessage } from "react-intl";
import { NostrEvent, NostrLink } from "@snort/system"; import { NostrEvent, NostrLink } from "@snort/system";
import { useEventFeed } from "@snort/system-react"; import { useEventFeed } from "@snort/system-react";
import { FormattedMessage } from "react-intl";
import { findTag } from "@/Utils";
import PageSpinner from "@/Components/PageSpinner";
import Reveal from "@/Components/Event/Reveal";
import { MediaElement } from "@/Components/Embed/MediaElement"; import { MediaElement } from "@/Components/Embed/MediaElement";
import Reveal from "@/Components/Event/Reveal";
import PageSpinner from "@/Components/PageSpinner";
import { findTag } from "@/Utils";
export default function NostrFileHeader({ link }: { link: NostrLink }) { export default function NostrFileHeader({ link }: { link: NostrLink }) {
const ev = useEventFeed(link); const ev = useEventFeed(link);

View File

@ -1,16 +1,19 @@
import "./Note.css"; import "./Note.css";
import { ReactNode } from "react";
import { EventKind, NostrEvent, TaggedNostrEvent } from "@snort/system"; import { EventKind, NostrEvent, TaggedNostrEvent } from "@snort/system";
import { NostrFileElement } from "@/Components/Event/NostrFileHeader"; import { ReactNode } from "react";
import ZapstrEmbed from "@/Components/Embed/ZapstrEmbed";
import PubkeyList from "@/Components/Embed/PubkeyList"; import PubkeyList from "@/Components/Embed/PubkeyList";
import { LiveEvent } from "@/Components/LiveStream/LiveEvent"; import ZapstrEmbed from "@/Components/Embed/ZapstrEmbed";
import { ZapGoal } from "@/Components/Event/ZapGoal";
import NoteReaction from "@/Components/Event/NoteReaction";
import ProfilePreview from "@/Components/User/ProfilePreview";
import { NoteInner } from "./NoteInner";
import { LongFormText } from "./LongFormText";
import ErrorBoundary from "@/Components/ErrorBoundary"; import ErrorBoundary from "@/Components/ErrorBoundary";
import { NostrFileElement } from "@/Components/Event/NostrFileHeader";
import NoteReaction from "@/Components/Event/NoteReaction";
import { ZapGoal } from "@/Components/Event/ZapGoal";
import { LiveEvent } from "@/Components/LiveStream/LiveEvent";
import ProfilePreview from "@/Components/User/ProfilePreview";
import { LongFormText } from "./LongFormText";
import { NoteInner } from "./NoteInner";
export interface NoteProps { export interface NoteProps {
data: TaggedNostrEvent; data: TaggedNostrEvent;

View File

@ -1,17 +1,18 @@
import { useEffect, useState } from "react";
import { FormattedMessage, useIntl } from "react-intl";
import { HexKey, NostrLink, NostrPrefix, TaggedNostrEvent } from "@snort/system"; import { HexKey, NostrLink, NostrPrefix, TaggedNostrEvent } from "@snort/system";
import { Menu, MenuItem } from "@szhsin/react-menu"; import { Menu, MenuItem } from "@szhsin/react-menu";
import { useEffect, useState } from "react";
import { FormattedMessage, useIntl } from "react-intl";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import { setPinned, setBookmarked } from "@/Utils/Login";
import messages from "@/Components/messages"; import messages from "@/Components/messages";
import SnortApi from "@/External/SnortApi";
import useEventPublisher from "@/Hooks/useEventPublisher";
import useLogin from "@/Hooks/useLogin"; import useLogin from "@/Hooks/useLogin";
import useModeration from "@/Hooks/useModeration"; import useModeration from "@/Hooks/useModeration";
import useEventPublisher from "@/Hooks/useEventPublisher"; import { setBookmarked,setPinned } from "@/Utils/Login";
import { getCurrentSubscription,SubscriptionType } from "@/Utils/Subscription";
import { ReBroadcaster } from "../ReBroadcaster"; import { ReBroadcaster } from "../ReBroadcaster";
import SnortApi from "@/External/SnortApi";
import { SubscriptionType, getCurrentSubscription } from "@/Utils/Subscription";
export interface NoteTranslation { export interface NoteTranslation {
text: string; text: string;

View File

@ -1,26 +1,25 @@
import React, { forwardRef, useEffect, useState } from "react";
import { FormattedMessage, useIntl } from "react-intl";
import { useLongPress } from "use-long-press";
import { TaggedNostrEvent, ParsedZap, countLeadingZeros, NostrLink } from "@snort/system";
import { normalizeReaction } from "@snort/shared"; import { normalizeReaction } from "@snort/shared";
import { countLeadingZeros, NostrLink,ParsedZap, TaggedNostrEvent } from "@snort/system";
import { useUserProfile } from "@snort/system-react"; import { useUserProfile } from "@snort/system-react";
import { Menu, MenuItem } from "@szhsin/react-menu"; import { Menu, MenuItem } from "@szhsin/react-menu";
import classNames from "classnames"; import classNames from "classnames";
import React, { forwardRef, useEffect, useState } from "react";
import { FormattedMessage, useIntl } from "react-intl";
import { useLongPress } from "use-long-press";
import { formatShort } from "@/Utils/Number";
import useEventPublisher from "@/Hooks/useEventPublisher";
import { delay, findTag, getDisplayName } from "@/Utils";
import SendSats from "@/Components/SendSats/SendSats";
import { ZapsSummary } from "@/Components/Event/Zap";
import { AsyncIcon, AsyncIconProps } from "@/Components/Button/AsyncIcon"; import { AsyncIcon, AsyncIconProps } from "@/Components/Button/AsyncIcon";
import { ZapsSummary } from "@/Components/Event/Zap";
import { useWallet } from "@/Wallet";
import useLogin from "@/Hooks/useLogin";
import { useInteractionCache } from "@/Hooks/useInteractionCache";
import { ZapPoolController } from "@/Utils/ZapPoolController";
import { Zapper, ZapTarget } from "@/Utils/Zapper";
import { useNoteCreator } from "@/State/NoteCreator";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import SendSats from "@/Components/SendSats/SendSats";
import useEventPublisher from "@/Hooks/useEventPublisher";
import { useInteractionCache } from "@/Hooks/useInteractionCache";
import useLogin from "@/Hooks/useLogin";
import { useNoteCreator } from "@/State/NoteCreator";
import { delay, findTag, getDisplayName } from "@/Utils";
import { formatShort } from "@/Utils/Number";
import { Zapper, ZapTarget } from "@/Utils/Zapper";
import { ZapPoolController } from "@/Utils/ZapPoolController";
import { useWallet } from "@/Wallet";
import messages from "../messages"; import messages from "../messages";

View File

@ -1,4 +1,5 @@
import "./Note.css"; import "./Note.css";
import ProfileImage from "@/Components/User/ProfileImage"; import ProfileImage from "@/Components/User/ProfileImage";
interface NoteGhostProps { interface NoteGhostProps {

View File

@ -1,32 +1,33 @@
import { Link, useNavigate } from "react-router-dom"; import { EventExt, EventKind, HexKey, NostrLink, NostrPrefix, TaggedNostrEvent } from "@snort/system";
import { useEventReactions } from "@snort/system-react";
import classNames from "classnames";
import React, { ReactNode, useMemo, useState } from "react"; import React, { ReactNode, useMemo, useState } from "react";
import { useInView } from "react-intersection-observer"; import { useInView } from "react-intersection-observer";
import { FormattedMessage, useIntl } from "react-intl"; import { FormattedMessage, useIntl } from "react-intl";
import classNames from "classnames"; import { Link, useNavigate } from "react-router-dom";
import { EventExt, EventKind, HexKey, NostrLink, NostrPrefix, TaggedNostrEvent } from "@snort/system";
import { useEventReactions } from "@snort/system-react";
import { findTag, hexToBech32 } from "@/Utils";
import useModeration from "@/Hooks/useModeration";
import useLogin from "@/Hooks/useLogin";
import useEventPublisher from "@/Hooks/useEventPublisher";
import { NoteContextMenu, NoteTranslation } from "./NoteContextMenu";
import { UserCache } from "@/Cache"; import { UserCache } from "@/Cache";
import messages from "../messages";
import { setBookmarked, setPinned } from "@/Utils/Login";
import Text from "../Text/Text";
import Reveal from "./Reveal";
import Poll from "./Poll";
import ProfileImage from "../User/ProfileImage";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import NoteTime from "./NoteTime"; import DisplayName from "@/Components/User/DisplayName";
import NoteFooter from "./NoteFooter"; import { ProfileLink } from "@/Components/User/ProfileLink";
import Reactions from "./Reactions"; import useEventPublisher from "@/Hooks/useEventPublisher";
import useLogin from "@/Hooks/useLogin";
import useModeration from "@/Hooks/useModeration";
import { chainKey } from "@/Hooks/useThreadContext";
import { findTag, hexToBech32 } from "@/Utils";
import { setBookmarked, setPinned } from "@/Utils/Login";
import messages from "../messages";
import Text from "../Text/Text";
import ProfileImage from "../User/ProfileImage";
import HiddenNote from "./HiddenNote"; import HiddenNote from "./HiddenNote";
import { NoteProps } from "./Note"; import { NoteProps } from "./Note";
import { chainKey } from "@/Hooks/useThreadContext"; import { NoteContextMenu, NoteTranslation } from "./NoteContextMenu";
import { ProfileLink } from "@/Components/User/ProfileLink"; import NoteFooter from "./NoteFooter";
import DisplayName from "@/Components/User/DisplayName"; import NoteTime from "./NoteTime";
import Poll from "./Poll";
import Reactions from "./Reactions";
import Reveal from "./Reveal";
const TEXT_TRUNCATE_LENGTH = 400; const TEXT_TRUNCATE_LENGTH = 400;

View File

@ -1,15 +1,16 @@
import "./NoteReaction.css"; import "./NoteReaction.css";
import { Link } from "react-router-dom";
import { EventExt,EventKind, NostrEvent, NostrPrefix, TaggedNostrEvent } from "@snort/system";
import { useUserProfile } from "@snort/system-react";
import { useMemo } from "react"; import { useMemo } from "react";
import { EventKind, NostrEvent, TaggedNostrEvent, NostrPrefix, EventExt } from "@snort/system"; import { useInView } from "react-intersection-observer";
import { FormattedMessage } from "react-intl";
import { Link } from "react-router-dom";
import Note from "@/Components/Event/Note"; import Note from "@/Components/Event/Note";
import { eventLink, hexToBech32, getDisplayName } from "@/Utils";
import useModeration from "@/Hooks/useModeration";
import { FormattedMessage } from "react-intl";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import { useUserProfile } from "@snort/system-react"; import useModeration from "@/Hooks/useModeration";
import { useInView } from "react-intersection-observer"; import { eventLink, getDisplayName,hexToBech32 } from "@/Utils";
export interface NoteReactionProps { export interface NoteReactionProps {
data: TaggedNostrEvent; data: TaggedNostrEvent;

View File

@ -1,16 +1,16 @@
import { TaggedNostrEvent, ParsedZap, NostrLink } from "@snort/system";
import { LNURL } from "@snort/shared"; import { LNURL } from "@snort/shared";
import { NostrLink,ParsedZap, TaggedNostrEvent } from "@snort/system";
import { useUserProfile } from "@snort/system-react";
import { useState } from "react"; import { useState } from "react";
import { FormattedMessage, FormattedNumber, useIntl } from "react-intl"; import { FormattedMessage, FormattedNumber, useIntl } from "react-intl";
import { useUserProfile } from "@snort/system-react";
import useEventPublisher from "@/Hooks/useEventPublisher";
import { useWallet } from "@/Wallet";
import { unwrap } from "@/Utils";
import { formatShort } from "@/Utils/Number";
import Spinner from "@/Components/Icons/Spinner"; import Spinner from "@/Components/Icons/Spinner";
import SendSats from "@/Components/SendSats/SendSats"; import SendSats from "@/Components/SendSats/SendSats";
import useEventPublisher from "@/Hooks/useEventPublisher";
import useLogin from "@/Hooks/useLogin"; import useLogin from "@/Hooks/useLogin";
import { unwrap } from "@/Utils";
import { formatShort } from "@/Utils/Number";
import { useWallet } from "@/Wallet";
interface PollProps { interface PollProps {
ev: TaggedNostrEvent; ev: TaggedNostrEvent;

View File

@ -1,18 +1,18 @@
import "./Reactions.css"; import "./Reactions.css";
import { useState, useMemo, useEffect } from "react"; import { ParsedZap,TaggedNostrEvent } from "@snort/system";
import { useIntl, FormattedMessage } from "react-intl"; import { useEffect,useMemo, useState } from "react";
import { TaggedNostrEvent, ParsedZap } from "@snort/system"; import { FormattedMessage,useIntl } from "react-intl";
import { formatShort } from "@/Utils/Number"; import CloseButton from "@/Components/Button/CloseButton";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import { Tab } from "@/Components/Tabs/Tabs";
import ProfileImage from "@/Components/User/ProfileImage";
import Tabs from "@/Components/Tabs/Tabs";
import Modal from "@/Components/Modal/Modal"; import Modal from "@/Components/Modal/Modal";
import { Tab } from "@/Components/Tabs/Tabs";
import Tabs from "@/Components/Tabs/Tabs";
import ProfileImage from "@/Components/User/ProfileImage";
import { formatShort } from "@/Utils/Number";
import messages from "../messages"; import messages from "../messages";
import CloseButton from "@/Components/Button/CloseButton";
interface ReactionsProps { interface ReactionsProps {
show: boolean; show: boolean;

View File

@ -1,6 +1,7 @@
import { WarningNotice } from "@/Components/WarningNotice/WarningNotice";
import { useState } from "react"; import { useState } from "react";
import { WarningNotice } from "@/Components/WarningNotice/WarningNotice";
interface RevealProps { interface RevealProps {
message: React.ReactNode; message: React.ReactNode;
children: React.ReactNode; children: React.ReactNode;

View File

@ -1,11 +1,11 @@
import { IMeta } from "@snort/system";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import { Link } from "react-router-dom";
import { FileExtensionRegex } from "@/Utils/Const"; import { MediaElement } from "@/Components/Embed/MediaElement";
import Reveal from "@/Components/Event/Reveal"; import Reveal from "@/Components/Event/Reveal";
import useLogin from "@/Hooks/useLogin"; import useLogin from "@/Hooks/useLogin";
import { MediaElement } from "@/Components/Embed/MediaElement"; import { FileExtensionRegex } from "@/Utils/Const";
import { Link } from "react-router-dom";
import { IMeta } from "@snort/system";
interface RevealMediaProps { interface RevealMediaProps {
creator: string; creator: string;

View File

@ -1,8 +1,9 @@
import "./ShowMore.css"; import "./ShowMore.css";
import { FormattedMessage } from "react-intl";
import { useInView } from "react-intersection-observer";
import { useEffect } from "react";
import classNames from "classnames"; import classNames from "classnames";
import { useEffect } from "react";
import { useInView } from "react-intersection-observer";
import { FormattedMessage } from "react-intl";
interface ShowMoreProps { interface ShowMoreProps {
text?: string; text?: string;

View File

@ -1,16 +1,17 @@
import "./Thread.css"; import "./Thread.css";
import { useMemo, useState, ReactNode, useContext, Fragment } from "react";
import { EventExt, NostrLink,NostrPrefix, parseNostrLink, TaggedNostrEvent, u256 } from "@snort/system";
import classNames from "classnames";
import { Fragment,ReactNode, useContext, useMemo, useState } from "react";
import { useIntl } from "react-intl"; import { useIntl } from "react-intl";
import { useNavigate, useParams } from "react-router-dom"; import { useNavigate, useParams } from "react-router-dom";
import { TaggedNostrEvent, u256, NostrPrefix, EventExt, parseNostrLink, NostrLink } from "@snort/system";
import classNames from "classnames";
import { getAllLinkReactions, getLinkReactions } from "@/Utils";
import BackButton from "@/Components/Button/BackButton"; import BackButton from "@/Components/Button/BackButton";
import Collapsed from "@/Components/Collapsed";
import Note from "@/Components/Event/Note"; import Note from "@/Components/Event/Note";
import NoteGhost from "@/Components/Event/NoteGhost"; import NoteGhost from "@/Components/Event/NoteGhost";
import Collapsed from "@/Components/Collapsed"; import { chainKey,ThreadContext, ThreadContextWrapper } from "@/Hooks/useThreadContext";
import { ThreadContext, ThreadContextWrapper, chainKey } from "@/Hooks/useThreadContext"; import { getAllLinkReactions, getLinkReactions } from "@/Utils";
import messages from "../messages"; import messages from "../messages";

View File

@ -1,13 +1,14 @@
import "./Zap.css"; import "./Zap.css";
import { useMemo } from "react";
import { ParsedZap } from "@snort/system"; import { ParsedZap } from "@snort/system";
import { useMemo } from "react";
import { FormattedMessage, useIntl } from "react-intl"; import { FormattedMessage, useIntl } from "react-intl";
import { unwrap } from "@/Utils";
import { formatShort } from "@/Utils/Number";
import Text from "@/Components/Text/Text"; import Text from "@/Components/Text/Text";
import ProfileImage from "@/Components/User/ProfileImage"; import ProfileImage from "@/Components/User/ProfileImage";
import useLogin from "@/Hooks/useLogin"; import useLogin from "@/Hooks/useLogin";
import { unwrap } from "@/Utils";
import { formatShort } from "@/Utils/Number";
import messages from "../messages"; import messages from "../messages";

View File

@ -1,10 +1,11 @@
import "./ZapButton.css"; import "./ZapButton.css";
import { useState } from "react";
import { HexKey } from "@snort/system"; import { HexKey } from "@snort/system";
import { useUserProfile } from "@snort/system-react"; import { useUserProfile } from "@snort/system-react";
import { useState } from "react";
import SendSats from "@/Components/SendSats/SendSats";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import SendSats from "@/Components/SendSats/SendSats";
import { ZapTarget } from "@/Utils/Zapper"; import { ZapTarget } from "@/Utils/Zapper";
const ZapButton = ({ const ZapButton = ({

View File

@ -1,15 +1,18 @@
import "./ZapGoal.css"; import "./ZapGoal.css";
import { useState } from "react";
import { NostrEvent, NostrLink } from "@snort/system"; import { NostrEvent, NostrLink } from "@snort/system";
import useZapsFeed from "@/Feed/ZapsFeed"; import { useState } from "react";
import { formatShort } from "@/Utils/Number";
import { findTag } from "@/Utils";
import Icon from "@/Components/Icons/Icon";
import SendSats from "../SendSats/SendSats";
import { Zapper } from "@/Utils/Zapper";
import Progress from "@/Components/Progress/Progress";
import { FormattedNumber } from "react-intl"; import { FormattedNumber } from "react-intl";
import Icon from "@/Components/Icons/Icon";
import Progress from "@/Components/Progress/Progress";
import useZapsFeed from "@/Feed/ZapsFeed";
import { findTag } from "@/Utils";
import { formatShort } from "@/Utils/Number";
import { Zapper } from "@/Utils/Zapper";
import SendSats from "../SendSats/SendSats";
export function ZapGoal({ ev }: { ev: NostrEvent }) { export function ZapGoal({ ev }: { ev: NostrEvent }) {
const [zap, setZap] = useState(false); const [zap, setZap] = useState(false);
const zaps = useZapsFeed(NostrLink.fromEvent(ev)); const zaps = useZapsFeed(NostrLink.fromEvent(ev));

View File

@ -1,6 +1,7 @@
import { transformTextCached } from "@/Hooks/useTextTransformCache";
import { TaggedNostrEvent } from "@snort/system"; import { TaggedNostrEvent } from "@snort/system";
import { transformTextCached } from "@/Hooks/useTextTransformCache";
export default function getEventMedia(event: TaggedNostrEvent) { export default function getEventMedia(event: TaggedNostrEvent) {
const parsed = transformTextCached(event.id, event.content, event.tags); const parsed = transformTextCached(event.id, event.content, event.tags);
return parsed.filter( return parsed.filter(

View File

@ -1,11 +1,12 @@
import { NostrLink } from "@snort/system"; import { NostrLink } from "@snort/system";
import { useReactions } from "@snort/system-react"; import { useReactions } from "@snort/system-react";
import { useContext } from "react";
import { useArticles } from "@/Feed/ArticlesFeed"; import { useArticles } from "@/Feed/ArticlesFeed";
import { orderDescending } from "@/Utils";
import Note from "../Event/Note";
import { useContext } from "react";
import { DeckContext } from "@/Pages/DeckLayout"; import { DeckContext } from "@/Pages/DeckLayout";
import { orderDescending } from "@/Utils";
import Note from "../Event/Note";
export default function Articles() { export default function Articles() {
const data = useArticles(); const data = useArticles();

View File

@ -1,8 +1,9 @@
import Icon from "@/Components/Icons/Icon";
import { LoginStore } from "@/Utils/Login";
import useLogin from "@/Hooks/useLogin";
import { useCallback } from "react"; import { useCallback } from "react";
import Icon from "@/Components/Icons/Icon";
import useLogin from "@/Hooks/useLogin";
import { LoginStore } from "@/Utils/Login";
export type DisplayAs = "list" | "grid"; export type DisplayAs = "list" | "grid";
type DisplaySelectorProps = { type DisplaySelectorProps = {

View File

@ -1,8 +1,9 @@
import { NostrLink, TaggedNostrEvent } from "@snort/system"; import { NostrLink, TaggedNostrEvent } from "@snort/system";
import { MouseEvent } from "react"; import { MouseEvent } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import Icon from "@/Components/Icons/Icon";
import getEventMedia from "@/Components/Event/getEventMedia"; import getEventMedia from "@/Components/Event/getEventMedia";
import Icon from "@/Components/Icons/Icon";
import { ProxyImg } from "@/Components/ProxyImg"; import { ProxyImg } from "@/Components/ProxyImg";
const ImageGridItem = (props: { event: TaggedNostrEvent; onClick: (e: MouseEvent) => void }) => { const ImageGridItem = (props: { event: TaggedNostrEvent; onClick: (e: MouseEvent) => void }) => {

View File

@ -1,6 +1,6 @@
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { FormattedMessage } from "react-intl";
import { useInView } from "react-intersection-observer"; import { useInView } from "react-intersection-observer";
import { FormattedMessage } from "react-intl";
import messages from "../messages"; import messages from "../messages";

View File

@ -1,11 +1,12 @@
import "./RootTabs.css"; import "./RootTabs.css";
import { useState, ReactNode, useEffect, useMemo } from "react";
import { useLocation, useNavigate } from "react-router-dom";
import { Menu, MenuItem } from "@szhsin/react-menu";
import { FormattedMessage } from "react-intl";
import useLogin from "@/Hooks/useLogin"; import { Menu, MenuItem } from "@szhsin/react-menu";
import { ReactNode, useEffect, useMemo,useState } from "react";
import { FormattedMessage } from "react-intl";
import { useLocation, useNavigate } from "react-router-dom";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import useLogin from "@/Hooks/useLogin";
import { Newest } from "@/Utils/Login"; import { Newest } from "@/Utils/Login";
export type RootTab = export type RootTab =

View File

@ -1,16 +1,17 @@
import "./Timeline.css"; import "./Timeline.css";
import { FormattedMessage } from "react-intl";
import { useCallback, useMemo, useState } from "react";
import { TaggedNostrEvent, EventKind, socialGraphInstance } from "@snort/system";
import { dedupeByPubkey, findTag } from "@/Utils";
import useTimelineFeed, { TimelineFeed, TimelineSubject } from "@/Feed/TimelineFeed";
import useModeration from "@/Hooks/useModeration";
import { LiveStreams } from "@/Components/LiveStream/LiveStreams";
import { unixNow } from "@snort/shared"; import { unixNow } from "@snort/shared";
import { TimelineRenderer } from "@/Components/Feed/TimelineRenderer"; import { EventKind, socialGraphInstance,TaggedNostrEvent } from "@snort/system";
import { useCallback, useMemo, useState } from "react";
import { FormattedMessage } from "react-intl";
import { DisplayAs, DisplayAsSelector } from "@/Components/Feed/DisplayAsSelector"; import { DisplayAs, DisplayAsSelector } from "@/Components/Feed/DisplayAsSelector";
import { TimelineRenderer } from "@/Components/Feed/TimelineRenderer";
import { LiveStreams } from "@/Components/LiveStream/LiveStreams";
import useTimelineFeed, { TimelineFeed, TimelineSubject } from "@/Feed/TimelineFeed";
import useLogin from "@/Hooks/useLogin"; import useLogin from "@/Hooks/useLogin";
import useModeration from "@/Hooks/useModeration";
import { dedupeByPubkey, findTag } from "@/Utils";
export interface TimelineProps { export interface TimelineProps {
postsOnly: boolean; postsOnly: boolean;

View File

@ -1,19 +1,20 @@
import "./Timeline.css"; import "./Timeline.css";
import { unixNow } from "@snort/shared";
import { EventKind, NostrEvent, NostrLink, TaggedNostrEvent } from "@snort/system";
import { SnortContext, useReactions } from "@snort/system-react";
import { ReactNode, useCallback, useContext, useMemo, useState, useSyncExternalStore } from "react"; import { ReactNode, useCallback, useContext, useMemo, useState, useSyncExternalStore } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { EventKind, NostrEvent, NostrLink, TaggedNostrEvent } from "@snort/system";
import { unixNow } from "@snort/shared";
import { SnortContext, useReactions } from "@snort/system-react";
import { dedupeByPubkey, findTag, orderDescending } from "@/Utils";
import useModeration from "@/Hooks/useModeration";
import { FollowsFeed } from "@/Cache"; import { FollowsFeed } from "@/Cache";
import { LiveStreams } from "@/Components/LiveStream/LiveStreams";
import useLogin from "@/Hooks/useLogin";
import useHashtagsFeed from "@/Feed/HashtagsFeed";
import { ShowMoreInView } from "@/Components/Event/ShowMore"; import { ShowMoreInView } from "@/Components/Event/ShowMore";
import { TimelineRenderer } from "@/Components/Feed/TimelineRenderer";
import { DisplayAs, DisplayAsSelector } from "@/Components/Feed/DisplayAsSelector"; import { DisplayAs, DisplayAsSelector } from "@/Components/Feed/DisplayAsSelector";
import { TimelineRenderer } from "@/Components/Feed/TimelineRenderer";
import { LiveStreams } from "@/Components/LiveStream/LiveStreams";
import useHashtagsFeed from "@/Feed/HashtagsFeed";
import useLogin from "@/Hooks/useLogin";
import useModeration from "@/Hooks/useModeration";
import { dedupeByPubkey, findTag, orderDescending } from "@/Utils";
export interface TimelineFollowsProps { export interface TimelineFollowsProps {
postsOnly: boolean; postsOnly: boolean;

View File

@ -1,5 +1,5 @@
import { ReactNode, useCallback } from "react";
import { TaggedNostrEvent } from "@snort/system"; import { TaggedNostrEvent } from "@snort/system";
import { ReactNode, useCallback } from "react";
import Note from "@/Components/Event/Note"; import Note from "@/Components/Event/Note";
import { findTag } from "@/Utils"; import { findTag } from "@/Utils";

View File

@ -1,15 +1,16 @@
import { useInView } from "react-intersection-observer";
import ProfileImage from "@/Components/User/ProfileImage";
import { FormattedMessage } from "react-intl";
import Icon from "@/Components/Icons/Icon";
import { TaggedNostrEvent } from "@snort/system"; import { TaggedNostrEvent } from "@snort/system";
import { ReactNode, useEffect, useMemo, useRef, useState } from "react"; import { ReactNode, useEffect, useMemo, useRef, useState } from "react";
import { TimelineFragment } from "@/Components/Feed/TimelineFragment"; import { useInView } from "react-intersection-observer";
import { DisplayAs } from "@/Components/Feed/DisplayAsSelector"; import { FormattedMessage } from "react-intl";
import { SpotlightThreadModal } from "@/Components/Spotlight/SpotlightThreadModal";
import ImageGridItem from "@/Components/Feed/ImageGridItem";
import ErrorBoundary from "@/Components/ErrorBoundary"; import ErrorBoundary from "@/Components/ErrorBoundary";
import getEventMedia from "@/Components/Event/getEventMedia"; import getEventMedia from "@/Components/Event/getEventMedia";
import { DisplayAs } from "@/Components/Feed/DisplayAsSelector";
import ImageGridItem from "@/Components/Feed/ImageGridItem";
import { TimelineFragment } from "@/Components/Feed/TimelineFragment";
import Icon from "@/Components/Icons/Icon";
import { SpotlightThreadModal } from "@/Components/Spotlight/SpotlightThreadModal";
import ProfileImage from "@/Components/User/ProfileImage";
export interface TimelineRendererProps { export interface TimelineRendererProps {
frags: Array<TimelineFragment>; frags: Array<TimelineFragment>;

View File

@ -1,9 +1,9 @@
import { useCallback, useMemo } from "react";
import { TaggedNostrEvent } from "@snort/system"; import { TaggedNostrEvent } from "@snort/system";
import { useCallback, useMemo } from "react";
import useTimelineFeed, { TimelineFeed } from "@/Feed/TimelineFeed";
import FollowListBase from "@/Components/User/FollowListBase";
import PageSpinner from "@/Components/PageSpinner"; import PageSpinner from "@/Components/PageSpinner";
import FollowListBase from "@/Components/User/FollowListBase";
import useTimelineFeed, { TimelineFeed } from "@/Feed/TimelineFeed";
import useModeration from "@/Hooks/useModeration"; import useModeration from "@/Hooks/useModeration";
export default function UsersFeed({ keyword, sortPopular = true }: { keyword: string; sortPopular?: boolean }) { export default function UsersFeed({ keyword, sortPopular = true }: { keyword: string; sortPopular?: boolean }) {

View File

@ -1,4 +1,5 @@
import { MouseEventHandler } from "react"; import { MouseEventHandler } from "react";
import IconsSvg from "@/Components/Icons/icons.svg"; import IconsSvg from "@/Components/Icons/icons.svg";
export interface IconProps { export interface IconProps {

View File

@ -1,4 +1,5 @@
import "./Toggle.css"; import "./Toggle.css";
import { IconProps } from "./Icon"; import { IconProps } from "./Icon";
export function ToggleSwitch(props: Omit<IconProps, "name">) { export function ToggleSwitch(props: Omit<IconProps, "name">) {

View File

@ -1,12 +1,14 @@
import SnortApi from "@/External/SnortApi";
import { getCurrentRefCode, getDisplayName } from "@/Utils";
import { useUserProfile } from "@snort/system-react"; import { useUserProfile } from "@snort/system-react";
import Lottie from "lottie-react"; import Lottie from "lottie-react";
import { useState, useEffect } from "react"; import { useEffect,useState } from "react";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import { Link, useNavigate } from "react-router-dom"; import { Link, useNavigate } from "react-router-dom";
import Modal from "./Modal/Modal";
import SnortApi from "@/External/SnortApi";
import Hugs from "@/hug.json"; import Hugs from "@/hug.json";
import { getCurrentRefCode, getDisplayName } from "@/Utils";
import Modal from "./Modal/Modal";
const InviteModal = () => { const InviteModal = () => {
const [pubkey, setPubkey] = useState(""); const [pubkey, setPubkey] = useState("");

View File

@ -1,5 +1,5 @@
import { useNavigate } from "react-router-dom";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import { useNavigate } from "react-router-dom";
interface AccountNameProps { interface AccountNameProps {
name?: string; name?: string;

View File

@ -1,11 +1,12 @@
import { mapEventToProfile } from "@snort/system"; import { mapEventToProfile } from "@snort/system";
import { useUserProfile } from "@snort/system-react"; import { useUserProfile } from "@snort/system-react";
import { FormattedMessage } from "react-intl";
import AccountName from "./AccountName";
import useLogin from "@/Hooks/useLogin";
import { UserCache } from "@/Cache"; import { UserCache } from "@/Cache";
import useEventPublisher from "@/Hooks/useEventPublisher"; import useEventPublisher from "@/Hooks/useEventPublisher";
import { FormattedMessage } from "react-intl"; import useLogin from "@/Hooks/useLogin";
import AccountName from "./AccountName";
interface ActiveAccountProps { interface ActiveAccountProps {
name?: string; name?: string;

View File

@ -1,14 +1,15 @@
/* eslint-disable @typescript-eslint/no-explicit-any */ /* eslint-disable @typescript-eslint/no-explicit-any */
import { Component, FormEvent } from "react"; import { Component, FormEvent } from "react";
import { FormattedMessage } from "react-intl";
import { injectIntl } from "react-intl";
import messages from "@/Components/messages";
import { ProfileLoader } from "@/system";
import { LoginStore } from "@/Utils/Login"; import { LoginStore } from "@/Utils/Login";
import AccountName from "./AccountName"; import AccountName from "./AccountName";
import ActiveAccount from "./ActiveAccount"; import ActiveAccount from "./ActiveAccount";
import ReservedAccount from "./ReservedAccount"; import ReservedAccount from "./ReservedAccount";
import { FormattedMessage } from "react-intl";
import { injectIntl } from "react-intl";
import messages from "@/Components/messages";
import { ProfileLoader } from "@/system";
declare global { declare global {
interface Window { interface Window {

View File

@ -1,6 +1,7 @@
import AccountName from "./AccountName";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import AccountName from "./AccountName";
interface ReservedAccountProps { interface ReservedAccountProps {
name?: string; name?: string;
enableReserved: () => void; enableReserved: () => void;

View File

@ -2,9 +2,10 @@ import { NostrEvent, NostrLink } from "@snort/system";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { findTag } from "@/Utils";
import ProfileImage from "../User/ProfileImage";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import { findTag } from "@/Utils";
import ProfileImage from "../User/ProfileImage";
export function LiveEvent({ ev }: { ev: NostrEvent }) { export function LiveEvent({ ev }: { ev: NostrEvent }) {
const title = findTag(ev, "title"); const title = findTag(ev, "title");

View File

@ -1,10 +1,12 @@
import "./LiveStreams.css"; import "./LiveStreams.css";
import { NostrEvent, NostrLink } from "@snort/system"; import { NostrEvent, NostrLink } from "@snort/system";
import { findTag } from "@/Utils";
import { CSSProperties, useMemo } from "react"; import { CSSProperties, useMemo } from "react";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import useImgProxy from "@/Hooks/useImgProxy";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import useImgProxy from "@/Hooks/useImgProxy";
import { findTag } from "@/Utils";
export function LiveStreams({ evs }: { evs: Array<NostrEvent> }) { export function LiveStreams({ evs }: { evs: Array<NostrEvent> }) {
const streams = useMemo(() => { const streams = useMemo(() => {

View File

@ -1,6 +1,7 @@
import { createPortal } from "react-dom";
import "./Modal.css"; import "./Modal.css";
import { ReactNode, useEffect } from "react"; import { ReactNode, useEffect } from "react";
import { createPortal } from "react-dom";
export interface ModalProps { export interface ModalProps {
id: string; id: string;

View File

@ -1,28 +1,28 @@
import { useEffect, useMemo, useState, ChangeEvent } from "react"; import { mapEventToProfile,UserMetadata } from "@snort/system";
import { useIntl, FormattedMessage } from "react-intl"; import { useUserProfile } from "@snort/system-react";
import { ChangeEvent,useEffect, useMemo, useState } from "react";
import { FormattedMessage,useIntl } from "react-intl";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { UserMetadata, mapEventToProfile } from "@snort/system";
import { UserCache } from "@/Cache";
import AsyncButton from "@/Components/Button/AsyncButton";
import Copy from "@/Components/Copy/Copy";
import SendSats from "@/Components/SendSats/SendSats";
import useEventPublisher from "@/Hooks/useEventPublisher";
import useLogin from "@/Hooks/useLogin";
import { unwrap } from "@/Utils"; import { unwrap } from "@/Utils";
import { formatShort } from "@/Utils/Number"; import { debounce } from "@/Utils";
import { import {
ServiceProvider, CheckRegisterResponse,
HandleAvailability,
HandleRegisterResponse,
ServiceConfig, ServiceConfig,
ServiceError, ServiceError,
HandleAvailability,
ServiceErrorCode, ServiceErrorCode,
HandleRegisterResponse, ServiceProvider,
CheckRegisterResponse,
} from "@/Utils/Nip05/ServiceProvider"; } from "@/Utils/Nip05/ServiceProvider";
import AsyncButton from "@/Components/Button/AsyncButton";
import SendSats from "@/Components/SendSats/SendSats";
import Copy from "@/Components/Copy/Copy";
import { useUserProfile } from "@snort/system-react";
import useEventPublisher from "@/Hooks/useEventPublisher";
import { debounce } from "@/Utils";
import useLogin from "@/Hooks/useLogin";
import SnortServiceProvider from "@/Utils/Nip05/SnortServiceProvider"; import SnortServiceProvider from "@/Utils/Nip05/SnortServiceProvider";
import { UserCache } from "@/Cache"; import { formatShort } from "@/Utils/Number";
import messages from "./messages"; import messages from "./messages";

View File

@ -1,7 +1,9 @@
import Icon from "@/Components/Icons/Icon";
import AsyncButton from "./Button/AsyncButton";
import { FormattedMessage } from "react-intl";
import classNames from "classnames"; import classNames from "classnames";
import { FormattedMessage } from "react-intl";
import Icon from "@/Components/Icons/Icon";
import AsyncButton from "./Button/AsyncButton";
export function Offline({ onRetry, className }: { onRetry?: () => void | Promise<void>; className?: string }) { export function Offline({ onRetry, className }: { onRetry?: () => void | Promise<void>; className?: string }) {
return ( return (

View File

@ -1,17 +1,18 @@
import useLogin from "@/Hooks/useLogin";
import "./PinPrompt.css"; import "./PinPrompt.css";
import { ReactNode, useRef, useState } from "react";
import { FormattedMessage, useIntl } from "react-intl";
import { unwrap } from "@snort/shared"; import { unwrap } from "@snort/shared";
import { EventPublisher, InvalidPinError, PinEncrypted } from "@snort/system"; import { EventPublisher, InvalidPinError, PinEncrypted } from "@snort/system";
import { ReactNode, useRef, useState } from "react";
import { FormattedMessage, useIntl } from "react-intl";
import useEventPublisher from "@/Hooks/useEventPublisher"; import useEventPublisher from "@/Hooks/useEventPublisher";
import { LoginStore, createPublisher, sessionNeedsPin } from "@/Utils/Login"; import useLogin from "@/Hooks/useLogin";
import Modal from "../Modal/Modal"; import { createPublisher, LoginStore, sessionNeedsPin } from "@/Utils/Login";
import AsyncButton from "../Button/AsyncButton";
import { GetPowWorker } from "@/Utils/wasm"; import { GetPowWorker } from "@/Utils/wasm";
import AsyncButton from "../Button/AsyncButton";
import Modal from "../Modal/Modal";
export function PinPrompt({ export function PinPrompt({
onResult, onResult,
onCancel, onCancel,

View File

@ -1,6 +1,7 @@
import "./Progress.css"; import "./Progress.css";
import { FormattedNumber } from "react-intl";
import { CSSProperties, ReactNode } from "react"; import { CSSProperties, ReactNode } from "react";
import { FormattedNumber } from "react-intl";
export default function Progress({ value, status }: { value: number; status?: ReactNode }) { export default function Progress({ value, status }: { value: number; status?: ReactNode }) {
const v = Math.max(0.01, Math.min(1, value)); const v = Math.max(0.01, Math.min(1, value));

View File

@ -1,6 +1,7 @@
import useImgProxy from "@/Hooks/useImgProxy"; import { forwardRef, HTMLProps, ReactNode, useEffect,useMemo, useState } from "react";
import { HTMLProps, ReactNode, forwardRef, useState, useMemo, useEffect } from "react";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import useImgProxy from "@/Hooks/useImgProxy";
import { getUrlHostname } from "@/Utils"; import { getUrlHostname } from "@/Utils";
type ProxyImgProps = HTMLProps<HTMLImageElement> & { type ProxyImgProps = HTMLProps<HTMLImageElement> & {

View File

@ -1,12 +1,13 @@
import { useContext, useState } from "react";
import { FormattedMessage } from "react-intl";
import { TaggedNostrEvent } from "@snort/system"; import { TaggedNostrEvent } from "@snort/system";
import { SnortContext } from "@snort/system-react"; import { SnortContext } from "@snort/system-react";
import { useContext, useState } from "react";
import { FormattedMessage } from "react-intl";
import Modal from "@/Components/Modal/Modal"; import Modal from "@/Components/Modal/Modal";
import messages from "./messages";
import useLogin from "@/Hooks/useLogin"; import useLogin from "@/Hooks/useLogin";
import AsyncButton from "./Button/AsyncButton"; import AsyncButton from "./Button/AsyncButton";
import messages from "./messages";
export function ReBroadcaster({ onClose, ev }: { onClose: () => void; ev: TaggedNostrEvent }) { export function ReBroadcaster({ onClose, ev }: { onClose: () => void; ev: TaggedNostrEvent }) {
const [selected, setSelected] = useState<Array<string>>(); const [selected, setSelected] = useState<Array<string>>();

View File

@ -1,17 +1,19 @@
import "./Relay.css"; import "./Relay.css";
import { unixNowMs } from "@snort/shared";
import { RelaySettings } from "@snort/system";
import { SnortContext } from "@snort/system-react";
import classNames from "classnames";
import { useContext, useMemo } from "react"; import { useContext, useMemo } from "react";
import { useNavigate } from "react-router-dom"; import { useNavigate } from "react-router-dom";
import { RelaySettings } from "@snort/system";
import { unixNowMs } from "@snort/shared";
import classNames from "classnames";
import useRelayState from "@/Feed/RelayState";
import { SnortContext } from "@snort/system-react";
import { getRelayName, unwrap } from "@/Utils";
import useLogin from "@/Hooks/useLogin";
import { removeRelay, setRelays } from "@/Utils/Login";
import { RelayFavicon } from "./RelaysMetadata";
import { AsyncIcon } from "@/Components/Button/AsyncIcon"; import { AsyncIcon } from "@/Components/Button/AsyncIcon";
import useRelayState from "@/Feed/RelayState";
import useLogin from "@/Hooks/useLogin";
import { getRelayName, unwrap } from "@/Utils";
import { removeRelay, setRelays } from "@/Utils/Login";
import { RelayFavicon } from "./RelaysMetadata";
export interface RelayProps { export interface RelayProps {
addr: string; addr: string;

View File

@ -1,8 +1,9 @@
import "./RelaysMetadata.css"; import "./RelaysMetadata.css";
import Nostrich from "@/assets/img/nostrich.webp";
import { useState } from "react";
import { FullRelaySettings } from "@snort/system"; import { FullRelaySettings } from "@snort/system";
import { useState } from "react";
import Nostrich from "@/assets/img/nostrich.webp";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
export const RelayFavicon = ({ url }: { url: string }) => { export const RelayFavicon = ({ url }: { url: string }) => {

View File

@ -1,16 +1,19 @@
import "./SearchBox.css"; import "./SearchBox.css";
import Spinner from "@/Components/Icons/Spinner";
import Icon from "@/Components/Icons/Icon";
import { FormattedMessage, useIntl } from "react-intl";
import { fetchNip05Pubkey } from "@/Utils/Nip05/Verifier";
import { ChangeEvent, useEffect, useRef, useState } from "react";
import { NostrLink, tryParseNostrLink } from "@snort/system";
import { useLocation, useNavigate } from "react-router-dom";
import { unixNow } from "@snort/shared"; import { unixNow } from "@snort/shared";
import useTimelineFeed, { TimelineFeedOptions, TimelineSubject } from "../../Feed/TimelineFeed"; import { NostrLink, tryParseNostrLink } from "@snort/system";
import ProfileImage from "@/Components/User/ProfileImage";
import { socialGraphInstance } from "@snort/system"; import { socialGraphInstance } from "@snort/system";
import { ChangeEvent, useEffect, useRef, useState } from "react";
import { FormattedMessage, useIntl } from "react-intl";
import { useLocation, useNavigate } from "react-router-dom";
import Icon from "@/Components/Icons/Icon";
import Spinner from "@/Components/Icons/Spinner";
import ProfileImage from "@/Components/User/ProfileImage";
import fuzzySearch, { FuzzySearchResult } from "@/Db/FuzzySearch"; import fuzzySearch, { FuzzySearchResult } from "@/Db/FuzzySearch";
import { fetchNip05Pubkey } from "@/Utils/Nip05/Verifier";
import useTimelineFeed, { TimelineFeedOptions, TimelineSubject } from "../../Feed/TimelineFeed";
const MAX_RESULTS = 3; const MAX_RESULTS = 3;

View File

@ -1,25 +1,25 @@
import "./SendSats.css"; import "./SendSats.css";
import React, { ReactNode, useEffect, useState } from "react";
import { useIntl, FormattedMessage } from "react-intl";
import { HexKey } from "@snort/system";
import { LNURLSuccessAction } from "@snort/shared"; import { LNURLSuccessAction } from "@snort/shared";
import { HexKey } from "@snort/system";
import React, { ReactNode, useEffect, useState } from "react";
import { FormattedMessage,useIntl } from "react-intl";
import { formatShort } from "@/Utils/Number"; import AsyncButton from "@/Components/Button/AsyncButton";
import CloseButton from "@/Components/Button/CloseButton";
import Copy from "@/Components/Copy/Copy";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import useEventPublisher from "@/Hooks/useEventPublisher";
import ProfileImage from "@/Components/User/ProfileImage";
import Modal from "@/Components/Modal/Modal"; import Modal from "@/Components/Modal/Modal";
import QrCode from "@/Components/QrCode"; import QrCode from "@/Components/QrCode";
import Copy from "@/Components/Copy/Copy"; import ProfileImage from "@/Components/User/ProfileImage";
import { debounce } from "@/Utils"; import useEventPublisher from "@/Hooks/useEventPublisher";
import { LNWallet, useWallet } from "@/Wallet";
import useLogin from "@/Hooks/useLogin"; import useLogin from "@/Hooks/useLogin";
import AsyncButton from "@/Components/Button/AsyncButton"; import { debounce } from "@/Utils";
import { ZapTarget, ZapTargetResult, Zapper } from "@/Utils/Zapper"; import { formatShort } from "@/Utils/Number";
import { Zapper,ZapTarget, ZapTargetResult } from "@/Utils/Zapper";
import { LNWallet, useWallet } from "@/Wallet";
import messages from "../messages"; import messages from "../messages";
import CloseButton from "@/Components/Button/CloseButton";
enum ZapType { enum ZapType {
PublicZap = 1, PublicZap = 1,

View File

@ -1,6 +1,7 @@
import { useCallback, useEffect, useMemo, useState } from "react"; import { useCallback, useEffect, useMemo, useState } from "react";
import Modal from "@/Components/Modal/Modal";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import Modal from "@/Components/Modal/Modal";
import { ProxyImg } from "@/Components/ProxyImg"; import { ProxyImg } from "@/Components/ProxyImg";
import useImgProxy from "@/Hooks/useImgProxy"; import useImgProxy from "@/Hooks/useImgProxy";

View File

@ -1,9 +1,10 @@
import Modal from "@/Components/Modal/Modal";
import { ThreadContextWrapper } from "@/Hooks/useThreadContext";
import { Thread } from "@/Components/Event/Thread";
import { SpotlightMedia } from "@/Components/Spotlight/SpotlightMedia";
import { NostrLink, TaggedNostrEvent } from "@snort/system"; import { NostrLink, TaggedNostrEvent } from "@snort/system";
import getEventMedia from "@/Components/Event/getEventMedia"; import getEventMedia from "@/Components/Event/getEventMedia";
import { Thread } from "@/Components/Event/Thread";
import Modal from "@/Components/Modal/Modal";
import { SpotlightMedia } from "@/Components/Spotlight/SpotlightMedia";
import { ThreadContextWrapper } from "@/Hooks/useThreadContext";
interface SpotlightThreadModalProps { interface SpotlightThreadModalProps {
thread?: NostrLink; thread?: NostrLink;

View File

@ -1,16 +1,17 @@
import { useState } from "react";
import { HexKey, NostrPrefix } from "@snort/system"; import { HexKey, NostrPrefix } from "@snort/system";
import { useState } from "react";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import FollowListBase from "@/Components/User/FollowListBase";
import PageSpinner from "@/Components/PageSpinner"; import PageSpinner from "@/Components/PageSpinner";
import TrendingUsers from "@/Components/Trending/TrendingUsers";
import FollowListBase from "@/Components/User/FollowListBase";
import NostrBandApi from "@/External/NostrBand"; import NostrBandApi from "@/External/NostrBand";
import SemisolDevApi from "@/External/SemisolDev"; import SemisolDevApi from "@/External/SemisolDev";
import useCachedFetch from "@/Hooks/useCachedFetch";
import useLogin from "@/Hooks/useLogin"; import useLogin from "@/Hooks/useLogin";
import { hexToBech32 } from "@/Utils"; import { hexToBech32 } from "@/Utils";
import { ErrorOrOffline } from "./ErrorOrOffline"; import { ErrorOrOffline } from "./ErrorOrOffline";
import useCachedFetch from "@/Hooks/useCachedFetch";
import TrendingUsers from "@/Components/Trending/TrendingUsers";
enum Provider { enum Provider {
NostrBand = 1, NostrBand = 1,

View File

@ -1,5 +1,7 @@
import { ReactNode } from "react";
import "./Tabs.css"; import "./Tabs.css";
import { ReactNode } from "react";
import useHorizontalScroll from "@/Hooks/useHorizontalScroll"; import useHorizontalScroll from "@/Hooks/useHorizontalScroll";
export interface Tab { export interface Tab {

View File

@ -1,9 +1,10 @@
import { MetadataCache } from "@snort/system";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { BaseUITask } from "@/Components/Tasks/index";
import { MetadataCache } from "@snort/system";
import { LoginSession } from "@/Utils/Login";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import { BaseUITask } from "@/Components/Tasks/index";
import { LoginSession } from "@/Utils/Login";
export class BackupKeyTask extends BaseUITask { export class BackupKeyTask extends BaseUITask {
id = "backup-key"; id = "backup-key";

View File

@ -1,5 +1,6 @@
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { BaseUITask } from "@/Components/Tasks/index"; import { BaseUITask } from "@/Components/Tasks/index";
export class DonateTask extends BaseUITask { export class DonateTask extends BaseUITask {

View File

@ -1,6 +1,7 @@
import { MetadataCache } from "@snort/system";
import { FormattedMessage } from "react-intl"; import { FormattedMessage } from "react-intl";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { MetadataCache } from "@snort/system";
import { BaseUITask } from "@/Components/Tasks/index"; import { BaseUITask } from "@/Components/Tasks/index";
export class Nip5Task extends BaseUITask { export class Nip5Task extends BaseUITask {

View File

@ -1,5 +1,6 @@
import { FormattedMessage, FormattedNumber } from "react-intl"; import { FormattedMessage, FormattedNumber } from "react-intl";
import { Link } from "react-router-dom"; import { Link } from "react-router-dom";
import { BaseUITask } from "@/Components/Tasks/index"; import { BaseUITask } from "@/Components/Tasks/index";
export class NoticeZapPoolDefault extends BaseUITask { export class NoticeZapPoolDefault extends BaseUITask {

View File

@ -1,10 +1,10 @@
import { FormattedMessage } from "react-intl";
import { MetadataCache } from "@snort/system"; import { MetadataCache } from "@snort/system";
import { FormattedMessage } from "react-intl";
import { BaseUITask } from "@/Components/Tasks/index"; import { BaseUITask } from "@/Components/Tasks/index";
import { RenewSub } from "@/Pages/subscribe/RenewSub";
import { LoginSession } from "@/Utils/Login"; import { LoginSession } from "@/Utils/Login";
import { getCurrentSubscription } from "@/Utils/Subscription"; import { getCurrentSubscription } from "@/Utils/Subscription";
import { RenewSub } from "@/Pages/subscribe/RenewSub";
export class RenewSubTask extends BaseUITask { export class RenewSubTask extends BaseUITask {
id = "renew-sub"; id = "renew-sub";

View File

@ -1,17 +1,19 @@
import "./TaskList.css"; import "./TaskList.css";
import { Fragment, useSyncExternalStore } from "react";
import { useUserProfile } from "@snort/system-react";
import useLogin from "@/Hooks/useLogin"; import { ExternalStore } from "@snort/shared";
import { useUserProfile } from "@snort/system-react";
import { Fragment, useSyncExternalStore } from "react";
import CloseButton from "@/Components/Button/CloseButton";
import Icon from "@/Components/Icons/Icon"; import Icon from "@/Components/Icons/Icon";
import { UITask } from "@/Components/Tasks/index"; import { UITask } from "@/Components/Tasks/index";
import useLogin from "@/Hooks/useLogin";
import { BackupKeyTask } from "./BackupKey";
import { DonateTask } from "./DonateTask"; import { DonateTask } from "./DonateTask";
import { Nip5Task } from "./Nip5Task"; import { Nip5Task } from "./Nip5Task";
import { RenewSubTask } from "./RenewSubscription";
import { NoticeZapPoolDefault } from "./NoticeZapPool"; import { NoticeZapPoolDefault } from "./NoticeZapPool";
import { BackupKeyTask } from "./BackupKey"; import { RenewSubTask } from "./RenewSubscription";
import { ExternalStore } from "@snort/shared";
import CloseButton from "@/Components/Button/CloseButton";
class TaskStore extends ExternalStore<Array<UITask>> { class TaskStore extends ExternalStore<Array<UITask>> {
#tasks: Array<UITask>; #tasks: Array<UITask>;

View File

@ -1,4 +1,5 @@
import { MetadataCache } from "@snort/system"; import { MetadataCache } from "@snort/system";
import { LoginSession } from "@/Utils/Login"; import { LoginSession } from "@/Utils/Login";
export interface UITask { export interface UITask {

View File

@ -1,17 +1,19 @@
import "./Text.css"; import "./Text.css";
import { ReactNode, useState } from "react";
import { HexKey, ParsedFragment, parseIMeta } from "@snort/system"; import { HexKey, ParsedFragment, parseIMeta } from "@snort/system";
import classNames from "classnames"; import classNames from "classnames";
import { ReactNode, useState } from "react";
import Invoice from "@/Components/Embed/Invoice"; import CashuNuts from "@/Components/Embed/CashuNuts";
import Hashtag from "@/Components/Embed/Hashtag"; import Hashtag from "@/Components/Embed/Hashtag";
import HyperText from "@/Components/Embed/HyperText"; import HyperText from "@/Components/Embed/HyperText";
import CashuNuts from "@/Components/Embed/CashuNuts"; import Invoice from "@/Components/Embed/Invoice";
import { useTextTransformer } from "@/Hooks/useTextTransformCache";
import RevealMedia from "../Event/RevealMedia"; import RevealMedia from "../Event/RevealMedia";
import HighlightedText from "../HighlightedText";
import { ProxyImg } from "../ProxyImg"; import { ProxyImg } from "../ProxyImg";
import { SpotlightMediaModal } from "../Spotlight/SpotlightMedia"; import { SpotlightMediaModal } from "../Spotlight/SpotlightMedia";
import HighlightedText from "../HighlightedText";
import { useTextTransformer } from "@/Hooks/useTextTransformCache";
export interface TextProps { export interface TextProps {
id: string; id: string;

Some files were not shown because too many files have changed in this diff Show More