1(globalThis["TURBOPACK"] || (globalThis["TURBOPACK"] = [])).push([typeof document === "object" ? document.currentScript : undefined, 294179, ((__turbopack_context__) => { 3"use strict"; 4 5var __TURBOPACK__imported__module__43476__ = __turbopack_context__.i(43476); 6var __TURBOPACK__imported__module__25913__ = __turbopack_context__.i(25913); 7var __TURBOPACK__imported__module__47163__ = __turbopack_context__.i(47163); 8; 9; 10; 11const badgeVariants = (0, __TURBOPACK__imported__module__25913__["cva"])("inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 rounded-full border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap [&>svg]:pointer-events-none [&>svg]:size-3", { 12 variants: { 13 variant: { 14 default: "bg-primary text-primary-foreground", 15 secondary: "bg-secondary text-secondary-foreground", 16 destructive: "bg-destructive/10 text-destructive", 17 outline: "border-border text-foreground", 18 ghost: "hover:bg-muted hover:text-muted-foreground", 19 link: "text-primary underline-offset-4 hover:underline" 20 } 21 }, 22 defaultVariants: { 23 variant: "default" 24 } 25}); 26function Badge({ className, variant = "default", ...props }) { 27 return /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("span", { 28 className: (0, __TURBOPACK__imported__module__47163__["cn"])(badgeVariants({ 29 variant 30 }), className), 31 ...props 32 }); 33} 34; 35__turbopack_context__.s([ 36 "Badge", 37 0, 38 Badge 39]); 40}), 4160340, ((__turbopack_context__) => { 42"use strict"; 43 44// MERGED MODULE: [project]/node_modules/lucide-react/dist/esm/icons/lock.js [app-client] (ecmascript) <export default as Lock> 45; 46// MERGED MODULE: [project]/node_modules/lucide-react/dist/esm/icons/lock.js [app-client] (ecmascript) 47; 48/** 49 * @license lucide-react v1.7.0 - ISC 50 * 51 * This source code is licensed under the ISC license. 52 * See the LICENSE file in the root directory of this source tree. 53 */ var __TURBOPACK__imported__module__75254__ = __turbopack_context__.i(75254); 54; 55const __iconNode = [ 56 [ 57 "rect", 58 { 59 width: "18", 60 height: "11", 61 x: "3", 62 y: "11", 63 rx: "2", 64 ry: "2", 65 key: "1w4ew1" 66 } 67 ], 68 [ 69 "path", 70 { 71 d: "M7 11V7a5 5 0 0 1 10 0v4", 72 key: "fwvmzm" 73 } 74 ] 75]; 76const Lock = (0, __TURBOPACK__imported__module__75254__["default"])("lock", __iconNode); 77; 78__turbopack_context__.s([ 79 "Lock", 80 0, 81 Lock 82], 60340); 83}), 8499833, ((__turbopack_context__) => { 85"use strict"; 86 87// Build a news article URL matching WordPress structure: /news/2026/may/article-slug 88// date may be "YYYY-MM-DD" or "YYYY-MM-DDTHH:MM" â always extract just the date part 89function newsUrl(date, slug) { 90 const datePart = date.split("T")[0]; 91 const d = new Date(datePart + "T12:00:00"); 92 const year = d.getFullYear();
93 const month = d.toLocaleString("en-GB", { 94 month: "long" 95 }).toLowerCase(); 96 return `/news/${year}/${month}/${slug}`; 97} 98__turbopack_context__.s([ 99 "newsUrl", 100 0, 101 newsUrl 102]); 103}), 10471128, ((__turbopack_context__) => { 105"use strict"; 106 107var __TURBOPACK__imported__module__43476__ = __turbopack_context__.i(43476); 108var __TURBOPACK__imported__module__57688__ = __turbopack_context__.i(57688); 109var __TURBOPACK__imported__module__22016__ = __turbopack_context__.i(22016); 110var __TURBOPACK__imported__module__60340__ = __turbopack_context__.i(60340); 111var __TURBOPACK__imported__module__94179__ = __turbopack_context__.i(94179); 112var __TURBOPACK__imported__module__99833__ = __turbopack_context__.i(99833); 113"use client"; 114; 115; 116; 117; 118; 119; 120function NewsCard({ article, index = 0, isMember }) { 121 const isLocked = article.membersOnly && !isMember; 122 const href = article.membersOnly ? isMember ? article.href || "/membership/insider" : "/membership/join" : (0, __TURBOPACK__imported__module__99833__["newsUrl"])(article.date, article.slug); 123 return /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])(__TURBOPACK__imported__module__22016__["default"], { 124 href: href, 125 className: "block", 126 children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])("article", { 127 className: "group cursor-pointer bg-bg-card rounded-xl overflow-hidden border border-iron-blue/10 hover:border-iron-blue/30 transition-all duration-300 hover:-translate-y-1", 128 style: { 129 animation: `fadeInUp 0.5s ease-out ${index * 0.1}s both` 130 }, 131 children: [ 132 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])("div", { 133 className: "relative h-48 overflow-hidden", 134 children: [ 135 article.image ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])(__TURBOPACK__imported__module__57688__["default"], { 136 src: article.image, 137 alt: article.title, 138 fill: true, 139 className: `object-cover transition-transform duration-500 ${isLocked ? "blur-sm scale-105" : "group-hover:scale-105"}`, 140 sizes: "(max-width: 768px) 100vw, (max-width: 1200px) 50vw, 33vw", 141 unoptimized: true 142 }) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("div", { 143 className: "absolute inset-0 bg-gradient-to-br from-claret/30 via-bg-card to-iron-blue/20 flex items-center justify-center", 144 children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("span", { 145 className: "text-4xl opacity-20", 146 children: "â½" 147 }) 148 }), 149 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("div", { 150 className: "absolute inset-0 bg-gradient-to-t from-bg-card via-trans
150parent" 151 }), 152 isLocked ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])(__TURBOPACK__imported__module__43476__["Fragment"], { 153 children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])("div", { 154 className: "absolute inset-0 flex flex-col items-center justify-center gap-3 bg-black/40", 155 children: [ 156 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])(__TURBOPACK__imported__module__60340__["Lock"], { 157 className: "w-10 h-10 text-white drop-shadow-lg" 158 }), 159 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("span", { 160 className: "text-white font-black text-sm tracking-widest uppercase drop-shadow-lg text-center px-4", 161 children: "Iron Insider Content" 162 }) 163 ] 164 }) 165 }) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])(__TURBOPACK__imported__module__94179__["Badge"], { 166 className: "absolute top-3 left-3 bg-claret/90 text-white text-[10px] border-0", 167 children: article.category 168 }) 169 ] 170 }), 171 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])("div", { 172 className: "p-5", 173 children: [ 174 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("h3", { 175 className: "font-bold text-white group-hover:text-claret-light transition-colors mb-2 line-clamp-2", 176 children: article.title 177 }), 178 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("p", { 179 className: "text-sm text-gray-400 line-clamp-2 mb-3", 180 children: article.excerpt 181 }), 182 isLocked ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("p", { 183 className: "text-xs text-claret-light font-medium", 184 children: "Members only â join to read" 185 }) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("time", { 186 className: "text-xs text-gray-500", 187 children: new Date(article.date).toLocaleDateString("en-GB", { 188 day: "numeric", 189 month: "long", 190 year: "numeric" 191 }) 192 }) 193 ] 194 }) 195 ] 196 }) 197 }); 198} 199__turbopack_context__.s([ 200 "default", 201 0, 202 NewsCard 203]); 204}), 20537540, ((__turbopack_context__) => { 206"use strict"; 207 208var __TURBOPACK__imported__module__43476__ = __turbopack_context__.i(43476); 209var __TURBOPACK__imported__module__71645__ = __turbopack_context__.i(71645); 210var __TURBOPACK__imported__module__71128__ = __turbopack_context__.i(71128); 211"use client"; 212; 213; 214; 215function NewsSkeleton() { 216 return /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])("div", { 217 className: "bg-bg-card rounded-xl overflow-hidden border border-iron-blue/10", 218 children: [ 219 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("div", { 220 className: "h-48 bg-white/5 animate-pulse" 221 }), 222 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])("div", { 223 className: "p-5 space-y-3", 224 children: [ 225 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("div", { 226 className: "h-4 bg-white/5 rounded animate-pulse w-4/5" 227 }), 228 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("div", { 229 className: "h-3 bg-white/5 rounded animate-pulse" 230 }), 231 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("div", { 232 className: "h-3 bg-white/5 rounded animate-pulse w-2/3" 233 }), 234 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("div", { 235 className: "h-3 bg-white/5 rounded animate-pulse w-1/4 mt-2" 236 }) 237 ] 238 }) 239 ] 240 }); 241} 242const CATEGORIES = [ 243 "All", 244 "Club News", 245 "Match Reports", 246 "Match Previews", 247 "Interviews", 248 "History", 249 "Community", 250 "Commercial", 251 "Events", 252 "Fixture News", 253 "Voice of the Fans", 254 "Videos", 255 "Statistical Preview" 256]; 257const DESKTOP_PAGE = 6; 258const MOBILE_PAGE = 3;
259const articleKey = (a)=>`${a.title}:${a.date}`; 260function NewsFilterClient({ articles: initialArticles, isMember }) { 261 const [activeCategory, setActiveCategory] = (0, __TURBOPACK__imported__module__71645__["useState"])("All"); 262 const [searchQuery, setSearchQuery] = (0, __TURBOPACK__imported__module__71645__["useState"])(""); 263 const [articles, setArticles] = (0, __TURBOPACK__imported__module__71645__["useState"])(initialArticles); 264 const [loading, setLoading] = (0, __TURBOPACK__imported__module__71645__["useState"])(false); 265 const [hasMore, setHasMore] = (0, __TURBOPACK__imported__module__71645__["useState"])(true); 266 const [nextSkip, setNextSkip] = (0, __TURBOPACK__imported__module__71645__["useState"])(initialArticles.length); 267 const [pageSize, setPageSize] = (0, __TURBOPACK__imported__module__71645__["useState"])(DESKTOP_PAGE); 268 const sentinelRef = (0, __TURBOPACK__imported__module__71645__["useRef"])(null); 269 const fetchingRef = (0, __TURBOPACK__imported__module__71645__["useRef"])(false); 270 const shownKeys = (0, __TURBOPACK__imported__module__71645__["useRef"])(new Set(initialArticles.map(articleKey))); 271 (0, __TURBOPACK__imported__module__71645__["useEffect"])(()=>{ 272 setPageSize(window.innerWidth >= 768 ? DESKTOP_PAGE : MOBILE_PAGE); 273 }, []); 274 const fetchMore = (0, __TURBOPACK__imported__module__71645__["useCallback"])(async (cat, skip, append)=>{ 275 if (fetchingRef.current) return; 276 fetchingRef.current = true; 277 if (!append) setLoading(true); 278 try { 279 const params = new URLSearchParams({ 280 limit: String(pageSize) 281 }); 282 if (cat !== "All") params.set("category", cat); 283 if (skip > 0) params.set("skip", String(skip)); 284 const res = await fetch(`/api/news?${params}`); 285 if (res.ok) { 286 const data = await res.json(); 287 const mapped = (data.articles || []).map((n)=>({ 288 id: 0, 289 title: n.title, 290 excerpt: n.excerpt, 291 image: n.image, 292 date: n.date, 293 category: n.category, 294 slug: n.slug, 295 membersOnly: n.membersOnly || undefined 296 })); 297 if (append) { 298 const fresh = mapped.filter((a)=>!shownKeys.current.has(articleKey(a))); 299 fresh.forEach((a)=>shownKeys.current.add(articleKey(a))); 300 if (fresh.length) setArticles((prev)=>[ 301 ...prev, 302 ...fresh 303 ]); 304 setNextSkip(skip + mapped.length); 305 setHasMore(mapped.length >= pageSize); 306 } else { 307 shownKeys.current = new Set(mapped.map(articleKey)); 308 setArticles(mapped); 309 setNextSkip(mapped.length); 310 setHasMore(mapped.length >= pageSize); 311 } 312 } 313 } catch {} 314 setLoading(false); 315 fetchingRef.current = false; 316 }, [ 317 pageSize 318 ]); 319 // Reset when category changes 320 (0, __TURBOPACK__imported__module__71645__["useEffect"])(()=>{ 321 setSearchQuery(""); 322 setHasMore(true); 323 if (activeCategory === "All") { 324 setArticles(initialArticles); 325 setNextSkip(initialArticles.length); 326 setHasMore(true); 327 } else { 328 fetchMore(activeCategory, 0, false); 329 } 330 }, [ 331 activeCategory, 332 initialArticles, 333 fetchMore 334 ]); 335 // Scroll-based load more via IntersectionObserver 336 (0, __TURBOPACK__imported__module__71645__["useEffect"])(()=>{ 337 const sentinel = sentinelRef.current; 338 if (!sentinel || !hasMore || searchQuery) return; 339 const observer = new IntersectionObserver(([entry])=>{ 340 if (entry.isIntersecting) fetchMore(activeCategory, nextSkip, true); 341 }, { 342 rootMargin: "300px" 343 }); 344 observer.observe(sentinel); 345 return ()=>observer.disconnect(); 346 }, [ 347 hasMore, 348 nextSkip, 349 activeCategory, 350 searchQuery, 351 fetchMore 352 ]); 353 const displayed = searchQuery.trim() ? articles.filter((a)=>{ 354 const q = searchQuery.toLowerCase(); 355 return a.title.toLowerCase().includes(q) || a.excerpt.toLowerCase().includes(q); 356 }) : articles; 357 return /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])(__TURBOPACK__imported__module__43476__["Fragment"], { 358 children: [ 359 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])("div", { 360 className: "space-y-4 mb-10", 361 style: { 362 animation: "fadeInUp 0.5s ease-out 0.2s both" 363 }, 364 children: [ 365 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])("div", { 366 className: "relative", 367 children: [ 368 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("svg", { 369 className: "absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-gray-500", 370 fill: "none",
371 viewBox: "0 0 24 24", 372 stroke: "currentColor", 373 children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("path", { 374 strokeLinecap: "round", 375 strokeLinejoin: "round", 376 strokeWidth: 2, 377 d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" 378 }) 379 }), 380 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("input", { 381 type: "text", 382 value: searchQuery, 383 onChange: (e)=>setSearchQuery(e.target.value), 384 placeholder: "Search news articles...", 385 className: "w-full pl-10 pr-4 py-2.5 bg-bg-card border border-iron-blue/10 rounded-xl text-sm text-white placeholder:text-gray-500 focus:outline-none focus:border-iron-blue/30 transition-colors" 386 }), 387 searchQuery && /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("button", { 388 onClick: ()=>setSearchQuery(""), 389 className: "absolute right-3 top-1/2 -translate-y-1/2 text-gray-500 hover:text-white transition-colors", 390 children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("svg", { 391 className: "w-4 h-4", 392 fill: "none",
393 viewBox: "0 0 24 24", 394 stroke: "currentColor", 395 children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("path", { 396 strokeLinecap: "round", 397 strokeLinejoin: "round", 398 strokeWidth: 2, 399 d: "M6 18L18 6M6 6l12 12" 400 }) 401 }) 402 }) 403 ] 404 }), 405 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("div", { 406 className: "flex flex-wrap gap-2", 407 children: CATEGORIES.map((cat)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("button", { 408 onClick: ()=>setActiveCategory(cat), 409 className: `px-4 py-2 rounded-lg text-sm font-medium transition-all duration-200 ${activeCategory === cat ? "bg-claret text-white" : "bg-bg-card text-gray-400 border border-iron-blue/10 hover:border-iron-blue/30 hover:text-white"}`, 410 children: cat 411 }, cat)) 412 }), 413 (activeCategory !== "All" || searchQuery) && /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])("div", { 414 className: "flex items-center gap-2 text-xs text-gray-500", 415 children: [ 416 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])("span", { 417 children: [ 418 displayed.length, 419 " article", 420 displayed.length !== 1 ? "s" : "", 421 activeCategory !== "All" && ` in ${activeCategory}`, 422 searchQuery && ` matching "${searchQuery}"` 423 ] 424 }), 425 (activeCategory !== "All" || searchQuery) && /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("button", { 426 onClick: ()=>{
427 setActiveCategory("All"); 428 setSearchQuery(""); 429 }, 430 className: "text-iron-blue hover:text-white transition-colors", 431 children: "Clear filters" 432 }) 433 ] 434 }) 435 ] 436 }), 437 loading ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])("div", { 438 className: "flex items-center justify-center py-16", 439 children: [ 440 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("div", { 441 className: "w-6 h-6 border-2 border-iron-blue border-t-transparent rounded-full animate-spin" 442 }), 443 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("span", { 444 className: "text-sm text-gray-500 ml-3", 445 children: "Loading..." 446 }) 447 ] 448 }) : displayed.length === 0 ? /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("div", { 449 className: "text-center py-16", 450 children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("p", { 451 className: "text-gray-500 text-lg", 452 children: searchQuery ? `No articles matching "${searchQuery}"` : "No articles found in this category." 453 }) 454 }) : /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])(__TURBOPACK__imported__module__43476__["Fragment"], { 455 children: /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])("div", { 456 className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6", 457 children: [ 458 displayed.map((article, i)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])(__TURBOPACK__imported__module__71128__["default"], { 459 article: article, 460 index: i < pageSize ? i : 0, 461 isMember: isMember 462 }, article.id || article.slug || `news-${i}`)), 463 hasMore && !searchQuery && /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsxs"])(__TURBOPACK__imported__module__43476__["Fragment"], { 464 children: [ 465 /*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])("div", { 466 ref: sentinelRef, 467 className: "col-span-full h-0" 468 }), 469 Array.from({ 470 length: Math.min(pageSize, 3) 471 }).map((_, i)=>/*#__PURE__*/ (0, __TURBOPACK__imported__module__43476__["jsx"])(NewsSkeleton, {}, `skel-${nextSkip}-${i}`)) 472 ] 473 }) 474 ] 475 }) 476 }) 477 ] 478 }); 479} 480__turbopack_context__.s([ 481 "default", 482 0, 483 NewsFilterClient 484]); 485}), 486]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.