diff --git a/src/components/Content/index.tsx b/src/components/Content/index.tsx
index 262ac3f..7e252f8 100644
--- a/src/components/Content/index.tsx
+++ b/src/components/Content/index.tsx
@@ -27,128 +27,99 @@ import ImageGallery from '../ImageGallery'
import VideoPlayer from '../VideoPlayer'
import WebPreview from '../WebPreview'
-const Content = memo(
- ({
- event,
- className,
- size = 'normal'
- }: {
- event: Event
- className?: string
- size?: 'normal' | 'small'
- }) => {
- const nodes = parseContent(event.content, [
- EmbeddedImageParser,
- EmbeddedVideoParser,
- EmbeddedNormalUrlParser,
- EmbeddedWebsocketUrlParser,
- EmbeddedEventParser,
- EmbeddedMentionParser,
- EmbeddedHashtagParser,
- EmbeddedEmojiParser
- ])
+const Content = memo(({ event, className }: { event: Event; className?: string }) => {
+ const nodes = parseContent(event.content, [
+ EmbeddedImageParser,
+ EmbeddedVideoParser,
+ EmbeddedNormalUrlParser,
+ EmbeddedWebsocketUrlParser,
+ EmbeddedEventParser,
+ EmbeddedMentionParser,
+ EmbeddedHashtagParser,
+ EmbeddedEmojiParser
+ ])
- const imageInfos = event.tags
- .map((tag) => extractImageInfoFromTag(tag))
- .filter(Boolean) as TImageInfo[]
- const allImages = nodes
- .map((node) => {
- if (node.type === 'image') {
- const imageInfo = imageInfos.find((image) => image.url === node.data)
- return imageInfo ?? { url: node.data }
- }
- if (node.type === 'images') {
- const urls = Array.isArray(node.data) ? node.data : [node.data]
- return urls.map((url) => {
- const imageInfo = imageInfos.find((image) => image.url === url)
- return imageInfo ?? { url }
- })
- }
- return null
- })
- .filter(Boolean)
- .flat() as TImageInfo[]
- let imageIndex = 0
+ const imageInfos = event.tags
+ .map((tag) => extractImageInfoFromTag(tag))
+ .filter(Boolean) as TImageInfo[]
+ const allImages = nodes
+ .map((node) => {
+ if (node.type === 'image') {
+ const imageInfo = imageInfos.find((image) => image.url === node.data)
+ return imageInfo ?? { url: node.data }
+ }
+ if (node.type === 'images') {
+ const urls = Array.isArray(node.data) ? node.data : [node.data]
+ return urls.map((url) => {
+ const imageInfo = imageInfos.find((image) => image.url === url)
+ return imageInfo ?? { url }
+ })
+ }
+ return null
+ })
+ .filter(Boolean)
+ .flat() as TImageInfo[]
+ let imageIndex = 0
- const emojiInfos = extractEmojiInfosFromTags(event.tags)
+ const emojiInfos = extractEmojiInfosFromTags(event.tags)
- const lastNormalUrlNode = nodes.findLast((node) => node.type === 'url')
- const lastNormalUrl =
- typeof lastNormalUrlNode?.data === 'string' ? lastNormalUrlNode.data : undefined
+ const lastNormalUrlNode = nodes.findLast((node) => node.type === 'url')
+ const lastNormalUrl =
+ typeof lastNormalUrlNode?.data === 'string' ? lastNormalUrlNode.data : undefined
- return (
-
- {nodes.map((node, index) => {
- if (node.type === 'text') {
- return node.data
- }
- if (node.type === 'image' || node.type === 'images') {
- const start = imageIndex
- const end = imageIndex + (Array.isArray(node.data) ? node.data.length : 1)
- imageIndex = end
- return (
-
- )
- }
- if (node.type === 'video') {
- return (
-
- )
- }
- if (node.type === 'url') {
- return
- }
- if (node.type === 'websocket-url') {
- return
- }
- if (node.type === 'event') {
- const id = node.data.split(':')[1]
- return (
-
- )
- }
- if (node.type === 'mention') {
- return
- }
- if (node.type === 'hashtag') {
- return
- }
- if (node.type === 'emoji') {
- const shortcode = node.data.split(':')[1]
- const emoji = emojiInfos.find((e) => e.shortcode === shortcode)
- if (!emoji) return node.data
- return
- }
- return null
- })}
- {lastNormalUrl && (
-
- )}
-
- )
- }
-)
+ return (
+
+ {nodes.map((node, index) => {
+ if (node.type === 'text') {
+ return node.data
+ }
+ if (node.type === 'image' || node.type === 'images') {
+ const start = imageIndex
+ const end = imageIndex + (Array.isArray(node.data) ? node.data.length : 1)
+ imageIndex = end
+ return (
+
+ )
+ }
+ if (node.type === 'video') {
+ return (
+
+ )
+ }
+ if (node.type === 'url') {
+ return
+ }
+ if (node.type === 'websocket-url') {
+ return
+ }
+ if (node.type === 'event') {
+ const id = node.data.split(':')[1]
+ return
+ }
+ if (node.type === 'mention') {
+ return
+ }
+ if (node.type === 'hashtag') {
+ return
+ }
+ if (node.type === 'emoji') {
+ const shortcode = node.data.split(':')[1]
+ const emoji = emojiInfos.find((e) => e.shortcode === shortcode)
+ if (!emoji) return node.data
+ return
+ }
+ return null
+ })}
+ {lastNormalUrl && }
+
+ )
+})
Content.displayName = 'Content'
export default Content
diff --git a/src/components/ImageGallery/index.tsx b/src/components/ImageGallery/index.tsx
index c90e4f4..f2afb33 100644
--- a/src/components/ImageGallery/index.tsx
+++ b/src/components/ImageGallery/index.tsx
@@ -1,6 +1,5 @@
import { randomString } from '@/lib/random'
import { cn } from '@/lib/utils'
-import { useScreenSize } from '@/providers/ScreenSizeProvider'
import modalManager from '@/services/modal-manager.service'
import { TImageInfo } from '@/types'
import { ReactNode, useEffect, useMemo, useState } from 'react'
@@ -14,19 +13,16 @@ export default function ImageGallery({
className,
images,
isNsfw = false,
- size = 'normal',
start = 0,
end = images.length
}: {
className?: string
images: TImageInfo[]
isNsfw?: boolean
- size?: 'normal' | 'small'
start?: number
end?: number
}) {
const id = useMemo(() => `image-gallery-${randomString()}`, [])
- const { isSmallScreen } = useScreenSize()
const [index, setIndex] = useState(-1)
useEffect(() => {
if (index >= 0) {
@@ -50,34 +46,21 @@ export default function ImageGallery({
imageContent = (
handlePhotoClick(e, 0)}
/>
)
- } else if (size === 'small') {
+ } else if (displayImages.length === 2 || displayImages.length === 4) {
imageContent = (
-
+
{displayImages.map((image, i) => (
handlePhotoClick(e, i)}
- />
- ))}
-
- )
- } else if (isSmallScreen && (displayImages.length === 2 || displayImages.length === 4)) {
- imageContent = (
-
- {displayImages.map((image, i) => (
- handlePhotoClick(e, i)}
/>
@@ -90,7 +73,7 @@ export default function ImageGallery({
{displayImages.map((image, i) => (
handlePhotoClick(e, i)}
/>
diff --git a/src/components/NoteCard/MainNoteCard.tsx b/src/components/NoteCard/MainNoteCard.tsx
index 309c727..bad1463 100644
--- a/src/components/NoteCard/MainNoteCard.tsx
+++ b/src/components/NoteCard/MainNoteCard.tsx
@@ -1,7 +1,6 @@
import { Button } from '@/components/ui/button'
import { Separator } from '@/components/ui/separator'
import { toNote } from '@/lib/link'
-import { cn } from '@/lib/utils'
import { useSecondaryPage } from '@/PageManager'
import { Event } from 'nostr-tools'
import { useEffect, useRef, useState } from 'react'
@@ -35,7 +34,7 @@ export default function MainNoteCard({
const checkHeight = () => {
const fullHeight = contentEl.scrollHeight
- if (fullHeight > 900) {
+ if (fullHeight > 1000) {
setShouldCollapse(true)
}
}
@@ -91,7 +90,7 @@ export default function MainNoteCard({
)}
- {!embedded && }
+ {!embedded && }
{!embedded && }
diff --git a/src/components/ReplyNote/index.tsx b/src/components/ReplyNote/index.tsx
index 6265fa7..601d770 100644
--- a/src/components/ReplyNote/index.tsx
+++ b/src/components/ReplyNote/index.tsx
@@ -55,7 +55,7 @@ export default function ReplyNote({
{parentEvent && (
{
e.stopPropagation()
@@ -65,7 +65,7 @@ export default function ReplyNote({
)}
{show ? (
<>
-
+
>
) : (
diff --git a/src/components/VideoPlayer/index.tsx b/src/components/VideoPlayer/index.tsx
index 3b67933..ae54943 100644
--- a/src/components/VideoPlayer/index.tsx
+++ b/src/components/VideoPlayer/index.tsx
@@ -6,13 +6,11 @@ import NsfwOverlay from '../NsfwOverlay'
export default function VideoPlayer({
src,
className,
- isNsfw = false,
- size = 'normal'
+ isNsfw = false
}: {
src: string
className?: string
isNsfw?: boolean
- size?: 'normal' | 'small'
}) {
const videoRef = useRef(null)
const containerRef = useRef(null)
@@ -51,7 +49,7 @@ export default function VideoPlayer({
ref={videoRef}
controls
playsInline
- className={cn('rounded-lg', size === 'small' ? 'max-h-[30vh]' : 'max-h-[50vh]', className)}
+ className={cn('rounded-lg max-h-[80vh] sm:max-h-[50vh] border', className)}
src={src}
onClick={(e) => e.stopPropagation()}
onPlay={(event) => {
diff --git a/src/components/WebPreview/index.tsx b/src/components/WebPreview/index.tsx
index e96aaf9..94d0710 100644
--- a/src/components/WebPreview/index.tsx
+++ b/src/components/WebPreview/index.tsx
@@ -4,15 +4,7 @@ import { useScreenSize } from '@/providers/ScreenSizeProvider'
import { useMemo } from 'react'
import Image from '../Image'
-export default function WebPreview({
- url,
- className,
- size = 'normal'
-}: {
- url: string
- className?: string
- size?: 'normal' | 'small'
-}) {
+export default function WebPreview({ url, className }: { url: string; className?: string }) {
const { isSmallScreen } = useScreenSize()
const { title, description, image } = useFetchWebMetadata(url)
const hostname = useMemo(() => {
@@ -56,20 +48,14 @@ export default function WebPreview({
{image && (
)}
{hostname}
-
- {title}
-
-
- {description}
-
+
{title}
+
{description}
)