eslint: sort imports & exports
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
parent
046d4d97bd
commit
3fe3c7a98d
@ -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"],
|
||||||
|
@ -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",
|
||||||
|
@ -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> {
|
||||||
|
@ -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() {
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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];
|
||||||
|
@ -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);
|
||||||
|
@ -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 };
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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";
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
@ -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() {
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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<{
|
||||||
|
@ -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">
|
||||||
|
@ -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;
|
||||||
|
@ -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";
|
||||||
|
@ -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();
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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);
|
||||||
|
@ -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";
|
||||||
|
@ -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 }) {
|
||||||
|
@ -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
|
||||||
|
@ -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");
|
||||||
|
@ -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,
|
||||||
|
@ -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();
|
||||||
|
@ -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,
|
||||||
|
@ -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();
|
||||||
|
@ -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();
|
||||||
|
@ -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,
|
||||||
|
@ -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 ? (
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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 {
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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 = ({
|
||||||
|
@ -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));
|
||||||
|
@ -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(
|
||||||
|
@ -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();
|
||||||
|
@ -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 = {
|
||||||
|
@ -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 }) => {
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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 =
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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";
|
||||||
|
@ -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>;
|
||||||
|
@ -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 }) {
|
||||||
|
@ -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 {
|
||||||
|
@ -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">) {
|
||||||
|
@ -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("");
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
@ -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 {
|
||||||
|
@ -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;
|
||||||
|
@ -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");
|
||||||
|
@ -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(() => {
|
||||||
|
@ -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;
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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 (
|
||||||
|
@ -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,
|
||||||
|
@ -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));
|
||||||
|
@ -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> & {
|
||||||
|
@ -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>>();
|
||||||
|
@ -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;
|
||||||
|
@ -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 }) => {
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
@ -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,
|
||||||
|
@ -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";
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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,
|
||||||
|
@ -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 {
|
||||||
|
@ -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";
|
||||||
|
@ -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 {
|
||||||
|
@ -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 {
|
||||||
|
@ -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 {
|
||||||
|
@ -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";
|
||||||
|
@ -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>;
|
||||||
|
@ -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 {
|
||||||
|
@ -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
Loading…
Reference in New Issue
Block a user