eslint: sort imports & exports
continuous-integration/drone/push Build is failing Details

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

View File

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

View File

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

View File

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

View File

@ -1,9 +1,11 @@
import { db } from "@/Db";
import { unixNowMs } from "@snort/shared";
import { EventKind, RequestBuilder, socialGraphInstance, TaggedNostrEvent } from "@snort/system";
import { RefreshFeedCache } from "./RefreshFeedCache";
import { db } from "@/Db";
import { LoginSession } from "@/Utils/Login";
import { RefreshFeedCache } from "./RefreshFeedCache";
export class FollowListCache extends RefreshFeedCache<TaggedNostrEvent> {
constructor() {
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 { EventKind, RequestBuilder, SystemInterface, TaggedNostrEvent } from "@snort/system";
import debug from "debug";
import { db } from "@/Db";
import { RefreshFeedCache, TWithCreated } from "./RefreshFeedCache";
import { LoginSession } from "@/Utils/Login";
import { Day, Hour } from "@/Utils/Const";
import { LoginSession } from "@/Utils/Login";
import { RefreshFeedCache, TWithCreated } from "./RefreshFeedCache";
const WindowSize = Hour * 6;
const MaxCacheWindow = Day * 7;

View File

@ -1,9 +1,11 @@
import { EventKind, EventPublisher, RequestBuilder, TaggedNostrEvent } from "@snort/system";
import { UnwrappedGift, db } from "@/Db";
import { db,UnwrappedGift } from "@/Db";
import { findTag, unwrap } from "@/Utils";
import { RefreshFeedCache } from "./RefreshFeedCache";
import { LoginSession, LoginSessionType } from "@/Utils/Login";
import { RefreshFeedCache } from "./RefreshFeedCache";
export class GiftWrapCache extends RefreshFeedCache<UnwrappedGift> {
constructor() {
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 { 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> {
#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 { db,Payment } from "@/Db";
export class Payments extends FeedCache<Payment> {
constructor() {
super("PaymentsCache", db.payments);

View File

@ -1,5 +1,6 @@
import { FeedCache } from "@snort/shared";
import { EventPublisher, RequestBuilder, TaggedNostrEvent } from "@snort/system";
import { LoginSession } from "@/Utils/Login";
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 { EventInteractionCache } from "./EventInteractionCache";
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 { NotificationsCache } from "./Notifications";
import { FollowsFeedCache } from "./FollowsFeed";
import { FollowListCache } from "./FollowListCache";
import { Payments } from "./PaymentsCache";
export const SystemDb = new SnortSystemDb();
export const UserCache = new UserProfileCache(SystemDb.users);

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,12 +1,13 @@
import "./Invoice.css";
import { useState } from "react";
import { useIntl, FormattedMessage } from "react-intl";
import { useMemo } from "react";
import { decodeInvoice } from "@snort/shared";
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 SendSats from "@/Components/SendSats/SendSats";
import { useWallet } from "@/Wallet";
import messages from "../messages";

View File

@ -1,10 +1,11 @@
import "./LinkPreview.css";
import { CSSProperties, useEffect, useState } from "react";
import { MediaElement } from "@/Components/Embed/MediaElement";
import Spinner from "@/Components/Icons/Spinner";
import SnortApi, { LinkPreviewData } from "@/External/SnortApi";
import useImgProxy from "@/Hooks/useImgProxy";
import { MediaElement } from "@/Components/Embed/MediaElement";
async function fetchUrlPreviewInfo(url: string) {
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 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 {
mime: string;

View File

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

View File

@ -1,5 +1,5 @@
import { MixCloudRegex } from "@/Utils/Const";
import useLogin from "@/Hooks/useLogin";
import { MixCloudRegex } from "@/Utils/Const";
const MixCloudEmbed = ({ link }: { link: string }) => {
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 { Link } from "react-router-dom";
import Mention from "@/Components/Embed/Mention";
import NoteQuote from "@/Components/Event/NoteQuote";

View File

@ -1,15 +1,15 @@
import { LNURL } from "@snort/shared";
import { NostrEvent } from "@snort/system";
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 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 useLogin from "@/Hooks/useLogin";
import { dedupe, findTag, getDisplayName,hexToBech32 } from "@/Utils";
import { useWallet } from "@/Wallet";
import { WalletInvoiceState } from "@/Wallet";
export default function PubkeyList({ ev, className }: { ev: NostrEvent; className?: string }) {

View File

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

View File

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

View File

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

View File

@ -1,33 +1,34 @@
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 classNames from "classnames";
import { ClipboardEventHandler, DragEvent, useEffect } from "react";
import { FormattedMessage, useIntl } from "react-intl";
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 { 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 { 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 { ZapTarget } from "@/Utils/Zapper";
import FileUploadProgress from "../FileUpload";
import { OkResponseRow } from "./OkResponseRow";
export function NoteCreator() {
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 { 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 useLogin from "@/Hooks/useLogin";
import Icon from "@/Components/Icons/Icon";
import { useNoteCreator } from "@/State/NoteCreator";
import { isFormElement } from "@/Utils";
import { NoteCreator } from "./NoteCreator";
import { FormattedMessage } from "react-intl";
export const NoteCreatorButton = ({
className,

View File

@ -1,16 +1,17 @@
import AsyncButton from "@/Components/Button/AsyncButton";
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 { sanitizeRelayUrl,unwrap } from "@snort/shared";
import { OkResponse } from "@snort/system";
import { useState } from "react";
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 }) {
const [r, setResult] = useState(rsp);
const { formatMessage } = useIntl();

View File

@ -1,8 +1,9 @@
import { useLocale } from "@/IntlProvider";
import NostrBandApi from "@/External/NostrBand";
import { FormattedMessage } from "react-intl";
import useCachedFetch from "@/Hooks/useCachedFetch";
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 }) {
const { lang } = useLocale();

View File

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

View File

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

View File

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

View File

@ -1,13 +1,13 @@
import "./Markdown.css";
import { ReactNode, forwardRef, useMemo } from "react";
import { transformText } from "@snort/system";
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 markedFootnote, { Footnotes, Footnote, FootnoteRef } from "marked-footnote";
import { ProxyImg } from "@/Components/ProxyImg";
import NostrLink from "@/Components/Embed/NostrLink";
import { ProxyImg } from "@/Components/ProxyImg";
interface MarkdownProps {
content: string;

View File

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

View File

@ -1,16 +1,19 @@
import "./Note.css";
import { ReactNode } from "react";
import { EventKind, NostrEvent, TaggedNostrEvent } from "@snort/system";
import { NostrFileElement } from "@/Components/Event/NostrFileHeader";
import ZapstrEmbed from "@/Components/Embed/ZapstrEmbed";
import { ReactNode } from "react";
import PubkeyList from "@/Components/Embed/PubkeyList";
import { LiveEvent } from "@/Components/LiveStream/LiveEvent";
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 ZapstrEmbed from "@/Components/Embed/ZapstrEmbed";
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 {
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 { Menu, MenuItem } from "@szhsin/react-menu";
import { useEffect, useState } from "react";
import { FormattedMessage, useIntl } from "react-intl";
import Icon from "@/Components/Icons/Icon";
import { setPinned, setBookmarked } from "@/Utils/Login";
import messages from "@/Components/messages";
import SnortApi from "@/External/SnortApi";
import useEventPublisher from "@/Hooks/useEventPublisher";
import useLogin from "@/Hooks/useLogin";
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 SnortApi from "@/External/SnortApi";
import { SubscriptionType, getCurrentSubscription } from "@/Utils/Subscription";
export interface NoteTranslation {
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 { countLeadingZeros, NostrLink,ParsedZap, TaggedNostrEvent } from "@snort/system";
import { useUserProfile } from "@snort/system-react";
import { Menu, MenuItem } from "@szhsin/react-menu";
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 { 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 { ZapsSummary } from "@/Components/Event/Zap";
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";

View File

@ -1,4 +1,5 @@
import "./Note.css";
import ProfileImage from "@/Components/User/ProfileImage";
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 { useInView } from "react-intersection-observer";
import { FormattedMessage, useIntl } from "react-intl";
import classNames from "classnames";
import { EventExt, EventKind, HexKey, NostrLink, NostrPrefix, TaggedNostrEvent } from "@snort/system";
import { useEventReactions } from "@snort/system-react";
import { Link, useNavigate } from "react-router-dom";
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 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 NoteTime from "./NoteTime";
import NoteFooter from "./NoteFooter";
import Reactions from "./Reactions";
import DisplayName from "@/Components/User/DisplayName";
import { ProfileLink } from "@/Components/User/ProfileLink";
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 { NoteProps } from "./Note";
import { chainKey } from "@/Hooks/useThreadContext";
import { ProfileLink } from "@/Components/User/ProfileLink";
import DisplayName from "@/Components/User/DisplayName";
import { NoteContextMenu, NoteTranslation } from "./NoteContextMenu";
import NoteFooter from "./NoteFooter";
import NoteTime from "./NoteTime";
import Poll from "./Poll";
import Reactions from "./Reactions";
import Reveal from "./Reveal";
const TEXT_TRUNCATE_LENGTH = 400;

View File

@ -1,15 +1,16 @@
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 { 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 { eventLink, hexToBech32, getDisplayName } from "@/Utils";
import useModeration from "@/Hooks/useModeration";
import { FormattedMessage } from "react-intl";
import Icon from "@/Components/Icons/Icon";
import { useUserProfile } from "@snort/system-react";
import { useInView } from "react-intersection-observer";
import useModeration from "@/Hooks/useModeration";
import { eventLink, getDisplayName,hexToBech32 } from "@/Utils";
export interface NoteReactionProps {
data: TaggedNostrEvent;

View File

@ -1,16 +1,16 @@
import { TaggedNostrEvent, ParsedZap, NostrLink } from "@snort/system";
import { LNURL } from "@snort/shared";
import { NostrLink,ParsedZap, TaggedNostrEvent } from "@snort/system";
import { useUserProfile } from "@snort/system-react";
import { useState } from "react";
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 SendSats from "@/Components/SendSats/SendSats";
import useEventPublisher from "@/Hooks/useEventPublisher";
import useLogin from "@/Hooks/useLogin";
import { unwrap } from "@/Utils";
import { formatShort } from "@/Utils/Number";
import { useWallet } from "@/Wallet";
interface PollProps {
ev: TaggedNostrEvent;

View File

@ -1,18 +1,18 @@
import "./Reactions.css";
import { useState, useMemo, useEffect } from "react";
import { useIntl, FormattedMessage } from "react-intl";
import { TaggedNostrEvent, ParsedZap } from "@snort/system";
import { ParsedZap,TaggedNostrEvent } from "@snort/system";
import { useEffect,useMemo, useState } from "react";
import { FormattedMessage,useIntl } from "react-intl";
import { formatShort } from "@/Utils/Number";
import CloseButton from "@/Components/Button/CloseButton";
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 { 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 CloseButton from "@/Components/Button/CloseButton";
interface ReactionsProps {
show: boolean;

View File

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

View File

@ -1,11 +1,11 @@
import { IMeta } from "@snort/system";
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 useLogin from "@/Hooks/useLogin";
import { MediaElement } from "@/Components/Embed/MediaElement";
import { Link } from "react-router-dom";
import { IMeta } from "@snort/system";
import { FileExtensionRegex } from "@/Utils/Const";
interface RevealMediaProps {
creator: string;

View File

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

View File

@ -1,16 +1,17 @@
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 { 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 Collapsed from "@/Components/Collapsed";
import Note from "@/Components/Event/Note";
import NoteGhost from "@/Components/Event/NoteGhost";
import Collapsed from "@/Components/Collapsed";
import { ThreadContext, ThreadContextWrapper, chainKey } from "@/Hooks/useThreadContext";
import { chainKey,ThreadContext, ThreadContextWrapper } from "@/Hooks/useThreadContext";
import { getAllLinkReactions, getLinkReactions } from "@/Utils";
import messages from "../messages";

View File

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

View File

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

View File

@ -1,15 +1,18 @@
import "./ZapGoal.css";
import { useState } from "react";
import { NostrEvent, NostrLink } from "@snort/system";
import useZapsFeed from "@/Feed/ZapsFeed";
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 { useState } from "react";
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 }) {
const [zap, setZap] = useState(false);
const zaps = useZapsFeed(NostrLink.fromEvent(ev));

View File

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

View File

@ -1,11 +1,12 @@
import { NostrLink } from "@snort/system";
import { useReactions } from "@snort/system-react";
import { useContext } from "react";
import { useArticles } from "@/Feed/ArticlesFeed";
import { orderDescending } from "@/Utils";
import Note from "../Event/Note";
import { useContext } from "react";
import { DeckContext } from "@/Pages/DeckLayout";
import { orderDescending } from "@/Utils";
import Note from "../Event/Note";
export default function Articles() {
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 Icon from "@/Components/Icons/Icon";
import useLogin from "@/Hooks/useLogin";
import { LoginStore } from "@/Utils/Login";
export type DisplayAs = "list" | "grid";
type DisplaySelectorProps = {

View File

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

View File

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

View File

@ -1,11 +1,12 @@
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 useLogin from "@/Hooks/useLogin";
import { Newest } from "@/Utils/Login";
export type RootTab =

View File

@ -1,16 +1,17 @@
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 { 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 { TimelineRenderer } from "@/Components/Feed/TimelineRenderer";
import { LiveStreams } from "@/Components/LiveStream/LiveStreams";
import useTimelineFeed, { TimelineFeed, TimelineSubject } from "@/Feed/TimelineFeed";
import useLogin from "@/Hooks/useLogin";
import useModeration from "@/Hooks/useModeration";
import { dedupeByPubkey, findTag } from "@/Utils";
export interface TimelineProps {
postsOnly: boolean;

View File

@ -1,19 +1,20 @@
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 { 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 { LiveStreams } from "@/Components/LiveStream/LiveStreams";
import useLogin from "@/Hooks/useLogin";
import useHashtagsFeed from "@/Feed/HashtagsFeed";
import { ShowMoreInView } from "@/Components/Event/ShowMore";
import { TimelineRenderer } from "@/Components/Feed/TimelineRenderer";
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 {
postsOnly: boolean;

View File

@ -1,5 +1,5 @@
import { ReactNode, useCallback } from "react";
import { TaggedNostrEvent } from "@snort/system";
import { ReactNode, useCallback } from "react";
import Note from "@/Components/Event/Note";
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 { ReactNode, useEffect, useMemo, useRef, useState } from "react";
import { TimelineFragment } from "@/Components/Feed/TimelineFragment";
import { DisplayAs } from "@/Components/Feed/DisplayAsSelector";
import { SpotlightThreadModal } from "@/Components/Spotlight/SpotlightThreadModal";
import ImageGridItem from "@/Components/Feed/ImageGridItem";
import { useInView } from "react-intersection-observer";
import { FormattedMessage } from "react-intl";
import ErrorBoundary from "@/Components/ErrorBoundary";
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 {
frags: Array<TimelineFragment>;

View File

@ -1,9 +1,9 @@
import { useCallback, useMemo } from "react";
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 FollowListBase from "@/Components/User/FollowListBase";
import useTimelineFeed, { TimelineFeed } from "@/Feed/TimelineFeed";
import useModeration from "@/Hooks/useModeration";
export default function UsersFeed({ keyword, sortPopular = true }: { keyword: string; sortPopular?: boolean }) {

View File

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

View File

@ -1,4 +1,5 @@
import "./Toggle.css";
import { IconProps } from "./Icon";
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 Lottie from "lottie-react";
import { useState, useEffect } from "react";
import { useEffect,useState } from "react";
import { FormattedMessage } from "react-intl";
import { Link, useNavigate } from "react-router-dom";
import Modal from "./Modal/Modal";
import SnortApi from "@/External/SnortApi";
import Hugs from "@/hug.json";
import { getCurrentRefCode, getDisplayName } from "@/Utils";
import Modal from "./Modal/Modal";
const InviteModal = () => {
const [pubkey, setPubkey] = useState("");

View File

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

View File

@ -1,11 +1,12 @@
import { mapEventToProfile } from "@snort/system";
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 useEventPublisher from "@/Hooks/useEventPublisher";
import { FormattedMessage } from "react-intl";
import useLogin from "@/Hooks/useLogin";
import AccountName from "./AccountName";
interface ActiveAccountProps {
name?: string;

View File

@ -1,14 +1,15 @@
/* eslint-disable @typescript-eslint/no-explicit-any */
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 AccountName from "./AccountName";
import ActiveAccount from "./ActiveAccount";
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 {
interface Window {

View File

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

View File

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

View File

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

View File

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

View File

@ -1,28 +1,28 @@
import { useEffect, useMemo, useState, ChangeEvent } from "react";
import { useIntl, FormattedMessage } from "react-intl";
import { mapEventToProfile,UserMetadata } from "@snort/system";
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 { 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 { formatShort } from "@/Utils/Number";
import { debounce } from "@/Utils";
import {
ServiceProvider,
CheckRegisterResponse,
HandleAvailability,
HandleRegisterResponse,
ServiceConfig,
ServiceError,
HandleAvailability,
ServiceErrorCode,
HandleRegisterResponse,
CheckRegisterResponse,
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 { UserCache } from "@/Cache";
import { formatShort } from "@/Utils/Number";
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 { 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 }) {
return (

View File

@ -1,17 +1,18 @@
import useLogin from "@/Hooks/useLogin";
import "./PinPrompt.css";
import { ReactNode, useRef, useState } from "react";
import { FormattedMessage, useIntl } from "react-intl";
import { unwrap } from "@snort/shared";
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 { LoginStore, createPublisher, sessionNeedsPin } from "@/Utils/Login";
import Modal from "../Modal/Modal";
import AsyncButton from "../Button/AsyncButton";
import useLogin from "@/Hooks/useLogin";
import { createPublisher, LoginStore, sessionNeedsPin } from "@/Utils/Login";
import { GetPowWorker } from "@/Utils/wasm";
import AsyncButton from "../Button/AsyncButton";
import Modal from "../Modal/Modal";
export function PinPrompt({
onResult,
onCancel,

View File

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

View File

@ -1,6 +1,7 @@
import useImgProxy from "@/Hooks/useImgProxy";
import { HTMLProps, ReactNode, forwardRef, useState, useMemo, useEffect } from "react";
import { forwardRef, HTMLProps, ReactNode, useEffect,useMemo, useState } from "react";
import { FormattedMessage } from "react-intl";
import useImgProxy from "@/Hooks/useImgProxy";
import { getUrlHostname } from "@/Utils";
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 { SnortContext } from "@snort/system-react";
import { useContext, useState } from "react";
import { FormattedMessage } from "react-intl";
import Modal from "@/Components/Modal/Modal";
import messages from "./messages";
import useLogin from "@/Hooks/useLogin";
import AsyncButton from "./Button/AsyncButton";
import messages from "./messages";
export function ReBroadcaster({ onClose, ev }: { onClose: () => void; ev: TaggedNostrEvent }) {
const [selected, setSelected] = useState<Array<string>>();

View File

@ -1,17 +1,19 @@
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 { 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 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 {
addr: string;

View File

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

View File

@ -1,16 +1,19 @@
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 useTimelineFeed, { TimelineFeedOptions, TimelineSubject } from "../../Feed/TimelineFeed";
import ProfileImage from "@/Components/User/ProfileImage";
import { NostrLink, tryParseNostrLink } 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 { fetchNip05Pubkey } from "@/Utils/Nip05/Verifier";
import useTimelineFeed, { TimelineFeedOptions, TimelineSubject } from "../../Feed/TimelineFeed";
const MAX_RESULTS = 3;

View File

@ -1,25 +1,25 @@
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 { 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 useEventPublisher from "@/Hooks/useEventPublisher";
import ProfileImage from "@/Components/User/ProfileImage";
import Modal from "@/Components/Modal/Modal";
import QrCode from "@/Components/QrCode";
import Copy from "@/Components/Copy/Copy";
import { debounce } from "@/Utils";
import { LNWallet, useWallet } from "@/Wallet";
import ProfileImage from "@/Components/User/ProfileImage";
import useEventPublisher from "@/Hooks/useEventPublisher";
import useLogin from "@/Hooks/useLogin";
import AsyncButton from "@/Components/Button/AsyncButton";
import { ZapTarget, ZapTargetResult, Zapper } from "@/Utils/Zapper";
import { debounce } from "@/Utils";
import { formatShort } from "@/Utils/Number";
import { Zapper,ZapTarget, ZapTargetResult } from "@/Utils/Zapper";
import { LNWallet, useWallet } from "@/Wallet";
import messages from "../messages";
import CloseButton from "@/Components/Button/CloseButton";
enum ZapType {
PublicZap = 1,

View File

@ -1,6 +1,7 @@
import { useCallback, useEffect, useMemo, useState } from "react";
import Modal from "@/Components/Modal/Modal";
import Icon from "@/Components/Icons/Icon";
import Modal from "@/Components/Modal/Modal";
import { ProxyImg } from "@/Components/ProxyImg";
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 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 {
thread?: NostrLink;

View File

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

View File

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

View File

@ -1,9 +1,10 @@
import { MetadataCache } from "@snort/system";
import { FormattedMessage } from "react-intl";
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 { BaseUITask } from "@/Components/Tasks/index";
import { LoginSession } from "@/Utils/Login";
export class BackupKeyTask extends BaseUITask {
id = "backup-key";

View File

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

View File

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

View File

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

View File

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

View File

@ -1,17 +1,19 @@
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 { UITask } from "@/Components/Tasks/index";
import useLogin from "@/Hooks/useLogin";
import { BackupKeyTask } from "./BackupKey";
import { DonateTask } from "./DonateTask";
import { Nip5Task } from "./Nip5Task";
import { RenewSubTask } from "./RenewSubscription";
import { NoticeZapPoolDefault } from "./NoticeZapPool";
import { BackupKeyTask } from "./BackupKey";
import { ExternalStore } from "@snort/shared";
import CloseButton from "@/Components/Button/CloseButton";
import { RenewSubTask } from "./RenewSubscription";
class TaskStore extends ExternalStore<Array<UITask>> {
#tasks: Array<UITask>;

View File

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

View File

@ -1,17 +1,19 @@
import "./Text.css";
import { ReactNode, useState } from "react";
import { HexKey, ParsedFragment, parseIMeta } from "@snort/system";
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 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 HighlightedText from "../HighlightedText";
import { ProxyImg } from "../ProxyImg";
import { SpotlightMediaModal } from "../Spotlight/SpotlightMedia";
import HighlightedText from "../HighlightedText";
import { useTextTransformer } from "@/Hooks/useTextTransformCache";
export interface TextProps {
id: string;

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