{comment_text}
{/* Artwork reference link */} {artwork && (import React from 'react'
// ── Pagination ────────────────────────────────────────────────────────────────
function Pagination({ meta, onPageChange }) {
if (!meta) return null
const currentPage = Number(meta.current_page || 1)
const lastPage = meta.last_page != null ? Number(meta.last_page) : null
const hasMore = Boolean(meta.has_more)
if (lastPage !== null && lastPage <= 1) return null
if (lastPage === null && currentPage <= 1 && !hasMore) return null
const pages = []
if (lastPage !== null && lastPage <= 7) {
for (let i = 1; i <= lastPage; i++) pages.push(i)
} else if (lastPage !== null) {
const around = new Set(
[1, lastPage, currentPage, currentPage - 1, currentPage + 1].filter(
(p) => p >= 1 && p <= lastPage
)
)
const sorted = [...around].sort((a, b) => a - b)
for (let i = 0; i < sorted.length; i++) {
if (i > 0 && sorted[i] - sorted[i - 1] > 1) pages.push('…')
pages.push(sorted[i])
}
}
return (
)
}
// ── Pin icon (for artwork reference) ─────────────────────────────────────────
function PinIcon() {
return (
)
}
// ── Artwork image icon (for right panel label) ────────────────────────────────
function ImageIcon() {
return (
)
}
// ── Single comment row ────────────────────────────────────────────────────────
function CommentItem({ comment }) {
const { commenter, artwork, comment_text, time_ago, created_at } = comment
return (
{comment_text}
{
e.currentTarget.onerror = null
e.currentTarget.src = commenter.avatar_fallback || 'https://files.skinbase.org/default/avatar_default.webp'
}}
/>
{/* ── Main content ── */}
No comments found.