+
{board.name}
-
-
{stripHtml(post.title)}
+ {isNewWithin1Hour(post.createdAt) && (
+
+ )}
+
{stripHtml(post.title)}
{(post.stat?.commentsCount ?? 0) > 0 && (
-
[{post.stat?.commentsCount}]
+
[{post.stat?.commentsCount}]
)}
-
+
{formatDateYmd(post.createdAt)}
@@ -248,15 +277,24 @@ export function BoardPanelClient({
{categoryName || board.name}
+
+ {/* 기본 아이콘 */}
+
+
+
+ {/* 호버 아이콘 */}
+
+
+
+
{siblingBoards.map((sb) => (
setSelectedBoardId(sb.id)}
- className={`px-[16px] py-[8px] rounded-[14px] text-[14px] shrink-0 cursor-pointer ${
- sb.id === selectedBoardId ? "bg-[#5c5c5c] text-white border border-[#5c5c5c]" : "bg-white text-[#5c5c5c] border border-[#d5d5d5]"
- }`}
+ className={`px-[16px] py-[8px] rounded-[14px] text-[14px] shrink-0 cursor-pointer ${sb.id === selectedBoardId ? "bg-[#5c5c5c] text-white border border-[#5c5c5c]" : "bg-white text-[#5c5c5c] border border-[#d5d5d5] hover:bg-[#5c5c5c] hover:text-white hover:border-[#5c5c5c] transition-colors"
+ }`}
>
{sb.name}
@@ -264,23 +302,29 @@ export function BoardPanelClient({
-
- {board.name}
- 더보기
-
+ {!isTextMain && (
+
+ {board.name}
+ 더보기
+
+ )}
{isTextMain && selectedBoardData.textPosts ? (
{selectedBoardData.textPosts.map((p) => (
-
+
-
-
-
{stripHtml(p.title)}
+
+ {isNewWithin1Hour(p.createdAt) && (
+
+ )}
+
{stripHtml(p.title)}
{(p.stat?.commentsCount ?? 0) > 0 && (
[{p.stat?.commentsCount}]
)}
@@ -292,7 +336,7 @@ export function BoardPanelClient({
) : (
-
+
)}
diff --git a/src/app/components/HeroBanner.tsx b/src/app/components/HeroBanner.tsx
index 6b58cab..5481bd3 100644
--- a/src/app/components/HeroBanner.tsx
+++ b/src/app/components/HeroBanner.tsx
@@ -88,7 +88,7 @@ export function HeroBanner({ subItems, activeSubId, hideSubOnMobile }: { subItem
className={
s.id === activeSubId
? "px-3 h-[28px] rounded-full bg-[#F94B37] text-white text-[12px] leading-[28px] whitespace-nowrap"
- : "px-3 h-[28px] rounded-full bg-transparent text-white/85 hover:text-white border border-white/30 text-[12px] leading-[28px] whitespace-nowrap"
+ : "px-3 h-[28px] rounded-full bg-transparent text-white/85 hover:bg-[#F94B37] hover:text-white text-[12px] leading-[28px] whitespace-nowrap"
}
>
{s.name}
@@ -130,6 +130,32 @@ export function HeroBanner({ subItems, activeSubId, hideSubOnMobile }: { subItem
))}
+ {/* 좌우 내비게이션 버튼 */}
+ {numSlides > 1 && (
+
+ )}
+
{/* Pagination - Figma 스타일: 활성은 주황 바, 비활성은 회색 점 (배너 위에 오버랩) */}
{numSlides > 1 && (
@@ -161,7 +187,7 @@ export function HeroBanner({ subItems, activeSubId, hideSubOnMobile }: { subItem
className={
s.id === activeSubId
? "px-3 h-[28px] rounded-full bg-[#F94B37] text-white text-[12px] leading-[28px] whitespace-nowrap"
- : "px-3 h-[28px] rounded-full bg-transparent text-white/85 hover:text-white border border-white/30 text-[12px] leading-[28px] whitespace-nowrap"
+ : "px-3 h-[28px] rounded-full bg-transparent text-white/85 hover:bg-[#F94B37] hover:text-white text-[12px] leading-[28px] whitespace-nowrap"
}
>
{s.name}
diff --git a/src/app/components/PostList.tsx b/src/app/components/PostList.tsx
index e67c19d..819df63 100644
--- a/src/app/components/PostList.tsx
+++ b/src/app/components/PostList.tsx
@@ -35,7 +35,7 @@ function stripHtml(html: string | null | undefined): string {
return html.replace(/<[^>]*>/g, "").trim();
}
-export function PostList({ boardId, sort = "recent", q, tag, author, authorId, start, end, variant = "default", newPostHref }: { boardId?: string; sort?: "recent" | "popular"; q?: string; tag?: string; author?: string; authorId?: string; start?: string; end?: string; variant?: "default" | "board"; newPostHref?: string }) {
+export function PostList({ boardId, sort = "recent", q, tag, author, authorId, start, end, variant = "default", newPostHref, titleHoverOrange, pageSizeOverride, compact }: { boardId?: string; sort?: "recent" | "popular"; q?: string; tag?: string; author?: string; authorId?: string; start?: string; end?: string; variant?: "default" | "board"; newPostHref?: string; titleHoverOrange?: boolean; pageSizeOverride?: number; compact?: boolean }) {
const sp = useSearchParams();
const listContainerRef = useRef
(null);
const [lockedMinHeight, setLockedMinHeight] = useState(null);
@@ -43,7 +43,9 @@ export function PostList({ boardId, sort = "recent", q, tag, author, authorId, s
// board 변형에서는 URL에서 pageSize를 읽고, 기본값은 20
const defaultPageSize = variant === "board" ? 20 : 10;
const pageSizeParam = sp.get("pageSize");
- const pageSize = pageSizeParam ? Math.min(50, Math.max(10, parseInt(pageSizeParam, 10))) : defaultPageSize;
+ const pageSize = (variant === "board" && pageSizeOverride)
+ ? pageSizeOverride
+ : (pageSizeParam ? Math.min(50, Math.max(10, parseInt(pageSizeParam, 10))) : defaultPageSize);
// board 변형: 번호 페이지네이션
const initialPage = useMemo(() => Math.max(1, parseInt(sp.get("page") || "1", 10)), [sp]);
@@ -168,15 +170,17 @@ export function PostList({ boardId, sort = "recent", q, tag, author, authorId, s